Commit 6d9f05b7eed38cb2594cb73961025f7ef8f5ee85

Authored by Etienne Pallier
1 parent 07ffc697
Exists in master and in 1 other branch dev

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)
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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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 &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $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&#39;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 = &#39;&#39;;
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 == &#39;Super Administrateur&#39;) {
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 == &#39;Super Administrateur&#39;) {
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 == &#39;Super Administrateur&#39;) {
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 == &#39;Super Administrateur&#39;) {
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 == &#39;Super Administrateur&#39;) {
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 == &#39;Super Administrateur&#39;) {
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 == &#39;Super Administrateur&#39;) {
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 == &#39;Super Administrateur&#39;) {
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
... ... @@ -10,9 +10,9 @@ $role = $role;
10 10 $priviledgedUser = $priviledgedUser;
11 11 // functions
12 12 $printTableRow = $printTableRow;
  13 +debug($suivi);
13 14 /*
14 15 debug($suivi->nom_createur);
15   -debug($suivi);
16 16 debug($username);
17 17 */
18 18 ?>
... ...
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[&#39;fr&#39;] = {
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  
... ...