Commit f4d2696b9df4fc13791807e585a843606e56283a

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

Changement du type de prix_ht dans table materiels

(on passe de float unsigned à decimal(13,2) qui est plus sûr)

=> adaptation/amélioration de la recherche de matériels sur prix_ht
(marche avec ou sans centimes)

=> adaptation et bugfix tests

v4.105.24-3.7.9
CHANGES.txt
... ... @@ -119,6 +119,15 @@ Outre ces changements, voici d'autres changements importants :
119 119  
120 120 ======= CHANGES =======
121 121  
  122 +TODO
  123 + - (i) Nettoyage de la liste des fournisseurs : GROSSE requete sql compliquée de suppression des doublons (et des espaces en trop)
  124 +
  125 +-------
  126 +15/10/2020 v4.105.24-3.7.9 (EP)
  127 + - (i) changement du type de prix_ht dans table materiels (on passe de float unsigned à decimal(13,2) qui est plus sûr)
  128 + - (b) adaptation/amélioration de la recherche de matériels sur prix_ht (marche avec ou sans centimes)
  129 + - (b) adaptation et bugfix tests
  130 +
122 131 -------
123 132 14/10/2020 v4.105.23-3.7.9 (EP)
124 133 - (i) tests cleanup
... ...
README.md
... ... @@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes :
42 42  
43 43 --------------------------------------------------------------------------------------------
44 44  
45   -Date: 14/10/2020
46   -Version: 4.105.23-3.7.9
  45 +Date: 15/10/2020
  46 +Version: 4.105.24-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)
... ...
TESTS.sh
... ... @@ -13,14 +13,15 @@ TESTALL=1
13 13 #echo "all is: $*"
14 14  
15 15  
  16 +# D'abord on affiche la version courante
  17 +./VERSION
  18 +
16 19 # Souvent necessaire pour que les tests se passent bien:
17   -sudo rm -rf tmp/cache/*
  20 +###sudo rm -rf tmp/cache/*
18 21 #rm -rf tmp/cache/*/*
19 22 ##sudo chmod o+w tmp/cache/persistent/myapp_cake_core_translations_* > /dev/null 2>&1
20 23  
21 24  
22   -# D'abord on affiche la version courante
23   -./VERSION
24 25  
25 26  
26 27 if [[ "$1" != "" ]] ; then
... ...
VERSION
... ... @@ -56,3 +56,5 @@ php composer.phar --version
56 56  
57 57 echo
58 58  
  59 +# On en profite pour nettoyer le cache, ca peut pas faire de mal
  60 +sudo rm -rf tmp/cache/*
... ...
database/update/script_sql/db-update-2020-10-15.sql 0 → 100755
... ... @@ -0,0 +1,15 @@
  1 +use database;
  2 +
  3 +-- Changer le type pour materiels.prix_ht : float unsigned => decimal(13,2)
  4 +-- car :
  5 +-- float ne marche pas bien dans les comparaisons
  6 +-- et
  7 +-- unsigned est deprecated pour float, decimal, ...
  8 +-- cf https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html
  9 +-- cf https://dev.mysql.com/doc/refman/8.0/en/no-matching-rows.html
  10 +-- conseillé pour le type monétaire : decimal(13,2)
  11 +-- https://rietta.com/blog/best-data-types-for-currencymoney-in/
  12 +-- Champ : materiels.prix_ht
  13 +-- Ancien format : float UNSIGNED DEFAULT NULL
  14 +-- Nouveau format : decimal(13,2) NULL DEFAULT NULL
  15 +ALTER TABLE materiels CHANGE prix_ht prix_ht DECIMAL(13,2) NULL DEFAULT NULL;
... ...
src/Controller/MaterielsController.php
... ... @@ -2739,7 +2739,24 @@ class MaterielsController extends AppController {
2739 2739 $searchFieldName = 's_' . $fieldName;
2740 2740 //if ($this->request->getData($searchFieldName) !== null && ($this->request->getData($searchFieldName) != ''))
2741 2741 //if ($this->request->getData($searchFieldName)) return [ "Materiels.$fieldName =" => $this->request->getData($searchFieldName) ];
2742   - if ($this->request->getData($searchFieldName)) return [ "Materiels.$fieldName LIKE" => $this->request->getData($searchFieldName) ];
  2742 + $val = $this->request->getData($searchFieldName);
  2743 + if ($val) {
  2744 + // Cas spécial du champ prix_ht : il faut ajouter '.00' à la fin pour que la valeur soit trouvée !!!
  2745 + if ($fieldName=='prix_ht') {
  2746 + $val = number_format($val, 2, '.', '');
  2747 + /*
  2748 + //debug($val);
  2749 + if (
  2750 + // pas de point
  2751 + count(explode('.', $val)) == 1
  2752 + &&
  2753 + // ni de virgule
  2754 + count(explode(',', $val)) == 1
  2755 + ) $val = $val.'.00';
  2756 + */
  2757 + }
  2758 + return [ "Materiels.$fieldName LIKE" => $val ];
  2759 + }
