source: pmb4.2/trunk/fuentes/pmb/classes/transfert.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 45.3 KB
Line 
1<?php
2// +-------------------------------------------------+
3// | 2002-2007 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: transfert.class.php,v 1.38.2.1 2015-09-10 13:58:58 jpermanne Exp $
6
7if (stristr ( $_SERVER ['REQUEST_URI'], ".class.php" ))
8        die ( "no access" );
9
10require_once ("$include_path/templates/transferts.tpl.php");
11require_once ("$include_path/resa.inc.php");
12require_once ("$include_path/resa_func.inc.php");
13
14//********************************************************************************************
15// Classe de gestion des transferts d'exemplaire entre localisations
16//********************************************************************************************
17
18class transfert {
19       
20        //********************************************************************************************
21        // fonctions générales
22        //********************************************************************************************
23       
24        // constructeur
25        function transfert() {
26       
27        }
28       
29        //********************************************************************************************
30       
31        function _creer_transfert( $id_expl, $src, $dest, $t_trans, $date_ret='', $origine=0, $ori_comp ='', $motif='', $sens=0, $etat=0) {
32       
33                //on recupere le no de notice
34                $rqt = "SELECT expl_notice, expl_bulletin, expl_statut, expl_section 
35                                FROM exemplaires
36                                WHERE expl_id=".$id_expl;
37                $res = pmb_mysql_query( $rqt );
38                $expl = pmb_mysql_fetch_object($res);
39                //$id_notice = pmb_mysql_result( $res, 0 );
40       
41                // verif si déjà existrant
42                $rqt = "Select * from transferts ,transferts_demande where             
43                        num_transfert=id_transfert and num_expl=$id_expl  and                                   
44                        num_notice=".$expl->expl_notice." and
45                        num_bulletin=".$expl->expl_bulletin." and 
46                        type_transfert=$t_trans and
47                        etat_transfert=0 and
48                        origine=$origine and
49                        origine_comp ='".addslashes($ori_comp)."' and
50                        source=$src and
51                        destinations =$dest ";
52                       
53                $res=pmb_mysql_query( $rqt );
54                if (pmb_mysql_num_rows($res)) {
55                        $obj_data = pmb_mysql_fetch_object($res);
56                        $num=$obj_data->id_transfert;                           
57                } else {
58               
59                        //on cree l'enregistrement dans la table transferts
60                        $rqt = "INSERT INTO transferts (
61                                                num_notice, num_bulletin, date_creation, 
62                                                type_transfert, etat_transfert,
63                                                origine, origine_comp,
64                                                source, destinations, 
65                                                date_retour, motif ) VALUES (". 
66                                                $expl->expl_notice . ", " . $expl->expl_bulletin . ", NOW(),". 
67                                                $t_trans . ", 0, ".
68                                                $origine . ", '" . addslashes($ori_comp) . "',". 
69                                                $src . ", '" . $dest . "',
70                                                '" . $date_ret . "', '" .       addslashes($motif) . "' )";
71                        pmb_mysql_query( $rqt );
72       
73                        //on recupere l'id du transfert crée
74                        $num = pmb_mysql_insert_id();
75                }       
76                $rqt = "Select * from transferts_demande where
77                                        num_transfert=$num and                                   
78                                        sens_transfert=$sens and
79                                        num_location_source=$src and 
80                                        num_location_dest=$dest and
81                                        num_expl=$id_expl 
82                                        ";
83                $res=pmb_mysql_query( $rqt );
84
85                if (!pmb_mysql_num_rows($res)) {
86                               
87                        //la table transferts_demande
88                        $rqt = "INSERT INTO transferts_demande (
89                                                num_transfert, date_creation, 
90                                                sens_transfert, num_location_source, 
91                                                num_location_dest, num_expl,
92                                                statut_origine, section_origine,
93                                                etat_demande ) VALUES (". 
94                                                $num . ", NOW(), ". 
95                                                $sens . ", " . $src . ", ". 
96                                                $dest . ", " . $id_expl . ", ". 
97                                                $expl->expl_statut . ", " . $expl->expl_section . ", ". 
98                                                $etat .")";
99                        pmb_mysql_query( $rqt );
100                }
101                return $num;
102        }
103       
104        //change le statut d'un exemplaire
105        function _change_statut_exemplaire( $id_expl, $id_statut ) {
106       
107                $rqt =  "UPDATE exemplaires SET transfert_statut_origine = expl_statut WHERE expl_id=".$id_expl;
108                pmb_mysql_query( $rqt );
109               
110                //changement du statut
111                $rqt =  "UPDATE exemplaires SET expl_statut=".$id_statut." WHERE expl_id=".$id_expl;
112                pmb_mysql_query( $rqt );
113        }
114       
115        //change la localisation d'un exemplaire
116        function _change_localisation_exemplaire( $id_expl, $id_localisation, $sauve_loc = false ) {
117               
118                //sauvegarde de la localisation
119                if ($sauve_loc) {
120                        $rqt = "UPDATE exemplaires SET transfert_location_origine = expl_location WHERE expl_id=".$id_expl;
121                        pmb_mysql_query( $rqt );
122                }
123               
124                //changement de la localisation
125                $rqt = "UPDATE exemplaires SET expl_location=".$id_localisation." WHERE expl_id=".$id_expl;
126                pmb_mysql_query( $rqt );
127       
128        }
129       
130        //retourne le no de transfert à partir de son no d'exemplaire
131        function _explcb_2_transid($cbEx, $etat, $sens) {
132                global $deflt_docs_location;
133                //on recupere l'id de l'exemplaire*             
134                if($sens) {
135                        $loc_req= " AND num_location_dest=".$deflt_docs_location ;
136                } else {
137                        $loc_req= " AND num_location_source=".$deflt_docs_location ;
138                }
139                $rqt = "SELECT id_transfert
140                                        FROM transferts
141                                                INNER JOIN transferts_demande ON id_transfert=num_transfert
142                                                INNER JOIN exemplaires ON num_expl=expl_id 
143                                        WHERE etat_transfert=0 AND expl_cb='".$cbEx."' AND etat_demande=".$etat. " $loc_req " ;
144                $res = pmb_mysql_query( $rqt );
145                if (pmb_mysql_num_rows($res))
146                        return pmb_mysql_result( $res, 0 ); 
147                else
148                        return 0;
149        }
150
151        //retourne le no de transfert à partir de son no d'exemplaire
152        function _transid_2_explcb($transId, $etat) {
153                //on recupere l'id de l'exemplaire
154                $rqt = "SELECT expl_cb
155                                        FROM transferts
156                                                INNER JOIN transferts_demande ON id_transfert=num_transfert
157                                                INNER JOIN exemplaires ON num_expl=expl_id
158                                        WHERE id_transfert=".$transId." AND etat_demande=".$etat;
159                $res = pmb_mysql_query( $rqt );
160                if (pmb_mysql_num_rows($res))
161                        return pmb_mysql_result( $res, 0 ); 
162                else
163                        return 0;
164        }
165       
166        //retourne le no de transfert à partir de son no d'exemplaire
167        function _transid_2_explid($transId, $etat) {
168                //on recupere l'id de l'exemplaire
169                $rqt = "SELECT num_expl
170                                        FROM transferts
171                                                INNER JOIN transferts_demande ON id_transfert=num_transfert
172                                        WHERE id_transfert=".$transId." AND etat_demande=".$etat;
173                $res = pmb_mysql_query( $rqt );
174                if (pmb_mysql_num_rows($res))
175                        return pmb_mysql_result( $res, 0 ); 
176                else
177                        return 0;
178        }
179       
180        //sauvegarde la localisation de l'exemplaire
181        function _sauve_localisation_exemplaire($idExpl) {
182                $rqt = "UPDATE exemplaires SET transfert_location_origine=expl_location WHERE expl_id=".$idExpl;
183                pmb_mysql_query( $rqt );
184        }
185       
186        //restaure le statut de l'exemplaire
187        function _restaure_statut($idTrans) {
188                //Récupération des informations d'origine
189                $rqt = "SELECT statut_origine, num_expl FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
190                                        WHERE id_transfert=".$idTrans." AND sens_transfert=0";
191                $res = pmb_mysql_query($rqt);
192                $obj_data = pmb_mysql_fetch_object($res);
193                //on met à jour
194                $rqt = "UPDATE exemplaires SET expl_statut=".$obj_data->statut_origine." WHERE expl_id=".$obj_data->num_expl;
195                pmb_mysql_query( $rqt );
196        }
197       
198        //restaure la section de l'exemplaire
199        function _restaure_section($idTrans) {
200                global $deflt_docs_location;
201               
202                //Récupération des informations d'origine
203                $rqt = "SELECT num_expl, transfert_section_origine FROM transferts, transferts_demande, exemplaires 
204                                        WHERE id_transfert=num_transfert AND num_expl=expl_id AND id_transfert=".$idTrans." AND sens_transfert=1";
205                $res = pmb_mysql_query($rqt);
206                if(pmb_mysql_num_rows($res)){
207                        $obj_data = pmb_mysql_fetch_object($res);
208                        $expl_id = $obj_data->num_expl;
209                        $section_origine_id = $obj_data->transfert_section_origine;
210                       
211                        $ok_section=false;
212                        if($section_origine_id){
213                                //est-elle toujours dispo dans la loc ?
214                                $rqt =  "SELECT num_section FROM docsloc_section WHERE num_location=".$deflt_docs_location." AND num_section=".$section_origine_id;
215                                $res = pmb_mysql_query($rqt);
216                                if(pmb_mysql_num_rows($res)){
217                                        $ok_section=true;
218                                }
219                        }
220                        if(!$ok_section){
221                                //on va chercher la première dispo
222                                $rqt =  "SELECT idsection FROM docs_section INNER JOIN docsloc_section ON idsection=num_section WHERE num_location=".$deflt_docs_location." LIMIT 1";
223                                $res = pmb_mysql_query($rqt);
224                                $section_origine_id = pmb_mysql_result($res,0);
225                        }
226                        //on met à jour
227                        if($section_origine_id){
228                                $rqt = "UPDATE exemplaires SET expl_section=".$section_origine_id.", transfert_section_origine=".$section_origine_id." WHERE expl_id=".$expl_id;
229                                pmb_mysql_query( $rqt );
230                        }
231                }
232        }
233       
234        //restaure la localisation de l'exemplaire
235        function _restaure_localisation($idTrans) {
236               
237                //Récupération des informations d'origine
238                $rqt = "SELECT source, num_expl FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
239                                WHERE id_transfert=".$idTrans." AND sens_transfert=0";
240                $res = pmb_mysql_query($rqt);
241                $obj_data = pmb_mysql_fetch_object($res);
242               
243                //on met à jour
244                $rqt = "UPDATE exemplaires SET expl_location=".$obj_data->source." WHERE expl_id=".$obj_data->num_expl;
245                pmb_mysql_query( $rqt );
246/*
247                $rqt =  "UPDATE exemplaires " .
248                                "SET expl_location = transfert_location_origine " .
249                                "WHERE expl_id = " . $idExpl;
250
251                pmb_mysql_query( $rqt );
252*/
253        }
254       
255        //********************************************************************************************
256        // pour le retour de pret d'exemplaires
257        //********************************************************************************************
258
259        //sur un retour d'exemplaire on change la localisation
260        function retour_exemplaire_change_localisation($expl_id) {
261                global $transferts_retour_change_localisation;
262                global $deflt_docs_location;
263               
264                $rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
265                $res = pmb_mysql_query( $rqt );
266                $locOri = pmb_mysql_result( $res, 0 );
267               
268                $this->_change_localisation_exemplaire($expl_id, $deflt_docs_location, ($transferts_retour_change_localisation == "1"));
269               
270                $rqt = "SELECT idsection FROM exemplaires INNER JOIN docs_section ON expl_section=idsection INNER JOIN docsloc_section ON idsection=num_section
271                                WHERE expl_id=".$expl_id." AND num_location=".$deflt_docs_location;
272                $res = pmb_mysql_query($rqt);
273                if (pmb_mysql_num_rows($res)==0) {
274                        //la section n'existe pas pour cette localisation !
275                        //on cherche la premiere section dispo
276                        $rqt =  "SELECT idsection FROM docs_section INNER JOIN docsloc_section ON idsection=num_section WHERE num_location=".$deflt_docs_location." LIMIT 1";
277                        $res = pmb_mysql_query($rqt);
278                        $id_section = pmb_mysql_result($res,0);
279                } else 
280                        $id_section = pmb_mysql_result($res,0);
281
282                //changement de la localisation
283                $rqt =  "UPDATE exemplaires SET expl_section=".$id_section." WHERE expl_id=" . $expl_id;
284                pmb_mysql_query($rqt);
285                return $locOri;
286        }
287
288        static function is_retour_exemplaire_loc_origine($expl_id) {
289                $rqt = "SELECT expl_location,expl_cb, transfert_location_origine,transfert_statut_origine, expl_section FROM exemplaires WHERE expl_id=".$expl_id;
290                $res = pmb_mysql_query( $rqt );
291                $expl = pmb_mysql_fetch_object( $res );         
292                //$num = $this->enregistre_retour_cb($expl->expl_cb);
293               
294                global $deflt_docs_location;
295                //on recupere l'id de l'exemplaire*             
296
297       
298
299                $rqt = "SELECT id_transfert
300                                        FROM transferts
301                                                INNER JOIN transferts_demande ON id_transfert=num_transfert
302                                                INNER JOIN exemplaires ON num_expl=expl_id 
303                                        WHERE etat_transfert=0 AND expl_cb='".$expl->expl_cb."' AND etat_demande=3  AND num_location_source=".$deflt_docs_location ;
304
305                $res = pmb_mysql_query( $rqt );
306                if (pmb_mysql_num_rows($res))
307                        return  pmb_mysql_result( $res, 0 ); 
308                else
309                        return 0;               
310                       
311               
312        }
313        //sur un retour d'exemplaire sur sa localisation d'origine alors qu'il était localisé ailleur (par un transfert)
314        // il faut donc cloturer le retour programmé et rétablir la localisation, section cet exemplaire
315        function retour_exemplaire_loc_origine($expl_id) {
316                $rqt = "SELECT expl_location,expl_cb, transfert_location_origine,transfert_statut_origine, expl_section FROM exemplaires WHERE expl_id=".$expl_id;
317                $res = pmb_mysql_query( $rqt );
318                $expl = pmb_mysql_fetch_object( $res );         
319                //$num = $this->enregistre_retour_cb($expl->expl_cb);
320               
321                global $deflt_docs_location;
322                //on recupere l'id de l'exemplaire*             
323
324                $loc_req= " AND num_location_source=".$deflt_docs_location ;
325
326                $rqt = "SELECT id_transfert
327                                        FROM transferts
328                                                INNER JOIN transferts_demande ON id_transfert=num_transfert
329                                                INNER JOIN exemplaires ON num_expl=expl_id 
330                                        WHERE etat_transfert=0 AND expl_cb='".$expl->expl_cb."' AND etat_demande=3  AND num_location_source=".$deflt_docs_location ;
331
332                $res = pmb_mysql_query( $rqt );
333                if (pmb_mysql_num_rows($res))
334                        $idTrans= pmb_mysql_result( $res, 0 ); 
335                else
336                        return 0;               
337               
338                $this->enregistre_retour ( $idTrans );
339                $rqt = "SELECT  location_libelle 
340                        FROM transferts_demande,docs_location
341                        WHERE num_location_source=idlocation and num_transfert=".$idTrans." AND etat_demande=5";
342                $res = pmb_mysql_query( $rqt );
343                $value = pmb_mysql_fetch_array( $res );
344                $this->new_location_libelle=$value[0];
345               
346                $num = $this->enregistre_reception_cb($expl->expl_cb, 0,0);             
347                //purge les restes de transfert intermédiaire...
348                $rqt = "update transferts,transferts_demande, exemplaires set etat_transfert=1                                                 
349                                WHERE id_transfert=num_transfert and num_expl=expl_id  and etat_transfert=0 AND expl_cb='".$expl->expl_cb."' " ;
350                 pmb_mysql_query( $rqt );
351                return $num;
352        }       
353       
354        //sur un retour d'exemplaire on genere un transfert de retour
355        function retour_exemplaire_genere_transfert_retour($expl_id) {
356                global $transferts_retour_etat_transfert;
357                global $transferts_retour_motif_transfert;
358                global $deflt_docs_location;
359               
360                //on recupere la localisation de l'exemplaire
361                //elle va servir pour la destination du transfert
362                $rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
363                $res = pmb_mysql_query( $rqt );
364                $dest_id = pmb_mysql_result( $res, 0 );
365               
366                //création du transfert
367                $num = $this->_creer_transfert( $expl_id, $deflt_docs_location, $dest_id, 0, '', 3, '', $transferts_retour_motif_transfert, 1, 0);
368               
369                $this->enregistre_validation($num);
370               
371                $rqt = "update exemplaires set expl_location= $deflt_docs_location  WHERE expl_id=".$expl_id;
372                pmb_mysql_query( $rqt );
373               
374                if ($transferts_retour_etat_transfert == "1")
375                        $this->enregistre_envoi($num);
376                return $num;
377        }
378       
379        function retour_exemplaire_genere_transfert_retour_origine($expl_id) {
380                global $transferts_retour_etat_transfert;
381                global $transferts_retour_motif_transfert;
382                global $deflt_docs_location;
383               
384                $dest_id=$this->get_origine($expl_id);
385                if(!$dest_id){
386                        //on recupere la localisation de l'exemplaire
387                        //elle va servir pour la destination du transfert
388                        /*
389                        $rqt = "SELECT resa_trans FROM transferts,transferts_demande WHERE id_transfert= num_transfert and etat_transfert=0 and num_expl=$expl_id order by id_transfert desc limit 1";         
390                        $res = pmb_mysql_query( $rqt );
391               
392                        if (!pmb_mysql_num_rows($res)) return 0;
393                        $resa_tran = pmb_mysql_result( $res, 0 );
394                        if(!$resa_tran) return 0;
395                        */
396                        $rqt = "SELECT source FROM transferts,transferts_demande WHERE  id_transfert= num_transfert and etat_transfert=0 and num_expl=$expl_id order by id_transfert limit 1";
397                        $res = pmb_mysql_query( $rqt );
398                        if (pmb_mysql_num_rows($res)){
399                                $dest_id = pmb_mysql_result( $res, 0 );
400                        }else{
401                                $rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
402                                $res = pmb_mysql_query( $rqt );
403                                $dest_id = pmb_mysql_result($res,0);
404                        }
405                }
406                $rqt_loc = "SELECT  location_libelle FROM docs_location WHERE idlocation=".$dest_id ;
407                $res_loc = pmb_mysql_query( $rqt_loc );
408                $obj_loc = pmb_mysql_fetch_object($res_loc);           
409                $this->location_libelle_origine=$obj_loc->location_libelle;
410               
411                // on nettoie l'empilement de transfert
412                $rqt = "update transferts,transferts_demande set etat_transfert =1  WHERE       id_transfert= num_transfert and etat_transfert=0 and num_expl=$expl_id";
413                pmb_mysql_query( $rqt );               
414               
415                //création du transfert
416                $num = $this->_creer_transfert( $expl_id, $deflt_docs_location, $dest_id, 0, '', 3, '', $transferts_retour_motif_transfert, 1, 0);
417       
418                $this->enregistre_validation($num);
419       
420                if ($transferts_retour_etat_transfert == "1")
421                        $this->enregistre_envoi($num);
422                return $num;
423        }       
424       
425        // memorise la loc d'origine de l'exemplaire
426        function memo_origine($expl_id) {       
427                //on recupere la localisation de l'exemplaire
428                $rqt = "SELECT trans_source_numloc FROM transferts_source WHERE trans_source_numexpl=$expl_id ";
429                $res = pmb_mysql_query( $rqt );
430                if (pmb_mysql_num_rows($res)) {
431                        $origine_id = pmb_mysql_result( $res, 0 );             
432                        if($origine_id) return $origine_id;
433                }
434                //on recupere la localisation de l'exemplaire du premier transfert ouvert de cet exemplaire
435                $rqt = "SELECT source FROM transferts,transferts_demande WHERE  id_transfert= num_transfert and etat_transfert=0 and num_expl=$expl_id order by id_transfert limit 1";
436                $res = pmb_mysql_query( $rqt );
437                if (pmb_mysql_num_rows($res)) {
438                        $origine_id = pmb_mysql_result( $res, 0 );             
439                        if($origine_id){
440                                $rqt = "insert transferts_source SET trans_source_numloc=".$origine_id." , trans_source_numexpl=".$expl_id;
441                                pmb_mysql_query( $rqt );
442                                return $origine_id;                             
443                        }
444                }
445                if(!$origine_id){                       
446                        $rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
447                        $res = pmb_mysql_query( $rqt );
448                        $origine_id = pmb_mysql_result($res,0);
449                }                       
450                // delete au cas ou trans_source_numloc=0
451                $rqt = "DELETE FROM transferts_source WHERE trans_source_numexpl=".$expl_id ;
452                pmb_mysql_query( $rqt );
453               
454                $rqt = "insert transferts_source SET trans_source_numloc=".$origine_id." , trans_source_numexpl=".$expl_id;
455                pmb_mysql_query( $rqt ); 
456                return $origine_id;
457        }       
458       
459        // reset la loc d'origine de l'exemplaire par $deflt_docs_location
460        function reset_origine($expl_id) {     
461                global $deflt_docs_location;
462               
463                $rqt = "DELETE FROM transferts_source WHERE trans_source_numexpl=".$expl_id ;
464                pmb_mysql_query( $rqt );
465               
466                $rqt = "insert transferts_source SET trans_source_numloc=".$deflt_docs_location." , trans_source_numexpl=".$expl_id;
467                pmb_mysql_query( $rqt ); 
468        }               
469       
470        // retourne la loc d'origine de l'exemplaire
471        function get_origine($expl_id) {                       
472                //on recupere la localisation de l'exemplaire
473                $rqt = "SELECT trans_source_numloc FROM transferts_source WHERE trans_source_numexpl=$expl_id ";
474                $res = pmb_mysql_query( $rqt );
475                if (pmb_mysql_num_rows($res)) {
476                        $origine_id = pmb_mysql_result( $res, 0 );             
477                        if($origine_id) return $origine_id;
478                }
479        }       
480       
481        //restaure la localisation apres une sauvegarde
482        function retour_exemplaire_restaure_localisation($expl_id, $loc_id) {
483                $rqt = "UPDATE exemplaires SET expl_location=".$loc_id." WHERE expl_id=".$expl_id;
484                pmb_mysql_query( $rqt );
485        }
486       
487        //on supprime le transfert généré       
488        function retour_exemplaire_supprime_transfert($expl_id, $idTrans) {
489                $this->_restaure_statut($idTrans);
490                $rqt = "DELETE FROM transferts WHERE id_transfert=" . $idTrans;
491                pmb_mysql_query( $rqt );
492                $rqt = "DELETE FROM transferts_demande WHERE num_transfert=" . $idTrans;
493                pmb_mysql_query( $rqt );
494        }
495       
496        //********************************************************************************************
497        // pour la circulation
498        //********************************************************************************************
499       
500        //enregistre la validation d'un exemplaire à partir de son cb
501        function enregistre_validation_cb($cbEx) {
502                $idTrans = $this->_explcb_2_transid ( $cbEx, 0,0 );
503                if ($idTrans != 0) {
504                        $this->enregistre_validation ( $idTrans );
505                        $rqt = "SELECT  location_libelle 
506                                FROM transferts_demande,docs_location
507                                WHERE num_location_dest=idlocation and num_transfert=".$idTrans." AND etat_demande=1";
508                        $res = pmb_mysql_query( $rqt );
509                        $value = pmb_mysql_fetch_array( $res );
510                        $this->new_location_libelle=$value[0];                 
511                        return $cbEx;
512                } else
513                        return false;
514        }
515       
516        //enregistre la validation d'une liste de transferts
517        function enregistre_validation($listeTransferts) {
518                global $transferts_statut_validation;
519               
520                $tabTrans = explode ( ",", $listeTransferts );
521               
522                foreach ( $tabTrans as $transId ) {
523                        //pour chacun des transferts sélectionnés
524
525                        //on met a jour l'etat de la demande => on passe en validé
526                        $rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
527                                        SET etat_demande=1, date_visualisee = NOW()
528                                        WHERE id_transfert=".$transId." AND etat_demande=0 ";
529                        pmb_mysql_query( $rqt );
530
531                        //on recupere l'id de l'exemplaire
532                        $idExpl = $this->_transid_2_explid ( $transId, 1 );
533                       
534                        //on change le statut de l'exemplaire
535                        $this->_change_statut_exemplaire( $idExpl, $transferts_statut_validation);
536               
537                } // foreach
538       
539        }
540       
541        //enregistre le refus sur une liste de transfert
542        function enregistre_refus($listeTransferts, $motif) {
543                $tabTrans = explode ( ",", $listeTransferts );
544                foreach ( $tabTrans as $transId ) {
545                        //pour chacun des transferts sélectionnés
546
547                        //on met a jour l'etat de la demande => on passe en validé
548                        $rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
549                                        SET etat_demande = 4, date_visualisee = NOW(), motif_refus = '".$motif."'
550                                        WHERE id_transfert=".$transId." AND etat_demande<2 ";
551                        pmb_mysql_query( $rqt );
552               
553                        //on restaure le statut au cas ou il aurais été modifié...
554                        $this->_restaure_statut($transId);
555                }
556        }
557       
558        //valide l'envoi d'un exemplaire
559        function enregistre_envoi_cb($cbEx) {
560                $idTrans = $this->_explcb_2_transid ( $cbEx, 1 ,0);
561                if ($idTrans != 0) {
562                        $this->enregistre_envoi ( $idTrans );
563                        $rqt = "SELECT  location_libelle 
564                                FROM transferts_demande,docs_location
565                                WHERE num_location_dest=idlocation and num_transfert=".$idTrans." AND etat_demande=2";
566                        $res = pmb_mysql_query( $rqt );
567                        $value = pmb_mysql_fetch_array( $res );
568                        $this->new_location_libelle=$value[0];
569                        return $cbEx;
570                } else
571                        return false;
572        }
573       
574        //valide l'envoi d'une liste de transferts
575        function enregistre_envoi($listeTransferts) {
576                global $transferts_statut_transferts;
577                global $transferts_validation_actif;
578                global $transferts_statut_validation;
579               
580                $tabTrans = explode ( ",", $listeTransferts );
581               
582                foreach ( $tabTrans as $transId ) {
583                        //pour chacun des transferts sélectionnés
584                        $idExpl = $this->_transid_2_explid ( $transId, 1 ,0);
585                       
586                        if ( ($transferts_validation_actif == "1") && ($transferts_statut_validation != "0") )
587                                //si la validation est active et le changement de statut activé
588                                //on restaure le statut sauvegardé
589                                $this->_restaure_statut($transId);
590                       
591                        //on change le statut et on le sauvegarde
592                        $this->_change_statut_exemplaire($idExpl, $transferts_statut_transferts, true ,$transId);
593                       
594                        //on met a jour l'etat de la demande => on passe en envoyé
595                        $rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
596                                        SET etat_demande=2, date_envoyee=NOW()
597                                        WHERE id_transfert=".$transId." AND etat_demande = 1";
598                        pmb_mysql_query( $rqt );
599                }
600        }
601       
602        //effectue la reception d'un exemplaire
603        function enregistre_reception_cb($cbEx, $idStatut, $idSection,&$info=array()) {
604                $idTrans = $this->_explcb_2_transid ( $cbEx, 2 ,1);
605                if ($idTrans != 0) {
606                        $this->enregistre_reception ( $idTrans, $idStatut, $idSection,$info );
607                        return $idTrans;
608                } else
609                        return false;
610        }
611       
612        function get_motif($idTrans) {         
613                $rqt = "SELECT motif FROM transferts WHERE id_transfert=".$idTrans." ";
614                $res = pmb_mysql_query( $rqt );
615                if (pmb_mysql_num_rows($res)){ 
616                        $obj_data = pmb_mysql_fetch_object($res);
617                        return $obj_data->motif;
618                }
619                return "";
620        }       
621       
622        /*Autorise ou pas le prêt, et si transfert, on valide la reception
623         retourne:
624                 1: Prêt interdit
625                 2: prêt forcable
626                 0: prêt ok
627        */
628        function check_pret($cbEx,$force=0) {
629                global $transferts_pret_statut_transfert,$msg;
630                global $deflt_docs_location;
631                       
632                $this->check_pret_error_message='';
633                //on recupere l'id de l'exemplaire
634                $rqt = "SELECT id_transfert, sens_transfert, num_location_source, num_location_dest
635                                FROM transferts, transferts_demande, exemplaires                                               
636                                WHERE id_transfert=num_transfert and num_expl=expl_id  and expl_cb='".$cbEx."' AND etat_demande=2" ;
637                $res = pmb_mysql_query( $rqt );
638                if (pmb_mysql_num_rows($res)){ 
639                        $obj_data = pmb_mysql_fetch_object($res);
640                        $rqt_loc = "SELECT  location_libelle FROM transferts_demande,docs_location      WHERE num_location_source=idlocation and num_transfert=".$obj_data->id_transfert;
641                        $res_loc = pmb_mysql_query( $rqt_loc );
642                        $value = pmb_mysql_fetch_array( $res_loc );
643                        $location_source_libelle=$value[0];
644                        $rqt_loc = "SELECT  location_libelle FROM transferts_demande,docs_location      WHERE num_location_dest=idlocation and num_transfert=".$obj_data->id_transfert;
645                        $res_loc = pmb_mysql_query( $rqt_loc );
646                        $value = pmb_mysql_fetch_array( $res_loc );
647                        $location_dest_libelle=$value[0];
648                       
649                        if(!$obj_data->sens_transfert && ($deflt_docs_location == $obj_data->num_location_source)) {
650                                // c'est un envoi, coté du propriétaire: l'exemplaire aurai dû partir...
651                                if(!$transferts_pret_statut_transfert) {
652                                        // prêt interdit
653                                        $this->check_pret_error_message=str_replace("!!dest_location!!",$location_dest_libelle, $msg["transferts_check_pret_erreur_envoi"]);
654                                        return 1;
655                                }
656                                else {
657                                        // forçable en prêt, on le laisse en transfert ?
658                                        $this->check_pret_error_message=str_replace("!!dest_location!!",$location_dest_libelle, $msg["transferts_check_pret_erreur_envoi"]);
659                                        return 2;
660                                }                               
661                        }                               
662                        if(!$obj_data->sens_transfert && ($deflt_docs_location == $obj_data->num_location_dest)) {
663                                // c'est un envoi, coté destinataire: l'exemplaire aurai dû être réceptionné avant un prêt...
664                                if($force) {
665                                        $res_rcp = $this->enregistre_reception_cb($cbEx, 0, 0);
666                                        $this->_restaure_statut($obj_data->id_transfert);
667                                        if ($res_rcp==false) return 1; 
668                                } else {
669                                        $this->check_pret_error_message=str_replace("!!source_location!!",$location_source_libelle, $msg["transferts_check_pret_erreur_reception"]);
670                                        return 2;       
671                                }
672                        }       
673                        if($obj_data->sens_transfert && ($deflt_docs_location == $obj_data->num_location_source)) {
674                                // c'est un retour, coté destinataire: l'exemplaire aurai du être retourné et non prêté...
675                                if(!$transferts_pret_statut_transfert) {
676                                        // prêt interdit
677                                        $this->check_pret_error_message=str_replace("!!dest_location!!",$location_source_libelle, $msg["transferts_check_pret_erreur_envoi"]);
678                                        return 1;
679                                }
680                                else {
681                                        // forçable en prêt, on le laisse en transfert ?
682                                        $this->check_pret_error_message=str_replace("!!dest_location!!",$location_source_libelle, $msg["transferts_check_pret_erreur_envoi"]);
683                                        return 2;
684                                }                       
685                        }                                               
686                        if($obj_data->sens_transfert && ($deflt_docs_location == $obj_data->num_location_dest)) {
687                                // c'est un retour, coté du propriétaire: l'exemplaire aurai dû être réceptionné avant un prêt...
688                                if($force) {
689                                        $res_rcp = $this->enregistre_reception_cb($cbEx, 0, 0);
690                                        $this->_restaure_statut($obj_data->id_transfert);
691                                        if ($res_rcp==false) return 1; 
692                                } else {
693                                        $this->check_pret_error_message=str_replace("!!source_location!!",$location_dest_libelle, $msg["transferts_check_pret_erreur_reception"]);
694                                        return 2;       
695                                }                                       
696                        }                                                       
697                }
698                return 0;
699        }
700
701        //effectue la reception d'une liste de transferts
702        function enregistre_reception($listeTransferts, $idStatut, $listeSections,&$info=array()) {
703                global $deflt_docs_location;
704               
705                $tabTrans = explode ( ",", $listeTransferts );
706                $tabSections =  explode ( ",", $listeSections );
707               
708                $idSection = current($tabSections);
709               
710                $nb=0;
711                foreach ( $tabTrans as $transId ) {
712                        //on recupere l'id de l'exemplaire
713                        $noEx = $this->_transid_2_explid ( $transId, 2 );
714                        $info[$nb]=array();
715                        //le sens du transfert
716                        $rqt = "SELECT sens_transfert, type_transfert, origine, origine_comp, motif
717                                        FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
718                                        WHERE id_transfert=".$transId." AND etat_demande = 2";
719                        $res = pmb_mysql_query( $rqt );
720                        $value = pmb_mysql_fetch_array( $res );
721                        $sensTrans = $value[0];
722                        $typeTrans = $value[1];
723                        $origine = $value[2];
724                        $origineComp = $value[3];
725                        $info[$nb]["motif"] = $value[4];                               
726                       
727                        if ($sensTrans == 1) {
728                                //c'est un retour !
729                                //on cloture le transfert
730                                $rqt =  "UPDATE transferts SET etat_transfert=1 WHERE id_transfert=".$transId;
731                                pmb_mysql_query( $rqt );
732                               
733                                if ($typeTrans == 1) {
734                                        //si c'est un aller/retour
735                                        //on restaure la localisation sauvegardé de l'exemplaire
736                                        $this->_restaure_localisation($transId);
737                                }                               
738                                if($idSection){                                 
739                                        $rqt = "UPDATE exemplaires INNER JOIN transferts_demande ON num_expl=expl_id INNER JOIN transferts ON id_transfert=num_transfert
740                                                                SET expl_section=".$idSection.", transfert_section_origine=".$idSection."
741                                                                WHERE id_transfert=".$transId." AND etat_demande = 2";
742                                        pmb_mysql_query( $rqt );
743                                } else {
744                                        //on restaure le section sauvegardé de l'exemplaire
745                                        $this->_restaure_section($transId);
746                                }                               
747                                if($idStatut) {
748                                        //on met à jour le statut et la localisation de l'exemplaire
749                                        $rqt = "UPDATE exemplaires INNER JOIN transferts_demande ON num_expl=expl_id INNER JOIN transferts ON id_transfert=num_transfert
750                                                        SET expl_statut=".$idStatut.", expl_location = num_location_dest
751                                                        WHERE id_transfert=".$transId." AND etat_demande = 2";
752                                        pmb_mysql_query( $rqt );
753                                } else {
754                                        //on restaure le statut sauvegardé de l'exemplaire
755                                        $this->_restaure_statut($transId);
756                                }
757                               
758                        } else {
759                                //c'est un transfert
760                               
761                                // aller simple ?
762                                if ($typeTrans == 0) {
763                                        //on cloture le transfert => pas de gestion du retour
764                                        $rqt =  "UPDATE transferts SET etat_transfert=1 WHERE id_transfert=".$transId;
765                                        pmb_mysql_query( $rqt );
766                               
767                                } else {
768                                        //c'est l'aller donc
769                                        if ($origine==4 ) {
770                                                //c'est un transfert suite a une resa donc
771                                                //on recupere le cb pour
772                                                $explcb = $this->_transid_2_explcb($transId,2);
773                                        }
774                                        $id_section = $idSection;
775                                        if ($idSection==0) {
776                                                //chercher la meme section dans le nouveau site
777                                                $rqt = "SELECT idsection
778                                                                FROM exemplaires INNER JOIN docs_section ON expl_section=idsection INNER JOIN docsloc_section ON idsection=num_section
779                                                                WHERE expl_id=".$noEx." AND num_location=".$deflt_docs_location;
780                                                $res = pmb_mysql_query($rqt);
781                                                if (pmb_mysql_num_rows($res)==0) {
782                                                        //la section n'existe pas pour cette localisation !
783                                                        //on cherche la premiere section dispo
784                                                        $rqt = "SELECT idsection
785                                                                        FROM docs_section INNER JOIN docsloc_section ON idsection=num_section
786                                                                        WHERE num_location=".$deflt_docs_location." LIMIT 1";
787                                                        $res = pmb_mysql_query($rqt);
788                                                        $id_section = pmb_mysql_result($res,0);
789                                                } else 
790                                                        $id_section = pmb_mysql_result($res,0);
791                                        }
792                                       
793                                        $rqt = "UPDATE exemplaires INNER JOIN transferts_demande ON num_expl=expl_id INNER JOIN transferts ON id_transfert=num_transfert
794                                                        SET expl_section=".$id_section."
795                                                        WHERE id_transfert=".$transId." AND etat_demande = 2";
796                                        pmb_mysql_query( $rqt );
797                                       
798                                } //fin du else de if ($typeTrans == 0)
799                               
800                                //on met à jour le statut et la localisation de l'exemplaire
801                                if($idStatut) {
802                                        $rqt = "UPDATE exemplaires INNER JOIN transferts_demande ON num_expl=expl_id INNER JOIN transferts ON id_transfert=num_transfert
803                                                        SET expl_statut=".$idStatut.", expl_location = num_location_dest
804                                                        WHERE id_transfert=".$transId." AND etat_demande = 2";
805                                        pmb_mysql_query( $rqt );
806                                }else {
807                                        //on restaure le statut sauvegardé de l'exemplaire
808                                        $this->_restaure_statut($transId);
809                                }
810                                // Traitement de la résa                               
811                                if ($origine==4 && $typeTrans) {
812                                        //c'est un transfert suite a une resa donc
813                                        //valider la resa
814                                        $id_resa_validee = affecte_cb($explcb,$origineComp);
815                                        //on genere la lettre de confirmation
816                                        alert_empr_resa($id_resa_validee);                             
817                                }
818                       
819                        } //fin du else de if ($sensTrans == 0)
820                       
821                        //on met a jour l'etat de la demande => on passe en receptionné et terminer
822                        $rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
823                                        SET etat_demande=3, date_reception=NOW()
824                                        WHERE id_transfert=".$transId." AND etat_demande = 2";
825                        pmb_mysql_query( $rqt );
826                       
827                        //on passe à la section suivante
828                        $idSection = next($tabSections);
829                       
830                        $nb++;
831                } //fin du while
832        }
833       
834        //lance le retour d'un exemplaire
835        function enregistre_retour_cb($cbEx) {
836                $idTrans = $this->_explcb_2_transid ( $cbEx, 3, 1 );
837                if ($idTrans != 0) {
838                        $this->enregistre_retour ( $idTrans );
839                        $rqt = "SELECT  location_libelle 
840                                FROM transferts_demande,docs_location
841                                WHERE num_location_source=idlocation and num_transfert=".$idTrans." AND etat_demande=5";
842                        $res = pmb_mysql_query( $rqt );
843                        $value = pmb_mysql_fetch_array( $res );
844                        $this->new_location_libelle=$value[0];
845                        return $cbEx;
846                } else
847                        return false;
848       
849        }
850       
851        //effectue le retour d'une liste de transferts
852        function enregistre_retour($listeTransferts) {
853                global $transferts_statut_transferts;
854                $tabTrans = explode ( ",", $listeTransferts );
855                foreach ( $tabTrans as $transId ) {
856                        //on met a jour l'etat de la demande => on passe en receptionné et terminer
857                        $rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
858                                        SET etat_demande=5
859                                        WHERE id_transfert=".$transId." AND etat_demande=3";
860                        pmb_mysql_query( $rqt );
861                       
862                        //on recupere les infos de la demande de l'aller
863                        $rqt = "SELECT num_location_source, num_location_dest, num_expl
864                                        FROM transferts_demande
865                                        WHERE num_transfert=".$transId." AND etat_demande=5";
866                        $res = pmb_mysql_query( $rqt );
867                        $value = pmb_mysql_fetch_array( $res );
868                       
869                        //on insert l'information d'envoi du retour
870                        $rqt = "INSERT INTO transferts_demande (num_transfert, date_creation, sens_transfert, num_location_source,
871                                                num_location_dest, num_expl, etat_demande, date_visualisee, date_envoyee) VALUES (". 
872                                                $transId.", NOW(), 1, $value[1], $value[0], $value[2], 2, NOW(), NOW())";
873                        pmb_mysql_query( $rqt );
874                       
875                        //on met à jour le statut de l'exemplaire avec l'etat défini pour la validation
876                        $rqt = "UPDATE exemplaires SET expl_statut=".$transferts_statut_transferts."
877                                        WHERE expl_id=".$value[2];
878                        pmb_mysql_query( $rqt );
879                }
880        }
881
882        //change la date de retour d'un transfert
883        static function change_date_retour($idTransfert,$date_retour) {
884                $rqt = "UPDATE transferts SET date_retour='".$date_retour."' WHERE id_transfert=".$idTransfert;
885                pmb_mysql_query( $rqt );
886        }
887       
888        //cloture un ou plusieurs transferts
889        function cloture_transferts($listeTransferts) {
890                global $transferts_statut_transferts;
891               
892                $tabTrans = explode ( ",", $listeTransferts );
893               
894                foreach ( $tabTrans as $transId ) {     
895                        //on cloture le transfert
896                        $rqt =  "UPDATE transferts SET etat_transfert=1 WHERE id_transfert=".$transId;
897                        pmb_mysql_query( $rqt );
898                }
899        }
900/*     
901        function ajoute_demande($transId, $source, $motif, $dateRetour) {
902                global $deflt_docs_location;
903                global $transferts_validation_actif;
904       
905                //on met a jour l'etat de la demande => on passe en refus traité et la date de retour souhaitée
906                $rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
907                                SET etat_demande=6, date_retour='".$dateRetour."', motif='$motif'
908                                WHERE id_transfert=".$transId." AND etat_demande=4";
909                pmb_mysql_query( $rqt );
910
911                //recuperation des informations pour déterminer le nouveau no d'exemplaire
912                $rqt = "SELECT num_notice, num_bulletin
913                                FROM transferts
914                                WHERE id_transfert=".$transId;
915                $res = pmb_mysql_query( $rqt );
916                $value = pmb_mysql_fetch_array( $res );
917               
918                //on a besoin du no d'exemplaire pour la source donnée
919                $rqt = "SELECT expl_id
920                                FROM exemplaires
921                                WHERE expl_notice=".$value[0]." AND expl_bulletin=".$value[1]." AND expl_location=".$source;
922                $id_expl = pmb_mysql_result(pmb_mysql_query($rqt),0);           
923               
924                //la table transferts_demande
925                $rqt = "INSERT INTO transferts_demande (num_transfert, date_creation, sens_transfert, num_location_source, num_location_dest, num_expl, etat_demande)
926                                VALUES (".$transId.", NOW(), 0, ".$source.", ".$deflt_docs_location.", ".$id_expl.", 0)";
927                pmb_mysql_query( $rqt );
928                // $num pas initialisé ?????????????
929                if ($transferts_validation_actif == "0")
930                        //pas d'étape de validation => etape d'envoi direct
931                        $this->enregistre_validation($num);
932               
933        }
934        */
935        function ajoute_demande($transId, $id_expl, $motif, $dateRetour) {
936                global $deflt_docs_location;
937                global $transferts_validation_actif;
938               
939                $rqt = "SELECT expl_location from exemplaires WHERE expl_id=".$id_expl;
940                $res=pmb_mysql_query( $rqt );
941                $value = pmb_mysql_fetch_object( $res );               
942                $source=$value->expl_location;
943
944                //on met a jour l'etat de la demande => on passe en refus traité et la date de retour souhaitée
945                $rqt = "UPDATE transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
946                                SET etat_demande=6, source= ".$source.", date_retour='".$dateRetour."', motif='$motif'
947                                WHERE id_transfert=".$transId." AND etat_demande=4";
948                pmb_mysql_query( $rqt );
949
950                //la table transferts_demande
951                $rqt = "INSERT INTO transferts_demande (num_transfert, date_creation, sens_transfert, num_location_source, num_location_dest, num_expl, etat_demande)
952                                VALUES (".$transId.", NOW(), 0, ".$source.", ".$deflt_docs_location.", ".$id_expl.", 0)";
953                pmb_mysql_query( $rqt );
954               
955
956               
957        }       
958        //********************************************************************************************
959        // pour les réservations
960        //********************************************************************************************
961       
962        function transfert_pour_resa($cb_expl,$dest,$resa_id) {
963                global $transferts_resa_etat_transfert;
964                global $transferts_resa_motif_transfert;
965                global $transferts_nb_jours_pret_defaut;               
966                global $transferts_pret_demande_statut,$transferts_statut_validation;
967               
968                //récuperation des infos de l'exemplaire
969                $rqt = "SELECT expl_id, expl_location FROM exemplaires WHERE expl_cb='".$cb_expl."'";
970                $res = pmb_mysql_query($rqt);
971                $obj_expl = pmb_mysql_fetch_object($res);
972               
973                //generation de la date de retour par défaut
974                $date_retour = mktime(0, 0, 0, date("m"), date("d")+$transferts_nb_jours_pret_defaut, date("Y"));
975                $date_retour_mysql = date("Y-m-d", $date_retour);
976                       
977                //génération du transfert
978                $num = $this->_creer_transfert( $obj_expl->expl_id, $obj_expl->expl_location, $dest, 1, $date_retour_mysql, 4, $resa_id, $transferts_resa_motif_transfert);     
979               
980                if ($transferts_resa_etat_transfert == "1")
981                        //on valide
982                        $this->enregistre_validation($num);
983                elseif($transferts_pret_demande_statut){ 
984                        $this->_change_statut_exemplaire( $obj_expl->expl_id, $transferts_statut_validation);
985                }       
986                // lier la résa au transfert   
987                $rqt = "UPDATE transferts_demande SET resa_trans=$resa_id WHERE num_transfert=$num and num_expl='".$obj_expl->expl_id."' and etat_demande=0 ";
988                pmb_mysql_query( $rqt );
989               
990                //mémo de resa archive
991                $rqt = "SELECT resa_arc FROM resa WHERE id_resa='".$resa_id."'";
992                $res = pmb_mysql_query($rqt);
993                $obj_resa = pmb_mysql_fetch_object($res);
994               
995                $rqt = "UPDATE transferts_demande SET resa_arc_trans=".$obj_resa->resa_arc." WHERE num_transfert=$num and num_expl='".$obj_expl->expl_id."' and etat_demande=0 ";
996                pmb_mysql_query( $rqt );
997
998        }
999
1000        //********************************************************************************************
1001        // pour l'affichage des exemplaires
1002        //********************************************************************************************
1003
1004        // dit si un exemplaire est transférable.
1005        static function est_transferable($expl) {
1006                global $deflt_docs_location;
1007                global $transferts_transfert_transfere_actif;
1008                global $PMBuserid;
1009               
1010                $rqt = "SELECT expl_location, transfert_location_origine, transfert_flag
1011                                FROM exemplaires INNER JOIN docs_statut ON expl_statut=idstatut
1012                                WHERE expl_id=".$expl;
1013                $res = pmb_mysql_query($rqt) or die (pmb_mysql_error()."<br /><br />".$rqt);
1014                $value = pmb_mysql_fetch_array($res);
1015                $loc_expl = $value[0];
1016                $loc_expl_ori = $value[1];
1017                $trans_aut = $value[2];
1018               
1019                //on verifie que le pret est autorisé
1020                if ($trans_aut==0)      return false;
1021               
1022                // si l'exemplaire est ici: pas transférable   
1023                if ($deflt_docs_location == $loc_expl)  return false;
1024/*             
1025                //on verifie que l'exemplaire n'est pas déja sur le site de l'utilisateur
1026                if ($deflt_docs_location != $loc_expl) {
1027                       
1028                        //si les transferts d'exemplaires deja transféré ne sont pas autorisés
1029                        if ($transferts_transfert_transfere_actif == "0") {
1030                                //si ce n'est pas la localisation d'origine
1031                                if ($loc_expl != $loc_expl_ori) {
1032                                        //si la localisation d'origine n'a pas la valeure par défaut(0)
1033                                        if ($loc_expl_ori != 0)
1034                                                return false;
1035                                }
1036                        }
1037                } else
1038                        return false;
1039*/     
1040                $rqt = "SELECT COUNT(1) FROM pret WHERE pret_idexpl=".$expl; 
1041                $res = pmb_mysql_query( $rqt );
1042                if (pmb_mysql_result( $res, 0 ) )return false;
1043                                       
1044                //on verifie qu'un transfert n'est pas déja demande
1045                $rqt = "SELECT COUNT(1)
1046                                FROM transferts INNER JOIN transferts_demande ON id_transfert=num_transfert
1047                                WHERE etat_transfert=0 AND num_expl=".$expl." AND etat_demande<4";
1048                $res = pmb_mysql_query( $rqt );
1049                $nbTrans = pmb_mysql_result( $res, 0 );
1050               
1051                if ($nbTrans != 0)
1052                        return false;
1053               
1054                return true;
1055        }
1056       
1057        // dit si un exemplaire est doit faire l'objet d'un retour
1058        function est_retournable($expl) {
1059                global $deflt_docs_location;
1060                global $msg,$transferts_nb_jours_alerte;
1061                $dest_id=$this->get_origine($expl);
1062                if(!$dest_id){
1063                        $rqt = "SELECT id_transfert, sens_transfert, num_location_source, num_location_dest,expl_location
1064                                FROM transferts, transferts_demande, exemplaires                                               
1065                                WHERE id_transfert=num_transfert and num_expl=expl_id  and num_expl='".$expl."' AND etat_demande=3 and etat_transfert=0" ;
1066                        //Si c'est un transfert suite à une résa, le document est immédiatement transférable, sinon il est en dépôt jusqu'à la date d'alerte
1067                        $rqt.= " AND IF(origine=3,DATE_ADD(date_retour,INTERVAL -" . $transferts_nb_jours_alerte . " DAY)<=CURDATE(),1)";
1068                        $res = pmb_mysql_query( $rqt );
1069                        if (pmb_mysql_num_rows($res)){ 
1070                                $obj_data = pmb_mysql_fetch_object($res);
1071                               
1072                                $rqt_loc = "SELECT  location_libelle FROM transferts_demande,docs_location      WHERE num_location_source=idlocation and num_transfert=".$obj_data->id_transfert;
1073                                $res_loc = pmb_mysql_query( $rqt_loc );         
1074                                $obj_loc = pmb_mysql_fetch_object($res_loc);
1075                                $this->location_origine=$dest_id;
1076                                $this->location_libelle_source=$obj_loc->location_libelle;
1077                                return(true);
1078                        }else{
1079                                $rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl;
1080                                $res = pmb_mysql_query( $rqt );
1081                                $dest_id = pmb_mysql_result($res,0);
1082                                $rqt_loc = "SELECT  location_libelle FROM docs_location WHERE idlocation=".$dest_id ;
1083                                $res_loc = pmb_mysql_query( $rqt_loc );
1084                                $obj_loc = pmb_mysql_fetch_object($res_loc);
1085                                $this->location_libelle_source=$obj_loc->location_libelle;
1086                                $this->location_origine=$dest_id;
1087                                if($deflt_docs_location != $dest_id)return(true);                               
1088                        }
1089                }else{
1090                        $rqt_loc = "SELECT  location_libelle FROM docs_location WHERE idlocation=".$dest_id ;
1091                        $res_loc = pmb_mysql_query( $rqt_loc );
1092                        $obj_loc = pmb_mysql_fetch_object($res_loc);
1093                        $this->location_libelle_source=$obj_loc->location_libelle;
1094                        $this->location_origine=$dest_id;
1095                        if($deflt_docs_location != $dest_id)return(true);
1096                }
1097        }       
1098       
1099        //genere une demande de transfert
1100        function creer_transfert_catalogue($expl_id, $dest_id, $date_ret, $motif) {
1101                global $transferts_validation_actif;
1102
1103                //on recupere les informations manquantes sur l'exemplaire
1104                $rqt = "SELECT expl_location FROM exemplaires WHERE expl_id=".$expl_id;
1105                $res = pmb_mysql_query( $rqt );
1106                $src_id = pmb_mysql_result($res,0);
1107               
1108                //on creer le transfert
1109                $num = $this->_creer_transfert( $expl_id, $src_id, $dest_id, 1, $date_ret, 3, '', $motif, 0, 0 );
1110
1111                if ($transferts_validation_actif == "0")
1112                        //pas d'étape de validation => etape d'envoi
1113                        $this->enregistre_validation($num);
1114               
1115        }
1116
1117        //********************************************************************************************
1118        // pour l'administration
1119        //********************************************************************************************
1120       
1121        //enregistre les parametres
1122        static function admin_enregistre_params($tab_param) {
1123               
1124                foreach ( $tab_param as $param ) {
1125                        $varGlobal = $param["prefix"]."_".$param["nom"];
1126                        global $$varGlobal;
1127                        global $$param["champ"];
1128                       
1129                        $val_saisie = $$param["champ"];
1130                       
1131                        //on enregistre dans la variable globale
1132                        $$varGlobal = stripslashes($val_saisie);
1133                        //puis dans la base
1134                        $rqt = "UPDATE parametres SET valeur_param='".$val_saisie."'
1135                                        WHERE type_param='".$param["prefix"]."' AND sstype_param='".$param["nom"]."'";
1136                        pmb_mysql_query( $rqt );
1137                }
1138        }
1139       
1140        //change l'ordre de la localisation
1141        static function admin_enregistre_ordre_localisation($sens, $id) {
1142               
1143                //on recuper l'ordre
1144                $rqt = "SELECT transfert_ordre FROM docs_location WHERE idlocation=".$id;
1145                $ordreBase = pmb_mysql_fetch_array( pmb_mysql_query( $rqt ) );
1146               
1147                //on recupere l'id de la 2eme localisation
1148                $rqt = "SELECT idLocation FROM docs_location WHERE transfert_ordre=".($ordreBase[0] + $sens);
1149                $idSecond = pmb_mysql_fetch_array( pmb_mysql_query( $rqt ) );
1150               
1151                //on met a jour l'ordre
1152                $rqt = "UPDATE docs_location SET transfert_ordre=".($ordreBase[0] + $sens)." WHERE idLocation=".$id;
1153                pmb_mysql_query( $rqt );
1154               
1155                //puis celui du 2eme
1156                $rqt = "UPDATE docs_location SET transfert_ordre=".$ordreBase[0]." WHERE idLocation=".$idSecond[0];
1157                pmb_mysql_query( $rqt );
1158        }
1159       
1160        //enregistre le nouveau statut par défaut d'un site
1161        static function admin_enregistre_statuts_defaut($id, $statut) {
1162                //on met à jour l'enregistrement
1163                $rqt = "UPDATE docs_location SET transfert_statut_defaut=".$statut." WHERE idlocation=".$id;
1164                pmb_mysql_query( $rqt );
1165        }
1166       
1167        //purge l'historique des transferts
1168        static function admin_purge_historique($datefin) {
1169                $rqt = "DELETE transferts.*, transferts_demande.*
1170                                FROM transferts INNER JOIN transferts_demande
1171                                WHERE transferts.etat_transfert=1 AND transferts.date_creation<'".$datefin."' AND num_transfert=id_transfert";
1172                pmb_mysql_query( $rqt );
1173        }
1174
1175}
1176
1177?>
Note: See TracBrowser for help on using the repository browser.