Commit c2680be46f23ecefed040a04f5cee606125726e8

Authored by Etienne Pallier
2 parents d96313ae 1450cd7a
Exists in master and in 1 other branch dev

Merge dev branch into master branch (vv3.7.9.61)

CHANGES.txt
1 1 CHANGEMENTS
2 2  
3   -(Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/commits/master)
  3 +<i>Liste plus détaillée des évolutions : https://gitlab.irap.omp.eu/epallier/labinvent/commits/master</i>
  4 +
  5 +TODO: - Nouvelle page web "Statistiques mensuelles" (/pages/stats)
4 6  
5   -La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#heading=h.2r55bflctpt5
6 7  
7 8 -----------------------------------------------------------------------------------------------------------
8 9  
  10 +
  11 +
  12 +-------
  13 +16/07/2020 v3.7.9.61 (EP)
  14 + - (e) Amélioration importante de la nouvelle page web "Changements" (/pages/changes)
  15 + - (b) Bugfix "sauf ARCHIVED" dans materiels/index/ (pour profils user et resp)
  16 + - (b) bugfix tests car maintenant materiels/index/ ne renvoit que les materiels de - 5 ans !!
  17 + - (i) Grosse amelioration tests liés au numéro inventaire incrémenté de 1 et au nb de matériels trouvés dans vue index (bien + souple qu'avant)
  18 + - (i) Grosse amelioration tests liés à la recherche de matériels testFind (bien + souple qu'avant)
  19 +
  20 +-------
  21 +13/07/2020 v3.7.9.60 (EP)
  22 + - (e) Nouvelle page web "Nouveautés" (/pages/changes) => CETTE PAGE ACTUELLE
  23 + - Changements migrés dans fichier CHANGES.txt et affichés proprement dans une nouvelle page web changes.ctp
  24 + - (e) Mise à jour page 'about' avec fichier LICENSE
  25 + - (b) Bugfix requete sql db-update-2020-06-10.sh pour IAS
  26 +
  27 +-------
9 28 10/07/2020 v3.7.9.58-59 (EP)
10   - - Nouveau filtre "age" (FINALISÉ) sur page index des matériels : Affichage des matériels par tranche d'âge (0-5 ans, 5-10, ...)
11   - - Amélioration des filtres par statut => gardent les paramètres (options) déjà sélectionnées (age, nb lines, tri...)
12   - - Bugfix url rewriting dans la page materiels/index pour supprimer le paramètre "page" car ça n'est pas pertinent et ça provoque plantages
13   - - Grosse refactorisation du javascript dans la page materiels/index pour utiliser le meme code pour les 2 filtres "age" et "nb lines"
14   - - Bugfixes code et nombreux petits bugfixes sur les css
  29 + - (e) Nouveau filtre "age" (FINALISÉ) sur page index des matériels (/materiels/index) : Affichage des matériels par tranche d'âge (0-5 ans, 5-10, ...)
  30 + - (e) Amélioration des filtres par statut => gardent les paramètres (options) déjà sélectionnées (age, nb lines, tri...)
  31 + - (b) Bugfix url rewriting dans la page materiels/index pour supprimer le paramètre "page" car ça n'est pas pertinent et ça provoque plantages
  32 + - (i) Grosse refactorisation du javascript dans la page materiels/index pour utiliser le meme code pour les 2 filtres "age" et "nb lines"
  33 + - (b) Bugfixes code et nombreux petits bugfixes sur les css
15 34  
  35 +-------
16 36 07/07/2020 v3.7.9.56-57 (EP)
17   - - Nouveau filtre "age" sur page index des matériels : Affichage des matériels par tranche d'âge (0-5 ans, 5-10, ...)
18   - - Materiel : technique ou/et inventoriable => trop compliqué et inutile => en fait c’est un OUX (exclusif)
  37 + - (e) Materiel : technique ou/et inventoriable => trop compliqué et inutile => en fait c’est un OUX (exclusif)
19 38 => simplifier en ne gardant qu'UNE SEULE case à cocher qui s'appelle "materiel technique".
20 39 => Si cette case n'est pas cochée, le prix doit alors être supérieur à 1000E
21 40 => par contre, on garde quand même le champ ds la BD au cas où.
22   - - Colorisation selon statut du matériel :
  41 + - (e) Colorisation selon statut du matériel :
23 42 CREATED => bleu
24 43 VALIDATED => vert
25 44 TBA => orange
26 45 ARCHIVED => rouge
27 46  
  47 +-------
28 48 06/07/2020 v3.7.9.54-55 (EP)
29 49 - Bugfix test SurCategories : marche maintenant sur php5 et php7
30   - - Fichier LICENSE (AGPL)
31   - - Conditions d'utilisation à accepter lors de l'installation
32   - - script ./INSTALLATION
33   - - Mode "nolimit" dans la config ("Superadmin a tous les droits", depuis menu Tools)
  50 + - (e) Fichier LICENSE (AGPL)
  51 + - (e) Conditions d'utilisation à accepter lors de l'installation
  52 + - (i) script ./INSTALLATION
  53 + - (i) Mode "nolimit" dans la config ("Superadmin a tous les droits", depuis menu Tools)
34 54 - Ajout d'un "alias" pour décrire chaque action de chaque controleur
35 55  
  56 +-------
36 57 03/07/2020 v3.7.9.53 (EP)
37   - - Bugfix Emprunts calcul sur les dates pourri : on utilise maintenant FrozenDate et FrozenTime de cakephp au lieu de DateTime de php
  58 + - (b) Bugfix Emprunts calcul sur les dates pourri : on utilise maintenant FrozenDate et FrozenTime de cakephp au lieu de DateTime de php
38 59  
  60 +-------
39 61 30/06/2020 v3.7.9.51-52 (EP)
40   - - Bugfix et refactorisation des actions documents /admission, /sortie, /ficheMateriel
41   - => désormais, on passe l'id du matos associé et non pas son numero d'inventaire !!! (mauvais raccourci)
42   - => ca permet de tester les conditions d'accès de ces actions en fonction du matériel concerné !!
  62 + - (b) Bugfix et refactorisation des actions documents /admission, /sortie, /ficheMateriel
  63 + => désormais, on passe l'id du matos associé et non pas son numero d'inventaire !!! (mauvais raccourci)
  64 + => ca permet de tester les conditions d'accès de ces actions en fonction du matériel concerné !!
43 65 - Bugfix test de ces mêmes actions (mal testées avant)
44 66 - L'ajout (/add) d'un suivi, emprunt, ou doc doit toujours se faire avec l'id de l'entité parente associée (en général materiel id)
45 67 => (/add/id) sinon refus
46 68 - ...
47 69  
  70 +-------
48 71 29/06/2020 v3.7.9.50 (EP)
49   - - Nouveau (et dernier dernier) super test ajouté : test du cycle de vie complet d'un matériel (CREATED => ... => ARCHIVED)
  72 + - (i) Nouveau (et dernier dernier) super test ajouté : test du cycle de vie complet d'un matériel (CREATED => ... => ARCHIVED)
50 73  
  74 +-------
51 75 26/06/2020 v3.7.9.48-49 (EP)
52   - - TEST3 : Ajout d'un 3ème (et DERNIER) gros test générique des vues index et view de Materiels (/materiels/index et /view) qui teste le CONTENU des vues pour TOUS les materiels de la BD de test (fixture), aussi bien dans la vue index globale que dans CHAQUE vue détaillée de chaque matériel (et surtout en vérifiant aussi la liste des entités associées (suivis,emprunts,documents).
  76 + - (i) TEST3 : Ajout d'un 3ème (et DERNIER) gros test générique des vues index et view de Materiels (/materiels/index et /view) qui teste le CONTENU des vues pour TOUS les materiels de la BD de test (fixture), aussi bien dans la vue index globale que dans CHAQUE vue détaillée de chaque matériel (et surtout en vérifiant aussi la liste des entités associées (suivis,emprunts,documents).
53 77  
  78 +-------
54 79 25/06/2020 v3.7.9.43-47 (EP)
55   - - TEST2 : Ajout d'un 2ème très gros test générique des vues index et view de Materiels (/materiels/index et /view) qui teste le CONTENU des vues (les boutons d'action)
  80 + - (i) TEST2 : Ajout d'un 2ème très gros test générique des vues index et view de Materiels (/materiels/index et /view) qui teste le CONTENU des vues (les boutons d'action)
56 81 à partir d'UN UNIQUE matériel de test qui est modifié à souhait pour essayer de représenter tous les grands cas possibles
57 82  
  83 +-------
58 84 23/06/2020 v3.7.9.40-42 (EP)
59   - - Nouvelle page qui affiche les messages de log PAR niveau (level info, debug, notice, error...) : disponible depuis la page Outils (/pages/logs)
60   - - Toules les actions importantes (add,edit,delete, changement statut...) sont désormais loggées et donc affichables via la page Outils ci-dessus
  85 + - (e) Nouvelle page qui affiche les messages de log PAR niveau (level info, debug, notice, error...) : disponible depuis la page Outils (/pages/logs)
  86 + - (i) Toules les actions importantes (add,edit,delete, changement statut...) sont désormais loggées et donc affichables via la page Outils ci-dessus
61 87 - Accélération de la recherche du numéro de version dans le fichier README, affichée à CHAQUE page web du site !!!
62 88  
  89 +-------
63 90 19/06/2020 v3.7.9.39 (EP)
64   - - TEST1 : Ajout d'un 1er très gros test générique automatique pour (presque) TOUTES les actions de (presque) TOUS les controleurs principaux (Materiels, Suivis, et Emprunts) mais aussi du controleur "quelconque" SurCategories (pour vérifier que ça marche aussi, et j'ai bien fait car il est spécial ne serait-ce que de par son nom !!!)
  91 + - (i) TEST1 : Ajout d'un 1er très gros test générique automatique pour (presque) TOUTES les actions de (presque) TOUS les controleurs principaux (Materiels, Suivis, et Emprunts) mais aussi du controleur "quelconque" SurCategories (pour vérifier que ça marche aussi, et j'ai bien fait car il est spécial ne serait-ce que de par son nom !!!)
65 92 - Dans ces tests génériques, on teste non seulement qu'une action s'exécute seulement quand elle y est autorisée, mais aussi qu'elle s'exécute correctement (au moins pour les actions CRUD : add,edit,delete...)
66 93  
  94 +-------
67 95 12/06/2020 v3.7.9.37 (EP)
68 96 - Amélioré l'action materiels/print_label_ruban (impression etiquette) : un peu plus conforme au standard, un peu moins bidouille qu'avant, et surtout plus besoin de la finir par un "sale" "exit" => donc on peut maintenant la tester, et c'est ce qui a été fait ! (elle est pas encore total nickel mais bon c'est mieux qu'avant)
69 97 - modifié Fixtures pour supprimer les 'id' explicites
70   - - bugfix action materiels/statusToBeArchived (ou statusToBearchived) => remplacé partout par statusTobearchived
  98 + - (b) bugfix action materiels/statusToBeArchived (ou statusToBearchived) => remplacé partout par statusTobearchived
71 99  
  100 +-------
