source: pmb4.1/trunk/fuentes/pmb/classes/ajax_retour_class.php @ 478

Last change on this file since 478 was 478, checked in by mabarracus, 4 years ago

copy trusty code 4.1

  • Property svn:executable set to *
File size: 16.4 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: ajax_retour_class.php,v 1.18 2013-02-14 16:35:45 dgoron Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once("$class_path/emprunteur.class.php");
10
11require_once("$class_path/serial_display.class.php");
12require_once("$class_path/comptes.class.php");
13require_once("$class_path/mono_display.class.php");
14require_once("$class_path/audit.class.php");
15require_once("$class_path/emprunteur.class.php");
16require_once("$class_path/amende.class.php");
17require_once("$class_path/calendar.class.php");
18require_once("$base_path/circ/pret_func.inc.php");
19require_once("$include_path/resa_func.inc.php");
20
21/*
22 Pour effectuer un retour de pret:
23 // Appel de la class retour:
24 $retour = new retour();
25 // Fonction qu effectue le retour d'un document
26 $status_xml = $retour->do_retour($cb_doc);
27
28
29 Fonction do_retour
30                Effectue le retour d'un document emprunté
31 input:                 
32                $cb_doc Cb du document
33       
34 output:
35                status
36                                0 : pas d'erreur, le retour est effectué
37                                -1 Erreur. Voir message d'erreur (error_message)
38                error_message
39                                Message de l'erreur
40                retour_message         
41                libelle:
42                                Titre du document
43                type_doc
44                location
45                section
46                empr_nom
47                empr_prenom
48                empr_cb         
49                ...
50 */
51
52class retour {
53        var $expl_cb;           
54        var $msg_293;
55        var $msg_652;
56        var $msg_294;
57        var $msg_rfid_retour_emprunteur_titre;
58        var $expl_id;
59        var $error_message;
60        var $status ;
61        var $expl_section;
62        var $expl_location;
63        var $expl_typdoc;
64        var $expl_cote;
65        var $expl_statut;
66        var $expl_codestat;     
67        var $expl_owner;       
68        var $libelle;
69        var $expl_note; 
70        var $expl_comment;     
71        var $expl_bulletin;
72        var $expl_notice;
73        var $lastempr_cb;
74        var $lastempr_nom;
75        var $lastempr_prenom;
76        var $pret_date;
77        var $empr_cp;
78        var $empr_nom;
79        var $empr_prenom;
80        var $empr_pays;
81        var $empr_codestat;
82        var $empr_msg;
83        var $empr_date_adhesion;
84        var $empr_date_expiration;
85        var $groupes;   
86        var $empr_ville;
87        var $empr_prof;
88        var $empr_year;
89        var $empr_categ;
90        var $empr_sexe;
91        var $empr_statut;
92        var $empr_location;
93        var $type_abt;
94        var $pret_arc_id;
95        var $codestat; 
96        var $pret_idempr;
97        var $pret_idexpl;
98        var $pret_retour;
99        var $aff_pret_date;
100        var $aff_pret_retour;
101        var $id_resa;
102        var $resa_idempr;
103        var $resa_idnotice;
104        var $resa_idbulletin;
105        var $resa_date;
106        var $resa_date_fin;
107        var $aff_resa_date;
108        var $aff_resa_date_fin;
109        var $resa_cb;
110        var $cb_reservataire;
111        var $nom_reservataire;
112        var $prenom_reservataire;
113        var $id_reservataire;   
114        var $url_reservation;
115        var $retour_message;
116               
117        // constructeur
118        function retour() {
119                global $include_path;
120                global $msg;   
121                $this->expl_cb = '';   
122                // Messages utiles au traitement javascript
123                $this->msg_293=$msg[293];
124                $this->msg_652=$msg[652];
125                $this->msg_294=$msg[294];
126                $this->msg_rfid_retour_emprunteur_titre=$msg['rfid_retour_emprunteur_titre'];
127        }
128
129
130        function check_barcode($cb) {
131                global $dbh;
132                global $msg;   
133               
134                $query = "select * from exemplaires where expl_cb='$cb' ";
135                $result = mysql_query($query, $dbh);
136                $expl = mysql_fetch_object($result);
137                if(!$expl->expl_id) {
138                        // exemplaire inconnu
139                        $this->error_message=$msg[367];
140                        $this->status=-1;
141                        return -1;
142                } else {
143                        $this->expl_id = $expl->expl_id;       
144                        $this->expl_section = $expl->expl_section;
145                        $this->expl_location = $expl->expl_location;   
146                        $this->expl_typdoc = $expl->expl_typdoc;
147                        $this->nbparts   = $expl->expl_nbparts;
148                        $this->expl_cote = $expl->expl_cote;
149                        $this->expl_comment=$expl->expl_comment;
150                        // récupération des infos exemplaires
151                        if ($expl->expl_notice) {
152                                $notice = new mono_display($expl->expl_notice, 0);
153                                $this->libelle = $notice->header_texte;
154                                $this->expl_notice=$expl->expl_notice;
155                        } else {
156                                $bulletin = new bulletinage_display($expl->expl_bulletin);
157                                $this->libelle = $bulletin->display ;
158                                $this->expl_bulletin=$expl->expl_bulletin;
159                        }
160                        $pos=strpos($this->libelle,'<a');
161                        if($pos) $this->libelle = substr($this->libelle,0,strpos($this->libelle,'<a'));         
162                        if ($expl->expl_lastempr) {
163                                // récupération des infos emprunteur
164                                $query_last_empr = "select empr_cb, empr_nom, empr_prenom from empr where id_empr='".$expl->expl_lastempr."' ";
165                                $result_last_empr = mysql_query($query_last_empr, $dbh);
166                                if(mysql_num_rows($result_last_empr)) {
167                                        $last_empr = mysql_fetch_object($result_last_empr);
168                                        $this->lastempr_cb = $last_empr->empr_cb;
169                                        $this->lastempr_nom = $last_empr->empr_nom;
170                                        $this->lastempr_prenom = $last_empr->empr_prenom;
171                                }
172                        }
173                }
174                return 0;
175        }
176
177
178        // mise à jour des stat des infos du prêt
179        function maj_stat_pret () {
180                global $dbh;
181                global $msg;
182                global $dbh, $empr_archivage_prets, $empr_archivage_prets_purge; 
183                       
184                $query = "update pret_archive set ";
185                $query .= "arc_debut='".$this->pret_date."', ";
186                $query .= "arc_fin=now(), ";
187                if ($empr_archivage_prets) $query .= "arc_id_empr='".addslashes($this->id_empr)."', ";
188                $query .= "arc_empr_cp='".                      addslashes($this->empr_cp)              ."', ";
189                $query .= "arc_empr_ville='".           addslashes($this->empr_ville)   ."', ";
190                $query .= "arc_empr_prof='".            addslashes($this->empr_prof)    ."', ";
191                $query .= "arc_empr_year='".            addslashes($this->empr_year)    ."', ";
192                $query .= "arc_empr_categ='".           $this->empr_categ                       ."', ";
193                $query .= "arc_empr_codestat='".        $this->empr_codestat                    ."', ";
194                $query .= "arc_empr_sexe='".            $this->empr_sexe                        ."', ";
195                $query .= "arc_empr_statut='".          $this->empr_statut                      ."', ";
196                $query .= "arc_empr_location='".        $this->empr_location                    ."', ";
197                $query .= "arc_type_abt='".                     $this->type_abt                                 ."', ";
198                $query .= "arc_expl_typdoc='".          $this->expl_typdoc                      ."', ";
199                $query .= "arc_expl_id='".                      $this->expl_id                                  ."', ";
200                $query .= "arc_expl_notice='".          $this->expl_notice                      ."', ";
201                $query .= "arc_expl_bulletin='".        $this->expl_bulletin                    ."', ";
202                $query .= "arc_expl_cote='".            addslashes($this->expl_cote)    ."', ";
203                $query .= "arc_expl_statut='".          $this->expl_statut                      ."', ";
204                $query .= "arc_expl_location='".        $this->expl_location                    ."', ";
205                $query .= "arc_expl_section='".         $this->expl_section                     ."', ";
206                $query .= "arc_expl_codestat='".        $this->expl_codestat                    ."', ";
207                $query .= "arc_expl_owner='".           $this->expl_owner                       ."', ";         
208                $query .= "arc_niveau_relance='".       $this->niveau_relance                   ."', ";
209                $query .= "arc_date_relance='".         $this->date_relance                     ."', ";
210                $query .= "arc_printed='".                      $this->printed                                  ."', ";
211                $query .= "arc_cpt_prolongation='".     $this->cpt_prolongation                 ."' ";
212                                               
213                $query .= " where arc_id='".$this->pret_arc_id."' ";
214               
215                $res = mysql_query($query, $dbh);
216                // purge des vieux trucs
217                if ($empr_archivage_prets_purge) {
218                        //on ne purge qu'une fois par session et par jour
219                        if (!isset($_SESSION["last_empr_archivage_prets_purge_day"]) || ($_SESSION["last_empr_archivage_prets_purge_day"] != date("m.d.y"))) {
220                                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(mysql_error()."<br />"."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()");
221                                $_SESSION["last_empr_archivage_prets_purge_day"] = date("m.d.y");
222                        }
223                }               
224
225                return $res ;
226        }
227
228        function check_pret() {
229                global $dbh;
230                global $msg;
231                       
232                // récupération des infos du prêt
233                $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";
234                $result = mysql_query($query, $dbh);
235       
236                if(mysql_num_rows($result)) 
237                {
238                        $pret = mysql_fetch_object($result);   
239                        // le document était bien en prêt -> récupération des infos du prêt
240                        $this->pret_idempr = $pret->pret_idempr;
241                        $this->pret_idexpl = $pret->pret_idexpl;
242                        $this->pret_date = $pret->pret_date;
243                        $this->pret_retour = $pret->pret_retour;
244                        $this->aff_pret_date = $pret->aff_pret_date;
245                        $this->aff_pret_retour = $pret->aff_pret_retour;
246                        $this->pret_arc_id = $pret->pret_arc_id;
247                        $this->niveau_relance = $pret->niveau_relance;
248                        $this->date_relance = $pret->date_relance;
249                        $this->printed = $pret->printed;
250                        $this->cpt_prolongation  = $pret->cpt_prolongation;             
251                               
252                        // récupération des infos emprunteur
253                        $query = "select * , date_format(empr_date_adhesion, '".$msg["format_date"]."') as aff_empr_date_adhesion,
254                        date_format(empr_date_expiration, '".$msg["format_date"]."') as aff_empr_date_expiration from empr where id_empr=".$pret->pret_idempr." limit 1";
255                        $result = mysql_query($query, $dbh);
256                        if(mysql_num_rows($result)) {
257       
258                                // stockage des infos sur l'emprunteur
259                                $empr = mysql_fetch_object($result);
260                                $this->empr_cb = $empr->empr_cb;
261                                $this->id_empr = $empr->id_empr;
262                                $this->empr_nom = $empr->empr_nom;
263                                $this->empr_prenom = $empr->empr_prenom;
264                                $this->empr_ville = $empr->empr_ville;
265                                $this->empr_cp = $empr->empr_cp;
266                                $this->empr_pays = $empr->empr_pays;
267                                $this->empr_prof = $empr->empr_prof;
268                                $this->empr_year = $empr->empr_year;
269                                $this->empr_categ = $empr->empr_categ;
270                                $this->empr_codestat = $empr->empr_codestat;
271                                $this->empr_sexe = $empr->empr_sexe;
272                                $this->empr_statut = $empr->empr_statut;
273                                $this->empr_location = $empr->empr_location;
274                                $this->type_abt = $empr->type_abt;
275                                $this->empr_msg = $empr->empr_msg;
276                                $this->empr_date_adhesion = $empr->aff_empr_date_adhesion;
277                                $this->empr_date_expiration = $empr->aff_empr_date_expiration;                         
278                               
279                                $query_groupe = "select libelle_groupe from groupe, empr_groupe where empr_id='".$pret->pret_idempr."' and groupe_id=id_groupe";
280                                $result_g = mysql_query($query_groupe, $dbh);
281                                while ($groupes=mysql_fetch_object($result_g)) $groupesarray[]=$groupes->libelle_groupe ;
282                                $this->groupes = @implode("/",$groupesarray);
283                        }
284                }
285
286                return 0;
287        }       
288       
289        function check_resa() {
290                global $dbh;
291                global $msg; 
292               
293                if (!$this->expl_notice) $this->expl_notice=0;
294                if (!$this->expl_bulletin) $this->expl_bulletin=0 ;
295                $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 ";
296               
297                $result = mysql_query($rqt, $dbh) or die (mysql_error()) ;
298                if(mysql_num_rows($result)) {
299                        // des réservations ont été trouvées -> récupération des infos résa
300                        $resa = mysql_fetch_object($result);
301                        $this->id_resa = $resa->id_resa;
302                        $this->resa_idempr = $resa->resa_idempr;
303                        $this->resa_idnotice = $resa->resa_idnotice;
304                        $this->resa_idbulletin = $resa->resa_idbulletin;
305                        $this->resa_date = $resa->resa_date;
306                        $this->resa_date_fin = $resa->resa_date_fin;
307                        $this->aff_resa_date = $resa->aff_resa_date;
308                        $this->aff_resa_date_fin = $resa->aff_resa_date_fin;
309                        $this->resa_cb = $resa->resa_cb;
310                       
311                        // récupération des infos sur le réservataire
312                        $query = "select empr_nom, empr_prenom, empr_cb, id_empr from empr where id_empr=".$resa->resa_idempr." limit 1";
313                        $result = mysql_query($query, $dbh);
314                        if(mysql_num_rows($result)) {
315                                // stockage des infos sur le réservataire
316                                $empr = mysql_fetch_object($result);
317                                $this->cb_reservataire = $empr->empr_cb;
318                                $this->nom_reservataire = $empr->empr_nom;
319                                $this->prenom_reservataire = $empr->empr_prenom;
320                                $this->id_reservataire = $empr->id_empr;
321                        }
322                        $this->error_message=$msg["rfid_retour_document_reserve_message"];
323                }
324                return 0;       
325        }
326
327
328        function do_retour_doc() {
329       
330                global $dbh;
331                global $msg;
332                global $pmb_gestion_amende,$pmb_gestion_financiere,$pmb_blocage_retard, $pmb_blocage_max, $pmb_blocage_delai, $pmb_blocage_coef;
333       
334                // récupération localisation exemplaire
335                $query = "select t.tdoc_libelle as type_doc";
336                $query .= ", l.location_libelle as location";
337                $query .= ", s.section_libelle as section";
338                $query .= " from docs_type t";
339                $query .= ", docs_location l";
340                $query .= ", docs_section s";
341                $query .= " where t.idtyp_doc=".$this->expl_typdoc;
342                $query .= " and l.idlocation=".$this->expl_location;
343                $query .= " and s.idsection=".$this->expl_section;
344                $query .= " limit 1";
345       
346                $result = mysql_query($query, $dbh);
347                $info_doc = mysql_fetch_object($result);
348               
349                $this->type_doc=$info_doc->type_doc;
350                if($this->nbparts>1)
351                                        $this->type_doc.=" (".$this->nbparts.")";
352                $this->location=$info_doc->location;
353                $this->section=$info_doc->section;
354                       
355                if ($this->expl_note) {
356                        $this->error_message=$msg[377];
357                }       
358                if ($this->pret_idempr) {       
359                        // calcul du retard éventuel
360                        $rqt_date = "select ((TO_DAYS(CURDATE()) - TO_DAYS('$this->pret_retour'))) as retard ";
361                        $resultatdate=mysql_query($rqt_date);
362                        $resdate=mysql_fetch_object($resultatdate);
363                        $retard = $resdate->retard;
364                        if($retard > 0) {
365                                //Calcul du vrai nombre de jours
366                                $date_debut=explode("-",$this->pret_retour);
367                                $ndays=calendar::get_open_days($date_debut[2],$date_debut[1],$date_debut[0],date("d"),date("m"),date("Y"));
368                                if ($ndays>0) {
369                                        $retard = (int)$ndays;
370                                        $this->error_message=$msg[369]." : ".$retard." ".$msg[370];
371                                } else
372                                        $this->error_message = $msg["calendrier_active_aucun_retard"];
373                        }
374                        //Calcul du blocage
375                        if ($pmb_blocage_retard) {
376                                $date_debut=explode("-",$this->pret_retour);
377                                $ndays=calendar::get_open_days($date_debut[2],$date_debut[1],$date_debut[0],date("d"),date("m"),date("Y"));
378                                if ($ndays>$pmb_blocage_delai) {
379                                        $ndays=$ndays*$pmb_blocage_coef;
380                                        if (($ndays>$pmb_blocage_max)&&($pmb_blocage_max!=0)) {
381                                                $ndays=$pmb_blocage_max;
382                                        }
383                                } else $ndays=0;
384                                if ($ndays>0) {
385                                        //Le lecteur est-il déjà bloqué ?
386                                        $date_fin_blocage_empr = mysql_result(mysql_query("select date_fin_blocage from empr where id_empr='".$this->pret_idempr."'"),0,0);
387                                        //Calcul de la date de fin
388                                        $date_fin=calendar::add_days(date("d"),date("m"),date("Y"),$ndays);
389                                        if ($date_fin > $date_fin_blocage_empr) {
390                                                //Mise à jour
391                                                mysql_query("update empr set date_fin_blocage='".$date_fin."' where id_empr='".$this->pret_idempr."'");
392                                                $this->error_message=sprintf($msg["blocage_retard_pret"],formatdate($date_fin));
393                                        } else {
394                                                $this->error_message=sprintf($msg["blocage_already_retard_pret"],formatdate($date_fin_blocage_empr));
395                                        }
396                                }
397                        }               
398                        //Vérification des amendes
399                        if (($pmb_gestion_financiere) && ($pmb_gestion_amende)) {
400                                $amende=new amende($this->pret_idempr);
401                                $amende_t=$amende->get_amende($this->pret_idexpl);
402                                //Si il y a une amende, je la débite
403                                if ($amende_t["valeur"]) {
404                                        $this->error_message=$msg["finance_retour_amende"]."&nbsp;: ".comptes::format($amende_t["valeur"]);
405                                        $compte_id=comptes::get_compte_id_from_empr($this->pret_idempr,2);
406                                        if ($compte_id) {
407                                                $cpte=new comptes($compte_id);
408                                                if ($cpte->id_compte) {
409                                                        $cpte->record_transaction("",$amende_t["valeur"],-1,sprintf($msg["finance_retour_amende_expl"],$this->pret_idexpl),0);
410                                                        $this->error_message.=" ".$msg["finance_retour_amende_recorded"];
411                                                }
412                                        }
413                                }
414                        }
415                        // Suppression prêt et la mise en table de stat
416                        $query = "delete from pret where pret_idexpl = '" . $this->pret_idexpl . "' ";
417                        $result = mysql_query($query, $dbh);
418                       
419                        if($result) {
420                                $this->retour_message=$msg["retour_ok"];
421                                if (!$this->maj_stat_pret()) {
422                                        // impossible de maj en table stat
423                                        $this->error_message=$msg[371];
424                                }
425                        } else {
426                                // impossible de supprimer en table pret
427                                $this->error_message=$msg[372];
428                        }
429                        // traitement de l'éventuelle réservation
430                        if ($this->resa_idempr) {
431                                // le doc en retour peut servir à valider une résa suivante
432                                if (!verif_cb_utilise ($this->cb_expl)) {
433                                        $affect = affecte_cb ($this->cb_expl) ;
434                                        // affichage message de réservation
435                                        if ($affect) {
436                                                $this->error_message=$msg["rfid_retour_document_reserve_message"];
437                                                $this->url_reservation="./circ.php?categ=pret&form_cb=".rawurlencode($this->cb_reservataire);
438                                        } // fin if affect
439                                } // fin if !verif_cb_utilise
440                        } // fin if resa
441                } else {
442                        $this->error_message=$msg[605];
443                }
444        }
445
446       
447        function do_retour( $cb_expl) { 
448               
449                $this->cb_expl=$cb_expl;
450                $this->error_message='';
451                $this->status=0;
452                if ($this->check_barcode($cb_expl)==0) {
453                        $this->check_pret();
454                        $this->check_resa();
455                        $this->do_retour_doc();
456                }                       
457                $array[0]=$this;
458                $buf_xml = array2xml($array);           
459                return $buf_xml;
460        }
461
462// Fin class           
463}
464
465
466?>
Note: See TracBrowser for help on using the repository browser.