2743 2760 return NULL;
2744 2761 }
2745 2762  
... ...
src/Template/Pages/tools_sm.ctp
... ... @@ -72,55 +72,55 @@ echo $this->Html->link($verb . ' les Catégories', [
72 72 echo '</td></tr>';
73 73 */
74 74  
75   -echo_list($this->Html, 'Projets', 'projets');
76 75  
77   -echo_list($this->Html, 'Sites', 'sites');
  76 +// types de DOCUMENTS
  77 +echo_list($this->Html, 'types de Documents', 'type_documents');
78 78 /*
79   -echo '<tr><td>';
80   -echo $this->Html->link('Gérer les Sites', [
81   - 'controller' => 'sites',
82   - 'sort' => 'nom',
83   - //'action' => 'index',
84   -]);
85   -echo '</td></tr>';
  79 + echo '<tr><td>';
  80 + echo $this->Html->link('Gérer les types de Documents', [
  81 + 'controller' => 'type_documents',
  82 + 'sort' => 'nom'
  83 + ]);
  84 + echo '</td></tr>';
86 85 */
87 86  
88   -echo_list($this->Html, 'Organismes', 'organismes');
89   -/*
90   -echo '<tr><td>';
91   -echo $this->Html->link('Gérer les Organismes', [
92   - 'controller' => 'organismes',
93   - 'sort' => 'nom'
94   -]);
95   -echo '</td></tr>';
96   -*/
97 87  
98   -echo_list($this->Html, 'types de Suivis', 'type_suivis');
  88 +// FOURNISSEURS
  89 +$changed_verb = $verb;
  90 +if ($role == 'Administration' && in_array('fournisseurs', $admin_can_manage)) $changed_verb = 'Gérer';
  91 +echo_list($this->Html, 'Fournisseurs', 'fournisseurs', 'index', $changed_verb);
99 92 /*
100   -echo '<tr><td>';
101   -echo $this->Html->link('Gérer les types de Suivis', [
102   - 'controller' => 'type_suivis',
103   - 'sort' => 'nom'
104   -]);
105   -echo '</td></tr>';
106   -*/
107   -
108   -$names = explode(" ", $configuration->nom_groupe_thematique);
109   -if (isset($names[1])) {
110   - $nom = $names[0] . 's ' . $names[1] . 's';
111   -} else {
112   - $nom = $names[0] . 's';
  93 + echo '<tr><td>';
  94 + echo $this->Html->link('Gérer les Fournisseurs', [
  95 + 'controller' => 'fournisseurs',
  96 + 'sort' => 'nom'
  97 + ]);
  98 + echo '</td></tr>';
  99 + */
  100 +
  101 +
  102 +// GROUPES métier & thématique
  103 +foreach (['metier','thematique'] as $group_type) {
  104 + //$names = explode(" ", $configuration->nom_groupe_thematique);
  105 + $group_type_name = 'nom_groupe_'.$group_type;
  106 + $names = explode(" ", $configuration->$group_type_name);
  107 + if (isset($names[1])) {
  108 + $nom = $names[0] . 's ' . $names[1] . 's';
  109 + } else {
  110 + $nom = $names[0] . 's';
  111 + }
  112 + //echo_list($this->Html, $nom, 'groupes_thematiques');
  113 + echo_list($this->Html, $nom, 'groupes_'.$group_type.'s');
  114 + /*
  115 + echo '<tr><td>';
  116 + echo $this->Html->link('Gérer les ' . $nom, [
  117 + 'controller' => 'groupes_thematiques',
  118 + 'sort' => 'nom'
  119 + ]);
  120 + echo '</td></tr>';
  121 + */
113 122 }
114   -echo_list($this->Html, $nom, 'groupes_thematiques');
115 123 /*
116   -echo '<tr><td>';
117   -echo $this->Html->link('Gérer les ' . $nom, [
118   - 'controller' => 'groupes_thematiques',
119   - 'sort' => 'nom'
120   -]);
121   -echo '</td></tr>';
122   -*/
123   -
124 124 $names = explode(" ", $configuration->nom_groupe_metier);
125 125 if (isset($names[1])) {
126 126 $nom = $names[0] . 's ' . $names[1] . 's';
... ... @@ -128,60 +128,77 @@ if (isset($names[1])) {
128 128 $nom = $names[0] . 's';
129 129 }
130 130 echo_list($this->Html, $nom, 'groupes_metiers');
  131 + echo '<tr><td>';
  132 + echo $this->Html->link('Gérer les ' . $nom, [
  133 + 'controller' => 'groupes_metiers',
  134 + 'sort' => 'nom'
  135 + ]);
  136 + echo '</td></tr>';
  137 + */
  138 +
  139 +
  140 +// METROLOGIE MODULE ONLY
  141 +if ($configuration->metrologie) {
  142 +
  143 + echo_list($this->Html, 'Métrologie : Unités', 'unites');
  144 + /*
  145 + echo '<tr><td>';
  146 + echo $this->Html->link('Gérer les Unités (Métrologie)', [
  147 + 'controller' => 'unites',
  148 + 'sort' => 'nom'
  149 + ]);
  150 + echo '</td></tr>';
  151 + */
  152 +
  153 + echo_list($this->Html, 'Métrologie : Formules', 'formules');
  154 + /*
  155 + echo '<tr><td>';
  156 + echo $this->Html->link('Gérer les Formules (Métrologie)', [
  157 + 'controller' => 'formules',
  158 + 'sort' => 'nom'
  159 + ]);
  160 + echo '</td></tr>';
  161 + */
  162 +}
  163 +
  164 +
  165 +// ORGANISMES
  166 +echo_list($this->Html, 'Organismes', 'organismes');
131 167 /*
132 168 echo '<tr><td>';
133   -echo $this->Html->link('Gérer les ' . $nom, [
134   - 'controller' => 'groupes_metiers',
  169 +echo $this->Html->link('Gérer les Organismes', [
  170 + 'controller' => 'organismes',
135 171 'sort' => 'nom'
136 172 ]);
137 173 echo '</td></tr>';
138 174 */
139 175  
140   -echo_list($this->Html, 'types de Documents', 'type_documents');
  176 +echo_list($this->Html, 'Projets', 'projets');
  177 +
  178 +echo_list($this->Html, 'Sites', 'sites');
141 179 /*
142 180 echo '<tr><td>';
143   -echo $this->Html->link('Gérer les types de Documents', [
144   - 'controller' => 'type_documents',
145   - 'sort' => 'nom'
  181 +echo $this->Html->link('Gérer les Sites', [
  182 + 'controller' => 'sites',
  183 + 'sort' => 'nom',
  184 + //'action' => 'index',
146 185 ]);
147 186 echo '</td></tr>';
148 187 */
149 188  
150   -$changed_verb = $verb;
151   -if ($role == 'Administration' && in_array('fournisseurs', $admin_can_manage)) $changed_verb = 'Gérer';
152   -echo_list($this->Html, 'Fournisseurs', 'fournisseurs', 'index', $changed_verb);
  189 +
  190 +echo_list($this->Html, 'types de Suivis', 'type_suivis');
153 191 /*
154 192 echo '<tr><td>';
155   -echo $this->Html->link('Gérer les Fournisseurs', [
156   - 'controller' => 'fournisseurs',
  193 +echo $this->Html->link('Gérer les types de Suivis', [
  194 + 'controller' => 'type_suivis',
157 195 'sort' => 'nom'
158 196 ]);
159 197 echo '</td></tr>';
160 198 */
161 199  
162   -// METROLOGIE MODULE ONLY
163   -if ($configuration->metrologie) {
164 200  
165   - echo_list($this->Html, 'Unités (Métrologie)', 'unites');
166   - /*
167   - echo '<tr><td>';
168   - echo $this->Html->link('Gérer les Unités (Métrologie)', [
169   - 'controller' => 'unites',
170   - 'sort' => 'nom'
171   - ]);
172   - echo '</td></tr>';
173   - */
174 201  
175   - echo_list($this->Html, 'Formules (Métrologie)', 'formules');
176   - /*
177   - echo '<tr><td>';
178   - echo $this->Html->link('Gérer les Formules (Métrologie)', [
179   - 'controller' => 'formules',
180   - 'sort' => 'nom'
181   - ]);
182   - echo '</td></tr>';
183   - */
184   -}
185 202  
186 203 ?>
187 204 </table>
... ...
tests/Fixture/MaterielsFixture.php
... ... @@ -696,7 +696,7 @@ class MaterielsFixture extends TestFixture {
696 696 //'date_acquisition' => '2018-04-19', // 2014-04-19
697 697 //'date_acquisition' => yyyy1.'-04-19', // 2014-04-19
698 698 'date_acquisition' => yyyy1mmdd1,
699   - 'prix_ht' => 25,
  699 + 'prix_ht' => 25.00,
700 700 'eotp' => 'Lorem ipsum dolor sit amet',
701 701 'numero_commande' => 'Lorem ipsum dolor sit amet',
702 702 'code_comptable' => 'Lorem ipsum dolor sit amet',
... ... @@ -744,7 +744,7 @@ class MaterielsFixture extends TestFixture {
744 744 //'date_acquisition' => '2019-04-19', // 2015-04-19
745 745 //'date_acquisition' => yyyy2.'-'.mmdd1, // 2015-04-19
746 746 'date_acquisition' => yyyy2mmdd1,
747   - 'prix_ht' => 50,
  747 + 'prix_ht' => 50.00,
748 748 'eotp' => 'Lorem ipsum dolor sit amet',
749 749 'numero_commande' => 'Lorem ipsum dolor sit amet',
750 750 'code_comptable' => 'Lorem ipsum dolor sit amet',
... ... @@ -789,7 +789,7 @@ class MaterielsFixture extends TestFixture {
789 789 //'date_acquisition' => '2020-05-11', // 2016-05-11
790 790 //'date_acquisition' => yyyy2.'-'.mmdd2,
791 791 'date_acquisition' => yyyy2mmdd2,
792   - 'prix_ht' => 1100,
  792 + 'prix_ht' => 1100.00,
793 793 'eotp' => 'Lorem ipsum dolor sit amet',
794 794 'numero_commande' => 'Lorem ipsum dolor sit amet',
795 795 'code_comptable' => 'Lorem ipsum dolor sit amet',
... ... @@ -835,7 +835,7 @@ class MaterielsFixture extends TestFixture {
835 835 //'date_acquisition' => '2020-05-11', // +4
836 836 //'date_acquisition' => yyyy2.'-'.mmdd1,
837 837 'date_acquisition' => yyyy2mmdd2,
838   - 'prix_ht' => 75,
  838 + 'prix_ht' => 75.00,
839 839 'eotp' => 'Lorem ipsum dolor sit amet',
840 840 'numero_commande' => 'Lorem ipsum dolor sit amet',
841 841 'code_comptable' => 'Lorem ipsum dolor sit amet',
... ... @@ -881,7 +881,7 @@ class MaterielsFixture extends TestFixture {
881 881 //'date_acquisition' => '2020-05-11', // + 4
882 882 //'date_acquisition' => yyyy2.'-'.mmdd2,
883 883 'date_acquisition' => yyyy2mmdd2,
884   - 'prix_ht' => 75,
  884 + 'prix_ht' => 75.00,
885 885 'eotp' => 'Lorem ipsum dolor sit amet',
886 886 'numero_commande' => 'Lorem ipsum dolor sit amet',
887 887 'code_comptable' => 'Lorem ipsum dolor sit amet',
... ... @@ -927,7 +927,7 @@ class MaterielsFixture extends TestFixture {
927 927 'status' => 'TOBEARCHIVED',
928 928 //'date_acquisition' => '2020-05-11', // +4
929 929 'date_acquisition' => yyyy2mmdd2,
930   - 'prix_ht' => 75,
  930 + 'prix_ht' => 75.00,
931 931 'eotp' => 'Lorem ipsum dolor sit amet',
932 932 'numero_commande' => 'Lorem ipsum dolor sit amet',
933 933 'code_comptable' => 'Lorem ipsum dolor sit amet',
... ... @@ -973,7 +973,7 @@ class MaterielsFixture extends TestFixture {
973 973 //'status' => 'TOBEARCHIVED',
974 974 //'date_acquisition' => '2020-05-10', //+4
975 975 'date_acquisition' => yyyy1mmdd2,
976   - 'prix_ht' => 75,
  976 + 'prix_ht' => 75.00,
977 977 'eotp' => 'Lorem ipsum dolor sit amet',
978 978 'numero_commande' => 'Lorem ipsum dolor sit amet',
979 979 'code_comptable' => 'Lorem ipsum dolor sit amet',
... ...
tests/TestCase/Controller/General.php
... ... @@ -796,7 +796,7 @@ class General extends TestCase {
796 796  
797 797 $this->d("*******************");
798 798 //$this->d(" CONTROLEUR $c->name, ACTION $action, ROLE $role_short");
799   - $this->d(" CONTROLEUR $c->getName(), ACTION $action, ROLE $role_short");
  799 + $this->d(" CONTROLEUR {$c->getName()}, ACTION $action, ROLE $role_short");
800 800 $this->d("*******************");
801 801 //$this->setUp();
802 802  
... ...
tests/TestCase/Controller/MaterielsControllerTest.php
... ... @@ -1613,7 +1613,7 @@ class MaterielsControllerTest extends General {
1613 1613 //
1614 1614  
1615 1615 // - Test champ prix_ht
1616   - $dataSearch['s_prix_ht'] = '50';
  1616 + $dataSearch['s_prix_ht'] = '50.00';
1617 1617 $this->post('/materiels/find', $dataSearch);
1618 1618 $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrect (v1).");
1619 1619 $dataSearch['s_prix_ht'] = '';
... ... @@ -1624,7 +1624,7 @@ class MaterielsControllerTest extends General {
1624 1624 $this->assertResponseContains("Résultats (1)", "Le nb de materiels pour la recherche par prix ht est incorrect (v2).");
1625 1625 $dataSearch['s_prix_ht_inf'] = '';
1626 1626 $dataSearch['s_prix_ht_sup'] = '';
1627   - $dataSearch['s_prix_ht'] = '75';
  1627 + $dataSearch['s_prix_ht'] = '75.00';
1628 1628 $this->post('/materiels/find', $dataSearch);
1629 1629 $this->assertResponseContains("Résultats (4)", "Le nb de materiels pour la recherche par prix ht est incorrect (v1).");
1630 1630 $dataSearch['s_prix_ht'] = '';
... ...