1 |
<?php |
2 |
//$Id$ |
3 |
//gen openMairie le 02/05/2013 15:03 |
4 |
|
5 |
require_once ("../gen/obj/document_numerise.class.php"); |
6 |
require_once("../services/outgoing/messageenqueuer.php"); |
7 |
|
8 |
class document_numerise extends document_numerise_gen { |
9 |
|
10 |
//Métadonnées spécifiques |
11 |
var $metadata = array( |
12 |
"uid" => array( |
13 |
"dossier" => "getDossier", |
14 |
"dossier_version" => "getDossierVersion", |
15 |
"numDemandeAutor" => "getNumDemandeAutor", |
16 |
"anneemoisDemandeAutor" => "getAnneemoisDemandeAutor", |
17 |
"typeInstruction" => "getTypeInstruction", |
18 |
"statutAutorisation" => "getStatutAutorisation", |
19 |
"typeAutorisation" => "getTypeAutorisation", |
20 |
"dateEvenementDocument" => "getDateEvenementDocument", |
21 |
"filename" => "getFilename", |
22 |
"groupeInstruction" => 'getGroupeInstruction', |
23 |
"title" => 'getTitle', |
24 |
), |
25 |
); |
26 |
|
27 |
var $metadonneesArrete = array(); |
28 |
|
29 |
var $abstract_type = array( |
30 |
"uid" => "file", |
31 |
); |
32 |
|
33 |
/** @var boolean Les nouvelles actions sont activées sur cet objet */ |
34 |
var $activate_class_action; |
35 |
|
36 |
function document_numerise($id,&$db,$debug) { |
37 |
//On active les nouvelles actions |
38 |
$this->activate_class_action = true; |
39 |
// |
40 |
$this->constructeur($id,$db,$debug); |
41 |
}// fin constructeur |
42 |
|
43 |
/** |
44 |
* Définition des actions disponibles sur la classe. |
45 |
* |
46 |
* @return void |
47 |
*/ |
48 |
function init_class_actions() { |
49 |
parent::init_class_actions(); |
50 |
|
51 |
// ACTION - 000 - ajouter |
52 |
// |
53 |
$this->class_actions[0]["condition"] = "is_ajoutable"; |
54 |
|
55 |
// ACTION - 001 - modifier |
56 |
// |
57 |
$this->class_actions[1]["condition"] = "is_modifiable"; |
58 |
|
59 |
// ACTION - 002 - supprimer |
60 |
// |
61 |
$this->class_actions[2]["condition"] = "is_supprimable"; |
62 |
|
63 |
// ACTION - 004 - view_tab |
64 |
// Interface spécifique du tableau des pièces |
65 |
$this->class_actions[4] = array( |
66 |
"identifier" => "view_tab", |
67 |
"view" => "view_tab", |
68 |
"permission_suffix" => "tab", |
69 |
); |
70 |
} |
71 |
|
72 |
/** |
73 |
* VIEW - view_tab |
74 |
* |
75 |
* Cette vue permet d'afficher l'interface spécifique du tableau |
76 |
* des pièces (liste et bouton d'ajout). |
77 |
* |
78 |
* @return void |
79 |
*/ |
80 |
function view_tab() { |
81 |
// Vérification de l'accessibilité sur l'élément |
82 |
$this->checkAccessibility(); |
83 |
// |
84 |
echo "\n<div id=\"sousform-document_numerise\">\n"; |
85 |
echo "\n<!-- ########## START FORMULAIRE ########## -->\n"; |
86 |
echo "<div class=\"formEntete ui-corner-all\">\n"; |
87 |
// |
88 |
($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire = $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = ""); |
89 |
($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire = $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = ""); |
90 |
|
91 |
//L'identifiant du dossier est $idxformualire de base pour les objets dossier_instruction |
92 |
//Depuis l'objet dossier_autorisation $dossier posséderas le numéros du dossier d'autorisation |
93 |
$dossier = $idxformulaire; |
94 |
|
95 |
//Si le formulaire est demande_avis_encours ou demande_avis_passee |
96 |
if ($retourformulaire == 'demande_avis_encours' || $retourformulaire == 'demande_avis_passee') { |
97 |
|
98 |
// Récupération du dossier en fonction du numéro de consultation |
99 |
$sql = "SELECT dossier |
100 |
FROM ".DB_PREFIXE."consultation |
101 |
WHERE consultation=$idxformulaire"; |
102 |
$dossier = $this->f->db->getone($sql); |
103 |
$this->f->addToLog(__METHOD__."() : db->getone(\"".$sql."\");", VERBOSE_MODE); |
104 |
$this->f->isDatabaseError($dossier); |
105 |
} |
106 |
|
107 |
// Récupération des documents numérisés |
108 |
$select = "SELECT document_numerise.document_numerise as document_numerise, |
109 |
document_numerise.date_creation as date_creation, |
110 |
document_numerise_type_categorie.libelle as categorie, |
111 |
document_numerise.nom_fichier as nom_fichier, |
112 |
document_numerise_type.libelle as type_document, |
113 |
document_numerise.uid as uid "; |
114 |
|
115 |
//table de la requête |
116 |
$from = "FROM ".DB_PREFIXE."document_numerise |
117 |
LEFT JOIN ".DB_PREFIXE."document_numerise_type |
118 |
ON document_numerise.document_numerise_type = document_numerise_type.document_numerise_type |
119 |
LEFT JOIN ".DB_PREFIXE."document_numerise_type_categorie |
120 |
ON document_numerise_type.document_numerise_type_categorie = document_numerise_type_categorie.document_numerise_type_categorie "; |
121 |
if ($retourformulaire == 'dossier_autorisation') { |
122 |
$select .= ", dossier.dossier as dossier "; |
123 |
$from .= " LEFT JOIN ".DB_PREFIXE."dossier |
124 |
ON document_numerise.dossier = dossier.dossier |
125 |
LEFT JOIN ".DB_PREFIXE."dossier_autorisation |
126 |
ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation "; |
127 |
} |
128 |
|
129 |
// La condition de la requête |
130 |
$where = " WHERE document_numerise.dossier = '$dossier' "; |
131 |
// Si le formulaire est celui des dossiers d'autorisations |
132 |
if ($retourformulaire == 'dossier_autorisation') { |
133 |
$where = " WHERE dossier_autorisation.dossier_autorisation = '$dossier' |
134 |
AND (document_numerise_type.code = 'ART' |
135 |
OR document_numerise_type.code = 'AVIS' |
136 |
OR document_numerise_type.code = 'DOC' |
137 |
OR document_numerise_type.code = 'DAACT' |
138 |
OR document_numerise_type.code = 'DOS01' |
139 |
OR document_numerise_type.code = 'DOS02' )"; |
140 |
} |
141 |
|
142 |
// Le tri sur la requête |
143 |
$tri = " ORDER BY document_numerise.date_creation, document_numerise.nom_fichier"; |
144 |
|
145 |
// Concaténation des morceaux de la requête |
146 |
$sql = $select.$from.$where.$tri; |
147 |
$res = $this->f->db->query($sql); |
148 |
$this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE); |
149 |
$this->f->isDatabaseError($res); |
150 |
|
151 |
// Requête sql pour recupèrere la division de l'instructeur en session |
152 |
$sql_instr_division = "SELECT division.division |
153 |
FROM ".DB_PREFIXE."instructeur |
154 |
LEFT JOIN ".DB_PREFIXE."division |
155 |
ON division.division=instructeur.division |
156 |
LEFT JOIN ".DB_PREFIXE."om_utilisateur |
157 |
ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur |
158 |
WHERE om_utilisateur.login = '".$_SESSION['login']."'"; |
159 |
$division = $this->f->db->getOne($sql_instr_division); |
160 |
$this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql_instr_division."\");", VERBOSE_MODE); |
161 |
$this->f->isDatabaseError($division); |
162 |
|
163 |
//En-tête de tableau pour afficher la date et la catégorie des documents |
164 |
$header = |
165 |
" |
166 |
<thead> |
167 |
<tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'> |
168 |
<th class='title col-0 firstcol %s' colspan=2> |
169 |
<span class='name'> |
170 |
%s |
171 |
</span> |
172 |
</th> |
173 |
</tr> |
174 |
</thead> |
175 |
"; |
176 |
|
177 |
//Lien permettant d'ouvrir le document en pdf |
178 |
$link = " |
179 |
<a class='lienTable' |
180 |
href=\"../spg/file.php?obj=document_numerise&champ=uid&id=%s\" target='_blank'> |
181 |
%s |
182 |
</a>"; |
183 |
if ($retourformulaire == "dossier_instruction" |
184 |
&& $this->f->isUserAdministrateur()) { |
185 |
// l'administrateur à la permission d'accéder à la fiche du document |
186 |
$link = "<a class='lienTable' |
187 |
onclick=\"ajaxIt('document_numerise','../scr/sousform.php?obj=document_numerise&action=3&idx=%s&tri=&premier=0&recherche=&objsf=document_numerise&premiersf=0&retourformulaire=$retourformulaire&idxformulaire=$dossier&trisf=&retour=tab');\" |
188 |
href=\"#\"> |
189 |
%s |
190 |
</a>"; |
191 |
} |
192 |
|
193 |
//Récupère le statut du dossier d'instruction |
194 |
$sql = "SELECT etat.statut |
195 |
FROM ".DB_PREFIXE."etat |
196 |
LEFT JOIN |
197 |
".DB_PREFIXE."dossier |
198 |
ON |
199 |
etat.etat = dossier.etat |
200 |
WHERE dossier.dossier = '".$idxformulaire."'"; |
201 |
$statut = $this->f->db->getOne($sql); |
202 |
$this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql."\");", VERBOSE_MODE); |
203 |
$this->f->isDatabaseError($statut); |
204 |
|
205 |
// Seul un administrateur peut ajouter des pièces |
206 |
if (($retourformulaire == 'dossier' |
207 |
OR $retourformulaire == 'dossier_instruction' |
208 |
OR $retourformulaire == 'dossier_instruction_mes_encours' |
209 |
OR $retourformulaire == 'dossier_instruction_tous_encours' |
210 |
OR $retourformulaire == 'dossier_instruction_mes_clotures' |
211 |
OR $retourformulaire == 'dossier_instruction_tous_clotures') |
212 |
&& $this->f->isAccredited('document_numerise_add')) { |
213 |
|
214 |
//Affiche bouton ajouter |
215 |
echo "<p><a onclick=\"ajaxIt('document_numerise','../scr/sousform.php?obj=document_numerise&action=0&tri=&objsf=document_numerise&premiersf=0&retourformulaire=$retourformulaire&idxformulaire=$dossier&trisf=&retour=tab');\" href='#'> |
216 |
<span class='om-icon om-icon-16 om-icon-fix add-16' title='Ajouter'>Ajouter</span> |
217 |
Ajouter un document |
218 |
</a></p>"; |
219 |
} |
220 |
|
221 |
// |
222 |
$i = 1; |
223 |
|
224 |
//Résultat à $i - 1 pour tester la date et catégorie des documents |
225 |
$lastRes = array(); |
226 |
$lastRes['date_creation'][0] = ""; |
227 |
$lastRes['categorie'][0] = ""; |
228 |
|
229 |
//Tant qu'il y a des résultats |
230 |
while( $row = &$res->fetchRow(DB_FETCHMODE_ASSOC) ) { |
231 |
|
232 |
$lastRes['date_creation'][$i] = $row['date_creation']; |
233 |
$lastRes['categorie'][$i] = $row['categorie']; |
234 |
|
235 |
//Si la date de création est différente de celle du résultat juste avant |
236 |
if ($row['date_creation'] != $lastRes['date_creation'][$i-1]) { |
237 |
//Si ce n'est pas le premier résultat on ferme la table |
238 |
if($i != 1) { |
239 |
echo "</table>"; |
240 |
} |
241 |
|
242 |
//Affiche la table |
243 |
echo "<table class='tab-tab document_numerise'>"; |
244 |
//Affiche le header de la date |
245 |
printf($header, 'headerDate', $this->f->formatDate($row['date_creation'])); |
246 |
//Affiche le header de la catégorie |
247 |
printf($header,'headerCat', $row['categorie']); |
248 |
|
249 |
//Style des lignes |
250 |
$style = 'odd'; |
251 |
|
252 |
} |
253 |
|
254 |
//Si la date de création est identique à celle du résultat juste avant |
255 |
//et la catégorie est différente de celle du résultat juste avant |
256 |
if ($row['date_creation'] == $lastRes['date_creation'][$i-1] && $row['categorie'] != $lastRes['categorie'][$i-1]) { |
257 |
//Affiche le header de la catégorie |
258 |
printf($header,'headerCat', $row['categorie']); |
259 |
|
260 |
//Style des lignes |
261 |
$style = 'odd'; |
262 |
} |
263 |
|
264 |
//Si toujours dans la catégorie on change le style de la ligne |
265 |
if ($row['categorie'] == $lastRes['categorie'][$i-1] && $row['date_creation'] == $lastRes['date_creation'][$i-1]) { |
266 |
$style = ($style=='even')?'odd':'even'; |
267 |
} |
268 |
|
269 |
// |
270 |
echo '<tr class="tab-data '.$style.'">'; |
271 |
|
272 |
echo '<td class="col-0 firstcol">'; |
273 |
//Si on est dans la visualisation du DA, on affiche le numéro du dossier |
274 |
//d'instruction auquel est rataché la pièce et le nom du fichier |
275 |
if ($retourformulaire === 'dossier_autorisation'){ |
276 |
printf ($link, $row['document_numerise'], $row['dossier']." - ".$row['nom_fichier']); |
277 |
} |
278 |
else { |
279 |
//On affiche que le nom du fichier |
280 |
printf ($link, $row['document_numerise'], $row['nom_fichier']); |
281 |
|
282 |
} |
283 |
echo '</td>'; |
284 |
|
285 |
// Libelle du type du document |
286 |
echo '<td class="col-1">'; |
287 |
printf ($link, $row['document_numerise'], $row['type_document']); |
288 |
echo '</td>'; |
289 |
|
290 |
echo "</tr>"; |
291 |
|
292 |
// |
293 |
$i++; |
294 |
|
295 |
} |
296 |
|
297 |
//On ferme la table |
298 |
echo "</table>"; |
299 |
|
300 |
//S'il n'y a pas de résultat on affiche "Aucun enregistrements" |
301 |
if ($res->numrows() == 0) { |
302 |
echo "<p class='noData'>"._("Aucun enregistrements")."<p>"; |
303 |
} |
304 |
} |
305 |
|
306 |
function setType(&$form,$maj) { |
307 |
parent::setType($form,$maj); |
308 |
|
309 |
//type |
310 |
$form->setType('document_numerise','hidden'); |
311 |
$form->setType('dossier','hidden'); |
312 |
$form->setType('nom_fichier','hidden'); |
313 |
|
314 |
if ($maj==0){ //ajout |
315 |
$form->setType('nom_fichier','hidden'); |
316 |
if($this->retourformulaire == "") { |
317 |
$form->setType('uid','upload'); |
318 |
} else { |
319 |
$form->setType('uid','upload2'); |
320 |
} |
321 |
}// fin ajout |
322 |
|
323 |
if ($maj==1){ //modifier |
324 |
$form->setType('nom_fichier','hiddenstatic'); |
325 |
if($this->retourformulaire == "") { |
326 |
$form->setType('uid','upload'); |
327 |
} else { |
328 |
$form->setType('uid','upload2'); |
329 |
} |
330 |
}// fin modifier |
331 |
|
332 |
if ($maj==2){ //supprimer |
333 |
$form->setType('uid','filestatic'); |
334 |
$form->setType('date_creation','datestatic'); |
335 |
}// fin supprimer |
336 |
|
337 |
if ($maj==3){ //consulter |
338 |
$form->setType('uid','file'); |
339 |
}// fin consulter |
340 |
} |
341 |
|
342 |
function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,&$db,$DEBUG=null){ |
343 |
parent::setValsousformulaire($form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,$db,$DEBUG); |
344 |
|
345 |
$this->retourformulaire = $retourformulaire; |
346 |
|
347 |
if($maj == 0 && |
348 |
($retourformulaire =='dossier' |
349 |
|| $retourformulaire =='dossier_instruction' |
350 |
|| $retourformulaire=='dossier_instruction_tous_clotures' |
351 |
|| $retourformulaire=='dossier_instruction_mes_clotures' |
352 |
|| $retourformulaire=='dossier_instruction_tous_encours' |
353 |
|| $retourformulaire=='dossier_instruction_mes_encours')) { |
354 |
$form->setVal('dossier', $idxformulaire); |
355 |
$form->setVal('date_creation', date("d/m/Y")); |
356 |
} |
357 |
|
358 |
}// fin setValsousformulaire |
359 |
|
360 |
/** |
361 |
* [setLib description] |
362 |
* @param [type] $form [description] |
363 |
* @param [type] $maj [description] |
364 |
*/ |
365 |
function setLib(&$form, $maj) { |
366 |
parent::setLib($form, $maj); |
367 |
|
368 |
// |
369 |
$form->setLib("uid", _("fichier")); |
370 |
} |
371 |
|
372 |
|
373 |
/** |
374 |
* Méthode de traitement des données retournées par le formulaire |
375 |
*/ |
376 |
function setvalF($val) { |
377 |
parent::setvalF($val); |
378 |
|
379 |
//Si le type est renseigné |
380 |
if ($val['document_numerise_type'] != "") { |
381 |
//Recupère le code du type du document |
382 |
$document_numerise_type = $this->get_document_numerise_type_code_by_id($val["document_numerise_type"]); |
383 |
|
384 |
} else { |
385 |
$document_numerise_type = ""; |
386 |
} |
387 |
|
388 |
if ($val["date_creation"] == "") { |
389 |
$this->valF["date_creation"] = ""; |
390 |
} |
391 |
|
392 |
//Génération automatique nom du fichier |
393 |
//var_dump($this); |
394 |
if ($val["nom_fichier"] == "" || $this->getParameter("maj") != 0) { |
395 |
$this->valF['nom_fichier'] = $this->generateFilename($this->valF["date_creation"], $document_numerise_type); |
396 |
} |
397 |
} |
398 |
|
399 |
/** |
400 |
* Permet de mettre à jour un champs dans la table instruction sans passer par ses triggers |
401 |
* @param string $document_numerise Identifiant du fichier |
402 |
* @param integer $instruction L'identifiant de l'instruction à mettre à jour |
403 |
*/ |
404 |
private function updateInstructionAutoExecute($document_numerise, $instruction) { |
405 |
|
406 |
// valeurs à mettre à jour |
407 |
$val = array("document_numerise"=>$document_numerise); |
408 |
// met à jour la table instruction sans passer par ses triggers |
409 |
$res = $this->db->autoExecute(DB_PREFIXE."instruction", $val, DB_AUTOQUERY_UPDATE,"instruction=".$instruction); |
410 |
// Exécution du traitement |
411 |
$this->f->addToLog("updateInstructionDocumentArrete() : db->autoExecute(".$res.")", VERBOSE_MODE); |
412 |
if (database::isError($res)) { |
413 |
die(); |
414 |
} |
415 |
} |
416 |
|
417 |
/** |
418 |
* Permet d’effectuer des actions après l’insertion des données dans la base |
419 |
*/ |
420 |
function triggerajouterapres($id,&$db,$val,$DEBUG) { |
421 |
|
422 |
//Si l'option ERP est activée |
423 |
if ($this->f->getParameter('option_erp') === 'true') { |
424 |
|
425 |
//Envoi d'un message au référentiel ERP si on ajoute une piece sur |
426 |
//un dossier de type AT |
427 |
if ($this->f->getDATDCode($this->valF['dossier']) === 'AT') { |
428 |
//On initialise la queue de message |
429 |
$msgenque = new MessageEnqueuer(); |
430 |
//On initialise le dossier d'instruction |
431 |
$msgenque->setDossierInstructionIdentifier($this->valF['dossier']); |
432 |
|
433 |
//On récupère l'état du dossier d'instruction |
434 |
$etat = $this->getEtatDossier($this->valF['dossier']); |
435 |
|
436 |
//On calcule le type de pièce |
437 |
$msgenque->setTypePiece(($etat==='incomplet')?_("complementaire"):_("supplementaire")); |
438 |
$return = $msgenque->enqueueMessage($msgenque::$ERP_AJOUT_PIECE); |
439 |
//Si une erreur s'est produite on arrête le traitement et on |
440 |
//retourne une erreur |
441 |
if ($return !== 0){ |
442 |
|
443 |
$this->addToMessage(_("Une erreur s'est produite lors de ". |
444 |
"l'envoi du message au referentiel ERP. Merci de ". |
445 |
"contacter votre administrateur")); |
446 |
//On ne valide pas le formulaire |
447 |
$this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>"); |
448 |
$this->correct = false; |
449 |
return false; |
450 |
} |
451 |
else { |
452 |
$this->addToMessage(_("Le message a ete transmis au ". |
453 |
"referentiel ERP.")); |
454 |
} |
455 |
} |
456 |
} |
457 |
} |
458 |
|
459 |
/** |
460 |
* Permet d’effectuer des actions avant la modification des données dans la base |
461 |
*/ |
462 |
function triggermodifier($id,&$db,$val,$DEBUG) { |
463 |
|
464 |
// si le fichier n'a pas été déjà modifié |
465 |
if (stripos($val['uid'], 'tmp') === false) { |
466 |
// récupération du fichier et de ses métadonnées |
467 |
$file = $this->f->storage->get($val['uid']); |
468 |
// créé un fichier temporaire |
469 |
$tmp_file = $this->f->storage->create_temporary($file['file_content'], $file['metadata'], "from_content"); |
470 |
// remplace le fichier par le temporaire pour obliger la modification du fichier |
471 |
$this->valF['uid'] = 'tmp|'.$tmp_file; |
472 |
} |
473 |
} |
474 |
|
475 |
/** |
476 |
* Surcharge du bouton retour des sous-formulaire |
477 |
*/ |
478 |
function retoursousformulaire($idxformulaire, $retourformulaire, $val, |
479 |
$objsf, $premiersf, $tricolsf, $validation, |
480 |
$idx, $maj, $retour) { |
481 |
|
482 |
if(($maj == 0 || $maj == 3 || $maj == 2) && ($retourformulaire === "dossier_instruction" |
483 |
|| $retourformulaire==='dossier_instruction_tous_clotures' |
484 |
|| $retourformulaire==='dossier_instruction_mes_clotures' |
485 |
|| $retourformulaire==='dossier_instruction_tous_encours' |
486 |
|| $retourformulaire==='dossier_instruction_mes_encours')) { |
487 |
|
488 |
echo "\n<a class=\"retour\" "; |
489 |
echo "href=\"#\" "; |
490 |
|
491 |
echo "onclick=\"ajaxIt('".$objsf."', '"; |
492 |
echo "../scr/sousform.php?obj=document_numerise" |
493 |
."&idx=$idxformulaire" |
494 |
."&action=4" |
495 |
."&retourformulaire=$retourformulaire" |
496 |
."&idxformulaire=$idxformulaire" |
497 |
."&retour=form');\""; |
498 |
echo "\" "; |
499 |
echo ">"; |
500 |
// |
501 |
echo _("Retour"); |
502 |
// |
503 |
echo "</a>\n"; |
504 |
|
505 |
} else { |
506 |
parent::retoursousformulaire($idxformulaire, $retourformulaire, $val, |
507 |
$objsf, $premiersf, $tricolsf, $validation, |
508 |
$idx, $maj, $retour); |
509 |
} |
510 |
} |
511 |
|
512 |
/** |
513 |
* Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de |
514 |
* consultation |
515 |
*/ |
516 |
function setSelect(&$form, $maj,&$db,$debug) { |
517 |
//parent::setSelect($form, $maj,$db,$debug); |
518 |
// Inclusion du fichier de requêtes |
519 |
if (file_exists("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php")) { |
520 |
include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"; |
521 |
} elseif (file_exists("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc")) { |
522 |
include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"; |
523 |
} |
524 |
// document_numerise_type |
525 |
$this->init_select($form, $this->f->db, $maj, null, "document_numerise_type", $sql_document_numerise_type, $sql_document_numerise_type_by_id, false); |
526 |
|
527 |
//Seulement dans le cas d'un dossier d'instruction |
528 |
if($this->retourformulaire =='dossier_instruction' |
529 |
|| $this->retourformulaire=='dossier_instruction_tous_clotures' |
530 |
|| $this->retourformulaire=='dossier_instruction_mes_clotures' |
531 |
|| $this->retourformulaire=='dossier_instruction_tous_encours' |
532 |
|| $this->retourformulaire=='dossier_instruction_mes_encours') { |
533 |
|
534 |
//Tableau des contraintes |
535 |
$params = array( |
536 |
"constraint" => array( |
537 |
"extension" => ".pdf" |
538 |
), |
539 |
); |
540 |
|
541 |
$form->setSelect("uid", $params); |
542 |
} |
543 |
} |
544 |
|
545 |
// {{{ |
546 |
// Méthodes de récupération des métadonnées document |
547 |
/** |
548 |
* Récupération du numéro de dossier d'instruction à ajouter aux métadonnées |
549 |
* @return [type] [description] |
550 |
*/ |
551 |
protected function getDossier() { |
552 |
if(empty($this->specificMetadata)) { |
553 |
$this->getSpecificMetadata(); |
554 |
} |
555 |
return $this->specificMetadata->dossier; |
556 |
} |
557 |
/** |
558 |
* Récupération la version du dossier d'instruction à ajouter aux métadonnées |
559 |
* @return int Version |
560 |
*/ |
561 |
protected function getDossierVersion() { |
562 |
if(empty($this->specificMetadata)) { |
563 |
$this->getSpecificMetadata(); |
564 |
} |
565 |
return $this->specificMetadata->version; |
566 |
} |
567 |
/** |
568 |
* Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées |
569 |
* @return [type] [description] |
570 |
*/ |
571 |
protected function getNumDemandeAutor() { |
572 |
if(empty($this->specificMetadata)) { |
573 |
$this->getSpecificMetadata(); |
574 |
} |
575 |
return $this->specificMetadata->dossier_autorisation; |
576 |
} |
577 |
/** |
578 |
* Récupération de la date de demande initiale du dossier à ajouter aux métadonnées |
579 |
* @return [type] [description] |
580 |
*/ |
581 |
protected function getAnneemoisDemandeAutor() { |
582 |
if(empty($this->specificMetadata)) { |
583 |
$this->getSpecificMetadata(); |
584 |
} |
585 |
return $this->specificMetadata->date_demande_initiale; |
586 |
} |
587 |
/** |
588 |
* Récupération du type de dossier d'instruction à ajouter aux métadonnées |
589 |
* @return [type] [description] |
590 |
*/ |
591 |
protected function getTypeInstruction() { |
592 |
if(empty($this->specificMetadata)) { |
593 |
$this->getSpecificMetadata(); |
594 |
} |
595 |
return $this->specificMetadata->dossier_instruction_type; |
596 |
} |
597 |
/** |
598 |
* Récupération du statut du dossier d'autorisation à ajouter aux métadonnées |
599 |
* @return [type] [description] |
600 |
*/ |
601 |
protected function getStatutAutorisation() { |
602 |
if(empty($this->specificMetadata)) { |
603 |
$this->getSpecificMetadata(); |
604 |
} |
605 |
return $this->specificMetadata->statut; |
606 |
} |
607 |
/** |
608 |
* Récupération du type de dossier d'autorisation à ajouter aux métadonnées |
609 |
* @return [type] [description] |
610 |
*/ |
611 |
protected function getTypeAutorisation() { |
612 |
if(empty($this->specificMetadata)) { |
613 |
$this->getSpecificMetadata(); |
614 |
} |
615 |
return $this->specificMetadata->dossier_autorisation_type; |
616 |
} |
617 |
/** |
618 |
* Récupération nom du fichier à ajouter aux métadonnées |
619 |
* @return [type] [description] |
620 |
*/ |
621 |
protected function getFilename() { |
622 |
return $this->valF["nom_fichier"]; |
623 |
} |
624 |
/** |
625 |
* Récupération de la date d'ajout de document à ajouter aux métadonnées |
626 |
* @return [type] [description] |
627 |
*/ |
628 |
protected function getDateEvenementDocument() { |
629 |
return date("Y-m-d", strtotime($this->valF["date_creation"])); |
630 |
} |
631 |
/** |
632 |
* Récupération du groupe d'instruction à ajouter aux métadonnées |
633 |
* @return string Groupe d'instruction |
634 |
*/ |
635 |
protected function getGroupeInstruction() { |
636 |
if(empty($this->specificMetadata)) { |
637 |
$this->getSpecificMetadata(); |
638 |
} |
639 |
return $this->specificMetadata->groupe_instruction; |
640 |
} |
641 |
/** |
642 |
* Récupération du libellé du type du document à ajouter aux métadonnées |
643 |
* @return string Groupe d'instruction |
644 |
*/ |
645 |
protected function getTitle() { |
646 |
//Requête sql |
647 |
$sql = "SELECT libelle |
648 |
FROM ".DB_PREFIXE."document_numerise_type |
649 |
WHERE document_numerise_type = ".$this->valF["document_numerise_type"]; |
650 |
$document_numerise_type_libelle = $this->db->getOne($sql); |
651 |
$this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE); |
652 |
$this->f->addToLog("getTitle() : db->getOne(".$sql.")", VERBOSE_MODE); |
653 |
if (database::isError($document_numerise_type_libelle)) { |
654 |
die(); |
655 |
} |
656 |
|
657 |
//Retourne le code du type de document |
658 |
return $document_numerise_type_libelle; |
659 |
} |
660 |
// Fin des méthodes de récupération des métadonnées |
661 |
// }}} |
662 |
|
663 |
/** |
664 |
* Génère le nom du fichier avec les information du formulaire |
665 |
* @param string $date Date de création du document |
666 |
* @param string $codeDoc Code du type de document |
667 |
* @return string Nom du fichier |
668 |
*/ |
669 |
private function generateFilename($date, $codeDoc) { |
670 |
|
671 |
//Change le format de la date |
672 |
$date = date("Ymd", strtotime($date)); |
673 |
//Compose le nom du fichier date + code document + extension |
674 |
$filename = $date.$codeDoc.'.pdf'; |
675 |
|
676 |
//Retourne le nom du fichier |
677 |
return $filename; |
678 |
} |
679 |
|
680 |
/** |
681 |
* Permet de recupérer le code du type de document par la clé primaire |
682 |
* @param int $document_numerise_type Clé primaire d'un donnée de document_numerise_type |
683 |
* @return string Code du type de document |
684 |
*/ |
685 |
private function get_document_numerise_type_code_by_id($document_numerise_type) { |
686 |
|
687 |
//Requête sql |
688 |
$sql = "SELECT code |
689 |
FROM ".DB_PREFIXE."document_numerise_type |
690 |
WHERE document_numerise_type = ".$document_numerise_type; |
691 |
$document_numerise_type_code = $this->db->getOne($sql); |
692 |
$this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE); |
693 |
$this->f->addToLog("obj/document_numerise.class.php : db->getOne(".$sql.")", VERBOSE_MODE); |
694 |
if (database::isError($document_numerise_type_code)) { |
695 |
die(); |
696 |
} |
697 |
|
698 |
//Retourne le code du type de document |
699 |
return $document_numerise_type_code; |
700 |
} |
701 |
|
702 |
/** |
703 |
* Permet de récupérer le libellé de la catégorie du type de document |
704 |
* @param int $document_numerise_type Clé primaire d'un donnée de document_numerise_type |
705 |
* @return string Libellé de la catégorie du type de document |
706 |
*/ |
707 |
private function get_document_numerise_type_categorie_libelle($document_numerise_type) { |
708 |
|
709 |
// Requête sql |
710 |
$sql = "SELECT document_numerise_type_categorie.libelle |
711 |
FROM ".DB_PREFIXE."document_numerise_type |
712 |
LEFT JOIN ".DB_PREFIXE."document_numerise_type_categorie |
713 |
ON document_numerise_type.document_numerise_type_categorie = document_numerise_type_categorie.document_numerise_type_categorie |
714 |
WHERE document_numerise_type.document_numerise_type = ".$document_numerise_type; |
715 |
$document_numerise_type_categorie_libelle = $this->db->getOne($sql); |
716 |
$this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE); |
717 |
$this->f->addToLog("obj/document_numerise.class.php : db->getOne(".$sql.")", VERBOSE_MODE); |
718 |
if (database::isError($document_numerise_type_categorie_libelle)) { |
719 |
die(); |
720 |
} |
721 |
|
722 |
//Retourne le code du type de document |
723 |
return $document_numerise_type_categorie_libelle; |
724 |
} |
725 |
|
726 |
|
727 |
/** |
728 |
* Cette méthode permet de stocker en attribut toutes les métadonnées |
729 |
* nécessaire à l'ajout d'un document. |
730 |
*/ |
731 |
public function getSpecificMetadata() { |
732 |
|
733 |
//Requête pour récupérer les informations essentiels sur le dossier d'instruction |
734 |
$sql = "SELECT dossier.dossier as dossier, |
735 |
dossier_autorisation.dossier_autorisation as dossier_autorisation, |
736 |
to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale, |
737 |
dossier_instruction_type.code as dossier_instruction_type, |
738 |
etat_dossier_autorisation.libelle as statut, |
739 |
dossier_autorisation_type.code as dossier_autorisation_type, |
740 |
groupe.code as groupe_instruction |
741 |
FROM ".DB_PREFIXE."dossier |
742 |
LEFT JOIN ".DB_PREFIXE."dossier_instruction_type |
743 |
ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type |
744 |
LEFT JOIN ".DB_PREFIXE."dossier_autorisation |
745 |
ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation |
746 |
LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation |
747 |
ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation |
748 |
LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille |
749 |
ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille |
750 |
LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type |
751 |
ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type |
752 |
LEFT JOIN ".DB_PREFIXE."groupe |
753 |
ON dossier_autorisation_type.groupe = groupe.groupe |
754 |
WHERE dossier.dossier = '".$this->valF["dossier"]."'"; |
755 |
$res = $this->db->query($sql); |
756 |
$this->f->addToLog("getSpecificMetadata : db->query(".$sql.")", VERBOSE_MODE); |
757 |
if ( database::isError($res)){ |
758 |
die(); |
759 |
} |
760 |
|
761 |
//Le résultat est récupéré dans un objet |
762 |
$row =& $res->fetchRow(DB_FETCHMODE_OBJECT); |
763 |
|
764 |
//Si il y a un résultat |
765 |
if ($row !== null) { |
766 |
|
767 |
//Génération du numéro de version |
768 |
$sql = "SELECT |
769 |
count(*) |
770 |
FROM |
771 |
".DB_PREFIXE."dossier |
772 |
LEFT JOIN |
773 |
".DB_PREFIXE."dossier_autorisation |
774 |
ON |
775 |
dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation |
776 |
LEFT JOIN |
777 |
".DB_PREFIXE."dossier_instruction_type |
778 |
ON |
779 |
dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type |
780 |
WHERE |
781 |
dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."' |
782 |
AND |
783 |
dossier_instruction_type.code = '".$row->dossier_instruction_type."'"; |
784 |
$row->version = $this->db->getOne($sql); |
785 |
$this->f->addToLog("getInfosForFoldername(): db->getOne(\"".$sql."\")", VERBOSE_MODE); |
786 |
if ( database::isError($row->version)){ |
787 |
$this->f->addToError("", $row->version, $row->version); |
788 |
return false; |
789 |
} |
790 |
|
791 |
//Formatage du numéro de version |
792 |
$row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT); |
793 |
|
794 |
//Alors on créé l'objet dossier_instruction |
795 |
$this->specificMetadata = $row; |
796 |
|
797 |
} |
798 |
} |
799 |
|
800 |
/** |
801 |
* CONDITION - is_ajoutable. |
802 |
* |
803 |
* Condition pour pouvoir ajouter |
804 |
* |
805 |
* @return boolean |
806 |
*/ |
807 |
function is_ajoutable() { |
808 |
// Test du bypass |
809 |
if ($this->f->isAccredited("document_numerise_ajouter_bypass")) { |
810 |
return true; |
811 |
} |
812 |
// Test des autres conditions |
813 |
return $this->is_ajoutable_or_modifiable_or_supprimable(); |
814 |
} |
815 |
|
816 |
/** |
817 |
* CONDITION - is_modifiable. |
818 |
* |
819 |
* Condition pour afficher le bouton modifier |
820 |
* |
821 |
* @return boolean |
822 |
*/ |
823 |
function is_modifiable() { |
824 |
// Test du bypass |
825 |
if ($this->f->isAccredited("document_numerise_modifier_bypass")) { |
826 |
return true; |
827 |
} |
828 |
// Test des autres conditions |
829 |
return $this->is_ajoutable_or_modifiable_or_supprimable(); |
830 |
} |
831 |
|
832 |
/** |
833 |
* CONDITION - is_supprimable. |
834 |
* |
835 |
* Condition pour afficher le bouton supprimer |
836 |
* @return boolean |
837 |
*/ |
838 |
function is_supprimable() { |
839 |
// Test du bypass |
840 |
if ($this->f->isAccredited("document_numerise_supprimer_bypass")) { |
841 |
return true; |
842 |
} |
843 |
// Test des autres conditions |
844 |
return $this->is_ajoutable_or_modifiable_or_supprimable(); |
845 |
} |
846 |
|
847 |
/** |
848 |
* Conditions pour afficher les boutons modifier et supprimer |
849 |
* |
850 |
* @return boolean |
851 |
*/ |
852 |
function is_ajoutable_or_modifiable_or_supprimable() { |
853 |
// |
854 |
$dossier = ($this->getParameter("maj")==0)?$this->getParameter("idxformulaire"):$this->getVal("dossier"); |
855 |
/** |
856 |
* Tester si le dossier est cloturé , de la meme division, instructeur, admin (?) |
857 |
*/ |
858 |
if($this->f->isUserInstructeur() |
859 |
&& isset($this->f->om_utilisateur["division"]) |
860 |
&& $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()){ |
861 |
return false; |
862 |
} |
863 |
// |
864 |
if ( $this->f->isUserInstructeur() && $this->f->getStatutDossier($dossier) == "cloture" ){ |
865 |
return false; |
866 |
} |
867 |
return true; |
868 |
} |
869 |
|
870 |
/** |
871 |
* Retourne le statut du dossier d'instruction |
872 |
* @param string $idx Identifiant du dossier d'instruction |
873 |
* @return string Le statut du dossier d'instruction |
874 |
*/ |
875 |
function getStatutAutorisationDossier($idx){ |
876 |
|
877 |
$statut = ''; |
878 |
|
879 |
//Si l'identifiant du dossier d'instruction fourni est correct |
880 |
if ( $idx != '' ){ |
881 |
|
882 |
//On récupère le statut de l'état du dossier d'instruction à partir de |
883 |
//l'identifiant du dossier d'instruction |
884 |
$sql = "SELECT etat.statut |
885 |
FROM ".DB_PREFIXE."dossier |
886 |
LEFT JOIN |
887 |
".DB_PREFIXE."etat |
888 |
ON |
889 |
dossier.etat = etat.etat |
890 |
WHERE dossier ='".$idx."'"; |
891 |
$statut = $this->db->getOne($sql); |
892 |
$this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE); |
893 |
if ( database::isError($statut)){ |
894 |
die(); |
895 |
} |
896 |
} |
897 |
return $statut; |
898 |
} |
899 |
|
900 |
/** |
901 |
* Cette variable permet de stocker le résultat de la méthode |
902 |
* getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de |
903 |
* ces appels. |
904 |
* @var string Code de la division du dossier en cours |
905 |
*/ |
906 |
var $_division_from_dossier = NULL; |
907 |
|
908 |
/** |
909 |
* Cette méthode permet de récupérer le code de division correspondant |
910 |
* au dossier sur lequel on se trouve. |
911 |
* |
912 |
* @return string Code de la division du dossier en cours |
913 |
*/ |
914 |
function getDivisionFromDossier() { |
915 |
|
916 |
// Cette méthode peut être appelée plusieurs fois lors d'une requête. |
917 |
// Pour éviter de refaire le traitement de recherche de la division |
918 |
// alors on vérifie si nous ne l'avons pas déjà calculé. |
919 |
if ($this->_division_from_dossier != NULL) { |
920 |
// Logger |
921 |
$this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE); |
922 |
// On retourne la valeur déjà calculée |
923 |
return $this->_division_from_dossier; |
924 |
} |
925 |
|
926 |
// Par défaut, on définit la valeur du dossier à NULL |
927 |
$dossier = NULL; |
928 |
// Test sur le mode et le contexte du formulaire |
929 |
if ($this->getParameter("maj") == 0 |
930 |
&& ($this->getParameter("retourformulaire") == "dossier" |
931 |
|| $this->getParameter("retourformulaire") == "dossier_instruction" |
932 |
|| $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours" |
933 |
|| $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours" |
934 |
|| $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures" |
935 |
|| $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) { |
936 |
// Si on se trouve en mode AJOUT (seul mode où l'enregistrement |
937 |
// n'existe pas en base de données) ET que nous nous trouvons |
938 |
// dans le contexte d'un dossier d'instruction alors on récupère |
939 |
// le numéro de dossier depuis le paramètre 'idxformulaire' |
940 |
$dossier = $this->getParameter("idxformulaire"); |
941 |
} else { |
942 |
// Sinon on récupère le numéro de dossier dans le champs dossier de |
943 |
// l'enregistrement (en base de données) |
944 |
$dossier = $this->getVal("dossier"); |
945 |
} |
946 |
|
947 |
// On appelle la méthode de la classe utils qui renvoi le code de la |
948 |
// division d'un dossier, on la stocke pour ne pas refaire le calcul au |
949 |
// prochain appel de cette méthode |
950 |
$this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier); |
951 |
// Logger |
952 |
$this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE); |
953 |
// On retourne la valeur retournée |
954 |
return $this->_division_from_dossier; |
955 |
|
956 |
} |
957 |
|
958 |
function getLastInstructionArrete($dossier) { |
959 |
|
960 |
// On récupère la dernière instruction dont l'événement est de type "arrete" |
961 |
$sql = "SELECT max(instruction) FROM ".DB_PREFIXE."instruction |
962 |
JOIN ".DB_PREFIXE."dossier ON instruction.dossier = dossier.dossier |
963 |
LEFT JOIN ".DB_PREFIXE."evenement |
964 |
ON instruction.evenement = evenement.evenement |
965 |
WHERE dossier.dossier='".$dossier."' AND |
966 |
evenement.type = 'arrete'"; |
967 |
$lastInstruction = $this->db->getOne($sql); |
968 |
$this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE); |
969 |
if ( database::isError($lastInstruction)){ |
970 |
die(); |
971 |
} |
972 |
|
973 |
return $lastInstruction; |
974 |
} |
975 |
|
976 |
/** |
977 |
* Récupère l'état d'un dossier d'instruction |
978 |
* @param $idxDossier L'identifiant du dossier d'instruction |
979 |
* @return L'état du dossier d'instruction |
980 |
*/ |
981 |
function getEtatDossier($idxDossier){ |
982 |
|
983 |
$etat = ""; |
984 |
|
985 |
$sql = "SELECT etat.etat |
986 |
FROM ".DB_PREFIXE."etat |
987 |
LEFT JOIN |
988 |
".DB_PREFIXE."dossier |
989 |
ON |
990 |
dossier.etat = etat.etat |
991 |
WHERE dossier.dossier = '".$idxDossier."'"; |
992 |
$etat = $this->db->getOne($sql); |
993 |
$this->addToLog("getEtatDossier(): db->getOne(\"".$sql."\");", VERBOSE_MODE); |
994 |
// Si une erreur survient on die |
995 |
if (database::isError($etat, true)) { |
996 |
// Appel de la methode de recuperation des erreurs |
997 |
$this->erreur_db($etat->getDebugInfo(), $etat->getMessage(), 'document_numerise'); |
998 |
} |
999 |
|
1000 |
return $etat; |
1001 |
} |
1002 |
|
1003 |
}// fin classe |
1004 |
?> |