source: pmb4.2/trunk/fuentes/pmb/admin/empr/import_clcc.inc.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: 11.5 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5
6if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
7
8require_once("$class_path/emprunteur.class.php");
9
10function show_import_choix_fichier($dbh) {
11        global $msg;
12        global $current_module ;
13
14print "
15<form class='form-$current_module' name='form1' ENCTYPE=\"multipart/form-data\" method='post' action=\"./admin.php?categ=empr&sub=implec&action=1\">
16<h3>Choix du fichier</h3>
17<div class='form-contenu'>
18        <div class='row'>
19                <label class='etiquette' for='form_import_lec'>".$msg["import_lec_fichier"]."</label>
20        <input name='import_lec' accept='text/plain' type='file' class='saisie-80em' size='40'>
21        </div>
22        <br />
23        <div class='row'>
24                <b>Pour plus de sécurité avant de lancer l'import faire une sauvegarde de la base de pmb</b>   
25        </div> 
26    <br />
27        <div class='row'>
28                Le fichier doit être au format cvs en ISO-8859-15 avec ; comme serapateur de champ et le texte entre guillemets (ex : \"Nom\"
29        </div>
30        <br />
31        <div class='row'>
32                Le statut de lecteur Interdit ne doit pas avoir été supprimé, la localisation des lecteurs sera 'Clcc'
33        </div>
34        <br />
35        <div class='row'>
36                Si les lecteurs n'ont pas de date de sortie :<br />     
37        </div>
38        <div class='row'>
39                <dd>    - Les lecteurs du fichier non présents dans la base seront abonnés pour 6 mois<br />   
40        </div>
41        <div class='row'>
42                <dd>    - L'abonnement des lecteurs déjà présent sera repousé de six mois<br />
43        </div>
44        <div class='row'>
45                Si les lecteurs ont une date de sortie elle sera prise comme date de fin d'abonnement
46        </div>
47        <br />
48        <div class='row'>
49                Pour les lecteurs de la base non présent dans le fichier, ils seront supprimés s'ils n'ont pas de prêt en cours sinon leur statut sera 'Interdit'       
50        </div> 
51</div>
52<div class='row'>
53        <input name='imp_empr' type='submit' class='bouton' value='Importer les lecteurs'/>
54</div>
55</form>";
56}
57
58function import_lect_par_lect($tab,$dbh){
59        global $lect_cree,$lect_erreur,$lect_modif,$lect_non_traite;
60        //update empr set `empr_modif`= DATE_SUB(empr_modif, INTERVAL 6 MONTH),`empr_date_expiration`= DATE_SUB(`empr_date_expiration`, INTERVAL 6 MONTH)
61        //On regarde si le lecteur existe déja en le recherchant par son badge
62        $requete="select id_empr,empr_modif from empr where empr_cb='".addslashes($tab[12])."'";
63        $select = pmb_mysql_query($requete,$dbh);
64        $nb_enreg = pmb_mysql_num_rows($select);
65        if($nb_enreg == 1){
66                if(pmb_mysql_result($select,0,1) != date('Y-m-j') ){
67                        $requete="update empr set empr_modif='".addslashes(date('Y-m-j'))."'";
68                        if($tab[4]){
69                                $data3=array();
70                                $data3=explode('/',$tab[4]);
71                                $data=$data3[2]."-".$data3[1]."-".$data3[0];
72                                $requete=$requete.", empr_date_expiration='".addslashes($data)."'";
73                        }else{
74                                $requete=$requete.", empr_date_expiration=DATE_ADD('".addslashes(date('Y-m-j'))."', INTERVAL 6 MONTH)";
75                        }
76                        $requete=$requete." where empr_cb='".addslashes($tab[12])."' ";
77                        if(!pmb_mysql_query($requete,$dbh)){
78                                $lect_erreur++;
79                                echo "Erreur : requete echoué : ".$requete."<br />";
80                        }else{
81                                $lect_modif++;
82                        }
83                }else{
84                        $lect_non_traite++;
85                        echo "Information : Le lecteur  ".$tab[1]." ".$tab[2]." avec le code barres ".$tab[12]." est présent plusieurs fois dans le fichier ou le fichier à déjà été traité<br />";
86                }
87                return;
88        }elseif($nb_enreg > 1){
89                $lect_erreur++;
90                echo "<b>Erreur : Attention le code barre ".$tab[12]." est en double veuillez le modifier pour l'un des deux lecteurs<b><br />";
91                return;
92        }
93       
94        $data=array();
95       
96        //$data['categ_libelle_create']="Indéterminé";
97        if($tab[8]){
98                $data['categ_libelle_create']=$tab[8];
99        }else{
100                $data['categ_libelle_create']="Indéterminé";
101        }
102       
103        if($tab[6]){
104                $data['codestat_libelle_create']=$tab[6];
105        }else{
106                $data['codestat_libelle_create']="Indéterminé";
107        }
108       
109        $data['date_adhesion']=date('Y-m-j');
110        $data['date_modif']=date('Y-m-j');
111       
112        if($tab[3]){
113                $data3=array();
114                $data3=explode('/',$tab[3]);
115                if(count($data3) == 3){
116                        $data['date_creation']=$data3[2]."-".$data3[1]."-".$data3[0];
117                }else{
118                        $data['date_creation']=date('Y-m-j');
119                }       
120        }else{
121                $data['date_creation']=date('Y-m-j');
122        }
123
124        if($tab[4]){
125                $data3=array();
126                $data3=explode('/',$tab[4]);
127                if(count($data3) == 3){
128                        $data['date_expiration']=$data3[2]."-".$data3[1]."-".$data3[0];
129                }
130        }
131       
132        if(!$data['date_expiration']){
133                if (($result = pmb_mysql_query("SELECT DATE_ADD('".addslashes(date('Y-m-j'))."', INTERVAL 6 MONTH)"))) {
134                        if (($row = pmb_mysql_fetch_row($result))) { 
135                                $data['date_expiration']= $row[0];             
136                        }
137                }
138        }
139       
140        $empr_cb =addslashes($tab[12]);
141        if(!$empr_cb)$empr_cb="ind";
142        $pb = 1 ;
143        $num_cb=1 ;
144        $empr_cb2=$empr_cb;
145        while ($pb==1) {
146                $q = "SELECT empr_cb FROM empr WHERE empr_cb='".$empr_cb2."' LIMIT 1 ";
147                $r = pmb_mysql_query($q, $dbh);
148                $nb = pmb_mysql_num_rows($r);
149                if ($nb) {
150                        $empr_cb2 =$empr_cb."-".$num_cb ;
151                        $num_cb++;
152                } else $pb = 0 ;
153        }
154        $data['cb']=stripslashes($empr_cb2);
155        if($data['cb'] != $tab[12]){
156                echo "<b>Information : pour le lecteur ".$tab[1]." ".$tab[2]." son code barres sera ".$data['cb']." car le matricule ".$tab[12]." est déja utilisé comme code barre pour un autre lecteur</b><br />";
157        }
158       
159        $data['nom']=$tab[1];
160       
161        $data['prenom']=$tab[2];
162
163        if($tab[9] == "F"){
164                $data['sexe']=2;
165        }elseif($tab[9] == "M"){
166                $data['sexe']=1;
167        }else{
168                $data['sexe']=0;
169        }
170       
171       
172        $data['adr1']="";
173       
174        $data['adr2']="";
175
176        $data['ville']="";
177       
178
179        $data['pays']="";
180       
181        $data['cp']="";
182       
183        $data['mail']=$tab[13];
184
185        $data['tel1']=$tab[10];
186       
187        $data['tel2']="";
188       
189        $data['prof']=$tab[7];
190       
191        $data['year']="";
192       
193        $data['login'] = $tab[11];
194       
195        $data['password']=$tab[11];
196       
197        $data['location_libelle_create']= "Clcc";
198       
199        $data['msg']="";
200
201        $data['lang']='fr_FR';
202       
203        $data['statut_libelle_create']="Actif";
204       
205        $mon_emprunteur= new emprunteur();
206        $id_empr=$mon_emprunteur->import($data);
207        if(!$id_empr){
208                $lect_erreur++;
209                echo "Erreur : Lecteur non cree\n";
210                echo "<pre>";
211                print_r($data);
212                echo "</pre>";
213        }else{
214                $lect_cree++;
215                if ($tab[0]) {
216                        $q="select idchamp from empr_custom where name='matricule' limit 1";
217                        $r = pmb_mysql_query($q, $dbh);
218                        if (pmb_mysql_num_rows($r)) {
219                                $idchamp=pmb_mysql_result($r,0,0);
220                                $q = "insert into empr_custom_values (empr_custom_champ, empr_custom_origine, empr_custom_small_text) ";
221                                $q.= "values('".$idchamp."', '".$id_empr."','".addslashes($tab[0])."' ) ";
222                                $r=pmb_mysql_query($q, $dbh);
223                        }
224                }
225        }
226}
227
228function import_empr($dbh){
229        global $lect_cree,$lect_erreur,$lect_modif,$lect_non_traite;
230        $lect_tot=0;
231        $lect_supprime=0;
232        $lect_cree=0;
233        $lect_erreur=0;
234        $lect_modif=0;
235        $lect_interdit=0;
236        $lect_non_traite=0;
237       
238        //La structure du fichier texte doit être la suivante avec ceci comme première ligne:
239    //MATRICULE;NOM_USAGE;PRENOM_USAGE;DAT_DER_ENTREE;DAT_SORTIE;COD_UF;LIB_UF;POSTE;SEXE;TELEPHONE;USER_NAME;BADGE;MAIL
240   
241    //Upload du fichier
242    if (!($_FILES['import_lec']['tmp_name']))
243        print "Cliquez sur Pr&eacute;c&eacute;dent et choisissez un fichier";
244    elseif (!(move_uploaded_file($_FILES['import_lec']['tmp_name'], "./temp/".basename($_FILES['import_lec']['tmp_name'])))) {
245        print "Le fichier n'a pas pu être téléchargé. Voici plus d'informations :<br />";
246        print_r($_FILES)."<p>";
247    }
248    $fichier = @fopen( "./temp/".basename($_FILES['import_lec']['tmp_name']), "r" );
249       
250    if ($fichier) {
251       
252        //on change la date de mise a jour pour retrouver les lecteurs
253        $requete="select id_empr from empr where empr_modif='".addslashes(date('Y-m-j'))."'";
254        $select = pmb_mysql_query($requete,$dbh);
255        while (($verif = pmb_mysql_fetch_array($select))) {
256                $requete="update empr set empr_modif=DATE_SUB(empr_modif, INTERVAL 1 DAY) where id_empr='".addslashes($verif["id_empr"])."' ";
257                if(!pmb_mysql_query($requete,$dbh)){
258                                echo "Erreur : requete echoué : ".$requete."<br />";
259                        }
260        }
261       
262        while (!feof($fichier)) {
263            $buffer = fgets($fichier, 4096);
264            //$buffer = pmb_mysql_escape_string($buffer);
265            $tab = explode(";", $buffer);
266            $nb=0;
267            $incr=0;
268            $empr=array();
269           
270            $valeur=false;
271            for($i=0;$i<count($tab);$i++){
272               
273                $nb=$nb+substr_count($tab[$i],"\"");
274                                if($nb%2 === 0){
275                                        if($valeur === false){
276                                                $valeur=$tab[$i];
277                                        }else{
278                                                $valeur=$valeur.";".$tab[$i];
279                                        }
280                                        //$notices[$i][$incr]=trim(trim($valeur,"\""));
281                                        $empr[$incr]=preg_replace("/^\"|\"$|\"\r\n$/","",$valeur);
282                                        $valeur=false;
283                                        $incr++;
284                                        $nb=0;
285                                }else{
286                                        if($valeur === false){
287                                                $valeur=$tab[$i];
288                                        }else{
289                                                $valeur=$valeur.";".$tab[$i];
290                                        }                               
291                                }
292            }
293           
294            if(count($empr) == 1 or $empr[0] == "MATRICULE"){
295                //Passe ici pour l'entête et les ligne vide (la dernière)
296            }elseif(count($empr) != 14){
297                $lect_tot++;
298                $lect_erreur++;
299                print("<b>Erreur : Personne non prise en compte car le nombre de champ n'est pas valide : </b><br />");
300                echo "<pre>";
301                        print_r($empr);
302                echo "</pre>";
303            }elseif(trim($empr[1]) == "" or trim($empr[12]) === ""){
304                $lect_tot++;
305                $lect_erreur++;
306                print("<b>Erreur : Personne non prise en compte car elle n'a pas de nom : </b><br />");
307                echo "<pre>";
308                        print_r($empr);
309                echo "</pre>";
310            }else{
311                //Tout les lecteurs à traiter
312                $lect_tot++;
313                import_lect_par_lect($empr,$dbh);
314            }   
315        }
316       
317         //On supprime tout les lecteurs qui ne sont pas dans le fichier et qui n'ont pas de prets en cours
318        $req_select_verif_pret = "SELECT distinct id_empr, pret_idempr FROM empr left join pret on id_empr=pret_idempr WHERE empr_modif != '".addslashes(date('Y-m-j'))."' ";
319        $select_verif_pret = pmb_mysql_query($req_select_verif_pret,$dbh);
320        while (($verif_pret = pmb_mysql_fetch_array($select_verif_pret))) {
321                //pour tous les emprunteurs qui n'ont pas de pret en cours
322                if($verif_pret["pret_idempr"]){
323                        $requete="update empr set empr_statut='2' where id_empr='".addslashes($verif_pret["id_empr"])."' ";
324                        if(!pmb_mysql_query($requete,$dbh)){
325                                        $lect_erreur++;
326                                        echo " requete echoué : ".$requete."<br />";
327                                }else{
328                                        $lect_interdit++;
329                                }
330                }else{
331                        emprunteur::del_empr($verif_pret["id_empr"]);
332                        $lect_supprime++;
333                }
334        }
335       
336        print("<br />_____________________<br />");
337        if($lect_erreur)echo "<b> Attention ".$lect_erreur." lecteur(s) n'a(ont) pas été traité(s) : voir erreur(s) ci-dessus </b><br />";
338        echo "Nombre de lecteurs créés : ".$lect_cree."<br />";
339        echo "Nombre de lecteurs non traité (en double ou déjà traité) : ".$lect_non_traite."<br />";
340        echo "Nombre de lecteurs ou la date d'expiration à été repoussée : ".$lect_modif."<br />";
341        echo "Nombre total de lecteurs dans le fichier : ".$lect_tot."<br />";
342        echo "Nombre d'anciens lecteurs (non présent dans le fichier) supprimés : ".$lect_supprime."<br />";
343        echo "Nombre d'anciens lecteurs (non présent dans le fichier) avec un statut interdit (non supprimé car ils ont au moins un prêt en cours) : ".$lect_interdit."<br />";
344               
345        fclose($fichier);
346    }
347}
348
349switch($action) {
350    case 1:
351        if ($imp_empr){
352            import_empr($dbh);
353        }
354        else {
355            show_import_choix_fichier($dbh);
356        }
357        break;
358    case 2:
359        break;
360    default:
361        show_import_choix_fichier($dbh);
362        break;
363}
364
365?>
366
367
368
Note: See TracBrowser for help on using the repository browser.