72 101 10/06/2020 v3.7.9.35 (EP)
73 102 - Requete SQL pour répercuter tous les changements depuis avril !!!
74 103 - 1ère version officielle mise en PROD depuis un bail (presque 2 mois)
75 104  
  105 +-------
76 106 05/06/2020 v3.7.9.33 (EP)
77   - - bugfix : renommé groupe_thematique_id en groupes_thematique_id pour etre harmonisé partout et surtout avec "groupes_metier_id" !!!
78   - - AUTORISATIONS DESORMAIS ADAPTABLES POUR CHAQUE LABO => pris en compte (testé) aussi dans les tests avec setAuthorizations_TEST()
  107 + - (b) bugfix : renommé groupe_thematique_id en groupes_thematique_id pour etre harmonisé partout et surtout avec "groupes_metier_id" !!!
  108 + - (i) AUTORISATIONS DESORMAIS ADAPTABLES POUR CHAQUE LABO => pris en compte (testé) aussi dans les tests avec setAuthorizations_TEST()
79 109 => chaque labo peut désormais adapter les autorisations des utilisateurs à sa sauce !!!
80 110 => on part des règles générales par défaut, puis on adapte si besoin, cool non ?
81 111 - Vues view (déjà fait avant) et index : les boutons d'action (éditer, valider, supprimer...) s'affichent désormais en fonction des autorisations centralisées
82 112  
  113 +-------
