Commit 9111dd94ce9647a42bb91c0a5f8f6c35fedcc580

Authored by Etienne Pallier
1 parent 3f90ea0b
Exists in master and in 1 other branch dev

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 !!!
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">
... ...