Commit 40a911298914f865b7d3f740bb0edbeefb56824e

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

Grosse amélioration et bugfix liste matériels => bien plus pertinent

- (b) Bugfix et Amélioration filtre matériels (2 sur 2)
- (e) Réorganisation des colonnes de la liste des matériels (2 sur 2)

Autres modifs :
- (i) On peut toujours imprimer une étiquette (plus seulement quand la
fiche est validée)
- (i) Date achat désormais facultative (avant validation)
	=> si vide, numéro inventaire généré à partir de l'année courante
- (b) Bugfix (2eme) remplacement d'un fournisseur par un autre (date
achat peut être vide)

v4.107.17-3.7.9
CHANGES.txt
... ... @@ -12,6 +12,20 @@ CHANGEMENTS
12 12 ======= NEWS =======
13 13  
14 14  
  15 +-------
  16 +NOVEMBRE 2020 - JANVIER 2021 : Chantier en cours pour arriver à la v5 avec le nouveau workflow de commande
  17 +
  18 +ROADMAP IRAP :
  19 +- Janvier : test en production
  20 +- Février : présentation aux JST
  21 +- Mars : usage obligatoire pour toute commande
  22 +
  23 +
  24 +-------
  25 +26/11/2020 NEWS#5 (v4.107.x) :
  26 +
  27 +Liste des matériels beaucoup plus pratique (colonnes plus pertinentes) et filtrage plus efficace
  28 +
15 29  
16 30 -------
17 31 20/10/2020 NEWS#4 (v4.105.29-3.7.9) :
... ... @@ -127,23 +141,166 @@ Outre ces changements, voici d'autres changements importants :
127 141 - Une VM linux (Ubuntu) est désormais disponible pour faciliter le déploiement
128 142  
129 143  
130   -======= TODO =======
131 144  
132 145  
  146 +======= TODO3 - PEUT ATTENDRE =======
133 147  
134   -======= CHANGES =======
  148 +will_stay => resident (ou permanent)
  149 +
  150 +EOTP :
  151 +“Sur quel(s) budget(s) ?” c'est pour le lot 1 pour l'acheteur (status CREATED)
  152 +“Entité(s) dépensière(s)” / lot 2 gestionnaire (status VALIDATED)
  153 +
  154 +Modif d’une fiche materiel ne doit pas refaire une commande !!!
  155 +
  156 +- Install from scratch
  157 +
  158 +- Update VM
  159 +
  160 +- lire article juridique
  161 +
  162 +- check add by copy
  163 +
  164 +- appel à contribuer
  165 +
  166 +STATS
  167 +moyenne annuelle, total : arrondir (pas de virgule, ce sont des matos)
  168 +2 premières ligne en jaune pour mettre en évidence
  169 +mettre en rouge les évol. % négatifs
  170 +Ca continue de marcher en 2021 ?
  171 +
  172 +Fournisseur update :
  173 +3 - (LATER) Simplifier le beforeSave() sur le traitement des feurs car ça sera désormais inutile vue que CLEAN
  174 +
  175 +GO GENERIC :
  176 +delete generic
  177 +index generic
  178 +add_edit generic
  179 +
  180 +Services (poles)
  181 +
  182 +cakephp 3.9
  183 +
  184 +cake crud + view
  185 +
  186 +
  187 +
  188 +
  189 +======= TODO2 - URGENT =======
  190 +
  191 +- Adapter règles "nouveau suivi"
  192 +
  193 +
  194 +- 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 !)
  195 +
  196 +
  197 +- technique/admin inutile
  198 +
  199 +
  200 +- Gestionnaire de ref : + “Je ne sais pas”
  201 +
  202 +
  203 +Install titreuse Carole
  204 +
  205 +DB complète à mettre à jour
  206 +
  207 +- (MT) Install locale, puis répondre stagiaire
  208 +
  209 +- install GEPI
