diff --git a/CHANGELOG b/CHANGELOG index 780155c..05378d2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -341,27 +341,13 @@ Commencer à implémenter le nouveau workflow v5 : *) Mettre à jour le diagramme E-T +"Pensez à coller l'étiquette" +On ne peut pas supprimer les docs attachés d'un matos VALIDATED +Imprimer étiquette : toujours possible ? + *) NEWS#7 ? - - - *) - Lister les RG : - - - Pouvoir modifier le champ "n° inventaire Tutelle" sur un matos validé - (Service fait CNRS ----> je récupère le n° inventaire "Tutelle" sur GESLAB (SIFAC ?) et je complète la fiche INVENTIRAP - - * - Seul le Créateur de la fiche peut passer la Commande (cliquer sur "Commander") - - On ne peut pas supprimer le devis attaché (seulement en ajouter) - - On peut toujous modifier une fiche matériel (les champs obligatoires le restent) - - même "commandée" : - - champs obligatoires LOT1 - - champs qui ne sont plus modifiables : AUCUN ? (tous sont toujours modifiables ?) - - même "validée" : - - champs obligatoires LOT2 - - champs qui ne sont plus modifiables : - ... *) @@ -397,6 +383,12 @@ Commencer à implémenter le nouveau workflow v5 : ======= CHANGES ======= ------- +10/09/2021 v5.2.5-3.7.9 + - Meilleur choix de couleurs et de positions pour les boutons de validation et de dé-validation + - Meilleurs noms et tooltips pour les boutons de dé-validation + - Nouveau Diagramme Etat-Transitions des statuts du matériel (workflow) + +------- 10/09/2021 v5.2.4-3.7.9 - (i) Quand le statut d'un matos passe à TOBEORDERED, mettre son champ "tobeordered" à true (pour garder trace de la commande) - (e) Changement de l'effet du bouton "INVALIDER", désormais plus logique, repasse au statut "PRÉCÉDENT" et non pas systématiquement à CREATED : diff --git a/README.md b/README.md index 292cf65..967436a 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- Date: 10/09/2021 -Version: v5.2.4-3.7.9 +Version: v5.2.5-3.7.9 diff --git a/src/Template/Materiels/view.ctp b/src/Template/Materiels/view.ctp index 40e0f1f..936a943 100755 --- a/src/Template/Materiels/view.ctp +++ b/src/Template/Materiels/view.ctp @@ -451,6 +451,8 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN // Donc, on applique ce style à TOUS les boutons de cette 2e ligne $bStyle2 = $bStyle.'; margin-top:10px; display:inline-block'; $bStyle2Red = $bStyle2 . '; color:red'; + $bStyle2Green = $bStyle2 . '; color:green'; + $bStyle2Blue = $bStyle2 . '; color:blue'; // BOUTONS de changement de statut : Valider, Invalider, Demander archivage, ou Archiver /* (EP) Moved this to controller:view() @@ -464,47 +466,59 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN // - CREATED : // Bouton COMMANDER - if ($HAS_ORDER_BUTTON && $CAN_ORDER) $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Red, ' Commander', '', 'statusTobeordered', $entity->id, ['view'], "Demander la commande de ce matériel)"); + if ($HAS_ORDER_BUTTON && $CAN_ORDER) $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Green, ' Commander', '', 'statusTobeordered', $entity->id, ['view'], "Demander la commande de ce matériel)"); // Bouton VALIDER - if ($CAN_VALIDATE) $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Red, ' Valider (=livré)', '', 'statusValidated', $entity->id, ['view'], "Valider ce matériel (le déclarer comme étant livré)"); + if ($CAN_VALIDATE) $echoActionButton($this->Html, 'icon-ok-sign', $bStyle2Green, ' Valider (=livré)', '', 'statusValidated', $entity->id, ['view'], "Valider ce matériel (le déclarer comme étant livré)"); - // - VALIDATED or more : - // Bouton Invalider (Dévalider) - //$help = "dé-valider le matériel (le repasser au statut Créé, il faudra le re-valider ensuite)"; - $help = "dé-valider le matériel "; - if ($entity->status == 'ARCHIVED') - $new_status = "(le désarchiver, et repasser au statut 'A SORTIR')"; - elseif ($entity->status == 'TOBEARCHIVED') - $new_status = "(annuler la demande d'archivage, et repasser au statut 'VALIDÉ')"; - elseif ($entity->status == 'VALIDATED') - $new_status = "(annuler la validation de la livraison, et repasser au statut 'CRÉÉ')"; - elseif ($entity->status == 'TOBEORDERED') - $new_status = "(annuler la demande d'achat, et repasser au statut 'CRÉÉ')"; - // Par défaut => CREATED (VALIDATED ou TOBEORDERED => CREATED) - else - $new_status = "(repasser au statut 'CRÉÉ')"; - $help .= $new_status; - if ($CAN_INVALIDATE) - $echoActionButton( - $this->Html, 'icon-remove-sign', $bStyle2Red, ' Invalider', '', 'statusCreated', $entity->id, ['view'], - $help - ); + // - VALIDATED or more : // Bouton TBA if ($CAN_TBA) $echoActionButton( - $this->Html, 'icon-ok-sign', $bStyle2Red, ' Demander sortie', '', 'statusTobearchived', $entity->id, ['view'], + $this->Html, 'icon-ok-sign', $bStyle2Blue, ' Demander sortie', '', 'statusTobearchived', $entity->id, ['view'], "Demander la sortie de l'inventaire" ); // Bouton ARCHIVER if ($CAN_ARCHIVE) $echoActionButton( - $this->Html, 'icon-ok-sign', $bStyle2Red, ' Sortie inventaire', '', 'statusArchived', $entity->id, ['view'], + $this->Html, 'icon-ok-sign', $bStyle2Blue, ' Sortie inventaire', '', 'statusArchived', $entity->id, ['view'], "Sortir définitivement de l'inventaire", "Êtes-vous sur de bien vouloir archiver $entity->designation ?" ); + + // Bouton INVALIDER (Dévalider) + //$help = "dé-valider le matériel (le repasser au statut Créé, il faudra le re-valider ensuite)"; + $help = "dé-valider le matériel "; + if ($entity->status == 'ARCHIVED') { + $b_label = "Désarchiver"; + $new_status = "(le désarchiver, et repasser au statut 'A SORTIR')"; + } + elseif ($entity->status == 'TOBEARCHIVED') { + $b_label = "Annuler demande sortie"; + $new_status = "(annuler la demande d'archivage, et repasser au statut 'VALIDÉ')"; + } + elseif ($entity->status == 'VALIDATED') { + $b_label = "Invalider"; + $new_status = "(annuler la validation de la livraison, dé-valider et repasser au statut 'CRÉÉ')"; + } + elseif ($entity->status == 'TOBEORDERED') { + $b_label = "Annuler Commande"; + $new_status = "(annuler la demande d'achat, et repasser au statut 'CRÉÉ')"; + } + // Par défaut => CREATED (VALIDATED ou TOBEORDERED => CREATED) + else { + $b_label = "Invalider"; + $new_status = "(repasser au statut 'CRÉÉ')"; + } + $help .= $new_status; + if ($CAN_INVALIDATE) + $echoActionButton( + $this->Html, 'icon-remove-sign', $bStyle2Red, ' '.$b_label, '', 'statusCreated', $entity->id, ['view'], + $help + ); + /* if ($USER_IS_ADMIN_OR_MORE || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL)) { diff --git a/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_09.png b/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_09.png new file mode 100644 index 0000000..a02fb0d Binary files /dev/null and b/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_09.png differ diff --git a/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_09.txt b/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_09.txt new file mode 100755 index 0000000..884e519 --- /dev/null +++ b/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_09.txt @@ -0,0 +1,168 @@ +@startuml + +'cf http://plantuml.com/fr/state-diagram' + +'Taille des etats :' +'skinparam stateFontSize 10' + + +skinparam titleFontSize 18 +title +__CYCLE DE VIE D'UN MATÉRIEL (SES 5 ÉTATS)__ + +end title + + +state "**CREATED** (fiche créée, matériel à commander ou valider)" as CREATED +state "**TOBEORDERED** (en commande)" as TOBEORDERED +state "**VALIDATED** (fiche validée, matériel livré et payé)" as VALIDATED +state "**TOBEARCHIVED** (à sortir)" as TOBEARCHIVED +state "**ARCHIVED** (matériel sorti de l'inventaire)" as ARCHIVED + + +' ======================= +' 1) CRÉATION (COMMANDE) +' ======================= + +[*] --> CREATED : \l**Créer [& commander]** (add) \n\ +(par C) \n\ +__Infos obligatoires (LOT 0)__ \n\ + => <&envelope-open> (INFO) : GR (si précisé), U, R(s) + +CREATED -u-> [*]: \l**Supprimer** (delete)\n(par C, un R, ou un G) \ +\n => <&envelope-open> (INFO "Fiche supprimée") : \ +\n GR (cc Gestion), C/U, R(s) + +CREATED: Si c'est une commande, le matériel est en attente de commande (par un G) \n\ +(La section administrative ne peut être saisie que par un G) \n\n\ + +CREATED --> CREATED: \l**__Actions possibles__ :**\n\ +- **Supprimer** \n\ +- **[Imprimer étiquette]** (date cde + organisme tutelle [+ n° inventaire tutelle]) (par C/U, un R, ou un G) \n\ +- **Modifier** (edit) (par C/U, un R, ou un G) \n\ +(LOT 0 reste obligatoire, mais tous les champs sont modifiables) \n\ + => <&envelope-open> (INFO) "Fiche modifiée" : C/U, R(s) \n\ + + + +' ============================== +' 1) COMMANDE (demande d'achat) +' ============================== + +CREATED --> TOBEORDERED: \l**Commander** (demande d'achat) \n\ +(par C/R ou un G) \n\ +Infos obligatoires (LOT1 = LOT 0 + ...) : \n\ + => <&envelope-open> (COMMANDE) : GR (cc Gestion) [avec __devis joint__] \ +\n => <&envelope-open> (INFO) : C/U, R(s) + +TOBEORDERED: Une demande d'achat est faite \nà la Gestion pour ce matériel + +TOBEORDERED --> CREATED: \l**Annuler Commande** \n(par un G)\n => <&envelope-open> (INFO) : C/U, R(s) \n\ + +TOBEORDERED --> TOBEORDERED: \l**__Actions possibles__ :**\n\ +- **[Imprimer étiquette]** (date cde + organisme tutelle [+ n° inv. tut.])\n (par C/U, un R, ou un G)\n\ +- **Modifier** (edit) (par C/U, un R, ou un G) \n\ +(LOT1 reste obligatoire et certains champs NON MODIFIABLES) \n\ + => <&envelope-open> (INFO) "Commande modifiée" : GR (cc Gestion), C/U, R(s) \n\ + +TOBEORDERED --> VALIDATED: \l**Valider livraison** \n\ + + + +' ========================== +' 2) VALIDATION (LIVRAISON) +' ========================== + +CREATED --> VALIDATED: \l**Valider livraison** \n\ +(par un G) \n\ +Infos obligatoires (LOT2 = LOT1 + ...) \n\ + => <&envelope-open> (INFO facture payée) : C/U\n(+ "pensez à coller l'étiquette !") + +VALIDATED --> CREATED : \l **Invalider** \n (par un G) \n => <&envelope-open> : C/U + +VALIDATED: Le matériel a été livré et payé, \net son étiquette imprimée \n(et collée si posible) + +VALIDATED --> VALIDATED: \l**__Actions posibles__ :**\n\ +- **Modifier** (edit) \n (par C/U, un R, ou un G) \n (LOT2 reste obligatoire et certains champs NON MODIFIABLES)) \n (//NB: on ne doit pas pouvoir modifier la "nature" du bien)// \n => <&envelope-open> : C/U, GR \n\ +- **Ajouter documents attachés** (par C/U, un R, ou un G) \n (mais on ne peut pas supprimer les documents déjà attachés) \n\ +- **Imprimer fiche ENTRÉE matériel** (par un G) \n\ +- **Prêter** (par C/U ou un R) \n\ +- **Faire un Suivi** (par C/U ou un R) \n\ +- **Imprimer étiquette** (date cde + tutelle [+ n° inventaire tutelle]) (par C/U, un R, ou un G) + + + +' ========================== +' 3) DEMANDE SORTIE +' ========================== + +VALIDATED --> TOBEARCHIVED : \l**Demander sortie** (tobearchived) \n\ +(par C/U, un R ou un G) \ +\n => <&envelope-open> : C/U, GR (cc Gestion) + +TOBEARCHIVED --> VALIDATED : \l **Annuler demande sortie** \n\ +(par C/U, un R ou un G) \ +\n => <&envelope-open> : C/U, GR + +TOBEARCHIVED: Le matériel est en instance de sortie d'inventaire + + +' ========================== +' 4) SORTIE +' ========================== + +TOBEARCHIVED --> ARCHIVED : \l**Archiver (sortir de l'inventaire)** (archive) \n\ +(par un G) \ +\n => <&envelope-open> : C/U + +ARCHIVED --> VALIDATED : \l **Désarchiver** \n\ +(par un G) \ +\n => <&envelope-open> : C/U + +ARCHIVED: Le matériel n'est plus visible (sauf par un G) + +ARCHIVED --> ARCHIVED: \l**Imprimer fiche SORTIE matériel** \n\ +(par un G) + + + + + +'On pouvait ausi utiliser _note_ au lieu de _legend_ mais ca se met tout en haut:' +'(cf note dans http://plantuml.com/fr/class-diagram)' +'note as N1' + + +skinparam legendFontSize 11 +legend left +Légende: + +Diagramme UML d'États-Transitions du 10/09/2021 - Logiciel LabInvent v5.x - E. Pallier - IRAP + +Acteurs: +- C = Créateur : la personne qui crée la fiche (ou celle qui commande le matériel) +- U = Utilisateur : le destinataire du matériel (ou la destination) +- R = Responsable : le responsable d'un groupe (métier, projet, ou pôle) auquel le matériel est associé +- G = Gestionnaire : un administratif +- GR = Gestionnaire de Référence : l'administratif qui passe la commande du matériel (désigné par l'Acheteur) + (éventuellement, par défaut, celui qui est en charge du projet auquel le matériel est associé) + (en fait, le DERNIER gestionnaire qui modifie la fiche matériel devient le nouveau GR) + +Profils (rôles, pouvoirs) : +- UTILISATEUR = personne quelconque du laboratoire (authentifiée), profil avec les droits minimum (ne pas confondre avec U qui est l'Utilisateur réel d'un matériel spécifique) +- RESPONSABLE = Responsable d'un groupe métier, d'un projet ou d'un pôle +- ADMIN (Gestionnaire) = Administratif +- SUPERADMIN = Super utilisateur, il a au moins les mêmes droits que ADMIN (mais il peut ausi intervenir sur la configuration technique du logiciel) + +Matériel inventoriable = au moins 1000€ HT (en-dessous, le matériel peut quand même être inventorié, mais ne fait pas partie de l'inventaire comptable, seulement de l'inventaire physique) + +Un email est envoyé à chaque changement d'état du matériel //(pas de mail envoyé à la personne à l'origine de l'action car inutile)// : +- à C et U +- au(x) R(s) du/des groupe(s) (métier, projet, ou pôle) auquel(s) le matériel est affecté +- au GR (éventuellement avec copie au service Gestion) + +endlegend +'end note' + + +@enduml -- libgit2 0.21.2