t_fields)) { foreach ($p_perso->t_fields as $id=>$field) { if($field["FILTERS"]) { $filter_p_perso.= ",#p".$id; } } } $filter_list = new filter_list("empr","empr_list","b,n,c,cs,g","c".$localisation.",13,2,3".$filter_p_perso.($empr_filter_relance_rows?",".$empr_filter_relance_rows:""),"n,g"); /* * Géré par la classe list_readers_relance_ui if ($pmb_lecteurs_localises) { $lo="f".$filter_list->fixedfields["l"]["ID"]; global ${$lo}; if (!${$lo}) { $tableau=array(); $tableau[0]=$deflt2docs_location; ${$lo}=$tableau; } }*/ $filter_list->fixedcolumns="b,n,c"; $filter_list->original_query="select id_empr,count(pret_idexpl) as empr_nb from empr,pret where pret_retourmultiple=1; $t=array(); $t["table"]=""; $t["row_even"]="even"; $t["row_odd"]="odd"; $t["cols"][0]=""; $filter_list->css=$t; $filter_list->select_original="table_filter_tempo.empr_nb,empr_mail"; $filter_list->original_query="select id_empr,count(pret_idexpl) as empr_nb from empr,pret where pret_retourfrom_original=""; return $filter_list; } public static function get_action($id_empr,$niveau,$niveau_normal) { global $msg, $pmb_recouvrement_auto; $action=" "; return $action; } public static function do_action($id_empr) { global $pmb_gestion_amende, $lang, $include_path; global $finance_recouvrement_lecteur_statut; $action="action_".$id_empr; global ${$action},$msg,$finance_statut_perdu; $act=${$action}; //Récupération du solde du compte $frais_relance=0; $id_compte=comptes::get_compte_id_from_empr($id_empr,2); if ($id_compte) { $cpte=new comptes($id_compte); $frais_relance=$cpte->summarize_transactions("","",0,$realisee=-1); if (($frais_relance)&&($frais_relance<0)) { $frais_relance=-$frais_relance; } else $frais_relance=0; } //Si action différent de -1, alors changement $quatre=false; if ($act!=-1) { //Récupération de la liste des prêts $amende=new amende($id_empr); // on efface le cache pour qu'il soit remis à jour au prochain accès $req="delete from cache_amendes where id_empr=$id_empr "; pmb_mysql_query($req); $montant_total=0; for ($j=0; $jt_id_expl); $j++) { $params=$amende->t_id_expl[$j]; //Si c'est juste un changement de niveau if ($act<4) { //Si il y a attente de changement d'état if ($params["amende"]["niveau_relance"]<$params["amende"]["niveau"]) { //Si le niveau attendu est supérieur ou égal au niveau demandé if ($params["amende"]["niveau"]>=$act) { //On passe au niveau demandé $niveau=$act; } else { //Sinon on passe au niveau prévu $niveau=$params["amende"]["niveau"]; } //Enregistrement du changement de niveau $requete="update pret set niveau_relance=$niveau, date_relance=now(), printed=0 where pret_idempr=$id_empr and pret_idexpl=".$params["id_expl"]; pmb_mysql_query($requete); } //Si le niveau supposé est inférieur au dernier niveau validé (ex : prolongations,...), on peut revenir.. if ($params["amende"]["niveau"]<$params["amende"]["niveau_relance"]) { if ($params["amende"]["niveau_relance"]>=$act) { //On passe au niveau demandé $niveau=$act; } else { //Sinon on passe au niveau prévu $niveau=$params["amende"]["niveau"]; } //Enregistrement du changement de niveau $requete="update pret set niveau_relance=$niveau, date_relance=now(), printed=0 where pret_idempr=$id_empr and pret_idexpl=".$params["id_expl"]; pmb_mysql_query($requete); } } else { //Sinon, c'est plus grave, on passe en recouvrement !! $quatre=true; //Si niveau prévu = 4 if ($params["amende"]["niveau"]==4) { //Passage des ouvrages en statut perdu $requete="update exemplaires set expl_statut=$finance_statut_perdu where expl_id=".$params["id_expl"]; pmb_mysql_query($requete); //Débit du compte lecteur + tarif des relances $debit=$amende->get_amende($params["id_expl"]); $debit=$debit["valeur"]; $id_compte=comptes::get_compte_id_from_empr($id_empr,2); if ($id_compte) { //&&($debit) $compte=new comptes($id_compte); //Enregistrement transaction $id_transaction=$compte->record_transaction("",$debit,-1,sprintf($msg["relance_recouvr_transaction"],$params["id_expl"]),0); //Validation $compte->validate_transaction($id_transaction); $montant_total+=$debit; $requete="select pret_date from pret where pret_idexpl=".$params["id_expl"]; $resultat=pmb_mysql_query($requete); $r=pmb_mysql_fetch_object($resultat); $req_pret_date= ", date_pret='".$r->pret_date."' "; $requete="select log.date_log as date_log, log.niveau_reel as niv from log_expl_retard as expl,log_retard as log where expl.num_log_retard=log.id_log and log.idempr=$id_empr and expl.expl_id=".$params["id_expl"] ." order by log.date_log limit 3"; $res=pmb_mysql_query($requete); $req_date_relance=""; $i=1; while($log = pmb_mysql_fetch_object($res)){ $req_date_relance.= ", date_relance".$i++."='".$log->date_log."' "; } $requete="insert into recouvrements set empr_id=$id_empr, id_expl=".$params["id_expl"].", date_rec= now(), libelle='',recouvr_type=0, montant='$debit' $req_pret_date $req_date_relance"; pmb_mysql_query($requete); // Essayer de retrouver le prix de l'exemplaire $requete="select expl_prix, prix from exemplaires, notices where (notice_id=expl_notice or notice_id=expl_bulletin) and expl_id =".$params["id_expl"]; $resultat=pmb_mysql_query($requete); $prix=0; if ($r = pmb_mysql_fetch_object($resultat)) { $tmp_expl_prix = number_format((float) str_replace(',', '.', $r->expl_prix), 2, '.', ''); $tmp_prix = number_format((float) str_replace(',', '.', $r->prix), 2, '.', ''); if (empty($r->expl_prix) || empty($tmp_expl_prix) || $tmp_expl_prix == "0.00") { $prix = $tmp_prix; } else { $prix = $tmp_expl_prix; } } $requete="insert into recouvrements set empr_id=$id_empr, id_expl=".$params["id_expl"].", date_rec=now(), libelle='', recouvr_type=1, montant='$prix' $req_pret_date $req_date_relance"; pmb_mysql_query($requete); // on modifie le status du lecteur si demandé if($finance_recouvrement_lecteur_statut){ $requete="update empr set empr_statut=$finance_recouvrement_lecteur_statut where id_empr=$id_empr"; pmb_mysql_query($requete); } } //Supression du pret $requete="delete from pret where pret_idexpl=".$params["id_expl"]; pmb_mysql_query($requete); $requete="update exemplaires set expl_note=concat(expl_note,' ','".$msg["relance_non_rendu_expl"]."'),expl_lastempr='".$id_empr."' where expl_id=".$params["id_expl"]; pmb_mysql_query($requete); $requete="select count(*) from empr where id_empr=".$id_empr." and empr_msg like '%".addslashes($msg["relance_recouvrement"])."%'"; $resultat=pmb_mysql_query($requete); $msg_already_exists = pmb_mysql_result($resultat, 0, 0); if(!$msg_already_exists) { $requete="update empr set empr_msg=trim(concat(empr_msg,' ','".addslashes($msg["relance_recouvrement"])."')) where id_empr=".$id_empr; pmb_mysql_query($requete); } } } //Ajout solde du compte amendes if ($quatre) { if ($frais_relance) { $requete="insert into recouvrements (empr_id,id_expl,date_rec,libelle,montant) values($id_empr,0,now(),'".$msg["relance_frais_relance"]."',".$frais_relance.")"; pmb_mysql_query($requete); $montant_total+=$frais_relance; } //Passage en perte pour la bibliothèque //Débit sur le compte 0 //if ($montant_total) { // $requete="insert into transactions (compte_id,user_id,user_name,machine,date_enrgt,date_prevue,date_effective,montant,sens,realisee,commentaire,encaissement) values(0,$PMBuserid,'".$PMBusername."','".$_SERVER["REMOTE_ADDR"]."', now(), now(), now(), ".($montant_total*1).", -1, 1,'Recouvrement lecteur : ".$params["id_expl"]."',0)"; // pmb_mysql_query($requete); //} } } //Traitement des frais $niveau_min=$act; $the_frais = 0; if ($pmb_gestion_amende == 1) { $frais="finance_relance_".$niveau_min; global ${$frais}; $the_frais = ${$frais}; } else { $quota_name = ""; switch ($niveau_min) { case 1: $quota_name="AMENDERELANCE_FRAISPREMIERERELANCE"; break; case 2: $quota_name="AMENDERELANCE_FRAISDEUXIEMERELANCE"; break; case 3: $quota_name="AMENDERELANCE_FRAISTROISIEMERELANCE"; break; default: break; } $qt = new quota($quota_name, "$include_path/quotas/own/$lang/finances.xml"); $struct["READER"] = $id_empr; $the_frais = $qt -> get_quota_value($struct); if ($the_frais == -1) $the_frais = 0; } if($the_frais){ if ($id_compte) { $compte=new comptes($id_compte); //Enregistrement transaction $cpte->record_transaction("",$the_frais,-1,sprintf($msg["relance_frais_relance_level"],$niveau_min)); } } } } public static function filter_niveau($liste_ids,$champ,$selected = array(),$sort=false) { global $all_level,$late_ids; $ret=""; $t=array(); $v=array(); //Recherche des lecteurs en retard if (!$late_ids) { $requete="select distinct pret_idempr from pret where pret_retour< CURDATE() and pret_idempr in (".implode(",",$liste_ids).")"; $res_id=pmb_mysql_query($requete); if (($res_id)&&(pmb_mysql_num_rows($res_id))) { while ($r=pmb_mysql_fetch_object($res_id)) { $late_ids[$r->pret_idempr]=1; } } else $late_ids=array(); } for ($i=0;$i<=count($liste_ids)-1;$i++) { if (isset($late_ids[$liste_ids[$i]])) { $amende=new amende($liste_ids[$i]); $level=$amende->get_max_level(); $t[$liste_ids[$i]]=$level[$champ]; $v[$liste_ids[$i]]=$level; } } if ($all_level) { $liste_ids=array_keys($all_level); //afin de gérer les filtres combinés.. if (($selected)&&(is_array($selected))) { if (!(count($selected) == 1 && ($selected[0] == -1))) { $all_level=array(0); } } } for ($i=0;$i<=count($liste_ids)-1;$i++) { if (($selected)&&(is_array($selected)) && !empty($v[$liste_ids[$i]])) { $as=array_search($v[$liste_ids[$i]][$champ],$selected); if (($as!==FALSE)&&($as!==NULL)) $all_level[$liste_ids[$i]]=$v[$liste_ids[$i]]; } } if ($sort==true) sort($t[$champ],SORT_NUMERIC); $result=array_unique($t); sort($result,SORT_NUMERIC); for ($i=0;$i<=count($result)-1;$i++) { if ($result[$i]!=0) { $ret.=""; } } return $ret; } } // fin de déclaration de la classe relance