83 114 04/06/2020 v3.7.9.30-31 (EP)
84   - - MISE À JOUR DE TOUS LES CONTROLEURS pour le nouveau système d'autorisation
85   - - SIMPLIFICATION DES AUTORISATIONS POUR LA PLUPART DES CONTROLEURS SIMPLES
86   - - AUTORISATIONS PAR DÉFAUT POUR TOUT NOUVEAU CONTROLEUR BASIQUE
87   - - NOUVELLE PAGE AFFICHANT LES AUTORISATIONS DYNAMIQUEMENT (/pages/acls ou /pages/acls/#nom_du_controleur)
  115 + - (i) MISE À JOUR DE TOUS LES CONTROLEURS pour le nouveau système d'autorisation
  116 + - (i) SIMPLIFICATION DES AUTORISATIONS POUR LA PLUPART DES CONTROLEURS SIMPLES
  117 + - (i) AUTORISATIONS PAR DÉFAUT POUR TOUT NOUVEAU CONTROLEUR BASIQUE
  118 + - (e) NOUVELLE PAGE AFFICHANT LES AUTORISATIONS DYNAMIQUEMENT (/pages/acls ou /pages/acls/#nom_du_controleur)
88 119 => On peut ainsi vérifier ce qui est appliqué à l'instant T (juste après la modif d'une règle par exemple)
89 120  
  121 +-------
90 122 03/06/2020 v3.7.9.29 (EP)
91   - - NOUVEAU SYSTEME D'AUTORISATION DES ACTIONS => CENTRALISÉ et testé OK
  123 + - (i) NOUVEAU SYSTEME D'AUTORISATION DES ACTIONS => CENTRALISÉ et testé OK
92 124 => TOUS les tests passent sauf certains qui ne passent plus car les nouvelles conditions sont plus strictes
93 125 (ils ont été temporairement désactivés en attendant réécriture plus générique qui viendra très vite)
94 126 => Autorisations définies dans chaque controleur par setAuthorizations() qui initialise un tableau UNIQUE de AppController ($this->is_authorized_action)
... ... @@ -98,36 +130,40 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi
98 130 => L'initialisation des autorisations est faite (par la méthode setAuthorizationForAction() de AppController) dans un format standard,
99 131 quelque soit l'autorisation, donc c'est très LISIBLE et facile à modifier
100 132  
  133 +-------
101 134 15/05/2020 v3.7.9.28 (EP)
102   - - Utilisation systématique de variables "$CAN_xxx" dans les VUES pour tester si un affichage est autorisé ou pas
  135 + - (i) Utilisation systématique de variables "$CAN_xxx" dans les VUES pour tester si un affichage est autorisé ou pas
103 136 => bcp plus centralisé qu'avant, et bcp plus clean et lisible
104 137 => désormais TOUS les droits sont définis dans la SEULE méthode isAuthorized() de CHAQUE controleur et NULLE PART AILLEURS
105 138 => si on veut changer un droit d'accès quelconque, on ne le change QUE là. Ouf, on respire, c'est bien plus cohérent et maintenable qu'avant
106 139 => FIN de la galère de la gestion des droits (acl) enfin, il aura fallu quelques années pour y parvenir !!!
107 140  
  141 +-------
108 142 11/05/2020 v3.7.9.27 (EP)
109   - - Ajout d'un LOG applicatif dans le fichier /logs/debug.log pour toutes les actions importantes (add, edit, delete, ...) qui permet de savoir kiafekoi
  143 + - (e) Ajout d'un LOG applicatif dans le fichier /logs/debug.log pour toutes les actions importantes (add, edit, delete, ...) qui permet de savoir kiafekoi
110 144  
  145 +-------
111 146 07/05/2020 Version 3.7.9.26 (EP)
112   - - shortcuts dans AppController (donc disponible pour TOUS les controleurs) :
  147 + - (i) shortcuts dans AppController (donc disponible pour TOUS les controleurs) :
113 148 - $this->u = user courant
114 149 - $this->e = entité courante
115 150 - $this->e_id = id de l'entité courante
116 151 - $this->a = action en cours
117 152 - $this->c = controleur en cours (?)
118 153 - $this->getEntity($id=null) // id=null si matos courant
119   - - harmonisation des noms de méthodes pour MaterielsController :
  154 + - (i) harmonisation des noms de méthodes pour MaterielsController :
120 155 - $this->isCreated($id=null) // id=null si matos courant
121 156 - $this->belongsToUser($username, $id=null) // id=null si matos courant
122 157 et $this->belongsToCurrentUser($id=null) // id=null si matos courant
123 158 - $this->isSameGroupAsUser($userlogin, $id=null) // id=null si matos courant
124 159 et $this->isSameGroupAsCurrentUser($id=null) // // id=null si matos courant
125   - - harmonisation des méthodes dans entité Materiel (Entity) :
  160 + - (i) harmonisation des méthodes dans entité Materiel (Entity) :
126 161 - is_created, is_validated, is_tobearchived, is_archived
127 162 - belongsToUser($username) // owned or declared by user
128 163 - isSameGroupAsUser($usergroup1, $usergroup2) // is same group as user groups
129 164 - ...
130 165  
  166 +-------
131 167 30/04/2020 Version 3.7.9.23 (EP)
132 168 - ajout de l'option globale $this->SUPERADMIN_CAN_DO_EVERYTHING dans AppController (false par défaut) pour donner rapidement TOUS les droits à superadmin (juste passer à true)
133 169 - Nouvelles règles ACL (conditions d'accès) sous forme de tableau $acl => en cours...
... ... @@ -138,82 +174,100 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi
138 174 - afficher une page web présentant automatiquement (dynamiquement) une synthèse claire de toutes les ACL, action par action, et profil par profil
139 175 (ce qui permettra de se rendre compte plus facilement de l'état actuel des conditions d'accès)
140 176  
  177 +-------
141 178 28/04/2020 Version 3.7.9.21 (EP)
142   - - mon 1er View Helper dans src/View/Helper (MyButtonHelper) pour créer plus facilement des boutons !! :
143   - - migration des fonctions getActionButton() et displayElement() dans MyButtonHelper et remplacement progressif dans les vues
  179 + - (i) mon 1er View Helper dans src/View/Helper (MyButtonHelper) pour créer plus facilement des boutons !! :
  180 + - (i) migration des fonctions getActionButton() et displayElement() dans MyButtonHelper et remplacement progressif dans les vues
144 181  
  182 +-------
145 183 20/04/2020 Version 3.7.9.19 (EP)
146   - - TOUTES les nombreuses sections Toggle javascript refactorisées en 5 lignes (show/hide) !!
  184 + - (i) TOUTES les nombreuses sections Toggle javascript refactorisées en 5 lignes (show/hide) !!
147 185  
  186 +-------
148 187 16/04/2020 Version 3.7.9.18 (EP)
149   - Amelioration gestion des Dates... :
150   - - GROS bugfix check dates : uniformisation du format date partout (vues et DatePicker.js et code javascript) => dd/mm/aaaa (au lieu de dd-mm-aa)
151   - - nombreuses refactorisations, généralisations et améliorations du code javascript (bcp de refactorisation dans script.js)
  188 + - (i) Amelioration gestion des Dates... :
  189 + - GROS bugfix check dates : uniformisation du format date partout (vues et DatePicker.js et code javascript) => dd/mm/aaaa (au lieu de dd-mm-aa)
  190 + - nombreuses refactorisations, généralisations et améliorations du code javascript (bcp de refactorisation dans script.js)
152 191  
  192 +-------
153 193 09/04/2020 Version 3.7.9.16-17 (EP)
154   - Amelioration Suivis :
155   - - ajout champ is_metro dans table type_suivis pour les types liés au module métrologie
156   - - ajout champ "is_regular" dans table type_suivis pour déclarer les types de suivis réguliers (fréquence) ou irréguliers (date)
  194 + (i) Amelioration Suivis :
  195 + - ajout champ is_metro dans table type_suivis pour les types liés au module métrologie
  196 + - ajout champ "is_regular" dans table type_suivis pour déclarer les types de suivis réguliers (fréquence) ou irréguliers (date)
157 197 - début d'utilisation des migrations de BD
158 198  
  199 +-------
159 200 01-02/04/2020 Version 3.7.9.13-14 (EP)
160   - MATERIELS : GROSSE amélioration pour le fournisseur avec autocomplétion et autocorrection !!
161   - (le fournisseur est toujours en BD mais il est automatiquement ajouté si on en saisit un nouveau)
162   - (ça corrige aussi automatiquement si espaces en trop, y-compris les anciens déjà saisis,
163   - bref c'est miraculous !!!)
164   - (2 jours de boulot quand même...)
  201 + - (e) MATERIELS : GROSSE amélioration pour le fournisseur avec autocomplétion et autocorrection !!
  202 + (le fournisseur est toujours en BD mais il est automatiquement ajouté si on en saisit un nouveau)
  203 + (ça corrige aussi automatiquement si espaces en trop, y-compris les anciens déjà saisis,
  204 + bref c'est miraculous !!!)
  205 + (2 jours de boulot quand même...)
165 206  
  207 +-------
166 208 31/03/2020 Version 3.7.9.12 (EP)
167   - MATERIELS : Amélioration et Bugfixes par refactorisation des vues add et edit en 1 seule add_edit
168   - + Ajout de fournisseur possible
  209 + - (i) MATERIELS : Amélioration et Bugfixes par refactorisation des vues add et edit en 1 seule add_edit
  210 + - + Ajout de fournisseur possible
169 211  
  212 +-------
170 213 26/03/2020 Version 3.7.9.10 (EP)
171   - EMPRUNTS : Amélioration par refactorisation (1)
172   - Comme pour les docs attachés et les suivis (même principe) :
173   - - refactorisation des actions add() et edit() en une seule add_or_edit() (car très semblables)
174   - - refactorisation des vues add et edit en une seule add_edit (car très semblables)
  214 + - (i) EMPRUNTS : Amélioration par refactorisation (1)
  215 + Comme pour les docs attachés et les suivis (même principe) :
  216 + - refactorisation des actions add() et edit() en une seule add_or_edit() (car très semblables)
  217 + - refactorisation des vues add et edit en une seule add_edit (car très semblables)
175 218  
  219 +-------
176 220 25/03/2020 Version 3.7.9.9 (EP)
177   - SUIVIS : Amélioration par refactorisation (2)
178   - Comme pour les docs attachés (même principe) :
179   - - refactorisation des actions add() et edit() en une seule add_or_edit() (car très semblables)
180   - - refactorisation des vues add et edit en une seule add_edit (car très semblables)
  221 + - (i) SUIVIS : Amélioration par refactorisation (2)
  222 + Comme pour les docs attachés (même principe) :
  223 + - refactorisation des actions add() et edit() en une seule add_or_edit() (car très semblables)
  224 + - refactorisation des vues add et edit en une seule add_edit (car très semblables)
181 225  
  226 +-------
182 227 24/03/2020 Version 3.7.9.8 (EP)
183   - SUIVIS : Amélioration et nombreux Bugfixes !!! (1)
184   - - ajout intitulé comme titre
  228 + - (i) SUIVIS : Amélioration et nombreux Bugfixes !!! (1)
  229 + - ajout intitulé comme titre
185 230  
  231 +-------
186 232 23/03/2020 Version 3.7.9.6-7 (EP)
187   - DOCS LIÉS : Amélioration de la gestion des docs attachés (3)
188   - - Enorme simplification grâce à la refactorisation des vues add et edit en une seule add_edit car elles sont très semblables
189   - - Amélioration et nombreux bugfixes de la gestion des docs attachés (2)
  233 + - (i) DOCS LIÉS : Amélioration de la gestion des docs attachés (3)
  234 + - Enorme simplification grâce à la refactorisation des vues add et edit en une seule add_edit car elles sont très semblables
  235 + - Amélioration et nombreux bugfixes de la gestion des docs attachés (2)
190 236  
  237 +-------
191 238 16/03/2020 Version 3.7.9.1-5 (EP)
192   - Premiers bugfixes du nouveau site responsive
  239 + - (b) Premiers bugfixes du nouveau site responsive
193 240  
  241 +-------
194 242 11/03/2020 Version 3.7.9.0 (EP)
195   - NOUVELLE VERSION RESPONSIVE validée et installée officiellement à l'IRAP et au CRAL (mobile ready)
196   - Nouveau format de version qui colle à la version utilisée du framework Cakephp (3.7.9)
  243 + - (e) NOUVELLE VERSION RESPONSIVE validée et installée officiellement à l'IRAP et au CRAL (mobile ready)
  244 + - (e) Nouveau format de version qui colle à la version utilisée du framework Cakephp (3.7.9)
197 245  
  246 +-------
198 247 10/03/2020 Version 2.14.8 (EP)
199   - Dernier bugfix pour valider nouvelle version 2.14 (responsive) : bugfix test etiquette collée
  248 + - (b) Dernier bugfix pour valider nouvelle version 2.14 (responsive) : bugfix test etiquette collée
200 249  
  250 +-------
201 251 10/03/2020 Version 2.14.7 (EP)
202   - Nombreux petits bugfixes (dont 1 gros : bouton CANCEL) :
  252 + - (b) Nombreux petits bugfixes (dont 1 gros : bouton CANCEL) :
203 253  
  254 +-------
204 255 06/03/2020 Version 2.14.6 (EP)
205   - 6 gros bugfixes de la version 2.14 (responsive) sur 1 semaine de boulot !!
  256 + - (b) 6 gros bugfixes de la version 2.14 (responsive) sur 1 semaine de boulot !!
206 257  
  258 +-------
207 259 28/02/2020 Version 2.14.0 (Jeanne Prugniel, stagiaire CRAL)
208   - Application maintenant "responsive" avec l'utilisation de boostrap (ok sur pc, tablette, et mobile)
  260 + - (e) Application maintenant "responsive" avec l'utilisation de boostrap (ok sur pc, tablette, et mobile)
209 261  
  262 +-------
210 263 29/01-17/02/2020 Version 2.13.13-14 (EP)
211 264 Ajout bootstrap-ui
212 265  
  266 +-------
213 267 21/01/2019 Version 2.13.12 (EP)
214   - Bugfix connexion superadmin en mode SANS LDAP (en cours...)
215   - Bugfix et amélioration script installation (script création users BDD...)
216   - Amélioration script update (ajout mise à jour auto des plugins php)
  268 + - (b) Bugfix connexion superadmin en mode SANS LDAP (en cours...)
  269 + - (b) Bugfix et amélioration script installation (script création users BDD...)
  270 + - (i) Amélioration script update (ajout mise à jour auto des plugins php)
217 271  
218 272 ...
219 273  
... ...
README.md
... ... @@ -42,18 +42,9 @@ Logiciel testé et validé sur les configurations suivantes :
42 42  
43 43 --------------------------------------------------------------------------------------------
44 44  
45   -VERSION ACTUELLE
46   -
47   -Date: 13/07/2020
48   -Version: 3.7.9.60 (encours)
49   -Author: EP
50   -Commentaire:
51   - - Nouvelle page web "Nouveautés" (/pages/changes)
52   - - Changements migrés dans fichier CHANGES.txt et affichés proprement dans une nouvelle page web changes.ctp
53   - - Mise à jour page 'about' avec fichier LICENSE
54   - - Bugfix requete sql db-update-2020-06-10.sh pour IAS
55   -
56   - - Nouvelle page web "Statistiques mensuelles" (/pages/stats)
  45 +Date: 16/07/2020
  46 +Version: 3.7.9.61
  47 +
57 48  
58 49 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes)
59 50  
... ...
src/Controller/MaterielsController.php
... ... @@ -791,30 +791,38 @@ class MaterielsController extends AppController {
791 791 $GMV = $this->request->getQuery('GMV');
792 792 $GTV = $this->request->getQuery('GTV');
793 793 if ($GMV !== null || $GTV !== null) {
794   - if ($GMV !== null && $GMV != TableRegistry::getTableLocator()->get('GroupesMetiers')->find()
795   - ->where([
796   - 'nom =' => 'N/A'
797   - ])
798   - ->first()['id'])
  794 + if (
  795 + $GMV !== null
  796 + &&
  797 + $GMV != TableRegistry::getTableLocator()->get('GroupesMetiers')
  798 + ->find()
  799 + ->where([
  800 + 'nom =' => 'N/A'
  801 + ])
  802 + ->first()['id']
  803 + )
799 804 $conditions = [
800 805 'Materiels.groupes_metier_id =' => $GMV,
801 806 'Materiels.status =' => 'CREATED',
802 807 'Materiels.status !=' => 'ARCHIVED'
803 808 ];
804   - else if ($GTV !== null && $GTV != TableRegistry::getTableLocator()->get('GroupesThematiques')->find()
805   - ->where([
806   - 'nom =' => 'N/A'
807   - ])
808   - ->first()['id'])
  809 + else if (
  810 + $GTV !== null
  811 + &&
  812 + $GTV != TableRegistry::getTableLocator()->get('GroupesThematiques')
  813 + ->find()
  814 + ->where([
  815 + 'nom =' => 'N/A'
  816 + ])
  817 + ->first()['id']
  818 + )
809 819 $conditions = [
810 820 'Materiels.groupes_metier_id =' => $GTV,
811 821 'Materiels.status =' => 'CREATED',
812 822 'Materiels.status !=' => 'ARCHIVED'
813 823 ];
814 824 else
815   - $conditions = [
816   - 'Materiels.id =' => 0
817   - ];
  825 + $conditions = [ 'Materiels.id =' => 0 ];
818 826 }
819 827  
820 828 $MY = $this->request->getQuery('MY');
... ... @@ -839,7 +847,7 @@ class MaterielsController extends AppController {
839 847 if (in_array($this->getUserRole(), [
840 848 'Utilisateur',
841 849 'Responsable'
842   - ]) && $conditions == '')
  850 + ]) && $conditions == [])
843 851 $conditions = [
844 852 'Materiels.status !=' => 'ARCHIVED'
845 853 ];
... ... @@ -930,7 +938,9 @@ class MaterielsController extends AppController {
930 938 return $exp->isNull('date_acquisition');
931 939 }
932 940 );
933   - $this->set('nbMateriels', $materiels->count());
  941 + $nbMateriels = $materiels->count();
  942 + //debug("age=$age, nbMateriels = $nbMateriels");
  943 + $this->set(compact('nbMateriels'));
934 944  
935 945 /*
936 946 $this->set('nbMateriels',
... ...
src/Model/Table/MaterielsTable.php
... ... @@ -313,6 +313,7 @@ class MaterielsTable extends AppTable
313 313 ])->first();
314 314 */
315 315 $this->config = TableRegistry::getTableLocator()->get('Configurations')->get(1);
  316 + //debug($this->config);
316 317  
317 318 /*
318 319 * CONTROLE de la cohérence des champs materiel_administratif et materiel_technique
... ...
src/Template/Pages/changes.ctp 0 → 100644
... ... @@ -0,0 +1,114 @@
  1 +<?php
  2 +// parameters passed by controller
  3 +?>
  4 +<h2>
  5 + <!--
  6 + <i class="icon-print"></i>
  7 + -->
  8 + <center>CHANGEMENTS FAITS SUR LE LOGICIEL</center>
  9 +</h2>
  10 +
  11 +<p>
  12 +<u><b>Légende</b></u>:
  13 +<ul>
  14 + <li>En <b style='color:green'>vert</b>, les changements importants et visibles</li>
  15 + <li>En <b style='color:orange'>orange</b>, les changements importants mais internes (non visibles, souvent techniques)</li>
  16 + <li>En <b style='color:red'>rouge</b>, les corrections de bug (bugfixes)</li>
  17 +</ul>
  18 +</p>
  19 +<br>
  20 +<br>
  21 +<br>
  22 +
  23 +
  24 +
  25 +
  26 +<?php
  27 +
  28 +// On lit le fichier /WWWROOT/../CHANGES.txt
  29 +const EMPTY_LINE = "\n"; // Attention, '\n' ne marche pas... seulement "\n"
  30 +const NEW_SECTION = "-------\n";
  31 +/*
  32 +const IMPORTANT1 = '- (e)';
  33 +const IMPORTANT2 = '- (i)';
  34 +const IMPORTANT3 = '- (b)';
  35 +*/
  36 +const IMPORTANT = [
  37 + '- (e)' => 'green',
  38 + '- (i)' => 'orange',
  39 + '- (b)' => 'red'
  40 +];
  41 +
  42 +$wwwroot_dir = new Cake\Filesystem\Folder(WWW_ROOT);
  43 +$fname = 'CHANGES.txt';
  44 +$fpath = $wwwroot_dir->pwd() . DS . '..' . DS . $fname;
  45 +$nblines_to_read = 5000;
  46 +
  47 +$f = fopen($fpath, "r") or die("Le fichier /$fname n'existe pas... !");
  48 +
  49 +// On zappe jqa début d'une première section
  50 +$line = '';
  51 +while ($line != NEW_SECTION) $line = fgets($f);
  52 +
  53 +while(!feof($f)) {
  54 + // Traitement d'une section : on lit jqa ligne vide
  55 + $line = fgets($f);
  56 + echo "<b>$line</b><br>";
  57 + //if ($line == NEW_SECTION) echo "OUI";
  58 + //while (!feof($f) && $line!=NEW_SECTION) {
  59 + while (true) {
  60 + $line = fgets($f);
  61 + if (feof($f) || $line==NEW_SECTION) break;
  62 + foreach (array_keys(IMPORTANT) as $code) {
  63 + $pos = strpos($line, $code);
  64 + if ($pos) break;
  65 + }
  66 + if ($pos) {
  67 + $color = IMPORTANT[$code];
  68 + echo "<b style='color:$color'> - ".substr($line,$pos+strlen($code))."</b>";
  69 + }
  70 + else echo $line;
  71 + echo "<br>";
  72 + }
  73 +}
  74 +
  75 +fclose($f);
  76 +
  77 +
  78 +/* Autre methode de lecture, avec iterateur
  79 +
  80 +// On va direct à la fin du fichier
  81 +try {
  82 + $f = new SplFileObject($fpath, "r");
  83 +} catch (Exception $e) {
  84 + echo("Le fichier /$fname n'existe pas...");
  85 + return;
  86 +}
  87 +$f->seek(PHP_INT_MAX);
  88 +$last_line = $f->key();
  89 +
  90 +// Lire TOUT le fichier
  91 +//$lines = new LimitIterator($f, 0, $last_line);
  92 +// Lire seulement les $nblines_to_read dernières lignes
  93 +//$line_num_from = max(0,$last_line-$nblines_to_read);
  94 +$line_num_from = 0;
  95 +$lines = new LimitIterator($f, $line_num_from);
  96 +//$lines = new LimitIterator($f, $last_line-$nblines_to_read, $last_line);
  97 +//print_r(iterator_to_array($lines));
  98 +
  99 +// Inversion des lignes pour affichage anti-chrono
  100 +//$lines_reversed = array_reverse(iterator_to_array($lines));
  101 +$lines = iterator_to_array($lines);
  102 +foreach ($lines as $line) {
  103 + echo $line.'<br>';
  104 + //if (mb_strpos($line, "$level: ") !== FALSE) echo $line.'<br><br>';
  105 + //if (mb_strpos($line, 'Info: ') !== FALSE) echo $line.'<br><br>';
  106 + //if (mb_strpos($line, '/materiels/edit/') !== FALSE) echo $line.'<br><br>';
  107 +}
  108 +
  109 +// Close file
  110 +$f=null;
  111 +
  112 +*/
  113 +
  114 +?>
0 115 \ No newline at end of file
... ...
tests/Fixture/MaterielsFixture.php
... ... @@ -3,6 +3,21 @@ namespace App\Test\Fixture;
3 3  
4 4 use Cake\TestSuite\Fixture\TestFixture;
5 5  
  6 +const yyyy0 = 2020; // Année en cours
  7 +const yyyy1 = yyyy0-1; // max : 'TEST-'.yyyy1.'-0002' => donc prochain créé doit être en -0003
  8 +const yyyy2 = yyyy0-2; // max : 'TEST-'.yyyy2.'-0010' => donc prochain créé doit être en -0010
  9 +const yyyy3 = yyyy0-3;
  10 +const mmdd1 = '05-11';
  11 +const mmdd2 = '04-19';
  12 +const yyyy0mmdd1 = yyyy0.'-'.mmdd1; // Date toujours la plus récente (plus récente que n'importe quel matos de la fixture)
  13 +const yyyy1mmdd1 = yyyy1.'-'.mmdd1; // Date du matos le plus récent
  14 +const yyyy1mmdd2 = yyyy1.'-'.mmdd2;
  15 +const yyyy2mmdd1 = yyyy2.'-'.mmdd1;
  16 +const yyyy2mmdd2 = yyyy2.'-'.mmdd2; // // Date du matos le plus ancien
  17 +const yyyy3mmdd2 = yyyy3.'-'.mmdd2; // Date toujours la plus ancienne (plus ancienne que n'importe quel matos de la fixture)
  18 +const yyyy1_highest_num = '0002';
  19 +const yyyy2_highest_num = '0010';
  20 +
6 21 /**
7 22 * MaterielsFixture
8 23 */
... ... @@ -632,13 +647,16 @@ class MaterielsFixture extends TestFixture {
632 647 'sur_categorie_id' => 1,
633 648 'categorie_id' => 1,
634 649 'sous_categorie_id' => 1,
635   - 'numero_laboratoire' => 'TEST-2016-0001',
  650 + //'numero_laboratoire' => 'TEST-2018-0001', //+4
  651 + 'numero_laboratoire' => 'TEST-'.yyyy1.'-0001', //+4
636 652 '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.',
637 653 'materiel_administratif' => 0,
638 654 'materiel_technique' => 1,
639 655 'status' => 'CREATED',
640 656 //'status' => 'VALIDATED',
641   - 'date_acquisition' => '2014-04-19',
  657 + //'date_acquisition' => '2018-04-19', // 2014-04-19
  658 + //'date_acquisition' => yyyy1.'-04-19', // 2014-04-19
  659 + 'date_acquisition' => yyyy1mmdd1,
642 660 'prix_ht' => 25,
643 661 'eotp' => 'Lorem ipsum dolor sit amet',
644 662 'numero_commande' => 'Lorem ipsum dolor sit amet',
... ... @@ -648,7 +666,8 @@ class MaterielsFixture extends TestFixture {
648 666 'groupes_metier_id' => 1,
649 667 'numero_inventaire_organisme' => 'Lorem ipsum dolor sit amet',
650 668 'numero_inventaire_old' => 'Lorem ipsum dolor sit amet',
651   - 'date_archivage' => '2016-04-19',
  669 + //'date_archivage' => '2016-04-19',
  670 + 'date_archivage' => yyyy1mmdd1,
652 671 'etiquette' => 1,
653 672 'lieu_detail' => 'Lorem ipsum dolor sit amet',
654 673  
... ... @@ -659,9 +678,10 @@ class MaterielsFixture extends TestFixture {
659 678 //'nom_createur' => 'Lorem ipsum dolor sit amet',
660 679 //'nom_createur' => 'test0 test9',
661 680 'nom_modificateur' => 'Lorem ipsum dolor sit amet',
662   - 'created' => '2016-04-19 09:09:29',
663   - 'modified' => '2016-04-19 09:09:29',
664   - 'date_reception' => '2016-04-19',
  681 + 'created' => '2020-04-19 09:09:29',
  682 + 'modified' => '2020-04-19 09:09:29',
  683 + //'date_reception' => '2016-04-19',
  684 + 'date_reception' => yyyy1mmdd1,
665 685 'organisme_id' => 1,
666 686 'site_id' => 1, // Roche
667 687 'metrologie' => 0,
... ... @@ -675,12 +695,16 @@ class MaterielsFixture extends TestFixture {
675 695 'sur_categorie_id' => 1,
676 696 'categorie_id' => 1,
677 697 'sous_categorie_id' => 1,
678   - 'numero_laboratoire' => 'TEST-2016-0002',
  698 + //'numero_laboratoire' => 'TEST-2020-0002',
  699 + //'numero_laboratoire' => 'TEST-'.yyyy2.'-0010',
  700 + 'numero_laboratoire' => 'TEST-'.yyyy2.'-'.yyyy2_highest_num,
679 701 '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.',
680 702 'materiel_administratif' => 0,
681 703 'materiel_technique' => 1,
682 704 'status' => 'CREATED',
683   - 'date_acquisition' => '2015-04-19',
  705 + //'date_acquisition' => '2019-04-19', // 2015-04-19
  706 + //'date_acquisition' => yyyy2.'-'.mmdd1, // 2015-04-19
  707 + 'date_acquisition' => yyyy2mmdd1,
684 708 'prix_ht' => 50,
685 709 'eotp' => 'Lorem ipsum dolor sit amet',
686 710 'numero_commande' => 'Lorem ipsum dolor sit amet',
... ... @@ -690,7 +714,8 @@ class MaterielsFixture extends TestFixture {
690 714 'groupes_metier_id' => 1,
691 715 'numero_inventaire_organisme' => 'Lorem ipsum dolor sit amet',
692 716 'numero_inventaire_old' => 'Lorem ipsum dolor sit amet',
693   - 'date_archivage' => '2016-04-19',
  717 + //'date_archivage' => '2016-04-19',
  718 + 'date_archivage' => yyyy2mmdd1,
694 719 'etiquette' => 1,
695 720 'lieu_detail' => 'Lorem ipsum dolor sit amet',
696 721 'nom_responsable' => 'Lorem ipsum dolor sit amet',
... ... @@ -699,9 +724,10 @@ class MaterielsFixture extends TestFixture {
699 724 'email_responsable' => 'Lorem ipsum dolor sit amet',
700 725 'nom_createur' => 'Lorem ipsum dolor sit amet',
701 726 'nom_modificateur' => 'Lorem ipsum dolor sit amet',
702   - 'created' => '2016-04-19 09:09:29',
703   - 'modified' => '2016-04-19 09:09:29',
704   - 'date_reception' => '2016-04-19',
  727 + 'created' => '2020-04-19 09:09:29',
  728 + 'modified' => '2020-04-19 09:09:29',
  729 + //'date_reception' => '2016-04-19',
  730 + 'date_reception' => yyyy2mmdd1,
705 731 'organisme_id' => 1,
706 732 'site_id' => 1, // Roche
707 733 'metrologie' => 0,
... ... @@ -715,12 +741,15 @@ class MaterielsFixture extends TestFixture {
715 741 'sur_categorie_id' => 1,
716 742 'categorie_id' => 1,
717 743 'sous_categorie_id' => 1,
718   - 'numero_laboratoire' => 'TEST-2016-0003',
  744 + //'numero_laboratoire' => 'TEST-2020-0003',
  745 + 'numero_laboratoire' => 'TEST-'.yyyy2.'-0007',
719 746 '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.',
720 747 'materiel_administratif' => 1,
721 748 'materiel_technique' => 1,
722 749 'status' => 'VALIDATED',
723   - 'date_acquisition' => '2016-05-11',
  750 + //'date_acquisition' => '2020-05-11', // 2016-05-11
  751 + //'date_acquisition' => yyyy2.'-'.mmdd2,
  752 + 'date_acquisition' => yyyy2mmdd2,
724 753 'prix_ht' => 1100,
725 754 'eotp' => 'Lorem ipsum dolor sit amet',
726 755 'numero_commande' => 'Lorem ipsum dolor sit amet',
... ... @@ -730,16 +759,18 @@ class MaterielsFixture extends TestFixture {
730 759 'groupes_metier_id' => 1,
731 760 'numero_inventaire_organisme' => 'Lorem ipsum dolor sit amet',
732 761 'numero_inventaire_old' => 'Lorem ipsum dolor sit amet',
733   - 'date_archivage' => '2016-04-19',
  762 + //'date_archivage' => '2016-04-19',
  763 + 'date_archivage' => yyyy2mmdd2,
734 764 'etiquette' => 1,
735 765 'lieu_detail' => 'Lorem ipsum dolor sit amet',
736 766 'nom_responsable' => 'Lorem ipsum dolor sit amet',
737 767 'email_responsable' => 'Lorem ipsum dolor sit amet',
738 768 'nom_createur' => 'Lorem ipsum dolor sit amet',
739 769 'nom_modificateur' => 'Lorem ipsum dolor sit amet',
740   - 'created' => '2016-04-19 09:09:29',
741   - 'modified' => '2016-04-19 09:09:29',
742   - 'date_reception' => '2016-04-19',
  770 + 'created' => '2020-04-19 09:09:29',
  771 + 'modified' => '2020-04-19 09:09:29',
  772 + //'date_reception' => '2016-04-19',
  773 + 'date_reception' => yyyy2mmdd2,
743 774 'organisme_id' => 1,
744 775 'site_id' => 1, // Roche
745 776 'metrologie' => 0,
... ... @@ -755,12 +786,15 @@ class MaterielsFixture extends TestFixture {
755 786 'sur_categorie_id' => 1,
756 787 'categorie_id' => 1,
757 788 'sous_categorie_id' => 1,
758   - 'numero_laboratoire' => 'TEST-2016-0011',
  789 + //'numero_laboratoire' => 'TEST-2020-0011',
  790 + 'numero_laboratoire' => 'TEST-'.yyyy2.'-0003',
759 791 '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.',
760 792 'materiel_administratif' => 1,
761 793 'materiel_technique' => 1,
762 794 'status' => 'CREATED',
763   - 'date_acquisition' => '2016-05-11',
  795 + //'date_acquisition' => '2020-05-11', // +4
  796 + //'date_acquisition' => yyyy2.'-'.mmdd1,
  797 + 'date_acquisition' => yyyy2mmdd2,
764 798 'prix_ht' => 75,
765 799 'eotp' => 'Lorem ipsum dolor sit amet',
766 800 'numero_commande' => 'Lorem ipsum dolor sit amet',
... ... @@ -770,7 +804,8 @@ class MaterielsFixture extends TestFixture {
770 804 'groupes_metier_id' => 1,
771 805 'numero_inventaire_organisme' => 'Lorem ipsum dolor sit amet',
772 806 'numero_inventaire_old' => 'Lorem ipsum dolor sit amet',
773   - 'date_archivage' => '2016-04-19',
  807 + //'date_archivage' => '2016-04-19',
  808 + 'date_archivage' => yyyy2mmdd2,
774 809 'etiquette' => 0,
775 810 'lieu_detail' => 'Lorem ipsum dolor sit amet',
776 811 //'nom_responsable' => 'test0 test9',
... ... @@ -779,9 +814,10 @@ class MaterielsFixture extends TestFixture {
779 814 //'nom_createur' => 'test0 test9',
780 815 'nom_createur' => 'user5 USER',
781 816 'nom_modificateur' => 'Lorem ipsum dolor sit amet',
782   - 'created' => '2016-04-19 09:09:29',
783   - 'modified' => '2016-04-19 09:09:29',
784   - 'date_reception' => '2016-04-19',
  817 + 'created' => '2020-04-19 09:09:29',
  818 + 'modified' => '2020-04-19 09:09:29',
  819 + //'date_reception' => '2016-04-19',
  820 + 'date_reception' => yyyy2mmdd2,
785 821 'organisme_id' => 1,
786 822 'site_id' => 1, // Roche
787 823 'metrologie' => 0,
... ... @@ -795,12 +831,15 @@ class MaterielsFixture extends TestFixture {
795 831 'sur_categorie_id' => 1,
796 832 'categorie_id' => 1,
797 833 'sous_categorie_id' => 1,
798   - 'numero_laboratoire' => 'TEST-2016-0012',
  834 + //'numero_laboratoire' => 'TEST-2020-0012',
  835 + 'numero_laboratoire' => 'TEST-'.yyyy2.'-0002',
799 836 '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.',
800 837 'materiel_administratif' => 1,
801 838 'materiel_technique' => 1,
802 839 'status' => 'VALIDATED',
803   - 'date_acquisition' => '2016-05-11',
  840 + //'date_acquisition' => '2020-05-11', // + 4
  841 + //'date_acquisition' => yyyy2.'-'.mmdd2,
  842 + 'date_acquisition' => yyyy2mmdd2,
804 843 'prix_ht' => 75,
805 844 'eotp' => 'Lorem ipsum dolor sit amet',
806 845 'numero_commande' => 'Lorem ipsum dolor sit amet',
... ... @@ -814,16 +853,18 @@ class MaterielsFixture extends TestFixture {
814 853 'groupes_metier_id' => 2,
815 854 'numero_inventaire_organisme' => 'Lorem ipsum dolor sit amet',
816 855 'numero_inventaire_old' => 'Lorem ipsum dolor sit amet',
817   - 'date_archivage' => '2016-04-19',
  856 + //'date_archivage' => '2016-04-19',
  857 + 'date_archivage' => yyyy2mmdd2,
818 858 'etiquette' => 1,
819 859 'lieu_detail' => 'Lorem ipsum dolor sit amet',
820 860 'nom_responsable' => 'Lorem ipsum dolor sit amet',
821 861 'email_responsable' => 'Lorem ipsum dolor sit amet',
822 862 'nom_createur' => 'Lorem ipsum dolor sit amet',
823 863 'nom_modificateur' => 'Lorem ipsum dolor sit amet',
824   - 'created' => '2016-04-19 09:09:29',
825   - 'modified' => '2016-04-19 09:09:29',
826   - 'date_reception' => '2016-04-19',
  864 + 'created' => '2020-04-19 09:09:29',
  865 + 'modified' => '2020-04-19 09:09:29',
  866 + //'date_reception' => '2016-04-19',
  867 + 'date_reception' => yyyy2mmdd2,
827 868 'organisme_id' => 1,
828 869 'site_id' => 1, // Roche
829 870 'metrologie' => 0,
... ... @@ -837,12 +878,14 @@ class MaterielsFixture extends TestFixture {
837 878 'sur_categorie_id' => 1,
838 879 'categorie_id' => 1,
839 880 'sous_categorie_id' => 1,
840   - 'numero_laboratoire' => 'TEST-2016-0013',
  881 + //'numero_laboratoire' => 'TEST-2020-0013',
  882 + 'numero_laboratoire' => 'TEST-'.yyyy2.'-0006',
841 883 'description' => 'TEST COPIE MATERIEL',
842 884 'materiel_administratif' => 1,
843 885 'materiel_technique' => 1,
844 886 'status' => 'TOBEARCHIVED',
845   - 'date_acquisition' => '2016-05-11',
  887 + //'date_acquisition' => '2020-05-11', // +4
  888 + 'date_acquisition' => yyyy2mmdd2,
846 889 'prix_ht' => 75,
847 890 'eotp' => 'Lorem ipsum dolor sit amet',
848 891 'numero_commande' => 'Lorem ipsum dolor sit amet',
... ... @@ -852,7 +895,8 @@ class MaterielsFixture extends TestFixture {
852 895 'groupes_metier_id' => 1,
853 896 'numero_inventaire_organisme' => 'Lorem ipsum dolor sit amet',
854 897 'numero_inventaire_old' => 'Lorem ipsum dolor sit amet',
855   - 'date_archivage' => '2016-04-19',
  898 + //'date_archivage' => '2016-04-19',
  899 + 'date_archivage' => yyyy2mmdd2,
856 900 'etiquette' => 1,
857 901 'lieu_detail' => 'Lorem ipsum dolor sit amet',
858 902 //'nom_responsable' => 'Jesus',
... ... @@ -860,9 +904,10 @@ class MaterielsFixture extends TestFixture {
860 904 'email_responsable' => 'Lorem ipsum dolor sit amet',
861 905 'nom_createur' => 'Lorem ipsum dolor sit amet',
862 906 'nom_modificateur' => 'Lorem ipsum dolor sit amet',
863   - 'created' => '2016-04-19 09:09:29',
864   - 'modified' => '2016-04-19 09:09:29',
865   - 'date_reception' => '2016-04-19',
  907 + 'created' => '2020-04-19 09:09:29',
  908 + 'modified' => '2020-04-19 09:09:29',
  909 + //'date_reception' => '2016-04-19',
  910 + 'date_reception' => yyyy2mmdd2,
866 911 'organisme_id' => 1,
867 912 'site_id' => 1, // Roche
868 913 'metrologie' => 0,
... ... @@ -876,13 +921,16 @@ class MaterielsFixture extends TestFixture {
876 921 'sur_categorie_id' => 1,
877 922 'categorie_id' => 1,
878 923 'sous_categorie_id' => 1,
879   - 'numero_laboratoire' => 'TEST-2016-0014',
  924 + //'numero_laboratoire' => 'TEST-2020-0014',
  925 + //'numero_laboratoire' => 'TEST-'.yyyy1.'-0002',
  926 + 'numero_laboratoire' => 'TEST-'.yyyy1.'-'.yyyy1_highest_num,
880 927 'description' => 'blabla',
881 928 'materiel_administratif' => 1,
882 929 'materiel_technique' => 1,
883 930 'status' => 'ARCHIVED',
884 931 //'status' => 'TOBEARCHIVED',
885   - 'date_acquisition' => '2016-05-10',
  932 + //'date_acquisition' => '2020-05-10', //+4
  933 + 'date_acquisition' => yyyy1mmdd2,
886 934 'prix_ht' => 75,
887 935 'eotp' => 'Lorem ipsum dolor sit amet',
888 936 'numero_commande' => 'Lorem ipsum dolor sit amet',
... ... @@ -892,7 +940,8 @@ class MaterielsFixture extends TestFixture {
892 940 'groupes_metier_id' => 1,
893 941 'numero_inventaire_organisme' => 'Lorem ipsum dolor sit amet',
894 942 'numero_inventaire_old' => 'Lorem ipsum dolor sit amet',
895   - 'date_archivage' => '2016-04-19',
  943 + //'date_archivage' => '2016-04-19',
  944 + 'date_archivage' => yyyy1mmdd2,
896 945 'etiquette' => 1,
897 946 'lieu_detail' => 'Lorem ipsum dolor sit amet',
898 947 //'nom_responsable' => 'Jesus',
... ... @@ -900,9 +949,10 @@ class MaterielsFixture extends TestFixture {
900 949 'email_responsable' => 'Lorem ipsum dolor sit amet',
901 950 'nom_createur' => 'Lorem ipsum dolor sit amet',
902 951 'nom_modificateur' => 'Lorem ipsum dolor sit amet',
903   - 'created' => '2016-04-19 09:09:29',
904   - 'modified' => '2016-04-19 09:09:29',
905   - 'date_reception' => '2016-04-19',
  952 + 'created' => '2020-04-19 09:09:29',
  953 + 'modified' => '2020-04-19 09:09:29',
  954 + //'date_reception' => '2016-04-19',
  955 + 'date_reception' => yyyy1mmdd2,
906 956 'organisme_id' => 1,
907 957 'site_id' => 1, // Roche
908 958 'metrologie' => 0,
... ...
tests/TestCase/Controller/MaterielsControllerTest.php
... ... @@ -9,9 +9,34 @@ use Cake\ORM\TableRegistry;
9 9 use Cake\Core\Configure;
10 10 use App\Controller\AppController;
11 11 use Cake\Utility\Inflector;
  12 +
12 13 //use phpDocumentor\Reflection\Types\Boolean;
13 14  
14 15  
  16 +// Mettre ici les memes constantes que celles utilisées dans MaterielsFixture
  17 +use const App\Test\Fixture\yyyy0mmdd1;
  18 +use const App\Test\Fixture\yyyy1mmdd1;
  19 +use const App\Test\Fixture\yyyy1mmdd2;
  20 +use const App\Test\Fixture\yyyy2mmdd1;
  21 +use const App\Test\Fixture\yyyy2mmdd2;
  22 +use const App\Test\Fixture\yyyy3mmdd2;
  23 +use const App\Test\Fixture\yyyy1_highest_num;
  24 +use const App\Test\Fixture\yyyy2_highest_num;
  25 +/* marche pas, why ???
  26 +use const App\Test\Fixture\yyyy0;
  27 +use const App\Test\Fixture\yyyy1;
  28 +use const App\Test\Fixture\yyyy2;
  29 +use const App\Test\Fixture\yyyy3;
  30 +*/
  31 +const yyyy0 = 2020; // Année en cours
  32 +const yyyy1 = yyyy0-1; // max : 'TEST-'.yyyy1.'-0002' => donc prochain créé doit être en -0003
  33 +const yyyy2 = yyyy0-2; // max : 'TEST-'.yyyy2.'-0010' => donc prochain créé doit être en -0010
  34 +const yyyy3 = yyyy0-3;
  35 +
  36 +// AVIRER
  37 +//private $nb_matos_in_fixture = 7;
  38 +const nb_matos_in_fixture = 7;
  39 +
15 40  
16 41  
17 42 /**
... ... @@ -57,9 +82,6 @@ class MaterielsControllerTest extends General {
57 82 'app.unites'
58 83 ];
59 84  
60   - // AVIRER
61   - private $nb_matos_in_fixture = 7;
62   -
63 85 /*
64 86 private $statuses = [
65 87 'CREATED',
... ... @@ -91,13 +113,18 @@ class MaterielsControllerTest extends General {
91 113  
92 114 private $newMaterielWithAllMandatoryFields = [
93 115 //'id' => 16,
94   - 'designation' => 'Test 15',
  116 + //'designation' => 'Test 15',
  117 + 'designation' => 'Test '.(nb_matos_in_fixture+1),
95 118 'sur_categorie_id' => 1,
96 119 'categorie_id' => 1,
97 120 'materiel_administratif' => 0,
98 121 'materiel_technique' => 1,
99   - 'date_acquisition' => '19-04-2016',
  122 + //'date_acquisition' => '19-04-2020', //+4
100 123 //'date_acquisition' => '19-04-2019',
  124 + // Ca marche pas dans le sens US yyyy-mm-dd alors que ça marche dans la fixture, WHY ???
  125 + //'date_acquisition' => yyyy1.'-04-19', //+4
  126 + // Donc format FR dd-mm-yyyy
  127 + 'date_acquisition' => '19-04-'.yyyy1,
101 128 // pas obligatoire, mais plus cohérent car c'est le statut minimum
102 129 ////'status' => 'CREATED',
103 130 /*
... ... @@ -124,7 +151,8 @@ class MaterielsControllerTest extends General {
124 151 return 'Materiels';
125 152 }
126 153 */
127   -
  154 +
  155 +
128 156 //@Override parent
129 157 // PAS le 1 (ni le 3 ni le 12) car il a des suivis et donc on ne pourra pas le supprimer !!!
130 158 static protected function _getEntityIdOkForTesting() {
... ... @@ -132,6 +160,14 @@ class MaterielsControllerTest extends General {
132 160 }
133 161  
134 162  
  163 + private function _getNextNum4DigitsAfter($num4digits) {
  164 + $num4digits_next = intval($num4digits)+1;
  165 + //debug($num4digits, $num4digits_next);
  166 + $num4digits_next = sprintf('%04d',$num4digits_next);
  167 + //debug($num4digits, $num4digits_next);
  168 + return $num4digits_next;
  169 + }
  170 +
135 171 protected function getNewEntityWithAllMandatoryFields() {
136 172 return $this->newMaterielWithAllMandatoryFields;
137 173 }
... ... @@ -434,7 +470,7 @@ class MaterielsControllerTest extends General {
434 470 private function _testMatReadAllAs($role)
435 471 */
436 472 /**
437   - * @dataProvider dataProviderRoles6
  473 + * @dataProvider dataProviderRoles4
438 474 */
439 475 public function testMat20ReadAllAs($role)
440 476 {
... ... @@ -442,7 +478,10 @@ class MaterielsControllerTest extends General {
442 478  
443 479 // On doit pouvoir accéder à la page une fois authentifié
444 480 $this->authAs($role);
  481 + // - 5 ans
445 482 $this->get('/materiels/index');
  483 + // Tous
  484 + //$this->get('/materiels/index?age=0');
446 485 $this->assertNoRedirect("Authentifié mais redirection vers /users/login.");
447 486  
448 487 // Seul admin+ peut voir les materiels archivés et a accès à des filtres par statut + bouton exporter + cases à cocher
... ... @@ -523,7 +562,7 @@ class MaterielsControllerTest extends General {
523 562 private function _testMatReadOneAs($role)
524 563 */
525 564 /**
526   - * @dataProvider dataProviderRoles6
  565 + * @dataProvider dataProviderRoles4
527 566 */
528 567 public function testMat10ReadOneAs($role)
529 568 {
... ... @@ -584,7 +623,7 @@ class MaterielsControllerTest extends General {
584 623 private function _testMatAccessCreateFormAs($role)
585 624 */
586 625 /**
587   - * @dataProvider dataProviderRoles6
  626 + * @dataProvider dataProviderRoles4
588 627 */
589 628 public function testMat30AccessCreateFormAs($role) {
590 629 //$this->setUp();
... ... @@ -627,7 +666,7 @@ class MaterielsControllerTest extends General {
627 666 private function _testMatCreateAdministratifOrTechnicalAs($role) {
628 667 */
629 668 /**
630   - * @dataProvider dataProviderRoles5
  669 + * @dataProvider dataProviderRoles4
631 670 */
632 671 public function testMat32CreateAdministratifOrTechnicalAs($role) {
633 672 $newMateriel = $this->newMaterielWithAllMandatoryFields;
... ... @@ -647,10 +686,12 @@ class MaterielsControllerTest extends General {
647 686 $this->d($combination);
648 687  
649 688 // KO: ni administratif ni technique
650   - if ($combination == [0,0]) $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination));
  689 + if ($combination == [0,0])
  690 + $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination));
651 691  
652 692 // OK : technique only
653 693 if ($combination == [0,1]) {
  694 + continue;
654 695 // cree un nouveau materiel
655 696 //$this->_testMatCreateAs($role, $newMateriel, implode(',',$combination));
656 697 //$this->testMat31CreateAs($role, $newMateriel, implode(',',$combination));
... ... @@ -688,7 +729,8 @@ class MaterielsControllerTest extends General {
688 729 $this->_testMatCreate1FailsAs($role, $newMateriel, implode(',',$combination));
689 730  
690 731 // prix >= 800 => ok
691   - $newMateriel['prix_ht'] = 800;
  732 + $newMateriel['prix_ht'] = 800; // 1000
  733 + //debug($newMateriel);
692 734 $this->testMat31CreateAs($role, $newMateriel, implode(',',$combination));
693 735 /*
694 736 // supprimer un materiel pour avoir toujours le meme nombre
... ... @@ -706,7 +748,7 @@ class MaterielsControllerTest extends General {
706 748  
707 749  
708 750 /**
709   - * @dataProvider dataProviderRoles6
  751 + * @dataProvider dataProviderRoles4
710 752 */
711 753 //private function _testMatCreateAs($role, $materiel=null) { $this->testMat31CreateAs($role, $materiel); }
712 754 public function testMat31CreateAs($role, $materiel=null) {
... ... @@ -724,9 +766,13 @@ class MaterielsControllerTest extends General {
724 766 //debug($this->USER_IS_ADMIN_AT_LEAST());
725 767 $nbmat = $this->USER_IS_ADMIN_AT_LEAST() ? 7 : 6;
726 768 $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role);
  769 + //debug("bef $nbmat");
  770 +
  771 + // ADD
727 772 //$this->post('/materiels/add', $this->newMaterielWithAllMandatoryFields);
728 773 $this->post('/materiels/add', $materiel);
729 774 $nbmat++;
  775 + //debug("after $nbmat");
730 776  
731 777 // APRES add
732 778 $this->get('/materiels/index');
... ... @@ -734,8 +780,13 @@ class MaterielsControllerTest extends General {
734 780 //var_dump($this->_getBodyAsString());
735 781 $this->assertResponseContains("Liste des matériels (".$nbmat.")", "(testMat31CreateAs): Le matériel ne s'ajoute pas correctement (avec le profil $role)");
736 782 //$this->assertResponseContains("Liste des matériels (", "(testMat31CreateAs): Le matériel ne s'ajoute pas correctement avec le profil $role");
737   - $this->assertResponseContains("Test 15", "Le matériel ne s'ajoute pas correctement.");
738   - $this->assertResponseContains("TEST-2016-0015", "La génération du n°de labo n'est pas bonne.");
  783 + //$this->assertResponseContains("Test 15", "Le matériel ne s'ajoute pas correctement.");
  784 + $this->assertResponseContains('Test '.(nb_matos_in_fixture+1), "Le matériel ne s'ajoute pas correctement.");
  785 + //$nummat = $this->USER_IS_ADMIN_AT_LEAST() ? '15' : '13';
  786 + //$this->assertResponseContains("TEST-2020-00$nummat", "La génération du n°de labo n'est pas bonne."); //+4
  787 + $new_yyyy_highest_num = $this->_getNextNum4DigitsAfter(yyyy1_highest_num);
  788 + $this->assertResponseContains('TEST-'.yyyy1.'-'.$new_yyyy_highest_num, "La génération du n°de labo n'est pas bonne."); //+4
  789 + //$this->assertResponseContains("TEST-2020-0015", "La génération du n°de labo n'est pas bonne."); //+4
739 790 //$this->tearDown();
740 791 }
741 792  
... ... @@ -777,7 +828,7 @@ class MaterielsControllerTest extends General {
777 828 private function _testMatCreateFailsAs($role) {
778 829 */
779 830 /**
780   - * @dataProvider dataProviderRoles6
  831 + * @dataProvider dataProviderRoles4
781 832 */
782 833 public function testMat33CreateFailsAs($role) {
783 834 // test with each mandatory field except materiel_administratif and materiel_technique
... ... @@ -822,7 +873,7 @@ class MaterielsControllerTest extends General {
822 873  
823 874 // Test de l'action "Copier ce materiel" (= materiel/add/id) sur tous les roles
824 875 /**
825   - * @dataProvider dataProviderRoles5
  876 + * @dataProvider dataProviderRoles4
826 877 */
827 878 public function testMatCopy($role) {
828 879  
... ... @@ -842,8 +893,10 @@ class MaterielsControllerTest extends General {
842 893 // 1) RULE MATERIEL.COPY.1 :
843 894 // Copie d'un matos (CREATED) à l'IDENTIQUE (tel quel sans rien changer,
844 895 // sauf ce qui changera automatiquement: id, numlab)
845   - if ($do1) $this->_testMatCopy(1, true, $role, 1, [], 'TEST-2014-0001');
846   -
  896 + //if ($do1) $this->_testMatCopy(1, true, $role, 1, [], 'TEST-2018-0001'); //+4
  897 + //if ($do1) $this->_testMatCopy(1, true, $role, 1, [], 'TEST-'.yyyy1.'-0003'); //+4
  898 + if ($do1) $this->_testMatCopy(1, true, $role, 1, [], 'TEST-'.yyyy1.'-'.$this->_getNextNum4DigitsAfter(yyyy1_highest_num));
  899 +
847 900 // 2) RULE MATERIEL.COPY.2 :
848 901 // Copie d'un matos (CREATED) en changeant quelques données
849 902 $new_designation = 'matos 1 USER (C) modified';
... ... @@ -854,14 +907,17 @@ class MaterielsControllerTest extends General {
854 907 //'materiel_administratif' => 0,
855 908 //'materiel_technique' => 1,
856 909 //'status' => 'CREATED',
857   - 'date_acquisition' => '19-04-2016',
  910 + //'date_acquisition' => '19-04-2016',
  911 + 'date_acquisition' => '19-04-'.yyyy0,
858 912 //'nom_createur' => 'Pallier Etienne',
859 913 //'nom_modificateur' => 'Jean Administration',
860 914 //'nom_responsable' => 'Jacques Utilisateur',
861 915 //'email_responsable' => 'Jacques.Utilisateur@irap.omp.eu',
862 916 //'fournisseur_id' => 2
863 917 ];
864   - if ($do2) $this->_testMatCopy(2, true, $role, 1, $modified_data, 'TEST-2016-0015');
  918 + //if ($do2) $this->_testMatCopy(2, true, $role, 1, $modified_data, 'TEST-2016-0015');
  919 + //if ($do2) $this->_testMatCopy(2, true, $role, 1, $modified_data, 'TEST-'.yyyy2.'-'.$this->_getNextNum4DigitsAfter(yyyy2_highest_num));
  920 + if ($do2) $this->_testMatCopy(2, true, $role, 1, $modified_data, 'TEST-'.yyyy0.'-'.'0001');
865 921  
866 922 // 3) RULE MATERIEL.COPY.3 :
867 923 // Impossible de copier un matos de statut superieur à CREATED (même pas pour SUPERADMIN)
... ... @@ -972,7 +1028,7 @@ class MaterielsControllerTest extends General {
972 1028 private function _testUpdatesAs($role) {
973 1029 */
974 1030 /**
975   - * @dataProvider dataProviderRoles6
  1031 + * @dataProvider dataProviderRoles4
976 1032 */
977 1033 public function testUpdatesAs($role) {
978 1034 //$role="RESP";
... ... @@ -1131,7 +1187,8 @@ class MaterielsControllerTest extends General {
1131 1187 public function STRICTER_testACLDeleteAsAdmin() {
1132 1188 $this->authAdmin();
1133 1189  
1134   - $nb = $this->nb_matos_in_fixture;
  1190 + //$nb = $this->nb_matos_in_fixture;
  1191 + $nb = nb_matos_in_fixture;
1135 1192  
1136 1193 // matos TBA => KO
1137 1194 $this->post('/materiels/delete/13');
... ... @@ -1320,33 +1377,36 @@ class MaterielsControllerTest extends General {
1320 1377 * 2. Test champ global "s_all_2" dans le menu latéral de gauche
1321 1378 */
1322 1379 // Recherche en majuscules
1323   - $this->post( '/materiels/find', ['s_all_2' => 'TEST-2016-0002'] );
1324   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche général du menu latéral est incorrecte.");
  1380 + //$this->post( '/materiels/find', ['s_all_2' => 'TEST-2020-0002'] ); //+4
  1381 + $this->post( '/materiels/find', ['s_all_2' => 'TEST-'.yyyy2.'-0002'] );
  1382 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche générale du menu latéral est incorrect.");
1325 1383 // Recherche en minuscules
1326   - $this->post( '/materiels/find', ['s_all_2' => 'test-2016-0002'] );
1327   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche général du menu latéral est incorrecte.");
  1384 + //$this->post( '/materiels/find', ['s_all_2' => 'test-2020-0002'] ); //+4
  1385 + $this->post( '/materiels/find', ['s_all_2' => 'test-'.yyyy2.'-0002'] ); //+4
  1386 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche générale du menu latéral est incorrect.");
1328 1387  
1329 1388  
1330 1389 /*
1331 1390 * 3. Test champ général "s_all" en haut du formulaire
1332 1391 */
1333   - $this->post( '/materiels/find', ['s_all' => 'TEST-2016-0002'] );
1334   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte.");
  1392 + //$this->post( '/materiels/find', ['s_all' => 'TEST-2020-0002'] ); //+4
  1393 + $this->post( '/materiels/find', ['s_all_2' => 'TEST-'.yyyy2.'-0002'] );
  1394 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche générale du formulaire est incorrect.");
1335 1395  
1336 1396 $this->post( '/materiels/find', ['s_all' => 'Fournisseur'] );
1337   - $this->assertResponseContains("Résultats (7)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte.");
  1397 + $this->assertResponseContains("Résultats (7)", "Le nb de materiels pour la recherche générale du formulaire est incorrect.");
1338 1398  
1339 1399 $this->post( '/materiels/find', ['s_all' => 'Fournisseur1'] );
1340   - $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte.");
  1400 + $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche générale du formulaire est incorrect.");
1341 1401 $this->post( '/materiels/find', ['s_all' => 'Fournisseur2'] );
1342   - $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte.");
  1402 + $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche générale du formulaire est incorrect.");
1343 1403  
1344 1404 $this->post( '/materiels/find', ['s_all' => 'Fournisseur Test'] );
1345   - $this->assertResponseContains("Résultats (7)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte.");
  1405 + $this->assertResponseContains("Résultats (7)", "Le nb de materiels pour la recherche générale du formulaire est incorrect.");
1346 1406  
1347 1407 // les matériels trouvés doivent contenir "Fournisseur" ET "Test" ET "(C)"
1348 1408 $this->post( '/materiels/find', ['s_all' => 'Fournisseur Test (C)'] );
1349   - $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche générale du formulaire est incorrecte.");
  1409 + $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche générale du formulaire est incorrect.");
1350 1410  
1351 1411  
1352 1412 /*
... ... @@ -1361,51 +1421,57 @@ class MaterielsControllerTest extends General {
1361 1421 // --- tel quel
1362 1422 $dataSearch['s_designation'] = 'Test';
1363 1423 $this->post('/materiels/find', $dataSearch);
1364   - $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par désignation est incorrecte.");
  1424 + $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par désignation est incorrect.");
1365 1425 // --- en minuscules
1366 1426 $dataSearch['s_designation'] = 'test';
1367 1427 $this->post('/materiels/find', $dataSearch);
1368   - $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par désignation est incorrecte.");
  1428 + $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par désignation est incorrect.");
1369 1429 // --- en majuscules
1370 1430 $dataSearch['s_designation'] = 'TEST';
1371 1431 $this->post('/materiels/find', $dataSearch);
1372   - $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par désignation est incorrecte.");
  1432 + $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par désignation est incorrect.");
1373 1433  
1374 1434 // -- N mots
1375 1435 $dataSearch['s_designation'] = 'Test TBA'; // = contient "Test" ET "TBA" => devrait trouver "Test 13 (TBA)"
1376 1436 $this->post('/materiels/find', $dataSearch);
1377   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par désignation est incorrecte.");
  1437 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par désignation est incorrect.");
1378 1438 $dataSearch['s_designation'] = 'Test 13 TBA'; // = contient "Test" ET "TBA" => devrait trouver "Test 13 (TBA)"
1379 1439 $this->post('/materiels/find', $dataSearch);
1380   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par désignation est incorrecte.");
  1440 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par désignation est incorrect.");
1381 1441 $dataSearch['s_designation'] = '';
1382 1442  
1383 1443 // - Test champ numero_laboratoire
1384   - $dataSearch['s_numero_laboratoire'] = 'TEST-2016-0003';
  1444 + //$dataSearch['s_numero_laboratoire'] = 'TEST-2020-0003'; //+4
  1445 + $dataSearch['s_numero_laboratoire'] = 'TEST-'.yyyy1.'-0002';
1385 1446 $this->post('/materiels/find', $dataSearch);
1386   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par numero de laboratoire est incorrecte.");
  1447 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par numero de laboratoire est incorrect.");
1387 1448 $dataSearch['s_numero_laboratoire'] = '';
1388 1449  
1389 1450 // - Test champ status
1390 1451 $dataSearch['s_status'] = 'CREATED';
1391 1452 $this->post('/materiels/find', $dataSearch);
1392   - $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche par statut est incorrecte.");
  1453 + $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche par statut est incorrect.");
1393 1454 $dataSearch['s_status'] = '';
1394 1455  
1395 1456 // - Test champ date_acquisition
1396   - $dataSearch['s_date_acquisition'] = '2016-05-11';
  1457 + //$dataSearch['s_date_acquisition'] = '2016-05-11';
  1458 + $dataSearch['s_date_acquisition'] = yyyy2mmdd1;
  1459 + $this->post('/materiels/find', $dataSearch);
  1460 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par date d'acquisition est incorrect.");
  1461 + $dataSearch['s_date_acquisition'] = yyyy2mmdd2;
1397 1462 $this->post('/materiels/find', $dataSearch);
1398   - $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par date d'acquisition est incorrecte.");
  1463 + $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par date d'acquisition est incorrect.");
1399 1464 $dataSearch['s_date_acquisition'] = '';
1400 1465  
1401 1466 // - Test champ fournisseur_id
1402 1467 $dataSearch['s_fournisseur_id'] = 1;
1403   - $dataSearch['s_date_acquisition'] = '2016-05-11';
  1468 + //$dataSearch['s_date_acquisition'] = '2016-05-11';
  1469 + $dataSearch['s_date_acquisition'] = yyyy2mmdd2;
1404 1470 $this->post('/materiels/find', $dataSearch);
1405   - $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche par fournisseur_id est incorrecte.");
  1471 + $this->assertResponseContains("Résultats (3)", "Le nb de materiels pour la recherche par fournisseur_id est incorrect.");
1406 1472 $dataSearch['s_date_acquisition'] = '';
1407 1473 $this->post('/materiels/find', $dataSearch);
1408   - $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par fournisseur_id est incorrecte.");
  1474 + $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par fournisseur_id est incorrect.");
1409 1475 $dataSearch['s_fournisseur_id'] = '';
1410 1476 $dataSearch['s_date_acquisition'] = '';
1411 1477  
... ... @@ -1413,59 +1479,134 @@ class MaterielsControllerTest extends General {
1413 1479 /*
1414 1480 * $dataSearch['s_salle'] = 'I203';
1415 1481 * $this->post('/materiels/find', $dataSearch);
1416   - * $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par detaille lieu est incorrecte.");
  1482 + * $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par detaille lieu est incorrect.");
1417 1483 */
1418 1484  
1419   - // - Test champ periode_acquisition1 (debut)
1420   - $dataSearch['s_periode_acquisition1'] = '2015-01-01';
  1485 +
  1486 + //
  1487 + // Test sur Période de temps (intervalle)
  1488 + //
  1489 +
  1490 + // - Test [champ periode_acquisition1 - +infini]
  1491 +
  1492 + //$dataSearch['s_periode_acquisition1'] = '2015-01-01';
  1493 + $dataSearch['s_periode_acquisition1'] = yyyy1mmdd1; // search [yyyy1mmdd1 - ]
1421 1494 $this->post('/materiels/find', $dataSearch);
1422   - $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrecte.");
1423   - // - Test champ periode_acquisition1 (debut) && champ periode_acquisition2 (fin)
1424   - $dataSearch['s_periode_acquisition2'] = '2016-01-01';
  1495 + //$this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrect.");
  1496 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrect.");
  1497 +
  1498 + $dataSearch['s_periode_acquisition1'] = yyyy1mmdd2; // search [yyyy1mmdd2 - ]
1425 1499 $this->post('/materiels/find', $dataSearch);
1426   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par intervalle entre la periode d'acquisition (debut) et la periode d'acquisition (fin) est incorrecte.");
1427   - // - Test champ periode_acquisition2 (fin)
  1500 + //$this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrect.");
  1501 + $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrect.");
  1502 +
  1503 + $dataSearch['s_periode_acquisition1'] = yyyy2mmdd2; // search [yyyy2mmdd2 - ]
  1504 + $this->post('/materiels/find', $dataSearch);
  1505 + $this->assertResponseContains('Résultats ('.nb_matos_in_fixture.')', "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrect.");
  1506 +
  1507 + $dataSearch['s_periode_acquisition1'] = yyyy2mmdd1; // search [yyyy2mmdd1 - ]
  1508 + $this->post('/materiels/find', $dataSearch);
  1509 + $this->assertResponseContains('Résultats (3)', "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrect.");
  1510 +
  1511 + $dataSearch['s_periode_acquisition1'] = yyyy0mmdd1; // search [yyyy0mmdd1 - ]
  1512 + $this->post('/materiels/find', $dataSearch);
  1513 + $this->assertResponseContains('Résultats (0)', "Le nb de materiels pour la recherche par debut de periode d'acquisition est incorrect.");
  1514 +
  1515 + // - Test [champ periode_acquisition1 - champ periode_acquisition2]
  1516 +
  1517 + //$dataSearch['s_periode_acquisition2'] = '2016-01-01';
  1518 + $dataSearch['s_periode_acquisition1'] = yyyy2mmdd2;
  1519 + $dataSearch['s_periode_acquisition2'] = yyyy1mmdd1; // search [yyyy2mmdd2 - yyyy1mmdd1] (plus ancien au plus récent)
  1520 + $this->post('/materiels/find', $dataSearch);
  1521 + //$this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par intervalle entre la periode d'acquisition (debut) et la periode d'acquisition (fin) est incorrect.");
  1522 + $this->assertResponseContains('Résultats ('.nb_matos_in_fixture.')', "Le nb de materiels pour la recherche par intervalle entre la periode d'acquisition (debut) et la periode d'acquisition (fin) est incorrect.");
  1523 +
  1524 + $dataSearch['s_periode_acquisition1'] = yyyy1mmdd1;
  1525 + $dataSearch['s_periode_acquisition2'] = yyyy2mmdd2; // search [yyyy1mmdd1 - yyyy2mmdd2]
  1526 + $this->post('/materiels/find', $dataSearch);
  1527 + $this->assertResponseContains('Résultats (0)', "Le nb de materiels pour la recherche par intervalle entre la periode d'acquisition (debut) et la periode d'acquisition (fin) est incorrect.");
  1528 +
  1529 + $dataSearch['s_periode_acquisition1'] = yyyy2mmdd2;
  1530 + $dataSearch['s_periode_acquisition2'] = yyyy2mmdd2; // search [yyyy2mmdd2 - yyyy2mmdd2]
  1531 + $this->post('/materiels/find', $dataSearch);
  1532 + $this->assertResponseContains('Résultats (4)', "Le nb de materiels pour la recherche par intervalle entre la periode d'acquisition (debut) et la periode d'acquisition (fin) est incorrect.");
  1533 +
  1534 + $dataSearch['s_periode_acquisition1'] = yyyy2mmdd1;
  1535 + $dataSearch['s_periode_acquisition2'] = yyyy1mmdd2; // search [yyyy2mmdd1 - yyyy1mmdd2]
  1536 + $this->post('/materiels/find', $dataSearch);
  1537 + $nb = nb_matos_in_fixture - 4 - 1;
  1538 + $this->assertResponseContains('Résultats ('.$nb.')', "Le nb de materiels pour la recherche par intervalle entre la periode d'acquisition (debut) et la periode d'acquisition (fin) est incorrect.");
  1539 +
  1540 + // - Test [-infini - champ periode_acquisition2]
  1541 +
1428 1542 $dataSearch['s_periode_acquisition1'] = '';
  1543 + $dataSearch['s_periode_acquisition2'] = yyyy0mmdd1; // search [ - yyyy0mmdd1] // jusqu'a l'infini
  1544 + $this->post('/materiels/find', $dataSearch);
  1545 + //$this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par fin de periode d'acquisition est incorrect.");
  1546 + $this->assertResponseContains('Résultats ('.nb_matos_in_fixture.')', "Le nb de materiels pour la recherche par fin de periode d'acquisition est incorrect.");
  1547 +
  1548 + $dataSearch['s_periode_acquisition2'] = yyyy1mmdd1; // search [ - yyyy1mmdd1] // jqau plus récent
1429 1549 $this->post('/materiels/find', $dataSearch);
1430   - $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par fin de periode d'acquisition est incorrecte.");
  1550 + $this->assertResponseContains('Résultats ('.nb_matos_in_fixture.')', "Le nb de materiels pour la recherche par fin de periode d'acquisition est incorrect.");
  1551 +
  1552 + $dataSearch['s_periode_acquisition2'] = yyyy1mmdd2; // search [ - yyyy1mmdd2]
  1553 + $this->post('/materiels/find', $dataSearch);
  1554 + $nb = nb_matos_in_fixture - 1;
  1555 + $this->assertResponseContains('Résultats ('.$nb.')', "Le nb de materiels pour la recherche par fin de periode d'acquisition est incorrect.");
  1556 +
  1557 + $dataSearch['s_periode_acquisition2'] = yyyy2mmdd1; // search [ - yyyy2mmdd1]
  1558 + $this->post('/materiels/find', $dataSearch);
  1559 + $nb = 5;
  1560 + $this->assertResponseContains('Résultats ('.$nb.')', "Le nb de materiels pour la recherche par fin de periode d'acquisition est incorrect.");
  1561 +
  1562 + $dataSearch['s_periode_acquisition2'] = yyyy2mmdd2; // search [ - yyyy2mmdd2] // jqau plus ancien
  1563 + $this->post('/materiels/find', $dataSearch);
  1564 + $nb = 5 - 1;
  1565 + $this->assertResponseContains('Résultats ('.$nb.')', "Le nb de materiels pour la recherche par fin de periode d'acquisition est incorrect.");
  1566 +
1431 1567 $dataSearch['s_periode_acquisition2'] = '';
1432 1568  
  1569 +
  1570 + //
  1571 + // Test sur prix
  1572 + //
  1573 +
1433 1574 // - Test champ prix_ht
1434 1575 $dataSearch['s_prix_ht'] = '50';
1435 1576 $this->post('/materiels/find', $dataSearch);
1436   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrecte (v1).");
  1577 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrect (v1).");
1437 1578 $dataSearch['s_prix_ht'] = '';
1438 1579 // - Meme test mais avec autres champs
1439 1580 $dataSearch['s_prix_ht_sup'] = '50'; // >= 50
1440 1581 $dataSearch['s_prix_ht_inf'] = '50'; // <= 50
1441 1582 $this->post('/materiels/find', $dataSearch);
1442   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrecte (v2).");
  1583 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrect (v2).");
1443 1584 $dataSearch['s_prix_ht_inf'] = '';
1444 1585 $dataSearch['s_prix_ht_sup'] = '';
1445 1586 $dataSearch['s_prix_ht'] = '75';
1446 1587 $this->post('/materiels/find', $dataSearch);
1447   - $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par prix ht est incorrecte (v1).");
  1588 + $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par prix ht est incorrect (v1).");
1448 1589 $dataSearch['s_prix_ht'] = '';
1449 1590  
1450 1591 // - Test champ prix_ht_sup
1451 1592 $dataSearch['s_prix_ht_sup'] = '30'; // >= 30
1452 1593 $this->post('/materiels/find', $dataSearch);
1453   - $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par prix ht superieur est incorrecte.");
  1594 + $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par prix ht superieur est incorrect.");
1454 1595 $dataSearch['s_prix_ht_sup'] = '';
1455 1596 // - Test champ prix_ht_inf
1456 1597 $dataSearch['s_prix_ht_inf'] = '70'; // <=70
1457 1598 $this->post('/materiels/find', $dataSearch);
1458   - $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par prix ht inferieur est incorrecte.");
  1599 + $this->assertResponseContains("Résultats (2)", "Le nb de materiels pour la recherche par prix ht inferieur est incorrect.");
1459 1600 $dataSearch['s_prix_ht_inf'] = '';
1460 1601 // - Test champ prix_ht_inf et sup
1461 1602 $dataSearch['s_prix_ht_sup'] = '30'; // >= 30
1462 1603 $dataSearch['s_prix_ht_inf'] = '70'; // <=70
1463 1604 $this->post('/materiels/find', $dataSearch);
1464   - $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht inf et sup est incorrecte.");
  1605 + $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht inf et sup est incorrect.");
1465 1606 $dataSearch['s_prix_ht_sup'] = '25'; // >= 30
1466 1607 $dataSearch['s_prix_ht_inf'] = '75'; // <=75
1467 1608 $this->post('/materiels/find', $dataSearch);
1468   - $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par prix ht inf et sup est incorrecte.");
  1609 + $this->assertResponseContains("Résultats (6)", "Le nb de materiels pour la recherche par prix ht inf et sup est incorrect.");
1469 1610 $dataSearch['s_prix_ht_inf'] = '';
1470 1611 $dataSearch['s_prix_ht_sup'] = '';
1471 1612  
... ...