Commit 4e94b523a19534a163db6f4c2ec049ab91f10e0e

Authored by Etienne Pallier
1 parent 8c9b696c
Exists in master and in 1 other branch dev

Champs obligatoires "etiq. posée" & "n° invent. tutel." 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)
@@ -397,6 +397,11 @@ Commencer à implémenter le nouveau workflow v5 : @@ -397,6 +397,11 @@ Commencer à implémenter le nouveau workflow v5 :
397 397
398 ------- 398 -------
399 13/09/2021 v5.2.6-3.7.9 399 13/09/2021 v5.2.6-3.7.9
  400 + - Champs obligatoires "etiquette posée" et "n° inventaire tutelles" gérés via config
  401 + (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)
  402 +
  403 +-------
  404 +13/09/2021 v5.2.6-3.7.9
400 - NEWSLETTER #5 envoyée 405 - NEWSLETTER #5 envoyée
401 - Mise à jour du diagramme workflow (E-T) pour introduire la nouvelle étape TOBEORDERED ("En Commande") 406 - Mise à jour du diagramme workflow (E-T) pour introduire la nouvelle étape TOBEORDERED ("En Commande")
402 - Bugfix : infos sur etiquettes affichées SEULEMENT si une étiqueteuse est configurée... 407 - Bugfix : infos sur etiquettes affichées SEULEMENT si une étiqueteuse est configurée...
@@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes : @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes :
53 -------------------------------------------------------------------------------------------- 53 --------------------------------------------------------------------------------------------
54 54
55 Date: 13/09/2021 55 Date: 13/09/2021
56 -Version: v5.2.6-3.7.9 56 +Version: v5.2.7-3.7.9
57 57
58 58
59 59
config/app_labinvent_mandatory_fields.default.yml
@@ -180,8 +180,6 @@ MANDATORY_FIELDS_LOT2: @@ -180,8 +180,6 @@ MANDATORY_FIELDS_LOT2:
180 180
181 date_reception: 'Date de livraison' 181 date_reception: 'Date de livraison'
182 182
183 - #//'etiquette', // O/N  
184 -  
185 site_id: 'Site' 183 site_id: 'Site'
186 184
187 #TODO: seulement si prix > 10K€ 185 #TODO: seulement si prix > 10K€
@@ -196,10 +194,14 @@ MANDATORY_FIELDS_LOT2: @@ -196,10 +194,14 @@ MANDATORY_FIELDS_LOT2:
196 194
197 numero_commande: 'Num. BC' 195 numero_commande: 'Num. BC'
198 196
  197 + # Ce champ ne sera pas demandé à la saisie, mais un simple rappel sera affiché sur la vue détaillée du matériel
  198 + etiquette: 'Etiquette posée'
  199 +
199 # PROBLEME : 200 # PROBLEME :
200 # On ne peut pas exiger ce numéro au moment de la livraison 201 # On ne peut pas exiger ce numéro au moment de la livraison
201 - # car le gestionnaire n'a cette info que lorsque "Service fait CNRS" (il récupère alors le n° inventaire "Tutelle" sur GESLAB)  
202 - #numero_inventaire_organisme: "N° inventaire de l'organisme" 202 + # car le gestionnaire n'a cette info que lorsque "Service fait CNRS" (il récupère alors le n° inventaire "Tutelle" sur GESLAB)
  203 + # => Ce champ ne sera pas demandé à la saisie, mais un simple rappel sera affiché sur la vue détaillée du matériel
  204 + numero_inventaire_organisme: "N° inventaire de l'organisme"
