/[openfoncier]/trunk/app/versement_archives.php
ViewVC logotype

Annotation of /trunk/app/versement_archives.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2460 - (hide annotations)
Wed Nov 13 11:42:58 2013 UTC (11 years, 2 months ago) by softime
File size: 15458 byte(s)
Correction de la requête permettant de récupérer le dossier d'instruction en ajoutant des cotes autour de $insee qui est un champ de type character varying

1 softime 2445 <?php
2     /**
3     * Ce script permet d'uploader un fichier CSV pouvant mettre à jour le numéro de
4     * versement aux archives de plusieurs dossier en même temps
5     *
6     * @package openfoncier
7     * @version SVN : $Id$
8     */
9    
10     // Fichiers requis
11     require_once "../obj/utils.class.php";
12     require_once '../obj/om_formulaire.class.php';
13    
14     // Instance de la classe utils
15     $f = new utils(null, "versement_archives", _("Versement aux archives"));
16    
17     // Description de la page
18     $description = _("Cette page permet d'importer les numeros d'archives des dossiers.");
19     // Affichage de la description
20     $f->displayDescription($description);
21    
22     function afficherFormulaireSaisie($value = array()) {
23    
24     // Les champs du formulaire
25     $champs = array("insee", "fichier", "separateur");
26    
27     // Instance du formulaire
28     $form = new formulaire(null, 0, 0, $champs);
29    
30 vpihour 2458 // Tableau des contraintes
31     $params = array(
32     "constraint" => array(
33     "extension" => ".csv"
34     ),
35     );
36    
37     // Restriction sur le champ d'upload
38     $form->setSelect("fichier", $params);
39    
40 softime 2445 // Type des champs
41     $form->setType("insee", "text");
42 vpihour 2458 $form->setType("fichier", "upload2");
43 softime 2445 $form->setType("separateur", "select");
44    
45     // Libellé des champs
46     $form->setLib("insee", _("insee"));
47     $form->setLib("fichier", _("fichier").' <span class="not-null-tag">*</span>');
48     $form->setLib("separateur", _("separateur").' <span class="not-null-tag">*</span>');
49    
50     // Taille des champs
51     $form->setTaille("insee", 5);
52     $form->setTaille("fichier", 64);
53    
54     // Taille max des champs
55     $form->setMax("insee", 5);
56     $form->setMax("fichier", 30);
57    
58     // Initilisation des liste à choix
59     $contenu = array(
60     0 => array(";", ",", ),
61     1 => array("; "._("(point-virgule)"), ", "._("(virgule)")),
62     );
63     $form->setSelect("separateur", $contenu);
64    
65     // Si le paramètre n'est pas vide
66     if (!empty($value)) {
67     // Valeurs des champs
68     $form->setVal("insee", $value["insee"]);
69     $form->setVal("fichier", $value["fichier"]);
70     $form->setVal("separateur", $value["separateur"]);
71     }
72    
73     // Ouverture du formulaire
74 vpihour 2458 printf("<form method=\"POST\" action=\"versement_archives.php\" name=f2>");
75 softime 2445
76     // Champs du formulaire
77     $form->entete();
78     $form->afficher($champs, 0, false, false);
79     $form->enpied();
80    
81     // Bouton "Importer"
82     printf("<div class=\"formControls\">");
83     printf("<input id=\"button-versement_archives-importer\" type=\"submit\" class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\" value=\"Importer\" role=\"button\" aria-disabled=\"false\">");
84     printf("</div>");
85    
86     // Fermeture du formulaire
87     printf("</form>");
88     }
89    
90     /**
91     * Récupère le numéro de dossier d'autorisation
92     * @param object $f Instance de la classe utils
93     * @param string $annee Année du dossier
94     * @param string $code Code du type du dossier d'autorisation
95     * @param string $numero_dossier Numéro du dossier sur 5 chiffres
96     * @return string Numéro du dossier d'autorisation
97     */
98     function getDossierAutorisation($f, $annee, $code, $numero_dossier) {
99    
100     // Récupération du code département
101     $dep = $f->getParameter("departement");
102     // Récupération du code commune
103     $com = $f->getParameter("commune");
104    
105     // Numéro de dossier d'autorisation
106     $dossier_autorisation = $code . $dep . $com . $annee . str_pad($numero_dossier, 5, "0", STR_PAD_LEFT);
107    
108     // Retourne le dossier d'autorisation
109     return $dossier_autorisation;
110     }
111    
112     /**
113     * Récupère le numéro de dossier d'instruction
114     * @param object $f Instance de la classe utils
115     * @param integer $insee Numéro INSEE
116     * @param string $dossier_autorisation Numéro du dossier d'autorisation
117     * @param string $version Numéro de version
118     * @return string Numéro du dossier d'instruction
119     */
120     function getDossier($f, $insee, $dossier_autorisation, $version) {
121    
122     // Requête SQL
123     $sql = "SELECT dossier.dossier
124     FROM ".DB_PREFIXE."dossier
125     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
126     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
127     WHERE dossier_autorisation.dossier_autorisation = '$dossier_autorisation'
128     AND dossier.version = $version
129 softime 2460 AND dossier_autorisation.insee = '$insee'";
130 softime 2445
131     // Résultat de la requête
132     $dossier = $f->db->getOne($sql);
133     $f->addToLog("app/versement_archives.php : db->getOne(\"".$sql."\")", VERBOSE_MODE);
134    
135     // Retourne le résultat de la requête
136     return $dossier;
137     }
138    
139     // Si le formulaire de saisie à été validé
140     if (!empty($_POST)) {
141    
142     // Initialisation de la variable permettant de définir que le traitement
143     // est en erreur
144     $error = false;
145    
146     // Récupère les valeurs des champs
147     $insee = (isset($_POST['insee'])) ? $_POST['insee'] : "";
148     $fichier_tmp = (isset($_POST['fichier'])) ? $_POST['fichier'] : "";
149     $separateur = (isset($_POST['separateur'])) ? $_POST['separateur'] : ";";
150    
151     // Initialisation de variable
152     $csv_res_path = "";
153    
154     // Si aucun fichier n'est uploadé
155     if ($fichier_tmp == "") {
156    
157     // Indique que le traitement est en erreur
158     $error = true;
159     $message = _("Vous n'avez pas selectionne de fichier a importer.");
160     }
161    
162     // Si il n'y a pas d'erreur
163     if ($error === false) {
164    
165     // On enlève le préfixe du fichier temporaire
166     $fichier_tmp = str_replace("tmp|", "", $fichier_tmp);
167     // On récupère le fichier
168     $fichier = $f->storage->get_temporary($fichier_tmp);
169     // On récupère le chemin vers le fichier
170     $fichier_path = $f->storage->storage->temporary_storage->getPath($fichier_tmp);
171    
172     // Si le fichier n'est pas un csv
173     if ($fichier['metadata']['mimetype'] != 'text/csv') {
174    
175     // Indique que le traitement est en erreur
176     $error = true;
177     $message = _("Le fichier n'est pas au format CSV.");
178     }
179    
180     // Si le fichier existe
181     if (file_exists($fichier_path)
182     && $error === false) {
183    
184     // Ouverture du fichier
185     $file = fopen($fichier_path, "r+");
186    
187     // Création du fichier csv résultat
188     $csv_res_filename = "versement_archives_resultat_".date("Ymd_His").".csv";
189     $csv_res_path = "../tmp/".$csv_res_filename;
190     $csv_res = fopen($csv_res_path, "w");
191    
192     // Initialisation des variables compteurs
193     $cpt = array(
194     "total" => 0,
195     "accepte" => 0,
196     "rejete" => 0,
197     "ignore" => 0
198     );
199    
200     // Boucle sur chaque ligne du fichier
201     while (($line = fgetcsv($file, 0, $separateur)) !== FALSE) {
202    
203     // Initialisation de la variable permettant de définir jusqu'où
204     // le traitement doit aller
205     $stop = false;
206    
207     // Incrémente le compteur de ligne
208     $cpt["total"]++;
209    
210     // Contrôle du nombre de colonne sur la ligne
211     if (count($line) != 7) {
212    
213     // Incrémente le compteur des lignes rejetées
214     $cpt["rejete"]++;
215     // Arrête le traitement pour cette ligne
216     $stop = true;
217     // Colonne résultat à ajouter dans la ligne
218     $line[] = _("ligne rejetee : nombre de separateur incorrect.");
219     // Ecrit dans le fichier csv
220     fputcsv($csv_res, $line, $separateur);
221     }
222    
223     // Contrôle le contenu de chaque colonne de la ligne
224     if ($stop === false) {
225    
226     // Chaque colonne doit respecter un certain format
227 softime 2447 if (!is_string($line[0]) && count($line[0]) != 5
228 softime 2445 || !is_string($line[1]) && count($line[1]) != 2
229     || !is_string($line[2]) && count($line[2]) != 2
230     || !is_numeric($line[3]) && count($line[3]) > 5
231     || !is_numeric($line[4]) && count($line[4]) > 2
232     || !is_string($line[5]) && count($line[5]) > 4
233     || !is_numeric($line[6])) {
234    
235     // Incrémente le compteur des lignes rejetées
236     $cpt["rejete"]++;
237     // Arrête le traitement pour cette ligne
238     $stop = true;
239     // Colonne résultat à ajouter dans la ligne
240     $line[] = _("ligne rejetee : contenu non conforme.");
241     // Ecrit dans le fichier csv
242     fputcsv($csv_res, $line, $separateur);
243     }
244     }
245    
246     // Si un code INSEE est renseigné
247     if ($stop === false
248     && $insee != "") {
249    
250     // Si le code INSEE de la ligne est différent de celui
251     // renseigné dans le formulaire, alors on ne traite pas
252     // la ligne
253     if ($line[0] != $insee) {
254     // Incrémente le compteur des lignes ingorées
255     $cpt["ignore"]++;
256     // Arrête le traitement pour cette ligne
257     $stop = true;
258     // Colonne résultat à ajouter dans la ligne
259     $line[] = _("ligne ignoree : code insee different de celui indique dans le formulaire.");
260     // Ecrit dans le fichier csv
261     fputcsv($csv_res, $line, $separateur);
262     }
263     }
264    
265     // Si le traitement doit continuer
266     if ($stop === false) {
267    
268     // Récupère le numéro du dossier d'autorisation
269     $dossier_autorisation = getDossierAutorisation($f, $line[1], $line[2], $line[3]);
270     // Récupère le numéro du dossier d'instruction
271     $dossier = getDossier($f, $line[0], $dossier_autorisation, $line[4]);
272     // Si le dossier n'existe pas dans la base de données
273     if ($dossier == "") {
274     // Incrémente le compteur des lignes rejetées
275     $cpt["rejete"]++;
276     // Arrête le traitement pour cette ligne
277     $stop = true;
278     // Colonne résultat à ajouter dans la ligne
279     $line[] = _("ligne rejetee : dossier inexistant dans l'application.");
280     // Ecrit dans le fichier csv
281     fputcsv($csv_res, $line, $separateur);
282     }
283     }
284    
285     // Si le traitement doit continuer
286     if ($stop === false) {
287    
288     // Numéro d'archive
289     $archive = $line[5] . " " . $line[6];
290    
291     // Valeur à modifier
292     $value_dossier['numero_versement_archive'] = $archive;
293    
294     // Met à jour le numéro de versement aux archives du dossier
295     $res = $f->db->autoExecute(
296     DB_PREFIXE."dossier",
297     $value_dossier, DB_AUTOQUERY_UPDATE,
298     "dossier = '".$dossier."'");
299     // Si il y une erreur lors de la mise à jour
300     if ($f->isDatabaseError($res)) {
301    
302     // Log
303     $f->addToLog("app/versement_archives.php: db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($value_dossier, true).", DB_AUTOQUERY_UPDATE, \"dossier = '".$dossier."'\");", DEBUG);
304    
305     // Indique que le traitement est en erreur
306     $error = true;
307     $message = sprintf(_("Erreur de base de donnees lors de la mis a jour du dossier %s."), $dossier);
308    
309     } else {
310    
311     // Log
312     $f->addToLog("app/versement_archives.php: db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($value_dossier, true).", DB_AUTOQUERY_UPDATE, \"dossier = '".$dossier."'\");", VERBOSE_MODE);
313    
314     // Incrémente le compteur des lignes acceptées
315     $cpt["accepte"]++;
316     // Colonne résultat à ajouter dans la ligne
317     $line[] = _("ligne acceptee : dossier mis a jour.");
318     // Ecrit dans le fichier csv
319     fputcsv($csv_res, $line, $separateur);
320     }
321    
322     }
323    
324     }
325    
326 vpihour 2458 // Fermeture des fichiers;
327     fclose($file);
328     fclose($csv_res);
329 softime 2445 }
330     }
331    
332     // Si une erreur s'est produite
333     if ($error === true) {
334    
335     // Supprime le csv de résultat si celui-ci a été crée
336     if (file_exists($csv_res_path)) {
337     unlink($csv_res_path);
338     }
339    
340     // Tableau des valeurs
341     $value = array();
342     $value['insee'] = $insee;
343     $value['fichier'] = $fichier_tmp;
344     $value['separateur'] = $separateur;
345    
346     // Affiche le message d'erreur
347     $f->displayMessage("error", $message);
348    
349     // Afiche le formulaire avec les valeurs
350     afficherFormulaireSaisie($value);
351    
352     // Si il n'y a aucune erreur
353     } else {
354    
355     // Contenu du fichier csv résultat
356     $csv_res_content = file_get_contents($csv_res_path);
357     // Métadonnées du fichier csv résultat
358     $metadata['filename'] = $csv_res_filename;
359     $metadata['size'] = strlen($csv_res_content);
360     $metadata['mimetype'] = "text/csv";
361     // Création du fichier sur le storage temporaire
362     $csv_res_uid = $f->storage->create_temporary($csv_res_content, $metadata);
363    
364     // Message traitement csv
365     $message = sprintf(_("Il y a eu %s ligne(s) lue(s), %s ligne(s) acceptee(s), %s ligne(s) rejetee(s) et %s ligne(s) ignoree(s)"), $cpt['total'], $cpt['accepte'], $cpt['rejete'], $cpt['ignore']);
366     // Message pour télécharger le csv résultat
367     $message .= "<br/>"._("Pour telecharger le fichier, cliquer ici :")."<a href=\"../spg/file.php?uid=$csv_res_uid&mode=temporary\"><img src=\"../app/img/ico_trace.png\" alt=\""._("Telecharger le fichier CSV")."\" title=\""._("Telecharger le fichier CSV")."\" /></a>";
368    
369     // Affiche le message
370     $f->displayMessage("valid", $message);
371    
372     // Supprime le csv de résultat qui n'est pas dans le storage
373     unlink($csv_res_path);
374    
375     // Si le mode DEBUG n'est pas "PRODUCTION_MODE"
376     if(DEBUG != "PRODUCTION_MODE") {
377    
378     // Affiche le contenu du fichier de résultat
379     $csv_res_tmp = $f->storage->get_temporary($csv_res_uid);
380     $csv_res_content = $csv_res_tmp['file_content'];
381     $csv_res_content = str_replace("\n","<br>", $csv_res_content);
382    
383     printf('<div id="content_versement_archives" >');
384     printf($csv_res_content);
385     printf('</div>');
386     }
387    
388     }
389    
390     // Sinon affiche le formulaire de saisie de base
391     } else {
392    
393     // Affiche le formulaire de saisie
394     afficherFormulaireSaisie();
395     }
396    
397     ?>

Properties

Name Value
svn:executable *
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26