Bonne soire, Bonne dimanche soir,
J'ai un json qui contient des articles (il peut avoir un ou plusieurs articles et le frais de livraison (avec un ou 2 taxes) :
Avec ces données, j'ai besoin des informations suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 { "currency": "CAD", "email": "toto@gmail.com", "articles": [ { "nom_titre": "tomates", "quantite": 1, "prix": "20.00", "taxes": [ { "prix": "3.00", "pourcentage": 0.15, "nom_titre": "TxTVA" }, { "prix": "1.00", "pourcentage": 0.05, "nom_titre": "TxTTC" } ] } ], "frais_livraison": [ { "code": "LPST", "prix": "6.23", "nom_titre": "La Poste", "taxes": [ { "prix": "1.55", "pourcentage": 0.25, "nom_titre": "TxTVA" }, { "prix": "2.37", "pourcentage": 0.38, "nom_titre": "TxTTC" } ] } ], "facturation": { "prenom_nom_famille": "Toto Letiti" }, "livraison": { "prenom_nom_famille": "Toto Letiti" }, "client": { "commande_prenom_nom_famille": null, "default_address": { "prenom_nom_famille": "Toto Letiti" } } }
Trouver le prix total (prix d'article + ses taxes + frais de livraison + les taxes de frais de livraison) = 20.00 x 1 + 3.0 + 1.00 + 6.23 + 1.55 + 2.37 = 34.15
trouver les informations des articles ; de livraison et de taxes :
nom_titre --> tomates",
quantité --> 1
prix --> 20.00
nom_titre --> La Poste
quantité --> 1 (c'est toujour 1!)
prix --> 6.23
nom_titre --> TxTVA
quantité --> 1 (c'est toujour 1!)
prix --> 4.55
nom_titre --> TxTTC
quantité --> 1 (c'est toujour 1!)
prix --> 3.37
Comment je peux changer mon tableau comme on le voit ci-dessus ?
En fait, il faudrait construit un nouveau tableau avec tous ces informations.
- Je transforme mes données (json) en tableau
- Je supprime les informations sur "facturation" ; "livraison" et du "client"
- Regrouper les taxes --> taxes des articles + taxes des livraisons
Je trouve les taxes des articles comme cela :
Je me demande si cela est bon façon, à cause de ['0'] ? Si zéro change ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part $taxes_articles = $dataArray['articles']['0']['taxes'];
Même chose pour les taxes de livraison :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $taxes_livraison = $dataArray['frais_livraison']['0']['taxes'];
- Ensuite, je fusionne les 2 tables.
et voici ma table de taxes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 array(2) { ["TxTTC"]=> array(3) { ["prix"]=> float(3.37) ["pourcentage"]=> float(0.05) ["nom_titre"]=> string(5) "TxTTC" } ["TxTVA"]=> array(3) { ["prix"]=> float(4.55) ["pourcentage"]=> float(0.15) ["nom_titre"]=> string(5) "TxTVA" } }
- Je fais aussi une autre table pour la livraison sans taxes
Dans cette table, je dois enlever les taxes, mais comment ?
Je fais comme cela, mais ce n'est pas bon comme les autres puisqu'il y a un ['0']....
Code : Sélectionner tout - Visualiser dans une fenêtre à part unset($livraison_sans_taxes['0']['taxes']);
- Alors maintenant je vais ajouter les articles dans cette table
Voici ce que j'obtiens
Donc maintenant, je vais faire mon calcul pour trouver la somme totale avec les taxes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 array(4) { [0]=> array(3) { ["nom_titre"]=> string(7) "tomates" ["quantite"]=> int(1) ["prix"]=> string(5) "20.00" } [1]=> array(3) { ["code"]=> string(4) "LPST" ["prix"]=> string(4) "6.23" ["nom_titre"]=> string(8) "La Poste" } ["TxTTC"]=> array(3) { ["prix"]=> float(3.37) ["pourcentage"]=> float(0.05) ["nom_titre"]=> string(5) "TxTTC" } ["TxTVA"]=> array(3) { ["prix"]=> float(4.55) ["pourcentage"]=> float(0.15) ["nom_titre"]=> string(5) "TxTVA" } }
et je trouve la bonne valeur : 34.53
- Qaund, il y a une taxe d'un article, cela marche aussi :
J'enlève la taxe :
"prix": "1.38",
"pourcentage": 0.05,
"nom_titre": "TxTTC"
et j'obtiens 33.15 (34.53 - 1.38)
Le code est capable de calculer selon la quantité : s'il y a deux exemples d'un article, il le trouve bien.
Par contre s'il y a deux ou 3 différentes articles, il n'additionne pas leurs taxes.
Par exemple :
voici la calcule de transaction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 { "currency": "CAD", "email": "toto@gmail.com", "articles": [ { "nom_titre": "tomates", "quantite": 2, "prix": "20.00", "taxes": [ { "prix": "1.00", "pourcentage": 0.15, "nom_titre": "TxTVA" } ] }, { "nom_titre": "patates", "quantite": 3, "prix": "10.00", "taxes": [ { "prix": "1.00", "pourcentage": 0.15, "nom_titre": "TxTVA" } ] }, { "nom_titre": "aubergines", "quantite": 2, "prix": "5.00", "taxes": [ { "prix": "1.00", "pourcentage": 0.15, "nom_titre": "TxTVA" }, { "prix": "1.38", "pourcentage": 0.05, "nom_titre": "TxTTC" } ] } ], "frais_livraison": [ { "code": "LPST", "prix": "6.23", "nom_titre": "La Poste", "taxes": [ { "prix": "1.55", "pourcentage": 0.25, "nom_titre": "TxTVA" }, { "prix": "2.37", "pourcentage": 0.38, "nom_titre": "TxTTC" } ] } ], "facturation": { "prenom_nom_famille": "Toto Letiti" }, "livraison": { "prenom_nom_famille": "Toto Letiti" }, "client": { "commande_prenom_nom_famille": null, "default_address": { "prenom_nom_famille": "Toto Letiti" } } }
"tomates" => 2 x 20.00 + 1.00 = 41.00
"patates" => 3 x 10.00 + 1.00 = 31.00
"aubergines" => 2 x 5.00 + 1.00 + 1.38 = 12.38
frais_livraison" => 6.23 + 1.55 + 2.37 = 10.15
totaux => 41 + 31 + 12.38 + 10.15 = 94.53
par contre, mes codes trouvent : 91.15
donc il manque 1 + 1 + 1 + 1,38
voici tous mes codes
Donc, voici mes questions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231 <?php $dataJson = ' { "currency": "CAD", "email": "toto@gmail.com", "articles": [ { "nom_titre": "tomates", "quantite": 2, "prix": "20.00", "taxes": [ { "prix": "1.00", "pourcentage": 0.15, "nom_titre": "TxTVA" } ] }, { "nom_titre": "patates", "quantite": 3, "prix": "10.00", "taxes": [ { "prix": "1.00", "pourcentage": 0.15, "nom_titre": "TxTVA" } ] }, { "nom_titre": "aubergines", "quantite": 2, "prix": "5.00", "taxes": [ { "prix": "1.00", "pourcentage": 0.15, "nom_titre": "TxTVA" }, { "prix": "1.38", "pourcentage": 0.05, "nom_titre": "TxTTC" } ] } ], "frais_livraison": [ { "code": "LPST", "prix": "6.23", "nom_titre": "La Poste", "taxes": [ { "prix": "1.55", "pourcentage": 0.25, "nom_titre": "TxTVA" }, { "prix": "2.37", "pourcentage": 0.38, "nom_titre": "TxTTC" } ] } ], "facturation": { "prenom_nom_famille": "Toto Letiti" }, "livraison": { "prenom_nom_famille": "Toto Letiti" }, "client": { "commande_prenom_nom_famille": null, "default_address": { "prenom_nom_famille": "Toto Letiti" } } }'; //transformer mes données en json en tableau ---------------- ---------------- $dataArray = json_decode($dataJson, true);; /* //print_r($dataArray); var_dump($dataArray); exit(); */ //supprimer les informations sur "facturation" ; "livraison" et du "client" ---------------- ---------------- unset($dataArray['facturation']); unset($dataArray['livraison']); unset($dataArray['client']); /* var_dump($dataArray); exit(); */ //Regrouper les taxes --> taxes des articles + taxes des livraison ---------------- ---------------- //trouver les taxes des articles $taxes_articles = array(); $taxes_articles = $dataArray['articles']['0']['taxes']; //Ce N'est pas bon facon, à cause de ['0'] ? Si zero change ? /* var_dump($taxes_articles); exit(); */ //trouver les taxes des livraison $taxes_livraison = array(); $taxes_livraison = $dataArray['frais_livraison']['0']['taxes']; //Ce N'est pas bon facon, à cause de ['0'] ? Si zero change ? /* var_dump($taxes_livraison); exit(); */ // fusionner les tables de taxes : $taxes_articles_livraison = array_merge($taxes_articles, $taxes_livraison); /* var_dump($taxes_articles_livraison); exit(); */ //regrouper les taxes en tiant par nom dans un nouveau tableau $taxes_articles_livraison_regroupees = array(); foreach ($taxes_articles_livraison as &$valeurs_toutes_taxes) { $nom_taxes = $valeurs_toutes_taxes['nom_titre']; if (isset($taxes_articles_livraison_regroupees[$nom_taxes])) { $taxes_articles_livraison_regroupees[$nom_taxes]['prix'] += $valeurs_toutes_taxes['prix']; } else { $taxes_articles_livraison_regroupees[$nom_taxes] = $valeurs_toutes_taxes; } } // Trie un tableau suivant les clés ksort($taxes_articles_livraison_regroupees); /* var_dump($taxes_articles_livraison_regroupees); exit(); */ // table de livraison sans taxes ---------------- ---------------- $livraison_sans_taxes = array(); $livraison_sans_taxes = $dataArray['frais_livraison']; //enlever les taxes unset($livraison_sans_taxes['0']['taxes']); ////Ce N'est pas beau, à cause de ['0'] ? Si zero change ? /* var_dump($livraison_sans_taxes); exit(); */ // un nouveau table avec les articles ---------------- ---------------- $articles_livrasion_toutes_taxes = array(); $articles_livrasion_toutes_taxes = $dataArray['articles']; //enlever les taxes unset($articles_livrasion_toutes_taxes['0']['taxes']); ////Ce N'est pas beau, à cause de ['0'] ? Si zero change ? /* var_dump($articles_livrasion_toutes_taxes); exit(); */ // ajouter table de livraison $articles_livrasion_toutes_taxes = array_merge($articles_livrasion_toutes_taxes, $livraison_sans_taxes); /* var_dump($articles_livrasion_toutes_taxes); exit(); */ // ajouter table de taxes $articles_livrasion_toutes_taxes = array_merge($articles_livrasion_toutes_taxes, $taxes_articles_livraison_regroupees); /* var_dump($articles_livrasion_toutes_taxes); exit(); */ // trouver le prix total avec taxes ---------------- ---------------- // voici mes variable pour les calcules $prix_ht_par_article = 0; $prix_ht_toutes_articles = 0; //je vais l'utiliser plus tard $total_taxes = 0; //je vais l'utiliser plus tard $total_sommes = 0; foreach ($articles_livrasion_toutes_taxes as &$valeurs_tout) { $total = $valeurs_tout['prix']; //prix hors taxe par unite if (!isset($valeurs_tout['quantite'])) { $quantite = 1; // commes les taxes (par contre j'ai besoin cette information au plus tard pour mon fichier xml } else { $quantite = $valeurs_tout['quantite']; // quantite par produit } $prix_ht_par_article = $total * $quantite; // prix total hors tax par unite $total_sommes += $prix_ht_par_article; // somme : prix total hors tax } $total_sommes = number_format($total_sommes, 2); echo $total_sommes; exit();
- Comment je peux changer pour ne pas utiliser les zéros ['0'] ?
[*]Pourqoui, il oublie les taxes des articles lorsqu'il y a plusieurs articles ? Comment puis-je corriger ?
Merci
Partager