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 | 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 | 103 | 11/09/2020 v3.7.9.100 (EP) |
94 | 104 | - (e) Nouveau filtre de la liste des matériels (index) => par "projet" |
95 | 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 | 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 | 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 | 1919 | |
1920 | 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 | 1927 | /* About set and compact : |
1923 | 1928 | * |
1924 | 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 | 2161 | // - VALIDATED |
2157 | 2162 | if ($newStatus == 'VALIDATED') { |
2158 | 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 | 2175 | $materiel->nom_responsable, |
2160 | 2176 | $materiel->fournisseur_id, |
2161 | 2177 | $materiel->numero_commande, |
2162 | 2178 | $materiel->organisme_id, |
2163 | 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 | 2182 | $msgError1 = "Pour valider un matériel, les champs suivants ne doivent pas être vides : |
2168 | 2183 | Date de reception, |
2169 | 2184 | Nom utilisateur, |
2185 | + Gestionnaire de référence, | |
2170 | 2186 | Fournisseur, |
2171 | 2187 | Organisme, |
2172 | 2188 | Prix, |
2173 | 2189 | et Numéro de commande"; |
2190 | + */ | |
2174 | 2191 | |
2175 | 2192 | // Si au moins un champ obligatoire est nul ou vide => ERROR |
2176 | - foreach ($mandatoryFields as $field) { | |
2193 | + foreach ($mandatoryFields as $fname => $field) { | |
2177 | 2194 | if ($field === null || $field == '') { |
2178 | 2195 | // Validation d'un seul matériel => on revient à "edit" |
2179 | 2196 | if ($onlyOneMateriel) { |
... | ... | @@ -2185,7 +2202,12 @@ class MaterielsController extends AppController { |
2185 | 2202 | * (il se peut qu'on n'aie plus besoin de faire ça dans une prochaine version |
2186 | 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 | 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 | 2211 | // (EP 2020 03) Si on ne veut pas de bouton de suppression du message : |
2190 | 2212 | //$this->Flash->set($msgError1, ['params' => ['class' => 'alert alert-dismissible in alert-danger']]); |
2191 | 2213 | //$this->Flash->set($msgError1, ['params' => ['class' => 'alert alert-dismissible fade in alert-danger']]); |
... | ... | @@ -2204,6 +2226,7 @@ class MaterielsController extends AppController { |
2204 | 2226 | //debug($materiel->date_validated); |
2205 | 2227 | //exit; |
2206 | 2228 | |
2229 | + /* (EP202009) déplacé dans add_or_edit() | |
2207 | 2230 | // Si le current user est un admin => on le met comme "gestionnaire" de ce matériel |
2208 | 2231 | //if ($newStatus == 'VALIDATED') { |
2209 | 2232 | $current_user = $_SESSION['Auth']['User']['sn'][0]; |
... | ... | @@ -2231,6 +2254,7 @@ class MaterielsController extends AppController { |
2231 | 2254 | $materiel->gestionnaire_id = $gestionnaireID; |
2232 | 2255 | } // if |
2233 | 2256 | //} |
2257 | + */ | |
2234 | 2258 | |
2235 | 2259 | } // VALIDATED |
2236 | 2260 | ... | ... |
src/Template/Materiels/index.ctp
... | ... | @@ -314,13 +314,13 @@ $displayFilters = function($form, $request, |
314 | 314 | */ |
315 | 315 | //$f1_func, |
316 | 316 | //$f1_func, |
317 | - $f1_name, $f1_options, | |
317 | + $f1_name, $f1_label, $f1_options, | |
318 | 318 | //$f2_func, $f2_options, |
319 | - $f2_name, $f2_options, | |
319 | + $f2_name, $f2_label, $f2_options, | |
320 | 320 | //$displayDomaineSelector, $domain_options, |
321 | 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 | 325 | //echo '<div>'; |
326 | 326 | echo '<div class="col-lg-2 col-md-3 col-sm-4">'; |
... | ... | @@ -330,28 +330,28 @@ $displayFilters = function($form, $request, |
330 | 330 | echo '<td>'; |
331 | 331 | //$displayNbLinesSelector($form, $request); |
332 | 332 | //$f1_func($form, $request); |
333 | - $df($f1_name, $form, $request, $f1_options); | |
333 | + $df($f1_name, $f1_label, $form, $request, $f1_options); | |
334 | 334 | echo '</td>'; |
335 | 335 | |
336 | 336 | // Filtre 2 |
337 | 337 | echo '<td>'; |
338 | 338 | //$displayAgeSelector($form, $request); |
339 | 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 | 341 | echo '</td>'; |
342 | 342 | |
343 | 343 | // Filtre 3 |
344 | 344 | echo '<td>'; |
345 | 345 | //$displayDomaineSelector($form, $request, $domain_options); |
346 | 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 | 348 | echo '</td>'; |
349 | 349 | |
350 | 350 | // Filtre 4 |
351 | 351 | echo '<td>'; |
352 | 352 | //$displayProjetSelector('projet', $form, $request, $projet_options); |
353 | 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 | 355 | echo '</td>'; |
356 | 356 | |
357 | 357 | echo '</tr></table>'; |
... | ... | @@ -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 | 445 | $form, $request, $options |
446 | 446 | ) { |
447 | 447 | //echo '<div class="col-lg-2 col-md-3 col-sm-4">'; |
... | ... | @@ -449,7 +449,7 @@ $displayFilter = function($filter_name, // 'projet' |
449 | 449 | //echo $form->control('projet_selector', [ |
450 | 450 | echo $form->control($filter_name.'_selector', [ // 'projet_selector' |
451 | 451 | //'label' => 'Projet', |
452 | - 'label' => ucfirst($filter_name), // 'Projet' | |
452 | + 'label' => $filter_label ? $filter_label : ucfirst($filter_name), // 'Projet' | |
453 | 453 | //'onchange' => "updateUrlWithSelectedValue('projet-selector', 'projet')", |
454 | 454 | //'onchange' => "updateUrlWithSelectedValue($filter_name.'-selector', $filter_name)", // ('projet-selector', 'projet') |
455 | 455 | 'onchange' => "updateUrlWithSelectedValue('$html_filter_name', '$filter_name')", // ('projet-selector', 'projet') |
... | ... | @@ -737,13 +737,13 @@ $displayFilters( |
737 | 737 | $this->Form, $this->request, |
738 | 738 | $displayFilter, |
739 | 739 | //$displayNbLinesSelector, |
740 | - 'nblines', $nblines_options, | |
740 | + 'nblines', 'Lignes par page', $nblines_options, | |
741 | 741 | //$displayAgeSelector, $age_options, |
742 | - 'age', $age_options, | |
742 | + 'age', '', $age_options, | |
743 | 743 | //$displayDomaineSelector, $domain_options, |
744 | 744 | //$displayProjetSelector, $projet_options |
745 | - 'domaine', $domaine_options, | |
746 | - 'projet', $projet_options | |
745 | + 'domaine', '', $domaine_options, | |
746 | + 'projet', '', $projet_options | |
747 | 747 | ); |
748 | 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 | 645 | $gestionnaire = TableRegistry::get('Users')->find()->where([ |
646 | 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 | 649 | if ($role == 'Super Administrateur') { |
650 | 650 | //$displayElement(__('Date création'), h($entity->created)); |
651 | 651 | $displayElement(__('Nom du créateur'), h($entity->nom_createur)); | ... | ... |