Commit 4201247420fa4bd193b797ac139a0854929d34cd
1 parent
abc9320c
Exists in
master
and in
1 other branch
Gestionnaire de référence désormais obligatoire pour valider un matériel
- Gestionnaire de référence automatiquement positionné quand c'est un gestionnaire qui crée ou édite une fiche - Message d'erreur plus précis pour dire quel champ manque lors de la validation - Nouveau schéma de version : A.B.C-D.E.F => avec A.B.C le numéro de version du logiciel LabInvent, et D.E.F le numéro de version du framework CakePhp utilisé => avec A.B.C = A numéro de version majeur, B numéro de version mineur (nouvelle fonctionnalité), C numéro de bugfix => avec A=1 (toute première version Upsillon), A=2 (première version remaniée par l'IRAP avec CakePhp2), A=3 (version avec CakePhp3), A=4 (version mobile) v4.101.0-3.7.9
Showing
5 changed files
with
54 additions
and
20 deletions
Show diff stats
CHANGES.txt
@@ -90,6 +90,16 @@ Outre ces changements, voici d'autres changements importants : | @@ -90,6 +90,16 @@ Outre ces changements, voici d'autres changements importants : | ||
90 | ======= CHANGES ======= | 90 | ======= CHANGES ======= |
91 | 91 | ||
92 | ------- | 92 | ------- |
93 | +14/09/2020 v4.101.0-3.7.9 (EP) | ||
94 | + - (e) Gestionnaire de référence désormais obligatoire pour valider un matériel | ||
95 | + - (e) Gestionnaire de référence automatiquement positionné quand c'est un gestionnaire qui crée ou édite une fiche | ||
96 | + - (e) Message d'erreur plus précis pour dire quel champ manque lors de la validation | ||
97 | + - (e) Nouveau schéma de version : A.B.C-D.E.F | ||
98 | + => avec A.B.C le numéro de version du logiciel LabInvent, et D.E.F le numéro de version du framework CakePhp utilisé | ||
99 | + => avec A.B.C = A numéro de version majeur, B numéro de version mineur (nouvelle fonctionnalité), C numéro de bugfix | ||
100 | + => avec A=1 (toute première version Upsillon), A=2 (première version remaniée par l'IRAP avec CakePhp2), A=3 (version avec CakePhp3), A=4 (version mobile) | ||
101 | + | ||
102 | +------- | ||
93 | 11/09/2020 v3.7.9.100 (EP) | 103 | 11/09/2020 v3.7.9.100 (EP) |
94 | - (e) Nouveau filtre de la liste des matériels (index) => par "projet" | 104 | - (e) Nouveau filtre de la liste des matériels (index) => par "projet" |
95 | - (i) Enorme refactorisation de tous les filtres (nb lignes, age, domaine, projet) de la page index (liste des matériels) => une fonction unique $displayFilter() dans index.ctp | 105 | - (i) Enorme refactorisation de tous les filtres (nb lignes, age, domaine, projet) de la page index (liste des matériels) => une fonction unique $displayFilter() dans index.ctp |
README.md
@@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes : | @@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes : | ||
42 | 42 | ||
43 | -------------------------------------------------------------------------------------------- | 43 | -------------------------------------------------------------------------------------------- |
44 | 44 | ||
45 | -Date: 11/09/2020 | ||
46 | -Version: 3.7.9.100 | 45 | +Date: 14/09/2020 |
46 | +Version: 4.101.0-3.7.9 | ||
47 | 47 | ||
48 | 48 | ||
49 | HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) | 49 | HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) |
src/Controller/MaterielsController.php
@@ -1919,6 +1919,11 @@ class MaterielsController extends AppController { | @@ -1919,6 +1919,11 @@ class MaterielsController extends AppController { | ||
1919 | 1919 | ||
1920 | } // EDIT only | 1920 | } // EDIT only |
1921 | 1921 | ||
1922 | + // Si le user est un admin, on le met comme gestionnaire de référence | ||
1923 | + // (sauf si le gestionnaire est déjà défini) | ||
1924 | + if ($this->USER_IS_ADMIN() && empty($materiel->gestionnaire_id)) | ||
1925 | + $materiel->gestionnaire_id = $this->getCurrentUserEntity()->id; | ||
1926 | + | ||
1922 | /* About set and compact : | 1927 | /* About set and compact : |
1923 | * | 1928 | * |
1924 | * The compact (php) function returns an associative array, built by taking the names specified in the input array, | 1929 | * The compact (php) function returns an associative array, built by taking the names specified in the input array, |
@@ -2156,24 +2161,36 @@ class MaterielsController extends AppController { | @@ -2156,24 +2161,36 @@ class MaterielsController extends AppController { | ||
2156 | // - VALIDATED | 2161 | // - VALIDATED |
2157 | if ($newStatus == 'VALIDATED') { | 2162 | if ($newStatus == 'VALIDATED') { |
2158 | $mandatoryFields = array( | 2163 | $mandatoryFields = array( |
2164 | + 'Nom utilisateur' => $materiel->nom_responsable, | ||
2165 | + 'Fournisseur' => $materiel->fournisseur_id, | ||
2166 | + 'Numéro de commande' => $materiel->numero_commande, | ||
2167 | + 'Organisme' => $materiel->organisme_id, | ||
2168 | + 'Date de reception' => $materiel->date_reception, | ||
2169 | + 'Prix' => $materiel->prix_ht, | ||
2170 | + // (EP202009) Un gestionnaire par défaut (de référence) doit être choisi AVANT validation | ||
2171 | + 'Gestionnaire de référence' => $materiel->gestionnaire_id | ||
2172 | + ); | ||
2173 | + /* | ||
2174 | + $mandatoryFields = array( | ||
2159 | $materiel->nom_responsable, | 2175 | $materiel->nom_responsable, |
2160 | $materiel->fournisseur_id, | 2176 | $materiel->fournisseur_id, |
2161 | $materiel->numero_commande, | 2177 | $materiel->numero_commande, |
2162 | $materiel->organisme_id, | 2178 | $materiel->organisme_id, |
2163 | $materiel->date_reception, | 2179 | $materiel->date_reception, |
2164 | - $materiel->prix_ht | 2180 | + $materiel->prix_ht, |
2165 | ); | 2181 | ); |
2166 | - // Ne pas oublier les espaces après chaque virgule/fin de ligne (sinon le message d'erreur est pas joli) | ||
2167 | $msgError1 = "Pour valider un matériel, les champs suivants ne doivent pas être vides : | 2182 | $msgError1 = "Pour valider un matériel, les champs suivants ne doivent pas être vides : |
2168 | Date de reception, | 2183 | Date de reception, |
2169 | Nom utilisateur, | 2184 | Nom utilisateur, |
2185 | + Gestionnaire de référence, | ||
2170 | Fournisseur, | 2186 | Fournisseur, |
2171 | Organisme, | 2187 | Organisme, |
2172 | Prix, | 2188 | Prix, |
2173 | et Numéro de commande"; | 2189 | et Numéro de commande"; |
2190 | + */ | ||
2174 | 2191 | ||
2175 | // Si au moins un champ obligatoire est nul ou vide => ERROR | 2192 | // Si au moins un champ obligatoire est nul ou vide => ERROR |
2176 | - foreach ($mandatoryFields as $field) { | 2193 | + foreach ($mandatoryFields as $fname => $field) { |
2177 | if ($field === null || $field == '') { | 2194 | if ($field === null || $field == '') { |
2178 | // Validation d'un seul matériel => on revient à "edit" | 2195 | // Validation d'un seul matériel => on revient à "edit" |
2179 | if ($onlyOneMateriel) { | 2196 | if ($onlyOneMateriel) { |
@@ -2185,7 +2202,12 @@ class MaterielsController extends AppController { | @@ -2185,7 +2202,12 @@ class MaterielsController extends AppController { | ||
2185 | * (il se peut qu'on n'aie plus besoin de faire ça dans une prochaine version | 2202 | * (il se peut qu'on n'aie plus besoin de faire ça dans une prochaine version |
2186 | * de bootstrap, ou bootsrap-ui, ou cakephp..., à surveiller donc) | 2203 | * de bootstrap, ou bootsrap-ui, ou cakephp..., à surveiller donc) |
2187 | */ | 2204 | */ |
2205 | + $msgError1 = "Pour valider un matériel, le champ suivant ne doit pas être vide : ".$fname.' du matériel'; | ||
2188 | $this->Flash->error($msgError1); | 2206 | $this->Flash->error($msgError1); |
2207 | + /* MARCHE PAS POURQUOI ? | ||
2208 | + $materiel->setError($field, 'Ce champ ne doit pas être vide'); | ||
2209 | + $materiel->setError('numero_commande', 'Ce champ ne doit pas être vide'); | ||
2210 | + */ | ||
2189 | // (EP 2020 03) Si on ne veut pas de bouton de suppression du message : | 2211 | // (EP 2020 03) Si on ne veut pas de bouton de suppression du message : |
2190 | //$this->Flash->set($msgError1, ['params' => ['class' => 'alert alert-dismissible in alert-danger']]); | 2212 | //$this->Flash->set($msgError1, ['params' => ['class' => 'alert alert-dismissible in alert-danger']]); |
2191 | //$this->Flash->set($msgError1, ['params' => ['class' => 'alert alert-dismissible fade in alert-danger']]); | 2213 | //$this->Flash->set($msgError1, ['params' => ['class' => 'alert alert-dismissible fade in alert-danger']]); |
@@ -2204,6 +2226,7 @@ class MaterielsController extends AppController { | @@ -2204,6 +2226,7 @@ class MaterielsController extends AppController { | ||
2204 | //debug($materiel->date_validated); | 2226 | //debug($materiel->date_validated); |
2205 | //exit; | 2227 | //exit; |
2206 | 2228 | ||
2229 | + /* (EP202009) déplacé dans add_or_edit() | ||
2207 | // Si le current user est un admin => on le met comme "gestionnaire" de ce matériel | 2230 | // Si le current user est un admin => on le met comme "gestionnaire" de ce matériel |
2208 | //if ($newStatus == 'VALIDATED') { | 2231 | //if ($newStatus == 'VALIDATED') { |
2209 | $current_user = $_SESSION['Auth']['User']['sn'][0]; | 2232 | $current_user = $_SESSION['Auth']['User']['sn'][0]; |
@@ -2231,6 +2254,7 @@ class MaterielsController extends AppController { | @@ -2231,6 +2254,7 @@ class MaterielsController extends AppController { | ||
2231 | $materiel->gestionnaire_id = $gestionnaireID; | 2254 | $materiel->gestionnaire_id = $gestionnaireID; |
2232 | } // if | 2255 | } // if |
2233 | //} | 2256 | //} |
2257 | + */ | ||
2234 | 2258 | ||
2235 | } // VALIDATED | 2259 | } // VALIDATED |
2236 | 2260 |
src/Template/Materiels/index.ctp
@@ -314,13 +314,13 @@ $displayFilters = function($form, $request, | @@ -314,13 +314,13 @@ $displayFilters = function($form, $request, | ||
314 | */ | 314 | */ |
315 | //$f1_func, | 315 | //$f1_func, |
316 | //$f1_func, | 316 | //$f1_func, |
317 | - $f1_name, $f1_options, | 317 | + $f1_name, $f1_label, $f1_options, |
318 | //$f2_func, $f2_options, | 318 | //$f2_func, $f2_options, |
319 | - $f2_name, $f2_options, | 319 | + $f2_name, $f2_label, $f2_options, |
320 | //$displayDomaineSelector, $domain_options, | 320 | //$displayDomaineSelector, $domain_options, |
321 | //$displayProjetSelector, $projet_options | 321 | //$displayProjetSelector, $projet_options |
322 | - $f3_name, $f3_options, | ||
323 | - $f4_name, $f4_options | 322 | + $f3_name, $f3_label, $f3_options, |
323 | + $f4_name, $f4_label, $f4_options | ||
324 | ) { | 324 | ) { |
325 | //echo '<div>'; | 325 | //echo '<div>'; |
326 | echo '<div class="col-lg-2 col-md-3 col-sm-4">'; | 326 | echo '<div class="col-lg-2 col-md-3 col-sm-4">'; |
@@ -330,28 +330,28 @@ $displayFilters = function($form, $request, | @@ -330,28 +330,28 @@ $displayFilters = function($form, $request, | ||
330 | echo '<td>'; | 330 | echo '<td>'; |
331 | //$displayNbLinesSelector($form, $request); | 331 | //$displayNbLinesSelector($form, $request); |
332 | //$f1_func($form, $request); | 332 | //$f1_func($form, $request); |
333 | - $df($f1_name, $form, $request, $f1_options); | 333 | + $df($f1_name, $f1_label, $form, $request, $f1_options); |
334 | echo '</td>'; | 334 | echo '</td>'; |
335 | 335 | ||
336 | // Filtre 2 | 336 | // Filtre 2 |
337 | echo '<td>'; | 337 | echo '<td>'; |
338 | //$displayAgeSelector($form, $request); | 338 | //$displayAgeSelector($form, $request); |
339 | //$f2_func($form, $request, $f2_options); | 339 | //$f2_func($form, $request, $f2_options); |
340 | - $df($f2_name, $form, $request, $f2_options); | 340 | + $df($f2_name, $f2_label, $form, $request, $f2_options); |
341 | echo '</td>'; | 341 | echo '</td>'; |
342 | 342 | ||
343 | // Filtre 3 | 343 | // Filtre 3 |
344 | echo '<td>'; | 344 | echo '<td>'; |
345 | //$displayDomaineSelector($form, $request, $domain_options); | 345 | //$displayDomaineSelector($form, $request, $domain_options); |
346 | //$df('domain', $form, $request, $domain_options); | 346 | //$df('domain', $form, $request, $domain_options); |
347 | - $df($f3_name, $form, $request, $f3_options); | 347 | + $df($f3_name, $f3_label, $form, $request, $f3_options); |
348 | echo '</td>'; | 348 | echo '</td>'; |
349 | 349 | ||
350 | // Filtre 4 | 350 | // Filtre 4 |
351 | echo '<td>'; | 351 | echo '<td>'; |
352 | //$displayProjetSelector('projet', $form, $request, $projet_options); | 352 | //$displayProjetSelector('projet', $form, $request, $projet_options); |
353 | //$df('projet', $form, $request, $projet_options); | 353 | //$df('projet', $form, $request, $projet_options); |
354 | - $df($f4_name, $form, $request, $f4_options); | 354 | + $df($f4_name, $f4_label, $form, $request, $f4_options); |
355 | echo '</td>'; | 355 | echo '</td>'; |
356 | 356 | ||
357 | echo '</tr></table>'; | 357 | echo '</tr></table>'; |
@@ -441,7 +441,7 @@ $displayProjetSelector = function($filter_name, // 'projet' | @@ -441,7 +441,7 @@ $displayProjetSelector = function($filter_name, // 'projet' | ||
441 | }; | 441 | }; |
442 | */ | 442 | */ |
443 | 443 | ||
444 | -$displayFilter = function($filter_name, // 'projet' | 444 | +$displayFilter = function($filter_name, $filter_label,// 'projet' |
445 | $form, $request, $options | 445 | $form, $request, $options |
446 | ) { | 446 | ) { |
447 | //echo '<div class="col-lg-2 col-md-3 col-sm-4">'; | 447 | //echo '<div class="col-lg-2 col-md-3 col-sm-4">'; |
@@ -449,7 +449,7 @@ $displayFilter = function($filter_name, // 'projet' | @@ -449,7 +449,7 @@ $displayFilter = function($filter_name, // 'projet' | ||
449 | //echo $form->control('projet_selector', [ | 449 | //echo $form->control('projet_selector', [ |
450 | echo $form->control($filter_name.'_selector', [ // 'projet_selector' | 450 | echo $form->control($filter_name.'_selector', [ // 'projet_selector' |
451 | //'label' => 'Projet', | 451 | //'label' => 'Projet', |
452 | - 'label' => ucfirst($filter_name), // 'Projet' | 452 | + 'label' => $filter_label ? $filter_label : ucfirst($filter_name), // 'Projet' |
453 | //'onchange' => "updateUrlWithSelectedValue('projet-selector', 'projet')", | 453 | //'onchange' => "updateUrlWithSelectedValue('projet-selector', 'projet')", |
454 | //'onchange' => "updateUrlWithSelectedValue($filter_name.'-selector', $filter_name)", // ('projet-selector', 'projet') | 454 | //'onchange' => "updateUrlWithSelectedValue($filter_name.'-selector', $filter_name)", // ('projet-selector', 'projet') |
455 | 'onchange' => "updateUrlWithSelectedValue('$html_filter_name', '$filter_name')", // ('projet-selector', 'projet') | 455 | 'onchange' => "updateUrlWithSelectedValue('$html_filter_name', '$filter_name')", // ('projet-selector', 'projet') |
@@ -737,13 +737,13 @@ $displayFilters( | @@ -737,13 +737,13 @@ $displayFilters( | ||
737 | $this->Form, $this->request, | 737 | $this->Form, $this->request, |
738 | $displayFilter, | 738 | $displayFilter, |
739 | //$displayNbLinesSelector, | 739 | //$displayNbLinesSelector, |
740 | - 'nblines', $nblines_options, | 740 | + 'nblines', 'Lignes par page', $nblines_options, |
741 | //$displayAgeSelector, $age_options, | 741 | //$displayAgeSelector, $age_options, |
742 | - 'age', $age_options, | 742 | + 'age', '', $age_options, |
743 | //$displayDomaineSelector, $domain_options, | 743 | //$displayDomaineSelector, $domain_options, |
744 | //$displayProjetSelector, $projet_options | 744 | //$displayProjetSelector, $projet_options |
745 | - 'domaine', $domaine_options, | ||
746 | - 'projet', $projet_options | 745 | + 'domaine', '', $domaine_options, |
746 | + 'projet', '', $projet_options | ||
747 | ); | 747 | ); |
748 | //$displayNbLinesSelector($this->Form, $this->request); | 748 | //$displayNbLinesSelector($this->Form, $this->request); |
749 | 749 |
src/Template/Materiels/view.ctp
@@ -645,7 +645,7 @@ $displayElement(__('N. interne (labo)'), h($entity->numero_laboratoire)); | @@ -645,7 +645,7 @@ $displayElement(__('N. interne (labo)'), h($entity->numero_laboratoire)); | ||
645 | $gestionnaire = TableRegistry::get('Users')->find()->where([ | 645 | $gestionnaire = TableRegistry::get('Users')->find()->where([ |
646 | 'id =' => $entity->gestionnaire_id | 646 | 'id =' => $entity->gestionnaire_id |
647 | ]); | 647 | ]); |
648 | -$displayElement(__('Nom du gestionnaire de référence'), h($gestionnaire->first()['nom'])); | 648 | +$displayElement(__('Gestionnaire de référence'), h($gestionnaire->first()['nom'])); |
649 | if ($role == 'Super Administrateur') { | 649 | if ($role == 'Super Administrateur') { |
650 | //$displayElement(__('Date création'), h($entity->created)); | 650 | //$displayElement(__('Date création'), h($entity->created)); |
651 | $displayElement(__('Nom du créateur'), h($entity->nom_createur)); | 651 | $displayElement(__('Nom du créateur'), h($entity->nom_createur)); |