Commit 9111dd94ce9647a42bb91c0a5f8f6c35fedcc580
1 parent
3f90ea0b
Exists in
master
and in
1 other branch
MATERIELS : GROSSE amélioration pour le fournisseur (3.7.9.13)
Le fournisseur est toujours en BD mais il est automatiquement ajouté si on en saisit un nouveau Ca corrige aussi automatiquement si espaces en trop, y-compris les anciens déjà saisis !!!
Showing
4 changed files
with
154 additions
and
15 deletions
Show diff stats
README.md
... | ... | @@ -53,12 +53,13 @@ Logiciel testé et validé sur les configurations suivantes : |
53 | 53 | |
54 | 54 | VERSION ACTUELLE |
55 | 55 | |
56 | -Date: 31/03/2020 | |
57 | -Version: 3.7.9.12 | |
56 | +Date: 01/04/2020 | |
57 | +Version: 3.7.9.13 | |
58 | 58 | Author: EP |
59 | 59 | Commentaire: |
60 | - MATERIELS : Amélioration et Bugfixes par refactorisation des vues add et edit en 1 seule add_edit | |
61 | - + Ajout de fournisseur possible | |
60 | + MATERIELS : GROSSE amélioration pour le fournisseur | |
61 | + (le fournisseur est toujours en BD mais il est automatiquement ajouté si on en saisit un nouveau) | |
62 | + (ça corrige aussi automatiquement si espaces en trop, y-compris les anciens déjà saisis !!!) | |
62 | 63 | |
63 | 64 | IMPORTANT : |
64 | 65 | - Pour connaitre la version actuelle, taper "./VERSION" |
... | ... | @@ -93,6 +94,10 @@ La liste ci-dessous n'est plus à jour, elle est désormais en ligne ici : https |
93 | 94 | |
94 | 95 | ----------------------------------------------------------------------------------------------------------- |
95 | 96 | |
97 | +31/03/2020 Version 3.7.9.12 (EP) | |
98 | + MATERIELS : Amélioration et Bugfixes par refactorisation des vues add et edit en 1 seule add_edit | |
99 | + + Ajout de fournisseur possible | |
100 | + | |
96 | 101 | 27/03/2020 Version 3.7.9.11 (EP) |
97 | 102 | Amélioration et Bugfixes de Emprunts, Suivis, et Docs attachés |
98 | 103 | ... | ... |
src/Controller/MaterielsController.php
... | ... | @@ -1012,7 +1012,7 @@ class MaterielsController extends AppController |
1012 | 1012 | * Les données ont été saisies et postées |
1013 | 1013 | * On va donc les sauvegarder |
1014 | 1014 | */ |
1015 | - if ( | |
1015 | + if ( $this->request->is(['post','patch','put']) ) { | |
1016 | 1016 | |
1017 | 1017 | /* |
1018 | 1018 | // ADD |
... | ... | @@ -1025,12 +1025,11 @@ class MaterielsController extends AppController |
1025 | 1025 | // materiel modifié et posted |
1026 | 1026 | ( (!$is_add) && $this->request->is(['patch','post','put']) ) |
1027 | 1027 | */ |
1028 | - ( $this->request->is(['post','patch','put']) ) | |
1029 | 1028 | |
1030 | - ) { | |
1031 | - | |
1032 | - // (1) On rempli $materiel avec les données de ce materiel | |
1029 | + // (1) On remplit $materiel avec les données de ce materiel | |
1033 | 1030 | $materiel = $this->Materiels->patchEntity($materiel, $this->request->getData()); |
1031 | + //debug($materiel); | |
1032 | + //exit; | |
1034 | 1033 | |
1035 | 1034 | // (2) Si l'utilisateur courant est un "administratif" => le mettre comme gestionnaire du materiel |
1036 | 1035 | // (tout ça pour ça !!! Faudra réduire ce bazar) | ... | ... |
src/Model/Table/MaterielsTable.php
... | ... | @@ -190,12 +190,14 @@ class MaterielsTable extends AppTable |
190 | 190 | 'message' => 'La date n\'est pas valide' |
191 | 191 | ]); |
192 | 192 | } |
193 | + /* | |
193 | 194 | // Attention, configuration désactivée, cela ne génère pas ne num de labo, voir dans config/edit.ctp |
194 | 195 | $validator->allowEmpty('fournisseur')->add('fournisseur', 'valid', [ |
195 | 196 | 'rule' => 'check_string', |
196 | 197 | 'message' => 'Ce champ contient des caractères interdits', |
197 | 198 | 'provider' => 'table' |
198 | 199 | ]); |
200 | + */ | |
199 | 201 | $validator->numeric('prix_ht') |
200 | 202 | ->allowEmpty('prix_ht') |
201 | 203 | ->add('prix_ht', 'valid', [ |
... | ... | @@ -325,6 +327,10 @@ class MaterielsTable extends AppTable |
325 | 327 | 'errorField' => 'materiel_administratif', |
326 | 328 | 'message' => 'Le matériel est obligatoirement inventoriable ou technique.' |
327 | 329 | ]); |
330 | + $rules->add($checkAtLeastOneChecked, [ | |
331 | + 'errorField' => 'materiel_technique', | |
332 | + 'message' => 'Le matériel est obligatoirement inventoriable ou technique.' | |
333 | + ]); | |
328 | 334 | $rules->add($checkIfIsAdministratifWhenShouldBe, [ |
329 | 335 | 'errorField' => 'materiel_administratif', |
330 | 336 | 'message' => 'Le matériel vaut plus de ' . $configuration->prix_inventaire_administratif . '€ HT, il est donc obligatoirement inventoriable.' |
... | ... | @@ -338,10 +344,10 @@ class MaterielsTable extends AppTable |
338 | 344 | 'message' => 'Le matériel ne peut pas être inventoriable et ne pas avoir de prix' |
339 | 345 | ]); |
340 | 346 | |
341 | - | |
342 | 347 | $rules->add($rules->isUnique([ |
343 | 348 | 'numero_laboratoire' |
344 | 349 | ])); |
350 | + | |
345 | 351 | $rules->add($rules->existsIn([ |
346 | 352 | 'sur_categorie_id' |
347 | 353 | ], 'SurCategories')); |
... | ... | @@ -366,7 +372,7 @@ class MaterielsTable extends AppTable |
366 | 372 | // 14/1/19 bake autoadded: |
367 | 373 | //$rules->add($rules->existsIn(['gestionnaire_id'], 'Gestionnaires')); |
368 | 374 | //$rules->add($rules->existsIn(['photo_id'], 'Photos')); |
369 | - $rules->add($rules->existsIn(['fournisseur_id'], 'Fournisseurs')); | |
375 | + ///$rules->add($rules->existsIn(['fournisseur_id'], 'Fournisseurs')); | |
370 | 376 | |
371 | 377 | return $rules; |
372 | 378 | } |
... | ... | @@ -439,6 +445,96 @@ class MaterielsTable extends AppTable |
439 | 445 | if (empty($entity->get('date_reception'))) { |
440 | 446 | $entity->set('date_reception', null); |
441 | 447 | } |
448 | + | |
449 | + /* Traitement du fournisseur (SSI sa valeur a changé) | |
450 | + * | |
451 | + * On récupère le NOM du fournisseur saisi dans le champ appelé fournisseur.name (en php) | |
452 | + * En Html ça correspond à fournisseur['name'] | |
453 | + * Si saisie vide => mettre à nul | |
454 | + * Sinon, chercher le fournisseur_id correspondant à ce nom | |
455 | + * Si id trouvé => fournisseur_id = cet id | |
456 | + * Sinon, créer un nouveau fournisseur avec ce nom | |
457 | + debug($entity->fournisseur['name']); | |
458 | + exit; | |
459 | + */ | |
460 | + //debug($entity); exit; | |
461 | + $fournisseur_asis = $entity->fournisseur['name']; | |
462 | + // Enlever les espaces superflus | |
463 | + $fournisseur = trim($fournisseur_asis); | |
464 | + // L'utilisateur a changé le fournisseur ou alors lui a enlevé des espaces ? | |
465 | + // => on traite ce changement | |
466 | + if ($fournisseur_asis != $entity->fournisseur_orig) { | |
467 | + // champ fournisseur vide => mettre à nul | |
468 | + if ($fournisseur == '') | |
469 | + $entity->fournisseur_id = null; | |
470 | + //TODO: maj min | |
471 | + // pas vide => on récupère l'id de ce fournisseur (s'il existe)... | |
472 | + else { | |
473 | + $fournisseurs = TableRegistry::getTableLocator()->get('Fournisseurs'); | |
474 | + $fournisseur_existant = $fournisseurs->find() | |
475 | + ->where([ | |
476 | + // marche pas, obligé d'utiliser orWhere !!!!!! | |
477 | + //'OR' => ['nom' => $fournisseur_asis, 'nom' => $fournisseur] | |
478 | + 'nom in' => [$fournisseur_asis, $fournisseur] | |
479 | + //'nom' => $fournisseur_asis, | |
480 | + ]) | |
481 | + /* | |
482 | + ->orWhere([ | |
483 | + //'OR' => ['nom' => $fournisseur_asis, 'nom' => $fournisseur] | |
484 | + 'nom' => $fournisseur | |
485 | + ]) | |
486 | + */ | |
487 | + ->first(); | |
488 | + // Fournisseur changé ? (vrai changement de fournisseur, c'est à dire "autre fournisseur") | |
489 | + if ( $fournisseur != trim($entity->fournisseur_orig) ) { | |
490 | + // C'est un fournisseur déjà existant ? => positionner son id | |
491 | + if ($fournisseur_existant) { | |
492 | + //debug('changement'); exit; | |
493 | + $entity->fournisseur_id = $fournisseur_existant->id; | |
494 | + } | |
495 | + // NEW fournisseur | |
496 | + else { | |
497 | + //debug('NEW fourn'); exit; | |
498 | + /* | |
499 | + // Est-ce que ce NEW fournisseur n'existe pas déjà en fait, mais avec des espaces avant ou après ? | |
500 | + $fournisseur_existant = $fournisseurs->find() | |
501 | + ->where([ | |
502 | + 'nom' => $fournisseur_asis | |
503 | + ]) | |
504 | + ->first(); | |
505 | + // C'est un fournisseur déjà existant ? => le modifier en enlevant les espaces en trop | |
506 | + if ($fournisseur_existant) { | |
507 | + $fournisseur_existant->nom = $fournisseur; | |
508 | + $fournisseurs->save($fournisseur_existant); | |
509 | + // garder cet id | |
510 | + $entity->fournisseur_id = $fournisseur_existant->id; | |
511 | + } | |
512 | + // C'est vraiment un NEW fournisseur => le créer | |
513 | + else { | |
514 | + */ | |
515 | + $fournisseur_new = $fournisseurs->newEntity([ | |
516 | + 'nom' => $fournisseur | |
517 | + ]); | |
518 | + $fournisseurs->save($fournisseur_new); | |
519 | + $entity->fournisseur_id = $fournisseur_new->id; | |
520 | + //} | |
521 | + } // NEW | |
522 | + } // fournisseur changé | |
523 | + // => Si ce fournisseur a des espaces en trop (dans la BD), on le corrige (dans la BD) | |
524 | + if ($fournisseur != $fournisseur_existant->nom) { | |
525 | + //debug('update bd'); exit; | |
526 | + // update | |
527 | + $fournisseur_existant->nom = $fournisseur; | |
528 | + $fournisseurs->save($fournisseur_existant); | |
529 | + } | |
530 | + } // fournisseur non vide | |
531 | + } // ssi changement | |
532 | + // Finalement, on supprime les champs 'fournisseur' car sinon erreur de sauvegarde, | |
533 | + // (normal ces champs n'existent pas dans materiel) | |
534 | + unset($entity->fournisseur_orig); | |
535 | + unset($entity->fournisseur); | |
536 | + //debug($entity); exit; | |
537 | + | |
442 | 538 | // TRES IMPORTANT, sinon echec de la sauvegarde !!! |
443 | 539 | return true; |
444 | 540 | } | ... | ... |
src/Template/Materiels/add_edit.ctp
... | ... | @@ -69,16 +69,19 @@ $IS_EDIT = !$IS_ADD; |
69 | 69 | |
70 | 70 | //TODO: supprimer |
71 | 71 | $entity = $entity; |
72 | -$materiel = $entity; // @deprecated | |
73 | 72 | //debug($entity); |
73 | +$materiel = $entity; // @deprecated | |
74 | 74 | $entity_name = 'matériel'; |
75 | 75 | |
76 | 76 | $domaineresp = $domaineresp; |
77 | 77 | $designation = $designation; |
78 | 78 | $fournisseurs = $fournisseurs; |
79 | +//foreach ($fournisseurs as $l) debug($l); | |
80 | +//foreach ($fournisseurs as $k=>$v) debug("$k => $v"); | |
79 | 81 | $administrateurs = $administrateurs; |
80 | 82 | $lieu_detail = $lieu_detail; |
81 | 83 | //foreach ($lieu_detail as $l) debug($l); |
84 | +//foreach ($lieu_detail as $k=>$v) debug("$k => $v"); | |
82 | 85 | $mail_responsable = $mail_responsable; |
83 | 86 | $users_option_list = $users_option_list; |
84 | 87 | $users_login_and_email = $users_login_and_email; |
... | ... | @@ -516,6 +519,7 @@ if (isset($cpMateriel)) { |
516 | 519 | ?> |
517 | 520 | <div class="form-group text"> |
518 | 521 | <label label class="control-label" for="lieu-detail">Détail lieu de stockage</label> |
522 | + <!-- autocomplete="on" => ajoute les éléments saisis auparavant (depuis l'historique du navigateur) => pas bon --> | |
519 | 523 | <input list="lieu" id="lieu-detail" name="lieu_detail" value="<?=$value?>" type="text" placeholder="choisir/ajouter un lieu" autocomplete="off"> |
520 | 524 | <datalist id="lieu"> |
521 | 525 | <?php foreach ($lieu_detail as $e) echo "<option value='$e'>"; ?> |
... | ... | @@ -704,34 +708,68 @@ if (isset($cpMateriel)) { |
704 | 708 | |
705 | 709 | // - Fournisseur (+ ajout possible) |
706 | 710 | //nouveau champ de saisie de Fournisseur, il ne se saisissait pas à l'ajout |
707 | - echo '<DIV>'; | |
711 | + //echo '<DIV>'; | |
712 | + //echo $this->Form->control('fournisseur_id', [ | |
713 | + /* Cette ligne... | |
714 | + echo $this->Form->control('fournisseur.name'); | |
715 | + // ... produit ce résultat : | |
716 | + <div class="form-group text"> | |
717 | + <label class="control-label" for="fournisseur-name">Name</label> | |
718 | + <input type="text" name="fournisseur[name]" id="fournisseur-name" class="form-control"/> | |
719 | + </div> | |
720 | + */ | |
721 | + $fournisseurs = $fournisseurs->toArray(); | |
722 | + $value = $entity->fournisseur_id ? $fournisseurs[$entity->fournisseur_id] : ''; | |
723 | + $values = array_values($fournisseurs); | |
724 | + // Sauvegarde de la valeur d'origine (pour voir plus tard si elle a été modifiée ou pas) | |
725 | + echo $this->Form->hidden('fournisseur_orig', ['value' => $value]); | |
726 | + //debug($values); | |
727 | + ?> | |
728 | + <div class="form-group text"> | |
729 | + <label class="control-label" for="fournisseur-name">Fournisseur</label> | |
730 | + <!-- autocomplete="on" => ajoute les éléments saisis auparavant (depuis l'historique du navigateur) => pas bon --> | |
731 | + <input type="text" id="fournisseur-name" name="fournisseur[name]" value="<?=$value?>" list="fournisseurs" placeholder="choisir/ajouter un fournisseur" autocomplete="off"> | |
732 | + <datalist id="fournisseurs"> | |
733 | + <?php foreach ($values as $v) echo "<option value='$v'>"; ?> | |
734 | + </datalist> | |
735 | + </div> | |
736 | + | |
737 | + <?php | |
738 | + //echo $this->Form->control('fournisseur_id'); | |
739 | + /* | |
708 | 740 | echo $this->Form->control('fournisseur_id', [ |
741 | + //echo $this->Form->control('fournisseur.name', [ | |
709 | 742 | 'label' => 'Fournisseur', |
710 | 743 | 'options' => $fournisseurs, |
711 | 744 | //'style' => 'width: 380px', |
712 | 745 | 'empty' => 'Choisir un fournisseur', |
713 | 746 | // EDIT only |
714 | 747 | 'disabled' => $IS_ADD ? false : $USER_IS_UTILISATEUR |
715 | - /* | |
748 | + /S | |
716 | 749 | in_array($role, [ |
717 | 750 | 'Utilisateur' |
718 | 751 | ]) |
719 | - */ | |
752 | + S/ | |
720 | 753 | ]); |
754 | + */ | |
721 | 755 | /* |
722 | 756 | echo $this->Html->link("Ajouter un fournisseur", [ |
723 | 757 | 'controller' => 'Fournisseurs', |
724 | 758 | 'action' => 'add', |
725 | 759 | ]); |
726 | 760 | */ |
761 | + // Ajouter un nouveau fournisseur | |
762 | + /* | |
727 | 763 | echo $this->Html->link(__('<i class="icon-plus"> Ajouter un fournisseur</i>'), [ |
728 | 764 | 'controller' => 'Fournisseurs', |
729 | 765 | 'action' => 'add', |
766 | + $IS_ADD ? 'NEW' : $materiel->id | |
730 | 767 | ], [ |
731 | 768 | 'escape' => false, |
732 | 769 | 'onclick' => 'return true;' |
733 | 770 | ]); |
734 | 771 | echo '</DIV>'; |
772 | + */ | |
735 | 773 | |
736 | 774 | // - Organisme |
737 | 775 | echo $this->Form->control('organisme_id', [ |
... | ... | @@ -907,6 +945,7 @@ if (isset($cpMateriel)) { |
907 | 945 | |
908 | 946 | <?=$this->Form->end()?> |
909 | 947 | |
948 | + | |
910 | 949 | </div> <!-- Form --> |
911 | 950 | |
912 | 951 | <!--<div class="actions"> | ... | ... |