From 4e94b523a19534a163db6f4c2ec049ab91f10e0e Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Mon, 13 Sep 2021 14:29:20 +0200 Subject: [PATCH] Champs obligatoires "etiq. posée" & "n° invent. tutel." gérés via config --- CHANGELOG | 5 +++++ README.md | 2 +- config/app_labinvent_mandatory_fields.default.yml | 10 ++++++---- src/Controller/MaterielsController.php | 35 ++++++++++++++++++++++------------- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 0912855..823172a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -397,6 +397,11 @@ Commencer à implémenter le nouveau workflow v5 : ------- 13/09/2021 v5.2.6-3.7.9 + - Champs obligatoires "etiquette posée" et "n° inventaire tutelles" gérés via config + (si obligatoires, ces champs ne sont pas demandés à la saisie, mais un simple rappel est affiché sur la vue détaillée du matériel) + +------- +13/09/2021 v5.2.6-3.7.9 - NEWSLETTER #5 envoyée - Mise à jour du diagramme workflow (E-T) pour introduire la nouvelle étape TOBEORDERED ("En Commande") - Bugfix : infos sur etiquettes affichées SEULEMENT si une étiqueteuse est configurée... diff --git a/README.md b/README.md index 5e50972..9298c70 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- Date: 13/09/2021 -Version: v5.2.6-3.7.9 +Version: v5.2.7-3.7.9 diff --git a/config/app_labinvent_mandatory_fields.default.yml b/config/app_labinvent_mandatory_fields.default.yml index ebab9e0..c344b72 100644 --- a/config/app_labinvent_mandatory_fields.default.yml +++ b/config/app_labinvent_mandatory_fields.default.yml @@ -180,8 +180,6 @@ MANDATORY_FIELDS_LOT2: date_reception: 'Date de livraison' - #//'etiquette', // O/N - site_id: 'Site' #TODO: seulement si prix > 10K€ @@ -196,10 +194,14 @@ MANDATORY_FIELDS_LOT2: numero_commande: 'Num. BC' + # Ce champ ne sera pas demandé à la saisie, mais un simple rappel sera affiché sur la vue détaillée du matériel + etiquette: 'Etiquette posée' + # PROBLEME : # On ne peut pas exiger ce numéro au moment de la livraison - # car le gestionnaire n'a cette info que lorsque "Service fait CNRS" (il récupère alors le n° inventaire "Tutelle" sur GESLAB) - #numero_inventaire_organisme: "N° inventaire de l'organisme" + # car le gestionnaire n'a cette info que lorsque "Service fait CNRS" (il récupère alors le n° inventaire "Tutelle" sur GESLAB) + # => Ce champ ne sera pas demandé à la saisie, mais un simple rappel sera affiché sur la vue détaillée du matériel + numero_inventaire_organisme: "N° inventaire de l'organisme" # ******* END OF $MANDATORY_FIELDS_LOT2 ******** diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 6c0ad08..c20351d 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -1891,7 +1891,7 @@ class MaterielsController extends AppController { //debug($emails); /* - * Si le materiel est VALIDATED : + * Si le materiel est VALIDATED (et que les champs suivants sont obligatoires) : * - l'étiquette doit être imprimée (et collée) * - le n° inventaire tutelles doit être renseigné * Si ça n'est pas le cas, on affiche un message de rappel sur cette vue détaillée @@ -1899,8 +1899,12 @@ class MaterielsController extends AppController { $LABEL_NOT_PRINTED = false; $NUM_INV_TUTELLES_NOT_FILLED = false; if ($entity->is_validated) { - if ($CAN_PRINT_LABEL) $LABEL_NOT_PRINTED = ! $entity->etiquette; - $NUM_INV_TUTELLES_NOT_FILLED = empty($entity->numero_inventaire_organisme); + //debug($this->Materiels->getMandatoryFieldsForMaterielStatus($materiel->status)); + //debug(array_key_exists('etiquette', $this->Materiels->getMandatoryFieldsForMaterielStatus($materiel->status))); + if ($CAN_PRINT_LABEL && array_key_exists('etiquette', $this->Materiels->getMandatoryFieldsForMaterielStatus($materiel->status))) + $LABEL_NOT_PRINTED = ! $entity->etiquette; + if (array_key_exists('numero_inventaire_organisme', $this->Materiels->getMandatoryFieldsForMaterielStatus($materiel->status))) + $NUM_INV_TUTELLES_NOT_FILLED = empty($entity->numero_inventaire_organisme); if ($LABEL_NOT_PRINTED) $this->Flash->set("Cette fiche est validée mais n'oubliez pas d'imprimer l'étiquette associée et de la coller sur le matériel"); if ($NUM_INV_TUTELLES_NOT_FILLED) $this->Flash->set("Cette fiche est validée mais vous n'avez pas encore rempli le champ 'N° inventaire comptable/tutelles'"); } @@ -2235,12 +2239,14 @@ class MaterielsController extends AppController { //print_r($materiel); foreach ($mandatory_fields as $fname=>$fname_nice) { - // Champs spéciaux dont le caractère obligatoire est géré indirectement (via beforeSave()) - // (fournisseur_id, et autres champs ajoutés dans l'avenir ? ...) - if ($fname=='fournisseur_id') continue; - - // Champs virtuels (n'existent pas physiquement) - if (strtoupper($fname)=='DEVIS') continue; + /* + * Champs obligatoires à ignorer : + * - champs virtuels (n'existent pas physiquement) + * - champs ne pouvant être exigés si tôt + * - champs spéciaux dont le caractère obligatoire est géré indirectement (via beforeSave()) + * ... + */ + if ( in_array($fname, ['DEVIS', 'fournisseur_id', 'etiquette', 'numero_inventaire_organisme']) ) continue; if ($materiel->$fname === null || $materiel->$fname == '') { $ALL_MANDATORY_FIELDS_GIVEN = false; @@ -2606,7 +2612,7 @@ class MaterielsController extends AppController { array_shift($modifiableFields); return ! in_array($fieldName, $modifiableFields); } - return in_array($fieldName, $myReadonlyFields); + return ( !empty($materiel->$fieldName) && in_array($fieldName, $myReadonlyFields) ); }; //$this->set('isReadonlyField', $isReadonlyField); @@ -2977,6 +2983,7 @@ class MaterielsController extends AppController { // Si au moins un champ obligatoire est nul ou vide => ERROR foreach ($mandatoryFields as $fname => $fnicename) { + // Champ virtuel ? if (strtoupper($fname) == 'DEVIS') { if (! $materiel->hasDevis()) { @@ -2989,6 +2996,7 @@ class MaterielsController extends AppController { // on passe au champ suivant continue; } + // Champ physique (réel) ? $fval = $materiel->$fname; if ($fval === null || $fval == '') { @@ -3050,8 +3058,8 @@ class MaterielsController extends AppController { // Si au moins un champ obligatoire est nul ou vide => ERROR foreach ($mandatoryFields as $fname => $fnicename) { - // Champ virtuel ? => ignorer - if ($fname == 'DEVIS') continue; + // Champs obligatoires à ignorer : Champs virtuels ou ne pouvant être exigés si tôt + if ( in_array($fname, ['DEVIS', 'etiquette', 'numero_inventaire_organisme']) ) continue; $fval = $materiel->$fname; //debug($fname); debug($fval); @@ -3263,7 +3271,8 @@ class MaterielsController extends AppController { */ public function statusValidated($id = null, $from = 'index') { - $this->_statusSetTo('VALIDATED', "Le matériel a bien été validé (n'oubliez pas de saisir le n° inventaire 'tutelle' une fois le 'service fait')", $id, $from); + //$this->_statusSetTo('VALIDATED', "Le matériel a bien été validé (n'oubliez pas de saisir le n° inventaire 'tutelle' une fois le 'service fait')", $id, $from); + $this->_statusSetTo('VALIDATED', "Le matériel a bien été validé", $id, $from); /* * (EP) moved to statusSetTo() * if (in_array($_SESSION['Auth']['User']['sn'][0], TableRegistry::get('Users') -- libgit2 0.21.2