do_retour($cb_doc); Fonction do_retour Effectue le retour d'un document emprunté input: $cb_doc Cb du document output: status 0 : pas d'erreur, le retour est effectué -1 Erreur. Voir message d'erreur (error_message) error_message Message de l'erreur retour_message libelle: Titre du document type_doc location section empr_nom empr_prenom empr_cb ... */ class retour { public $expl_cb; public $msg_293; public $msg_652; public $msg_294; public $msg_rfid_retour_emprunteur_titre; public $expl_id; public $error_message; public $status ; public $expl_section; public $expl_location; public $expl_typdoc; public $expl_cote; public $expl_statut; public $expl_codestat; public $expl_owner; public $libelle; public $expl_note; public $expl_comment; public $expl_bulletin; public $expl_notice; public $lastempr_cb; public $lastempr_nom; public $lastempr_prenom; public $pret_date; public $empr_cp; public $empr_nom; public $empr_prenom; public $empr_pays; public $empr_codestat; public $empr_msg; public $empr_date_adhesion; public $empr_date_expiration; public $groupes; public $empr_ville; public $empr_prof; public $empr_year; public $empr_categ; public $empr_sexe; public $empr_statut; public $empr_location; public $type_abt; public $pret_arc_id; public $codestat; public $pret_idempr; public $pret_idexpl; public $pret_retour; public $aff_pret_date; public $aff_pret_retour; public $id_resa; public $resa_idempr; public $resa_idnotice; public $resa_idbulletin; public $resa_date; public $resa_date_fin; public $aff_resa_date; public $aff_resa_date_fin; public $resa_cb; public $cb_reservataire; public $nom_reservataire; public $prenom_reservataire; public $id_reservataire; public $url_reservation; public $retour_message; // constructeur public function __construct() { global $include_path; global $msg; $this->expl_cb = ''; // Messages utiles au traitement javascript $this->msg_293=$msg[293]; $this->msg_652=$msg[652]; $this->msg_294=$msg[294]; $this->msg_rfid_retour_emprunteur_titre=$msg['rfid_retour_emprunteur_titre']; } public function check_barcode($cb) { global $dbh; global $msg; $query = "select * from exemplaires where expl_cb='$cb' "; $result = pmb_mysql_query($query, $dbh); $expl = pmb_mysql_fetch_object($result); if(!$expl->expl_id) { // exemplaire inconnu $this->error_message=$msg[367]; $this->status=-1; return -1; } else { $this->expl_id = $expl->expl_id; $this->expl_cb = $expl->expl_cb; $this->expl_section = $expl->expl_section; $this->expl_location = $expl->expl_location; $this->expl_typdoc = $expl->expl_typdoc; $this->nbparts = $expl->expl_nbparts; $this->expl_cote = $expl->expl_cote; $this->expl_comment=$expl->expl_comment; // récupération des infos exemplaires if ($expl->expl_notice) { $notice = new mono_display($expl->expl_notice, 0); $this->libelle = $notice->header_texte; $this->expl_notice=$expl->expl_notice; } else { $bulletin = new bulletinage_display($expl->expl_bulletin); $this->libelle = $bulletin->display ; $this->expl_bulletin=$expl->expl_bulletin; } $pos=strpos($this->libelle,'libelle = substr($this->libelle,0,strpos($this->libelle,'expl_lastempr) { // récupération des infos emprunteur $query_last_empr = "select empr_cb, empr_nom, empr_prenom from empr where id_empr='".$expl->expl_lastempr."' "; $result_last_empr = pmb_mysql_query($query_last_empr, $dbh); if(pmb_mysql_num_rows($result_last_empr)) { $last_empr = pmb_mysql_fetch_object($result_last_empr); $this->lastempr_cb = $last_empr->empr_cb; $this->lastempr_nom = $last_empr->empr_nom; $this->lastempr_prenom = $last_empr->empr_prenom; } } } return 0; } // mise à jour des stat des infos du prêt public function maj_stat_pret () { global $dbh; global $msg; global $dbh, $empr_archivage_prets, $empr_archivage_prets_purge; $query = "update pret_archive set "; $query .= "arc_debut='".$this->pret_date."', "; $query .= "arc_fin=now(), "; if ($empr_archivage_prets) $query .= "arc_id_empr='".addslashes($this->id_empr)."', "; $query .= "arc_empr_cp='". addslashes($this->empr_cp) ."', "; $query .= "arc_empr_ville='". addslashes($this->empr_ville) ."', "; $query .= "arc_empr_prof='". addslashes($this->empr_prof) ."', "; $query .= "arc_empr_year='". addslashes($this->empr_year) ."', "; $query .= "arc_empr_categ='". $this->empr_categ ."', "; $query .= "arc_empr_codestat='". $this->empr_codestat ."', "; $query .= "arc_empr_sexe='". $this->empr_sexe ."', "; $query .= "arc_empr_statut='". $this->empr_statut ."', "; $query .= "arc_empr_location='". $this->empr_location ."', "; $query .= "arc_type_abt='". $this->type_abt ."', "; $query .= "arc_expl_typdoc='". $this->expl_typdoc ."', "; $query .= "arc_expl_id='". $this->expl_id ."', "; $query .= "arc_expl_notice='". $this->expl_notice ."', "; $query .= "arc_expl_bulletin='". $this->expl_bulletin ."', "; $query .= "arc_expl_cote='". addslashes($this->expl_cote) ."', "; $query .= "arc_expl_statut='". $this->expl_statut ."', "; $query .= "arc_expl_location='". $this->expl_location ."', "; $query .= "arc_expl_section='". $this->expl_section ."', "; $query .= "arc_expl_codestat='". $this->expl_codestat ."', "; $query .= "arc_expl_owner='". $this->expl_owner ."', "; $query .= "arc_niveau_relance='". $this->niveau_relance ."', "; $query .= "arc_date_relance='". $this->date_relance ."', "; $query .= "arc_printed='". $this->printed ."', "; $query .= "arc_cpt_prolongation='". $this->cpt_prolongation ."' "; $query .= " where arc_id='".$this->pret_arc_id."' "; $res = pmb_mysql_query($query, $dbh); // purge des vieux trucs if ($empr_archivage_prets_purge) { //on ne purge qu'une fois par session et par jour if (!isset($_SESSION["last_empr_archivage_prets_purge_day"]) || ($_SESSION["last_empr_archivage_prets_purge_day"] != date("m.d.y"))) { pmb_mysql_query("update pret_archive set arc_id_empr=0 where arc_id_empr!=0 and date_add(arc_fin, interval $empr_archivage_prets_purge day) < sysdate()") or die(pmb_mysql_error()."
"."update pret_archive set arc_id_empr=0 where arc_id_empr!=0 and date_add(arc_fin, interval $empr_archivage_prets_purge day) < sysdate()"); $_SESSION["last_empr_archivage_prets_purge_day"] = date("m.d.y"); } } return $res ; } public function check_pret() { global $dbh; global $msg; // récupération des infos du prêt $query = "select *, date_format(pret_date, '".$msg["format_date"]."') as aff_pret_date, date_format(pret_retour, '".$msg["format_date"]."') as aff_pret_retour, IF(pret_retour>sysdate(),0,1) as retard from pret where pret_idexpl=".$this->expl_id." limit 1"; $result = pmb_mysql_query($query, $dbh); if(pmb_mysql_num_rows($result)) { $pret = pmb_mysql_fetch_object($result); // le document était bien en prêt -> récupération des infos du prêt $this->pret_idempr = $pret->pret_idempr; $this->pret_idexpl = $pret->pret_idexpl; $this->pret_date = $pret->pret_date; $this->pret_retour = $pret->pret_retour; $this->aff_pret_date = $pret->aff_pret_date; $this->aff_pret_retour = $pret->aff_pret_retour; $this->pret_arc_id = $pret->pret_arc_id; $this->niveau_relance = $pret->niveau_relance; $this->date_relance = $pret->date_relance; $this->printed = $pret->printed; $this->cpt_prolongation = $pret->cpt_prolongation; // récupération des infos emprunteur $query = "select * , date_format(empr_date_adhesion, '".$msg["format_date"]."') as aff_empr_date_adhesion, date_format(empr_date_expiration, '".$msg["format_date"]."') as aff_empr_date_expiration from empr where id_empr=".$pret->pret_idempr." limit 1"; $result = pmb_mysql_query($query, $dbh); if(pmb_mysql_num_rows($result)) { // stockage des infos sur l'emprunteur $empr = pmb_mysql_fetch_object($result); $this->empr_cb = $empr->empr_cb; $this->id_empr = $empr->id_empr; $this->empr_nom = $empr->empr_nom; $this->empr_prenom = $empr->empr_prenom; $this->empr_ville = $empr->empr_ville; $this->empr_cp = $empr->empr_cp; $this->empr_pays = $empr->empr_pays; $this->empr_prof = $empr->empr_prof; $this->empr_year = $empr->empr_year; $this->empr_categ = $empr->empr_categ; $this->empr_codestat = $empr->empr_codestat; $this->empr_sexe = $empr->empr_sexe; $this->empr_statut = $empr->empr_statut; $this->empr_location = $empr->empr_location; $this->type_abt = $empr->type_abt; $this->empr_msg = $empr->empr_msg; $this->empr_date_adhesion = $empr->aff_empr_date_adhesion; $this->empr_date_expiration = $empr->aff_empr_date_expiration; $query_groupe = "select libelle_groupe from groupe, empr_groupe where empr_id='".$pret->pret_idempr."' and groupe_id=id_groupe"; $result_g = pmb_mysql_query($query_groupe, $dbh); while ($groupes=pmb_mysql_fetch_object($result_g)) $groupesarray[]=$groupes->libelle_groupe ; $this->groupes = @implode("/",$groupesarray); } } return 0; } public function check_resa() { global $dbh; global $msg; if (!$this->expl_notice) $this->expl_notice=0; if (!$this->expl_bulletin) $this->expl_bulletin=0 ; $rqt = "select *, IF(resa_date_fin>sysdate(),0,1) as perimee, date_format(resa_date_fin, '".$msg["format_date"]."') as aff_resa_date_fin, date_format(resa_date, '".$msg["format_date"]."') as aff_resa_date from resa where resa_idnotice='".$this->expl_notice."' and resa_idbulletin='".$this->expl_bulletin."' order by resa_date limit 1 "; $result = pmb_mysql_query($rqt, $dbh) or die (pmb_mysql_error()) ; if(pmb_mysql_num_rows($result)) { // des réservations ont été trouvées -> récupération des infos résa $resa = pmb_mysql_fetch_object($result); $this->id_resa = $resa->id_resa; $this->resa_idempr = $resa->resa_idempr; $this->resa_idnotice = $resa->resa_idnotice; $this->resa_idbulletin = $resa->resa_idbulletin; $this->resa_date = $resa->resa_date; $this->resa_date_fin = $resa->resa_date_fin; $this->aff_resa_date = $resa->aff_resa_date; $this->aff_resa_date_fin = $resa->aff_resa_date_fin; $this->resa_cb = $resa->resa_cb; // récupération des infos sur le réservataire $query = "select empr_nom, empr_prenom, empr_cb, id_empr from empr where id_empr=".$resa->resa_idempr." limit 1"; $result = pmb_mysql_query($query, $dbh); if(pmb_mysql_num_rows($result)) { // stockage des infos sur le réservataire $empr = pmb_mysql_fetch_object($result); $this->cb_reservataire = $empr->empr_cb; $this->nom_reservataire = $empr->empr_nom; $this->prenom_reservataire = $empr->empr_prenom; $this->id_reservataire = $empr->id_empr; } $this->error_message=$msg["rfid_retour_document_reserve_message"]; } return 0; } public function do_retour_doc() { global $dbh; global $msg; global $pmb_gestion_amende,$pmb_gestion_financiere,$pmb_blocage_retard, $pmb_blocage_max, $pmb_blocage_delai, $pmb_blocage_coef; // récupération localisation exemplaire $query = "select t.tdoc_libelle as type_doc"; $query .= ", l.location_libelle as location"; $query .= ", s.section_libelle as section"; $query .= " from docs_type t"; $query .= ", docs_location l"; $query .= ", docs_section s"; $query .= " where t.idtyp_doc=".$this->expl_typdoc; $query .= " and l.idlocation=".$this->expl_location; $query .= " and s.idsection=".$this->expl_section; $query .= " limit 1"; $result = pmb_mysql_query($query, $dbh); $info_doc = pmb_mysql_fetch_object($result); $this->type_doc=$info_doc->type_doc; if($this->nbparts>1) $this->type_doc.=" (".$this->nbparts.")"; $this->location=$info_doc->location; $this->section=$info_doc->section; if ($this->expl_note) { $this->error_message=$msg[377]; } if ($this->pret_idempr) { //choix du mode de calcul $loc_calendar = 0; global $pmb_utiliser_calendrier, $pmb_utiliser_calendrier_location; if (($pmb_utiliser_calendrier==1) && $pmb_utiliser_calendrier_location) { $loc_calendar = $this->expl_location; } // calcul du retard éventuel $rqt_date = "select ((TO_DAYS(CURDATE()) - TO_DAYS('$this->pret_retour'))) as retard "; $resultatdate=pmb_mysql_query($rqt_date); $resdate=pmb_mysql_fetch_object($resultatdate); $retard = $resdate->retard; if($retard > 0) { //Calcul du vrai nombre de jours $date_debut=explode("-",$this->pret_retour); $ndays=calendar::get_open_days($date_debut[2],$date_debut[1],$date_debut[0],date("d"),date("m"),date("Y"),$loc_calendar); if ($ndays>0) { $retard = (int)$ndays; $this->error_message=$msg[369]." : ".$retard." ".$msg[370]; } else $this->error_message = $msg["calendrier_active_aucun_retard"]; } //Calcul du blocage if ($pmb_blocage_retard) { $date_debut=explode("-",$this->pret_retour); $ndays=calendar::get_open_days($date_debut[2],$date_debut[1],$date_debut[0],date("d"),date("m"),date("Y"),$loc_calendar); if ($ndays>$pmb_blocage_delai) { $ndays=$ndays*$pmb_blocage_coef; if (($ndays>$pmb_blocage_max)&&($pmb_blocage_max!=0)) { if ($pmb_blocage_max!=-1) { $ndays=$pmb_blocage_max; } } } else $ndays=0; if ($ndays>0) { //Le lecteur est-il déjà bloqué ? $date_fin_blocage_empr = pmb_mysql_result(pmb_mysql_query("select date_fin_blocage from empr where id_empr='".$this->pret_idempr."'"),0,0); //Calcul de la date de fin if ($pmb_blocage_max!=-1) { $date_fin=calendar::add_days(date("d"),date("m"),date("Y"),$ndays,$loc_calendar); } else { $date_fin=calendar::add_days(date("d"),date("m"),date("Y"),0,$loc_calendar); } if ($date_fin > $date_fin_blocage_empr) { //Mise à jour pmb_mysql_query("update empr set date_fin_blocage='".$date_fin."' where id_empr='".$this->pret_idempr."'"); $this->error_message=sprintf($msg["blocage_retard_pret"],formatdate($date_fin)); } else { $this->error_message=sprintf($msg["blocage_already_retard_pret"],formatdate($date_fin_blocage_empr)); } } } //Vérification des amendes if (($pmb_gestion_financiere) && ($pmb_gestion_amende)) { $amende=new amende($this->pret_idempr); $amende_t=$amende->get_amende($this->pret_idexpl); //Si il y a une amende, je la débite if ($amende_t["valeur"]) { $this->error_message=$msg["finance_retour_amende"]." : ".comptes::format($amende_t["valeur"]); $compte_id=comptes::get_compte_id_from_empr($this->pret_idempr,2); if ($compte_id) { $cpte=new comptes($compte_id); if ($cpte->id_compte) { $cpte->record_transaction("",$amende_t["valeur"],-1,sprintf($msg["finance_retour_amende_expl"],$this->expl_cb),0); $this->error_message.=" ".$msg["finance_retour_amende_recorded"]; } } } } // Suppression prêt et la mise en table de stat $query = "delete from pret where pret_idexpl = '" . $this->pret_idexpl . "' "; $result = pmb_mysql_query($query, $dbh); if($result) { $this->retour_message=$msg["retour_ok"]; if (!$this->maj_stat_pret()) { // impossible de maj en table stat $this->error_message=$msg[371]; } } else { // impossible de supprimer en table pret $this->error_message=$msg[372]; } // traitement de l'éventuelle réservation if ($this->resa_idempr) { // le doc en retour peut servir à valider une résa suivante if (!verif_cb_utilise ($this->cb_expl)) { $affect = affecte_cb ($this->cb_expl) ; // affichage message de réservation if ($affect) { $this->error_message=$msg["rfid_retour_document_reserve_message"]; $this->url_reservation="./circ.php?categ=pret&form_cb=".rawurlencode($this->cb_reservataire); } // fin if affect } // fin if !verif_cb_utilise } // fin if resa } else { $this->error_message=$msg[605]; } } public function do_retour( $cb_expl) { $this->cb_expl=$cb_expl; $this->error_message=''; $this->status=0; if ($this->check_barcode($cb_expl)==0) { $this->check_pret(); $this->check_resa(); $this->do_retour_doc(); } $array[0]=$this; $buf_xml = array2xml($array); return $buf_xml; } // Fin class } ?>