"; return $action; } function do_action($id_empr) { global $pmb_gestion_amende, $lang, $include_path; global $finance_recouvrement_lecteur_statut; $action="action_".$id_empr; global $$action,$msg,$charset,$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 zéro, alors changement $quatre=false; if ($act!=0) { //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 "; 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"]; 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"]; 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"]; 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=mysql_query($requete); $r=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=mysql_query($requete); $req_date_relance=""; $i=1; while($log = 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"; 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=mysql_query($requete); $prix=0; if($r=mysql_fetch_object($resultat)) { if(!$prix=1*($r->expl_prix)) $prix=1*($r->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"; 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"; mysql_query($requete); } } //Supression du pret $requete="delete from pret where pret_idexpl=".$params["id_expl"]; 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"]; mysql_query($requete); $requete="update empr set empr_msg=trim(concat(empr_msg,' ','".addslashes($msg["relance_recouvrement"])."')) where id_empr=".$id_empr; 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.")"; 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)"; // 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){ if ($id_compte) { $compte=new comptes($id_compte); //Enregistrement transaction $cpte->record_transaction("",$the_frais,-1,sprintf($msg["relance_frais_relance_level"],$niveau_min)); } } } } function send_mail($id_empr, $relance) { global $pmb_gestion_devise,$msg,$charset; global $biblio_name,$biblio_email,$biblio_phone, $PMBuseremailbcc; // l'objet du mail $var = "mailretard_".$relance."objet"; global $$var; eval ("\$objet=\"".$$var."\";"); // la formule de politesse du bas (le signataire) $var = "mailretard_".$relance."fdp"; global $$var; eval ("\$fdp=\"".$$var."\";"); // le texte après la liste des ouvrages en retard $var = "mailretard_".$relance."after_list"; global $$var; eval ("\$after_list=\"".$$var."\";"); // le texte avant la liste des ouvrges en retard $var = "mailretard_".$relance."before_list"; global $$var; eval ("\$before_list=\"".$$var."\";"); // le "Madame, Monsieur," ou tout autre truc du genre "Cher adhérent," $var = "mailretard_".$relance."madame_monsieur"; global $$var; eval ("\$madame_monsieur=\"".$$var."\";"); if($madame_monsieur) $texte_mail.=$madame_monsieur."\r\n\r\n"; if($before_list) $texte_mail.=$before_list."\r\n\r\n"; //Récupération des exemplaires $rqt = "select pret_idempr, expl_id, expl_cb from pret, exemplaires where pret_idempr='".$id_empr."' and pret_retour < curdate() and pret_idexpl=expl_id order by pret_date " ; $req = mysql_query($rqt) or die('Erreur SQL !
'.$rqt.'
'.mysql_error()); $i=0; $total_amendes=0; //Calcul des frais de relance $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<0) $frais_relance=-$frais_relance; else $frais_relance=0; } while ($data = mysql_fetch_array($req)) { //Calcul des amendes $valeur=0; $amende=new amende($data["pret_idempr"]); $amd=$amende->get_amende($data["expl_id"]); if ($amd["valeur"]) { $valeur=$amd["valeur"]; $total_amendes+=$valeur; } /* Récupération des infos exemplaires et prêt */ $requete = "SELECT notices_m.notice_id as m_id, notices_s.notice_id as s_id, expl_cb, pret_date, pret_retour, tdoc_libelle, trim(concat(ifnull(notices_m.tit1,''),ifnull(notices_s.tit1,''),' ',ifnull(bulletin_numero,''), if (mention_date, concat(' (',mention_date,')') ,''))) as tit, "; $requete.= " date_format(pret_date, '".$msg["format_date"]."') as aff_pret_date, "; $requete.= " date_format(pret_retour, '".$msg["format_date"]."') as aff_pret_retour, "; $requete.= " IF(pret_retour>sysdate(),0,1) as retard, notices_m.tparent_id, notices_m.tnvol " ; $requete.= "FROM (((exemplaires LEFT JOIN notices AS notices_m ON expl_notice = notices_m.notice_id ) LEFT JOIN bulletins ON expl_bulletin = bulletins.bulletin_id) LEFT JOIN notices AS notices_s ON bulletin_notice = notices_s.notice_id), docs_type , pret "; $requete.= "WHERE expl_cb='".addslashes($data['expl_cb'])."' and expl_typdoc = idtyp_doc and pret_idexpl = expl_id "; $res = mysql_query($requete); $expl = mysql_fetch_object($res); $responsabilites=array() ; $header_aut = "" ; $responsabilites = get_notice_authors(($expl->m_id+$expl->s_id)) ; $as = array_search ("0", $responsabilites["responsabilites"]) ; if ($as!== FALSE && $as!== NULL) { $auteur_0 = $responsabilites["auteurs"][$as] ; $auteur = new auteur($auteur_0["id"]); $header_aut .= $auteur->isbd_entry; } else { $aut1_libelle=array(); $as = array_keys ($responsabilites["responsabilites"], "1" ) ; for ($i = 0 ; $i < count($as) ; $i++) { $indice = $as[$i] ; $auteur_1 = $responsabilites["auteurs"][$indice] ; $auteur = new auteur($auteur_1["id"]); $aut1_libelle[]= $auteur->isbd_entry; } $header_aut .= implode (", ",$aut1_libelle) ; } $header_aut ? $auteur=" / ".$header_aut : $auteur=""; // récupération du titre de série $tit_serie=""; if ($expl->tparent_id && $expl->m_id) { $parent = new serie($expl->tparent_id); $tit_serie = $parent->name; if ($expl->tnvol) $tit_serie .= ', '.$expl->tnvol; } if ($tit_serie) { $expl->tit = $tit_serie.'. '.$expl->tit; } $texte_mail.=$expl->tit.$auteur."\r\n"; $texte_mail.=" -".sprintf($msg["relance_mail_retard_dates"],$expl->aff_pret_date,$expl->aff_pret_retour); if ($valeur) $texte_mail.=" ".sprintf($msg["relance_mail_retard_amende"],round($valeur,2)." ".$pmb_gestion_devise); $texte_mail.="\r\n"; $i++; } if ($total_amendes) $texte_mail.="\r\n".sprintf($msg["relance_mail_retard_total_amendes"],$total_amendes." ".$pmb_gestion_devise); if ($frais_relance) $texte_mail.="\r\n".$msg["relance_lettre_retard_frais_relance"].comptes::format_simple($frais_relance); if (($frais_relance)||($valeur)) $texte_mail.="\r\n".$msg["relance_lettre_retard_total_du"].comptes::format_simple($valeur+$frais_relance); $texte_mail.="\r\n\r\n"; if($after_list) $texte_mail.=$after_list."\r\n\r\n"; if($fdp) $texte_mail.=$fdp."\r\n\r\n"; $texte_mail.=mail_bloc_adresse(); //Si mail de rappel affecté au responsable du groupe $requete="select id_groupe,resp_groupe from groupe,empr_groupe where id_groupe=groupe_id and empr_id=$id_empr and resp_groupe and mail_rappel limit 1"; $res=mysql_query($requete); /* Récupération du nom, prénom et mail du lecteur destinataire */ if(mysql_num_rows($res) > 0) { $requete="select id_empr, empr_mail, empr_nom, empr_prenom from empr where id_empr='".mysql_result($res, 0,1)."'"; $result=mysql_query($requete); $coords_dest=mysql_fetch_object($result); } else { $requete="select id_empr, empr_mail, empr_nom, empr_prenom from empr where id_empr=$id_empr"; $res=mysql_query($requete); $coords_dest=mysql_fetch_object($res); } /* Récupération du nom, prénom et mail du lecteur concerné */ $requete="select id_empr, empr_mail, empr_nom, empr_prenom, empr_cb from empr where id_empr=$id_empr"; $res=mysql_query($requete); $coords=mysql_fetch_object($res); //remplacement nom et prenom $texte_mail=str_replace("!!empr_name!!", $coords->empr_nom,$texte_mail); $texte_mail=str_replace("!!empr_first_name!!", $coords->empr_prenom,$texte_mail); // function mailpmb($to_nom="", $to_mail, $obj="", $corps="", $from_name="", $from_mail, $headers, $copie_CC="", $copie_BCC="", $faire_nl2br=0, $pieces_jointes=array()) { $res_envoi=mailpmb($coords_dest->empr_prenom." ".$coords_dest->empr_nom, $coords_dest->empr_mail,$objet." : ".$coords->empr_prenom." ".mb_strtoupper($coords->empr_nom,$charset)." (".$coords->empr_cb.")",$texte_mail,$biblio_name, $biblio_email,"Content-Type: text/plain; charset=\"$charset\"\n", "", $PMBuseremailbcc, 1); return $res_envoi; } function print_relance($id_empr,$mail=true) { global $mailretard_priorite_email, $mailretard_priorite_email_3; global $dbh,$charset, $msg, $pmb_gestion_financiere, $pmb_gestion_amende; global $mail_sended; $mail_sended=0; $not_mail=0; if (($pmb_gestion_financiere)&&($pmb_gestion_amende)) { $req="delete from cache_amendes where id_empr=".$id_empr; mysql_query($req); $amende=new amende($id_empr); $level=$amende->get_max_level(); $niveau_min=$level["level_min"]; $id_expl=$level["level_min_id_expl"]; $total_amende = $amende->get_total_amendes(); } //Si mail de rappel affecté au groupe, on envoi au responsable $requete="select id_groupe,resp_groupe from groupe,empr_groupe where id_groupe=groupe_id and empr_id=$id_empr and resp_groupe and mail_rappel limit 1"; $res=mysql_query($requete); if(mysql_num_rows($res) > 0) { $requete="select empr_mail from empr where id_empr='".mysql_result($res,0,1)."'"; $res=mysql_query($requete); if (@mysql_num_rows($res)) { list($empr_mail)=mysql_fetch_row($res); } } else { $requete="select empr_mail from empr where id_empr=$id_empr"; $resultat=mysql_query($requete); if (@mysql_num_rows($resultat)) { list($empr_mail)=mysql_fetch_row($resultat); } } if ($niveau_min) { //Si c'est un mail if (((($mailretard_priorite_email==1)||($mailretard_priorite_email==2))&&($empr_mail))&&( ($niveau_min<3)||($mailretard_priorite_email_3) )&&($mail)) { if (send_mail($id_empr,$niveau_min)) { $requete="update pret set printed=1 where pret_idexpl=".$id_expl; mysql_query($requete,$dbh); $mail_sended=1; } } else { $requete="update pret set printed=2 where pret_idexpl=".$id_expl; mysql_query($requete,$dbh); $not_mail=1; //Débit du compte lecteur /*$frais="finance_relance_".$niveau_min; global $$frais; if ($$frais) { $id_compte=comptes::get_compte_id_from_empr($id_empr,2); if ($id_compte) { $cpte=new comptes($id_compte); $cpte->record_transaction("",$$frais,-1,sprintf($msg["relance_frais_relance_level"],$niveau_min)); } }*/ } } $req="delete from cache_amendes where id_empr=".$id_empr; mysql_query($req); //On loggue les infos de la lettre $niveau_courant = $niveau_min; if($niveau_courant){ $niveau_suppose = $level["level_normal"]; $cpt_id=comptes::get_compte_id_from_empr($id_empr,2); $cpt=new comptes($cpt_id); $solde=$cpt->update_solde(); $frais_relance=$cpt->summarize_transactions("","",0,$realisee=-1); if ($frais_relance<0) $frais_relance=-$frais_relance; else $frais_relance=0; $req="insert into log_retard (niveau_reel,niveau_suppose,amende_totale,frais,idempr,log_printed,log_mail) values('".$niveau_courant."','".$niveau_suppose."','".$total_amende."','".$frais_relance."','".$id_empr."', '".$not_mail."', '".$mail_sended."')"; mysql_query($req,$dbh); $id_log_ret = mysql_insert_id(); $reqexpl = "select pret_idexpl as expl from pret where pret_retour< CURDATE() and pret_idempr=$id_empr"; $resexple=mysql_query($reqexpl,$dbh); while(($liste = mysql_fetch_object($resexple))){ $dates_resa_sql = " date_format(pret_date, '".$msg["format_date"]."') as aff_pret_date, date_format(pret_retour, '".$msg["format_date"]."') as aff_pret_retour " ; $requete = "SELECT notices_m.notice_id as m_id, notices_s.notice_id as s_id, pret_idempr, expl_id, expl_cb,expl_cote, pret_date, pret_retour, tdoc_libelle, section_libelle, location_libelle, trim(concat(ifnull(notices_m.tit1,''),ifnull(notices_s.tit1,''),' ',ifnull(bulletin_numero,''), if (mention_date!='', concat(' (',mention_date,')') ,''))) as tit, ".$dates_resa_sql.", " ; $requete.= " notices_m.tparent_id, notices_m.tnvol " ; $requete.= " FROM (((exemplaires LEFT JOIN notices AS notices_m ON expl_notice = notices_m.notice_id ) LEFT JOIN bulletins ON expl_bulletin = bulletins.bulletin_id) LEFT JOIN notices AS notices_s ON bulletin_notice = notices_s.notice_id), docs_type, docs_section, docs_location, pret "; $requete.= " WHERE expl_id='".$liste->expl."' and expl_typdoc = idtyp_doc and expl_section = idsection and expl_location = idlocation and pret_idexpl = expl_id "; $res_det_expl = mysql_query($requete) ; $expl = mysql_fetch_object($res_det_expl); if (($pmb_gestion_financiere)&&($pmb_gestion_amende)) { $amd = $amende->get_amende($liste->expl); } $req_ins="insert into log_expl_retard (titre,expl_id,expl_cb,date_pret,date_retour,amende,num_log_retard) values('".addslashes($expl->tit)."','".$expl->expl_id."','".$expl->expl_cb."','".$expl->pret_date."','".$expl->pret_retour."','".$amd["valeur"]."','".$id_log_ret."')"; mysql_query($req_ins,$dbh); } } return $not_mail; } function filter_niveau($liste_ids,$champ,$selected="",$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=mysql_query($requete); if (($res_id)&&(mysql_num_rows($res_id))) { while ($r=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.. $all_level=array(0); } for ($i=0;$i<=count($liste_ids)-1;$i++) { if (($selected)&&(is_array($selected))) { $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.="