/[openfoncier]/branches/3.14.x/app/versement_archives.php
ViewVC logotype

Contents of /branches/3.14.x/app/versement_archives.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3343 - (show annotations)
Thu Mar 19 17:34:18 2015 UTC (9 years, 10 months ago) by vpihour
File size: 15260 byte(s)
Ajout de la branche

1 <?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 // 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 // Type des champs
41 $form->setType("insee", "text");
42 $form->setType("fichier", "upload2");
43 $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 printf("<form method=\"POST\" action=\"versement_archives.php\" name=f2>");
75
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 AND dossier_autorisation.insee = '$insee'";
130
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 ($f->get_submitted_post_value() != null) {
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 = ($f->get_submitted_post_value('insee') !== null) ? $f->get_submitted_post_value('insee') : "";
148 $fichier_tmp = ($f->get_submitted_post_value('fichier') !== null) ? $f->get_submitted_post_value('fichier') : "";
149 $separateur = ($f->get_submitted_post_value('separateur') !== null) ? $f->get_submitted_post_value('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 chemin vers le fichier
168 $fichier_path = $f->storage->storage->temporary_storage->getPath($fichier_tmp);
169
170 // Si le fichier existe
171 if (file_exists($fichier_path)
172 && $error === false) {
173
174 // Ouverture du fichier
175 $file = fopen($fichier_path, "r+");
176
177 // Création du fichier csv résultat
178 $csv_res_filename = "versement_archives_resultat_".date("Ymd_His").".csv";
179 $csv_res_path = "../tmp/".$csv_res_filename;
180 $csv_res = fopen($csv_res_path, "w");
181
182 // Initialisation des variables compteurs
183 $cpt = array(
184 "total" => 0,
185 "accepte" => 0,
186 "rejete" => 0,
187 "ignore" => 0
188 );
189
190 // Boucle sur chaque ligne du fichier
191 while (($line = fgetcsv($file, 0, $separateur)) !== FALSE) {
192
193 // Initialisation de la variable permettant de définir jusqu'où
194 // le traitement doit aller
195 $stop = false;
196
197 // Incrémente le compteur de ligne
198 $cpt["total"]++;
199
200 // Contrôle du nombre de colonne sur la ligne
201 if (count($line) != 7) {
202
203 // Incrémente le compteur des lignes rejetées
204 $cpt["rejete"]++;
205 // Arrête le traitement pour cette ligne
206 $stop = true;
207 // Colonne résultat à ajouter dans la ligne
208 $line[] = _("ligne rejetee : nombre de separateur incorrect.");
209 // Ecrit dans le fichier csv
210 fputcsv($csv_res, $line, $separateur);
211 }
212
213 // Contrôle le contenu de chaque colonne de la ligne
214 if ($stop === false) {
215
216 // Chaque colonne doit respecter un certain format
217 if (!is_string($line[0]) && count($line[0]) != 5
218 || !is_string($line[1]) && count($line[1]) != 2
219 || !is_string($line[2]) && count($line[2]) != 2
220 || !is_numeric($line[3]) && count($line[3]) > 5
221 || !is_numeric($line[4]) && count($line[4]) > 2
222 || !is_string($line[5]) && count($line[5]) > 4
223 || !is_numeric($line[6])) {
224
225 // Incrémente le compteur des lignes rejetées
226 $cpt["rejete"]++;
227 // Arrête le traitement pour cette ligne
228 $stop = true;
229 // Colonne résultat à ajouter dans la ligne
230 $line[] = _("ligne rejetee : contenu non conforme.");
231 // Ecrit dans le fichier csv
232 fputcsv($csv_res, $line, $separateur);
233 }
234 }
235
236 // Si un code INSEE est renseigné
237 if ($stop === false
238 && $insee != "") {
239
240 // Si le code INSEE de la ligne est différent de celui
241 // renseigné dans le formulaire, alors on ne traite pas
242 // la ligne
243 if ($line[0] != $insee) {
244 // Incrémente le compteur des lignes ingorées
245 $cpt["ignore"]++;
246 // Arrête le traitement pour cette ligne
247 $stop = true;
248 // Colonne résultat à ajouter dans la ligne
249 $line[] = _("ligne ignoree : code insee different de celui indique dans le formulaire.");
250 // Ecrit dans le fichier csv
251 fputcsv($csv_res, $line, $separateur);
252 }
253 }
254
255 // Si le traitement doit continuer
256 if ($stop === false) {
257
258 // Récupère le numéro du dossier d'autorisation
259 $dossier_autorisation = getDossierAutorisation($f, $line[1], $line[2], $line[3]);
260 // Récupère le numéro du dossier d'instruction
261 $dossier = getDossier($f, $line[0], $dossier_autorisation, $line[4]);
262 // Si le dossier n'existe pas dans la base de données
263 if ($dossier == "") {
264 // Incrémente le compteur des lignes rejetées
265 $cpt["rejete"]++;
266 // Arrête le traitement pour cette ligne
267 $stop = true;
268 // Colonne résultat à ajouter dans la ligne
269 $line[] = _("ligne rejetee : dossier inexistant dans l'application.");
270 // Ecrit dans le fichier csv
271 fputcsv($csv_res, $line, $separateur);
272 }
273 }
274
275 // Si le traitement doit continuer
276 if ($stop === false) {
277
278 // Numéro d'archive
279 $archive = $line[5] . " " . $line[6];
280
281 // Valeur à modifier
282 $value_dossier['numero_versement_archive'] = $archive;
283
284 // Met à jour le numéro de versement aux archives du dossier
285 $res = $f->db->autoExecute(
286 DB_PREFIXE."dossier",
287 $value_dossier, DB_AUTOQUERY_UPDATE,
288 "dossier = '".$dossier."'");
289 // Si il y une erreur lors de la mise à jour
290 if ($f->isDatabaseError($res)) {
291
292 // Log
293 $f->addToLog("app/versement_archives.php: db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($value_dossier, true).", DB_AUTOQUERY_UPDATE, \"dossier = '".$dossier."'\");", DEBUG);
294
295 // Indique que le traitement est en erreur
296 $error = true;
297 $message = sprintf(_("Erreur de base de donnees lors de la mis a jour du dossier %s."), $dossier);
298
299 } else {
300
301 // Log
302 $f->addToLog("app/versement_archives.php: db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($value_dossier, true).", DB_AUTOQUERY_UPDATE, \"dossier = '".$dossier."'\");", VERBOSE_MODE);
303
304 // Incrémente le compteur des lignes acceptées
305 $cpt["accepte"]++;
306 // Colonne résultat à ajouter dans la ligne
307 $line[] = _("ligne acceptee : dossier mis a jour.");
308 // Ecrit dans le fichier csv
309 fputcsv($csv_res, $line, $separateur);
310 }
311
312 }
313
314 }
315
316 // Fermeture des fichiers;
317 fclose($file);
318 fclose($csv_res);
319 }
320 }
321
322 // Si une erreur s'est produite
323 if ($error === true) {
324
325 // Supprime le csv de résultat si celui-ci a été crée
326 if (file_exists($csv_res_path)) {
327 unlink($csv_res_path);
328 }
329
330 // Tableau des valeurs
331 $value = array();
332 $value['insee'] = $insee;
333 $value['fichier'] = $fichier_tmp;
334 $value['separateur'] = $separateur;
335
336 // Affiche le message d'erreur
337 $f->displayMessage("error", $message);
338
339 // Afiche le formulaire avec les valeurs
340 afficherFormulaireSaisie($value);
341
342 // Si il n'y a aucune erreur
343 } else {
344
345 // Contenu du fichier csv résultat
346 $csv_res_content = file_get_contents($csv_res_path);
347 // Métadonnées du fichier csv résultat
348 $metadata['filename'] = $csv_res_filename;
349 $metadata['size'] = strlen($csv_res_content);
350 $metadata['mimetype'] = "text/csv";
351 // Création du fichier sur le storage temporaire
352 $csv_res_uid = $f->storage->create_temporary($csv_res_content, $metadata);
353
354 // Message traitement csv
355 $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']);
356 // Message pour télécharger le csv résultat
357 $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>";
358
359 // Affiche le message
360 $f->displayMessage("valid", $message);
361
362 // Supprime le csv de résultat qui n'est pas dans le storage
363 unlink($csv_res_path);
364
365 // Si le mode DEBUG n'est pas "PRODUCTION_MODE"
366 if(DEBUG != "PRODUCTION_MODE") {
367
368 // Affiche le contenu du fichier de résultat
369 $csv_res_tmp = $f->storage->get_temporary($csv_res_uid);
370 $csv_res_content = $csv_res_tmp['file_content'];
371 $csv_res_content = str_replace("\n","<br>", $csv_res_content);
372
373 printf('<div id="content_versement_archives" >');
374 printf($csv_res_content);
375 printf('</div>');
376 }
377
378 }
379
380 // Sinon affiche le formulaire de saisie de base
381 } else {
382
383 // Affiche le formulaire de saisie
384 afficherFormulaireSaisie();
385 }
386
387 ?>

Properties

Name Value
svn:executable *
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26