Commit 2e1d0b2f456eca73ddd6484bb9e15554becfe6ae

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

Ajout "Voir matériels à commander" (configurable) sur accueil Gestion

et bugfixes :
- Bugfix : cocher les boutons "A valider", et "En commande" quand
activés
- Bugfix : sur la page accueil des gestionnaires, correction des liens
vers les matos

=> v5.1.1-3.7.9
CHANGELOG
... ... @@ -334,15 +334,26 @@ Commencer à implémenter le nouveau workflow v5 :
334 334  
335 335 ======= TODO =======
336 336  
  337 + bugfix droits edit/delete dans Element/buttons_edit_del.ctp
337 338  
338   - Relance auto lors de suivis périodiques
  339 + bugfix droits edit/delete dans liste des documents attachés
339 340  
  341 + Pouvoir modifier le champ "n° inventaire Tutelle" sur un matos validé
  342 + (Service fait CNRS ----> je récupère le n° inventaire "Tutelle" sur GESLAB (SIFAC ?) et je complète la fiche INVENTIRAP
  343 +
340 344 Envoi mail à l'utilisateur du matériel lors de livraison
  345 +
  346 + Définir (dans le fichier de conf) la liste des infos qui ne doivent pas pouvoir être modifiées une fois le matériel :
  347 + - en commande (lot1)
  348 + - validé (lot2)
  349 +
  350 + Détail lieu stockage demandé seulement si > 10K€
341 351  
342 352 Procédures pour les utilisateurs et les gestionnaires désormais configurable via le fichier de conf
343 353  
344 354 TESTS !!!!
345 355  
  356 + Relance auto lors de suivis périodiques
346 357  
347 358  
348 359  
... ... @@ -350,6 +361,11 @@ Commencer à implémenter le nouveau workflow v5 :
350 361  
351 362 ======= CHANGES =======
352 363  
  364 +-------
  365 +08/09/2021 v5.1.1-3.7.9
  366 + - (e) Ajouter lien "Voir les matériels à commander" (configurable) sur page accueil Gestionnaires (le mettre avant "voir les matos à valider")
  367 + - (b) Bugfix : cocher les boutons "A valider", et "En commande" quand activés
  368 + - (b) Bugfix : sur la page accueil des gestionnaires, correction des liens vers les matos
353 369  
354 370 -------
355 371 08/09/2021 v5.1.0-3.7.9
... ... @@ -358,7 +374,7 @@ Commencer à implémenter le nouveau workflow v5 :
358 374  
359 375 -------
360 376 08/09/2021 v5.0.2-3.7.9
361   - - (b) Bugfix lien vers doc utilisateurs
  377 + - (b) Bugfix : lien vers doc utilisateurs
362 378  
363 379 -------
364 380 07/09/2021 v5.0.1-3.7.9
... ...
README.md
... ... @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes :
53 53 --------------------------------------------------------------------------------------------
54 54  
55 55 Date: 08/09/2021
56   -Version: v5.1.0-3.7.9
  56 +Version: v5.1.1-3.7.9
57 57  
58 58  
59 59  
... ...
config/app_labinvent_mandatory_fields.default.yml
... ... @@ -100,19 +100,28 @@ MANDATORY_FIELDS_LOT1:
100 100  
101 101 #'fournisseur'
102 102  
103   - # Devis joint : c'est un champ virtuel, il n'existe pas physiquement (sauf dans la table Documents)
104   - DEVIS: 'Devis'
105   -
106 103 # Utilisé par la Gestion pour remplir le champ eotp
107 104 budgets: 'Budgets'
108 105  
109 106 # INFOS ADMINISTRATIVES
110 107 # - EOTP : obligatoire seulement dans LOT2
111 108 #'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s)
112   -
  109 +
  110 +
  111 + # CHAMPS VIRTUELS
  112 + # - Devis joint : c'est un champ virtuel, il n'existe pas physiquement (sauf dans la table Documents)
  113 + DEVIS: 'Devis'
  114 +
113 115 # ******* END OF MANDATORY_FIELDS_LOT1 ********
114 116  
115 117  
  118 +# Liste des champs qui ne peuvent plus être modifiés après la demande d'achat (commande)
  119 +UNEDITABLE_FIELDS_LOT1: []
  120 +
  121 +
  122 +
  123 +
  124 +
116 125  
117 126  
118 127 # *************************************
... ... @@ -148,11 +157,53 @@ MANDATORY_FIELDS_LOT2:
148 157 eotp: 'Entité(s) dépensière(s) (budget(s))'
149 158  
150 159 numero_commande: 'Num. BC'
151   - numero_inventaire_organisme: "N° inventaire de l'organisme"
  160 +
  161 + # PROBLEME :
  162 + # On ne peut pas exiger ce numéro au moment de la livraison
  163 + # car le gestionnaire n'a cette info que lorsque "Service fait CNRS" (il récupère alors le n° inventaire "Tutelle" sur GESLAB)
  164 + #numero_inventaire_organisme: "N° inventaire de l'organisme"
152 165  
153 166 # ******* END OF $MANDATORY_FIELDS_LOT2 ********
154 167  
155 168  
  169 +# Liste des champs qui ne peuvent plus être modifiés après la validation (livraison)
  170 +#UNEDITABLE_FIELDS_LOT2: []
  171 +UNEDITABLE_FIELDS_LOT2:
  172 +
  173 + # Champs généraux :
  174 +
  175 + sur_categorie_id:
  176 +
  177 + categorie_id:
  178 +
  179 + materiel_administratif:
  180 +
  181 + materiel_technique:
  182 +
  183 + site_id:
  184 +
  185 + date_acquisition:
  186 +
  187 + date_reception:
  188 +
  189 + organisme_id:
  190 +
  191 + prix_ht:
  192 +
  193 + gestionnaire_id:
  194 +
  195 + # Champs administratifs :
  196 +
  197 + eotp:
  198 +
  199 + numero_commande:
  200 +
  201 + numero_inventaire_organisme:
  202 +
  203 + numero_inventaire_old:
  204 +
  205 +
  206 +
156 207  
157 208  
158 209 # Astuce utilisable :
... ...
src/Controller/AppController.php
... ... @@ -46,6 +46,9 @@ use Cake\Utility\Inflector;
46 46 class AppController extends Controller
47 47 {
48 48  
  49 + // Bouton "Commander" disponible ?
  50 + private static $HAS_ORDER_BUTTON = null;
  51 +
49 52 // Si DEBUG, affiche plus d'infos
50 53 protected $DEBUG=false;
51 54 //protected $DEBUG=true;
... ... @@ -356,6 +359,19 @@ class AppController extends Controller
356 359 'delete' => ['Suppression','supprimé'],
357 360 ];
358 361  
  362 +
  363 + // Les matos peuvent-ils être commandés (bouton commander) ?
  364 + // vrai par défaut (sauf si explicité dans la config)
  365 + public static function hasOrderButton() {
  366 + // OPTIM : si déjà lu, on relit pas
  367 + if (! is_null(self::$HAS_ORDER_BUTTON)) return self::$HAS_ORDER_BUTTON;
  368 + // Pas encore lu, on lit
  369 + $has_order_button = Configure::read('HAS_ORDER_BUTTON');
  370 + if (is_null($has_order_button)) $has_order_button = true;
  371 + self::$HAS_ORDER_BUTTON = $has_order_button;
  372 + return $has_order_button;
  373 + }
  374 +
359 375 protected function setActionsNounAndPastVerb(array $actionsNounAndPastVerb) {
360 376 /* Non, finalement on fait ça dans le get()
361 377 // Si genre féminin, on féminise tous les verbes en ajoutant 'e' à la fin (ajouté-e, modifié-e, ...)
... ...
src/Controller/DocumentsController.php
... ... @@ -83,6 +83,7 @@ class DocumentsController extends AppController
83 83  
84 84 // Action 'edit' (modif d'une entité) => comme pour 'add'
85 85 $this->setAuthorizationsForAction('edit', 'add', [
  86 + 'admin' => 0,
86 87 'super' => ['default',0]
87 88 ]);
88 89  
... ...
src/Controller/MaterielsController.php
... ... @@ -28,10 +28,6 @@ use Cake\Core\Configure;
28 28 */
29 29 class MaterielsController extends AppController {
30 30  
31   - // Bouton "Commander" disponible ?
32   - private static $HAS_ORDER_BUTTON = null;
33   -
34   -
35 31 // - ATTRIBUTS CONSTANTES
36 32  
37 33 /*
... ... @@ -375,7 +371,8 @@ class MaterielsController extends AppController {
375 371 public function getNameFieldLabel() {
376 372 return 'designation';
377 373 }
378   -
  374 +
  375 + /* moved to AppController
379 376 // Les matos peuvent-ils être commandés (bouton commander) ?
380 377 // vrai par défaut (sauf si explicité dans la config)
381 378 public static function hasOrderButton() {
... ... @@ -387,6 +384,7 @@ class MaterielsController extends AppController {
387 384 self::$HAS_ORDER_BUTTON = $has_order_button;
388 385 return $has_order_button;
389 386 }
  387 + */
390 388  
391 389  
392 390 /*
... ... @@ -3220,7 +3218,7 @@ class MaterielsController extends AppController {
3220 3218 */
3221 3219 public function statusValidated($id = null, $from = 'index')
3222 3220 {
3223   - $this->_statusSetTo('VALIDATED', 'Le matériel a bien été validé', $id, $from);
  3221 + $this->_statusSetTo('VALIDATED', "Le matériel a bien été validé (n'oubliez pas de saisir le n° inventaire 'tutelle' une fois le 'service fait')", $id, $from);
3224 3222 /*
3225 3223 * (EP) moved to statusSetTo()
3226 3224 * if (in_array($_SESSION['Auth']['User']['sn'][0], TableRegistry::get('Users')
... ...
src/Controller/PagesController.php
... ... @@ -275,6 +275,11 @@ class PagesController extends AppController
275 275 // Finalement, on affiche la $page demandée (avec render())
276 276 $this->set('page', $this->page);
277 277 $this->set(compact('subpage'));
  278 +
  279 + // - Page d'ACCUEIL
  280 + if ($this->page=='home') {
  281 + $this->set('HAS_ORDER_BUTTON',self::hasOrderButton());
  282 + }
278 283  
279 284 // - Page des LOGS
280 285 // /pages/logs?level=info
... ...
src/Template/Materiels/add_edit.ctp
... ... @@ -190,19 +190,20 @@ $administrationData = array(
190 190 $myReadonlyFields = array();
191 191 if ($IS_VALIDATED)
192 192 // can only modify some fields
193   - $myReadonlyFields = array_merge(array(
194   - 'sur_categorie_id',
195   - 'categorie_id',
196   - 'materiel_administratif',
197   - 'materiel_technique',
198   - 'site_id',
199   - 'date_acquisition',
200   - 'date_reception',
201   - 'organisme_id',
202   - 'prix_ht',
203   - 'gestionnaire_id'
204   - ),
205   - $administrationData
  193 + $myReadonlyFields = array_merge(
  194 + array(
  195 + 'sur_categorie_id',
  196 + 'categorie_id',
  197 + 'materiel_administratif',
  198 + 'materiel_technique',
  199 + 'site_id',
  200 + 'date_acquisition',
  201 + 'date_reception',
  202 + 'organisme_id',
  203 + 'prix_ht',
  204 + 'gestionnaire_id'
  205 + ),
  206 + $administrationData
206 207 );
207 208 else if ($IS_ARCHIVED_OR_TOBE) $myReadonlyFields = array('*','status');
208 209 if ($IS_VALIDATED && $materiel->sous_categorie_id)
... ... @@ -216,6 +217,7 @@ if ($IS_VALIDATED && $materiel->numero_serie)
216 217 $myReadonlyFields
217 218 );
218 219 } // EDIT only
  220 +debug($myReadonlyFields);
219 221  
220 222  
221 223 // Création des 2 boutons submit du formulaire (Enregistrer et Cancel)
... ... @@ -432,7 +434,7 @@ if (isset($cpMateriel)) {
432 434 // ADD only
433 435 //////'default' => $materiel->sur_categorie_id,
434 436 // EDIT only
435   - 'readonly' => $IS_ADD ? false : $isReadonlyField('sur_categorie_id', $myReadonlyFields),
  437 + //'readonly' => $IS_ADD ? false : $isReadonlyField('sur_categorie_id', $myReadonlyFields),
436 438 'disabled' => $IS_ADD ? false : $isReadonlyField('sur_categorie_id', $myReadonlyFields)
437 439 ]);
438 440 // - CATEGORIE
... ... @@ -983,7 +985,7 @@ if (isset($cpMateriel)) {
983 985 */
984 986  
985 987 if ($IS_EDIT || ($IS_ADD && $USER_IS_ADMIN_OR_MORE)) {
986   - $DISABLED = $IS_ADD ? false : !$USER_IS_ADMIN_OR_MORE;
  988 + //$DISABLED = $IS_ADD ? false : !$USER_IS_ADMIN_OR_MORE;
987 989 echo '<div style="border-top: 1px solid #CCC; border-bottom: 1px solid #CCC; margin-bottom: 0; background: #EEE;"><span style="font-size: 9px; color: red;">Partie administrative</span>';
988 990  
989 991 //(EDIT only)
... ... @@ -1004,20 +1006,24 @@ if (isset($cpMateriel)) {
1004 1006 * 'Super Administrateur'
1005 1007 * ])) {
1006 1008 */
1007   - echo $this->Form->control('eotp', [
  1009 + $fname = 'eotp';
  1010 + echo $this->Form->control($fname, [
1008 1011 'label' => 'Entité(s) dépensière(s) (voir champ Budgets juste au-dessus)',
1009 1012 //'label' => 'Entité(s) dépensière(s) (i.e. sur quel(s) budget(s) ?)',
1010 1013 //'label' => 'Centre(s) financier(s) / EOTP',
1011 1014 // EDIT only
1012   - 'disabled' => $DISABLED,
  1015 + //'disabled' => $DISABLED,
  1016 + 'disabled' => $IS_ADD ? false : $isReadonlyField($fname, $myReadonlyFields),
1013 1017 'placeholder' => 'Si plusieurs, séparer avec virgule'
1014 1018 ]);
1015 1019  
1016 1020 // - Numéro BC
1017 1021 // On peut entrer le numero bon commande si le materiel est technique et qu'on est responsable du groupe
1018   - $BC_DISABLED = $DISABLED;
  1022 + $fname = 'numero_commande';
  1023 + //$BC_DISABLED = $DISABLED;
  1024 + $BC_DISABLED = $IS_ADD ? false : $isReadonlyField($fname, $myReadonlyFields);
1019 1025 if ($IS_EDIT && $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL && $materiel->materiel_administratif==0) $BC_DISABLED = False;
1020   - echo $this->Form->control('numero_commande', [
  1026 + echo $this->Form->control($fname, [
1021 1027 'label' => 'Numéro BC',
1022 1028 // EDIT only
1023 1029 'disabled' => $BC_DISABLED
... ... @@ -1045,14 +1051,14 @@ if (isset($cpMateriel)) {
1045 1051 echo $this->Form->control('numero_inventaire_organisme', [
1046 1052 'label' => 'N° inventaire comptable/tutelles',
1047 1053 // EDIT only
1048   - 'disabled' => $DISABLED
  1054 + //'disabled' => $DISABLED
1049 1055 ]);
1050 1056  
1051 1057 // Num inventaire (ancien)
1052 1058 echo $this->Form->control('numero_inventaire_old', [
1053 1059 'label' => 'Ancien N° inventaire',
1054 1060 // EDIT only
1055   - 'disabled' => $DISABLED
  1061 + //'disabled' => $DISABLED
1056 1062 ]);
1057 1063  
1058 1064 echo '</div>';
... ...
src/Template/Materiels/index.ctp
... ... @@ -199,22 +199,23 @@ $displayStatusButtons = function($HAS_ORDER_BUTTON, $SELECTED_STATUS, $params, $
199 199 ?>
200 200 <div class="actions" style="width: 100%; float: none; padding: 0 0;">
201 201 <?php
202   -
203 202 echo '<p>';
204 203 echo "Afficher les matériels : ";
205 204 echo '</br>';
206 205 echo '</br>';
207   - $b_all = $b_cre = $b_val = $b_toarc = $b_arc = '';
  206 + $b_all = $b_cre = $b_tbo = $b_val = $b_tba = $b_arc = '';
208 207 $SELECTED = '<i class="icon-ok"></i>';
209 208 //if (isset($SELECTED_STATUS)) {
210 209 if ($SELECTED_STATUS) {
211 210 if ($SELECTED_STATUS == 'CREATED')
212 211 $b_cre = $SELECTED;
213   - else if ($SELECTED_STATUS == 'VALIDATED')
  212 + elseif ($SELECTED_STATUS == 'TOBEORDERED')
  213 + $b_tbo = $SELECTED;
  214 + elseif ($SELECTED_STATUS == 'VALIDATED')
214 215 $b_val = $SELECTED;
215   - else if ($SELECTED_STATUS == 'TOBEARCHIVED')
216   - $b_toarc = $SELECTED;
217   - else if ($SELECTED_STATUS == 'ARCHIVED')
  216 + elseif ($SELECTED_STATUS == 'TOBEARCHIVED')
  217 + $b_tba = $SELECTED;
  218 + elseif ($SELECTED_STATUS == 'ARCHIVED')
218 219 $b_arc = $SELECTED;
219 220 } else $b_all = $SELECTED;
220 221  
... ... @@ -228,9 +229,9 @@ $displayStatusButtons = function($HAS_ORDER_BUTTON, $SELECTED_STATUS, $params, $
228 229 'TOUS' => [$b_all, 'TOUS', 'Tous les matériels', 5],
229 230 'CREATED' => [$b_cre, 'À VALIDER', 'Seulement les matériels créés (à valider)', 5]
230 231 ];
231   - if ($HAS_ORDER_BUTTON) $statuses['TOBEORDERED'] = [$b_cre, 'EN COMMANDE', 'Seulement les matériels commandés (à valider)', 5];
  232 + if ($HAS_ORDER_BUTTON) $statuses['TOBEORDERED'] = [$b_tbo, 'EN COMMANDE', 'Seulement les matériels commandés (à valider)', 5];
232 233 $statuses['VALIDATED'] = [$b_val, 'VALIDÉS', "Seulement les matériels validés", 5];
233   - $statuses['TOBEARCHIVED'] = [$b_toarc, 'À SORTIR', "Seulement les matériels à archiver", 5];
  234 + $statuses['TOBEARCHIVED'] = [$b_tba, 'À SORTIR', "Seulement les matériels à archiver", 5];
234 235 $statuses['ARCHIVED'] = [$b_arc, 'ARCHIVÉS', "Seulement les matériels sortis de l'inventaire", 0];
235 236  
236 237 // https://book.cakephp.org/3/en/views/helpers/html.html#creating-links
... ... @@ -259,72 +260,6 @@ $displayStatusButtons = function($HAS_ORDER_BUTTON, $SELECTED_STATUS, $params, $
259 260 ]);
260 261 }
261 262  
262   - /*
263   - //echo $this->Html->link($b_all . ' Tous', [
264   - echo $html->link($b_all . ' TOUS', [
265   - //'action' => 'index',
266   - //'?' => $params
267   - '?' => array_merge($params, ['status'=>null])
268   - ], [
269   - 'title' => 'Tous',
270   - 'style' => 'margin-right: 5px',
271   - 'escape' => false
272   - ]);
273   -
274   - $status = 'CREATED';
275   - echo $html->link($b_cre . ' A valider', [
276   - //'action' => 'index',
277   - //'CREATED',
278   - // https://book.cakephp.org/3/en/views/helpers/html.html#creating-links
279   - //'?' => ['height' => 400, 'width' => 500]
280   - //'?' => $params + ['status'=>'CREATED']
281   - '?' => array_merge($params, ['status'=>$status])
282   - //'?' => null
283   - //[$args],
284   - //"http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
285   - ], [
286   - 'title' => 'Liste des matériels créés',
287   - 'style' => 'margin-right: 5px',
288   - 'escape' => false
289   - ]);
290   -
291   - $status = 'VALIDATED';
292   - echo $html->link($b_val . ' Validés', [
293   - //'action' => 'index',
294   - //'VALIDATED',
295   - //'?' => $params
296   - '?' => array_merge($params, ['status'=>$status])
297   - ], [
298   - 'title' => "Liste des materiels qu'on peut archiver",
299   - 'style' => 'margin-right: 5px',
300   - 'escape' => false
301   - ]);
302   -
303   - $status = 'TOBEARCHIVED';
304   - echo $html->link($b_toarc . ' A sortir', [
305   - //'action' => 'index',
306   - //'TOBEARCHIVED',
307   - //'?' => $params
308   - '?' => array_merge($params, ['status'=>$status])
309   - ], [
310   - 'title' => "A sortir de l'inventaire",
311   - 'style' => 'margin-right: 5px',
312   - 'escape' => false
313   - ]);
314   -
315   - $status = 'ARCHIVED';
316   - echo $html->link($b_arc . ' Archivés', [
317   - //'action' => 'index',
318   - //'ARCHIVED',
319   - //'?' => $params
320   - '?' => array_merge($params, ['status'=>$status])
321   - ], [
322   - 'title' => "Sortis de l'inventaire",
323   - 'style' => 'margin-right: 0px',
324   - 'escape' => false
325   - ]);
326   - */
327   -
328 263 echo '</p>';
329 264  
330 265 // ACTIONS : buttons "Tout selectionner", "Tout decocher"
... ...
src/Template/Pages/home_app.ctp
... ... @@ -4,6 +4,7 @@
4 4 //debug($this->viewVars);
5 5 $configuration = $configuration;
6 6 $USER_IS_RESPONSABLE = $USER_IS_RESPONSABLE;
  7 +$HAS_ORDER_BUTTON = $HAS_ORDER_BUTTON;
7 8  
8 9  
9 10 $lab_name = $configuration->labPresent;
... ... @@ -162,16 +163,25 @@ if (in_array($role, [
162 163 echo $TABLE_START;
163 164 echo $SEP;
164 165  
165   - echo '<tr><td> ' . $this->Html->link('Voir les matériels à valider', [
  166 + //http://labinvent21.devv/materiels?status=TOBEORDERED
  167 +
  168 +if ($HAS_ORDER_BUTTON) echo '<tr><td> ' . $this->Html->link('Voir les matériels à Commander', [
  169 + 'controller' => 'materiels',
  170 + 'action' => 'index',
  171 + 'status' => 'TOBEORDERED'
  172 + ]) . ' </td></tr>';
  173 +
  174 +
  175 + echo '<tr><td> ' . $this->Html->link('Voir les matériels à Valider', [
166 176 'controller' => 'materiels',
167 177 'action' => 'index',
168   - 'CREATED'
  178 + 'status' => 'CREATED'
169 179 ]) . ' </td></tr>';
170 180  
171   - echo '<tr><td> ' . $this->Html->link('Voir les matériels à sortir de l\'inventaire', [
  181 + echo '<tr><td> ' . $this->Html->link("Voir les matériels à Sortir de l'inventaire", [
172 182 'controller' => 'materiels',
173 183 'action' => 'index',
174   - 'TOBEARCHIVED'
  184 + 'status' => 'TOBEARCHIVED'
175 185 ]) . ' </td></tr>';
176 186  
177 187 echo $TABLE_END;
... ...