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
@@ -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
@@ -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, // &#39;projet&#39; @@ -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 $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, // &#39;projet&#39; @@ -449,7 +449,7 @@ $displayFilter = function($filter_name, // &#39;projet&#39;
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(__(&#39;N. interne (labo)&#39;), h($entity-&gt;numero_laboratoire)); @@ -645,7 +645,7 @@ $displayElement(__(&#39;N. interne (labo)&#39;), h($entity-&gt;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));