diff --git a/.gitignore b/.gitignore index dae37f2..ac28c08 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,11 @@ /tmp/* /logs/*.log* /.settings/ + .DS_Store +# meme chose que +#**/.DS_Store + # On ne versionne QUE composer.json composer.json.* # On ne versionne NI composer.lock NI aucune copie de ce fichier diff --git a/CHANGES.txt b/CHANGES.txt index 8c0c502..2d731b5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -134,6 +134,11 @@ Outre ces changements, voici d'autres changements importants : ======= CHANGES ======= ------- +02/11/2020 v4.106.9-3.7.9 + - Nouveau diagramme UML Etats-Transitions du statut d'un matériel + (pour préparer la nouvelle version V5 de janvier 2021) + +------- 27/10/2020 v4.106.8-3.7.9 - (i) Nouvelle simplification de la logique des stats => On utilise AppController.beforeFilter() au lieu de afterFilter() (ou encore config/bootstrap.php et src/Routing/Filter/SessionTimeoutFilter.php) diff --git a/README.md b/README.md index 06d7387..20d342a 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- -Date: 27/10/2020 -Version: 4.106.8-3.7.9 +Date: 02/11/2020 +Version: 4.106.9-3.7.9 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) diff --git a/database/update/script_sql/db-update-2020-10-23.sql b/database/update/script_sql/db-update-2020-10-23.sql index 4b2a811..238e295 100755 --- a/database/update/script_sql/db-update-2020-10-23.sql +++ b/database/update/script_sql/db-update-2020-10-23.sql @@ -23,14 +23,16 @@ ALTER TABLE type_suivis ADD description TEXT NULL DEFAULT NULL AFTER nom; -- Ajout d'une contrainte d'unicité (index UNIQUE) sur le champ nom pour toutes les tables qui en manquent -- -ALTER TABLE fakeldapusers ADD UNIQUE(uid); - ALTER TABLE groupes_metiers ADD UNIQUE(nom); ALTER TABLE groupes_thematiques ADD UNIQUE(nom); ALTER TABLE organismes ADD UNIQUE(nom); ALTER TABLE sites ADD UNIQUE(nom); ALTER TABLE type_suivis ADD UNIQUE(nom); - ALTER TABLE type_documents ADD UNIQUE(nom); --- Ajout aussi du type DEVIS (obligatoire) + +ALTER TABLE fakeldapusers ADD UNIQUE(uid); + + +-- Ajout aussi du type DEVIS (désormais obligatoire pour passer commande) + INSERT INTO type_documents (nom) VALUES ("DEVIS"); diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index c83c5d0..9944c14 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -1754,29 +1754,33 @@ class MaterielsController extends AppController { //$materiel = ($IS_ADD && !$id) ? $this->Materiels->newEntity() : $this->e; //$materiel = ($IS_ADD && !$id) ? $this->Materiels->newEntity() : $this->getEntity($id); $materiel = $IS_ADD ? $this->Materiels->newEntity() : $this->getEntity($id); - // ADD par copie : mettre id et numero labo à null - if ($IS_ADD && $id) { - // IMPORTANT: validate=False car sinon, les données sont validées avant la copie, - // et le numero_laboratoire est vu comme invalide car déjà utilisé et doit etre unique !!! - // et on a pour résultat : "le matériel n'a pas pu être ajouté" (sans savoir pourquoi !!!) - //$materiel = $this->Materiels->newEntity($this->getEntity($id)->toArray(), ['validate' => false]); - //$materiel = $this->Materiels->patchEntity($materiel, $this->getEntity($id, false, false)->toArray(), [ - $materiel = $this->Materiels->patchEntity($materiel, $this->Materiels->get($id, ['contain' => []])->toArray(), [ - 'validate' => false, - // Ne pas valider non plus les entités associées - /* - 'associated' => [ - 'SurCategories' => ['validate' => false], - 'Categories' => ['validate' => false], - 'SousCategories' => ['validate' => false], - ] - */ - ]); - // IMPORTANT: on ne doit pas laisser l'id égal à celui du matériel copié !!! il en faut un nouveau - $materiel->id = null; - // on supprime le champ numero_laboratoire car il va être généré automatiquement - //unset($materiel->numero_laboratoire); - $materiel->numero_laboratoire = null; + if ($IS_ADD) { + // Par défaut, l'Acheteur du matériel c'est l'utilisateur courant + $materiel->nom_responsable = $this->u->nom; + // ADD par copie : mettre id et numero labo à null + if ($id) { + // IMPORTANT: validate=False car sinon, les données sont validées avant la copie, + // et le numero_laboratoire est vu comme invalide car déjà utilisé et doit etre unique !!! + // et on a pour résultat : "le matériel n'a pas pu être ajouté" (sans savoir pourquoi !!!) + //$materiel = $this->Materiels->newEntity($this->getEntity($id)->toArray(), ['validate' => false]); + //$materiel = $this->Materiels->patchEntity($materiel, $this->getEntity($id, false, false)->toArray(), [ + $materiel = $this->Materiels->patchEntity($materiel, $this->Materiels->get($id, ['contain' => []])->toArray(), [ + 'validate' => false, + // Ne pas valider non plus les entités associées + /* + 'associated' => [ + 'SurCategories' => ['validate' => false], + 'Categories' => ['validate' => false], + 'SousCategories' => ['validate' => false], + ] + */ + ]); + // IMPORTANT: on ne doit pas laisser l'id égal à celui du matériel copié !!! il en faut un nouveau + $materiel->id = null; + // on supprime le champ numero_laboratoire car il va être généré automatiquement + //unset($materiel->numero_laboratoire); + $materiel->numero_laboratoire = null; + } } //debug($materiel); exit; /* diff --git a/src/Template/Materiels/add_edit.ctp b/src/Template/Materiels/add_edit.ctp index b303695..c01e24d 100644 --- a/src/Template/Materiels/add_edit.ctp +++ b/src/Template/Materiels/add_edit.ctp @@ -73,9 +73,12 @@ $IS_ADD = $IS_ADD; $IS_EDIT = !$IS_ADD; $entity = $entity; +// ATTENTION (A CONFIRMER mais je crois...) : +// TOUJOURS NÉCESSAIRE POUR QUE LES VALEURS PAR DÉFAUT SOIENT AUTOMATIQUEMENT TROUVÉES +// CAR CAKEPHP CHERCHE DANS UNE VARIABLE NOMMÉE $materiel... +// @deprecated +$materiel = $entity; //debug($entity); -//TODO: supprimer -$materiel = $entity; // @deprecated $entity_name = 'matériel'; @@ -349,7 +352,7 @@ if (isset($cpMateriel)) { 'label' => 'Désignation', //'default' => $Designation, // ADD only - //'default' => $materiel->designation, + /////'default' => $materiel->designation, //'default' => $designations, //'default' => $designations->toArray(), // EDIT only @@ -379,7 +382,7 @@ if (isset($cpMateriel)) { 'label' => 'Description', // ADD only //'default' => $Description - 'default' => $materiel->description, + /////'default' => $materiel->description, // EDIT only 'disabled' => $IS_ADD ? false : $isReadonlyField('description', $myReadonlyFields) ]); @@ -423,7 +426,7 @@ if (isset($cpMateriel)) { 'empty' => 'Choisir un domaine', //'default' => $Sur_categ_id // ADD only - //'default' => $materiel->sur_categorie_id, + //////'default' => $materiel->sur_categorie_id, // EDIT only 'readonly' => $IS_ADD ? false : $isReadonlyField('sur_categorie_id', $myReadonlyFields), 'disabled' => $IS_ADD ? false : $isReadonlyField('sur_categorie_id', $myReadonlyFields) @@ -447,7 +450,7 @@ if (isset($cpMateriel)) { 'empty' => 'Choisir une catégorie', //'default' => $Categ_id // ADD only - 'default' => $materiel->categorie_id, + //////'default' => $materiel->categorie_id, // EDIT only 'disabled' => $IS_ADD ? false : $isReadonlyField('categorie_id', $myReadonlyFields) ]); @@ -472,7 +475,7 @@ if (isset($cpMateriel)) { 'empty' => 'Choisir une sous-catégorie', // ADD only //'default' => $Sous_categ_id - 'default' => $materiel->sous_categorie_id, + /////////'default' => $materiel->sous_categorie_id, // EDIT only 'disabled' => $IS_ADD ? false : $isReadonlyField('sous_categorie_id', $myReadonlyFields) @@ -533,7 +536,7 @@ if (isset($cpMateriel)) { 'label' => "Technique (pas pour l'inventaire officiel)", // ADD only //'default' => $Mat_technique - 'default' => $materiel->materiel_technique, + /////////'default' => $materiel->materiel_technique, // EDIT only 'disabled' => $IS_ADD ? false : $isReadonlyField('materiel_technique', $myReadonlyFields) ]); @@ -654,7 +657,7 @@ if (isset($cpMateriel)) { 'empty' => true, // ADD only //'default' => $Date_reception - 'default' => $materiel->date_reception, + ////////'default' => $materiel->date_reception, // php5... 'value' => $IS_ADD ? null : $value_edit, @@ -700,7 +703,7 @@ if (isset($cpMateriel)) { 'label' => 'Date fin de garantie', 'placeholder' => $comment, 'class' => 'datepicker', - 'default' => NULL, + 'default' => null, // php5... //'value' => $IS_ADD ? null : $materiel->date_fin_garantie->format('d/m/Y'), @@ -738,7 +741,8 @@ if (isset($cpMateriel)) { //$readonly = $USER_IS_UTILISATEUR ? TRUE : FALSE; echo $this->Form->control('nom_user', [ 'label' => "Nom de l'Utilisateur (ou destination du bien)", - 'empty' => 'Choisir une personne', + //'empty' => 'Choisir une personne', + 'empty' => $username, //'default' => $username, //'options' => $utilisateurs //'options' => $users_option_list, @@ -753,11 +757,15 @@ if (isset($cpMateriel)) { $readonly = $USER_IS_UTILISATEUR ? TRUE : FALSE; echo $this->Form->control('nom_responsable', [ 'label' => "Nom de l'Acheteur", - 'empty' => 'Choisir une personne', - 'default' => $username, + //'empty' => 'Choisir une personne', + //'empty' => $entity->nom_responsable, + //'default' => $entity->nom_responsable, + //'default' => $username, //'options' => $utilisateurs 'options' => $users_option_list, - 'readonly' => $IS_EDIT ? false : $readonly, + //'readonly' => $IS_EDIT ? false : $readonly, + //'readonly' => $readonly, + 'disabled' => $readonly, ]); // EDIT only @@ -806,6 +814,7 @@ if (isset($cpMateriel)) { echo $this->Form->control('gestionnaire_id', [ 'label' => 'Nom gestionnaire de référence', 'empty' => 'Choisir un gestionnaire', + // TODO: pas joli ! 'default' => $_SESSION['Auth']['User']['sn'][0], 'options' => $administrateurs ]); @@ -914,7 +923,7 @@ if (isset($cpMateriel)) { 'empty' => 'Choisir un organisme', // ADD only //'default' => $Organisme_id - 'default' => $materiel->organisme_id, + ///////'default' => $materiel->organisme_id, // EDIT only 'disabled' => $IS_ADD ? false : $isReadonlyField('organisme_id', $myReadonlyFields) ]); @@ -924,7 +933,7 @@ if (isset($cpMateriel)) { 'label' => 'Prix HT (€)', // ADD only //'default' => $Prix_ht - 'default' => $materiel->prix_ht, + ///////'default' => $materiel->prix_ht, // EDIT only 'disabled' => $IS_ADD ? false : $isReadonlyField('prix_ht', $myReadonlyFields) ]); diff --git a/webroot/doc/diagrams/.DS_Store b/webroot/doc/diagrams/.DS_Store deleted file mode 100644 index 5b7763d..0000000 Binary files a/webroot/doc/diagrams/.DS_Store and /dev/null differ diff --git a/webroot/doc/diagrams/INVENTIRAP - equipment_status_state_diagram.png b/webroot/doc/diagrams/INVENTIRAP - equipment_status_state_diagram.png deleted file mode 100755 index 6da2f29..0000000 Binary files a/webroot/doc/diagrams/INVENTIRAP - equipment_status_state_diagram.png and /dev/null differ diff --git a/webroot/doc/diagrams/INVENTIRAP - equipment_status_state_diagram.txt b/webroot/doc/diagrams/INVENTIRAP - equipment_status_state_diagram.txt deleted file mode 100755 index 1f5bda5..0000000 --- a/webroot/doc/diagrams/INVENTIRAP - equipment_status_state_diagram.txt +++ /dev/null @@ -1,30 +0,0 @@ -@startuml - -'Version: 15/10/17' - -title __CYCLE DE VIE D'UN MATÉRIEL (SES DIFFERENTS ÉTATS)__ - -state "**CREATED** (créé)" as CREATED -state "**VALIDATED** (validé)" as VALIDATED -state "**TOBEARCHIVED** (à archiver)" as TOBEARCHIVED -state "**ARCHIVED** (archivé)" as ARCHIVED - -note "Légende:\n\nUTILISATEUR = Utilisateur quelconque (authentifié) du laboratoire\nRESPONSABLE = Responsable d'un groupe métier ou thématique auquel est rattaché le matériel\nADMIN = Gestionnaire\nADMINPLUS = Gestionnaire avec des droits supplémentaires" as N1 - -[*] --> CREATED : \l**A partir d'un devis**:\nUn UTILISATEUR crée une fiche matériel (il est par défaut le propriétaire de ce matériel),\nou bien un RESPONSABLE (ou ADMIN) crée une fiche matériel au nom d'un autre utilisateur (qui en sera le propriétaire)\n => Email envoyé au propriétaire (pour info)\n => Email envoyé au RESPONSABLE du matériel (pour qu'il le complète et le valide si possible)\nL'UTILISATEUR devrait alors imprimer et amener la fiche matériel + devis à un gestionnaire pour passer commande -CREATED: Le matériel est encore modifiable -CREATED --> CREATED: \lle propriétaire de ce matériel (ou bien un RESPONSABLE, ou bien un ADMIN) modifie la fiche \nIl peut aussi y attacher le devis \nUn ADMIN passe commande de ce matériel (et peut attacher le BC à la fiche) \n => Le propriétaire du matériel est averti par email -CREATED --> [*]: \lLe propriétaire de ce matériel\n(ou bien un RESPONSABLE, ou bien un ADMIN)\nle supprime -CREATED --> VALIDATED : \l**Le matériel est arrivé**:\nUn ADMIN (gestionnaire) complète sa fiche \n(avec la date de livraison et les informations administratives) \net la valide \n(ou bien un RESPONSABLE si c'est un matériel non inventoriable < 800€HT)\n => Email envoyé au propriétaire et au RESPONSABLE (pour info) - -VALIDATED: Le matériel est encore modifiable (par son propriétaire, son RESPONSABLE, ou un ADMIN)\n(MAIS seulement certains champs) \n- Si besoin, un ADMIN peut imprimer la fiche \n"admission de matériel" à destination du CNRS \n- Il imprime l'étiquette d'inventaire et la donne (avec le matériel) au propriétaire \n- Il garde le Bon de Livraison (il pourrait le scanner et l'attacher à la fiche matériel) -VALIDATED --> VALIDATED: \lModification de la fiche du matériel (quelques champs seulement) \n(sans toutefois changer la nature du matériel)\n => Email envoyé au propriétaire et au RESPONSABLE (pour info) -VALIDATED --> TOBEARCHIVED : \lUn RESPONSABLE de ce matériel\nou bien un ADMIN\ndemande l'archivage de ce matériel - -TOBEARCHIVED: Le matériel n'est désormais plus modifiable \n(sauf par ADMINPLUS pour changer son statut ou modifier les infos budgétaires) -TOBEARCHIVED --> ARCHIVED : \lUn ADMIN (gestionnaire) valide la demande d'archivage\n => Email envoyé au propriétaire et au RESPONSABLE (pour info) - -ARCHIVED: Le matériel est sorti de l'inventaire, (il n'est plus visible, sauf par ADMIN)\n(il pourra éventuellement être remis dans l'inventaire par ADMINPLUS)\nSi nécessaire, un ADMIN peut imprimer la fiche \n"sortie de matériel" à destination du CNRS - -@enduml - diff --git a/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019.png b/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019.png new file mode 100644 index 0000000..1132533 Binary files /dev/null and b/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019.png differ diff --git a/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019.txt b/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019.txt new file mode 100644 index 0000000..9d72c21 --- /dev/null +++ b/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019.txt @@ -0,0 +1,77 @@ +@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 4 ÉTATS)__ + +end title + + +state "**CREATED** (créé)" as CREATED +state "**VALIDATED** (livré et validé)" as VALIDATED +state "**TOBEARCHIVED** (à archiver)" as TOBEARCHIVED +state "**ARCHIVED** (archivé)" as ARCHIVED + + +[*] --> CREATED : **créer** (add) \n(par tout profil) + +CREATED: Le matériel est encore modifiable\n(La section administrative ne peut être saisie que par un ADMIN) +CREATED --> CREATED: \l**modifier** (edit) \n(par le propriétaire, un RESPONSABLE, ou un ADMIN) +CREATED -up-> [*]: \l**supprimer** (delete) \n(par le propriétaire, un RESPONSABLE, ou un ADMIN) +CREATED --> VALIDATED: \l**valider** (validate) \n(par le propriétaire, un RESPONSABLE, ou un ADMIN) + +VALIDATED: Le matériel a été livré et validé\nIl reste modifiable mais seulement pour certains champs\n(sans modifier sa nature) +VALIDATED --> VALIDATED: \l**Actions possibles :**\n - **modifier** (edit) (certains champs seulement, par le propriétaire, un RESPONSABLE, ou un ADMIN) \n - **emprunter** (emprunt) \n - **faire un suivi** (suivi) \n - **imprimer étiquette** (etiq) \n - **imprimer fiche entrée matériel** +VALIDATED --> CREATED : \l **invalider** (invalidate) \n (par un ADMIN) \n (le matériel devra être validé à nouveau) +VALIDATED --> TOBEARCHIVED : \l**demander archivage** (tobearchived) \n(par un RESPONSABLE ou un ADMIN) + +TOBEARCHIVED: Le matériel n'est plus modifiable +TOBEARCHIVED --> VALIDATED : \l **désarchiver** (unarchive) \n (par un ADMIN) +TOBEARCHIVED --> ARCHIVED : \l**archiver** (archive) \n(par un ADMIN) + +ARCHIVED: Le matériel n'est plus visible (sauf par un ADMIN) +ARCHIVED --> ARCHIVED: \l**imprimer fiche sortie matériel** +ARCHIVED --> VALIDATED : \l **désarchiver** (unarchive) \n (par un ADMIN) + + + + + +'On pouvait aussi 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: + +Version: 15/10/19 (Etienne Pallier) + +Profils: +- UTILISATEUR = Utilisateur quelconque (authentifié) du laboratoire +- RESPONSABLE = Responsable d'un groupe métier ou thématique auquel est rattaché le matériel +- ADMIN = Gestionnaire (Administratif) +- SUPERADMIN = Super utilisateur, il a au moins les mêmes droits que ADMIN + +Matériel non inventoriable = moins de 1000€ +Propriétaire = la personne qui va utiliser le matériel +Gestionnaire de référence = le gestionnaire désigné par le créateur de la fiche matériel (par défaut, c'est celui qui est responsable du projet auquel le matériel est associé) + +Un email est envoyé à chaque changement d'état du matériel: +- au propriétaire (pour l'informer du changement) +- au(x) responsable(s) (responsable groupe métier ou/et thématique) +- au gestionnaire de référence (pour qu'il gère la fiche) +endlegend +'end note' + + + +@enduml + diff --git a/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019_old.png b/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019_old.png new file mode 100755 index 0000000..6da2f29 Binary files /dev/null and b/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019_old.png differ diff --git a/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019_old.txt b/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019_old.txt new file mode 100755 index 0000000..1f5bda5 --- /dev/null +++ b/webroot/doc/diagrams/Materiel_status_state_diagram_v4_2019_old.txt @@ -0,0 +1,30 @@ +@startuml + +'Version: 15/10/17' + +title __CYCLE DE VIE D'UN MATÉRIEL (SES DIFFERENTS ÉTATS)__ + +state "**CREATED** (créé)" as CREATED +state "**VALIDATED** (validé)" as VALIDATED +state "**TOBEARCHIVED** (à archiver)" as TOBEARCHIVED +state "**ARCHIVED** (archivé)" as ARCHIVED + +note "Légende:\n\nUTILISATEUR = Utilisateur quelconque (authentifié) du laboratoire\nRESPONSABLE = Responsable d'un groupe métier ou thématique auquel est rattaché le matériel\nADMIN = Gestionnaire\nADMINPLUS = Gestionnaire avec des droits supplémentaires" as N1 + +[*] --> CREATED : \l**A partir d'un devis**:\nUn UTILISATEUR crée une fiche matériel (il est par défaut le propriétaire de ce matériel),\nou bien un RESPONSABLE (ou ADMIN) crée une fiche matériel au nom d'un autre utilisateur (qui en sera le propriétaire)\n => Email envoyé au propriétaire (pour info)\n => Email envoyé au RESPONSABLE du matériel (pour qu'il le complète et le valide si possible)\nL'UTILISATEUR devrait alors imprimer et amener la fiche matériel + devis à un gestionnaire pour passer commande +CREATED: Le matériel est encore modifiable +CREATED --> CREATED: \lle propriétaire de ce matériel (ou bien un RESPONSABLE, ou bien un ADMIN) modifie la fiche \nIl peut aussi y attacher le devis \nUn ADMIN passe commande de ce matériel (et peut attacher le BC à la fiche) \n => Le propriétaire du matériel est averti par email +CREATED --> [*]: \lLe propriétaire de ce matériel\n(ou bien un RESPONSABLE, ou bien un ADMIN)\nle supprime +CREATED --> VALIDATED : \l**Le matériel est arrivé**:\nUn ADMIN (gestionnaire) complète sa fiche \n(avec la date de livraison et les informations administratives) \net la valide \n(ou bien un RESPONSABLE si c'est un matériel non inventoriable < 800€HT)\n => Email envoyé au propriétaire et au RESPONSABLE (pour info) + +VALIDATED: Le matériel est encore modifiable (par son propriétaire, son RESPONSABLE, ou un ADMIN)\n(MAIS seulement certains champs) \n- Si besoin, un ADMIN peut imprimer la fiche \n"admission de matériel" à destination du CNRS \n- Il imprime l'étiquette d'inventaire et la donne (avec le matériel) au propriétaire \n- Il garde le Bon de Livraison (il pourrait le scanner et l'attacher à la fiche matériel) +VALIDATED --> VALIDATED: \lModification de la fiche du matériel (quelques champs seulement) \n(sans toutefois changer la nature du matériel)\n => Email envoyé au propriétaire et au RESPONSABLE (pour info) +VALIDATED --> TOBEARCHIVED : \lUn RESPONSABLE de ce matériel\nou bien un ADMIN\ndemande l'archivage de ce matériel + +TOBEARCHIVED: Le matériel n'est désormais plus modifiable \n(sauf par ADMINPLUS pour changer son statut ou modifier les infos budgétaires) +TOBEARCHIVED --> ARCHIVED : \lUn ADMIN (gestionnaire) valide la demande d'archivage\n => Email envoyé au propriétaire et au RESPONSABLE (pour info) + +ARCHIVED: Le matériel est sorti de l'inventaire, (il n'est plus visible, sauf par ADMIN)\n(il pourra éventuellement être remis dans l'inventaire par ADMINPLUS)\nSi nécessaire, un ADMIN peut imprimer la fiche \n"sortie de matériel" à destination du CNRS + +@enduml + diff --git a/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_01.png b/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_01.png new file mode 100644 index 0000000..f366238 Binary files /dev/null and b/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_01.png differ diff --git a/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_01.txt b/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_01.txt new file mode 100755 index 0000000..3d08c31 --- /dev/null +++ b/webroot/doc/diagrams/Materiel_status_state_diagram_v5_2021_01.txt @@ -0,0 +1,88 @@ +@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 4 ÉTATS)__ + +end title + + +state "**CREATED** (créé)" as CREATED +state "**TOBEORDERED** (à commander)" as TOBEORDERED +state "**VALIDATED** (livré et validé)" as VALIDATED +state "**TOBEARCHIVED** (à archiver)" as TOBEARCHIVED +state "**ARCHIVED** (archivé)" as ARCHIVED + + +[*] --> CREATED : \l**Créer** (add) \n(par tout profil) \nInfos obligatoires (LOT1) : \n+ désignation \n+ domaine/catégorie \n+ prix (peut être approximatif) \n + utilisateur destination (champ texte libre) +CREATED -u-> [*]: \l**Supprimer** (delete) \n(par Acheteur, Responsable, ou un ADMIN) \n => Mail à : Acheteur/Utilisateur +CREATED: C'est un état "virtuel", "temporaire" (s'il perdure trop longtemps il sera vu comme "zombie" et supprimé) \n(la section administrative ne peut être saisie que par un ADMIN) +CREATED --> CREATED: \l**Modifier** (edit) \n(par Acheteur/Utilisateur, Responsable, ou un ADMIN)\n (LOT1 reste obligatoire) + +CREATED --> TOBEORDERED: \l**Commander** (order) \n(par Acheteur) \nInfos obligatoires (LOT2) : \n+ LOT1\n+ devis joint\n+ ligne budgétaire\n+ gestionnaire de référence \n => Mail à : Gestionnaire de ref., Gestion [cc], Utilisateur, Responsable +TOBEORDERED --> CREATED : \l **Annuler commande** (deorder) \n (par un ADMIN) \n => Mail à : Acheteur, Utilisateur, Responsable +TOBEORDERED: Le matériel est en attente de commande\n par le gestionnaire de référence +TOBEORDERED --> TOBEORDERED: \l**Actions possibles :**\n - **Modifier** (edit) \n (par Acheteur/Utilisateur, Responsable, ou un ADMIN)\n (LOT2 obligatoire et NON MODIFIABLE, sauf le champ "utilisateur") \n => Mail à : Gestionnaire de référence \n **- Imprimer étiquette(*) ** (par Acheteur/Utilisateur, ou un ADMIN) \n (LOT3 obligatoirement saisi) + +TOBEORDERED --> VALIDATED: \l**Valider** (validate) \n(par Acheteur/Utilisateur ou un ADMIN) \nInfos obligatoires (LOT3) : \n+ LOT2\n+ entité dépens. + n° BC + date BC (ADMIN only) \n+ date livraison \n+ [ n° BL + BL (signé) joint ] \n+ si > 10K€ : S/N + lieu stockage précis... \n+ __Etiquette imprimée(*)__ (on ne peut pas valider sinon) \n => Mail à : Acheteur/Utilisateur, Responsable +VALIDATED --> TOBEORDERED : \l **Invalider** (invalidate) \n (par un ADMIN) \n => Mail à : Acheteur/Utilisateur +VALIDATED: Le matériel a été livré et validé, \net son étiquette imprimée(*) \n(et collée) +VALIDATED --> VALIDATED: \l**Actions possibles :**\n\n - **Modifier** (edit) \n (par Acheteur/Utilisateur, Responsable, ou un ADMIN) \n (LOT3 obligatoire et NON MODIFIABLE, sauf champ "utilisateur") \n (//NB: on ne devrait pas pouvoir modifier la "nature" du bien)// \n => Mail à : Acheteur/Utilisateur, Responsable, Gestionnaire ref. \n\n - **Imprimer étiquette(*) ** (par Acheteur/Utilisateur ou ADMIN) \n - **Prêter** (par Acheteur/Utilisateur) \n - **Faire un Suivi** (par Acheteur/Utilisateur ou Responsable) \n - **Imprimer fiche ENTRÉE matériel** (par ADMIN) + +VALIDATED --> TOBEARCHIVED : \l**Demander archivage** (tobearchived) \n(par Acheteur/Utilisateur, Responsable ou un ADMIN) \n => Mail à : Acheteur/Utilisateur, Responsable, Gestionnaire ref. +TOBEARCHIVED --> VALIDATED : \l **Annuler demande archivage** \n (par Acheteur/Utilisateur, Responsable ou un ADMIN) \n => Mail à : Acheteur/Utilisateur, Responsable, Gestionnaire ref. +TOBEARCHIVED: Le matériel est en demande d'archivage + +TOBEARCHIVED --> ARCHIVED : \l**Archiver** (archive) \n(par ADMIN) \n => Mail à : Acheteur/Utilisateur, Responsable +ARCHIVED --> VALIDATED : \l **Désarchiver** (unarchive) \n (par ADMIN) \n => Mail à : Acheteur/Utilisateur, Responsable +ARCHIVED: Le matériel n'est plus visible (sauf par ADMIN) +ARCHIVED --> ARCHIVED: \l**Imprimer fiche SORTIE matériel** \n(par ADMIN) + + + + + +'On pouvait aussi 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 02/11/20 - Logiciel LabInvent v5.x - E. Pallier - IRAP + +Acteurs: +- Acheteur : la personne qui commande le matériel +- Utilisateur : le destinataire du matériel (ou la destination) +- Responsable : le(s) responsable(s) (métier, thématique, projet, ou service) du/des groupe(s) auquel(s) le matériel appartient +- Gestionnaire de référence : l'administratif qui passe la commande du matériel (désigné par Acheteur) + (par défaut, celui qui est responsable du projet auquel le matériel est associé) + +Profils (rôles, pouvoirs) : +- UTILISATEUR = Utilisateur quelconque (authentifié) du laboratoire, profil avec les droits minimum +- RESPONSABLE = Responsable d'un groupe (métier, thématique, projet ou service) auquel est rattaché le matériel +- ADMIN = Gestionnaire (Administratif) +- SUPERADMIN = Super utilisateur, il a au moins les mêmes droits que ADMIN + (mais il peut aussi 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 officiel) + +Un email est envoyé à chaque changement d'état du matériel: +- à l'acheteur et à l'utilisateur +- au(x) responsable(s) du/des groupe(s) (métier, thématique, projet, ou service) auquel(s) le matériel est affecté +- au gestionnaire de référence (éventuellement avec copie au service Gestion) + +//(*) étiquette imprimée => seulement si étiqueteuse disponible// +endlegend +'end note' + + +@enduml diff --git a/webroot/doc/diagrams/materiel_state_diagram.png b/webroot/doc/diagrams/materiel_state_diagram.png deleted file mode 100644 index 1132533..0000000 Binary files a/webroot/doc/diagrams/materiel_state_diagram.png and /dev/null differ diff --git a/webroot/doc/diagrams/materiel_state_diagram.txt b/webroot/doc/diagrams/materiel_state_diagram.txt deleted file mode 100644 index 9d72c21..0000000 --- a/webroot/doc/diagrams/materiel_state_diagram.txt +++ /dev/null @@ -1,77 +0,0 @@ -@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 4 ÉTATS)__ - -end title - - -state "**CREATED** (créé)" as CREATED -state "**VALIDATED** (livré et validé)" as VALIDATED -state "**TOBEARCHIVED** (à archiver)" as TOBEARCHIVED -state "**ARCHIVED** (archivé)" as ARCHIVED - - -[*] --> CREATED : **créer** (add) \n(par tout profil) - -CREATED: Le matériel est encore modifiable\n(La section administrative ne peut être saisie que par un ADMIN) -CREATED --> CREATED: \l**modifier** (edit) \n(par le propriétaire, un RESPONSABLE, ou un ADMIN) -CREATED -up-> [*]: \l**supprimer** (delete) \n(par le propriétaire, un RESPONSABLE, ou un ADMIN) -CREATED --> VALIDATED: \l**valider** (validate) \n(par le propriétaire, un RESPONSABLE, ou un ADMIN) - -VALIDATED: Le matériel a été livré et validé\nIl reste modifiable mais seulement pour certains champs\n(sans modifier sa nature) -VALIDATED --> VALIDATED: \l**Actions possibles :**\n - **modifier** (edit) (certains champs seulement, par le propriétaire, un RESPONSABLE, ou un ADMIN) \n - **emprunter** (emprunt) \n - **faire un suivi** (suivi) \n - **imprimer étiquette** (etiq) \n - **imprimer fiche entrée matériel** -VALIDATED --> CREATED : \l **invalider** (invalidate) \n (par un ADMIN) \n (le matériel devra être validé à nouveau) -VALIDATED --> TOBEARCHIVED : \l**demander archivage** (tobearchived) \n(par un RESPONSABLE ou un ADMIN) - -TOBEARCHIVED: Le matériel n'est plus modifiable -TOBEARCHIVED --> VALIDATED : \l **désarchiver** (unarchive) \n (par un ADMIN) -TOBEARCHIVED --> ARCHIVED : \l**archiver** (archive) \n(par un ADMIN) - -ARCHIVED: Le matériel n'est plus visible (sauf par un ADMIN) -ARCHIVED --> ARCHIVED: \l**imprimer fiche sortie matériel** -ARCHIVED --> VALIDATED : \l **désarchiver** (unarchive) \n (par un ADMIN) - - - - - -'On pouvait aussi 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: - -Version: 15/10/19 (Etienne Pallier) - -Profils: -- UTILISATEUR = Utilisateur quelconque (authentifié) du laboratoire -- RESPONSABLE = Responsable d'un groupe métier ou thématique auquel est rattaché le matériel -- ADMIN = Gestionnaire (Administratif) -- SUPERADMIN = Super utilisateur, il a au moins les mêmes droits que ADMIN - -Matériel non inventoriable = moins de 1000€ -Propriétaire = la personne qui va utiliser le matériel -Gestionnaire de référence = le gestionnaire désigné par le créateur de la fiche matériel (par défaut, c'est celui qui est responsable du projet auquel le matériel est associé) - -Un email est envoyé à chaque changement d'état du matériel: -- au propriétaire (pour l'informer du changement) -- au(x) responsable(s) (responsable groupe métier ou/et thématique) -- au gestionnaire de référence (pour qu'il gère la fiche) -endlegend -'end note' - - - -@enduml - -- libgit2 0.21.2