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)
CHANGELOG
... ... @@ -397,6 +397,11 @@ Commencer à implémenter le nouveau workflow v5 :
397 397  
398 398 -------
399 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 405 - NEWSLETTER #5 envoyée
401 406 - Mise à jour du diagramme workflow (E-T) pour introduire la nouvelle étape TOBEORDERED ("En Commande")
402 407 - Bugfix : infos sur etiquettes affichées SEULEMENT si une étiqueteuse est configurée...
... ...
README.md
... ... @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes :
53 53 --------------------------------------------------------------------------------------------
54 54  
55 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 180  
181 181 date_reception: 'Date de livraison'
182 182  
183   - #//'etiquette', // O/N
184   -
185 183 site_id: 'Site'
186 184  
187 185 #TODO: seulement si prix > 10K€
... ... @@ -196,10 +194,14 @@ MANDATORY_FIELDS_LOT2:
196 194  
197 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 200 # PROBLEME :
200 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 206 # ******* END OF $MANDATORY_FIELDS_LOT2 ********
205 207  
... ...
src/Controller/MaterielsController.php
... ... @@ -1891,7 +1891,7 @@ class MaterielsController extends AppController {
1891 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 1895 * - l'étiquette doit être imprimée (et collée)
1896 1896 * - le n° inventaire tutelles doit être renseigné
1897 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 1899 $LABEL_NOT_PRINTED = false;
1900 1900 $NUM_INV_TUTELLES_NOT_FILLED = false;
1901 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 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 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 2239 //print_r($materiel);
2236 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 2251 if ($materiel->$fname === null || $materiel->$fname == '') {
2246 2252 $ALL_MANDATORY_FIELDS_GIVEN = false;
... ... @@ -2606,7 +2612,7 @@ class MaterielsController extends AppController {
2606 2612 array_shift($modifiableFields);
2607 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 2618 //$this->set('isReadonlyField', $isReadonlyField);
... ... @@ -2977,6 +2983,7 @@ class MaterielsController extends AppController {
2977 2983  
2978 2984 // Si au moins un champ obligatoire est nul ou vide => ERROR
2979 2985 foreach ($mandatoryFields as $fname => $fnicename) {
  2986 +
2980 2987 // Champ virtuel ?
2981 2988 if (strtoupper($fname) == 'DEVIS') {
2982 2989 if (! $materiel->hasDevis()) {
... ... @@ -2989,6 +2996,7 @@ class MaterielsController extends AppController {
2989 2996 // on passe au champ suivant
2990 2997 continue;
2991 2998 }
  2999 +
2992 3000 // Champ physique (réel) ?
2993 3001 $fval = $materiel->$fname;
2994 3002 if ($fval === null || $fval == '') {
... ... @@ -3050,8 +3058,8 @@ class MaterielsController extends AppController {
3050 3058 // Si au moins un champ obligatoire est nul ou vide => ERROR
3051 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 3064 $fval = $materiel->$fname;
3057 3065 //debug($fname); debug($fval);
... ... @@ -3263,7 +3271,8 @@ class MaterielsController extends AppController {
3263 3271 */
3264 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 3277 * (EP) moved to statusSetTo()
3269 3278 * if (in_array($_SESSION['Auth']['User']['sn'][0], TableRegistry::get('Users')
... ...