135 210  
136   -TODO :
137   - - (b) Bugfix "nouveau suivi"
  211 +- déclarer etiquette collée => supprimer ?
  212 +
  213 +- Commande directe ou seulement pour inventaire : "Enregistrer & Commander" et "Enregistrer seulement"
  214 +
  215 +- Infos obligatoires LOT1
  216 +
  217 +- Supprimer un CREATED + Annuler cde + tobeordered=true + edit possible
  218 +
  219 +- Validation (LOT2 obligatoire) + invalider + edit LOT2
  220 +
  221 +ADMIN Dernier modificateur = Gestionnaire de ref.
  222 +
  223 +Ancien seuil 800€ doit rester valable pour anciens matos
  224 +
  225 +Partager les imprimantes de Jean-Louis (pour Roche) et Carole (pour Belin)
  226 +
  227 +Responsable = groupe métier, ou projet, ou pôle (PIME), MAIS PAS thématique
  228 +
  229 +Bug groupe thématique dans groupe metier sur fiche materiel (+ virer “code comptable” et changer le nom des champs eotp, ajouter ligne budgétaire…)
  230 +
  231 +Procédure accueil :
  232 +>=10K obligatoire (inventaire comptable)
  233 +<10K : possible quand même (inventaire physique)
  234 +Bouton “Je veux commander un matos”
  235 +
  236 +Mail “Matériel à commander (Fiche inventirap n° XXX)” :
  237 +Ce mail est destiné au gestionnaire “untel”
  238 +Acheteur/Demandeur :
  239 +Utilisateur :
  240 +Désignation :
  241 +Description :
  242 +A commander sur le(s) budget(s) :
  243 +Devis en pièce jointe
  244 +
  245 +
  246 +GEPI (Laurence)
  247 +
  248 +Nouvelle fiche matos :
  249 +Bouton “Commander”
  250 +=> Si ADMIN, devient “Enregistrer” (et pas de mail envoyé)
  251 +Menu Matos/Nouveau materiel => ADMIN only
  252 +
  253 +Commander etiqueteuses
  254 +
  255 +
  256 +Bugfix : un profil Utilisateur ne doit pas pouvoir changer l’acheteur (acheteur = lui) !!!
  257 +
  258 +User = Acheteur
  259 +
  260 +Modif possible sans devoir dévalider/revalider
  261 +
  262 +Outils : voir/gérer ?
  263 +
  264 +Photo : type ?
  265 +documents.photo = TRUE
  266 +
  267 +Fournisseurs : src/Template/Common/add_edit.ctp
  268 +
  269 +
  270 +
  271 +
  272 +
  273 +
  274 +Ecran d’accueil :
  275 +Voir Mes matériels (que j’ai achetés)
  276 +Voir les Matériels que j’utilise (find sur champ utilisateur)
  277 +(admin) Voir Matériels à commander (tous les TOBEORDERED qui sont à mon nom de gestionnaire ET qui ont (date-cde null OU num-BC null)
  278 +(admin) “Voir toutes les commandes en cours”
  279 +(admin) “Voir les matériels ‘zombie’” (materiels CREATED depuis longtemps, et toujours pas ORDERED => sans doute à virer (pour ne pas fausser les stats...)
  280 +(admin) Voir matos à archiver
  281 +
  282 +
  283 +
  284 +TAG version 3.7.9 finale ANCIEN workflow
  285 +
  286 +
  287 +
  288 +======= TODO1 - BUGFIXES (TRES URGENT) =======
  289 +
  290 + - (b) Bugfix et Amélioration Recherche matériels
  291 + - (e) Réorganisation des colonnes de la liste des matériels recherchés
  292 +
  293 +
  294 +======= CHANGES =======
138 295  
139 296 -------
140 297 26/11/2020 v4.107.17-3.7.9
141   - - (b) Bugfix et amélioration Recherche et filtre matériels (2 sur 2)
  298 + - (b) Bugfix et Amélioration filtre matériels (2 sur 2)
142 299 - (e) Réorganisation des colonnes de la liste des matériels (2 sur 2)
143 300  
144 301 -------
145 302 25/11/2020 v4.107.16-3.7.9
146   - - (b) Bugfix et amélioration Recherche et filtre matériels (1 sur 2)
  303 + - (b) Bugfix et amélioration filtre matériels (1 sur 2)
147 304 - (e) Réorganisation des colonnes de la liste des matériels (1 sur 2)
148 305 - (i) On peut toujours imprimer une étiquette (plus seulement quand la fiche est validée)
149 306 - (i) Date achat désormais facultative (avant validation)
... ...
README.md
... ... @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes :
52 52  
53 53 --------------------------------------------------------------------------------------------
54 54  
55   -Date: 25/11/2020
56   -Version: 4.107.16-3.7.9
  55 +Date: 26/11/2020
  56 +Version: 4.107.17-3.7.9
57 57  
58 58  
59 59 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes)
... ...
src/Controller/MaterielsController.php
... ... @@ -899,7 +899,7 @@ class MaterielsController extends AppController {
899 899 //debug($this->request);
900 900 $conditions = [];
901 901 //$contain = [];
902   - $contain = ['Fournisseurs', 'Categories', 'Organismes', 'Projets', 'Users'];
  902 + $contain = ['Sites', 'Fournisseurs', 'Categories', 'Organismes', 'Projets', 'Users'];
903 903  
904 904  
905 905 // - FILTRE Statut ? (status=CREATED, status=VALIDATED, ...)
... ... @@ -1295,16 +1295,30 @@ class MaterielsController extends AppController {
1295 1295 'limit' => $limit,
1296 1296 'maxLimit' => 1000,
1297 1297 'sortWhitelist' => [
  1298 +
  1299 + // - Champs directs
1298 1300 'designation',
1299 1301 'numero_laboratoire',
1300   - 'Categories.nom',
1301   - 'Organismes.nom',
  1302 + // tutelle
1302 1303 'numero_inventaire_organisme',
  1304 + 'numero_commande',
1303 1305 //'nom_responsable',
1304 1306 'nom_user',
  1307 +
1305 1308 'status',
1306 1309 'date_acquisition',
1307   - 'etiquette',
  1310 + 'prix_ht',
  1311 + //'etiquette',
  1312 + //'lieu_detail',
  1313 +
  1314 + // - Champs FK (HasOne only)
  1315 + 'Sites.nom',
  1316 + 'Categories.nom',
  1317 + //'Organismes.nom',
  1318 + // Gestionnaire
  1319 + 'Users.nom',
  1320 + 'Fournisseurs.nom',
  1321 +
1308 1322 ],
1309 1323 'order' => [
1310 1324 'numero_laboratoire' => 'desc'
... ... @@ -1423,6 +1437,9 @@ class MaterielsController extends AppController {
1423 1437 */
1424 1438 $materiel = $this->Materiels->get($id, [
1425 1439 'contain' => [
  1440 +
  1441 + // 1) HasOne
  1442 +
1426 1443 'SurCategories',
1427 1444 'Categories',
1428 1445 'SousCategories',
... ... @@ -1431,15 +1448,23 @@ class MaterielsController extends AppController {
1431 1448 'Projets',
1432 1449 'Organismes',
1433 1450 'Sites',
  1451 + 'Fournisseurs',
  1452 +
  1453 + //'Gestionnaires',
  1454 + 'Users',
  1455 +
  1456 + // 2) HasMany
  1457 +
1434 1458 'Documents',
1435 1459 'Emprunts',
1436 1460 // Tous les suivis de ce $materiel (sans leur type)
1437 1461 //'Suivis',
1438 1462 // Tous les suivis de ce $materiel AVEC leur type de suivi
1439 1463 'Suivis.TypeSuivis',
1440   - 'Fournisseurs'
  1464 +
1441 1465 ]
1442 1466 ]);
  1467 +
1443 1468 $this->e = $materiel;
1444 1469 $e = $materiel;
1445 1470  
... ... @@ -2885,6 +2910,7 @@ class MaterielsController extends AppController {
2885 2910 $search_fields = [
2886 2911  
2887 2912 // 1) Materiels table direct (straight) columns
  2913 +
2888 2914 'Materiels.designation',
2889 2915 'Materiels.numero_laboratoire',
2890 2916 'Materiels.numero_inventaire_organisme',
... ... @@ -2899,11 +2925,15 @@ class MaterielsController extends AppController {
2899 2925 'Materiels.date_acquisition',
2900 2926 'Materiels.lieu_detail',
2901 2927  
2902   - // 2) Materiels table foreign keys
  2928 + // 2) Materiels table foreign keys (HasOne only)
  2929 +
  2930 + 'Sites.nom',
2903 2931 'Fournisseurs.nom',
2904 2932 'Categories.nom',
2905 2933 'Organismes.nom',
2906 2934 'Projets.nom',
  2935 +
  2936 + // - Gestionnaire
2907 2937 'Users.nom',
2908 2938  
2909 2939 ];
... ...
src/Template/Materiels/index.ctp
... ... @@ -31,6 +31,7 @@ $statuses_color = $statuses_color;
31 31 $nbMateriels = $nbMateriels;
32 32 $controller=$controller;
33 33 $materiels = $materiels;
  34 +//debug($materiels);
34 35 $configuration = $configuration;
35 36 $searchfor = $searchfor;
36 37  
... ... @@ -847,7 +848,10 @@ if ($SELECTED_STATUS) echo $this-&gt;Form-&gt;hidden(&#39;what&#39;, [&#39;value&#39;=&gt;$SELECTED_STATU
847 848 -->
848 849 <th><?= $this->Paginator->sort('nom_user', "Utilisateur") ?></th>
849 850  
850   - <th><?= $this->Paginator->sort('Gestionnaires.nom', 'Gestionnaire') ?></th>
  851 + <!--
  852 + <th><= $this->Paginator->sort('Gestionnaires.nom', 'Gestionnaire') ?></th>
  853 + -->
  854 + <th><?= $this->Paginator->sort('Users.nom', 'Gestionnaire') ?></th>
851 855  
852 856 <!--
853 857 <th><= $this->Paginator->sort('categorie_id', 'Catégorie') ?></th>
... ... @@ -858,11 +862,14 @@ if ($SELECTED_STATUS) echo $this-&gt;Form-&gt;hidden(&#39;what&#39;, [&#39;value&#39;=&gt;$SELECTED_STATU
858 862  
859 863 <th><?= $this->Paginator->sort('date_acquisition', 'Date Achat') ?></th>
860 864  
861   - <th><?= $this->Paginator->sort('prix', 'Prix') ?></th>
  865 + <th><?= $this->Paginator->sort('prix_ht', 'Prix') ?></th>
862 866  
863 867 <th><?= $this->Paginator->sort('Fournisseurs.nom', 'Fournisseur') ?></th>
864 868  
865   - <th><?= $this->Paginator->sort('lieu_detail', 'Lieu') ?></th>
  869 + <!--
  870 + <th><= $this->Paginator->sort('lieu_detail', 'Lieu') ?></th>
  871 + -->
  872 + <th><?= $this->Paginator->sort('Sites.nom', 'Lieu') ?></th>
866 873  
867 874 <!--
868 875 <th><= $this->Paginator->sort('Organismes.nom', 'Org.') ?></th>
... ... @@ -938,7 +945,10 @@ if ($SELECTED_STATUS) echo $this-&gt;Form-&gt;hidden(&#39;what&#39;, [&#39;value&#39;=&gt;$SELECTED_STATU
938 945 -->
939 946 <td class="smallText"><?= h($materiel->nom_user) ?></td>
940 947  
941   - <td class="smallText"><?= $materiel->has('gestionnaire') ? h($materiel->gestionnaires->nom) : '' ?></td>
  948 + <!--
  949 + <td class="smallText"><= $materiel->has('gestionnaire') ? h($materiel->gestionnaire->nom) : '' ?></td>
  950 + -->
  951 + <td class="smallText"><?= $materiel->has('user') ? h($materiel->user->nom) : '' ?></td>
942 952  
943 953 <td class="smallText"><?= $materiel->has('category') ? h($materiel->category->nom) : '' ?></td>
944 954  
... ... @@ -970,7 +980,14 @@ if ($SELECTED_STATUS) echo $this-&gt;Form-&gt;hidden(&#39;what&#39;, [&#39;value&#39;=&gt;$SELECTED_STATU
970 980  
971 981 <td class="smallText"><?= $materiel->has('fournisseur') ? h($materiel->fournisseur->nom) : '' ?></td>
972 982  
973   - <td class="smallText"><?= h($materiel->lieu_detail) ?></td>
  983 + <?php
  984 + $lieu = $materiel->has('site') ? h($materiel->site->nom) : '';
  985 + if ($materiel->lieu_detail) {
  986 + if ($materiel->has('site')) $lieu .= '-';
  987 + $lieu .= $materiel->lieu_detail;
  988 + }
  989 + ?>
  990 + <td class="smallText"><?=$lieu?></td>
974 991  
975 992 <!--
976 993 <td class="smallText"><= $materiel->has('organisme') ? h($materiel->organisme->nom) : '' ?></td>
... ...
src/Template/Materiels/view.ctp
... ... @@ -717,7 +717,7 @@ $CAN_PRINT_LABEL = $IS_VALIDATED &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $USER_IS_ADMIN
717 717 $displayElement(__('Lieu de stockage'), $entity->has('site') ? h($entity->site->nom) : '');
718 718 $displayElement(__('Détail lieu de stockage'), h($entity->lieu_detail));
719 719  
720   - // Acheteur (lien mailto)
  720 + // - Acheteur (lien mailto)
721 721 $displayElement(__("Nom de l'acheteur"),
722 722 $this->Html->link(
723 723 h($entity->nom_responsable),
... ... @@ -727,26 +727,34 @@ $CAN_PRINT_LABEL = $IS_VALIDATED &amp;&amp; $configuration-&gt;hasPrinter &amp;&amp; $USER_IS_ADMIN
727 727 )
728 728 );
729 729  
730   - // Utilisateur
  730 + // - Utilisateur
731 731 $displayElement(__("Nom de l'utilisateur (destination du bien)"), h($entity->nom_user));
732 732  
733 733 $displayElement(__('N. interne (labo)'), h($entity->numero_laboratoire));
  734 +
  735 + // - Gestionnaire
  736 + $entity->user && $displayElement(__('Gestionnaire de référence'), h($entity->user->nom));
  737 + /*
734 738 if ($entity->gestionnaire_id) {
735 739 $gestionnaire = TableRegistry::getTableLocator()->get('Users')->get($entity->gestionnaire_id);
736 740 $displayElement(__('Gestionnaire de référence'), h($gestionnaire->nom));
737 741 }
  742 + */
738 743 /*
739 744 $gestionnaire = TableRegistry::get('Users')->find()->where([
740 745 'id =' => $entity->gestionnaire_id
741 746 ]);
742 747 $displayElement(__('Gestionnaire de référence'), h($gestionnaire->first()['nom']));
743 748 */
  749 +
  750 + // - Créateur et modificateur de la fiche
744 751 if ($role == 'Super Administrateur') {
745 752 //$displayElement(__('Date création'), h($entity->created));
746 753 $displayElement(__('Nom du créateur'), h($entity->nom_createur));
747 754 $displayElement(__('Date modification'), h($entity->modified));
748 755 $displayElement(__('Nom du modificateur'), h($entity->nom_modificateur));
749 756 }
  757 +
750 758 ?>
751 759 </table>
752 760  
... ...