diff --git a/README.md b/README.md index f8e785b..a29b29c 100644 --- a/README.md +++ b/README.md @@ -53,12 +53,13 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 31/03/2020 -Version: 3.7.9.12 +Date: 01/04/2020 +Version: 3.7.9.13 Author: EP Commentaire: - MATERIELS : Amélioration et Bugfixes par refactorisation des vues add et edit en 1 seule add_edit - + Ajout de fournisseur possible + MATERIELS : GROSSE amélioration pour le fournisseur + (le fournisseur est toujours en BD mais il est automatiquement ajouté si on en saisit un nouveau) + (ça corrige aussi automatiquement si espaces en trop, y-compris les anciens déjà saisis !!!) IMPORTANT : - 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 ----------------------------------------------------------------------------------------------------------- +31/03/2020 Version 3.7.9.12 (EP) + MATERIELS : Amélioration et Bugfixes par refactorisation des vues add et edit en 1 seule add_edit + + Ajout de fournisseur possible + 27/03/2020 Version 3.7.9.11 (EP) Amélioration et Bugfixes de Emprunts, Suivis, et Docs attachés diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index a92b862..be2b95d 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -1012,7 +1012,7 @@ class MaterielsController extends AppController * Les données ont été saisies et postées * On va donc les sauvegarder */ - if ( + if ( $this->request->is(['post','patch','put']) ) { /* // ADD @@ -1025,12 +1025,11 @@ class MaterielsController extends AppController // materiel modifié et posted ( (!$is_add) && $this->request->is(['patch','post','put']) ) */ - ( $this->request->is(['post','patch','put']) ) - ) { - - // (1) On rempli $materiel avec les données de ce materiel + // (1) On remplit $materiel avec les données de ce materiel $materiel = $this->Materiels->patchEntity($materiel, $this->request->getData()); + //debug($materiel); + //exit; // (2) Si l'utilisateur courant est un "administratif" => le mettre comme gestionnaire du materiel // (tout ça pour ça !!! Faudra réduire ce bazar) diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index cb33dcb..e4e3743 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -190,12 +190,14 @@ class MaterielsTable extends AppTable 'message' => 'La date n\'est pas valide' ]); } + /* // Attention, configuration désactivée, cela ne génère pas ne num de labo, voir dans config/edit.ctp $validator->allowEmpty('fournisseur')->add('fournisseur', 'valid', [ 'rule' => 'check_string', 'message' => 'Ce champ contient des caractères interdits', 'provider' => 'table' ]); + */ $validator->numeric('prix_ht') ->allowEmpty('prix_ht') ->add('prix_ht', 'valid', [ @@ -325,6 +327,10 @@ class MaterielsTable extends AppTable 'errorField' => 'materiel_administratif', 'message' => 'Le matériel est obligatoirement inventoriable ou technique.' ]); + $rules->add($checkAtLeastOneChecked, [ + 'errorField' => 'materiel_technique', + 'message' => 'Le matériel est obligatoirement inventoriable ou technique.' + ]); $rules->add($checkIfIsAdministratifWhenShouldBe, [ 'errorField' => 'materiel_administratif', '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 'message' => 'Le matériel ne peut pas être inventoriable et ne pas avoir de prix' ]); - $rules->add($rules->isUnique([ 'numero_laboratoire' ])); + $rules->add($rules->existsIn([ 'sur_categorie_id' ], 'SurCategories')); @@ -366,7 +372,7 @@ class MaterielsTable extends AppTable // 14/1/19 bake autoadded: //$rules->add($rules->existsIn(['gestionnaire_id'], 'Gestionnaires')); //$rules->add($rules->existsIn(['photo_id'], 'Photos')); - $rules->add($rules->existsIn(['fournisseur_id'], 'Fournisseurs')); + ///$rules->add($rules->existsIn(['fournisseur_id'], 'Fournisseurs')); return $rules; } @@ -439,6 +445,96 @@ class MaterielsTable extends AppTable if (empty($entity->get('date_reception'))) { $entity->set('date_reception', null); } + + /* Traitement du fournisseur (SSI sa valeur a changé) + * + * On récupère le NOM du fournisseur saisi dans le champ appelé fournisseur.name (en php) + * En Html ça correspond à fournisseur['name'] + * Si saisie vide => mettre à nul + * Sinon, chercher le fournisseur_id correspondant à ce nom + * Si id trouvé => fournisseur_id = cet id + * Sinon, créer un nouveau fournisseur avec ce nom + debug($entity->fournisseur['name']); + exit; + */ + //debug($entity); exit; + $fournisseur_asis = $entity->fournisseur['name']; + // Enlever les espaces superflus + $fournisseur = trim($fournisseur_asis); + // L'utilisateur a changé le fournisseur ou alors lui a enlevé des espaces ? + // => on traite ce changement + if ($fournisseur_asis != $entity->fournisseur_orig) { + // champ fournisseur vide => mettre à nul + if ($fournisseur == '') + $entity->fournisseur_id = null; + //TODO: maj min + // pas vide => on récupère l'id de ce fournisseur (s'il existe)... + else { + $fournisseurs = TableRegistry::getTableLocator()->get('Fournisseurs'); + $fournisseur_existant = $fournisseurs->find() + ->where([ + // marche pas, obligé d'utiliser orWhere !!!!!! + //'OR' => ['nom' => $fournisseur_asis, 'nom' => $fournisseur] + 'nom in' => [$fournisseur_asis, $fournisseur] + //'nom' => $fournisseur_asis, + ]) + /* + ->orWhere([ + //'OR' => ['nom' => $fournisseur_asis, 'nom' => $fournisseur] + 'nom' => $fournisseur + ]) + */ + ->first(); + // Fournisseur changé ? (vrai changement de fournisseur, c'est à dire "autre fournisseur") + if ( $fournisseur != trim($entity->fournisseur_orig) ) { + // C'est un fournisseur déjà existant ? => positionner son id + if ($fournisseur_existant) { + //debug('changement'); exit; + $entity->fournisseur_id = $fournisseur_existant->id; + } + // NEW fournisseur + else { + //debug('NEW fourn'); exit; + /* + // Est-ce que ce NEW fournisseur n'existe pas déjà en fait, mais avec des espaces avant ou après ? + $fournisseur_existant = $fournisseurs->find() + ->where([ + 'nom' => $fournisseur_asis + ]) + ->first(); + // C'est un fournisseur déjà existant ? => le modifier en enlevant les espaces en trop + if ($fournisseur_existant) { + $fournisseur_existant->nom = $fournisseur; + $fournisseurs->save($fournisseur_existant); + // garder cet id + $entity->fournisseur_id = $fournisseur_existant->id; + } + // C'est vraiment un NEW fournisseur => le créer + else { + */ + $fournisseur_new = $fournisseurs->newEntity([ + 'nom' => $fournisseur + ]); + $fournisseurs->save($fournisseur_new); + $entity->fournisseur_id = $fournisseur_new->id; + //} + } // NEW + } // fournisseur changé + // => Si ce fournisseur a des espaces en trop (dans la BD), on le corrige (dans la BD) + if ($fournisseur != $fournisseur_existant->nom) { + //debug('update bd'); exit; + // update + $fournisseur_existant->nom = $fournisseur; + $fournisseurs->save($fournisseur_existant); + } + } // fournisseur non vide + } // ssi changement + // Finalement, on supprime les champs 'fournisseur' car sinon erreur de sauvegarde, + // (normal ces champs n'existent pas dans materiel) + unset($entity->fournisseur_orig); + unset($entity->fournisseur); + //debug($entity); exit; + // TRES IMPORTANT, sinon echec de la sauvegarde !!! return true; } diff --git a/src/Template/Materiels/add_edit.ctp b/src/Template/Materiels/add_edit.ctp index e979cc7..6683c97 100644 --- a/src/Template/Materiels/add_edit.ctp +++ b/src/Template/Materiels/add_edit.ctp @@ -69,16 +69,19 @@ $IS_EDIT = !$IS_ADD; //TODO: supprimer $entity = $entity; -$materiel = $entity; // @deprecated //debug($entity); +$materiel = $entity; // @deprecated $entity_name = 'matériel'; $domaineresp = $domaineresp; $designation = $designation; $fournisseurs = $fournisseurs; +//foreach ($fournisseurs as $l) debug($l); +//foreach ($fournisseurs as $k=>$v) debug("$k => $v"); $administrateurs = $administrateurs; $lieu_detail = $lieu_detail; //foreach ($lieu_detail as $l) debug($l); +//foreach ($lieu_detail as $k=>$v) debug("$k => $v"); $mail_responsable = $mail_responsable; $users_option_list = $users_option_list; $users_login_and_email = $users_login_and_email; @@ -516,6 +519,7 @@ if (isset($cpMateriel)) { ?>
+ "; ?> @@ -704,34 +708,68 @@ if (isset($cpMateriel)) { // - Fournisseur (+ ajout possible) //nouveau champ de saisie de Fournisseur, il ne se saisissait pas à l'ajout - echo '
'; + //echo '
'; + //echo $this->Form->control('fournisseur_id', [ + /* Cette ligne... + echo $this->Form->control('fournisseur.name'); + // ... produit ce résultat : +
+ + +
+ */ + $fournisseurs = $fournisseurs->toArray(); + $value = $entity->fournisseur_id ? $fournisseurs[$entity->fournisseur_id] : ''; + $values = array_values($fournisseurs); + // Sauvegarde de la valeur d'origine (pour voir plus tard si elle a été modifiée ou pas) + echo $this->Form->hidden('fournisseur_orig', ['value' => $value]); + //debug($values); + ?> +
+ + + + + "; ?> + +
+ + Form->control('fournisseur_id'); + /* echo $this->Form->control('fournisseur_id', [ + //echo $this->Form->control('fournisseur.name', [ 'label' => 'Fournisseur', 'options' => $fournisseurs, //'style' => 'width: 380px', 'empty' => 'Choisir un fournisseur', // EDIT only 'disabled' => $IS_ADD ? false : $USER_IS_UTILISATEUR - /* + /S in_array($role, [ 'Utilisateur' ]) - */ + S/ ]); + */ /* echo $this->Html->link("Ajouter un fournisseur", [ 'controller' => 'Fournisseurs', 'action' => 'add', ]); */ + // Ajouter un nouveau fournisseur + /* echo $this->Html->link(__(' Ajouter un fournisseur'), [ 'controller' => 'Fournisseurs', 'action' => 'add', + $IS_ADD ? 'NEW' : $materiel->id ], [ 'escape' => false, 'onclick' => 'return true;' ]); echo '
'; + */ // - Organisme echo $this->Form->control('organisme_id', [ @@ -907,6 +945,7 @@ if (isset($cpMateriel)) { Form->end()?> +