203 205
204 # ******* END OF $MANDATORY_FIELDS_LOT2 ******** 206 # ******* END OF $MANDATORY_FIELDS_LOT2 ********
205 207
src/Controller/MaterielsController.php
@@ -1891,7 +1891,7 @@ class MaterielsController extends AppController { @@ -1891,7 +1891,7 @@ class MaterielsController extends AppController {
1891 //debug($emails); 1891 //debug($emails);
1892 1892
1893 /* 1893 /*
1894 - * Si le materiel est VALIDATED : 1894 + * Si le materiel est VALIDATED (et que les champs suivants sont obligatoires) :
1895 * - l'étiquette doit être imprimée (et collée) 1895 * - l'étiquette doit être imprimée (et collée)
1896 * - le n° inventaire tutelles doit être renseigné 1896 * - le n° inventaire tutelles doit être renseigné
1897 * Si ça n'est pas le cas, on affiche un message de rappel sur cette vue détaillée 1897 * 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 { @@ -1899,8 +1899,12 @@ class MaterielsController extends AppController {
1899 $LABEL_NOT_PRINTED = false; 1899 $LABEL_NOT_PRINTED = false;
1900 $NUM_INV_TUTELLES_NOT_FILLED = false; 1900 $NUM_INV_TUTELLES_NOT_FILLED = false;
1901 if ($entity->is_validated) { 1901 if ($entity->is_validated) {
1902 - if ($CAN_PRINT_LABEL) $LABEL_NOT_PRINTED = ! $entity->etiquette;  
1903 - $NUM_INV_TUTELLES_NOT_FILLED = empty($entity->numero_inventaire_organisme); 1902 + //debug($this->Materiels->getMandatoryFieldsForMaterielStatus($materiel->status));
  1903 + //debug(array_key_exists('etiquette', $this->Materiels->getMandatoryFieldsForMaterielStatus($materiel->status)));
  1904 + if ($CAN_PRINT_LABEL && array_key_exists('etiquette', $this->Materiels->getMandatoryFieldsForMaterielStatus($materiel->status)))
  1905 + $LABEL_NOT_PRINTED = ! $entity->etiquette;
  1906 + if (array_key_exists('numero_inventaire_organisme', $this->Materiels->getMandatoryFieldsForMaterielStatus($materiel->status)))
  1907 + $NUM_INV_TUTELLES_NOT_FILLED = empty($entity->numero_inventaire_organisme);
1904 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"); 1908 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");
1905 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'"); 1909 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'");
1906 } 1910 }
@@ -2235,12 +2239,14 @@ class MaterielsController extends AppController { @@ -2235,12 +2239,14 @@ class MaterielsController extends AppController {
2235 //print_r($materiel); 2239 //print_r($materiel);
2236 foreach ($mandatory_fields as $fname=>$fname_nice) { 2240 foreach ($mandatory_fields as $fname=>$fname_nice) {
2237 2241
2238 - // Champs spéciaux dont le caractère obligatoire est géré indirectement (via beforeSave())  
2239 - // (fournisseur_id, et autres champs ajoutés dans l'avenir ? ...)  
2240 - if ($fname=='fournisseur_id') continue;  
2241 -  
2242 - // Champs virtuels (n'existent pas physiquement)  
2243 - if (strtoupper($fname)=='DEVIS') continue; 2242 + /*
  2243 + * Champs obligatoires à ignorer :
  2244 + * - champs virtuels (n'existent pas physiquement)
  2245 + * - champs ne pouvant être exigés si tôt
  2246 + * - champs spéciaux dont le caractère obligatoire est géré indirectement (via beforeSave())
  2247 + * ...
  2248 + */
  2249 + if ( in_array($fname, ['DEVIS', 'fournisseur_id', 'etiquette', 'numero_inventaire_organisme']) ) continue;
2244 2250
2245 if ($materiel->$fname === null || $materiel->$fname == '') { 2251 if ($materiel->$fname === null || $materiel->$fname == '') {
2246 $ALL_MANDATORY_FIELDS_GIVEN = false; 2252 $ALL_MANDATORY_FIELDS_GIVEN = false;
@@ -2606,7 +2612,7 @@ class MaterielsController extends AppController { @@ -2606,7 +2612,7 @@ class MaterielsController extends AppController {
2606 array_shift($modifiableFields); 2612 array_shift($modifiableFields);
2607 return ! in_array($fieldName, $modifiableFields); 2613 return ! in_array($fieldName, $modifiableFields);
2608 } 2614 }
2609 - return in_array($fieldName, $myReadonlyFields); 2615 + return ( !empty($materiel->$fieldName) && in_array($fieldName, $myReadonlyFields) );
2610 }; 2616 };
2611 2617
2612 //$this->set('isReadonlyField', $isReadonlyField); 2618 //$this->set('isReadonlyField', $isReadonlyField);
@@ -2977,6 +2983,7 @@ class MaterielsController extends AppController { @@ -2977,6 +2983,7 @@ class MaterielsController extends AppController {
2977 2983
2978 // Si au moins un champ obligatoire est nul ou vide => ERROR 2984 // Si au moins un champ obligatoire est nul ou vide => ERROR
2979 foreach ($mandatoryFields as $fname => $fnicename) { 2985 foreach ($mandatoryFields as $fname => $fnicename) {
  2986 +
2980 // Champ virtuel ? 2987 // Champ virtuel ?
2981 if (strtoupper($fname) == 'DEVIS') { 2988 if (strtoupper($fname) == 'DEVIS') {
2982 if (! $materiel->hasDevis()) { 2989 if (! $materiel->hasDevis()) {
@@ -2989,6 +2996,7 @@ class MaterielsController extends AppController { @@ -2989,6 +2996,7 @@ class MaterielsController extends AppController {
2989 // on passe au champ suivant 2996 // on passe au champ suivant
2990 continue; 2997 continue;
2991 } 2998 }
  2999 +
2992 // Champ physique (réel) ? 3000 // Champ physique (réel) ?
2993 $fval = $materiel->$fname; 3001 $fval = $materiel->$fname;
2994 if ($fval === null || $fval == '') { 3002 if ($fval === null || $fval == '') {
@@ -3050,8 +3058,8 @@ class MaterielsController extends AppController { @@ -3050,8 +3058,8 @@ class MaterielsController extends AppController {
3050 // Si au moins un champ obligatoire est nul ou vide => ERROR 3058 // Si au moins un champ obligatoire est nul ou vide => ERROR
3051 foreach ($mandatoryFields as $fname => $fnicename) { 3059 foreach ($mandatoryFields as $fname => $fnicename) {
3052 3060
3053 - // Champ virtuel ? => ignorer  
3054 - if ($fname == 'DEVIS') continue; 3061 + // Champs obligatoires à ignorer : Champs virtuels ou ne pouvant être exigés si tôt
  3062 + if ( in_array($fname, ['DEVIS', 'etiquette', 'numero_inventaire_organisme']) ) continue;
3055 3063
3056 $fval = $materiel->$fname; 3064 $fval = $materiel->$fname;
3057 //debug($fname); debug($fval); 3065 //debug($fname); debug($fval);
@@ -3263,7 +3271,8 @@ class MaterielsController extends AppController { @@ -3263,7 +3271,8 @@ class MaterielsController extends AppController {
3263 */ 3271 */
3264 public function statusValidated($id = null, $from = 'index') 3272 public function statusValidated($id = null, $from = 'index')
3265 { 3273 {
3266 - $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); 3274 + //$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);
  3275 + $this->_statusSetTo('VALIDATED', "Le matériel a bien été validé", $id, $from);
3267 /* 3276 /*
3268 * (EP) moved to statusSetTo() 3277 * (EP) moved to statusSetTo()
3269 * if (in_array($_SESSION['Auth']['User']['sn'][0], TableRegistry::get('Users') 3278 * if (in_array($_SESSION['Auth']['User']['sn'][0], TableRegistry::get('Users')