diff --git a/CHANGELOG b/CHANGELOG index 37cb0b3..daa95dd 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -194,117 +194,116 @@ Outre ces changements, voici d'autres changements importants : -======= TODO3 - PEUT ATTENDRE ======= +======= TODO QUI PEUT ATTENDRE ======= will_stay => resident (ou permanent) -EOTP : -“Sur quel(s) budget(s) ?” c'est pour le lot 1 pour l'acheteur (status CREATED) -“Entité(s) dépensière(s)” / lot 2 gestionnaire (status VALIDATED) - -Modif d’une fiche materiel ne doit pas refaire une commande !!! - Install from scratch - Update VM - - check add by copy - appel à contribuer -STATS -moyenne annuelle, total : arrondir (pas de virgule, ce sont des matos) -2 premières ligne en jaune pour mettre en évidence -mettre en rouge les évol. % négatifs -Ca continue de marcher en 2021 ? - -Fournisseur update : -3 - (LATER) Simplifier le beforeSave() sur le traitement des feurs car ça sera désormais inutile vue que CLEAN - -GO GENERIC : -delete generic -index generic -add_edit generic - -Services (poles) cakephp 3.9 cake crud + view -Install DOCKER Install WSL2 sur pc - - - Adapter règles "nouveau suivi" -======= TODO2 - URGENT ======= - - -- déclarer etiquette collée => supprimer ? - - - -ADMIN Dernier modificateur = Gestionnaire de ref. - -Ancien seuil 800€ doit rester valable pour anciens matos +======= TODO A VOIR OU RE-VERIFIER (toujours nécessaire ?) ======= + - Profils qui peuvent éditer/modifier les catégories / sous catégories dans une fiche matériel existante + En particulier les personnes qui ont un rôle de « responsable ». + Peuvent-elles modifier la catégorie/sous-catégorie d’un matériel existant ? + Si non, ça serait bien pratique qu’elles le puissent + car seul superadmin peut le faire... + +(Elodie) Install DCD sur postes : +- Carole (+titreuse) +- Marjorie et Dorine en premier lieu. +- Quand elles reviendront : Nathalie et Joëlle. +- Partager les imprimantes de Jean-Louis (pour Roche) et Carole (pour Belin) +- install GEPI -Responsable = groupe métier, ou projet, ou pôle (PIME), MAIS PAS thématique + *) Check extension ldap dans page web installation + + *) Augmenter taille upload de mon labo + + *) Créer une page qui liste les gestionnaires + + + *) SUPERADMIN + => par défaut, au minimum, mêmes droits que ADMIN + => mais il peut avoir des droits EN PLUS (jamais en moins) + Donc, en fait, SUPERADMIN = ADMIN (mais superadmin peut éventuellemet faire encore plus de choses) + (SUPERADMIN = ADMIN++) (SUPERADMIN >= ADMIN) + + *) Vincent : + - email pas trouvé (ancienne fiche de vincent) -Bug groupe thématique dans groupe metier sur fiche materiel -(+ virer “code comptable” et changer le nom des champs eotp, ajouter ligne budgétaire…) + *) LDAP trou sécu (autres labos) : user se connecte avec bad mdp + + + == DEPRECATED == -Procédure accueil : ->=10K obligatoire (inventaire comptable) -<10K : possible quand même (inventaire physique) -Bouton “Je veux commander un matos” + Erreurs qu'on ne voit que si on met + 'errorLevel' => E_ALL, + dans app.php : + + + Deprecated (16384): Plugin::load() is deprecated. Use Application::addPlugin() instead. This method will be removed in 4.0.0. - /Users/epallier/_PROJ/_W/PROJ_LABINVENT/SOURCE/labinvent202101/config/bootstrap.php, line: 260 + You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. [CORE/src/Core/functions.php, line 311] -Mail “Matériel à commander (Fiche inventirap n° XXX)” : -Ce mail est destiné au gestionnaire “untel” -Acheteur/Demandeur : -Utilisateur : -Désignation : -Description : -A commander sur le(s) budget(s) : -Devis en pièce jointe +Deprecated (16384): Plugin::load() is deprecated. Use Application::addPlugin() instead. This method will be removed in 4.0.0. - /Users/epallier/_PROJ/_W/PROJ_LABINVENT/SOURCE/labinvent202101/config/bootstrap.php, line: 265 + You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. [CORE/src/Core/functions.php, line 311] +Deprecated (16384): Plugin::load() is deprecated. Use Application::addPlugin() instead. This method will be removed in 4.0.0. - /Users/epallier/_PROJ/_W/PROJ_LABINVENT/SOURCE/labinvent202101/config/bootstrap.php, line: 278 + You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. [CORE/src/Core/functions.php, line 311] +Deprecated (16384): Plugin::bootstrap() is deprecated. This method will be removed in 4.0.0. - /Users/epallier/_PROJ/_W/PROJ_LABINVENT/SOURCE/labinvent202101/vendor/cakephp/cakephp/src/Core/Plugin.php, line: 173 + You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. [CORE/src/Core/functions.php, line 311] -Nouvelle fiche matos : -Bouton “Commander” -=> Si ADMIN, devient “Enregistrer” (et pas de mail envoyé) -Menu Matos/Nouveau materiel => ADMIN only +Strict (2048): Non-static method App\Model\Table\AppTable::isValidRole() should not be called statically [APP/Model/Table/MaterielsTable.php, line 296] +Warning (2): Cannot modify header information - headers already sent by (output started at /var/www/html/inventirap-test1/vendor/cakephp/cakephp/src/Error/Debugger.php:853) [APP/Template/Layout/default.ctp, line 43] -Bugfix : un profil Utilisateur ne doit pas pouvoir changer l’acheteur (acheteur = lui) !!! + *) instance docker sur hyperion2 (et supprimer old pweb2) + + *) src/Application.php +- (Imprimer étiquette : toujours possible ?) +- prévoir une alerte quand on save un champ qui n'est pas dans la BD (genre resp_credit...) +print etiquette pour les 2 serveurs + tester fin garantie orange -Outils : voir/gérer ? +saisir les personnes du gt2i et de tous les groupes... -Photo : type ? -documents.photo = TRUE +- (b) Bugfix fournisseur perdu (et champ vide qui n'est plus modifiable !) après validation du matos + (quand il manque un champ pour valider), et pourtant bien enregistré dans listes des fournisseurs -Fournisseurs : src/Template/Common/add_edit.ctp +======= TO DO MIGRÉS DANS REDMINE LE 30/11/2021 ======= Ecran d’accueil : Voir Mes matériels (que j’ai achetés) @@ -314,76 +313,7 @@ Voir les Matériels que j’utilise (find sur champ utilisateur) (admin) “Voir les matériels ‘zombie’” (materiels CREATED depuis longtemps, et toujours pas ORDERED ou VALIDATED => sans doute à virer (pour ne pas fausser les stats...) (admin) Voir matos à archiver - - - - - - - - -======= TODO1 - BUGFIXES (ou TRES URGENT) ======= - -- (MT) Install locale, puis répondre stagiaire - DB complète à mettre à jour -- install GEPI - -User = Acheteur - -(Elodie) Install DCD sur postes : -- Carole (+titreuse) -- Marjorie et Dorine en premier lieu. -- Quand elles reviendront : Nathalie et Joëlle. -- Partager les imprimantes de Jean-Louis (pour Roche) et Carole (pour Belin) - - -TAG version 3.7.9 finale ANCIEN workflow - -- technique/admin inutile - - -Commencer à implémenter le nouveau workflow v5 : -- Gestionnaire de ref : + “Je ne sais pas” -- lot1 toujours obligatoire (en dur dans Table), LOT2 = ssi status > CREATED (géré via soft dans add_edit(), la vue ne doit rien gérer du tout !) -- Infos obligatoires LOT1 -- Commande directe ou seulement pour inventaire : "Enregistrer & Commander" et "Enregistrer seulement" -- Supprimer un CREATED + Annuler cde + tobeordered=true + edit possible -- Validation (LOT2 obligatoire) + invalider + edit LOT2 - - - - - - - - Profils qui peuvent éditer/modifier les catégories / sous catégories dans une fiche matériel existante - En particulier les personnes qui ont un rôle de « responsable ». - Peuvent-elles modifier la catégorie/sous-catégorie d’un matériel existant ? - Si non, ça serait bien pratique qu’elles le puissent - car seul superadmin peut le faire... - - -======= TODO ======= - - - *) TESTS !!!! - *) Les tests doivent se faire avec la config par défaut (et non pas celle spécifique du labo) - *) Ajouter test Commande (avec devis joint !) - - *) - Relance auto lors de suivis périodiques - - *) DOMPDF : pb Qrcode absent sur fiche pdf (mais présent sur page web), alors que le QrCode est bien généré et que le chemin dans le pdf est OK !!! -Par contre, ok avec FPDF - - *) LDAP trou sécu (autres labos) : user se connecte avec bad mdp - - *) => update matos lifecycle diag - - - - - *) Quand on supprime un matos de “ma liste”, il faut revenir à “ma liste”, pas à “tous les matos” @@ -391,30 +321,13 @@ Par contre, ok avec FPDF => utiliser plutot localhost:8081 (update doc) Mais ca serait mieux de faire localhost:8080 pour le site web et :8081 pour phpmyadmin (et non pas l’inverse !!) - - *) Check extension ldap dans page web installation - - *) Augmenter taille upload de mon labo - - *) Créer une page qui liste les gestionnaires - - *) SUPERADMIN - => par défaut, au minimum, mêmes droits que ADMIN - => mais il peut avoir des droits EN PLUS (jamais en moins) - Donc, en fait, SUPERADMIN = ADMIN (mais superadmin peut éventuellemet faire encore plus de choses) - (SUPERADMIN = ADMIN++) (SUPERADMIN >= ADMIN) - + *) config champs matos : ajouter HIDDEN_FIELDS (sauf admin) : - section administrative - status - numéro inventaire (hidden par défaut pour l'édition) - ... - - - *) Vincent : - - email pas trouvé (ancienne fiche de vincent) - - doc attaché : nom doit être modifiable - + *) Resp : - voir menus Outils & Autres (ou pas) ? - respb de qqch !!! @@ -422,107 +335,48 @@ Mais ca serait mieux de faire localhost:8080 pour le site web et :8081 pour phpm *) qqsoit user : doit pouvoir voir sa fiche user (no modif) => mais pas celle des autres... - - - *) Mail "[LabInvent] Ajout de matériel(s)" => c'est quoi ? ==> voir message de log associé - (quelle diff avec "[LabInvent] Ajout d'un matériel" ??) - + *) + validation (=livré ET payé) + Facture jointe (si > 10K) + Détail lieu stockage + S/N demandé ssi > 10K€ - *) + *) TBO ou ARCHIVED (= validated) : ne pas autoriser edit ou delete des docs attachés Autoriser certaines choses pour TBO : - edit (mais pas delete) - print label - add doc attaché - (pas emprunt ni suivi) - - + *) => update matos lifecycle diag - *) - validation (=livré ET payé) - Facture jointe (si > 10K) - Détail lieu stockage + S/N demandé ssi > 10K€ + *) DOMPDF : pb Qrcode absent sur fiche pdf (mais présent sur page web), alors que le QrCode est bien généré et que le chemin dans le pdf est OK !!! +Par contre, ok avec FPDF *) Procédures pour les utilisateurs et les gestionnaires désormais configurable via le fichier de conf - - *) - Généraliser l'usage de Element/buttons_edit_del.ctp dans tous les formulaires de view - + *) TESTS !!!! + *) Les tests doivent se faire avec la config par défaut (et non pas celle spécifique du labo) + *) Ajouter test Commande (avec devis joint !) + + *) Gérer les autorisations (ACL) via fichier de conf - - - == DEPRECATED == - - Erreurs qu'on ne voit que si on met - 'errorLevel' => E_ALL, - dans app.php : - - - Deprecated (16384): Plugin::load() is deprecated. Use Application::addPlugin() instead. This method will be removed in 4.0.0. - /Users/epallier/_PROJ/_W/PROJ_LABINVENT/SOURCE/labinvent202101/config/bootstrap.php, line: 260 - You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. [CORE/src/Core/functions.php, line 311] - -Deprecated (16384): Plugin::load() is deprecated. Use Application::addPlugin() instead. This method will be removed in 4.0.0. - /Users/epallier/_PROJ/_W/PROJ_LABINVENT/SOURCE/labinvent202101/config/bootstrap.php, line: 265 - You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. [CORE/src/Core/functions.php, line 311] - -Deprecated (16384): Plugin::load() is deprecated. Use Application::addPlugin() instead. This method will be removed in 4.0.0. - /Users/epallier/_PROJ/_W/PROJ_LABINVENT/SOURCE/labinvent202101/config/bootstrap.php, line: 278 - You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. [CORE/src/Core/functions.php, line 311] - -Deprecated (16384): Plugin::bootstrap() is deprecated. This method will be removed in 4.0.0. - /Users/epallier/_PROJ/_W/PROJ_LABINVENT/SOURCE/labinvent202101/vendor/cakephp/cakephp/src/Core/Plugin.php, line: 173 - You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php. [CORE/src/Core/functions.php, line 311] - - -Strict (2048): Non-static method App\Model\Table\AppTable::isValidRole() should not be called statically [APP/Model/Table/MaterielsTable.php, line 296] - -Warning (2): Cannot modify header information - headers already sent by (output started at /var/www/html/inventirap-test1/vendor/cakephp/cakephp/src/Error/Debugger.php:853) [APP/Template/Layout/default.ctp, line 43] - - - +- besoin IP2I/LMA : + - materiels/index : on peut ajouter un filtre "Site" (et Dépt), et un filtre "tous/matos sensible/matos non sensible" - - - == CAN WAIT == - - *) instance docker sur hyperion2 (et supprimer old pweb2) - - *) src/Application.php - - *) On doit pouvoir supprimer un devis sur un matériel commandé (TOBEORDERED) à condition qu'il en reste au moins 1 => du coup, astuce, on peut REMPLACER un devis en ajoutant le nouveau puis en supprimant l'ancien - - (Imprimer étiquette : toujours possible ?) - - - - - - -TODO : - -- besoin IP2I/LMA : - - pour materiels/view(/edit/delete) => le user courant ne peut pas voir un materiel "sensible" qui n'est pas du même Site (Dépt) que lui - - pour materiels/index et /find et /export => il faut exclure les matos "sensibles" qui ne sont pas du même site que le user courant - - materiels/index : on peut ajouter un filtre "Site" (et Dépt), et un filtre "tous/matos sensible/matos non sensible" - -- prévoir une alerte quand on save un champ qui n'est pas dans la BD (genre resp_credit...) - - gérer les liens url automatiquement dans champ description (rendre cliquable) - - - - améliorer affichage tableau stats : - 4415 matos en tout sur index, mais 4406 seulement dans stats - - - + - GENERICITÉ & REFACTORISATION : - add_or_edit() générique @@ -533,31 +387,28 @@ TODO : - short_role AppController ligne 819 => généraliser - - emprunts/index generique + - prets/index generique - documents/index generique - - ProjetsController minimaliste, doit juste étendre AppController avec un minimum de changement - - fusionner groupe thematique et metier (et projet ?) : - => faire hériter les Controller et les Table d'une meme superclasse GroupController et GroupTable - => avoir un seul template - => c'est vraiment stupide d'avoir 2 classes qui font la meme chose... + - GROUP générique : fusionner groupe thematique et metier (et projet ?) : + - ProjetsController minimaliste, doit juste étendre AppController avec un minimum de changement + - Groupe thematique et metier : + => faire hériter les Controller et les Table d'une meme superclasse GroupController et GroupTable + => avoir un seul template + => c'est vraiment stupide d'avoir 2 classes qui font la meme chose... - Utiliser les vues "index" des entités associées pour la vue "view" de materiel (et suivi) : => éviter la redondance, le contenu est pratiquement le meme (???, sauf que les colonnes ne sont pas triables) - - Bien préciser quels sont les champs obligatoires avec une asterisque (et pour chaque LOT) - S/N à renseigner (recommended) ssi > 10000€ Ajouter champ attributes.condition = "prix > 10000" -======= NEXT ======= - -print etiquette pour les 2 serveurs + tester fin garantie orange -view générique à utiliser pour plusieurs entités + - view générique à utiliser pour plusieurs entités Vues génériques (index et view) : - savoir gérer les champs virtuels pour le tri @@ -567,23 +418,12 @@ Vues génériques (index et view) : - lieu_stockage = concat(site,lieu) - users : vue "index" avec (responsable) -- Suivis.statut => "en cours" ou "à terminer" => à calculer auto - - -saisir les personnes du gt2i et de tous les groupes... -groupe.users associés : ajouter "(responsable)" when relevant +- Suivis.statut => "en cours" ou "à terminer" => à calculer auto comment faire un tri sur la dernière colonne des stats (connexDurAvg) ? -erreur download depuis page documents/ (ou depuis vue du matériel) sur inventirap : erreur 404 (action impossible) - - -- (b) Bugfix fournisseur perdu (et champ vide qui n'est plus modifiable !) après validation du matos - (quand il manque un champ pour valider), et pourtant bien enregistré dans listes des fournisseurs - - - +(b) erreur download depuis page documents/ (ou depuis vue du matériel) sur inventirap : erreur 404 (action impossible) Utiliser les champs 'comment' de la config pour les labels des champs dans materiels/view et /add_edit @@ -595,7 +435,7 @@ Ne pas autoriser la commande via url si le bouton order est désactivé dans la ... -- Quelle est cette action ? le mail est un peu court... (ajout par copie ?) +(b) - Quelle est cette action ? le mail est un peu court... (ajout par copie ?) Titre "Ajout de matériel(s)" Nathalie Oziol a ajouté des matériels (action 'add') Vous recevez ce message car vous êtes concerné(e) par cette action effectuée sur l'inventaire des matériels du laboratoire @@ -610,9 +450,39 @@ Gestion multi-sites : - gestionnaires (admin) (et superadmin) continuent d'avoir accès à tout + + + + + + + + + + + + + + + + + +======= NEXT (TODO urgent) ======= + +rien ? + + + + + ======= CHANGES ======= ------- +01/12/2021 v5.4.3-3.7.9 + - (i) Tests : ajout d'un fichier de config de champs matériels spécialisé pour les TESTS : config/app_labinvent_mandatory_fields_test.yml + - (i) Passage de l'ensemble des tests (enfin !) + +------- 30/11/2021 v5.4.2-3.7.9 - (b) bugfix mysql sur filtrage materiels pour partitionnement par site (ça passait sur mysql récent mais pas sur vieux mysql) => requete sql plus propre diff --git a/README.md b/README.md index 0ccfd5d..1efab24 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- -Date: 30/11/2021 -Version: v5.4.2-3.7.9 +Date: 01/12/2021 +Version: v5.4.3-3.7.9 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) diff --git a/config/.gitignore b/config/.gitignore index a5e249c..a549db5 100755 --- a/config/.gitignore +++ b/config/.gitignore @@ -1,5 +1,5 @@ /app.php.ORIG -app_labinvent_mandatory_fields_*.yml app_labinvent_mandatory_fields.php app_labinvent_mandatory_fields.yml app_labinvent_authorizations* +/tmp/* diff --git a/config/app_labinvent_mandatory_fields.default.yml b/config/app_labinvent_mandatory_fields.default.yml index ee56b5b..9606fe0 100644 --- a/config/app_labinvent_mandatory_fields.default.yml +++ b/config/app_labinvent_mandatory_fields.default.yml @@ -20,11 +20,26 @@ MANDATORY_AND_READONLY_FIELDS: MANDATORY_FIELDS_FOR_LOT0: { fieldset_comment: Champs OBLIGATOIRES pour CRÉÉR une fiche matériel, - designation: { selected: '1', comment: Désignation, except_roles: '' }, description: { selected: '1', comment: Description, except_roles: '' }, sur_categorie_id: { selected: '1', comment: Domaine, except_roles: '' }, categorie_id: { selected: '1', comment: Catégorie, except_roles: '' }, nom_responsable: { selected: '1', comment: 'Nom de l''Acheteur', except_roles: '' }, email_responsable: { selected: '1', comment: 'Email de l''Acheteur', except_roles: '' }, nom_user: { selected: '1', comment: 'Nom de l''utilisateur', except_roles: '' } } + designation: { selected: '1', comment: Désignation, except_roles: '' }, + description: { selected: '1', comment: Description, except_roles: '' }, + sur_categorie_id: { selected: '1', comment: Domaine, except_roles: '' }, + categorie_id: { selected: '1', comment: Catégorie, except_roles: '' }, + nom_responsable: { selected: '1', comment: 'Nom de l''Acheteur', except_roles: '' }, + email_responsable: { selected: '1', comment: 'Email de l''Acheteur', except_roles: '' }, + nom_user: { selected: '1', comment: 'Nom de l''utilisateur', except_roles: '' } } UNEDITABLE_FIELDS_AFTER_LOT0: { fieldset_comment: Champs READONLY après la CRÉATION de la fiche matériel, - sur_categorie_id: { selected: '0', comment: 'Domaine', except_roles: [Administration] }, categorie_id: { selected: '0', comment: '', except_roles: [Administration] }, resp_credit: { selected: '0', comment: '', except_roles: [Administration] }, gestionnaire_id: { selected: '0', comment: '', except_roles: [Administration] }, fournisseur_id: { selected: '0', comment: '', except_roles: [Administration] }, organisme_id: { selected: '0', comment: '', except_roles: [Administration] }, prix_ht: { selected: '0', comment: '', except_roles: [Administration] }, budgets: { selected: '0', comment: '', except_roles: [Administration] }, DOC_DEVIS: { selected: '0', comment: '', except_roles: '' }, DOC_BC: { selected: '0', comment: '', except_roles: [Administration] } } + sur_categorie_id: { selected: '0', comment: 'Domaine', except_roles: [Administration] }, + categorie_id: { selected: '0', comment: '', except_roles: [Administration] }, + resp_credit: { selected: '0', comment: '', except_roles: [Administration] }, + gestionnaire_id: { selected: '0', comment: '', except_roles: [Administration] }, + fournisseur_id: { selected: '0', comment: '', except_roles: [Administration] }, + organisme_id: { selected: '0', comment: '', except_roles: [Administration] }, + prix_ht: { selected: '0', comment: '', except_roles: [Administration] }, + budgets: { selected: '0', comment: '', except_roles: [Administration] }, + DOC_DEVIS: { selected: '0', comment: '', except_roles: '' }, + DOC_BC: { selected: '0', comment: '', except_roles: [Administration] } } RECOMMENDED_FIELDS_AFTER_LOT0: { fieldset_comment: Champs RECOMMANDÉS après la CRÉATION de la fiche matériel, diff --git a/config/app_labinvent_mandatory_fields_test.yml b/config/app_labinvent_mandatory_fields_test.yml new file mode 100644 index 0000000..e96080a --- /dev/null +++ b/config/app_labinvent_mandatory_fields_test.yml @@ -0,0 +1,116 @@ +# TEST config file + +MANDATORY_AND_READONLY_FIELDS: + + GENERAL: { + fieldset_comment: Paramètres généraux, + HAS_ORDER_BUTTON: { selected: '1', comment: 'Ajouter un bouton COMMANDE sur la fiche matériel ?' } } + + UNEDITABLE_FIELDS: { + fieldset_comment: Champs READONLY dès le début, + designation: { selected: '0', comment: Désignation, except_roles: '' }, + description: { selected: '0', comment: 'Description, commentaire explicatif', except_roles: '' }, + nom_responsable: { selected: '1', comment: 'nom du responsable', except_roles: [Responsable, Administration] }, + eotp: { selected: '1', comment: 'entité-s dépensière-s, budget-s', except_roles: [Administration] }, + numero_commande: { selected: '1', comment: 'N° BC', except_roles: [Administration] }, + numero_inventaire_organisme: { selected: '1', comment: '', except_roles: [Administration] }, + numero_inventaire_old: { selected: '1', comment: 'Ancien numéro d''inventaire si existe', except_roles: [Administration] }, + numero_laboratoire: { selected: '1', comment: '', except_roles: '' } } + + + # LOT 1 - Création de la fiche matériel + + MANDATORY_FIELDS_FOR_LOT0: { + fieldset_comment: Champs OBLIGATOIRES pour CRÉÉR une fiche matériel, + designation: { selected: '1', comment: Désignation, except_roles: '' }, + description: { selected: '1', comment: Description, except_roles: '' }, + sur_categorie_id: { selected: '1', comment: Domaine, except_roles: '' }, + categorie_id: { selected: '1', comment: Catégorie, except_roles: '' }, + nom_responsable: { selected: '1', comment: 'Nom de l''Acheteur', except_roles: '' }, + email_responsable: { selected: '1', comment: 'Email de l''Acheteur', except_roles: '' }, + nom_user: { selected: '1', comment: 'Nom de l''utilisateur', except_roles: '' } } + + UNEDITABLE_FIELDS_AFTER_LOT0: { + fieldset_comment: Champs READONLY après la CRÉATION de la fiche matériel, + sur_categorie_id: { selected: '0', comment: 'Domaine', except_roles: [Administration] }, + categorie_id: { selected: '0', comment: '', except_roles: [Administration] }, + resp_credit: { selected: '0', comment: '', except_roles: [Administration] }, + gestionnaire_id: { selected: '0', comment: '', except_roles: [Administration] }, + fournisseur_id: { selected: '0', comment: '', except_roles: [Administration] }, + organisme_id: { selected: '0', comment: '', except_roles: [Administration] }, + prix_ht: { selected: '0', comment: '', except_roles: [Administration] }, + budgets: { selected: '0', comment: '', except_roles: [Administration] }, + DOC_DEVIS: { selected: '0', comment: '', except_roles: '' }, + DOC_BC: { selected: '0', comment: '', except_roles: [Administration] } } + + RECOMMENDED_FIELDS_AFTER_LOT0: { + fieldset_comment: Champs RECOMMANDÉS après la CRÉATION de la fiche matériel, + etiquette: { selected: '0', comment: 'd''imprimer l''étiquette associée et de la coller sur le matériel', except_roles: '' }, numero_inventaire_organisme: { selected: '0', comment: 'de renseigner le champ ''N° inventaire comptable/tutelles _Organisme_''', except_roles: '' }, DOC_BC: { selected: '0', comment: 'd''ajouter le Bon de Commande', except_roles: '' }, DOC_BL: { selected: '0', comment: 'd''ajouter le Bon de Livraison', except_roles: '' }, DOC_FACTURE: { selected: '0', comment: 'd''ajouter la Facture', except_roles: '' } } + + + # LOT 1 - Demamnde d'Achat (Commande) + + MANDATORY_FIELDS_FOR_LOT1: { + fieldset_comment: 'Champs OBLIGATOIRES pour passer la COMMANDE (en plus du LOT 0)', + organisme_id: { selected: '1', comment: Organisme, except_roles: '' }, + prix_ht: { selected: '1', comment: 'Prix HT', except_roles: '' }, + resp_credit: { selected: '0', comment: 'Responsable du crédit', except_roles: '' }, + gestionnaire_id: { selected: '1', comment: 'Gestionnaire de référence', except_roles: '' }, + fournisseur_id: { selected: '1', comment: Fournisseur, except_roles: '' }, + budgets: { selected: '1', comment: Budgets, except_roles: '' }, + DOC_DEVIS: { selected: '0', comment: Devis, except_roles: '' } } + + UNEDITABLE_FIELDS_AFTER_LOT1: { + fieldset_comment: 'Champs READONLY après avoir passé la COMMANDE (en plus du LOT 0)', + sur_categorie_id: { selected: '1', comment: 'Domaine', except_roles: [Administration] }, categorie_id: { selected: '1', comment: '', except_roles: [Administration] }, + resp_credit: { selected: '1', comment: 'Responsable du crédit', except_roles: [Administration] }, + gestionnaire_id: { selected: '1', comment: 'Gestionnaire de référence', except_roles: [Administration] }, + fournisseur_id: { selected: '1', comment: 'Fournisseur', except_roles: [Administration] }, + organisme_id: { selected: '1', comment: 'Organisme', except_roles: [Administration] }, + prix_ht: { selected: '1', comment: 'Prix HT', except_roles: [Administration] }, + budgets: { selected: '1', comment: 'Budgets', except_roles: [Administration] }, + DOC_DEVIS: { selected: '1', comment: 'Devis joint', except_roles: '' }, + DOC_BC: { selected: '1', comment: 'BC joint', except_roles: [Administration] } } + + RECOMMENDED_FIELDS_AFTER_LOT1: { + fieldset_comment: 'Champs RECOMMANDÉS après avoir passé la COMMANDE (en plus du LOT 0)', + etiquette: { selected: '0', comment: 'd''imprimer l''étiquette associée et de la coller sur le matériel', except_roles: '' }, numero_inventaire_organisme: { selected: '0', comment: 'de renseigner le champ ''N° inventaire comptable/tutelles _Organisme_''', except_roles: '' }, DOC_BC: { selected: '0', comment: 'd''ajouter le Bon de Commande', except_roles: '' }, DOC_BL: { selected: '0', comment: 'd''ajouter le Bon de Livraison', except_roles: '' }, DOC_FACTURE: { selected: '0', comment: 'd''ajouter la Facture', except_roles: '' } } + + + # LOT 2 - Validation, Livraison (matériel livré et payé) + + MANDATORY_FIELDS_FOR_LOT2: { + fieldset_comment: 'Champs OBLIGATOIRES pour VALIDER la livraison (en plus du LOT 1)', + date_acquisition: { selected: '1', comment: 'Date d''achat', except_roles: '' }, + date_reception: { selected: '1', comment: 'Date de livraison', except_roles: '' }, + site_id: { selected: '0', comment: Site, except_roles: '' }, + lieu_detail: { selected: '0', comment: 'Lieu de stockage', except_roles: '' }, + eotp: { selected: '1', comment: 'Entité(s) dépensière(s), budget(s)', except_roles: '' }, + numero_commande: { selected: '1', comment: 'Num. BC', except_roles: '' }, + DOC_DEVIS: { selected: '0', comment: 'Devis joint', except_roles: '' } } + + UNEDITABLE_FIELDS_AFTER_LOT2: { + fieldset_comment: 'Champs READONLY après VALIDATION de la livraison (en plus du LOT 1)', + sur_categorie_id: { selected: '1', comment: 'Domaine', except_roles: '' }, + categorie_id: { selected: '1', comment: 'Catégorie', except_roles: '' }, + date_acquisition: { selected: '1', comment: 'Date de commande', except_roles: '' }, + date_reception: { selected: '1', comment: 'Date de livraison', except_roles: '' }, + eotp: { selected: '1', comment: 'Entité(s) dépensière(s)', except_roles: '' }, + numero_commande: { selected: '1', comment: 'N° BC', except_roles: '' }, + DOC_BC: { selected: '1', comment: 'BC joint', except_roles: '' }, + DOC_BL: { selected: '1', comment: 'BL joint', except_roles: '' }, + DOC_FACTURE: { selected: '1', comment: 'Facture jointe', except_roles: '' } } + + RECOMMENDED_FIELDS_AFTER_LOT2: { + fieldset_comment: 'Champs RECOMMANDÉS après VALIDATION de la livraison (en plus du LOT 1)', + etiquette: { selected: '1', comment: 'd''imprimer l''étiquette associée et de la coller sur le matériel', except_roles: '' }, + numero_inventaire_organisme: { selected: '1', comment: 'de renseigner le champ ''N° inventaire comptable/tutelles _Organisme_''', except_roles: '' }, + numero_serie: { selected: '0', comment: 'de renseigner le numéro de série du matériel', except_roles: '' }, + DOC_BC: { selected: '1', comment: 'd''ajouter le Bon de Commande', except_roles: '' }, + DOC_BL: { selected: '1', comment: 'd''ajouter le Bon de Livraison', except_roles: '' }, + DOC_FACTURE: { selected: '1', comment: 'd''ajouter la Facture', except_roles: '' } } + + + # LOT 3 - Archivage (pas encore implémenté) + #MANDATORY_FIELDS_FOR_LOT3: {} + #UNEDITABLE_FIELDS_AFTER_LOT3: {} diff --git a/config/bootstrap.php b/config/bootstrap.php index dcd39f3..2b462d0 100755 --- a/config/bootstrap.php +++ b/config/bootstrap.php @@ -109,34 +109,51 @@ try { exit($e->getMessage() . "\n"); } + +# Affiche "true" si on est en mode test +# (cette constante est définie dans /tests/bootstrap.php) +//debug ( defined('_IN_TEST_MODE') ); + + // (EP 2021 09 Ajout nouveaux fichiers config pour les champs obligatoires (et les autorisations)) //$config_mandatory_fields_file_name = 'app_labinvent_mandatory_fields'; // Si le fichier de conf n'existe pas, on le crée en copiant le fichier par défaut //if ( !file_exists(CONFIG.DS.$config_mandatory_fields_file_name.'.yml') ) //$config_matos_full_file_name = $config_matos_full_file_name_default = CONFIG.DS.CONFIG_MATERIEL_FIELDS_FILE_NAME; -$config_matos_full_file_name = $config_matos_full_file_name_default = CONFIG_MATERIEL_FIELDS_FILE_NAME; +$config_matos_file_name = $config_matos_file_name_default = CONFIG_MATERIEL_FIELDS_FILE_NAME; //$config_matos_full_file_name_default = $config_matos_full_file_name; -$config_matos_full_file_name .= '.yml'; -$config_matos_full_file_name_default .= '.default.yml'; + +if (defined('_IN_TEST_MODE')) $config_matos_file_name .= '_test'; //if ( !file_exists($config_matos_full_file_name) ) copy($config_matos_full_file_name_default, $config_matos_full_file_name); try { Configure::config('my_yaml_engine', new YamlConfig()); //Configure::load($config_mandatory_fields_file_name, 'yaml', true); - Configure::load(CONFIG_MATERIEL_FIELDS_FILE_NAME, 'my_yaml_engine'); + Configure::load($config_matos_file_name, 'my_yaml_engine'); + //Configure::load(CONFIG_MATERIEL_FIELDS_FILE_NAME, 'my_yaml_engine'); //Configure::load('app_labinvent_mandatory_fields_IP2I', 'yaml'); //Configure::load('app_labinvent_authorizations', 'yaml'); } catch (\Exception $e) { - echo("
config/bootstrap.php: Impossible de charger le fichier de configuration des champs matériels (".CONFIG.DS.CONFIG_MATERIEL_FIELDS_FILE_NAME.".yml)"); + $config_matos_file_name .= '.yml'; + $config_matos_file_name_default .= '.default.yml'; + echo("
config/bootstrap.php: Impossible de charger le fichier de configuration des champs matériels (".CONFIG.DS.$config_matos_file_name.")"); echo("
- soit ce fichier n'est pas accessible en lecture par le serveur web (attention, il faut aussi qu'il soit accessible en écriture)"); echo("
- soit il n'existe pas => dans ce cas, créez le en faisant une copie du fichier de configuration par défaut :"); echo("
cd ".CONFIG); - echo("
cp $config_matos_full_file_name_default $config_matos_full_file_name"); - echo("
chown webserver_user_name $config_matos_full_file_name"); - echo("
chmod 600 $config_matos_full_file_name"); + echo("
cp $config_matos_file_name_default $config_matos_file_name"); + echo("
chown webserver_user_name $config_matos_file_name"); + echo("
chmod 600 $config_matos_file_name"); echo("
(si vous ne voulez pas faire le chown, faite plutot un chmod 666, moins propre, mais marche aussi)"); die(); } + +/* Pour voir quelle config on lit (test ou prod ?) +$data = Configure::read('MANDATORY_AND_READONLY_FIELDS.MANDATORY_FIELDS_FOR_LOT2'); +debug($data); +*/ + + + // Load an environment local configuration file. // You can use a file like app_local.php to provide local overrides to your // shared configuration. diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 23aaecf..74fbbcc 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -2941,6 +2941,9 @@ class MaterielsController extends AppController { * - VALIDATED => CREATED (il faudra commander à nouveau si le matos était commandé...) */ if ($newStatus == 'CREATED') { + //$materiel->status = $this->Materiels->getPreviousStatusFrom($materiel->status); + $materiel->status = $materiel->getPreviousStatus(); + /* if ($materiel->status == 'ARCHIVED') $materiel->status = 'TOBEARCHIVED'; elseif ($materiel->status == 'TOBEARCHIVED') @@ -2948,6 +2951,7 @@ class MaterielsController extends AppController { // Par défaut => CREATED (VALIDATED ou TOBEORDERED => CREATED) else $materiel->status = 'CREATED'; + */ } // Set new status else $materiel->status = $newStatus; @@ -3264,7 +3268,8 @@ class MaterielsController extends AppController { */ public function statusCreated($id = null, $from = 'index') { - $this->_statusSetTo('CREATED', "Le matériel a bien été rétrogradé au statut 'CRÉÉ'", $id, $from); + $this->_statusSetTo('CREATED', "Le statut du matériel a bien été rétrogradé", $id, $from); + //$this->_statusSetTo('CREATED', "Le matériel a bien été rétrogradé au statut 'CRÉÉ'", $id, $from); } /** diff --git a/src/Model/Entity/Materiel.php b/src/Model/Entity/Materiel.php index 04355cb..81143d1 100755 --- a/src/Model/Entity/Materiel.php +++ b/src/Model/Entity/Materiel.php @@ -88,7 +88,12 @@ class Materiel extends Entity { // Ce qui s'affiche quand on fait echo $entity public function __toString() { return $this->designation; } - + + public function getPreviousStatus() { + //debug($this->getSource()); exit; // 'Materiels' (str) + return MaterielsTable::getPreviousStatusFrom($this->status); + } + public function check_date_is_not_too_old($date_field_name) { $d = $this->$date_field_name; if (is_null($d)) return true; diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index 8e405c2..4ff60eb 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -228,7 +228,14 @@ class MaterielsTable extends AppTable 'ARCHIVED' ); - public function toto() { return "titi"; } + //public function toto() { return "titi"; } + + public static function getPreviousStatusFrom($current_status) { + if ($current_status == 'ARCHIVED') return 'TOBEARCHIVED'; + if ($current_status == 'TOBEARCHIVED') return 'VALIDATED'; + // Par défaut => CREATED (VALIDATED ou TOBEORDERED => CREATED) + return 'CREATED'; + } public static function getLabName() { // Singleton (on ne lit qu'1 seule fois la config !!!) diff --git a/tests/Fixture/MaterielsFixture.php b/tests/Fixture/MaterielsFixture.php index 0837854..0cdd708 100755 --- a/tests/Fixture/MaterielsFixture.php +++ b/tests/Fixture/MaterielsFixture.php @@ -681,6 +681,7 @@ class MaterielsFixture extends TestFixture { // matos CREATED owned by USER [ //'id' => 1, + 'status' => 'CREATED', // TODO: définir budgets comme champ optionnel dans la BD !!! 'budgets' => 'toto', 'designation' => 'matos 1 USER (C)', @@ -693,7 +694,6 @@ class MaterielsFixture extends TestFixture { 'description' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.', 'materiel_administratif' => 0, 'materiel_technique' => 1, - 'status' => 'CREATED', //'status' => 'VALIDATED', //'date_acquisition' => '2018-04-19', // 2014-04-19 //'date_acquisition' => yyyy1.'-04-19', // 2014-04-19 @@ -737,6 +737,7 @@ class MaterielsFixture extends TestFixture { // matos CREATED owned by anybody [ //'id' => 2, + 'status' => 'CREATED', // TODO: définir budgets comme champ optionnel dans la BD !!! 'budgets' => 'toto', 'designation' => 'Matos Test 2 (C)', @@ -749,7 +750,6 @@ class MaterielsFixture extends TestFixture { 'description' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.', 'materiel_administratif' => 0, 'materiel_technique' => 1, - 'status' => 'CREATED', //'date_acquisition' => '2019-04-19', // 2015-04-19 //'date_acquisition' => yyyy2.'-'.mmdd1, // 2015-04-19 'date_acquisition' => yyyy2mmdd1, @@ -789,6 +789,7 @@ class MaterielsFixture extends TestFixture { // matos VALIDATED (et administratif) owned by anybody [ //'id' => 3, + 'status' => 'VALIDATED', // TODO: définir budgets comme champ optionnel dans la BD !!! 'budgets' => 'toto', 'designation' => 'Test 3 (V)', @@ -800,7 +801,6 @@ class MaterielsFixture extends TestFixture { 'description' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.', 'materiel_administratif' => 1, 'materiel_technique' => 1, - 'status' => 'VALIDATED', //'date_acquisition' => '2020-05-11', // 2016-05-11 //'date_acquisition' => yyyy2.'-'.mmdd2, 'date_acquisition' => yyyy2mmdd2, @@ -836,8 +836,11 @@ class MaterielsFixture extends TestFixture { //'nom_responsable' => 'test0 test9' [ 'id' => 11, + + 'status' => 'CREATED', // TODO: définir budgets comme champ optionnel dans la BD !!! 'budgets' => 'toto', + 'designation' => 'Test 11 (C)', 'sur_categorie_id' => 1, 'categorie_id' => 1, @@ -848,7 +851,6 @@ class MaterielsFixture extends TestFixture { 'description' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.', 'materiel_administratif' => 1, 'materiel_technique' => 1, - 'status' => 'CREATED', //'date_acquisition' => '2020-05-11', // +4 //'date_acquisition' => yyyy2.'-'.mmdd1, 'date_acquisition' => yyyy2mmdd2, @@ -888,6 +890,7 @@ class MaterielsFixture extends TestFixture { // matos VALIDATED owned by anybody [ //'id' => 12, + 'status' => 'VALIDATED', // TODO: définir budgets comme champ optionnel dans la BD !!! 'budgets' => 'toto', 'designation' => 'Test 12 (V)', @@ -899,7 +902,6 @@ class MaterielsFixture extends TestFixture { 'description' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.', 'materiel_administratif' => 1, 'materiel_technique' => 1, - 'status' => 'VALIDATED', //'date_acquisition' => '2020-05-11', // + 4 //'date_acquisition' => yyyy2.'-'.mmdd2, 'date_acquisition' => yyyy2mmdd2, @@ -937,6 +939,7 @@ class MaterielsFixture extends TestFixture { // matos TBA owned by anybody [ //'id' => 13, + 'status' => 'TOBEARCHIVED', // TODO: définir budgets comme champ optionnel dans la BD !!! 'budgets' => 'toto', 'designation' => 'Test 13 (TBA)', @@ -948,7 +951,6 @@ class MaterielsFixture extends TestFixture { 'description' => 'TEST COPIE MATERIEL', 'materiel_administratif' => 1, 'materiel_technique' => 1, - 'status' => 'TOBEARCHIVED', //'date_acquisition' => '2020-05-11', // +4 'date_acquisition' => yyyy2mmdd2, 'prix_ht' => 75.00, diff --git a/tests/TestCase/Controller/General.php b/tests/TestCase/Controller/General.php index 8ab3df4..a12ba88 100644 --- a/tests/TestCase/Controller/General.php +++ b/tests/TestCase/Controller/General.php @@ -14,6 +14,9 @@ use Cake\Http\Exception\NotImplementedException; use Cake\Utility\Inflector; use App\Controller\UsersController; +use Cake\Core\Configure; + + //use App\Controller\MaterielsController; /** @@ -148,6 +151,14 @@ class General extends TestCase { $this->assertTextEquals(1, $confLabinvent->test, 'On ne lit pas la bonne configuration'); $this->assertTextEquals(800, $confLabinvent->prix_inventaire_administratif, 'On ne lit pas la bonne configuration'); $this->assertTextEquals('TEST', $confLabinvent->labNameShort, 'On ne lit pas la bonne configuration'); + + // On lit la config de test pour les champs materiels + /* + #Configure::config('my_yaml_engine', new YamlConfig()); + $filetoload = CORE_PATH . 'config' . DS . CONFIG_MATERIEL_FIELDS_FILE_NAME.'.test.yml'; + Configure::load($filetoload, 'my_yaml_engine'); + */ + } diff --git a/tests/TestCase/Controller/MaterielsControllerTest.php b/tests/TestCase/Controller/MaterielsControllerTest.php index a439127..7df4238 100755 --- a/tests/TestCase/Controller/MaterielsControllerTest.php +++ b/tests/TestCase/Controller/MaterielsControllerTest.php @@ -387,7 +387,7 @@ class MaterielsControllerTest extends General { * Basic ACL testing ($easyACL array rules) * ***************************************************************************** */ - public function testOLDEasyACL() { + public function DEACTIVATED_testOLDEasyACL() { $matCont = new MaterielsController(); $appCont = new AppController(); /* @@ -1957,13 +1957,12 @@ class MaterielsControllerTest extends General { 13 => '1', ]); - $this->get('/materiels/view/11'); - $statusC = $this->Materiels->getNiceStatus('CREATED'); $statusV = $this->Materiels->getNiceStatus('VALIDATED'); $statusTBA = $this->Materiels->getNiceStatus('TOBEARCHIVED'); $statusA = $this->Materiels->getNiceStatus('ARCHIVED'); + $this->get('/materiels/view/11'); //$this->assertResponseContains('VALIDATED', "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseContains($statusV, "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains($statusC, "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); @@ -1976,10 +1975,10 @@ class MaterielsControllerTest extends General { $this->assertResponseNotContains($statusTBA, "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains($statusA, "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); - $this->get('/materiels/view/13'); - $this->assertResponseContains($statusV, "(13) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); + $this->get('/materiels/view/13'); // TBA + $this->assertResponseNotContains($statusV, "(13) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains($statusC, "(13) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); - $this->assertResponseNotContains($statusTBA, "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); + $this->assertResponseContains($statusTBA, "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); $this->assertResponseNotContains($statusA, "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); } @@ -2626,6 +2625,7 @@ class MaterielsControllerTest extends General { private function _assertFlashMessageIsAsExpectedForAction($action, $SUCCESS=true) { // Par défaut, pas de message flash $expected_flash_message = []; + //debug($action); if (in_array($action, ['add', 'edit', 'delete', 'statusCreated', 'statusValidated', 'statusTobearchived', 'statusArchived'])) $expected_flash_message = 'Le matériel a bien été '; switch($action) { @@ -2640,11 +2640,12 @@ class MaterielsControllerTest extends General { break; case 'statusCreated': //$expected_flash_message .= 'rétrogradé au statut CREATED'; - $expected_flash_message .= "rétrogradé au statut 'CRÉÉ'"; + //$expected_flash_message .= "rétrogradé au statut 'CRÉÉ'"; + $expected_flash_message = "Le statut du matériel a bien été rétrogradé"; break; case 'statusValidated': $expected_flash_message .= 'validé'; - if (!$SUCCESS) $expected_flash_message = "Pour valider un matériel, le champ suivant ne doit pas être vide :"; + if (!$SUCCESS) $expected_flash_message = "Pour valider ce matériel, le champ suivant ne doit pas être vide :"; /* if (!$SUCCESS) $expected_flash_message = "Pour valider un matériel, les champs suivants ne doivent pas être vides :"; Date de reception, @@ -2725,9 +2726,17 @@ class MaterielsControllerTest extends General { $this->_doActionAndCheckResult($action, $id, $SUCCESS=false, $new_data); // 2) On vérifie qu'on peut le modifier si on le dévalide : + $m = $this->_resetMaterielToInitialStatus($m); + /* + $m->status = 'CREATED'; + $this->Materiels->save($m); + */ + /* $action = 'statusCreated'; $this->_doActionAndCheckResult($action, $id, $SUCCESS=true); + */ $this->_checkMaterielStatusChangedTo($id,'CREATED'); + $action = 'edit'; $this->_doActionAndCheckResult($action, $id, $SUCCESS=true, $new_data); $m = $this->Materiels->get($id); @@ -3069,7 +3078,13 @@ class MaterielsControllerTest extends General { // Check qu'on ne peut pas supprimer le materiel à moins de le devalider d'abord $this->_doActionAndCheckResult($action, $id, $SUCCESS=false); // Pour le supprimer, je dois d'abord le dévalider puis faire en sorte qu'il m'appartienne - $this->_doActionAndCheckResult('statusCreated', $id, $SUCCESS=true); + //$this->_doActionAndCheckResult('statusCreated', $id, $SUCCESS=true); + $m = $this->Materiels->get($id); + $m = $this->_resetMaterielToInitialStatus($m); + /* + $m->status = 'CREATED'; + $this->Materiels->save($m); + */ /////$this->_doActionAndCheckResult('edit', $id, $SUCCESS=true, [ 'nom_responsable' => 'user1 SUPER' ]); $this->_doActionAndCheckResult('edit', $id, $SUCCESS=true, [ 'nom_responsable' => 'SUPER user1' ]); $this->_doActionAndCheckResult($action, $id, $SUCCESS=true); @@ -3079,6 +3094,14 @@ class MaterielsControllerTest extends General { } + private function _resetMaterielToInitialStatus($m) { + $m->status = 'CREATED'; + $this->Materiels->save($m); + return $m; + } + + + diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 0ca191e..dfa0b28 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -5,8 +5,22 @@ * Add additional configuration/setup your application needs when running * unit tests in this file. */ + +// EP added 20211130 : pour savoir si je suis en mode test ou pas +// Voir comment je teste cette variable dans config/bootstrap.php +define('_IN_TEST_MODE', true); + + + + require dirname(__DIR__) . '/vendor/autoload.php'; require dirname(__DIR__) . '/config/bootstrap.php'; $_SERVER['PHP_SELF'] = '/'; + + + + + + -- libgit2 0.21.2