Commit 14c43aae87549abc8dc0022560ac53df7b5bad63

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

Optimisation de la génération du numéro d'inventaire

=> le moins souvent possible
=> Uniquement si la date d'achat change ET avec une année différente

v3.7.9.99
@@ -85,10 +85,11 @@ Outre ces changements, voici d'autres changements importants : @@ -85,10 +85,11 @@ Outre ces changements, voici d'autres changements importants :
85 ======= CHANGES ======= 85 ======= CHANGES =======
86 86
87 ------- 87 -------
88 -10/09/2020 v3.7.9.97-98 (EP) 88 +10-11/09/2020 v3.7.9.97-99 (EP)
89 - (e) Ajout de l'entité (table) "Projet", à laquelle un matériel peut (ou pas) être associé 89 - (e) Ajout de l'entité (table) "Projet", à laquelle un matériel peut (ou pas) être associé
90 - (b) Enorme bugfix sur le numéro d'inventaire qui se régénérait à chaque modif du matériel !!! 90 - (b) Enorme bugfix sur le numéro d'inventaire qui se régénérait à chaque modif du matériel !!!
91 - (i) Changement de quelques règles d'accès (ACL) par défaut 91 - (i) Changement de quelques règles d'accès (ACL) par défaut
  92 + - ...
92 93
93 ------- 94 -------
94 07/09/2020 v3.7.9.96 (EP) 95 07/09/2020 v3.7.9.96 (EP)
@@ -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: 10/09/2020  
46 -Version: 3.7.9.98 45 +Date: 11/09/2020
  46 +Version: 3.7.9.99
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/Model/Table/AppTable.php
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 namespace App\Model\Table; 2 namespace App\Model\Table;
3 3
4 use Cake\ORM\Table; 4 use Cake\ORM\Table;
  5 +use Cake\ORM\TableRegistry;
5 6
6 /** 7 /**
7 * App Model 8 * App Model
@@ -29,4 +30,15 @@ class AppTable extends Table @@ -29,4 +30,15 @@ class AppTable extends Table
29 { 30 {
30 return (bool) filter_var($check, FILTER_VALIDATE_EMAIL); 31 return (bool) filter_var($check, FILTER_VALIDATE_EMAIL);
31 } 32 }
  33 +
  34 + /*
  35 + public function getEntity($id) {
  36 + debug($this->get($id));
  37 + debug($this->getEntityClass()); // 'App\Model\Entity\Materiel'
  38 + debug($this->getTable()); // table name
  39 + //_getClassName()
  40 + //return TableRegistry::getTableLocator()->get('Materiels')->get($id);
  41 + }
  42 + */
  43 +
32 } 44 }
src/Model/Table/MaterielsTable.php
@@ -647,6 +647,26 @@ class MaterielsTable extends AppTable @@ -647,6 +647,26 @@ class MaterielsTable extends AppTable
647 return $rules; 647 return $rules;
648 } 648 }
649 649
  650 + /*
  651 + private function getEntity($id) {
  652 + return TableRegistry::getTableLocator()->get('Materiels')->get($id);
  653 + }
  654 + */
  655 +
  656 + private function buy_year_changed($entity) {
  657 + // ADD => on return true car le num inventaire n'a pas encore été généré
  658 + if (is_null($entity->id)) return true;
  659 + // EDIT :
  660 + //debug($this->getEntity($entity->id));exit;
  661 + //$old_date_year = $this->getEntity($entity->id)->date_acquisition->format('Y');
  662 + //$old_date_year = TableRegistry::getTableLocator()->get('Materiels')->get($entity->id);
  663 + $old_date_year = $this->get($entity->id)->date_acquisition->format('Y');
  664 + $new_date_year = $entity->date_acquisition->format('Y');
  665 + //debug($old_date_year); debug($new_date_year); exit;
  666 + return $new_date_year != $old_date_year;
  667 + // Sinon
  668 + return false;
  669 + }
650 public function beforeSave($event, $entity, $options) 670 public function beforeSave($event, $entity, $options)
651 { 671 {
652 //debug($entity); exit; 672 //debug($entity); exit;
@@ -715,8 +735,29 @@ class MaterielsTable extends AppTable @@ -715,8 +735,29 @@ class MaterielsTable extends AppTable
715 //debug($entity->isDirty('date_acquisition')); 735 //debug($entity->isDirty('date_acquisition'));
716 //debug(in_array($entity->date_acquisition,$entity->getDirty())); 736 //debug(in_array($entity->date_acquisition,$entity->getDirty()));
717 //debug($entity); 737 //debug($entity);
718 - // La date achat a changé ? => on met à jour le numéro d'inventaire  
719 - if ( $entity->isDirty('date_acquisition') ) { 738 + //if ( $entity->isDirty('date_acquisition') ) {
  739 + /*
  740 + * (EP202009) changement radical de l'algo de (re)-génération du numéro d'inventaire
  741 + *
  742 + * Si config "SANS année" (simple numéro séquentiel)
  743 + * => on ne génère le numéro d'inventaire
  744 + * QU'une seule fois pour toutes : à la création de la fiche
  745 + *
  746 + * Par contre, si config "AVEC année" (numéro séquentiel PAR année)
  747 + * => on re-génère le numéro d'inventaire à CHAQUE fois que
  748 + * - la date achat est modifiée
  749 + * ET
  750 + * - que son ANNÉE a changé
  751 + */
  752 + if (
  753 + // ADD => on génère car c'est la première fois
  754 + empty( $entity->get('numero_laboratoire') )
  755 + ||
  756 + // EDIT et config "avec" année => on (re)-génère ssi date achat modifiée et année changée
  757 + ( $WITH_YEAR && $entity->isDirty('date_acquisition') && $this->buy_year_changed($entity) )
  758 + ) {
  759 + $labShortName = $configuration->labNameShort;
  760 + $numero_laboratoire = $labShortName;
720 if ($WITH_YEAR) { 761 if ($WITH_YEAR) {
721 $year=substr($entity->get('date_acquisition'), 6, 4); 762 $year=substr($entity->get('date_acquisition'), 6, 4);
722 ////debug("year before : $year"); 763 ////debug("year before : $year");
@@ -724,11 +765,8 @@ class MaterielsTable extends AppTable @@ -724,11 +765,8 @@ class MaterielsTable extends AppTable
724 $year = '20' . $year; 765 $year = '20' . $year;
725 } 766 }
726 ////debug("year after: $year"); 767 ////debug("year after: $year");
  768 + $numero_laboratoire .= '-' . $year;
727 } 769 }
728 - $labShortName = $configuration->labNameShort;  
729 - $numero_laboratoire = $labShortName;  
730 - //$WITH_YEAR && $numero_laboratoire .= '-' . $year;  
731 - if ($WITH_YEAR) $numero_laboratoire .= '-' . $year;  
732 //$num = TableRegistry::get('Materiels')->find('all', [ 770 //$num = TableRegistry::get('Materiels')->find('all', [
733 $num = TableRegistry::getTableLocator()->get('Materiels')->find('all', [ 771 $num = TableRegistry::getTableLocator()->get('Materiels')->find('all', [
734 'fields' => [ 772 'fields' => [