diff --git a/CHANGELOG b/CHANGELOG index 152a106..f56b642 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -334,15 +334,26 @@ Commencer à implémenter le nouveau workflow v5 : ======= TODO ======= + bugfix droits edit/delete dans Element/buttons_edit_del.ctp - Relance auto lors de suivis périodiques + bugfix droits edit/delete dans liste des documents attachés + Pouvoir modifier le champ "n° inventaire Tutelle" sur un matos validé + (Service fait CNRS ----> je récupère le n° inventaire "Tutelle" sur GESLAB (SIFAC ?) et je complète la fiche INVENTIRAP + Envoi mail à l'utilisateur du matériel lors de livraison + + Définir (dans le fichier de conf) la liste des infos qui ne doivent pas pouvoir être modifiées une fois le matériel : + - en commande (lot1) + - validé (lot2) + + Détail lieu stockage demandé seulement si > 10K€ Procédures pour les utilisateurs et les gestionnaires désormais configurable via le fichier de conf TESTS !!!! + Relance auto lors de suivis périodiques @@ -350,6 +361,11 @@ Commencer à implémenter le nouveau workflow v5 : ======= CHANGES ======= +------- +08/09/2021 v5.1.1-3.7.9 + - (e) Ajouter lien "Voir les matériels à commander" (configurable) sur page accueil Gestionnaires (le mettre avant "voir les matos à valider") + - (b) Bugfix : cocher les boutons "A valider", et "En commande" quand activés + - (b) Bugfix : sur la page accueil des gestionnaires, correction des liens vers les matos ------- 08/09/2021 v5.1.0-3.7.9 @@ -358,7 +374,7 @@ Commencer à implémenter le nouveau workflow v5 : ------- 08/09/2021 v5.0.2-3.7.9 - - (b) Bugfix lien vers doc utilisateurs + - (b) Bugfix : lien vers doc utilisateurs ------- 07/09/2021 v5.0.1-3.7.9 diff --git a/README.md b/README.md index 827ad57..b2f1cc5 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- Date: 08/09/2021 -Version: v5.1.0-3.7.9 +Version: v5.1.1-3.7.9 diff --git a/config/app_labinvent_mandatory_fields.default.yml b/config/app_labinvent_mandatory_fields.default.yml index f36c993..8a89a43 100644 --- a/config/app_labinvent_mandatory_fields.default.yml +++ b/config/app_labinvent_mandatory_fields.default.yml @@ -100,19 +100,28 @@ MANDATORY_FIELDS_LOT1: #'fournisseur' - # Devis joint : c'est un champ virtuel, il n'existe pas physiquement (sauf dans la table Documents) - DEVIS: 'Devis' - # Utilisé par la Gestion pour remplir le champ eotp budgets: 'Budgets' # INFOS ADMINISTRATIVES # - EOTP : obligatoire seulement dans LOT2 #'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) - + + + # CHAMPS VIRTUELS + # - Devis joint : c'est un champ virtuel, il n'existe pas physiquement (sauf dans la table Documents) + DEVIS: 'Devis' + # ******* END OF MANDATORY_FIELDS_LOT1 ******** +# Liste des champs qui ne peuvent plus être modifiés après la demande d'achat (commande) +UNEDITABLE_FIELDS_LOT1: [] + + + + + # ************************************* @@ -148,11 +157,53 @@ MANDATORY_FIELDS_LOT2: eotp: 'Entité(s) dépensière(s) (budget(s))' numero_commande: 'Num. BC' - numero_inventaire_organisme: "N° inventaire de l'organisme" + + # 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" # ******* END OF $MANDATORY_FIELDS_LOT2 ******** +# Liste des champs qui ne peuvent plus être modifiés après la validation (livraison) +#UNEDITABLE_FIELDS_LOT2: [] +UNEDITABLE_FIELDS_LOT2: + + # Champs généraux : + + sur_categorie_id: + + categorie_id: + + materiel_administratif: + + materiel_technique: + + site_id: + + date_acquisition: + + date_reception: + + organisme_id: + + prix_ht: + + gestionnaire_id: + + # Champs administratifs : + + eotp: + + numero_commande: + + numero_inventaire_organisme: + + numero_inventaire_old: + + + # Astuce utilisable : diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 62770f0..0cd256a 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -46,6 +46,9 @@ use Cake\Utility\Inflector; class AppController extends Controller { + // Bouton "Commander" disponible ? + private static $HAS_ORDER_BUTTON = null; + // Si DEBUG, affiche plus d'infos protected $DEBUG=false; //protected $DEBUG=true; @@ -356,6 +359,19 @@ class AppController extends Controller 'delete' => ['Suppression','supprimé'], ]; + + // Les matos peuvent-ils être commandés (bouton commander) ? + // vrai par défaut (sauf si explicité dans la config) + public static function hasOrderButton() { + // OPTIM : si déjà lu, on relit pas + if (! is_null(self::$HAS_ORDER_BUTTON)) return self::$HAS_ORDER_BUTTON; + // Pas encore lu, on lit + $has_order_button = Configure::read('HAS_ORDER_BUTTON'); + if (is_null($has_order_button)) $has_order_button = true; + self::$HAS_ORDER_BUTTON = $has_order_button; + return $has_order_button; + } + protected function setActionsNounAndPastVerb(array $actionsNounAndPastVerb) { /* Non, finalement on fait ça dans le get() // Si genre féminin, on féminise tous les verbes en ajoutant 'e' à la fin (ajouté-e, modifié-e, ...) diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php index 471d4cc..f716d60 100755 --- a/src/Controller/DocumentsController.php +++ b/src/Controller/DocumentsController.php @@ -83,6 +83,7 @@ class DocumentsController extends AppController // Action 'edit' (modif d'une entité) => comme pour 'add' $this->setAuthorizationsForAction('edit', 'add', [ + 'admin' => 0, 'super' => ['default',0] ]); diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 5220dc9..99db117 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -28,10 +28,6 @@ use Cake\Core\Configure; */ class MaterielsController extends AppController { - // Bouton "Commander" disponible ? - private static $HAS_ORDER_BUTTON = null; - - // - ATTRIBUTS CONSTANTES /* @@ -375,7 +371,8 @@ class MaterielsController extends AppController { public function getNameFieldLabel() { return 'designation'; } - + + /* moved to AppController // Les matos peuvent-ils être commandés (bouton commander) ? // vrai par défaut (sauf si explicité dans la config) public static function hasOrderButton() { @@ -387,6 +384,7 @@ class MaterielsController extends AppController { self::$HAS_ORDER_BUTTON = $has_order_button; return $has_order_button; } + */ /* @@ -3220,7 +3218,7 @@ class MaterielsController extends AppController { */ public function statusValidated($id = null, $from = 'index') { - $this->_statusSetTo('VALIDATED', 'Le matériel a bien été validé', $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); /* * (EP) moved to statusSetTo() * if (in_array($_SESSION['Auth']['User']['sn'][0], TableRegistry::get('Users') diff --git a/src/Controller/PagesController.php b/src/Controller/PagesController.php index 2a82104..7cc24eb 100755 --- a/src/Controller/PagesController.php +++ b/src/Controller/PagesController.php @@ -275,6 +275,11 @@ class PagesController extends AppController // Finalement, on affiche la $page demandée (avec render()) $this->set('page', $this->page); $this->set(compact('subpage')); + + // - Page d'ACCUEIL + if ($this->page=='home') { + $this->set('HAS_ORDER_BUTTON',self::hasOrderButton()); + } // - Page des LOGS // /pages/logs?level=info diff --git a/src/Template/Materiels/add_edit.ctp b/src/Template/Materiels/add_edit.ctp index 42fab3c..6ef328f 100644 --- a/src/Template/Materiels/add_edit.ctp +++ b/src/Template/Materiels/add_edit.ctp @@ -190,19 +190,20 @@ $administrationData = array( $myReadonlyFields = array(); if ($IS_VALIDATED) // can only modify some fields - $myReadonlyFields = array_merge(array( - 'sur_categorie_id', - 'categorie_id', - 'materiel_administratif', - 'materiel_technique', - 'site_id', - 'date_acquisition', - 'date_reception', - 'organisme_id', - 'prix_ht', - 'gestionnaire_id' - ), - $administrationData + $myReadonlyFields = array_merge( + array( + 'sur_categorie_id', + 'categorie_id', + 'materiel_administratif', + 'materiel_technique', + 'site_id', + 'date_acquisition', + 'date_reception', + 'organisme_id', + 'prix_ht', + 'gestionnaire_id' + ), + $administrationData ); else if ($IS_ARCHIVED_OR_TOBE) $myReadonlyFields = array('*','status'); if ($IS_VALIDATED && $materiel->sous_categorie_id) @@ -216,6 +217,7 @@ if ($IS_VALIDATED && $materiel->numero_serie) $myReadonlyFields ); } // EDIT only +debug($myReadonlyFields); // Création des 2 boutons submit du formulaire (Enregistrer et Cancel) @@ -432,7 +434,7 @@ if (isset($cpMateriel)) { // ADD only //////'default' => $materiel->sur_categorie_id, // EDIT only - 'readonly' => $IS_ADD ? false : $isReadonlyField('sur_categorie_id', $myReadonlyFields), + //'readonly' => $IS_ADD ? false : $isReadonlyField('sur_categorie_id', $myReadonlyFields), 'disabled' => $IS_ADD ? false : $isReadonlyField('sur_categorie_id', $myReadonlyFields) ]); // - CATEGORIE @@ -983,7 +985,7 @@ if (isset($cpMateriel)) { */ if ($IS_EDIT || ($IS_ADD && $USER_IS_ADMIN_OR_MORE)) { - $DISABLED = $IS_ADD ? false : !$USER_IS_ADMIN_OR_MORE; + //$DISABLED = $IS_ADD ? false : !$USER_IS_ADMIN_OR_MORE; echo '