Commit 6d9f05b7eed38cb2594cb73961025f7ef8f5ee85
1 parent
07ffc697
Exists in
master
and in
1 other branch
Amelioration gestion des Dates... (v3.7.9.18)
- GROS bugfix check dates : uniformisation du format date partout (vues et DatePicker.js et code javascript) => dd/mm/aaaa (au lieu de dd-mm-aa) - nombreuses refactorisations, généralisations et améliorations du code javascript (bcp de refactorisation dans script.js)
Showing
10 changed files
with
633 additions
and
243 deletions
Show diff stats
README.md
... | ... | @@ -53,18 +53,13 @@ Logiciel testé et validé sur les configurations suivantes : |
53 | 53 | |
54 | 54 | VERSION ACTUELLE |
55 | 55 | |
56 | -Date: 09/04/2020 | |
57 | -Version: 3.7.9.17 | |
56 | +Date: 16/04/2020 | |
57 | +Version: 3.7.9.18 | |
58 | 58 | Author: EP |
59 | 59 | Commentaire: |
60 | - Amelioration Suivis (3) : | |
61 | - - ajout champ is_metro dans table type_suivis pour les types liés au module métrologie | |
62 | - - Nombreuses simplifications (et bugfix) des VUES en enrichissant le controleur de Suivis (et de Materiels) | |
63 | - - (les vues doivent toujours être le plus BETE, SIMPLE possibles, la complexité ne doit être QUE dans le controleur) | |
64 | - - commentaires et repagination pour que le code soit LISIBLE !!!! | |
65 | - - début d'utilisation des migrations de BD | |
66 | - - ... | |
67 | - | |
60 | + Amelioration gestion des Dates... : | |
61 | + - GROS bugfix check dates : uniformisation du format date partout (vues et DatePicker.js et code javascript) => dd/mm/aaaa (au lieu de dd-mm-aa) | |
62 | + - nombreuses refactorisations, généralisations et améliorations du code javascript (bcp de refactorisation dans script.js) | |
68 | 63 | |
69 | 64 | IMPORTANT : |
70 | 65 | - Pour connaitre la version actuelle, taper "./VERSION" |
... | ... | @@ -98,7 +93,16 @@ CHANGEMENTS IMPORTANTS (MILESTONES) |
98 | 93 | La liste ci-dessous n'est plus à jour, elle est désormais en ligne ici : https://tinyurl.com/labinvent#heading=h.2r55bflctpt5 |
99 | 94 | |
100 | 95 | ----------------------------------------------------------------------------------------------------------- |
101 | - | |
96 | + | |
97 | +09/04/2020 Version 3.7.9.17 (EP) | |
98 | + Amelioration Suivis (3) : | |
99 | + - ajout champ is_metro dans table type_suivis pour les types liés au module métrologie | |
100 | + - Nombreuses simplifications (et bugfix) des VUES en enrichissant le controleur de Suivis (et de Materiels) | |
101 | + - (les vues doivent toujours être le plus BETE, SIMPLE possibles, la complexité ne doit être QUE dans le controleur) | |
102 | + - commentaires et repagination pour que le code soit LISIBLE !!!! | |
103 | + - début d'utilisation des migrations de BD | |
104 | + - ... | |
105 | + | |
102 | 106 | 07/04/2020 Version 3.7.9.16 (EP) |
103 | 107 | Amelioration Suivis (2) : |
104 | 108 | - amélioration du code javascript par refactorisation | ... | ... |
src/Controller/MaterielsController.php
... | ... | @@ -1040,8 +1040,7 @@ class MaterielsController extends AppController |
1040 | 1040 | |
1041 | 1041 | // (1) On remplit $materiel avec les données de ce materiel |
1042 | 1042 | $materiel = $this->Materiels->patchEntity($materiel, $this->request->getData()); |
1043 | - //debug($materiel); | |
1044 | - //exit; | |
1043 | + //debug($materiel); exit; | |
1045 | 1044 | |
1046 | 1045 | // (2) Si l'utilisateur courant est un "administratif" => le mettre comme gestionnaire du materiel |
1047 | 1046 | // (tout ça pour ça !!! Faudra réduire ce bazar) |
... | ... | @@ -3298,16 +3297,26 @@ class MaterielsController extends AppController |
3298 | 3297 | // called from Javascript (Ajax) |
3299 | 3298 | public function getDateGarantie($dateORjour, $dureeORmois, $uniteORannee, $duree = null, $unite = null) |
3300 | 3299 | { |
3300 | + //(EP 20200410 changement) | |
3301 | + //$sep = '-'; | |
3302 | + $sep = '/'; | |
3301 | 3303 | if ($duree != null && $unite != null) { |
3302 | - $date = $dateORjour . '-' . $dureeORmois . '-' . $uniteORannee; | |
3304 | + //$date = $dateORjour . '-' . $dureeORmois . '-' . $uniteORannee; | |
3305 | + $date = $dateORjour . $sep . $dureeORmois . $sep . $uniteORannee; | |
3303 | 3306 | } else { |
3304 | 3307 | $date = $dateORjour; |
3305 | 3308 | $duree = $dureeORmois; |
3306 | 3309 | $unite = $uniteORannee; |
3307 | 3310 | } |
3308 | 3311 | |
3309 | - $date_next = date_create_from_format('d-m-Y', $date); | |
3310 | - | |
3312 | + // (EP 20200410 changement format d-m-Y => d/m/Y) car c'est le format qui est affiché par défaut par cakephp dans les vues | |
3313 | + //$date_next = date_create_from_format('d-m-Y', $date); | |
3314 | + //$date_next = date_create_from_format('d/m/Y', $date); | |
3315 | + $date_next = \DateTime::createFromFormat('d/m/Y', $date); | |
3316 | + | |
3317 | + $unit = ($unite=='Ans') ? 'years' : 'months'; | |
3318 | + $date_next->add(\DateInterval::createFromDateString("$duree $unit")); | |
3319 | + /* | |
3311 | 3320 | switch ($unite) { |
3312 | 3321 | case "Mois": |
3313 | 3322 | date_add($date_next, date_interval_create_from_date_string($duree . ' months')); |
... | ... | @@ -3316,8 +3325,11 @@ class MaterielsController extends AppController |
3316 | 3325 | date_add($date_next, date_interval_create_from_date_string($duree . ' years')); |
3317 | 3326 | break; |
3318 | 3327 | } |
3328 | + */ | |
3319 | 3329 | |
3320 | - $this->set('date', date_format($date_next, 'd-m-Y')); | |
3330 | + //$this->set('date', date_format($date_next, 'd-m-Y')); | |
3331 | + //$this->set('date', date_format($date_next, 'd/m/Y')); | |
3332 | + $this->set('date', $date_next->format('d/m/Y')); | |
3321 | 3333 | |
3322 | 3334 | $this->viewBuilder()->layout = 'ajax'; |
3323 | 3335 | } | ... | ... |
src/Model/Table/MaterielsTable.php
... | ... | @@ -136,11 +136,26 @@ class MaterielsTable extends AppTable |
136 | 136 | { |
137 | 137 | |
138 | 138 | $dateValide = function ($entity) { |
139 | + //date_default_timezone_set('Europe/Paris'); | |
140 | + $tz = new \DateTimeZone('Europe/Paris'); | |
141 | + $today = (new \DateTime('now',$tz))->format('Ymd'); | |
142 | + /* | |
139 | 143 | $time = Time::now(); // On récupère la date et l'heure actuelles |
140 | 144 | $today = (new date("$time->year-$time->month-$time->day"))->format('Ymd'); // On extrait la date on la formatte en un format comparable de type 20171231 |
145 | + */ | |
146 | + // DateTume lit les dates au format JJ-MM-YYYY (et non pas JJ/MM/YYYY) | |
147 | + $date = ( new \DateTime(strtr($entity,'/','-'),$tz) )->format('Ymd'); | |
148 | + /* | |
141 | 149 | $timeEntity = new time($entity); |
142 | 150 | $dateEntity = (new date("$timeEntity->year-$timeEntity->month-$timeEntity->day"))->format('Ymd'); |
143 | - return ($today >= $dateEntity); | |
151 | + */ | |
152 | + /* | |
153 | + debug($entity); // ex: '20/04/2020' | |
154 | + debug($today); | |
155 | + debug($date); | |
156 | + exit; | |
157 | + */ | |
158 | + return ($today >= $date); | |
144 | 159 | }; |
145 | 160 | |
146 | 161 | $validator->integer('id')->allowEmpty('id', 'create'); |
... | ... | @@ -182,12 +197,12 @@ class MaterielsTable extends AppTable |
182 | 197 | if ($configuration->date_commande_facultative) { |
183 | 198 | $validator->allowEmpty('date_acquisition')->add('date_acquisition', 'custom', [ |
184 | 199 | 'rule' => $dateValide, |
185 | - 'message' => 'La date n\'est pas valide' | |
200 | + 'message' => "La date n'est pas valide (car trop lointaine)" | |
186 | 201 | ]); |
187 | 202 | } else { |
188 | 203 | $validator->notEmpty('date_acquisition', 'Ce champ doit être rempli')->add('date_acquisition', 'custom', [ |
189 | 204 | 'rule' => $dateValide, |
190 | - 'message' => 'La date n\'est pas valide' | |
205 | + 'message' => "La date n'est pas valide (car trop lointaine)" | |
191 | 206 | ]); |
192 | 207 | } |
193 | 208 | /* | ... | ... |
src/Template/Materiels/add_edit.ctp
... | ... | @@ -534,7 +534,7 @@ if (isset($cpMateriel)) { |
534 | 534 | 'type' => 'text', |
535 | 535 | 'label' => 'Date commande (BC)', |
536 | 536 | 'class' => 'datepicker', |
537 | - 'placeholder' => 'Cliquez pour sélectionner une date', | |
537 | + 'placeholder' => 'Cliquez pour une date (JJ/MM/AAAA)', | |
538 | 538 | // ADD only |
539 | 539 | //'default' => $Date_acquisition |
540 | 540 | 'default' => $materiel->date_acquisition, | ... | ... |
src/Template/Materiels/view.ctp
... | ... | @@ -35,7 +35,7 @@ $allProfiles = $allProfiles; |
35 | 35 | |
36 | 36 | // - Materiel status: |
37 | 37 | $entity = $entity; |
38 | -$materiel = $entity; //@deprecated | |
38 | +$entity = $entity; //@deprecated | |
39 | 39 | //debug($entity); |
40 | 40 | |
41 | 41 | $idGmNa = $idGmNa; |
... | ... | @@ -111,11 +111,11 @@ function $echoActionButton($html, $icon_class, $title, $action, $id, $tip='', $c |
111 | 111 | * 'TOBEARCHIVED' => TOBEARCHIVED, |
112 | 112 | * 'ARCHIVED' => ARCHIVED, |
113 | 113 | * ]; |
114 | - * $IS_CREATED = ( $materiel->status == 'CREATED' ); | |
115 | - * $IS_VALIDATED = ( $materiel->status == 'VALIDATED' ); | |
116 | - * $IS_TOBEARCHIVED = ( $materiel->status == 'TOBEARCHIVED' ); | |
117 | - * $IS_ARCHIVED = ( $materiel->status == 'ARCHIVED' ); | |
118 | - * $status = $allStatus[$materiel->status]; | |
114 | + * $IS_CREATED = ( $entity->status == 'CREATED' ); | |
115 | + * $IS_VALIDATED = ( $entity->status == 'VALIDATED' ); | |
116 | + * $IS_TOBEARCHIVED = ( $entity->status == 'TOBEARCHIVED' ); | |
117 | + * $IS_ARCHIVED = ( $entity->status == 'ARCHIVED' ); | |
118 | + * $status = $allStatus[$entity->status]; | |
119 | 119 | * |
120 | 120 | * // 2) User settings |
121 | 121 | * const PROFILE_USER = 1; |
... | ... | @@ -160,16 +160,16 @@ function $echoActionButton($html, $icon_class, $title, $action, $id, $tip='', $c |
160 | 160 | |
161 | 161 | /* |
162 | 162 | $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER = $USER_IS_UTILISATEUR && in_array($username, [ |
163 | - $materiel->nom_createur, | |
164 | - $materiel->nom_responsable | |
163 | + $entity->nom_createur, | |
164 | + $entity->nom_responsable | |
165 | 165 | ]); |
166 | 166 | |
167 | 167 | $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER = $USER_IS_RESPONSABLE && in_array($username, [ |
168 | - $materiel->nom_createur, | |
169 | - $materiel->nom_responsable | |
168 | + $entity->nom_createur, | |
169 | + $entity->nom_responsable | |
170 | 170 | ]); |
171 | 171 | |
172 | -$USER_IS_RESPONSABLE_AND_SAME_GROUP = $USER_IS_RESPONSABLE && ((isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id != $idGmNa && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id) || (isset($priviledgedUser->groupe_thematique_id) && $priviledgedUser->groupe_thematique_id != $idGtNa && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id)); | |
172 | +$USER_IS_RESPONSABLE_AND_SAME_GROUP = $USER_IS_RESPONSABLE && ((isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id != $idGmNa && $entity->groupes_metier_id == $priviledgedUser->groupes_metier_id) || (isset($priviledgedUser->groupe_thematique_id) && $priviledgedUser->groupe_thematique_id != $idGtNa && $entity->groupes_thematique_id == $priviledgedUser->groupe_thematique_id)); | |
173 | 173 | */ |
174 | 174 | |
175 | 175 | /* |
... | ... | @@ -189,12 +189,12 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
189 | 189 | |
190 | 190 | <h2> |
191 | 191 | <?php |
192 | - // if (h($materiel->status) == 'ARCHIVED') echo '<i class="icon-inbox"></i> '; | |
192 | + // if (h($entity->status) == 'ARCHIVED') echo '<i class="icon-inbox"></i> '; | |
193 | 193 | if ($IS_ARCHIVED) echo '<i class="icon-inbox"></i> '; |
194 | - $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; | |
194 | + $panne = h($entity->hors_service) ? ' (HORS SERVICE)' : ''; | |
195 | 195 | ?> |
196 | - <?=h($materiel->designation) . $panne?> | |
197 | - <span style="font-size: 70%; color: grey;"><?=h($materiel->numero_laboratoire)?> | |
196 | + <?=h($entity->designation) . $panne?> | |
197 | + <span style="font-size: 70%; color: grey;"><?=h($entity->numero_laboratoire)?> | |
198 | 198 | <?php |
199 | 199 | if ($IS_ARCHIVED) echo ' (Archivé)'; |
200 | 200 | ?> |
... | ... | @@ -221,7 +221,7 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
221 | 221 | <?php |
222 | 222 | echo $this->Html->image('qrcodes/' . $this->request->getSession() |
223 | 223 | ->read("filename"), [ |
224 | - 'alt' => 'QrCode : ' . $materiel->numero_laboratoire, | |
224 | + 'alt' => 'QrCode : ' . $entity->numero_laboratoire, | |
225 | 225 | //'style' => 'float:none;' |
226 | 226 | //'style' => 'float:right;' |
227 | 227 | ]); |
... | ... | @@ -238,7 +238,7 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
238 | 238 | * informations de la photo pour retrouver son nom et l'afficher, l'id ne suffit plus |
239 | 239 | * on parcourt donc les documents liés à ce matériel |
240 | 240 | */ |
241 | - foreach ($materiel->documents as $document) { | |
241 | + foreach ($entity->documents as $document) { | |
242 | 242 | //debug($document); |
243 | 243 | // Toute image : |
244 | 244 | //$is_doc_photo = in_array($document->type_doc, ['png','jpg','jpeg']); |
... | ... | @@ -292,35 +292,35 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
292 | 292 | $bStyle = 'margin-right: 10px'; |
293 | 293 | |
294 | 294 | // BOUTON "Editer" |
295 | - if ($CAN_EDIT) $echoActionButton($this->Html, 'icon-pencil', $bStyle, ' Editer ce matériel', 'materiels', 'edit', $materiel->id); | |
295 | + if ($CAN_EDIT) $echoActionButton($this->Html, 'icon-pencil', $bStyle, ' Editer ce matériel', 'materiels', 'edit', $entity->id); | |
296 | 296 | |
297 | 297 | // BOUTONS "NOUVEAU SUIVI" et "NOUVEL EMPRUNT" |
298 | - // if ($materiel->status == 'VALIDATED') { | |
298 | + // if ($entity->status == 'VALIDATED') { | |
299 | 299 | if ($IS_VALIDATED) { |
300 | - $echoActionButton($this->Html, 'icon-plus', $bStyle, ' Nouv. Suivi', 'suivis', 'add', $materiel->id, [], 'Faire un nouveau suivi de ce matériel'); | |
300 | + $echoActionButton($this->Html, 'icon-plus', $bStyle, ' Nouv. Suivi', 'suivis', 'add', $entity->id, [], 'Faire un nouveau suivi de ce matériel'); | |
301 | 301 | /* |
302 | 302 | echo $this->Html->link('<i class="icon-plus"></i> Nouv. Suivi', [ |
303 | 303 | 'controller' => 'suivis', |
304 | 304 | 'action' => 'add', |
305 | - $materiel->id | |
305 | + $entity->id | |
306 | 306 | ], [ |
307 | 307 | 'title' => 'Faire un nouveau suivi de ce matériel', |
308 | 308 | 'style' => 'margin-right: 10px', |
309 | 309 | 'escape' => false |
310 | 310 | ]); // End link |
311 | 311 | */ |
312 | - $echoActionButton($this->Html, 'icon-plus', $bStyle, ' Nouv. Emprunt', 'emprunts', 'add', $materiel->id, [], 'Faire un nouvel emprunt de ce matériel'); | |
312 | + $echoActionButton($this->Html, 'icon-plus', $bStyle, ' Nouv. Emprunt', 'emprunts', 'add', $entity->id, [], 'Faire un nouvel emprunt de ce matériel'); | |
313 | 313 | } |
314 | 314 | |
315 | 315 | // BOUTONS "Lier un Doc" et "Remplacer/Lier photo" |
316 | 316 | if ($CAN_ATTACH_A_DOC) { |
317 | - $echoActionButton($this->Html, 'icon-file', $bStyle, ' Lier un Doc. (ou photo)', 'documents', 'add', $materiel->id, ['mat'], 'Attacher un Doc. à ce matériel'); | |
317 | + $echoActionButton($this->Html, 'icon-file', $bStyle, ' Lier un Doc. (ou photo)', 'documents', 'add', $entity->id, ['mat'], 'Attacher un Doc. à ce matériel'); | |
318 | 318 | /* |
319 | 319 | // BOUTON "photo" |
320 | - if ($materiel->photo_id != null) | |
321 | - $echoActionButton($this->Html, 'icon-file', $bStyle, ' Remplacer la photo.', 'documents', 'add', $materiel->id, ['mat', 'photo'], 'Remplacer la photo de ce matériel'); | |
320 | + if ($entity->photo_id != null) | |
321 | + $echoActionButton($this->Html, 'icon-file', $bStyle, ' Remplacer la photo.', 'documents', 'add', $entity->id, ['mat', 'photo'], 'Remplacer la photo de ce matériel'); | |
322 | 322 | else |
323 | - $echoActionButton($this->Html, 'icon-file', $bStyle, ' Lier une photo.', 'documents', 'add', $materiel->id, ['mat', 'photo'], 'Attacher une photo à ce matériel'); | |
323 | + $echoActionButton($this->Html, 'icon-file', $bStyle, ' Lier une photo.', 'documents', 'add', $entity->id, ['mat', 'photo'], 'Attacher une photo à ce matériel'); | |
324 | 324 | */ |
325 | 325 | } |
326 | 326 | |
... | ... | @@ -332,14 +332,14 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
332 | 332 | if ($PDF_ENGINE == "FPDF") { |
333 | 333 | // FPDF |
334 | 334 | $action = 'admission'; |
335 | - $data = $materiel->numero_laboratoire; | |
335 | + $data = $entity->numero_laboratoire; | |
336 | 336 | } |
337 | 337 | else { |
338 | 338 | // DOMPDF |
339 | 339 | $action = 'admission_pdf'; |
340 | - $data = $materiel->numero_laboratoire . ".pdf"; | |
340 | + $data = $entity->numero_laboratoire . ".pdf"; | |
341 | 341 | } |
342 | - // if (($materiel->status == 'VALIDATED') || ($materiel->status == 'CREATED')) { | |
342 | + // if (($entity->status == 'VALIDATED') || ($entity->status == 'CREATED')) { | |
343 | 343 | $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $data, [], "Voir le document d'admission"); |
344 | 344 | } |
345 | 345 | |
... | ... | @@ -348,14 +348,14 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
348 | 348 | if ($PDF_ENGINE == "FPDF") { |
349 | 349 | // FPDF |
350 | 350 | $action = 'sortie'; |
351 | - $data = $materiel->numero_laboratoire; | |
351 | + $data = $entity->numero_laboratoire; | |
352 | 352 | } |
353 | 353 | else { |
354 | 354 | // DOMPDF |
355 | 355 | $action = 'sortie_pdf'; |
356 | - $data = $materiel->numero_laboratoire . ".pdf"; | |
356 | + $data = $entity->numero_laboratoire . ".pdf"; | |
357 | 357 | } |
358 | - // else if (($materiel->status == 'ARCHIVED') || ($materiel->status == 'TOBEARCHIVED')) { | |
358 | + // else if (($entity->status == 'ARCHIVED') || ($entity->status == 'TOBEARCHIVED')) { | |
359 | 359 | $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $data, [], "Voir le document de sortie"); |
360 | 360 | } |
361 | 361 | |
... | ... | @@ -375,7 +375,7 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
375 | 375 | |
376 | 376 | // BOUTONS de changement de statut : Valider, Invalider, Demander archivage, ou Archiver |
377 | 377 | /* (EP) Moved this to controller:view() |
378 | - $CAN_VALIDATE_OR_INVALIDATE = $USER_IS_ADMIN_OR_MORE || ( ($materiel->materiel_administratif == 0) && $USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL ); | |
378 | + $CAN_VALIDATE_OR_INVALIDATE = $USER_IS_ADMIN_OR_MORE || ( ($entity->materiel_administratif == 0) && $USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL ); | |
379 | 379 | $CAN_VALIDATE = $IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE; |
380 | 380 | $CAN_INVALIDATE = !$IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE; |
381 | 381 | $CAN_TBA = $IS_VALIDATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL)); |
... | ... | @@ -384,28 +384,28 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
384 | 384 | // CREATED |
385 | 385 | //if ($IS_CREATED) { |
386 | 386 | // Bouton VALIDER |
387 | - if ($CAN_VALIDATE) $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Red, ' Valider', '', 'statusValidated', $materiel->id, ['view'], "Valider ce matériel"); | |
387 | + if ($CAN_VALIDATE) $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Red, ' Valider', '', 'statusValidated', $entity->id, ['view'], "Valider ce matériel"); | |
388 | 388 | //} |
389 | 389 | // VALIDATED or more |
390 | 390 | //else { |
391 | 391 | // Bouton Invalider (Dévalider) |
392 | 392 | if ($CAN_INVALIDATE) |
393 | 393 | $echoActionButton( |
394 | - $this->Html, 'icon-remove-sign', $bStyle2Red, ' Dévalider', '', 'statusCreated', $materiel->id, ['view'], | |
394 | + $this->Html, 'icon-remove-sign', $bStyle2Red, ' Dévalider', '', 'statusCreated', $entity->id, ['view'], | |
395 | 395 | "dé-valider le matériel (le repasser au statut Créé, il faudra le re-valider ensuite)" |
396 | 396 | ); |
397 | 397 | // Bouton TBA |
398 | 398 | if ($CAN_TBA) |
399 | 399 | $echoActionButton( |
400 | - $this->Html, 'icon-ok-sign', $bStyle2Red, ' Demander sortie', '', 'statusToBeArchived', $materiel->id, ['view'], | |
400 | + $this->Html, 'icon-ok-sign', $bStyle2Red, ' Demander sortie', '', 'statusToBeArchived', $entity->id, ['view'], | |
401 | 401 | "Demander la sortie de l'inventaire" |
402 | 402 | ); |
403 | 403 | // Bouton ARCHIVER |
404 | 404 | if ($CAN_ARCHIVE) |
405 | 405 | $echoActionButton( |
406 | - $this->Html, 'icon-ok-sign', $bStyle2Red, ' Sortie inventaire', '', 'statusArchived', $materiel->id, ['view'], | |
406 | + $this->Html, 'icon-ok-sign', $bStyle2Red, ' Sortie inventaire', '', 'statusArchived', $entity->id, ['view'], | |
407 | 407 | "Sortir définitivement de l'inventaire", |
408 | - "Êtes-vous sur de bien vouloir archiver $materiel->designation ?" | |
408 | + "Êtes-vous sur de bien vouloir archiver $entity->designation ?" | |
409 | 409 | ); |
410 | 410 | //} // VALIDATED or more |
411 | 411 | /* |
... | ... | @@ -413,47 +413,47 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
413 | 413 | // CREATED |
414 | 414 | if ($IS_CREATED) |
415 | 415 | // Bouton VALIDER |
416 | - $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Red, ' Valider', '', 'statusValidated', $materiel->id, [], "Valider ce matériel"); | |
416 | + $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Red, ' Valider', '', 'statusValidated', $entity->id, [], "Valider ce matériel"); | |
417 | 417 | // VALIDATED or more |
418 | 418 | else { |
419 | 419 | // Bouton Invalider |
420 | - if ($USER_IS_ADMIN_OR_MORE) $echoActionButton($this->Html, 'icon-remove-sign', $bStyle2Red, ' Invalider', '', 'statusCreated', $materiel->id, [], | |
420 | + if ($USER_IS_ADMIN_OR_MORE) $echoActionButton($this->Html, 'icon-remove-sign', $bStyle2Red, ' Invalider', '', 'statusCreated', $entity->id, [], | |
421 | 421 | "dé-valider le matériel (le repasser au statut Créé, il faudra le re-valider ensuite)" |
422 | 422 | ); |
423 | 423 | // Bouton TBA |
424 | - if ($IS_VALIDATED) $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Red, ' Demander sortie', '', 'statusToBeArchived', $materiel->id, [], | |
424 | + if ($IS_VALIDATED) $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Red, ' Demander sortie', '', 'statusToBeArchived', $entity->id, [], | |
425 | 425 | "Demander la sortie de l'inventaire" |
426 | 426 | ); |
427 | 427 | // Bouton ARCHIVER |
428 | 428 | //if ($IS_TOBEARCHIVED && $role!='Responsable') $echoActionButton( |
429 | 429 | if ($IS_TOBEARCHIVED && $USER_IS_ADMIN_OR_MORE) $echoActionButton( |
430 | - $this->Html, 'icon-ok-sign', $bStyle2Red, ' Sortie inventaire', '', 'statusArchived', $materiel->id, [], | |
430 | + $this->Html, 'icon-ok-sign', $bStyle2Red, ' Sortie inventaire', '', 'statusArchived', $entity->id, [], | |
431 | 431 | "Sortir définitivement de l'inventaire", |
432 | - "Êtes-vous sur de bien vouloir archiver $materiel->designation ?" | |
432 | + "Êtes-vous sur de bien vouloir archiver $entity->designation ?" | |
433 | 433 | ); |
434 | 434 | } |
435 | 435 | } |
436 | 436 | */ |
437 | 437 | |
438 | 438 | // BOUTON Copier (seulement pour les materiels qui sont CREATED et pour les ADMINet+ ou USER owner) |
439 | - if ($CAN_COPY) $echoActionButton($this->Html, 'icon-plus', $bStyle2, ' Copier ce matériel', '', 'add', $materiel->id, [], "Copier ce matériel"); | |
439 | + if ($CAN_COPY) $echoActionButton($this->Html, 'icon-plus', $bStyle2, ' Copier ce matériel', '', 'add', $entity->id, [], "Copier ce matériel"); | |
440 | 440 | |
441 | 441 | // BOUTON ETIQUETTE (si imprimante disponible) |
442 | 442 | if ($CAN_PRINT_LABEL) { |
443 | 443 | |
444 | 444 | // - Bouton "Imprimer étiquette" |
445 | 445 | $echoActionButton($this->Html, 'icon-print', $bStyle, |
446 | - ' étiquette', '', 'printLabelRuban', h($materiel->id), [], | |
446 | + ' étiquette', '', 'printLabelRuban', h($entity->id), [], | |
447 | 447 | "Imprimer sur un ruban"); |
448 | 448 | |
449 | 449 | // - Bouton "Etiquette [non] collée" |
450 | 450 | //$echoActionButton($this->Html, 'icon-file', $bStyle.'; background: red; color: white', |
451 | 451 | $echoActionButton($this->Html, 'icon-file', $bStyle, |
452 | - $materiel->etiquette ? " Etiquette NON collée" : " Etiquette collée", | |
452 | + $entity->etiquette ? " Etiquette NON collée" : " Etiquette collée", | |
453 | 453 | 'materiels', |
454 | - $materiel->etiquette ? 'setLabelIsNotPlaced' : 'setLabelIsPlaced', | |
455 | - h($materiel->id), ['view'], | |
456 | - $materiel->etiquette ? | |
454 | + $entity->etiquette ? 'setLabelIsNotPlaced' : 'setLabelIsPlaced', | |
455 | + h($entity->id), ['view'], | |
456 | + $entity->etiquette ? | |
457 | 457 | "En cliquant sur ce bouton, vous déclarez que l'étiquette n'a PAS été collée sur le matériel" |
458 | 458 | : |
459 | 459 | "En cliquant sur ce bouton, vous certifiez que l'étiquette a bien été collée sur le matériel" |
... | ... | @@ -469,12 +469,12 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
469 | 469 | if ($PDF_ENGINE == "FPDF") { |
470 | 470 | // FPDF |
471 | 471 | $action = 'ficheMateriel'; |
472 | - $data = $materiel->numero_laboratoire; | |
472 | + $data = $entity->numero_laboratoire; | |
473 | 473 | } |
474 | 474 | else { |
475 | 475 | // DOMPDF |
476 | 476 | $action = 'fiche_materiel_pdf'; |
477 | - $data = $materiel->numero_laboratoire.'.pdf'; | |
477 | + $data = $entity->numero_laboratoire.'.pdf'; | |
478 | 478 | } |
479 | 479 | $echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $data, [], |
480 | 480 | "Voir la fiche du materiel" |
... | ... | @@ -488,7 +488,7 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN |
488 | 488 | |
489 | 489 | <!-- INFORMATIONS --> |
490 | 490 | |
491 | - <h3 id="t_informations" style="cursor: pointer;"> | |
491 | + <h3 id="t_informations" class='toggle' style="cursor: pointer;"> | |
492 | 492 | <i class="icon-chevron-down" style="font-size: 14px;" |
493 | 493 | id="i_informations"></i> <span style="text-decoration: underline;">Informations</span> |
494 | 494 | </h3> |
... | ... | @@ -505,8 +505,8 @@ $time = Time::now(); // On récupère la date et l'heure actuelles |
505 | 505 | $today = new date("$time->year-$time->month-$time->day"); // On extrait la date pour la vérification de fin de garantie |
506 | 506 | $today = $today->format('Ymd'); // On formatte la date initialement en 31-12-2000 en un format qui pourra etre comparé : 20001231 |
507 | 507 | |
508 | -if ($materiel->date_fin_garantie !== NULL) { | |
509 | - $timeFin = new time($materiel->date_fin_garantie); | |
508 | +if ($entity->date_fin_garantie !== NULL) { | |
509 | + $timeFin = new time($entity->date_fin_garantie); | |
510 | 510 | $dateFin = new date("$timeFin->year-$timeFin->month-$timeFin->day"); |
511 | 511 | $dateFin = $dateFin->format('Ymd'); |
512 | 512 | } |
... | ... | @@ -518,74 +518,74 @@ $style = ''; |
518 | 518 | if (isset($dateFin) && $today >= $dateFin) |
519 | 519 | $style = $style_red; |
520 | 520 | $type = ""; |
521 | -if (h($materiel->materiel_administratif) == 1 && h($materiel->materiel_technique) == 1) | |
521 | +if (h($entity->materiel_administratif) == 1 && h($entity->materiel_technique) == 1) | |
522 | 522 | $type = 'Administratif et technique'; |
523 | -else if (h($materiel->materiel_administratif) == 1) | |
523 | +else if (h($entity->materiel_administratif) == 1) | |
524 | 524 | $type = 'Administratif'; |
525 | -else if (h($materiel->materiel_technique) == 1) | |
525 | +else if (h($entity->materiel_technique) == 1) | |
526 | 526 | $type = 'Technique'; |
527 | 527 | |
528 | -//echo '<tr><td><strong>' . __('Description') . ' </strong></td><td>' . nl2br($materiel->description) . '</td></tr>'; | |
528 | +//echo '<tr><td><strong>' . __('Description') . ' </strong></td><td>' . nl2br($entity->description) . '</td></tr>'; | |
529 | 529 | // La variable-fonction $displayElement est définie dans le fichier src/Controller/AppController.php |
530 | 530 | //On va utiliser $displayElement pour l'affichage de tout les champs pour mettre une norme en place |
531 | -$displayElement(__('Nom du materiel'),$materiel->designation); | |
532 | -$displayElement(__('Description'),$materiel->description); | |
531 | +$displayElement(__('Nom du materiel'),$entity->designation); | |
532 | +$displayElement(__('Description'),$entity->description); | |
533 | 533 | $displayElement(__('Materiel inventorié'), $type); |
534 | -$displayElement(__('Organisme'), $materiel->has('organisme') ? h($materiel->organisme->nom) : ''); | |
535 | -$displayElement(__('Domaine'), $materiel->has('sur_category') ? h($materiel->sur_category->nom) : ''); | |
536 | -$displayElement(__('Catégorie'), $materiel->has('category') ? h($materiel->category->nom) : ''); | |
537 | -$displayElement(__('Sous-Catégorie'), $materiel->has('sous_category') ? h($materiel->sous_category->nom) : ''); | |
534 | +$displayElement(__('Organisme'), $entity->has('organisme') ? h($entity->organisme->nom) : ''); | |
535 | +$displayElement(__('Domaine'), $entity->has('sur_category') ? h($entity->sur_category->nom) : ''); | |
536 | +$displayElement(__('Catégorie'), $entity->has('category') ? h($entity->category->nom) : ''); | |
537 | +$displayElement(__('Sous-Catégorie'), $entity->has('sous_category') ? h($entity->sous_category->nom) : ''); | |
538 | 538 | |
539 | -if (h($materiel->etiquette) == 0) | |
539 | +if (h($entity->etiquette) == 0) | |
540 | 540 | $etiq = "Non"; |
541 | 541 | else |
542 | 542 | $etiq = "Oui"; |
543 | 543 | |
544 | 544 | $displayElement(__('Etiquette collée'), $etiq, $etiq=="Oui"?$style_green:$style_red); |
545 | 545 | |
546 | -$displayElement(__('N° de série'), $materiel->numero_serie); | |
547 | -$displayElement(__($configuration->nom_groupe_thematique), $materiel->has('groupes_thematique') ? $this->Html->link($materiel->groupes_thematique->nom, [ | |
546 | +$displayElement(__('N° de série'), $entity->numero_serie); | |
547 | +$displayElement(__($configuration->nom_groupe_thematique), $entity->has('groupes_thematique') ? $this->Html->link($entity->groupes_thematique->nom, [ | |
548 | 548 | 'controller' => 'GroupesThematiques', |
549 | 549 | 'action' => 'view', |
550 | - $materiel->groupes_thematique->id | |
550 | + $entity->groupes_thematique->id | |
551 | 551 | ]) : ''); |
552 | -$displayElement(__($configuration->nom_groupe_metier), $materiel->has('groupes_metier') ? $this->Html->link($materiel->groupes_metier->nom, [ | |
552 | +$displayElement(__($configuration->nom_groupe_metier), $entity->has('groupes_metier') ? $this->Html->link($entity->groupes_metier->nom, [ | |
553 | 553 | 'controller' => 'GroupesMetiers', |
554 | 554 | 'action' => 'view', |
555 | - $materiel->groupes_metier->id | |
555 | + $entity->groupes_metier->id | |
556 | 556 | ]) : ''); |
557 | 557 | if ($configuration->metrologie == 1) { |
558 | - if (h($materiel->metrologie) == 0) | |
558 | + if (h($entity->metrologie) == 0) | |
559 | 559 | $metro = "Non"; |
560 | 560 | else |
561 | 561 | $metro = "Oui"; |
562 | 562 | $displayElement(__('Métrologie'), $metro); |
563 | 563 | } |
564 | -$displayElement(__('Date d\'achat'), h($materiel->date_acquisition)); | |
565 | -$displayElement(__('Date de reception'), h($materiel->date_reception)); | |
566 | -if (! empty(h($materiel->duree_garntie))) { | |
567 | - $displayElement(__('Duree garantie'), h($materiel->duree_garantie) . ' ' . h($materiel->unite_duree_garantie)); | |
564 | +$displayElement(__('Date d\'achat'), h($entity->date_acquisition)); | |
565 | +$displayElement(__('Date de reception'), h($entity->date_reception)); | |
566 | +if (! empty(h($entity->duree_garntie))) { | |
567 | + $displayElement(__('Duree garantie'), h($entity->duree_garantie) . ' ' . h($entity->unite_duree_garantie)); | |
568 | 568 | } |
569 | -$displayElement(__('Date fin de garantie'), h($materiel->date_fin_garantie), $style); | |
570 | -$displayElement(__('Statut'), h($materiel->status)); | |
571 | -if ($materiel->status == 'ARCHIVED') { | |
572 | - $displayElement(__('Date d\'archivage'), h($materiel->date_archivage)); | |
569 | +$displayElement(__('Date fin de garantie'), h($entity->date_fin_garantie), $style); | |
570 | +$displayElement(__('Statut'), h($entity->status)); | |
571 | +if ($entity->status == 'ARCHIVED') { | |
572 | + $displayElement(__('Date d\'archivage'), h($entity->date_archivage)); | |
573 | 573 | } |
574 | -$displayElement(__('Prix (HT)'), h($materiel->prix_ht) . ' €'); | |
575 | -$displayElement(__('Fournisseur'), $materiel->has('fournisseur') ? $materiel->fournisseur->nom : ''); | |
576 | -$displayElement(__('Lieu de stockage'), $materiel->has('site') ? h($materiel->site->nom) : ''); | |
577 | -$displayElement(__('Détail lieu de stockage'), h($materiel->lieu_detail)); | |
578 | -$displayElement(__('Nom de l\'utilisateur'), $this->Html->link(h($materiel->nom_responsable), 'mailto:' . h($materiel->email_responsable))); | |
579 | -$displayElement(__('N. interne (labo)'), h($materiel->numero_laboratoire)); | |
574 | +$displayElement(__('Prix (HT)'), h($entity->prix_ht) . ' €'); | |
575 | +$displayElement(__('Fournisseur'), $entity->has('fournisseur') ? $entity->fournisseur->nom : ''); | |
576 | +$displayElement(__('Lieu de stockage'), $entity->has('site') ? h($entity->site->nom) : ''); | |
577 | +$displayElement(__('Détail lieu de stockage'), h($entity->lieu_detail)); | |
578 | +$displayElement(__('Nom de l\'utilisateur'), $this->Html->link(h($entity->nom_responsable), 'mailto:' . h($entity->email_responsable))); | |
579 | +$displayElement(__('N. interne (labo)'), h($entity->numero_laboratoire)); | |
580 | 580 | $gestionnaire = TableRegistry::get('Users')->find()->where([ |
581 | - 'id =' => $materiel->gestionnaire_id | |
581 | + 'id =' => $entity->gestionnaire_id | |
582 | 582 | ]); |
583 | 583 | $displayElement(__('Nom du gestionnaire de référence'), h($gestionnaire->first()['nom'])); |
584 | 584 | if ($role == 'Super Administrateur') { |
585 | - $displayElement(__('Date création'), h($materiel->created)); | |
586 | - $displayElement(__('Nom du créateur'), h($materiel->nom_createur)); | |
587 | - $displayElement(__('Date modification'), h($materiel->modified)); | |
588 | - $displayElement(__('Nom du modificateur'), h($materiel->nom_modificateur)); | |
585 | + $displayElement(__('Date création'), h($entity->created)); | |
586 | + $displayElement(__('Nom du créateur'), h($entity->nom_createur)); | |
587 | + $displayElement(__('Date modification'), h($entity->modified)); | |
588 | + $displayElement(__('Nom du modificateur'), h($entity->nom_modificateur)); | |
589 | 589 | } |
590 | 590 | ?> |
591 | 591 | </table> |
... | ... | @@ -600,18 +600,18 @@ if ($role == 'Super Administrateur') { |
600 | 600 | <?php |
601 | 601 | if ($USER_IS_ADMIN_OR_MORE) { |
602 | 602 | // if (in_array($role, ['Administration','Administration Plus','Super Administrateur'])) { |
603 | - echo '<h3 id="t_informations_admin" style="cursor: pointer;">'; | |
603 | + echo '<h3 id="t_informations_admin" class="toggle" style="cursor: pointer;">'; | |
604 | 604 | echo '<i class="icon-chevron-down" style="font-size: 14px;" id="i_informations_admin"></i>'; |
605 | 605 | echo '<span style="text-decoration: underline;"> Informations administratives</span>'; |
606 | 606 | echo '</h3>'; |
607 | 607 | echo '<div id="informations_admin" style="margin-bottom: 20px;">'; |
608 | 608 | echo '<table>'; |
609 | 609 | echo '<tr><th style="width: 250px;"></th><th></th></tr>'; |
610 | - echo '<tr><td><strong>' . __('CentreFinancier/EOTP') . ' </strong></td><td>' . h($materiel->eotp) . '</td></tr>'; | |
611 | - echo '<tr><td><strong>' . __('N° commande') . ' </strong></td><td>' . h($materiel->numero_commande) . '</td></tr>'; | |
612 | - echo '<tr><td><strong>' . __('Code comptable') . ' </strong></td><td>' . h($materiel->code_comptable) . '</td></tr>'; | |
613 | - echo '<tr><td><strong>' . __('N. Inventaire Organisme') . ' </strong></td><td>' . h($materiel->numero_inventaire_organisme) . '</td></tr>'; | |
614 | - echo '<tr><td><strong>' . __('N. inventaire (ancien)') . ' </strong></td><td>' . h($materiel->numero_inventaire_old) . '</td></tr>'; | |
610 | + echo '<tr><td><strong>' . __('CentreFinancier/EOTP') . ' </strong></td><td>' . h($entity->eotp) . '</td></tr>'; | |
611 | + echo '<tr><td><strong>' . __('N° commande') . ' </strong></td><td>' . h($entity->numero_commande) . '</td></tr>'; | |
612 | + echo '<tr><td><strong>' . __('Code comptable') . ' </strong></td><td>' . h($entity->code_comptable) . '</td></tr>'; | |
613 | + echo '<tr><td><strong>' . __('N. Inventaire Organisme') . ' </strong></td><td>' . h($entity->numero_inventaire_organisme) . '</td></tr>'; | |
614 | + echo '<tr><td><strong>' . __('N. inventaire (ancien)') . ' </strong></td><td>' . h($entity->numero_inventaire_old) . '</td></tr>'; | |
615 | 615 | echo '</table>'; |
616 | 616 | echo '</div>'; |
617 | 617 | } |
... | ... | @@ -627,13 +627,13 @@ if ($role == 'Super Administrateur') { |
627 | 627 | |
628 | 628 | <h3 id="t_suivis" style="cursor: pointer;"> |
629 | 629 | <i class="icon-chevron-down" style="font-size: 14px;" id="i_suivis"></i> |
630 | - <span style="text-decoration: underline;">Suivi(s) du matériel (<?=count($materiel->suivis)?>)</span> | |
630 | + <span style="text-decoration: underline;">Suivi(s) du matériel (<?=count($entity->suivis)?>)</span> | |
631 | 631 | </h3> |
632 | 632 | |
633 | 633 | <div id="suivis" style="margin-bottom: 20px;"> |
634 | 634 | |
635 | 635 | <?php |
636 | - if (empty($materiel->suivis)) | |
636 | + if (empty($entity->suivis)) | |
637 | 637 | echo 'Aucun suivi pour ce matériel.'; |
638 | 638 | |
639 | 639 | else { |
... | ... | @@ -653,7 +653,7 @@ if ($role == 'Super Administrateur') { |
653 | 653 | </tr> |
654 | 654 | |
655 | 655 | <!-- Affichage de chaque ligne de suivi --> |
656 | - <?php foreach ($materiel->suivis as $suivi) :?> | |
656 | + <?php foreach ($entity->suivis as $suivi) :?> | |
657 | 657 | |
658 | 658 | <tr> |
659 | 659 | |
... | ... | @@ -737,10 +737,10 @@ if ($role == 'Super Administrateur') { |
737 | 737 | |
738 | 738 | <h3 id="t_emprunts" style="cursor: pointer;"> |
739 | 739 | <i class="icon-chevron-down" style="font-size: 14px;" id="i_emprunts"></i> |
740 | - <span style="text-decoration: underline;">Emprunt(s) du matériel (<?=count($materiel->emprunts)?>)</span> | |
740 | + <span style="text-decoration: underline;">Emprunt(s) du matériel (<?=count($entity->emprunts)?>)</span> | |
741 | 741 | </h3> |
742 | 742 | <div id="emprunts" style="margin-bottom: 20px;"> |
743 | - <?php if (! empty($materiel->emprunts)) { ?> | |
743 | + <?php if (! empty($entity->emprunts)) { ?> | |
744 | 744 | <table> |
745 | 745 | <tr> |
746 | 746 | <th class="actions"><?=__('')?></th> |
... | ... | @@ -753,7 +753,7 @@ if ($role == 'Super Administrateur') { |
753 | 753 | </tr> |
754 | 754 | <?php |
755 | 755 | |
756 | - foreach ($materiel->emprunts as $emprunt) : | |
756 | + foreach ($entity->emprunts as $emprunt) : | |
757 | 757 | $type = 'Externe'; |
758 | 758 | $lieu = $emprunt['laboratoire']; |
759 | 759 | if ($emprunt['emprunt_interne'] == 1) { |
... | ... | @@ -815,7 +815,7 @@ if ($role == 'Super Administrateur') { |
815 | 815 | |
816 | 816 | <!-- FICHIERS liés --> |
817 | 817 | |
818 | - <?php $nbFic = count($materiel->documents); ?> | |
818 | + <?php $nbFic = count($entity->documents); ?> | |
819 | 819 | <h3 id="t_fichiers" style="cursor: pointer;"> |
820 | 820 | <i class="icon-chevron-down" style="font-size: 14px;" id="i_fichiers"></i> |
821 | 821 | <span style="text-decoration: underline;">Fichier(s) lié(s) au matériel (<?=$nbFic?>)</span> |
... | ... | @@ -830,7 +830,7 @@ if ($role == 'Super Administrateur') { |
830 | 830 | <th><?=__('Miniature')?></th> |
831 | 831 | </tr> |
832 | 832 | <?php |
833 | - foreach ($materiel->documents as $document) : | |
833 | + foreach ($entity->documents as $document) : | |
834 | 834 | ?> |
835 | 835 | |
836 | 836 | <!-- ROW --> |
... | ... | @@ -941,7 +941,7 @@ if ($role == 'Super Administrateur') { |
941 | 941 | echo $this->element('menu_view', [ |
942 | 942 | 'pluralHumanName' => 'Matériels', |
943 | 943 | 'singularHumanName' => 'Matériel', |
944 | - 'lien' => $materiel->id | |
944 | + 'lien' => $entity->id | |
945 | 945 | ])?> |
946 | 946 | </div> |
947 | 947 | --> |
948 | 948 | \ No newline at end of file | ... | ... |
src/Template/Suivis/add_edit.ctp
... | ... | @@ -264,7 +264,7 @@ else { |
264 | 264 | 'id' => 'date_deb', |
265 | 265 | 'label' => 'Date de la prise en charge', |
266 | 266 | 'class' => 'datepicker', |
267 | - 'placeholder' => 'Cliquez pour sélectionner une date' | |
267 | + 'placeholder' => 'Cliquez pour sélectionner une date (JJ/MM/AAAA)' | |
268 | 268 | ]); |
269 | 269 | echo $this->Form->control('date_prochain_controle', [ |
270 | 270 | 'type' => 'text', |
... | ... | @@ -527,12 +527,11 @@ $(document).ready(function () { |
527 | 527 | |
528 | 528 | // EDIT only |
529 | 529 | /* |
530 | - * Vérification date début > date fin dans le cas d'une panne | |
530 | + * Vérification date début < date fin | |
531 | 531 | */ |
532 | - $("#date_deb").bind("change", function (event) {check_dates();} ); | |
533 | - $("#date_fin").bind("change", function (event) {check_dates();} ); | |
534 | - // FIN changement date | |
535 | - | |
532 | + $("#date_deb").bind("change", function (event) { check_date_deb_inf_date_fin(); } ); | |
533 | + $("#date_fin").bind("change", function (event) { check_date_deb_inf_date_fin(); } ); | |
534 | + | |
536 | 535 | |
537 | 536 | /* |
538 | 537 | // 1 - Afficher la section PERIODICITE ou DATE selon le type suivi choisi |
... | ... | @@ -677,11 +676,12 @@ $(document).ready(function () { |
677 | 676 | * ************************* |
678 | 677 | */ |
679 | 678 | |
680 | -// EDIT only | |
681 | -// Vérification date début > date fin dans le cas d'une panne | |
679 | +// (EP 20200410) Vérification date début < date fin | |
680 | +function check_date_deb_inf_date_fin() { check_dates_d1_inf_d2("#date_deb", "#date_fin", "La date de début de prise en charge doit être antérieure à la date de fin"); } | |
681 | +/* | |
682 | 682 | function check_dates() { |
683 | - d1 = toDate($("#date_deb")[0].value); /* Date de la prise en charge de la panne */ | |
684 | - d2 = toDate($("#date_fin")[0].value); /* Date estimee de fin de la panne */ | |
683 | + d1 = toDate($("#date_deb")[0].value); // Date de la prise en charge de la panne | |
684 | + d2 = toDate($("#date_fin")[0].value); // Date estimee de fin de la panne | |
685 | 685 | if($("#date_fin")[0].value != undefined){ |
686 | 686 | if(d1 > d2) { |
687 | 687 | alert("Les dates ne correspondent pas, la date de début de prise en charge doit être antérieure à la date de fin."); |
... | ... | @@ -689,6 +689,7 @@ function check_dates() { |
689 | 689 | } |
690 | 690 | } |
691 | 691 | } |
692 | +*/ | |
692 | 693 | |
693 | 694 | // (metro) ADD only |
694 | 695 | function typedemesure() { | ... | ... |
src/Template/Suivis/view.ctp
webroot/js/DatepickerConfig.js
... | ... | @@ -4,11 +4,69 @@ |
4 | 4 | $(document).ready(function(){ |
5 | 5 | //$( "#datepicker" ).datepicker({ |
6 | 6 | $(".datepicker").datepicker({ |
7 | + | |
8 | + // on doit pouvoir changer le mois | |
7 | 9 | changeMonth: true, |
8 | - changeYear: true, | |
10 | + | |
11 | + // on doit pouvoir changer aussi l'année | |
12 | + changeYear: true, | |
13 | + | |
14 | + // afficher le numéro de semaine | |
9 | 15 | showWeek: true, |
10 | 16 | }); |
11 | -}); | |
17 | + | |
18 | + | |
19 | + /* Moved to script.js | |
20 | + // (EP 20200416) check de la saisie manuelle de TOUS les champs date type datepicker (class) | |
21 | + // Dès la perte du focus | |
22 | + //$("#datepicker").bind("change", function (event) { check_date_deb_inf_date_fin(); } ); | |
23 | + //$("#datepicker").bind("change", function (event) { | |
24 | + //$(".datepicker").bind("change", function (event) { | |
25 | + //$(".datepicker").blur(function(){ | |
26 | + $(".datepicker").on("change", function(event) { | |
27 | + // (EP) check format [J]J/[M]M/AAAA | |
28 | + //console.log("coucou"); | |
29 | + // format général | |
30 | + //if(this.value.match(/\d{1,2}[^\d]\d{1,2}[^\d]\d{4,4}/gi) == null) { | |
31 | + // (EP) check format [J]J/[M]M/[AA]AA | |
32 | + //if ( this.value.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2}|\d{4})$/) == null ) { | |
33 | + if (this.value == '') return true; | |
34 | + $error_msg = ''; | |
35 | + if ( this.value.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) == null ) | |
36 | + $error_msg = "Format de date invalide (doit être JJ/MM/AAAA)"; | |
37 | + // Check value : doit être une date valide | |
38 | + else { | |
39 | + //var t = this.value.split(/[^\d]/); | |
40 | + var t = this.value.split(/\//); | |
41 | + var dd = parseInt(t[0], 10); | |
42 | + var m0 = parseInt(t[1], 10) - 1; // Month in JavaScript Date object is 0-based | |
43 | + var yyyy = parseInt(t[2], 10); | |
44 | + // Si year sur 2 chiffres (AA), on passe à 4 (AAAA) | |
45 | + //if (yyyy < 100) yyyy = 2000 + yyyy | |
46 | + var d = new Date(yyyy, m0, dd); // new Date(2017, 13, 32) is still valid | |
47 | + //console.log(d.getFullYear()); | |
48 | + if(d.getDate() != dd || d.getMonth() != m0 || d.getFullYear() != yyyy) | |
49 | + $error_msg = "Date invalide"; | |
50 | + } | |
51 | + // Si erreur | |
52 | + if ($error_msg != '') { | |
53 | + this.value = ""; | |
54 | + alert($error_msg); | |
55 | + // On supprime la saisie invalide pour éviter qu'elle puisse être soumise (submit) | |
56 | + this.classList.add('error'); | |
57 | + // stopper un "submit" éventuel | |
58 | + //event.preventDefault(); | |
59 | + this.focus(); | |
60 | + } | |
61 | + else if (this.classList.contains('error')) this.classList.remove('error'); | |
62 | + }); | |
63 | + */ | |
64 | + | |
65 | + | |
66 | +}); // $(document).ready | |
67 | + | |
68 | + | |
69 | + | |
12 | 70 | //$(".datepicker").regional['fr'] = { |
13 | 71 | $.datepicker.regional['fr'] = { |
14 | 72 | closeText: 'Fermer', |
... | ... | @@ -21,10 +79,30 @@ $.datepicker.regional['fr'] = { |
21 | 79 | dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], |
22 | 80 | dayNamesMin: ['D','L','M','M','J','V','S'], |
23 | 81 | weekHeader: 'Sem.', |
24 | - dateFormat: 'dd-mm-yy', | |
82 | + // (20200410 EP change) | |
83 | + //dateFormat: 'dd-mm-yy', | |
84 | + dateFormat: 'dd/mm/yy', | |
25 | 85 | firstDay: 1, |
26 | 86 | isRTL: false, |
27 | 87 | showMonthAfterYear: false, |
28 | 88 | yearSuffix: '' |
29 | 89 | }; |
90 | + | |
30 | 91 | $.datepicker.setDefaults($.datepicker.regional['fr']); |
92 | + | |
93 | + | |
94 | + | |
95 | + | |
96 | + | |
97 | +/* | |
98 | +$("#datepicker").blur(function(){ | |
99 | + val = $(this).val(); | |
100 | + val1 = Date.parse(val); | |
101 | + if (isNaN(val1)==true && val!==''){ | |
102 | + alert("error") | |
103 | + } | |
104 | + else{ | |
105 | + console.log(val1); | |
106 | + } | |
107 | +}); | |
108 | +*/ | ... | ... |
webroot/js/Verifications_dates_materiels.js
... | ... | @@ -24,25 +24,36 @@ $(document).ready(function () { |
24 | 24 | * Event calcul date fin de garantie |
25 | 25 | */ |
26 | 26 | /* On formatte COMME IL FAUT les dates des formulaires */ |
27 | - /* EP deactivated, works but no more necessary ?*/ | |
27 | + /* (20200410) EP deactivated, works but no more necessary ? | |
28 | 28 | $('.datepicker').each(function(){ |
29 | 29 | this.value = this.value.replace(/\//g, "-"); |
30 | 30 | this.value = twoToFour(this.value); |
31 | 31 | }); |
32 | + */ | |
32 | 33 | |
33 | 34 | /* Puis si nécessaire on update la date de fin de gurantie au chargement de la page */ |
34 | 35 | if ($("#date-fin-garantie")[0].value != "") date_fin_garantie_update(); |
36 | + | |
37 | + /* | |
38 | + * Vérification date réception > date aquisition | |
39 | + */ | |
40 | + $("#date-acquisition").change( function (event) { | |
41 | + check_date_acq_inf_date_rec(); | |
42 | + } | |
43 | + ); | |
44 | + //$("#date-reception").change (function (event) { check_date_acq_inf_date_rec(); } ); | |
45 | + /* | |
46 | + $("#date-acquisition").blur( function (event) { check_date_acq_inf_date_rec(); } ); | |
47 | + $("#date-reception").blur( function (event) { check_date_acq_inf_date_rec(); } ); | |
48 | + */ | |
35 | 49 | |
36 | 50 | /* Et enfin les events purs */ |
37 | 51 | /* |
38 | 52 | $("#date-reception").change( |
39 | - function(event) { date_fin_garantie_update(); } | |
40 | - ); | |
41 | - */ | |
42 | - $("#date-reception").change( | |
43 | - function(event) { | |
53 | + function(event) { | |
44 | 54 | if(!checkDate(this.value)) { |
45 | - alert("Les dates doivent être de la forme dd-mm-YYYY"); | |
55 | + //alert("Les dates doivent être de la forme dd-mm-YYYY"); | |
56 | + alert("Les dates doivent être de la forme dd/mm/YYYY"); | |
46 | 57 | event.preventDefault(); |
47 | 58 | } |
48 | 59 | else { |
... | ... | @@ -50,86 +61,175 @@ $(document).ready(function () { |
50 | 61 | } |
51 | 62 | } |
52 | 63 | ); |
53 | - $("#duree-garantie").bind("change", function(event) { date_fin_garantie_update(); }); | |
54 | - $("#unite-duree-garantie").bind("change", function(event) { date_fin_garantie_update(); }); | |
55 | - /*$("#date-fin-garantie").bind("change", function(event) { $("#duree-garantie")[0].value = "" });*/ | |
56 | - $("#date-fin-garantie").change( | |
57 | - function(event) { | |
58 | - if(!checkDate(this.value)) { | |
59 | - alert("Les dates doivent être de la forme dd-mm-YYYY"); | |
60 | - event.preventDefault(); | |
61 | - } | |
62 | - else { | |
63 | - $("#duree-garantie")[0].value = ""; | |
64 | - } | |
65 | - } | |
66 | - ); | |
64 | + */ | |
65 | + | |
66 | + $("#date-reception").change( function(event) { | |
67 | + if ( (this.value =='') || (!checkDate(this)) || (!check_date_acq_inf_date_rec()) ) { | |
68 | + if (this.value =='') $(this).removeClass('error'); | |
69 | + //$("#duree-garantie")[0].value = ""; | |
70 | + $("#date-fin-garantie")[0].value = ""; | |
71 | + return true; | |
72 | + } | |
73 | + date_fin_garantie_update(); | |
74 | + }); | |
75 | + | |
76 | + $("#duree-garantie").change( function(event) { | |
77 | + if (this.value =='') | |
78 | + $("#date-fin-garantie")[0].value = ""; | |
79 | + else { | |
80 | + date_fin_garantie_update(); | |
81 | + $("#date-fin-garantie").removeClass('error'); | |
82 | + $("#date-reception").removeClass('error'); | |
83 | + } | |
84 | + //if ( this.val() != '' && checkDate(this.value) ) {date_fin_garantie_update();} | |
85 | + }); | |
86 | + //$("#duree-garantie").bind("change", function(event) { date_fin_garantie_update(); }); | |
87 | + //$("#duree-garantie").change( function(event) { date_fin_garantie_update(); } ); | |
67 | 88 | |
89 | + //$("#unite-duree-garantie").bind("change", function(event) { date_fin_garantie_update(); }); | |
90 | + $("#unite-duree-garantie").change( function(event) { | |
91 | + date_fin_garantie_update(); | |
92 | + }); | |
93 | + | |
94 | + $("#date-fin-garantie").change( function(event) { | |
95 | + if (this.value =='') { | |
96 | + // ne pas laisser supprimer la date garantie si elle peut etre calculée | |
97 | + date_fin_garantie_update(); | |
98 | + return; | |
99 | + } | |
100 | + if ( checkDate(this) ) | |
101 | + check_date_rec_inf_date_gar(); | |
102 | + // on a saisi une date manuellement, donc on supprime la durée de garantie choisie avant | |
103 | + $("#duree-garantie")[0].value = ""; | |
104 | + }); | |
105 | + | |
106 | + | |
107 | + | |
108 | + | |
109 | + | |
68 | 110 | /** |
69 | - * Event - à la validation, on vérifie les dates | |
111 | + * On SUBMIT : | |
112 | + * A LA VALIDATION (on submit) => on vérifie les dates qui restent encore invalides | |
113 | + * pour éviter de soumettre des dates invalides | |
114 | + * (malgré les alertes déjà données ci-dessus !!!) | |
70 | 115 | */ |
71 | - $( ".form" ).submit(function( event ) { | |
116 | + $(".form").submit( function(event) { | |
117 | + | |
118 | + /* | |
119 | + // 1) On vérifie chaque date | |
120 | + $('.datepicker').each( function() { | |
121 | + if ( this.value!="" && !checkDate(this.value) ) { | |
122 | + alert("Les dates doivent être de la forme JJ/MM/AAAA"); | |
123 | + this.focus(); | |
124 | + event.preventDefault(); | |
125 | + return; | |
126 | + } | |
127 | + }); | |
128 | + */ | |
129 | + | |
130 | + // 2) On applique les règles de gestion sur les dates | |
131 | + if (!check_date_acq_inf_date_rec() || !check_date_rec_inf_date_gar()) | |
132 | + event.preventDefault(); | |
133 | + /* | |
134 | + // On simule un changement de chaque date pour déclencher les vérifications de cohérence de dates | |
135 | + $('.datepicker').each( function(){ | |
136 | + if (this.id != "date-fin-garantie") { | |
137 | + //console.log(this.id); | |
138 | + $(this).change(); | |
139 | + } | |
140 | + }); | |
141 | + */ | |
142 | + //event.preventDefault(); | |
143 | + }); // On SUBMIT | |
144 | + | |
145 | + | |
146 | + /* | |
72 | 147 | s1 = $("#date-acquisition")[0].value; |
73 | 148 | s2 = $("#date-reception")[0].value; |
74 | 149 | s3 = $("#date-fin-garantie")[0].value; |
75 | -// if () { | |
76 | -// alert("Les dates doivent être de la forme dd-mm-YYYY"); | |
77 | -// event.preventDefault(); | |
78 | -// } | |
150 | + //if () | |
151 | + // alert("Les dates doivent être de la forme dd-mm-YYYY"); | |
152 | + // event.preventDefault(); | |
153 | + //} | |
79 | 154 | |
80 | - /* EP deactivated, works but no more necessary | |
81 | - $bool = false; | |
155 | + $bool = true; // pour faire un "break" si bool = true | |
82 | 156 | $('.datepicker').each(function(){ |
83 | - if(this.value != "" && $bool == false) { | |
84 | - console.log(this.value); | |
85 | - if(!checkDate(this.value)){ | |
86 | - $bool = true; | |
87 | - alert("Les dates doivent être de la forme dd-mm-YYYY"); | |
157 | + if ($bool==true && this.value != "") { | |
158 | + //console.log(this.value); | |
159 | + if (!checkDate(this.value)) { | |
160 | + $bool = false; | |
161 | + alert("Les dates doivent être de la forme JJ/MM/AAAA"); | |
88 | 162 | event.preventDefault(); |
89 | 163 | } |
90 | 164 | } |
91 | 165 | }); |
92 | - */ | |
93 | 166 | |
94 | - d1 = toDate($("#date-acquisition")[0].value); /* Date de la commande */ | |
95 | - d2 = toDate($("#date-reception")[0].value); /* Date de réception */ | |
96 | - d3 = toDate($("#date-fin-garantie")[0].value); /* Date fin de garantie */ | |
167 | + d1 = toDate($("#date-acquisition")[0].value); // Date de la commande | |
168 | + d2 = toDate($("#date-reception")[0].value); // Date de réception | |
169 | + d3 = toDate($("#date-fin-garantie")[0].value); // Date fin de garantie | |
97 | 170 | |
98 | - /* EP deactivated, works but no more necessary | |
171 | + check_date_acq_inf_date_rec(); | |
172 | + /S | |
99 | 173 | if($("#date-reception")[0].value != undefined){ |
100 | 174 | if(d1 > d2) { |
101 | 175 | alert("Les dates ne correspondent pas, la date de réception doit être supérieure à la date de commande."); |
102 | 176 | event.preventDefault(); |
103 | 177 | } |
104 | 178 | } |
105 | - */ | |
179 | + S/ | |
106 | 180 | |
181 | + check_date_rec_inf_date_gar(); | |
182 | + /S | |
107 | 183 | if($("#date-reception")[0].value != undefined){ |
108 | 184 | if(d2 > d3) { |
109 | 185 | alert("Les dates ne correspondent pas, la date de fin de garantie doit être supérieure à la date de réception."); |
110 | 186 | event.preventDefault(); |
111 | 187 | } |
112 | 188 | } |
113 | - | |
114 | - }); /* On SUBMIT */ | |
115 | -}); | |
189 | + S/ | |
190 | + }); // On SUBMIT | |
191 | + */ | |
192 | + | |
193 | + | |
194 | + | |
195 | +}); // $(document).ready | |
196 | + | |
197 | + | |
198 | + | |
199 | + | |
200 | + | |
201 | + | |
116 | 202 | |
117 | 203 | /** |
118 | - * Fonction qui vérifie que la date en parametre soit bien au format dd-mm-YYYY ou d-m-YYYY | |
204 | + * ************************ | |
205 | + * FONCTIONS | |
206 | + * ************************ | |
119 | 207 | */ |
120 | -function checkDate(str) { | |
121 | - //return str.match(/^(\d{1,2})-(\d{1,2})-(\d{4})$/); | |
122 | - return str.match(/^(\d{2})-(\d{2})-(\d{4})$/); | |
208 | + | |
209 | + | |
210 | +// (EP 20200410) Vérification date cde <= date réception | |
211 | +function check_date_acq_inf_date_rec() { | |
212 | + return check_dates_d1_inf_d2("#date-acquisition", "#date-reception", "La date de réception doit être postérieure à la date d'acquisition"); | |
213 | +} | |
214 | + | |
215 | +//(EP 20200410) Vérification date rec <= date garantie | |
216 | +function check_date_rec_inf_date_gar() { | |
217 | + return check_dates_d1_inf_d2("#date-reception", "#date-fin-garantie", "La date de fin de garantie doit être supérieure à la date de réception"); | |
123 | 218 | } |
124 | 219 | |
220 | + | |
125 | 221 | /** |
126 | 222 | * Fonction qui passe l'année de deux à quatres chiffres |
127 | 223 | */ |
128 | 224 | function twoToFour(str) { |
129 | - if (str.match(/^(\d{1,2})-(\d{1,2})-(\d{2})$/)) { | |
130 | - tabStr = str.split("-"); | |
225 | + // (20200410 version dd-mm-yy => remplacée par dd/mm/yy) | |
226 | + //var sep = '-'; | |
227 | + var sep = '/'; | |
228 | + //if (str.match(/^(\d{1,2})-(\d{1,2})-(\d{2})$/)) { | |
229 | + if (str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2})$/)) { | |
230 | + tabStr = str.split(sep); | |
131 | 231 | tabStr[2] = "20"+tabStr[2]; |
132 | - str = tabStr[0]+"-"+tabStr[1]+"-"+tabStr[2]; | |
232 | + str = tabStr[0]+sep+tabStr[1]+sep+tabStr[2]; | |
133 | 233 | } |
134 | 234 | return str; |
135 | 235 | } |
... | ... | @@ -138,17 +238,19 @@ function twoToFour(str) { |
138 | 238 | * Fonction de mise à jour de la date de fin de guarantie |
139 | 239 | */ |
140 | 240 | function date_fin_garantie_update() { |
141 | - if ($("#date-reception").val() != "" && $("#duree-garantie").val() != "") { | |
241 | + //if ($("#date-reception").val() != "" && $("#duree-garantie").val() != "") { | |
242 | + if ($("#date-reception").value != "" && $("#duree-garantie").value != "") { | |
142 | 243 | /* EP added this : |
143 | 244 | $('.datepicker').each(function(){ |
144 | 245 | this.value = this.value.replace(/\//g, "-"); |
145 | 246 | this.value = twoToFour(this.value); |
146 | 247 | }); |
147 | 248 | */ |
249 | + /* | |
148 | 250 | $("#date-reception").each(function(){ |
149 | 251 | this.value = twoToFour(this.value); |
150 | 252 | }); |
151 | - | |
253 | + */ | |
152 | 254 | var url = document.URL; |
153 | 255 | var reg = new RegExp("(materiels).*$", "g"); |
154 | 256 | var dateUrl = url.replace(reg, "Materiels/getDateGarantie/"); | ... | ... |
webroot/js/script.js
1 | +/* *********************************** | |
2 | + * ******** document.ready() ********* | |
3 | + * *********************************** | |
4 | + */ | |
5 | + | |
6 | + | |
7 | +// Gestion des sections qu'on peut afficher ou masquer | |
8 | +$(document).ready(function() { | |
9 | + | |
10 | + | |
11 | + $('.toggle').click(function() { | |
12 | + // ex: '#t_informations' devient '#informations' | |
13 | + var newid = '#' + this.id.substr(2); | |
14 | + //console.log(newid); | |
15 | + $(newid).toggle('fast'); | |
16 | + toogleChevron('#i_'+newid); | |
17 | + }); | |
18 | + | |
19 | + // Page index de matériel (et de configurations) | |
20 | + | |
21 | + /* | |
22 | + $('#t_informations').click(function() { | |
23 | + $('#informations').toggle('fast'); | |
24 | + toogleChevron('#i_informations'); | |
25 | + }); | |
26 | + $('#t_informations_admin').click(function() { | |
27 | + $('#informations_admin').toggle('fast'); | |
28 | + toogleChevron('#i_informations_admin'); | |
29 | + }); | |
30 | + */ | |
31 | + $('#t_suivis').click(function() { | |
32 | + $('#suivis').toggle('fast'); | |
33 | + toogleChevron('#i_suivis'); | |
34 | + }); | |
35 | + $('#t_emprunts').click(function() { | |
36 | + $('#emprunts').toggle('fast'); | |
37 | + toogleChevron('#i_emprunts'); | |
38 | + }); | |
39 | + $('#t_fichiers').click(function() { | |
40 | + $('#fichiers').toggle('fast'); | |
41 | + toogleChevron('#i_fichiers'); | |
42 | + }); | |
43 | + | |
44 | + | |
45 | + // Page Configurations only | |
46 | + | |
47 | + $('#t_affichage').click(function() { | |
48 | + $('#affichage').toggle('fast'); | |
49 | + toogleChevron('#i_affichage'); | |
50 | + }); | |
51 | + | |
52 | + | |
53 | + // Page find de matériel | |
54 | + | |
55 | + $('#t_filter').click(function() { | |
56 | + $('#filter').toggle('fast'); | |
57 | + toogleChevron('#i_filter'); | |
58 | + }); | |
59 | + $('#t_result').click(function() { | |
60 | + $('#result').toggle('fast'); | |
61 | + toogleChevron('#i_result'); | |
62 | + }); | |
63 | + | |
64 | + | |
65 | + | |
66 | + | |
67 | + /* (EP 20200416) | |
68 | + * ON change => Check de la saisie manuelle de TOUS les champs date (avec datepicker class) | |
69 | + */ | |
70 | + //$("#datepicker").bind("change", function (event) { check_date_deb_inf_date_fin(); } ); | |
71 | + //$("#datepicker").bind("change", function (event) { | |
72 | + //$(".datepicker").bind("change", function (event) { | |
73 | + //$(".datepicker").blur(function(){ | |
74 | + //$(".datepicker").on("change", function(event) { | |
75 | + $(".datepicker").change( function(event) { | |
76 | + checkDate(this); | |
77 | + }); | |
78 | + | |
79 | + | |
80 | + | |
81 | + | |
82 | +}); // $(document).ready | |
83 | + | |
84 | + | |
85 | + | |
86 | + | |
87 | + | |
88 | +/* **************************** | |
89 | + * ******** FUNCTIONS ********* | |
90 | + * **************************** | |
91 | + */ | |
92 | + | |
93 | + | |
1 | 94 | /** |
2 | 95 | * empty a SELECT field given its name and default option |
3 | 96 | * call example : emptySelectOptions("#MaterielSousCategorieId","Choisir une sous-catégorie") |
... | ... | @@ -51,54 +144,6 @@ function updateSelectOptionsFromAnother(selectId, otherSelectId, requestName, em |
51 | 144 | }); |
52 | 145 | } |
53 | 146 | |
54 | -// Gestion des sections qu'on peut afficher ou masquer | |
55 | -$(document).ready(function() { | |
56 | - | |
57 | - | |
58 | - // Page index de matériel (et de configurations) | |
59 | - | |
60 | - $('#t_informations').click(function() { | |
61 | - $('#informations').toggle('fast'); | |
62 | - toogleChevron('#i_informations'); | |
63 | - }); | |
64 | - $('#t_informations_admin').click(function() { | |
65 | - $('#informations_admin').toggle('fast'); | |
66 | - toogleChevron('#i_informations_admin'); | |
67 | - }); | |
68 | - $('#t_suivis').click(function() { | |
69 | - $('#suivis').toggle('fast'); | |
70 | - toogleChevron('#i_suivis'); | |
71 | - }); | |
72 | - $('#t_emprunts').click(function() { | |
73 | - $('#emprunts').toggle('fast'); | |
74 | - toogleChevron('#i_emprunts'); | |
75 | - }); | |
76 | - $('#t_fichiers').click(function() { | |
77 | - $('#fichiers').toggle('fast'); | |
78 | - toogleChevron('#i_fichiers'); | |
79 | - }); | |
80 | - | |
81 | - | |
82 | - // Page Configurations only | |
83 | - | |
84 | - $('#t_affichage').click(function() { | |
85 | - $('#affichage').toggle('fast'); | |
86 | - toogleChevron('#i_affichage'); | |
87 | - }); | |
88 | - | |
89 | - | |
90 | - // Page find de matériel | |
91 | - | |
92 | - $('#t_filter').click(function() { | |
93 | - $('#filter').toggle('fast'); | |
94 | - toogleChevron('#i_filter'); | |
95 | - }); | |
96 | - $('#t_result').click(function() { | |
97 | - $('#result').toggle('fast'); | |
98 | - toogleChevron('#i_result'); | |
99 | - }); | |
100 | - | |
101 | -}); | |
102 | 147 | |
103 | 148 | function toogleChevron(element) { |
104 | 149 | if ($(element).hasClass('icon-chevron-down')) { |
... | ... | @@ -142,11 +187,12 @@ function selectNone() { |
142 | 187 | |
143 | 188 | |
144 | 189 | /** |
145 | -* Fonction qui transforme la chaine de format dd-mm-YYYY en date js pour pouvoir être comparée par la suite | |
146 | -* (EP) Utilisée dans add_edit.ctp de Materiels (dans verifications_dates_materiels.js) et dans add_edit.ctp de Suivis | |
190 | +* Fonction qui transforme la chaine de format dd/mm/YYYY en date js pour pouvoir être comparée par la suite | |
191 | +* (EP 20200409) Utilisée dans add_edit.ctp de Materiels (dans verifications_dates_materiels.js) et dans add_edit.ctp de Suivis | |
147 | 192 | */ |
148 | 193 | function toDate(str) { |
149 | - var DateString = str.split("-"); | |
194 | + //var DateString = str.split("-"); | |
195 | + var DateString = str.split("/"); | |
150 | 196 | return new Date(parseInt(DateString[2]), parseInt(DateString[1]) + 1, parseInt(DateString[0]), 12, 00, 00); |
151 | 197 | /* new Date(YYYY, mm+1, dd, 12, 00, 00) |
152 | 198 | Le +1 du mois est nécessaire car les mois commencent à 0 en JS |
... | ... | @@ -155,6 +201,138 @@ function toDate(str) { |
155 | 201 | */ |
156 | 202 | } |
157 | 203 | |
204 | + | |
205 | +/** | |
206 | + * Fonction qui vérifie que la date en parametre soit bien au format [d]d/[m]m/YYYY | |
207 | + */ | |
208 | +function checkDate_basic(str) { | |
209 | + // (EP 20200410 version [d]d/[m]m/yyyy au lieu de dd-mm-yy) | |
210 | + return (str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) != null); | |
211 | + //if (str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) ) console.log("yes"); | |
212 | + //return str.match(/^(\d{1,2})-(\d{1,2})-(\d{4})$/); | |
213 | + //return str.match(/^(\d{2})-(\d{2})-(\d{4})$/); | |
214 | + //return str.match(/^(\d{2})\/(\d{2})\/(\d{2})$/); | |
215 | + //return str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/); | |
216 | +} | |
217 | + | |
218 | +function checkDate(field) { | |
219 | + // (EP) check format [J]J/[M]M/AAAA | |
220 | + //console.log("coucou"); | |
221 | + // format général | |
222 | + //if(this.value.match(/\d{1,2}[^\d]\d{1,2}[^\d]\d{4,4}/gi) == null) { | |
223 | + // (EP) check format [J]J/[M]M/[AA]AA | |
224 | + //if ( this.value.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2}|\d{4})$/) == null ) { | |
225 | + var val = field.value; | |
226 | + if (val == '') return true; | |
227 | + $error_msg = ''; | |
228 | + if ( val.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) == null ) | |
229 | + $error_msg = "Format de date invalide (doit être JJ/MM/AAAA)"; | |
230 | + // Check value : doit être une date valide | |
231 | + else { | |
232 | + //var t = this.value.split(/[^\d]/); | |
233 | + var t = val.split(/\//); | |
234 | + var dd = parseInt(t[0], 10); | |
235 | + var m0 = parseInt(t[1], 10) - 1; // Month in JavaScript Date object is 0-based | |
236 | + var yyyy = parseInt(t[2], 10); | |
237 | + // Si year sur 2 chiffres (AA), on passe à 4 (AAAA) | |
238 | + //if (yyyy < 100) yyyy = 2000 + yyyy | |
239 | + var d = new Date(yyyy, m0, dd); // new Date(2017, 13, 32) is still valid | |
240 | + //console.log(d.getFullYear()); | |
241 | + if(d.getDate() != dd || d.getMonth() != m0 || d.getFullYear() != yyyy) | |
242 | + $error_msg = "Date invalide"; | |
243 | + } | |
244 | + // Si erreur | |
245 | + if ($error_msg != '') { | |
246 | + field.value = ""; | |
247 | + //field.val(""); | |
248 | + alert($error_msg); | |
249 | + // On supprime la saisie invalide pour éviter qu'elle puisse être soumise (submit) | |
250 | + field.classList.add('error'); | |
251 | + // stopper un "submit" éventuel | |
252 | + //event.preventDefault(); | |
253 | + field.focus(); | |
254 | + return false; | |
255 | + } | |
256 | + if (field.classList.contains('error')) | |
257 | + field.classList.remove('error'); | |
258 | + return true; | |
259 | +} | |
260 | + | |
261 | +/* | |
262 | +// avec this | |
263 | +function checkDate(date_field) { | |
264 | + // (EP) check format [J]J/[M]M/AAAA | |
265 | + //console.log("coucou"); | |
266 | + // format général | |
267 | + //if(this.value.match(/\d{1,2}[^\d]\d{1,2}[^\d]\d{4,4}/gi) == null) { | |
268 | + // (EP) check format [J]J/[M]M/[AA]AA | |
269 | + //if ( this.value.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2}|\d{4})$/) == null ) { | |
270 | + if (this.value == '') return true; | |
271 | + $error_msg = ''; | |
272 | + if ( this.value.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) == null ) | |
273 | + $error_msg = "Format de date invalide (doit être JJ/MM/AAAA)"; | |
274 | + // Check value : doit être une date valide | |
275 | + else { | |
276 | + //var t = this.value.split(/[^\d]/); | |
277 | + var t = this.value.split(/\//); | |
278 | + var dd = parseInt(t[0], 10); | |
279 | + var m0 = parseInt(t[1], 10) - 1; // Month in JavaScript Date object is 0-based | |
280 | + var yyyy = parseInt(t[2], 10); | |
281 | + // Si year sur 2 chiffres (AA), on passe à 4 (AAAA) | |
282 | + //if (yyyy < 100) yyyy = 2000 + yyyy | |
283 | + var d = new Date(yyyy, m0, dd); // new Date(2017, 13, 32) is still valid | |
284 | + //console.log(d.getFullYear()); | |
285 | + if(d.getDate() != dd || d.getMonth() != m0 || d.getFullYear() != yyyy) | |
286 | + $error_msg = "Date invalide"; | |
287 | + } | |
288 | + // Si erreur | |
289 | + if ($error_msg != '') { | |
290 | + this.value = ""; | |
291 | + alert($error_msg); | |
292 | + // On supprime la saisie invalide pour éviter qu'elle puisse être soumise (submit) | |
293 | + this.classList.add('error'); | |
294 | + // stopper un "submit" éventuel | |
295 | + //event.preventDefault(); | |
296 | + this.focus(); | |
297 | + } | |
298 | + else if (this.classList.contains('error')) this.classList.remove('error'); | |
299 | +} | |
300 | +*/ | |
301 | + | |
302 | + | |
303 | + | |
304 | + | |
305 | +//(EP 20200410) Vérification dates d1 <= d2 | |
306 | +function check_dates_d1_inf_d2(d1,d2,error_msg) { | |
307 | + /* | |
308 | + d1 = $("#date-acquisition")[0].value; | |
309 | + d2 = $("#date-reception")[0].value; | |
310 | + */ | |
311 | + //d1elem = document.querySelector(d1); | |
312 | + //console.log(d1elem.classList); | |
313 | + d1val = $(d1)[0].value; | |
314 | + d2val = $(d2)[0].value; | |
315 | + //console.log(d2val); | |
316 | + if(d1val != undefined && d2val != undefined) { | |
317 | + d1date = toDate(d1val); | |
318 | + d2date = toDate(d2val); | |
319 | + if (d1date > d2date) { | |
320 | + //d1elem.classList.add('error'); | |
321 | + //event.preventDefault(); | |
322 | + alert(error_msg); | |
323 | + $(d1).addClass('error'); | |
324 | + $(d2).addClass('error'); | |
325 | + $(d2).focus(); | |
326 | + return false; | |
327 | + } | |
328 | + } | |
329 | + $(d1).removeClass('error'); | |
330 | + $(d2).removeClass('error'); | |
331 | + return true; | |
332 | +} | |
333 | + | |
334 | + | |
335 | + | |
158 | 336 | /*Je ne saurais expliquer pourquoi mais cela ne fonctionne pas si les modifications sont faites directement dans ce fichier |
159 | 337 | |
160 | 338 | ... | ... |