Commit 4201247420fa4bd193b797ac139a0854929d34cd

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

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
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, // &#39;projet&#39;
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, // &#39;projet&#39;
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(__(&#39;N. interne (labo)&#39;), h($entity-&gt;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));
... ...