source: pmb4.1/trunk/fuentes/pmb/circ/pret.inc.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: 52.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: pret.inc.php,v 1.105.2.2 2014-07-30 13:36:55 dgoron Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
8
9require_once ("$class_path/emprunteur.class.php");
10require_once ("$class_path/serial_display.class.php");
11require_once ("$class_path/quotas.class.php");
12require_once ("$class_path/comptes.class.php");
13require_once("$class_path/audit.class.php");
14require_once("$class_path/expl.class.php");
15require_once("$class_path/transfert.class.php");
16require_once($class_path."/ajax_pret.class.php");
17require_once("$class_path/groupexpl.class.php");
18
19// define pour différent flags de situation document
20define ('EX_OK', 1);
21define ('EX_INCONNU', 2);
22define ('HAS_RESA_GOOD', 4); // l'exemplaire est réservé pour ce lecteur
23define ('NON_PRETABLE', 8);
24define ('HAS_NOTE', 16);
25define ('HAS_RESA_FALSE', 32); // l'exemplaire est réservé pour un autre lecteur
26define ('ALREADY_LOANED', 64); // cet emprunteur a déjà emprunté ce document
27define ('ALREADY_BORROWED', 128); // ce document est emprunté par un autre emprunteur
28define ('HAS_RESA_PLANNED_FALSE', 256); //Les réservations planifiées sur le document sont égales ou supérieures au nb d'exemplaires disponibles
29define ('IS_TRUSTED',512); //l'exemplaire est monopolisé
30define ('IS_GROUP',1024); //l'exemplaire fait parti d'un groupe d'exemplaires
31$affichage = "";
32$warning_text='';
33$dispo_text='';
34$erreur_affichage = "<table border='0' cellpadding='1' width='100%' height='40'><tr><td width='30'>&nbsp;<span></span></td>
35                <td width='100%'>&nbsp;</td></tr></table>";
36
37// Confirm pret rfid mode1
38if($confirm_pret && $id_empr){
39        $expl = new do_pret();
40        if(is_array($id_expl)) {
41                foreach($id_expl as $id) {
42                        if($id)$status= $expl->confirm_pret($id_empr, $id,$short_loan);         
43                }
44        } else {
45                if($id_expl)$status = $expl->confirm_pret($id_empr, $id_expl,$short_loan);
46        }
47        $erreur_affichage = "<hr />
48                <div class='row'>
49                <div class='colonne10'><img src='./images/info.png' /></div>
50                <div class='colonne-suite'><span class='erreur'>".$msg[384]."</span><br />
51                ";
52        if($pmb_play_pret_sound)$alert_sound_list[]="information";     
53        $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
54        $affichage = $empr -> fiche;
55       
56}else if (($sub == "pret_annulation") && ($id_expl)) {
57        // récupérer la stat insérée pour la supprimer !
58        $query = "select pret_arc_id from pret ";
59        $query.= "where pret_idexpl = '".$id_expl."' ";
60        $result = mysql_query($query, $dbh);
61        $stat_id = mysql_fetch_object($result) ;
62        $result = mysql_query("delete from pret_archive where arc_id='".$stat_id->pret_arc_id."' ", $dbh);
63        audit::delete_audit (AUDIT_PRET, $stat_id->pret_arc_id) ;
64
65        // supprimer le prêt annulé
66        $query = "delete from pret ";
67        $query.= "where pret_idexpl = '".$id_expl."' ";
68        $result = mysql_query($query, $dbh);
69        $erreur_affichage = "<hr />
70                                        <div class='row'>
71                                        <div class='colonne10'><img src='./images/info.png' /></div>
72                                        <div class='colonne-suite'><span class='erreur'>".str_replace('!!cb_expl!!', $cb_doc, $msg[607])."</span></div>
73                                        </div><br />";
74        $alert_sound_list[]="information";
75
76        $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
77        $affichage = $empr -> fiche;
78} else {
79       
80        $script_magnetique="
81<script language='javascript' type='text/javascript'>
82var requete = null;
83
84function creerRequette(){
85        if(window.XMLHttpRequest) // Firefox
86                requete = new XMLHttpRequest();
87        else if(window.ActiveXObject) // Internet Explorer
88                requete = new ActiveXObject('Microsoft.XMLHTTP');
89        else { // XMLHttpRequest non supporté par le navigateur
90                alert('Votre navigateur ne supporte pas les objets XMLHTTPRequest...');
91        return;
92        }
93}
94
95function magnetise(commande){
96        creerRequette();
97        if(netscape.security.PrivilegeManager)netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');       
98        requete.open('GET', 'http://localhost:30000/?send_value='+commande+'&command=Send', false);
99        requete.send(null);
100        if(requete.readyState != 4) alert('Requête antivol non effectuée !');
101}
102
103";
104
105        //Si il y a un emprunteur
106        if ($id_empr) {
107                // Vérification id, on dispose d'un id pour l'emprunteur, donc on est en situation de prêt
108                if (check_empr($id_empr)) {
109                        $empr_temp = new emprunteur($id_empr, '', FALSE, 1);
110                        $empr_date_depassee = $empr_temp -> adhesion_depassee();
111                        //Si adhésion dépassée
112                        if (!($pmb_pret_adhesion_depassee == 0 && $empr_date_depassee)) {
113                                //Si un exemplaire ou un code barres a été fourni
114                                if ($cb_doc || $id_expl) {
115                                        if ($id_expl = get_expl_id_from_cb($cb_doc)) {
116                                               
117                                                // Gestion Antivol
118                                                if($pmb_antivol>0) {
119                                                        $rqt = "SELECT type_antivol FROM exemplaires WHERE expl_id='".$id_expl."' ";
120                                                        $result = mysql_query($rqt, $dbh);             
121                                                        $expl = mysql_fetch_object($result);
122                                                        $type_antivol =$expl->type_antivol;                             
123                                                        if($type_antivol ==1)// c'est un support non magnétique (livre, revue...)
124                                                                print "$script_magnetique"."magnetise('DDD');</script>";
125                                                        if($type_antivol ==2)//c'est un support magnétique (cassette)   
126                                                                print "$script_magnetique"."magnetise('SSS');</script>";
127                                                }
128
129                                                //Vérification de la validité du document
130                                                $statut = check_document($id_expl, $id_empr); 
131                                                // check_document remonte $statut->notice_id et $statut->bulletin_id
132                                                if ($statut->notice_id) {
133                                                        $notice_temp = new mono_display($statut->notice_id, 0);
134                                                        $titre_prete = $notice_temp->header;
135                                                } elseif ($statut->bulletin_id) {
136                                                        $bulletin_temp = new bulletinage_display($statut->bulletin_id);
137                                                        $titre_prete = $bulletin_temp->display ;
138                                                } else $titre_prete = "";
139                                                $titre_prete="<b>".$titre_prete."<br />".$cb_doc."</b> $statut->tdoc_libelle $statut->location_libelle $statut->section_libelle <b>$statut->expl_cote</b>";
140                                               
141                                                //Y-a-t-il un quota ?
142                                                if (!$expl_todo && $deflt_docs_location) {             
143                                                        $sql = "SELECT expl_retloc FROM exemplaires where expl_retloc='".$deflt_docs_location."' and  expl_id='".$id_expl."' ";
144                                                        $req = mysql_query($sql) or die ($msg["err_sql"]."<br />".$sql."<br />".mysql_error());
145                                                        $nb = mysql_num_rows($req) ;
146                                                        if($nb) {                               
147                                                                $erreur_affichage = "<hr />
148                                                                <div class='row'>
149                                                                        <div class='colonne10'><img src='./images/error.png' /></div>
150                                                                        <div class='colonne-suite'>$titre_prete : <span class='erreur'>".$msg["circ_pret_piege_expl_todo"]."</span><br />";
151                                                                $alert_sound_list[]="critique";
152                                                                $erreur_affichage.= "<input type='button' class='bouton' value='${msg[76]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr'\" />";
153                                                                $erreur_affichage.= "&nbsp;<input type='button' class='bouton' value='${msg[389]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr&cb_doc=$cb_doc&expl_todo=1&confirm=$confirm'\" />";     
154                                                                $erreur_affichage.= "</div></div><br />";
155                                                                $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
156                                                                $affichage = $empr -> fiche;
157                                                                print pmb_bidi($affichage);
158                                                                print alert_sound_script();
159                                                                exit();
160                                                        } 
161                                                }       
162                                                                                       
163                                                //Y-a-t-il un quota ?
164                                                if (!$quota) {
165                                                        $qt=check_quota($id_empr, $id_expl);
166                                                        //Si quota violé
167                                                        if (is_array($qt)) {
168                                                                $erreur_affichage = "<hr />
169                                                                <div class='row'>
170                                                                        <div class='colonne10'><img src='./images/error.png' /></div>
171                                                                        <div class='colonne-suite'>$titre_prete : <span class='erreur'>".$qt["MESSAGE"]."</span><br />";
172                                                                $alert_sound_list[]="critique";
173                                                                $erreur_affichage.= "<input type='button' class='bouton' value='${msg[76]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr'\" />";
174                                                                if ($qt["FORCE"]==1) {
175                                                                        $quota = 1;
176                                                                        $erreur_affichage.= "&nbsp;<input type='button' class='bouton' value='${msg[389]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr&cb_doc=$cb_doc&quota=$quota'\" />";     
177                                                                }
178                                                                $erreur_affichage.= "</div></div><br />";
179                                                                $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
180                                                                $affichage = $empr -> fiche;
181                                                                print pmb_bidi($affichage);
182                                                                print alert_sound_script();
183                                                                exit();
184                                                        } // fin if (is_array($qt))                     
185                                                } // fin if !$quota
186                                                                       
187                                                // Le lecteur a déjà emprunté ce document ?
188                                                if (!$pret_arc && $pmb_pret_already_loaned) {                           
189                                                        $rqt_arch = "select arc_id from pret_archive WHERE arc_id_empr = '".$id_empr."' AND arc_expl_id = ".$id_expl." ";
190                                                        $pretarc_res=mysql_query($rqt_arch, $dbh);
191                                                        if(mysql_num_rows($pretarc_res)){
192                                                                $pret_arc=1;
193                                                                $res_pret_arc = mysql_fetch_object($pretarc_res);
194                                                                $resarc_id = $res_pret_arc->resarc_id;
195                                                                $erreur_affichage = "<hr />
196                                                                <div class='row'>
197                                                                <div class='colonne10'><img src='./images/error.png' /></div>
198                                                                <div class='colonne-suite'>$titre_prete : <span class='erreur'>".$msg['pret_already_loaned_arch']."</span><br />";
199                                                                $alert_sound_list[]="critique";
200                                                                $erreur_affichage.= "<input type='button' class='bouton' value='${msg[76]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr'\" />";
201       
202                                                                $erreur_affichage.= "&nbsp;<input type='button' class='bouton' value='${msg[389]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr&cb_doc=$cb_doc&quota=$quota&pret_arc=1'\" />";
203               
204                                                                $erreur_affichage.= "</div></div><br />";
205                                                                $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
206                                                                $affichage = $empr -> fiche;
207                                                                print pmb_bidi($affichage);
208                                                                print alert_sound_script();
209                                                                exit();                                                 
210                                                        }
211                                                }                                                       
212                                               
213                                                if ($statut -> flag && ((($statut -> flag & HAS_NOTE) || ($statut -> flag & IS_GROUP) || ($statut -> flag & ALREADY_LOANED_ARCHIVE) || ($statut -> flag & NON_PRETABLE) || ($statut -> flag & HAS_RESA_FALSE)) || ($statut -> flag & HAS_RESA_PLANNED_FALSE) || ($statut -> flag & IS_TRUSTED)) && !($statut -> flag & ALREADY_LOANED) && !($statut -> flag & ALREADY_BORROWED) ) {
214                                                        if (!$confirm) {
215                                                                // mettre ici les routines confirmation                                                         
216                                                                if($is_doc_group){
217                                                                        $information_text.= $groupexpl->get_confirm_form($cb_doc);     
218                                                                        if($groupexpl->is_doc_header($cb_doc))  $serious = FALSE;       
219                                                                        else $serious = TRUE;
220                                                                }
221                                                                // l'exemplaire a une note
222                                                                if ($statut -> flag & HAS_NOTE) {
223                                                                        // l'exemplaire a une note attachée
224                                                                        $warning_text.= "$msg[377] : <span class='message_important'>".$statut -> note."</span>&nbsp;";
225                                                                        $serious = FALSE;
226                                                                }
227                                                                if ($statut -> flag & NON_PRETABLE) {
228                                                                        // l'exemplaire a le statut non-prétable
229                                                                        if ($warning_text) $warning_text.= "<br />".$msg[382]." (".$statut->statut.")";
230                                                                                else $warning_text.= $msg[382]." (".$statut->statut.")";
231                                                                        $serious = TRUE;
232                                                                        // Si transfert activé, on vérifie le prêt est forcable ou non
233                                                                        if($pmb_transferts_actif) {
234                                                                                $transfert = new transfert();
235                                                                                $statut_trans=$transfert->check_pret($cb_doc);
236                                                                       
237                                                                                if($statut_trans==1) {
238                                                                                        //non forcable
239                                                                                        $erreur_affichage = "<hr />
240                                                                                        <div class='row'>
241                                                                                                <div class='colonne10'><img src='./images/error.png' /></div>
242                                                                                                <div class='colonne-suite'>$titre_prete : <span class='erreur'>".$transfert->check_pret_error_message."</span><br />";
243                                                                                        $alert_sound_list[]="critique";
244                                                                                        $erreur_affichage.= "<input type='button' class='bouton' value='${msg[76]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr'\" />";
245                                                                                       
246                                                                                        $erreur_affichage.= "</div></div><br />";
247                                                                                        $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
248                                                                                        $affichage = $empr -> fiche;
249                                                                                        print pmb_bidi($affichage);
250                                                                                        print alert_sound_script();
251                                                                                        exit();
252                                                                                } elseif($statut_trans==2)      {
253                                                                                        // forçable
254                                                                                        $warning_text.= "<br />".$transfert->check_pret_error_message;
255                                                                                }       
256                                                                        }
257                                                                }
258                                                                if ($statut -> flag & HAS_RESA_FALSE) {
259                                                                        // le document est réservé pour un autre lecteur
260                                                                        if ($warning_text) $warning_text.= "<br />".$msg[383]." : <a href='./circ.php?categ=pret&form_cb=".rawurlencode($reservataire_empr_cb)."'>".$reservataire_nom_prenom."</a>";
261                                                                                else $warning_text.= $msg[383]." : <a href='./circ.php?categ=pret&form_cb=".rawurlencode($reservataire_empr_cb)."'>".$reservataire_nom_prenom."</a>";
262                                                                        $serious = TRUE;
263                                                                }
264                                                                if ($statut -> flag & HAS_RESA_PLANNED_FALSE) { 
265                                                                        // le document à des réservations planifiées
266                                                                        if ($warning_text) $warning_text.= "<br />";
267                                                                        $warning_text.= "<img src='./images/plus.gif' class='img_plus'
268                                                                                onClick=\"
269                                                                                var elt=document.getElementById('erreur-child');
270                                                                                var vis=elt.style.display;
271                                                                                if (vis=='block'){
272                                                                                        elt.style.display='none';
273                                                                                        this.src='./images/plus.gif';                                                                   
274                                                                                } else {
275                                                                                        elt.style.display='block';
276                                                                                        this.src='./images/minus.gif';
277                                                                                }
278                                                                                \" /> ".htmlentities($msg['resa_planning_encours'], ENT_QUOTES, $charset)." <a href='./circ.php?categ=pret&form_cb=".rawurlencode($reservataire_empr_cb)."'>".$reservataire_nom_prenom."</a><br />";
279                                                                               
280                                                                        //Affichage des réservations sur le document courant
281                                                                        $q = "SELECT id_resa, resa_idnotice, resa_date, resa_date_debut, resa_date_fin, resa_validee, IF(resa_date_fin>=sysdate() or resa_date_fin='0000-00-00',0,1) as perimee, date_format(resa_date_fin, '".$msg["format_date_sql"]."') as aff_date_fin, ";
282                                                                        $q.= "resa_idempr, concat(lower(empr_prenom), ' ',upper(empr_nom)) as resa_nom, if(resa_idempr!='".$id_empr."', 0, 1) as resa_same ";
283                                                                        $q.= "FROM resa_planning left join empr on resa_idempr=id_empr ";
284                                                                        $q.= "where resa_idnotice in (select expl_notice from exemplaires where expl_cb = '".$cb_doc."') ";
285                                                                        if ($pmb_location_resa_planning) $q.= "and empr_location in (select expl_location from exemplaires where expl_cb = '".$cb_doc."') ";
286                                                                        $r = mysql_query($q, $dbh);
287                                                                        if (mysql_num_rows($r)) {
288                                                                                $warning_text.= "<div id='erreur-child' class='erreur-child'>";
289                                                                                while ($resa = mysql_fetch_array($r)) {
290                                                                                        $id_resa = $resa['id_resa'];
291                                                                                        $resa_idempr = $resa['resa_idempr'];
292                                                                                        $resa_idnotice = $resa['resa_idnotice'];
293                                                                                        $resa_date = $resa['resa_date'];
294                                                                                        $resa_date_debut = $resa['resa_date_debut'];
295                                                                                        $resa_date_fin = $resa['resa_date_fin'];
296                                                                                        $resa_validee = $resa['resa_validee'];
297                                                                                        $resa_nom = $resa['resa_nom'];
298                                                                                        $resa_same = $resa['resa_same'];
299                                                                                        if ($resa_idempr==$id_empr) {
300                                                                                                $warning_text.= "<b>".htmlentities($resa_nom, ENT_QUOTES, $charset)."&nbsp;</b>";
301                                                                                        } else {
302                                                                                                $warning_text.= htmlentities($resa_nom, ENT_QUOTES, $charset)."&nbsp;";
303                                                                                        }
304                                                                                        $warning_text.= " &gt;&gt; <b>".$msg['resa_planning_date_debut']."</b> ".formatdate($resa_date_debut)."&nbsp;<b>".$msg['resa_planning_date_fin']."</b> ".formatdate($resa_date_fin)."&nbsp;" ;
305                                                                                        if (!$resa['perimee']) {
306                                                                                                if ($resa['resa_validee'])  $warning_text.= " ".$msg['resa_validee'] ;
307                                                                                                        else $warning_text.= " ".$msg['resa_attente_validation']." " ;
308                                                                                        } else  $warning_text.= " ".$msg['resa_overtime']." " ;
309                                                                                        $warning_text.= "<br />" ;
310                                                                                } //while
311                                                                                $warning_text.= "</div>";
312                                                                        } // if (mysql_num_rows($r))   
313                                                                        $serious = TRUE;
314                                                                } //if ($statut -> flag & HAS_RESA_PLANNED_FALSE)       
315                                                                if ($statut->flag & IS_TRUSTED ) {
316                                                                        // le document est monopolisé
317                                                                        $nd=0;
318                                                                        if ($statut->notice_id || $statut->bulletin_id) {
319                                                                                if ($statut->notice_id) {
320                                                                                        $qd = "select count(*) from exemplaires join docs_statut on idstatut=expl_statut and pret_flag=1 where expl_notice=".$statut->notice_id;
321                                                                                } else if ($statut->bulletin_id) {
322                                                                                        $qd = "select count(*) from exemplaires join docs_statut on idstatut=expl_statut and pret_flag=1 where expl_bulletin=".$statut->bulletin_id;
323                                                                                }
324                                                                                $rd = mysql_query($qd,$dbh);
325                                                                                if (mysql_num_rows($rd)) {
326                                                                                        $nd = mysql_result($rd,0,0);
327                                                                                }
328                                                                        }
329                                                                        $warning_text.= sprintf("<br />".$msg['loan_trust_warning'],$pmb_loan_trust_management,$nd);
330                                                                        $serious = TRUE;
331                                                                }
332                                                                $erreur_affichage = "<hr />
333                                                                        <div class='row' >
334                                                                        $information_text
335                                                                        </div>
336                                                                        <div class='row' >
337                                                                        <div class='colonne10' ><img src='./images/quest.png' /></div>
338                                                                        <div class='colonne-suite'>$titre_prete : <span class='erreur' >$warning_text</span><br />";
339                                                               
340                                                                $alert_sound_list[]="question";
341                                                                $erreur_affichage.= "<input type='button' class='bouton' value='${msg[76]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr".(($pmb_short_loan_management==1)?"&short_loan='+document.getElementById('short_loan').value;":"'")."\" />";
342                                                                $confirm = $statut -> flag ;
343                                                                $erreur_affichage.= "&nbsp;<input type='button' class='bouton' value='${msg[389]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr&cb_doc=$cb_doc&expl_todo=$expl_todo&confirm=$confirm&quota=$quota&pret_arc=$pret_arc".(($pmb_short_loan_management==1)?"&short_loan='+document.getElementById('short_loan').value;":"'")."\" />";
344                                                                $erreur_affichage.= "&nbsp;<input class='bouton' type='button' value=\"".$msg[375]."\" onClick=\"document.location='circ.php?categ=visu_ex&form_cb_expl=".$cb_doc."';\" />";
345                                                                $erreur_affichage.= "</div></div><br />";
346                                                                $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
347                                                                $affichage = $empr -> fiche;
348                                                        } else { // else if !confirm
349                                                                // il y a eu confirmation du prêt
350                                                                if ($statut -> flag == $confirm) {
351                                                                        // ajout du prêt
352                                                                        // si transfert activé, faire le néçessaire en cas de forçage
353                                                                        if($pmb_transferts_actif) {
354                                                                                $transfert = new transfert();
355                                                                                $statut_trans=$transfert->check_pret($cb_doc,1);                                                               
356                                                                        }
357                                                                        if ($statut -> flag & HAS_RESA_GOOD) {
358                                                                                // archivage resa
359                                                                                $rqt_arch = "UPDATE resa_archive, resa SET resarc_pretee = 1 WHERE id_resa = '".$statut->id_resa."' AND resa_arc = resarc_id "; 
360                                                                                mysql_query($rqt_arch, $dbh);
361                                                                                $rqt_arch = "select resarc_id from resa_archive, resa WHERE id_resa = '".$statut->id_resa."' AND resa_arc = resarc_id ";       
362                                                                                $resarc_res=mysql_query($rqt_arch, $dbh);
363                                                                                $resarc = mysql_fetch_object($resarc_res);
364                                                                                $resarc_id = $resarc->resarc_id;       
365                                                                               
366                                                                                // suppression de la resa pour ce lecteur
367                                                                                del_resa($id_empr, $statut -> idnotice, $statut -> idbulletin, $statut -> expl_cb);
368                                                                        }
369                                                                        if ($statut -> flag & HAS_RESA_FALSE) {
370                                                                                // dévalider la resa correspondante
371                                                                                if ($statut->resa_cb == $statut->expl_cb) {
372                                                                                        // la résa prioritaire avait déjà un CB identique : il suffit de la dévalider
373                                                                                        $rqt_invalide_resa = "update resa set resa_date_debut='0000-00-00', resa_date_fin='0000-00-00', resa_cb='' where id_resa = '".$statut->id_resa."' " ; 
374                                                                                        $truc_vide = mysql_query ($rqt_invalide_resa, $dbh) ;
375                                                                                } // sinon rien à faire, la résa était validée avec autre chose, elle le reste
376                                                                                // archivage resa
377                                                                                $rqt_arch = "UPDATE resa_archive, resa SET resarc_pretee = 2 WHERE id_resa = '".$statut->id_resa."' AND resa_arc = resarc_id "; 
378                                                                                mysql_query($rqt_arch, $dbh);   
379                                                                                $rqt_arch = "select resarc_id from resa_archive, resa WHERE id_resa = '".$statut->id_resa."' AND resa_arc = resarc_id ";       
380                                                                                $resarc_res=mysql_query($rqt_arch, $dbh);
381                                                                                $resarc = mysql_fetch_object($resarc_res);
382                                                                                $resarc_id = $resarc->resarc_id;                                                                               
383                                                                                del_resa($id_empr, $statut -> idnotice, $statut -> idbulletin, $statut -> expl_cb);
384                                                                        }
385                                                                        del_resa($id_empr, $statut -> idnotice, $statut -> idbulletin, $statut -> expl_cb);
386                                                                        add_pret($id_empr, $id_expl, $cb_doc, $resarc_id, $short_loan);
387                                                                        // mise à jour de l'affichage
388                                                                        // ER ici ajout du bouton d'annulation violente
389                                                                        /*
390                                                                        $rqt = "SELECT notice_m.tit1, notices_s.tit1 ";
391                                                                        $rqt.= "FROM ((exemplaires LEFT JOIN notices AS notice_m ON expl_notice = notice_m.notice_id) LEFT JOIN bulletins ON expl_bulletin = bulletin_id) LEFT JOIN notices AS notices_s ON bulletin_notice = notices_s.notice_id ";
392                                                                        $rqt.= "WHERE expl_id='".$id_expl."' ";
393
394                                                                        $result_pret = mysql_query($rqt, $dbh);
395                                                                        $titre_prete = mysql_result($result_pret, 0, 0).mysql_result($result_pret, 0, 1);
396                                                                        */
397                                                                        if($pmb_pret_groupement){
398                                                                                if($id_group=groupexpls::get_group_expl($cb_doc)){
399                                                                                        // ce document appartient à un groupe
400                                                                                        $is_doc_group=1;
401                                                                                        $groupexpl=new groupexpl($id_group);$information_text.= $groupexpl->get_confirm_form($cb_doc);
402                                                                                        $information_group= $groupexpl->get_confirm_form($cb_doc);
403                                                                                        //      $statut->flag+=IS_GROUP; client ne veut pas de comfirmation
404                                                                                }
405                                                                        }
406                                                                        $erreur_affichage = $information_group."<hr />
407                                                                                <div class='row'>
408                                                                                <div class='colonne10'><img src='./images/info.png' /></div>
409                                                                                <div class='colonne-suite'>".$titre_prete." : <span class='erreur'>".$msg[384]."</span><br />
410                                                                                ";
411                                                                        $alert_sound_list[]="information";
412                                                                        $erreur_affichage.= "<input type='button' class='bouton' value='${msg[76]}' onClick=\"document.location='circ.php?categ=pret&sub=pret_annulation&id_empr=".$id_empr."&id_expl=".$id_expl."&cb_doc=".$cb_doc."&short_loan=".$short_loan."'\" />";
413                                                                        $erreur_affichage.= "&nbsp;<input type='button' class='bouton' value='${msg[1300]}' onclick=\"openPopUp('./pdf.php?pdfdoc=ticket_pret&cb_doc=$cb_doc&id_empr=$id_empr', 'ticket', 600, 500, -2, -2, 'toolbar=no, dependent=yes, resizable=yes')\" />";
414                                                                        $erreur_affichage.= "</div></div>";
415                                                                        if ($statut->expl_comment) $erreur_affichage.= "<div class='expl_comment'>".$statut->expl_comment."</div>";
416
417                                                                        $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
418                                                                        $affichage = $empr -> fiche;
419
420                                                                        // prise en compte du param d'envoi de ticket de prêt électronique
421                                                                        if ($empr_electronic_loan_ticket && $param_popup_ticket) {
422                                                                                electronic_ticket($id_empr, $cb_doc); 
423                                                                        }
424                                                                       
425                                                                        // prise en compte du param popup_ticket
426                                                                        if ($param_popup_ticket == 1) {
427                                                                                if(!$pmb_printer_ticket_url) {
428                                                                                        print "<script type='text/javascript'>openPopUp('./pdf.php?pdfdoc=ticket_pret&cb_doc=$cb_doc&id_empr=$id_empr', 'ticket', 600, 500, -2, -2, 'toolbar=no, dependent=yes, resizable=yes');</script>";
429                                                                                } else {
430                                                                                        $affichage.="<script type='text/javascript'>print_ticket('./ajax.php?module=circ&categ=print_pret&sub=one&id_empr=".$id_empr."&id_expl=".$id_expl."&cb_doc=$cb_doc');</script>";
431                                                                                }                                                                                               
432                                                                        }
433                                                                } else {
434                                                                        $erreur_affichage = "<hr />
435                                                                                <div class='row'>
436                                                                                <div class='colonne10'><img src='./images/info.png' /></div>
437                                                                                <div class='colonne-suite'>$titre_prete : <span class='erreur'>$msg[384]</span></div>
438                                                                                </div><br />";
439                                                                        $alert_sound_list[]="information";
440
441                                                                        $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
442                                                                        $affichage = $empr -> fiche;
443                                                                } // fin else if ($statut -> flag == $confirm)
444                                                        } // fin if else !confirm
445                                                } else {
446                                                        if ($statut -> flag & ALREADY_LOANED || $statut -> flag & ALREADY_BORROWED) {
447                                                                if ($statut -> flag & ALREADY_LOANED) {
448                                                                        $erreur_affichage = "<hr />
449                                                                        <div class='row'>
450                                                                        <div class='colonne10'><img src='./images/error.png' /></div>
451                                                                        <div class='colonne-suite'>$titre_prete : <span class='erreur'>$msg[386]</span></div>
452                                                                        </div><br />";
453                                                                        $alert_sound_list[]="critique";
454                                                                }
455                                                                if ($statut -> flag & ALREADY_BORROWED) {
456                                                                        $erreur_affichage = "<hr />
457                                                                        <div class='row'>
458                                                                        <div class='colonne10'><img src='./images/error.png' /></div>
459                                                                        <div class='colonne-suite'>$titre_prete : <span class='erreur'>$msg[387]</span></div>
460                                                                        <input class='bouton' type='button' value=\"".$msg[375]."\" onClick=\"document.location='circ.php?categ=visu_ex&form_cb_expl=$cb_doc';\" />
461                                                                        </div><br />";
462                                                                        $alert_sound_list[]="critique";
463                                                                }
464                                                                $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
465                                                                $affichage = $empr -> fiche;
466                                                        } else {
467                                                                        if ($statut -> flag && ($statut -> flag & HAS_RESA_GOOD)) {
468                                                                                // archivage resa
469                                                                                $rqt_arch = "UPDATE resa_archive, resa SET resarc_pretee = 1 WHERE id_resa = '".$statut->id_resa."' AND resa_arc = resarc_id ";         
470                                                                                mysql_query($rqt_arch, $dbh);   
471                                                                                $rqt_arch = "select resarc_id from resa_archive, resa WHERE id_resa = '".$statut->id_resa."' AND resa_arc = resarc_id ";       
472                                                                                $resarc_res=mysql_query($rqt_arch, $dbh);
473                                                                                $resarc = mysql_fetch_object($resarc_res);
474                                                                                $resarc_id = $resarc->resarc_id;                                                               
475                                                                                // suppression de la resa pour ce lecteur
476                                                                                del_resa($id_empr, $statut -> idnotice, $statut -> idbulletin, $statut -> expl_cb);
477                                                                        }
478                                                                        // ajout du prêt
479                                                                        del_resa($id_empr, $statut -> idnotice, $statut -> idbulletin, $statut -> expl_cb);
480                                                                        add_pret($id_empr, $id_expl, $cb_doc,$resarc_id,$short_loan);
481                                                                        // mise à jour de l'affichage
482                                                                        if($pmb_pret_groupement){
483                                                                                if($id_group=groupexpls::get_group_expl($cb_doc)){
484                                                                                        // ce document appartient à un groupe
485                                                                                        $is_doc_group=1;
486                                                                                        $groupexpl=new groupexpl($id_group);$information_text.= $groupexpl->get_confirm_form($cb_doc);
487                                                                                        $information_group= $groupexpl->get_confirm_form($cb_doc);
488                                                                                        //      $statut->flag+=IS_GROUP; client ne veut pas de comfirmation
489                                                                                }
490                                                                        }
491                                                                        // ajout du bouton d'annulation violente
492                                                                        $erreur_affichage = $information_group."<hr />
493                                                                                <div class='row'>
494                                                                                <div class='colonne10'><img src='./images/info.png' /></div>
495                                                                                <div class='colonne-suite'>$titre_prete : <span class='erreur'>".$msg[384]."</span><br />
496                                                                                ";
497                                                                        if($pmb_play_pret_sound)$alert_sound_list[]="information";
498                                                                        $erreur_affichage.= "<input type='button' class='bouton' value='${msg[76]}' onClick=\"document.location='circ.php?categ=pret&sub=pret_annulation&id_empr=".$id_empr."&id_expl=".$id_expl."&cb_doc=".$cb_doc."&short_loan=".$short_loan."'\" />";
499                                                                       
500                                                                        if($pmb_printer_ticket_url) $erreur_affichage.="&nbsp;<a href='#' onclick=\"print_ticket('./ajax.php?module=circ&categ=print_pret&sub=one&id_empr=".$id_empr."&id_expl=".$id_expl."&cb_doc=$cb_doc'); return false;\"><img src='./images/print.gif' alt='Imprimer...' title='Imprimer...' align='middle' border='0'></a>";
501                                                                        else $erreur_affichage.= "&nbsp;<input type='button' class='bouton' value='${msg[1300]}' onclick=\"openPopUp('./pdf.php?pdfdoc=ticket_pret&cb_doc=$cb_doc&id_empr=$id_empr', 'ticket', 600, 500, -2, -2, 'toolbar=no, dependent=yes, resizable=yes')\" />";
502                                                                        $erreur_affichage.= "</div></div>";
503                                                                        if ($statut->expl_comment) $erreur_affichage.= "<div class='expl_comment'>".$statut->expl_comment."</div>";
504
505                                                                        $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
506                                                                        $affichage = $empr -> fiche;
507                                                                        // prise en compte du param d'envoi de ticket de prêt électronique
508                                                                        if ($empr_electronic_loan_ticket && $param_popup_ticket) {
509                                                                                electronic_ticket($id_empr, $cb_doc); 
510                                                                        }
511                                                                               
512                                                                        // prise en compte du param popup_ticket
513                                                                        if ($param_popup_ticket == 1)
514                                                                                if(!$pmb_printer_ticket_url) 
515                                                                                        print "<script type='text/javascript'>openPopUp('./pdf.php?pdfdoc=ticket_pret&cb_doc=$cb_doc&id_empr=$id_empr', 'ticket', 600, 500, -2, -2, 'toolbar=no, dependent=yes, resizable=yes');</script>";
516                                                                                else 
517                                                                                        $affichage.= "<script type='text/javascript'>print_ticket('./ajax.php?module=circ&categ=print_pret&sub=one&id_empr=".$id_empr."&id_expl=".$id_expl."&cb_doc=$cb_doc');</script>";       
518                                                                        } // fin else if ($statut -> flag & ALREADY_LOANED || $statut -> flag & ALREADY_BORROWED) {
519                                                } // fin de quoi ???
520                                        } else { // pas d'exemplaire avec ce code-barre
521                                                $erreur_affichage = "<hr />
522                                                <div class='row'>
523                                                <div class='colonne10'><img src='./images/error.png' /></div>
524                                                <div class='colonne-suite'><b>$cb_doc</b> : <span class='erreur'>$msg[367]</span></div>
525                                                </div><br />";
526                                                // on a un code-barres, est-ce un cb empr ?
527                                                $query_empr = "select id_empr, empr_cb from empr where empr_cb='".$cb_doc."' ";
528                                                $result_empr = mysql_query($query_empr, $dbh);
529                                                if(mysql_num_rows($result_empr)) {
530                                                        $erreur_affichage.="<script type=\"text/javascript\">document.location='./circ.php?categ=pret&form_cb=$cb_doc'</script>";
531                                                        }
532                                                $alert_sound_list[]="critique";
533
534                                                $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
535                                                $affichage = $empr -> fiche;
536                                        }
537                                } else { // aucun $id_expl ni de $cd_doc
538                                        $erreur_affichage = "<hr />
539                                        <div class='row'>
540                                        <div class='colonne10'></div>
541                                        <div class='colonne-suite'><span class='erreur'></span></div>
542                                        </div><br />";
543                                        $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
544                                        $affichage = $empr -> fiche;
545                                }
546                        } else { // date adhésion dépassée et ici on bloque !!!
547                                $erreur_affichage = "<hr />
548                                <div class='row'>
549                                <div class='colonne10'></div>
550                                <div class='colonne-suite'><span class='erreur'>$msg[pret_impossible_adhesion]</span></div>
551                                </div><br />";
552                                $empr = new emprunteur($id_empr, $erreur_affichage, FALSE, 1);
553                                $affichage = $empr -> fiche;
554                        }
555                } else {
556                        // afficher 'lecteur inconnu'
557                        $erreur_affichage = "<hr />
558                        <div class='row'>
559                        <div class='colonne10'><img src='./images/error.png' /></div>
560                        <div class='colonne-suite'><span class='erreur'>$msg[388]</span></div>
561                        </div><br />";
562                        $alert_sound_list[]="critique";
563                        print $erreur_affichage;
564                }
565
566        } else { // pas d'idempr
567
568                $query = "select id_empr as id from empr where empr_cb='$form_cb' ";
569                $result = mysql_query($query, $dbh);
570                $id = @ mysql_result($result, '0', 'id');
571                if (($id) && ($form_cb)) {
572                        $erreur_affichage = "<hr />
573                        <div class='row'>
574                        <div class='colonne10'></div>
575                        <div class='colonne-suite'><span class='erreur'></span></div>
576                        </div><br />";
577                        if ($id_notice) {
578                                if ($type_resa)
579                                        echo "<script> parent.location.href='./circ.php?categ=resa_planning&resa_action=add_resa&id_empr=$id&groupID=$groupID&id_notice=$id_notice'; </script>";
580                                else
581                                        echo "<script> parent.location.href='./circ.php?categ=resa&id_empr=$id&groupID=$groupID&id_notice=$id_notice'; </script>";                                     
582                        } elseif($id_bulletin) {
583                                echo "<script> parent.location.href='./circ.php?categ=resa&id_empr=$id&groupID=$groupID&id_bulletin=$id_bulletin'; </script>";
584                        } else {
585                                $empr = new emprunteur($id, $erreur_affichage, FALSE, 1);
586                                $affichage = $empr -> fiche;
587                        }
588                } else {
589                        include ('./circ/empr/empr_list.inc.php');
590                }
591        } /* fin if else ajouté par ER pour fonction annulation */
592}
593//Comme dans $affichage on met la fiche de l'emprunteur ($affichage = $empr -> fiche) à aucun moment !!voir_sugg!! ne peut être encore présent
594if(SESSrights & ACQUISITION_AUTH){
595        global $nb_per_page;
596        $ori = ($id_empr ? $id_empr : $id);
597        $req = "select count(id_suggestion) as nb from suggestions, suggestions_origine where num_suggestion=id_suggestion and origine='".$ori."' and type_origine='1'  ";
598        $res=mysql_query($req,$dbh);
599        $btn_sug = "";
600        $sug = mysql_fetch_object($res);
601        if($sug->nb){
602                $btn_sug = "<input type='button' class='bouton' id='see_sug' name='see_sug' value='".$msg['acquisition_lecteur_see_sugg']."' onclick=\"document.location='./acquisition.php?categ=sug&action=list&user_id=$ori&user_statut=1' \" />";
603        } 
604        $affichage = str_replace('!!voir_sugg!!',$btn_sug,$affichage);
605}else{
606        $affichage = str_replace('!!voir_sugg!!',"",$affichage);
607}
608//print $erreur_affichage ;
609print pmb_bidi($affichage);
610
611// <-------------- do_confirm_box() ------------>
612// fabrique une boite de confirmation pour la fiche lecteur
613function do_confirm_box($id_empr, $id_expl, $cb_doc, $message, $confirm_flag) {
614        global $confirm;
615        global $msg;
616        global $alert_sound_list;// l'utilisateur veut-il les sons d'alerte
617        global $quota,$pret_arc;
618       
619        $alert_sound_list[]="question";
620       
621        $warning.= "<table border='0' cellpadding='3' width='100%'>
622                        <tr>
623                                <td>
624                                        <span><img src='./images/error.gif' />document $cb_doc</span>
625                                </td>
626                        </tr>
627                        <tr>
628                                <td>
629                                        $message
630                                </td>
631                        </tr>
632                        <tr>
633                                <td>
634                                        <input type='button' class='bouton' value='${msg[76]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr'\" />";
635        $confirm = $confirm + $confirm_flag;
636        $warning.= "&nbsp;
637                                        <input type='button' class='bouton' value='${msg[389]}' onClick=\"document.location='./circ.php?categ=pret&id_empr=$id_empr&cb_doc=$cb_doc&confirm=$confirm&quota=$quota&pret_arc=$pret_arc'\" />
638                                </td>
639                        </tr>
640                        </table>";
641        return $warning;
642}
643
644// <-------------- check_empr --------------->
645// teste l'id_empr passée en paramètre (check si l'emprunteur existe)
646function check_empr($id) {
647        global $dbh;
648        if (!$id)
649                return FALSE;
650        $query = "select count(1) as qte from empr where id_empr='$id' ";
651        $result = mysql_query($query, $dbh);
652        return mysql_result($result, 0, 0);
653
654}
655
656// <------------- check_quota --------------->
657//Vérifie les quotas de prêt si activés
658function check_quota($id_empr, $id_expl) {
659        global $msg;
660        global $pmb_quotas_avances, $pmb_short_loan_management, $short_loan;
661       
662        if ($pmb_quotas_avances) {
663                //Initialisation des quotas pour nombre de documents prêtables
664                if ($pmb_short_loan_management && $short_loan) {
665                        $qt = new quota("SHORT_LOAN_NMBR_QUOTA");
666                } else {
667                        $qt = new quota("LEND_NMBR_QUOTA");
668                }//Tableau de passage des paramètres
669                $struct["READER"] = $id_empr;
670                $struct["EXPL"] = $id_expl;
671                //Test du quota pour l'exemplaire et l'emprunteur
672                if ($qt -> check_quota($struct)) {
673                        //Si erreur, récupération du message et peut-on forcer ou non ?
674                        $error["MESSAGE"] = $qt -> error_message;
675                        $error["FORCE"] = $qt -> force;
676                } else
677                        $error = "";
678        }
679        return $error;
680}
681
682// <-------------- get_expl_id_from_cb() --------------->
683// récupère l'id d'un exemplaire d'après son code barre
684function get_expl_id_from_cb($cb) {
685        global $dbh;
686        if (!$cb)
687                return FALSE;
688        $query = "select expl_id as id from exemplaires where expl_cb='$cb' limit 1";
689        $result = mysql_query($query, $dbh);
690        return @ mysql_result($result, '0', 'id');
691
692}
693
694// <-------------- check_document() --------------->
695// récupère différents paramètres sur le document à emprunter
696/* ce qui nous intéresse :
697- si le document est inconnu : on ne fait rien bien entendu -> retour EX_INCONNU
698- si le document est déja en prêt -> allready_BORROWED
699- si l'exemplaire a une note -> l'utilisateur doit confirmer le prêt (HAS_NOTE)
700- si le document est en consultation sur place -> l'utilisateur doit confirmer le prêt retour SUR_PLACE
701- si le document est réservé pour un autre lecteur -> l'utilisateur doit confirmer le prêt retour HAS_RESA
702- si le document est réservé pour ce lecteur -> on efface la réservation et on retourne EX_OK
703
704- si des réservations sont planifiées pour un exemplaire du document :
705        nb exemplaires réservés > nb exemplaires dispos >> ok
706        nb exemplaires réservés <= nb exemplaires dispos >> on affiche les résas planifiées
707*/
708
709
710function check_document($id_expl, $id_empr) {
711
712        global $dbh;
713        global $pmb_resa_planning;
714        global $empr_archivage_prets, $pmb_loan_trust_management;
715        $retour = new stdClass();
716        $retour -> flag = 0;
717
718        if (!$id_expl || !$id_empr)
719                return $retour -> flag;
720
721        // on tente de récupérer les infos exemplaire utiles
722        $query = "select expl_cote, location_libelle, section_libelle, tdoc_libelle, e.expl_cb as cb, e.expl_id as id, e.expl_location, s.pret_flag as pretable, s.statut_allow_resa as reservable, e.expl_notice as notice, e.expl_bulletin as bulletin, e.expl_note as note, expl_comment, s.statut_libelle as statut";
723        $query.= " from exemplaires e, docs_statut s, docs_location l, docs_section sec, docs_type t";
724        $query.= " where e.expl_id=$id_expl";
725        $query.= " and s.idstatut=e.expl_statut";
726        $query.= " and sec.idsection=e.expl_section";
727        $query.= " and l.idlocation=e.expl_location";
728        $query.= " and t.idtyp_doc =e.expl_typdoc";
729        $query.= " limit 1";
730        $result = mysql_query($query, $dbh);
731
732        // exemplaire inconnu
733        if (!mysql_num_rows($result)) {
734                $retour -> flag = EX_INCONNU;
735                return $retour;
736        }
737        $expl = mysql_fetch_object($result);
738
739        $retour -> expl_cb = $expl -> cb;
740        $retour -> notice_id = $expl -> notice;
741        $retour -> bulletin_id = $expl -> bulletin;
742        $retour -> expl_cote = $expl -> expl_cote;
743        $retour -> tdoc_libelle = $expl -> tdoc_libelle;
744        $retour -> location_libelle = $expl -> location_libelle;
745        $retour -> section_libelle = $expl -> section_libelle;
746        $retour -> expl_comment = $expl -> expl_comment;
747        $retour->reservable=$expl->reservable;
748        // une autre query pour savoir si l'exemplaire est en prêt...
749        $query = "select pret_idempr from pret where pret_idexpl=$id_expl limit 1";
750        $result = mysql_query($query, $dbh);
751        if (@ mysql_num_rows($result)) {
752                // l'exemplaire est déjà en prêt
753                $empr = mysql_result($result, '0', 'pret_idempr');
754                // l'emprunteur est l'emprunteur actuel
755                if ($empr == $id_empr) $retour -> flag += ALREADY_LOANED;
756                        else $retour -> flag += ALREADY_BORROWED;
757        }
758
759        // cas de l'exemplaire qui a une note
760        if ($expl -> note) {
761                $retour -> flag += HAS_NOTE;
762                $retour -> note = $expl -> note;
763        }
764
765        // cas de l'exemplaire en consultation sur place
766        if (!$expl -> pretable) {
767                // l'exemplaire est en consultation sur place
768                $retour -> flag += NON_PRETABLE;
769                if (!$retour -> note) $retour -> note = $expl -> statut;
770                        else $retour -> note = $retour -> note." / ".$expl -> statut;
771                $retour -> statut = $expl -> statut;
772        }
773
774        // cas des réservations
775        // on checke si l'exemplaire a une réservation
776        $query = "select resa_idempr as empr, id_resa, resa_cb, concat(ifnull(concat(empr_nom,' '),''),empr_prenom) as nom_prenom, empr_cb from resa left join empr on resa_idempr=id_empr where resa_idnotice='$expl->notice' and resa_idbulletin='$expl->bulletin' order by resa_date limit 1";
777        $result = mysql_query($query, $dbh);
778        if (mysql_num_rows($result)) {
779                $reservataire = mysql_result($result, 0, 'empr');
780                $id_resa = mysql_result($result, 0, 'id_resa');
781                $resa_cb = mysql_result($result, 0, 'resa_cb');
782                $nom_prenom = mysql_result($result, 0, 'nom_prenom');
783                $empr_cb = mysql_result($result, 0, 'empr_cb');
784                $retour -> idnotice = $expl -> notice;
785                $retour -> idbulletin = $expl -> bulletin;
786                $retour -> id_resa = $id_resa ;
787                $retour -> resa_cb = $resa_cb ;
788                if ($reservataire == $id_empr) {
789                        // la réservation est pour ce lecteur
790                        $retour -> flag += HAS_RESA_GOOD;
791                } else {
792                        if ($expl->cb==$resa_cb) // réservé (validé) pour un autre lecteur
793                        $retour -> flag += HAS_RESA_FALSE;
794                        global $reservataire_nom_prenom ;
795                        global $reservataire_empr_cb ;
796                        $reservataire_nom_prenom = $nom_prenom ; 
797                        $reservataire_empr_cb = $empr_cb ; 
798                }
799        }
800
801        // cas des réservations planifiées             
802        if($pmb_resa_planning) {               
803                global $pmb_location_resa_planning;
804               
805                // On compte les réservations planifiées sur ce document à des dates ultérieures
806                $q = "select resa_idempr as empr, id_resa, concat(ifnull(concat(empr_nom,' '),''),empr_prenom) as nom_prenom ";
807                $q.= "from resa_planning left join empr on resa_idempr=id_empr ";
808                $q.= "where resa_idnotice = '".$expl->notice."' ";
809                if ($pmb_location_resa_planning) $q.= "and empr_location='".$expl->expl_location."' ";
810                $q.= "and resa_date_debut >= curdate() ";
811                $q.= "order by resa_date_debut ";
812                $r = mysql_query($q, $dbh);
813                $nb_resa = mysql_num_rows($r); 
814
815                // On compte les exemplaires disponibles
816                $q = "select count(1) ";
817                $q.= "from exemplaires left join pret on expl_notice = pret_idexpl ";
818                $q.= "and pret_idexpl is null ";
819                $q.= "where expl_notice = '".$expl->notice."' ";
820                if ($pmb_location_resa_planning) $q.= "and expl_location='".$expl->expl_location."'";
821                $r = mysql_query($q, $dbh);
822                $nb_dispo = mysql_result($r, 0, 0);
823
824                //$retour -> idnotice = $expl -> notice;
825
826                if (($nb_dispo-$nb_resa) <= 0 ) { 
827                        $retour -> flag += HAS_RESA_PLANNED_FALSE;
828                }
829        }
830       
831        //cas du non monopole
832        if ($pmb_loan_trust_management) {
833                $np=0;
834                $npa=0;
835                $qp = "select count(*) from pret join exemplaires on pret_idexpl=expl_id where pret_idempr='".$id_empr."' ";
836                $qp.= (($expl->notice)?"and expl_notice='".$expl->notice."' ":"and expl_bulletin='".$expl->bulletin."' ");
837                $rp = mysql_query($qp, $dbh);
838                $np=mysql_result($rp,0,0);
839                if($empr_archivage_prets) { 
840                        $qpa = "select count(*) from pret_archive where arc_id_empr='".$id_empr."' ";
841                        $qpa.= (($expl->notice)?"and arc_expl_notice='".$expl->notice."' ":"and arc_expl_bulletin='".$expl->bulletin."' ");
842                        $qpa.= "and date_add(arc_fin, interval ".$pmb_loan_trust_management." day) >= now()";
843                        $rpa = mysql_query($qpa, $dbh);
844                        $npa=mysql_result($rpa,0,0);
845                }
846                if ($np || $npa) { 
847                        $retour -> flag += IS_TRUSTED;
848                }
849        }
850       
851        return $retour;
852}
853
854
855// ajoute le prêt en table
856function add_pret($id_empr, $id_expl, $cb_doc,$resarc_id=0,$short_loan=0) {
857        // le lien MySQL
858        global $dbh, $msg;
859        global $pmb_quotas_avances, $pmb_utiliser_calendrier;
860        global $pmb_gestion_financiere,$pmb_gestion_tarif_prets;
861        global $include_path,$lang;
862        global $deflt2docs_location ;
863        global $pmb_pret_date_retour_adhesion_depassee;
864        global $pmb_short_loan_management;
865        global $pmb_transferts_actif;
866        /* on prépare la date de début*/
867       
868        $pret_date = today();
869
870        /* on cherche la durée du prêt */
871        if ($pmb_short_loan_management && $short_loan) {
872                if($pmb_quotas_avances) {
873                        //Initialisation de la classe
874                        $qt=new quota("SHORT_LOAN_TIME_QUOTA");
875                        $struct["READER"]=$id_empr;
876                        $struct["EXPL"]=$id_expl;
877                        $duree_pret=$qt->get_quota_value($struct);
878                        if ($duree_pret==-1) $duree_pret=0; 
879                } else {
880                                $query = "SELECT short_loan_duration as duree_pret";
881                                $query.= " FROM exemplaires, docs_type";
882                                $query.= " WHERE expl_id='".$id_expl;
883                                $query.= "' and idtyp_doc=expl_typdoc LIMIT 1";
884                                $result = @ mysql_query($query, $dbh) or die("can't SELECT exemplaires ".$query);
885                                $expl_properties = mysql_fetch_object($result);
886                                $duree_pret = $expl_properties -> duree_pret;
887                }       
888        } else {
889                if($pmb_quotas_avances) {
890                        //Initialisation de la classe
891                        $qt=new quota("LEND_TIME_QUOTA");
892                        $struct["READER"]=$id_empr;
893                        $struct["EXPL"]=$id_expl;
894                        $duree_pret=$qt->get_quota_value($struct);
895                        if ($duree_pret==-1) $duree_pret=0; 
896                } else {
897                                $query = "SELECT duree_pret";
898                                $query.= " FROM exemplaires, docs_type";
899                                $query.= " WHERE expl_id='".$id_expl;
900                                $query.= "' and idtyp_doc=expl_typdoc LIMIT 1";
901                                $result = @ mysql_query($query, $dbh) or die("can't SELECT exemplaires ".$query);
902                                $expl_properties = mysql_fetch_object($result);
903                                $duree_pret = $expl_properties -> duree_pret;
904                } 
905        }       
906        // calculer la date de retour prévue, tenir compte de la date de fin d'adhésion
907        if (!$duree_pret) $duree_pret="0" ; 
908        if($pmb_pret_date_retour_adhesion_depassee) {
909                $rqt_date = "select empr_date_expiration,if(empr_date_expiration>date_add('".$pret_date."', INTERVAL '$duree_pret' DAY),0,1) as pret_depasse_adhes, date_add('".$pret_date."', INTERVAL '$duree_pret' DAY) as date_retour from empr where id_empr='".$id_empr."'";
910        } else {
911                $rqt_date = "select empr_date_expiration,if(empr_date_expiration>date_add('".$pret_date."', INTERVAL '$duree_pret' DAY),0,1) as pret_depasse_adhes, if(empr_date_expiration>date_add('".$pret_date."', INTERVAL '$duree_pret' DAY),date_add('".$pret_date."', INTERVAL '$duree_pret' DAY),empr_date_expiration) as date_retour from empr where id_empr='".$id_empr."'";
912        }
913        $resultatdate = mysql_query($rqt_date) or die(mysql_error()."<br /><br />$rqt_date<br /><br />");
914        $res = mysql_fetch_object($resultatdate) ;
915        $date_retour = $res->date_retour ;
916        $pret_depasse_adhes = $res->pret_depasse_adhes ;
917        $empr_date_expiration= $res->empr_date_expiration;
918       
919        if ($pmb_utiliser_calendrier) {
920                if (($pret_depasse_adhes==0) || $pmb_pret_date_retour_adhesion_depassee) {
921                        $rqt_date = "select date_ouverture from ouvertures where ouvert=1 and to_days(date_ouverture)>=to_days('$date_retour') and num_location=$deflt2docs_location order by date_ouverture ";
922                        $resultatdate=mysql_query($rqt_date);
923                        $res=@mysql_fetch_object($resultatdate) ;
924                        if ($res->date_ouverture) $date_retour=$res->date_ouverture ;
925                } else {
926                        $rqt_date = "select date_ouverture from ouvertures where date_ouverture>=sysdate() and ouvert=1 and to_days(date_ouverture)<=to_days('$date_retour') and num_location=$deflt2docs_location order by date_ouverture DESC";
927                        $resultatdate=mysql_query($rqt_date);
928                        $res=@mysql_fetch_object($resultatdate) ;
929                        if ($res->date_ouverture) $date_retour=$res->date_ouverture ;
930                }
931                // Si la date_retour, calculée ci-dessus d'après le calendrier, dépasse l'adhésion, alors que c'est interdit,
932                // la date de retour doit etre le dernier jour ouvert
933                if(!$pmb_pret_date_retour_adhesion_depassee){
934                        $rqt_date = "SELECT DATEDIFF('$empr_date_expiration','$date_retour')as diff";
935                        $resultatdate=mysql_query($rqt_date);
936                        $res=@mysql_fetch_object($resultatdate) ;
937                        if ($res->diff<0) {
938                                $rqt_date = "select date_ouverture from ouvertures where date_ouverture>=sysdate() and ouvert=1 and to_days(date_ouverture)<=to_days('$empr_date_expiration') and num_location=$deflt2docs_location order by date_ouverture DESC";
939                                $resultatdate=mysql_query($rqt_date);
940                                $res=@mysql_fetch_object($resultatdate) ;
941                                if ($res->date_ouverture) $date_retour=$res->date_ouverture ;                                                                   
942                        }
943                }       
944        } 
945       
946        // insérer le prêt
947        $query = "INSERT INTO pret SET ";
948        $query.= "pret_idempr = '".$id_empr."', ";
949        $query.= "pret_idexpl = '".$id_expl."', ";
950        $query.= "pret_date   = sysdate(), ";
951        $query.= "pret_retour = '$date_retour', ";
952        $query.= "retour_initial = '$date_retour', ";
953        $query.= "short_loan_flag = ".(($pmb_short_loan_management && $short_loan)?"'1'":"'0'");
954        $result = @ mysql_query($query, $dbh) or die(mysql_error()."<br />can't INSERT into pret".$query);
955
956        // insérer la trace en stat, récupérer l'id et le mettre dans la table des prêts pour la maj ultérieure
957        $stat_avant_pret = pret_construit_infos_stat ($id_expl) ;
958        $stat_id = stat_stuff ($stat_avant_pret) ;
959        $query = "update pret SET pret_arc_id='$stat_id' where ";
960        $query.= "pret_idempr = '".$id_empr."' and ";
961        $query.= "pret_idexpl = '".$id_expl."' ";
962        $result = @ mysql_query($query, $dbh) or die("can't update pret for stats ".$query);
963        audit::insert_creation (AUDIT_PRET, $stat_id) ;
964       
965        if($resarc_id){
966                $rqt_arch = "UPDATE resa_archive SET resarc_arcpretid = $stat_id WHERE resarc_id = '".$resarc_id."' "; 
967                @ mysql_query($rqt_arch, $dbh);
968        }       
969        $query = "update exemplaires SET ";
970        $query.= "last_loan_date = sysdate() ";
971        $query.= "where expl_id= '".$id_expl."' ";
972        $result = @ mysql_query($query, $dbh) or die("can't update last_loan_date in exemplaires : ".$query);
973
974        $query = "update exemplaires SET ";
975        $query.= "expl_retloc=0 ";
976        $query.= "where expl_id= '".$id_expl."' ";
977        $result = @ mysql_query($query, $dbh) or die("can't update expl_retloc in exemplaires : ".$query);
978       
979        $query = "update empr SET ";
980        $query.= "last_loan_date = sysdate() ";
981        $query.= "where id_empr= '".$id_empr."' ";
982        $result = @ mysql_query($query, $dbh) or die("can't update last_loan_date in empr : ".$query);
983       
984        $query = "delete from resa_ranger ";
985        $query .= "where resa_cb='".$cb_doc."'";
986        $result = @ mysql_query($query, $dbh) or die("can't delete cb_doc in resa_ranger : ".$query);   
987       
988
989        //Débit du compte lecteur si nécessaire
990        if (($pmb_gestion_financiere)&&($pmb_gestion_tarif_prets)) {
991                $tarif_pret=0;
992                switch ($pmb_gestion_tarif_prets) {
993                        case 1:
994                                //Gestion simple
995                                $query = "SELECT tarif_pret";
996                                $query.= " FROM exemplaires, docs_type";
997                                $query.= " WHERE expl_id='".$id_expl;
998                                $query.= "' and idtyp_doc=expl_typdoc LIMIT 1"; 
999                               
1000                                $result = @ mysql_query($query, $dbh) or die("can't SELECT exemplaires ".$query);
1001                                $expl_tarif = mysql_fetch_object($result);
1002                                $tarif_pret = $expl_tarif -> tarif_pret;
1003                               
1004                                break;
1005                        case 2:
1006                                //Gestion avancée
1007                                //Initialisation Quotas
1008                                global $_parsed_quotas_;
1009                                $_parsed_quotas_=false;
1010                                $qt_tarif=new quota("COST_LEND_QUOTA","$include_path/quotas/own/$lang/finances.xml");
1011                                $struct["READER"]=$id_empr;
1012                                $struct["EXPL"]=$id_expl;
1013                                $tarif_pret=$qt_tarif->get_quota_value($struct);
1014                                break;
1015                }
1016                $tarif_pret=$tarif_pret*1;
1017                if ($tarif_pret) {
1018                        $compte_id=comptes::get_compte_id_from_empr($id_empr,3);
1019                        if ($compte_id) {
1020                                $cpte=new comptes($compte_id);
1021                                $explaire = new exemplaire('',$id_expl);
1022                               
1023                                if($explaire->id_notice == 0 && $explaire->id_bulletin){
1024                                        //C'est un exemplaire de bulletin
1025                                        $bulletin = new bulletinage_display($explaire->id_bulletin);
1026                                        $titre = strip_tags($bulletin->display);       
1027                                } elseif($explaire->id_notice) {
1028                                        $notice = new mono_display($explaire->id_notice);
1029                                        $titre = strip_tags($notice->header);
1030                                }                                                               
1031                                $libelle_expl = (strlen($titre)>15)?$explaire->cb." ".$titre:$explaire->cb." ".$titre;                         
1032                                $cpte->record_transaction("",abs($tarif_pret),-1,sprintf($msg["finance_pret_expl"],$libelle_expl),0);
1033                        }
1034                }
1035        }
1036        if ($pmb_transferts_actif){
1037                // si transferts validé (en attente d'envoi), il faut restaurer le statut
1038                global $PMBuserid;
1039                $rqt = "SELECT id_transfert FROM transferts,transferts_demande
1040                where
1041                num_transfert=id_transfert and
1042                etat_demande=1 and num_expl =$id_expl and etat_transfert=0 and sens_transfert=0";
1043                $res = mysql_query ( $rqt );
1044                if (mysql_num_rows($res)){
1045                        $obj = mysql_fetch_object($res);
1046                        $idTrans=$obj->id_transfert;
1047                        //Récupération des informations d'origine
1048                        $rqt = "SELECT statut_origine, num_expl FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
1049                        WHERE id_transfert=".$idTrans." AND sens_transfert=0";
1050                        $res = mysql_query($rqt);
1051                        $obj_data = mysql_fetch_object($res);
1052                        //on met à jour
1053                        $rqt = "UPDATE exemplaires SET expl_statut=".$obj_data->statut_origine." WHERE expl_id=".$obj_data->num_expl;
1054                        mysql_query ( $rqt );
1055                }
1056                // cloture les demandes de transfert pour résa, refusée ou pas
1057                // afin de générer les transfert en automatique dans le circuit classique des résa
1058                $req=" update transferts,transferts_demande
1059                set etat_transfert=1 ,
1060                motif=CONCAT(motif,'. Cloture, car parti en pret (gestion $PMBuserid, $id_empr)')
1061                where
1062                num_transfert=id_transfert and
1063                (etat_demande=4 or etat_demande=0 or etat_demande=1)and
1064                etat_demande != 3 and etat_demande!=2 and etat_demande!=5 and
1065                num_expl =$id_expl and etat_transfert=0 and sens_transfert=0
1066                ";
1067                mysql_query($req, $dbh);
1068        }
1069        // invalidation des résas avec ce code-barre, au cas où
1070        // $query = "update resa SET resa_cb='' where resa_cb='".$cb_doc."' ";
1071        // $result = @ mysql_query($query, $dbh) or die("can't update resa ".$query);
1072
1073}
1074
1075// efface une résa pour un emprunteur donné et réaffecte le cb éventuellement
1076function del_resa($id_empr, $id_notice, $id_bulletin, $cb_encours_de_pret) {
1077       
1078        global $dbh;
1079       
1080        if (!$id_empr || (!$id_notice && !$id_bulletin))
1081                return FALSE;
1082
1083        if (!$id_notice)
1084                $id_notice = 0;
1085        if (!$id_bulletin)
1086                $id_bulletin = 0;
1087        $rqt = "select resa_cb, id_resa from resa where resa_idnotice='".$id_notice."' and resa_idbulletin='".$id_bulletin."'  and resa_idempr='".$id_empr."' ";
1088        $res = mysql_query($rqt, $dbh);
1089        $obj = mysql_fetch_object($res);
1090        $cb_recup = $obj->resa_cb;
1091        $id_resa = $obj->id_resa;
1092
1093        // suppression
1094        $rqt = "delete from resa where id_resa='".$id_resa."' ";
1095        $res = mysql_query($rqt, $dbh);
1096       
1097        // si on delete une resa à partir d'un prêt, on invalide la résa qui était validée avec le cb, mais on ne change pas les dates, ça sera fait par affect_cb
1098        $rqt_invalide_resa = "update resa set resa_cb='' where resa_cb='".$cb_encours_de_pret."' " ; 
1099        $res = mysql_query ($rqt_invalide_resa, $dbh) ;
1100                                                                                               
1101        // réaffectation du doc éventuellement
1102        if ($cb_recup != $cb_encours_de_pret) {
1103                // les cb sont différents
1104                if (!verif_cb_utilise($cb_recup)) {
1105                        // le cb qui était affecté à la résa qu'on vient de supprimer n'est pas utilisé
1106                        // on va affecter le cb_récupéré à une resa non validée
1107                        $res_affectation = affecte_cb($cb_recup) ;
1108                        if (!$res_affectation && $cb_recup) {
1109                                // cb non réaffecté, il faut transférer les infos de la résa dans la table des docs à ranger
1110                                $rqt = "insert into resa_ranger (resa_cb) values ('".$cb_recup."') ";
1111                                $res = mysql_query($rqt, $dbh);
1112                                }
1113                        }
1114                }
1115        // Au cas où il reste des résa invalidées par resa_cb, on leur colle les dates comme il faut...
1116        $rqt_invalide_resa = "update resa set resa_date_debut='0000-00-00', resa_date_fin='0000-00-00' where resa_cb='' " ; 
1117        $res = mysql_query ($rqt_invalide_resa, $dbh) ;
1118        return TRUE;
1119}
Note: See TracBrowser for help on using the repository browser.