1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace XoopsModules\Oledrion; |
4
|
|
|
|
5
|
|
|
/** |
6
|
|
|
* **************************************************************************** |
7
|
|
|
* oledrion - MODULE FOR XOOPS |
8
|
|
|
* Copyright (c) Hervé Thouzard of Instant Zero (http://www.instant-zero.com) |
9
|
|
|
* |
10
|
|
|
* You may not change or alter any portion of this comment or credits |
11
|
|
|
* of supporting developers from this source code or any supporting source code |
12
|
|
|
* which is considered copyrighted (c) material of the original comment or credit authors. |
13
|
|
|
* This program is distributed in the hope that it will be useful, |
14
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
15
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
16
|
|
|
* |
17
|
|
|
* @copyright Hervé Thouzard of Instant Zero (http://www.instant-zero.com) |
18
|
|
|
* @license http://www.fsf.org/copyleft/gpl.html GNU public license |
19
|
|
|
* @author Hervé Thouzard of Instant Zero (http://www.instant-zero.com) |
20
|
|
|
* |
21
|
|
|
* Version : |
22
|
|
|
* **************************************************************************** |
23
|
|
|
*/ |
24
|
|
|
|
25
|
|
|
/** |
26
|
|
|
* Calcul du panier et de ses réductions en fonction des règles de remises |
27
|
|
|
* Cette classe ne gère pas de fichier (elle sert uniquement aux calculs) |
28
|
|
|
* |
29
|
|
|
* Détail des tableaux : |
30
|
|
|
* categoriesProductsCount => Nombre de produits par catégorie |
31
|
|
|
* [clé] = Id Catégorie, [valeur] = Nombre de produits |
32
|
|
|
* |
33
|
|
|
* categoriesProductsQuantities => Quantités de produits par catégorie |
34
|
|
|
* [clé] = Id Catégorie, [valeur] = Quantité de produits |
35
|
|
|
* |
36
|
|
|
* totalProductsQuantities => Quantité totale de tous les produits |
37
|
|
|
* |
38
|
|
|
* associatedManufacturers => Contient la liste des ID uniques de produits |
39
|
|
|
* [clé] = Id Produit, [valeur] = Id produit |
40
|
|
|
* |
41
|
|
|
* associatedVendors => Contient la liste des vendeurs de produits |
42
|
|
|
* [clé] = Id Vendeur, [valeur] = Id Vendeur |
43
|
|
|
* |
44
|
|
|
* associatedAttributesPerProduct => Contient les attributs de chaque produit |
45
|
|
|
* [clé] = Id Produit, [valeurS] = Tous les attributs du produit sous la forme d'objets de type Attributs |
46
|
|
|
* |
47
|
|
|
* associatedCategories => Contient la liste des ID de catégories |
48
|
|
|
* [clé] = Id Catégorie, [valeur] = Id Catégorie |
49
|
|
|
* |
50
|
|
|
* totalAmountBeforeDiscounts => Montant total de la commande avant les réductions |
51
|
|
|
* |
52
|
|
|
* associatedManufacturersPerProduct => Contient la liste des ID des fabricants par produit |
53
|
|
|
* [clé] = Id produit, [valeur] = array(Ids des fabricants) |
54
|
|
|
* |
55
|
|
|
* Les 3 tableaux suivants évoluent ensuite comme ceci : |
56
|
|
|
* associatedManufacturers => Tableau d'objets de type Fabricants |
57
|
|
|
* [clé] = id Fabricant [valeur] = Fabricant sous la forme d'un objet |
58
|
|
|
* |
59
|
|
|
* associatedVendors => Tableau d'ojets de type Vendeurs |
60
|
|
|
* [clé] = Id Vendeur [valeur] = Vendeur sous la forme d'un objet |
61
|
|
|
* |
62
|
|
|
* associatedCategories => Tableau d'objets de type Categories |
63
|
|
|
* [clé] = Id Catégorie [valeur] = Catéagorie sous la forme d'un objet |
64
|
|
|
*/ |
65
|
|
|
|
66
|
|
|
use XoopsModules\Oledrion; |
67
|
|
|
|
68
|
|
|
/** |
69
|
|
|
* Class Reductions |
70
|
|
|
*/ |
71
|
|
|
class Reductions |
72
|
|
|
{ |
73
|
|
|
// Ne contient que la liste des règles actives au moment du calcul |
74
|
|
|
private $allActiveRules = []; |
75
|
|
|
|
76
|
|
|
// Nombre de produits par catégorie |
77
|
|
|
private $categoriesProductsCount = []; |
78
|
|
|
|
79
|
|
|
// Quantité de produits par catégorie |
80
|
|
|
private $categoriesProductsQuantities = []; |
81
|
|
|
|
82
|
|
|
/** |
83
|
|
|
* le caddy en mémoire |
84
|
|
|
* $cart['number'] = Indice du produit |
85
|
|
|
* $cart['id'] = Identifiant du produit |
86
|
|
|
* $cart['qty'] = Quantité voulue |
87
|
|
|
* $cart['product'] = L'objet produit correspondant au panier |
88
|
|
|
*/ |
89
|
|
|
private $cart = []; |
90
|
|
|
|
91
|
|
|
/** |
92
|
|
|
* Le caddy pour le template. Consulter les détails du caddy dans la métode ComputeCart |
93
|
|
|
*/ |
94
|
|
|
private $cartForTemplate = []; |
95
|
|
|
|
96
|
|
|
/** |
97
|
|
|
* Les règles à appliquer à la fin, sur l'intégralité du panier |
98
|
|
|
*/ |
99
|
|
|
private $rulesForTheWhole = []; |
100
|
|
|
|
101
|
|
|
// Le total des quantités de produits avant les réductions |
102
|
|
|
private $totalProductsQuantities = 0; |
103
|
|
|
// Montant total de la commande avant les réductions |
104
|
|
|
private $totalAmountBeforeDiscounts = 0; |
105
|
|
|
|
106
|
|
|
// Handlers vers les tables du module |
107
|
|
|
// private $handlers; |
108
|
|
|
|
109
|
|
|
// Les fabricants associés aux produits du panier |
110
|
|
|
private $associatedManufacturers = []; |
111
|
|
|
|
112
|
|
|
// Les vendeur associés aux produits du panier |
113
|
|
|
private $associatedVendors = []; |
114
|
|
|
|
115
|
|
|
// Les catégories associées aux produits du panier |
116
|
|
|
private $associatedCategories = []; |
117
|
|
|
|
118
|
|
|
// Fabricants associés par produit du panier |
119
|
|
|
private $associatedManufacturersPerProduct = []; |
120
|
|
|
|
121
|
|
|
// Attributs par produit du panier |
122
|
|
|
private $associatedAttributesPerProduct = []; |
123
|
|
|
|
124
|
|
|
/** |
125
|
|
|
* Chargement des handlers et des règles actives |
126
|
|
|
*/ |
127
|
|
|
public function __construct() |
128
|
|
|
{ |
129
|
|
|
$this->initHandlers(); |
130
|
|
|
$this->loadAllActiveRules(); |
131
|
|
|
} |
132
|
|
|
|
133
|
|
|
/** |
134
|
|
|
* Chargement des handlers |
135
|
|
|
*/ |
136
|
|
|
private function initHandlers() |
137
|
|
|
{ |
138
|
|
|
// $this->handlers = HandlerManager::getInstance(); |
139
|
|
|
} |
140
|
|
|
|
141
|
|
|
/** |
142
|
|
|
* Chargement de toutes les règles actives de réductions (sans date définie ou avec une période correspondante à aujourd'hui) |
143
|
|
|
*/ |
144
|
|
|
public function loadAllActiveRules() |
145
|
|
|
{ |
146
|
|
|
global $xoopsDB; |
147
|
|
|
require_once dirname(__DIR__) . '/include/common.php'; |
148
|
|
|
$critere = new \CriteriaCompo(); |
149
|
|
|
$critere1 = new \CriteriaCompo(); |
150
|
|
|
$critere1->add(new \Criteria('disc_date_from', 0, '=')); |
151
|
|
|
$critere1->add(new \Criteria('disc_date_to', 0, '=')); |
152
|
|
|
$critere->add($critere1); |
153
|
|
|
|
154
|
|
|
$critere2 = new \CriteriaCompo(); |
155
|
|
|
$critere2->add(new \Criteria('disc_date_from', time(), '<=')); |
156
|
|
|
$critere2->add(new \Criteria('disc_date_to', time(), '>=')); |
157
|
|
|
$critere->add($critere2, 'OR'); |
158
|
|
|
|
159
|
|
|
// $this->allActiveRules = $this->handlers->h_oledrion_discounts->getObjects($critere); |
160
|
|
|
// $this->allActiveRules = $this->handlers->DiscountsHandler->getObjects($critere); |
161
|
|
|
$discountsHandler = new Oledrion\DiscountsHandler($xoopsDB); |
162
|
|
|
$this->allActiveRules = $discountsHandler->getObjects($critere); |
163
|
|
|
} |
164
|
|
|
|
165
|
|
|
/** |
166
|
|
|
* Calcul des quantités de produits par catégorie et du nombre de produits par catégorie |
167
|
|
|
* |
168
|
|
|
* @param Products $product |
169
|
|
|
* @param int $quantity |
170
|
|
|
*/ |
171
|
|
|
public function computePerCategories(Products $product, $quantity) |
172
|
|
|
{ |
173
|
|
|
// Nombre de produits par catégories |
174
|
|
|
if (isset($this->categoriesProductsCount[$product->product_cid])) { |
|
|
|
|
175
|
|
|
++$this->categoriesProductsCount[$product->product_cid]; |
176
|
|
|
} else { |
177
|
|
|
$this->categoriesProductsCount[$product->product_cid] = 1; |
178
|
|
|
} |
179
|
|
|
|
180
|
|
|
// Mise à jour des quantités par catégories |
181
|
|
|
if (isset($this->categoriesProductsQuantities[$product->product_cid])) { |
182
|
|
|
$this->categoriesProductsQuantities[$product->product_cid] += $quantity; |
183
|
|
|
} else { |
184
|
|
|
$this->categoriesProductsQuantities[$product->product_cid] = $quantity; |
185
|
|
|
} |
186
|
|
|
$this->totalProductsQuantities += $quantity; |
187
|
|
|
// Quantité totale de tous les produits |
188
|
|
|
} |
189
|
|
|
|
190
|
|
|
/** |
191
|
|
|
* Ajoute à un tableau interne, le fabricant associé à un produit |
192
|
|
|
* |
193
|
|
|
* @param Products $product |
194
|
|
|
*/ |
195
|
|
|
private function addAssociatedManufacturers(Products $product) |
196
|
|
|
{ |
197
|
|
|
if (!isset($this->associatedManufacturers[$product->product_id])) { |
|
|
|
|
198
|
|
|
$this->associatedManufacturers[$product->product_id] = $product->product_id; |
199
|
|
|
} |
200
|
|
|
} |
201
|
|
|
|
202
|
|
|
/** |
203
|
|
|
* Recherche des attributs associés à chaque produit |
204
|
|
|
* |
205
|
|
|
* @param Products $product |
206
|
|
|
* @param array $attributes |
207
|
|
|
* @since 2.3 |
208
|
|
|
*/ |
209
|
|
|
private function addAssociatedAttributes(Products $product, $attributes) |
210
|
|
|
{ |
211
|
|
|
if (!isset($this->associatedAttributesPerProduct[$product->product_id])) { |
|
|
|
|
212
|
|
|
$this->associatedAttributesPerProduct[$product->product_id] = $product->getProductsAttributesList($attributes); |
213
|
|
|
} |
214
|
|
|
} |
215
|
|
|
|
216
|
|
|
/** |
217
|
|
|
* Ajoute à un tableau interne, le vendeur associé à un produit |
218
|
|
|
* |
219
|
|
|
* @param Products $product |
220
|
|
|
*/ |
221
|
|
|
private function addAssociatedVendors(Products $product) |
222
|
|
|
{ |
223
|
|
|
if (!isset($this->associatedVendors[$product->product_vendor_id])) { |
|
|
|
|
224
|
|
|
$this->associatedVendors[$product->product_vendor_id] = $product->product_vendor_id; |
225
|
|
|
} |
226
|
|
|
} |
227
|
|
|
|
228
|
|
|
/** |
229
|
|
|
* Ajoute à un tableau interne, la catégorie associée à un produit |
230
|
|
|
* |
231
|
|
|
* @param Products $product |
232
|
|
|
*/ |
233
|
|
|
private function addAssociatedCategories(Products $product) |
234
|
|
|
{ |
235
|
|
|
if (!isset($this->associatedCategories[$product->product_cid])) { |
|
|
|
|
236
|
|
|
$this->associatedCategories[$product->product_cid] = $product->product_cid; |
237
|
|
|
} |
238
|
|
|
} |
239
|
|
|
|
240
|
|
|
/** |
241
|
|
|
* Charge les fabricants associés aux produits du panier |
242
|
|
|
*/ |
243
|
|
|
private function loadAssociatedManufacturers() |
244
|
|
|
{ |
245
|
|
|
if (count($this->associatedManufacturers) > 0) { |
246
|
|
|
$db = \XoopsDatabaseFactory::getDatabaseConnection(); |
247
|
|
|
$manufacturerHandler = new Oledrion\ManufacturerHandler($db); |
248
|
|
|
$productsmanuHandler = new Oledrion\ProductsmanuHandler($db); |
249
|
|
|
sort($this->associatedManufacturers); |
250
|
|
|
$productsIds = $this->associatedManufacturers; |
251
|
|
|
$this->associatedManufacturers = []; |
252
|
|
|
// au cas où cela échouerait |
253
|
|
|
$productsManufacturers = $manufacturersIds = []; |
|
|
|
|
254
|
|
|
$productsManufacturers = $productsmanuHandler->getFromProductsIds($productsIds); |
255
|
|
|
if (count($productsManufacturers) > 0) { |
256
|
|
|
foreach ($productsManufacturers as $productManufacturer) { |
257
|
|
|
if (!isset($manufacturersIds[$productManufacturer->pm_manu_id])) { |
258
|
|
|
$manufacturersIds[$productManufacturer->pm_manu_id] = $productManufacturer->pm_manu_id; |
259
|
|
|
} |
260
|
|
|
$this->associatedManufacturersPerProduct[$productManufacturer->pm_product_id][] = $productManufacturer->pm_manu_id; |
261
|
|
|
} |
262
|
|
|
if (count($manufacturersIds) > 0) { |
263
|
|
|
sort($manufacturersIds); |
264
|
|
|
$this->associatedManufacturers = $manufacturerHandler->getManufacturersFromIds($manufacturersIds); |
265
|
|
|
} |
266
|
|
|
} |
267
|
|
|
} |
268
|
|
|
} |
269
|
|
|
|
270
|
|
|
/** |
271
|
|
|
* Charge la liste des vendeurs associés aux produits |
272
|
|
|
*/ |
273
|
|
|
private function loadAssociatedVendors() |
274
|
|
|
{ |
275
|
|
|
if (count($this->associatedVendors) > 0) { |
276
|
|
|
$db = \XoopsDatabaseFactory::getDatabaseConnection(); |
277
|
|
|
$vendorsHandler = new Oledrion\VendorsHandler($db); |
278
|
|
|
|
279
|
|
|
sort($this->associatedVendors); |
280
|
|
|
$ids = $this->associatedVendors; |
281
|
|
|
$this->associatedVendors = $vendorsHandler->getVendorsFromIds($ids); |
282
|
|
|
} |
283
|
|
|
} |
284
|
|
|
|
285
|
|
|
/** |
286
|
|
|
* Charge les catégories associées aux produits du panier |
287
|
|
|
*/ |
288
|
|
|
private function loadAssociatedCategories() |
289
|
|
|
{ |
290
|
|
|
if (count($this->associatedCategories) > 0) { |
291
|
|
|
sort($this->associatedCategories); |
292
|
|
|
$ids = $this->associatedCategories; |
293
|
|
|
//mb $this->associatedCategories = $this->handlers->h_oledrion_cat->getCategoriesFromIds($ids); |
294
|
|
|
$db = \XoopsDatabaseFactory::getDatabaseConnection(); |
295
|
|
|
$categoryHandler = new Oledrion\CategoryHandler($db); |
296
|
|
|
$this->associatedCategories = $categoryHandler->getCategoriesFromIds($ids); |
297
|
|
|
} |
298
|
|
|
} |
299
|
|
|
|
300
|
|
|
/** |
301
|
|
|
* Recherche les fabricants, catégories et vendeurs associés à chaque produit |
302
|
|
|
*/ |
303
|
|
|
public function loadElementsAssociatedToProducts() |
304
|
|
|
{ |
305
|
|
|
$this->loadAssociatedManufacturers(); |
306
|
|
|
$this->loadAssociatedVendors(); |
307
|
|
|
$this->loadAssociatedCategories(); |
308
|
|
|
} |
309
|
|
|
|
310
|
|
|
/** |
311
|
|
|
* Recherche les (objets) produits associés à chaque produit du panier (et lance le calcul des quantités) |
312
|
|
|
*/ |
313
|
|
|
public function loadProductsAssociatedToCart() |
314
|
|
|
{ |
315
|
|
|
$newCart = []; |
316
|
|
|
$db = \XoopsDatabaseFactory::getDatabaseConnection(); |
317
|
|
|
$productsHandler = new Oledrion\ProductsHandler($db); |
318
|
|
|
$attributesHandler = new Oledrion\AttributesHandler($db); |
319
|
|
|
foreach ($this->cart as $cartProduct) { |
320
|
|
|
$data = []; |
321
|
|
|
$data['id'] = $cartProduct['id']; |
322
|
|
|
$data['number'] = $cartProduct['number']; |
323
|
|
|
$data['qty'] = $cartProduct['qty']; |
324
|
|
|
$data['attributes'] = $cartProduct['attributes']; |
325
|
|
|
|
326
|
|
|
$product = null; |
|
|
|
|
327
|
|
|
$product = $productsHandler->get($data['id']); |
328
|
|
|
if (!is_object($product)) { |
329
|
|
|
trigger_error(_OLEDRION_ERROR9); |
330
|
|
|
continue; |
331
|
|
|
// Pour éviter le cas de la suppression d'un produit (dans l'admin) alors qu'un client l'a toujours dans son panier (et donc en session) |
332
|
|
|
} |
333
|
|
|
$data['product'] = $product; |
334
|
|
|
// Mise à jour des calculs par catégorie |
335
|
|
|
$this->computePerCategories($product, $data['qty']); |
336
|
|
|
// Recherche des éléments associés à chaque produit |
337
|
|
|
$this->addAssociatedManufacturers($product); |
338
|
|
|
$this->addAssociatedVendors($product); |
339
|
|
|
$this->addAssociatedAttributes($product, $data['attributes']); |
340
|
|
|
$this->addAssociatedCategories($product); |
341
|
|
|
|
342
|
|
|
// Calcul du total de la commande avant réductions |
343
|
|
|
if ((float)$product->getVar('product_discount_price', 'n') > 0) { |
344
|
|
|
$ht = (float)$product->getVar('product_discount_price', 'n'); |
345
|
|
|
} else { |
346
|
|
|
$ht = (float)$product->getVar('product_price', 'n'); |
347
|
|
|
} |
348
|
|
|
// S'il y a des options, on rajoute leur montant |
349
|
|
|
if (is_array($data['attributes']) && count($data['attributes']) > 0) { |
350
|
|
|
$ht += $attributesHandler->getProductOptionsPrice($data['attributes'], $product->getVar('product_vat_id')); |
351
|
|
|
} |
352
|
|
|
|
353
|
|
|
$this->totalAmountBeforeDiscounts += ($data['qty'] * $ht); |
354
|
|
|
|
355
|
|
|
$newCart[] = $data; |
356
|
|
|
} |
357
|
|
|
$this->loadElementsAssociatedToProducts(); |
358
|
|
|
$this->cart = $newCart; |
359
|
|
|
} |
360
|
|
|
|
361
|
|
|
/** |
362
|
|
|
* Calcul du montant HT auquel on applique un pourcentage de réduction |
363
|
|
|
* |
364
|
|
|
* @param float $price Le prix auquel appliquer la réduction |
365
|
|
|
* @param int $discount Le pourcentage de réduction |
366
|
|
|
* @return float Le montant réduit |
367
|
|
|
*/ |
368
|
|
|
private function getDiscountedPrice($price, $discount) |
369
|
|
|
{ |
370
|
|
|
return ($price - ($price * ($discount / 100))); |
371
|
|
|
} |
372
|
|
|
|
373
|
|
|
/** |
374
|
|
|
* Remise à zéro des membres internes |
375
|
|
|
*/ |
376
|
|
|
private function initializePrivateData() |
377
|
|
|
{ |
378
|
|
|
$this->totalProductsQuantities = 0; |
379
|
|
|
$this->totalAmountBeforeDiscounts = 0; |
380
|
|
|
$this->rulesForTheWhole = []; |
381
|
|
|
$this->cartForTemplate = []; |
382
|
|
|
$this->associatedManufacturers = []; |
383
|
|
|
$this->associatedVendors = []; |
384
|
|
|
$this->associatedCategories = []; |
385
|
|
|
$this->associatedManufacturersPerProduct = []; |
386
|
|
|
$this->associatedAttributesPerProduct = []; |
387
|
|
|
} |
388
|
|
|
|
389
|
|
|
/** |
390
|
|
|
* Calcul de la facture en fonction du panier |
391
|
|
|
* Contenu du panier en session : |
392
|
|
|
* |
393
|
|
|
* $datas['number'] = Indice du produit dans le panier |
394
|
|
|
* $datas['id'] = Identifiant du produit dans la base |
395
|
|
|
* $datas['qty'] = Quantité voulue |
396
|
|
|
* $datas['attributes'] = Attributs produit array('attr_id' => id attribut, 'values' => array(valueId1, valueId2 ...)) |
397
|
|
|
* |
398
|
|
|
* En variable privé, le panier (dans $cart) contient la même chose + un objet 'oledrion_products' dans la clé 'product' |
399
|
|
|
* |
400
|
|
|
* @param array $cartForTemplate Contenu du caddy à passer au template (en fait la liste des produits) |
401
|
|
|
* @param bool emptyCart Indique si le panier est vide ou pas |
|
|
|
|
402
|
|
|
* @param float $shippingAmount Montant des frais de port |
403
|
|
|
* @param float $commandAmount Montant HT de la commande |
404
|
|
|
* @param float $vatAmount Montant de la TVA |
405
|
|
|
* @param string $goOn Adresse vers laquelle renvoyer le visiteur après qu'il ait ajouté un produit dans son panier (cela correspond en fait à la catégorie du dernier produit ajouté dans le panier) |
406
|
|
|
* @param float $commandAmountTTC Montant TTC de la commande |
407
|
|
|
* @param array $discountsDescription Descriptions des remises GLOBALES appliquées (et pas les remises par produit !) |
408
|
|
|
* @param int $discountsCount Le nombre TOTAL de réductions appliquées (individuellement ou sur la globalité du panier) |
409
|
|
|
* B.R. @param array $checkoutAttributes |
410
|
|
|
* TODO: Passer les paramètres sous forme d'objet |
411
|
|
|
* @param mixed $emptyCart |
412
|
|
|
* @param mixed $checkoutAttributes |
413
|
|
|
* @return bool |
414
|
|
|
*/ |
415
|
|
|
|
416
|
|
|
// B.R. Added: $checkoutAttributes |
417
|
|
|
public function computeCart( |
418
|
|
|
&$cartForTemplate, |
419
|
|
|
&$emptyCart, |
420
|
|
|
&$shippingAmount, |
421
|
|
|
&$commandAmount, |
422
|
|
|
&$vatAmount, |
423
|
|
|
&$goOn, |
424
|
|
|
&$commandAmountTTC, |
425
|
|
|
&$discountsDescription, |
426
|
|
|
&$discountsCount, |
427
|
|
|
&$checkoutAttributes)// B.R. |
428
|
|
|
|
429
|
|
|
{ |
430
|
|
|
$emptyCart = false; |
431
|
|
|
$goOn = ''; |
432
|
|
|
$vats = []; |
|
|
|
|
433
|
|
|
$cpt = 0; |
434
|
|
|
$discountsCount = 0; |
435
|
|
|
$this->cart = isset($_SESSION[Oledrion\CaddyHandler::CADDY_NAME]) ? $_SESSION[Oledrion\CaddyHandler::CADDY_NAME] : []; |
436
|
|
|
$cartCount = count($this->cart); |
437
|
|
|
if (0 == $cartCount) { |
438
|
|
|
$emptyCart = true; |
439
|
|
|
|
440
|
|
|
return true; |
441
|
|
|
} |
442
|
|
|
$db = \XoopsDatabaseFactory::getDatabaseConnection(); |
443
|
|
|
$commandsHandler = new Oledrion\CommandsHandler($db); |
444
|
|
|
$attributesHandler = new Oledrion\AttributesHandler($db); |
445
|
|
|
$categoryHandler = new Oledrion\CategoryHandler($db); |
446
|
|
|
|
447
|
|
|
// Réinitialisation des données privées |
448
|
|
|
$this->initializePrivateData(); |
449
|
|
|
// Chargement des objets produits associés aux produits du panier et calcul des quantités par catégorie |
450
|
|
|
$this->loadProductsAssociatedToCart(); |
451
|
|
|
// Chargement des TVA |
452
|
|
|
if (!isset($_POST['cmd_country']) || empty($_POST['cmd_country'])) { |
453
|
|
|
$_POST['cmd_country'] = OLEDRION_DEFAULT_COUNTRY; |
454
|
|
|
} |
455
|
|
|
$vatHandler = new Oledrion\VatHandler($db); |
456
|
|
|
$vats = $vatHandler->getCountryVats($_POST['cmd_country']); |
457
|
|
|
$oledrionCurrency = Oledrion\Currency::getInstance(); |
458
|
|
|
$caddyCount = count($this->cart); |
459
|
|
|
|
460
|
|
|
// Initialisation des totaux généraux (ht, tva et frais de port) |
461
|
|
|
$totalHT = $totalVAT = $totalShipping = 0.0; |
462
|
|
|
|
463
|
|
|
// Boucle sur tous les produits et sur chacune des règles pour calculer le prix du produit (et ses frais de port) et voir si on doit y appliquer une réduction |
464
|
|
|
foreach ($this->cart as $cartProduct) { |
465
|
|
|
if ((float)$cartProduct['product']->getVar('product_discount_price', 'n') > 0) { |
466
|
|
|
$ht = (float)$cartProduct['product']->getVar('product_discount_price', 'n'); |
467
|
|
|
} else { |
468
|
|
|
$ht = (float)$cartProduct['product']->getVar('product_price', 'n'); |
469
|
|
|
} |
470
|
|
|
// S'il y a des options, on rajoute leur montant |
471
|
|
|
$productAttributes = []; |
472
|
|
|
if (is_array($cartProduct['attributes']) && count($cartProduct['attributes']) > 0) { |
473
|
|
|
$ht += $attributesHandler->getProductOptionsPrice($cartProduct['attributes'], $cartProduct['product']->getVar('product_vat_id'), $productAttributes); |
474
|
|
|
} |
475
|
|
|
|
476
|
|
|
$discountedPrice = $ht; |
477
|
|
|
$quantity = (int)$cartProduct['qty']; |
478
|
|
|
|
479
|
|
|
if (Oledrion\Utility::getModuleOption('shipping_quantity')) { |
480
|
|
|
$discountedShipping = (float)($cartProduct['product']->getVar('product_shipping_price', 'n') * $quantity); |
481
|
|
|
} else { |
482
|
|
|
$discountedShipping = (float)$cartProduct['product']->getVar('product_shipping_price', 'n'); |
483
|
|
|
} |
484
|
|
|
$totalPrice = 0.0; |
|
|
|
|
485
|
|
|
$reduction = ''; |
486
|
|
|
|
487
|
|
|
// B.R. Start |
488
|
|
|
// If any product in cart does not skip optional checkout step, need to perform |
489
|
|
|
if (0 == $cartProduct['product']->getVar('skip_packing', 'n')) { |
490
|
|
|
$checkoutAttributes['skip_packing'] = 0; |
491
|
|
|
} |
492
|
|
|
if (0 == $cartProduct['product']->getVar('skip_location', 'n')) { |
493
|
|
|
$checkoutAttributes['skip_location'] = 0; |
494
|
|
|
} |
495
|
|
|
if (0 == $cartProduct['product']->getVar('skip_delivery', 'n')) { |
496
|
|
|
$checkoutAttributes['skip_delivery'] = 0; |
497
|
|
|
} |
498
|
|
|
// B.R. End |
499
|
|
|
|
500
|
|
|
++$cpt; |
501
|
|
|
if ($cpt == $caddyCount) { |
502
|
|
|
// On arrive sur le dernier produit |
503
|
|
|
$category = null; |
|
|
|
|
504
|
|
|
//mb $category = $this->handlers->h_oledrion_cat->get($cartProduct['product']->getVar('product_cid')); |
505
|
|
|
$category = $categoryHandler->get($cartProduct['product']->getVar('product_cid')); |
506
|
|
|
if (is_object($category)) { |
507
|
|
|
$goOn = $category->getLink(); |
|
|
|
|
508
|
|
|
} |
509
|
|
|
} |
510
|
|
|
|
511
|
|
|
// Boucle sur les règles |
512
|
|
|
foreach ($this->allActiveRules as $rule) { |
513
|
|
|
$applyRule = false; |
514
|
|
|
if (0 == $rule->disc_group || (0 != $rule->disc_group && Oledrion\Utility::isMemberOfGroup($rule->disc_group))) { |
515
|
|
|
if (0 == $rule->disc_cat_cid || (0 != $rule->disc_cat_cid && $cartProduct['product']->getVar('product_cid') == $rule->disc_cat_cid)) { |
516
|
|
|
if (0 == $rule->disc_vendor_id || (0 != $rule->disc_vendor_id && $cartProduct['product']->getVar('disc_vendor_id') == $rule->disc_vendor_id)) { |
517
|
|
|
if (0 == $rule->disc_product_id || (0 != $rule->disc_product_id && $cartProduct['product']->getVar('product_id') == $rule->disc_product_id)) { |
518
|
|
|
// Dans quel cas appliquer la réduction ? |
519
|
|
|
switch ($rule->disc_price_case) { |
520
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_CASE_ALL: |
521
|
|
|
// Dans tous les cas |
522
|
|
|
|
523
|
|
|
$applyRule = true; |
524
|
|
|
|
525
|
|
|
break; |
526
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_CASE_FIRST_BUY: |
527
|
|
|
// Si c'est le premier achat de l'utilisateur sur le site |
528
|
|
|
|
529
|
|
|
if ($commandsHandler->isFirstCommand()) { |
530
|
|
|
$applyRule = true; |
531
|
|
|
} |
532
|
|
|
|
533
|
|
|
break; |
534
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_CASE_PRODUCT_NEVER: |
535
|
|
|
// Si le produit n'a jamais été acheté par le client |
536
|
|
|
|
537
|
|
|
if (!$commandsHandler->productAlreadyBought(0, $cartProduct['product']->getVar('product_id'))) { |
538
|
|
|
$applyRule = true; |
539
|
|
|
} |
540
|
|
|
|
541
|
|
|
break; |
542
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_CASE_QTY_IS: |
543
|
|
|
// Si la quantité de produit est ... à ... |
544
|
|
|
|
545
|
|
|
switch ($rule->disc_price_case_qty_cond) { |
546
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_QTY_COND1: |
547
|
|
|
// > |
548
|
|
|
|
549
|
|
|
if ($cartProduct['qty'] > $rule->disc_price_case_qty_value) { |
550
|
|
|
$applyRule = true; |
551
|
|
|
} |
552
|
|
|
|
553
|
|
|
break; |
554
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_QTY_COND2: |
555
|
|
|
// >= |
556
|
|
|
|
557
|
|
|
if ($cartProduct['qty'] >= $rule->disc_price_case_qty_value) { |
558
|
|
|
$applyRule = true; |
559
|
|
|
} |
560
|
|
|
|
561
|
|
|
break; |
562
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_QTY_COND3: |
563
|
|
|
// < |
564
|
|
|
|
565
|
|
|
if ($cartProduct['qty'] < $rule->disc_price_case_qty_value) { |
566
|
|
|
$applyRule = true; |
567
|
|
|
} |
568
|
|
|
|
569
|
|
|
break; |
570
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_QTY_COND4: |
571
|
|
|
// <= |
572
|
|
|
|
573
|
|
|
if ($cartProduct['qty'] <= $rule->disc_price_case_qty_value) { |
574
|
|
|
$applyRule = true; |
575
|
|
|
} |
576
|
|
|
|
577
|
|
|
break; |
578
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_QTY_COND5: |
579
|
|
|
// == |
580
|
|
|
|
581
|
|
|
if ($cartProduct['qty'] == $rule->disc_price_case_qty_value) { |
582
|
|
|
$applyRule = true; |
583
|
|
|
} |
584
|
|
|
|
585
|
|
|
break; |
586
|
|
|
} |
587
|
|
|
} |
588
|
|
|
} |
589
|
|
|
} |
590
|
|
|
} |
591
|
|
|
} |
592
|
|
|
if ($applyRule) { |
593
|
|
|
// Il faut appliquer la règle |
594
|
|
|
// On calcule le nouveau prix ht du produit |
595
|
|
|
switch ($rule->disc_price_type) { |
596
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_TYPE1: |
597
|
|
|
// Montant dégressif selon les quantités |
598
|
|
|
|
599
|
|
|
if ($quantity >= $rule->disc_price_degress_l1qty1 && $quantity <= $rule->disc_price_degress_l1qty2) { |
600
|
|
|
$discountedPrice = (float)$rule->getVar('disc_price_degress_l1total', 'n'); |
601
|
|
|
} |
602
|
|
|
if ($quantity >= $rule->disc_price_degress_l2qty1 && $quantity <= $rule->disc_price_degress_l2qty2) { |
603
|
|
|
$discountedPrice = (float)$rule->getVar('disc_price_degress_l2total', 'n'); |
604
|
|
|
} |
605
|
|
|
if ($quantity >= $rule->disc_price_degress_l3qty1 && $quantity <= $rule->disc_price_degress_l3qty2) { |
606
|
|
|
$discountedPrice = (float)$rule->getVar('disc_price_degress_l3total', 'n'); |
607
|
|
|
} |
608
|
|
|
if ($quantity >= $rule->disc_price_degress_l4qty1 && $quantity <= $rule->disc_price_degress_l4qty2) { |
609
|
|
|
$discountedPrice = (float)$rule->getVar('disc_price_degress_l4total', 'n'); |
610
|
|
|
} |
611
|
|
|
if ($quantity >= $rule->disc_price_degress_l5qty1 && $quantity <= $rule->disc_price_degress_l5qty2) { |
612
|
|
|
$discountedPrice = (float)$rule->getVar('disc_price_degress_l5total', 'n'); |
613
|
|
|
} |
614
|
|
|
$reduction = $rule->disc_description; |
615
|
|
|
++$discountsCount; |
616
|
|
|
|
617
|
|
|
break; |
618
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_TYPE2: |
619
|
|
|
// D'un montant ou d'un pourcentage |
620
|
|
|
|
621
|
|
|
if (Constants::OLEDRION_DISCOUNT_PRICE_AMOUNT_ON_PRODUCT == $rule->disc_price_amount_on) { |
622
|
|
|
// Réduction sur le produit |
623
|
|
|
if (Constants::OLEDRION_DISCOUNT_PRICE_REDUCE_PERCENT == $rule->disc_price_amount_type) { |
624
|
|
|
// Réduction en pourcentage |
625
|
|
|
$discountedPrice = $this->getDiscountedPrice($discountedPrice, $rule->getVar('disc_price_amount_amount', 'n')); |
626
|
|
|
} elseif (Constants::OLEDRION_DISCOUNT_PRICE_REDUCE_MONEY == $rule->disc_price_amount_type) { |
627
|
|
|
// Réduction d'un montant en euros |
628
|
|
|
$discountedPrice -= (float)$rule->getVar('disc_price_amount_amount', 'n'); |
629
|
|
|
} |
630
|
|
|
|
631
|
|
|
// Pas de montants négatifs |
632
|
|
|
Oledrion\Utility::doNotAcceptNegativeAmounts($discountedPrice); |
633
|
|
|
$reduction = $rule->disc_description; |
634
|
|
|
++$discountsCount; |
635
|
|
|
} elseif (Constants::OLEDRION_DISCOUNT_PRICE_AMOUNT_ON_CART == $rule->disc_price_amount_on) { |
636
|
|
|
// Règle à appliquer sur le panier |
637
|
|
|
if (!isset($this->rulesForTheWhole[$rule->disc_id])) { |
638
|
|
|
$this->rulesForTheWhole[$rule->disc_id] = $rule; |
639
|
|
|
} |
640
|
|
|
} |
641
|
|
|
|
642
|
|
|
break; |
643
|
|
|
} |
644
|
|
|
|
645
|
|
|
// On passe au montant des frais de port |
646
|
|
|
switch ($rule->disc_shipping_type) { |
647
|
|
|
case Constants::OLEDRION_DISCOUNT_SHIPPING_TYPE1: |
648
|
|
|
// A payer dans leur intégralité, rien à faire |
649
|
|
|
|
650
|
|
|
break; |
651
|
|
|
case Constants::OLEDRION_DISCOUNT_SHIPPING_TYPE2: |
652
|
|
|
// Totalement gratuits si le client commande plus de X euros d'achat |
653
|
|
|
|
654
|
|
|
if ($this->totalAmountBeforeDiscounts > $rule->disc_shipping_free_morethan) { |
655
|
|
|
$discountedShipping = 0.0; |
656
|
|
|
} |
657
|
|
|
|
658
|
|
|
break; |
659
|
|
|
case Constants::OLEDRION_DISCOUNT_SHIPPING_TYPE3: |
660
|
|
|
// Frais de port réduits de X euros si la commande est > x |
661
|
|
|
|
662
|
|
|
if ($this->totalAmountBeforeDiscounts > $rule->disc_shipping_reduce_cartamount) { |
663
|
|
|
$discountedShipping -= (float)$rule->getVar('disc_shipping_reduce_amount', 'n'); |
664
|
|
|
} |
665
|
|
|
// Pas de montants négatifs |
666
|
|
|
Oledrion\Utility::doNotAcceptNegativeAmounts($discountedShipping); |
667
|
|
|
|
668
|
|
|
break; |
669
|
|
|
case Constants::OLEDRION_DISCOUNT_SHIPPING_TYPE4: |
670
|
|
|
// Frais de port dégressifs |
671
|
|
|
|
672
|
|
|
if ($quantity >= $rule->disc_shipping_degress_l1qty1 && $quantity <= $rule->disc_shipping_degress_l1qty2) { |
673
|
|
|
$discountedShipping = (float)$rule->getVar('disc_shipping_degress_l1total', 'n'); |
674
|
|
|
} |
675
|
|
|
if ($quantity >= $rule->disc_shipping_degress_l2qty1 && $quantity <= $rule->disc_shipping_degress_l2qty2) { |
676
|
|
|
$discountedShipping = (float)$rule->getVar('disc_shipping_degress_l2total', 'n'); |
677
|
|
|
} |
678
|
|
|
if ($quantity >= $rule->disc_shipping_degress_l3qty1 && $quantity <= $rule->disc_shipping_degress_l3qty2) { |
679
|
|
|
$discountedShipping = (float)$rule->getVar('disc_shipping_degress_l3total', 'n'); |
680
|
|
|
} |
681
|
|
|
if ($quantity >= $rule->disc_shipping_degress_l4qty1 && $quantity <= $rule->disc_shipping_degress_l4qty2) { |
682
|
|
|
$discountedShipping = (float)$rule->getVar('disc_shipping_degress_l4total', 'n'); |
683
|
|
|
} |
684
|
|
|
if ($quantity >= $rule->disc_shipping_degress_l5qty1 && $quantity <= $rule->disc_shipping_degress_l5qty2) { |
685
|
|
|
$discountedShipping = (float)$rule->getVar('disc_shipping_degress_l5total', 'n'); |
686
|
|
|
} |
687
|
|
|
|
688
|
|
|
break; |
689
|
|
|
} // Sélection du type de réduction sur les frais de port |
690
|
|
|
} // Il faut appliquer la règle de réduction |
691
|
|
|
}// Boucle sur les réductions |
692
|
|
|
|
693
|
|
|
// Calcul de la TVA du produit |
694
|
|
|
$vatId = $cartProduct['product']->getVar('product_vat_id'); |
695
|
|
|
if (is_array($vats) && isset($vats[$vatId])) { |
696
|
|
|
$vatRate = (float)$vats[$vatId]->getVar('vat_rate', 'n'); |
697
|
|
|
$vatAmount = Oledrion\Utility::getVAT($discountedPrice * $quantity, $vatRate); |
698
|
|
|
} else { |
699
|
|
|
$vatRate = 0.0; |
700
|
|
|
$vatAmount = 0.0; |
701
|
|
|
} |
702
|
|
|
|
703
|
|
|
// Calcul du TTC du produit ((ht * qte) + tva + frais de port) |
704
|
|
|
$totalPrice = (($discountedPrice * $quantity) + $vatAmount + $discountedShipping); |
705
|
|
|
|
706
|
|
|
// Les totaux généraux |
707
|
|
|
$totalHT += ($discountedPrice * $quantity); |
708
|
|
|
$totalVAT += $vatAmount; |
709
|
|
|
$totalShipping += $discountedShipping; |
710
|
|
|
|
711
|
|
|
// Recherche des éléments associés au produit |
712
|
|
|
$associatedVendor = $associatedCategory = $associatedManufacturers = []; |
713
|
|
|
$manufacturersJoinList = ''; |
714
|
|
|
// Le vendeur |
715
|
|
|
if (isset($this->associatedVendors[$cartProduct['product']->product_vendor_id])) { |
716
|
|
|
$associatedVendor = $this->associatedVendors[$cartProduct['product']->product_vendor_id]->toArray(); |
717
|
|
|
} |
718
|
|
|
|
719
|
|
|
// La catégorie |
720
|
|
|
if (isset($this->associatedCategories[$cartProduct['product']->product_cid])) { |
721
|
|
|
$associatedCategory = $this->associatedCategories[$cartProduct['product']->product_cid]->toArray(); |
722
|
|
|
} |
723
|
|
|
|
724
|
|
|
// Les fabricants |
725
|
|
|
$product_id = $cartProduct['product']->product_id; |
726
|
|
|
if (isset($this->associatedManufacturersPerProduct[$product_id])) { |
727
|
|
|
// Recherche de la liste des fabricants associés à ce produit |
728
|
|
|
$manufacturers = $this->associatedManufacturersPerProduct[$product_id]; |
729
|
|
|
$manufacturersList = []; |
730
|
|
|
foreach ($manufacturers as $manufacturer_id) { |
731
|
|
|
if (isset($this->associatedManufacturers[$manufacturer_id])) { |
732
|
|
|
$associatedManufacturers[] = $this->associatedManufacturers[$manufacturer_id]->toArray(); |
733
|
|
|
} |
734
|
|
|
$manufacturersList[] = $this->associatedManufacturers[$manufacturer_id]->manu_commercialname . ' ' . $this->associatedManufacturers[$manufacturer_id]->manu_name; |
735
|
|
|
} |
736
|
|
|
$manufacturersJoinList = implode(OLEDRION_STRING_TO_JOIN_MANUFACTURERS, $manufacturersList); |
737
|
|
|
} |
738
|
|
|
$productTemplate = []; |
|
|
|
|
739
|
|
|
$productTemplate = $cartProduct['product']->toArray(); |
740
|
|
|
$productTemplate['attributes'] = $productAttributes; |
741
|
|
|
$productTemplate['number'] = $cartProduct['number']; |
742
|
|
|
$productTemplate['id'] = $cartProduct['id']; |
743
|
|
|
$productTemplate['product_qty'] = $cartProduct['qty']; |
744
|
|
|
|
745
|
|
|
$productTemplate['unitBasePrice'] = $ht; |
746
|
|
|
// Prix unitaire HT SANS réduction |
747
|
|
|
$productTemplate['discountedPrice'] = $discountedPrice; |
748
|
|
|
// Prix unitaire HT AVEC réduction |
749
|
|
|
$productTemplate['discountedPriceWithQuantity'] = $discountedPrice * $quantity; |
750
|
|
|
// Prix HT AVEC réduction et la quantité |
751
|
|
|
// Les même prix mais formatés |
752
|
|
|
$productTemplate['unitBasePriceFormated'] = $oledrionCurrency->amountForDisplay($ht); |
753
|
|
|
// Prix unitaire HT SANS réduction |
754
|
|
|
$productTemplate['discountedPriceFormated'] = $oledrionCurrency->amountForDisplay($discountedPrice); |
755
|
|
|
// Prix unitaire HT AVEC réduction |
756
|
|
|
$productTemplate['discountedPriceWithQuantityFormated'] = $oledrionCurrency->amountForDisplay($discountedPrice * $quantity); |
757
|
|
|
// Prix HT AVEC réduction et la quantité |
758
|
|
|
|
759
|
|
|
// Add by voltan |
760
|
|
|
$productTemplate['discountedPriceFormatedOrg'] = $oledrionCurrency->amountForDisplay($ht - $discountedPrice); |
761
|
|
|
$productTemplate['discountedPriceOrg'] = $ht - $discountedPrice; |
762
|
|
|
|
763
|
|
|
$productTemplate['vatRate'] = $oledrionCurrency->amountInCurrency($vatRate); |
764
|
|
|
$productTemplate['vatAmount'] = $vatAmount; |
765
|
|
|
$productTemplate['normalShipping'] = $cartProduct['product']->getVar('product_shipping_price', 'n'); |
766
|
|
|
$productTemplate['discountedShipping'] = $discountedShipping; |
767
|
|
|
$productTemplate['totalPrice'] = $totalPrice; |
768
|
|
|
$productTemplate['reduction'] = $reduction; |
769
|
|
|
$productTemplate['templateProduct'] = $cartProduct['product']->toArray(); |
770
|
|
|
|
771
|
|
|
$productTemplate['vatAmountFormated'] = $oledrionCurrency->amountInCurrency($vatAmount); |
772
|
|
|
$productTemplate['normalShippingFormated'] = $oledrionCurrency->amountForDisplay($cartProduct['product']->getVar('product_shipping_price', 'n')); |
773
|
|
|
$productTemplate['discountedShippingFormated'] = $oledrionCurrency->amountForDisplay($discountedShipping); |
774
|
|
|
$productTemplate['totalPriceFormated'] = $oledrionCurrency->amountForDisplay($totalPrice); |
775
|
|
|
$productTemplate['templateCategory'] = $associatedCategory; |
776
|
|
|
$productTemplate['templateVendor'] = $associatedVendor; |
777
|
|
|
$productTemplate['templateManufacturers'] = $associatedManufacturers; |
778
|
|
|
$productTemplate['manufacturersJoinList'] = $manufacturersJoinList; |
779
|
|
|
$this->cartForTemplate[] = $productTemplate; |
780
|
|
|
}// foreach sur les produits du panier |
781
|
|
|
|
782
|
|
|
// Traitement des règles générales s'il y en a |
783
|
|
|
if (count($this->rulesForTheWhole) > 0) { |
784
|
|
|
// $discountsDescription |
785
|
|
|
foreach ($this->rulesForTheWhole as $rule) { |
786
|
|
|
switch ($rule->disc_price_type) { |
787
|
|
|
case Constants::OLEDRION_DISCOUNT_PRICE_TYPE2: |
788
|
|
|
// D'un montant ou d'un pourcentage |
789
|
|
|
|
790
|
|
|
if (Constants::OLEDRION_DISCOUNT_PRICE_AMOUNT_ON_CART == $rule->disc_price_amount_on) { |
791
|
|
|
// Règle à appliquer sur le panier |
792
|
|
|
if (Constants::OLEDRION_DISCOUNT_PRICE_REDUCE_PERCENT == $rule->disc_price_amount_type) { |
793
|
|
|
// Réduction en pourcentage |
794
|
|
|
$totalHT = $this->getDiscountedPrice($totalHT, $rule->getVar('disc_price_amount_amount')); |
795
|
|
|
$totalVAT = $this->getDiscountedPrice($totalVAT, $rule->getVar('disc_price_amount_amount')); |
796
|
|
|
} elseif (Constants::OLEDRION_DISCOUNT_PRICE_REDUCE_MONEY == $rule->disc_price_amount_type) { |
797
|
|
|
// Réduction d'un montant en euros |
798
|
|
|
$totalHT -= (float)$rule->getVar('disc_price_amount_amount'); |
799
|
|
|
$totalVAT -= (float)$rule->getVar('disc_price_amount_amount'); |
800
|
|
|
} |
801
|
|
|
|
802
|
|
|
// Pas de montants négatifs |
803
|
|
|
Oledrion\Utility::doNotAcceptNegativeAmounts($totalHT); |
804
|
|
|
Oledrion\Utility::doNotAcceptNegativeAmounts($totalVAT); |
805
|
|
|
$discountsDescription[] = $rule->disc_description; |
806
|
|
|
++$discountsCount; |
807
|
|
|
}// Règle à appliquer sur le panier |
808
|
|
|
|
809
|
|
|
break; |
810
|
|
|
} // Switch |
811
|
|
|
} // Foreach |
812
|
|
|
}// S'il y a des règles globales |
813
|
|
|
// Les totaux "renvoyés" à l'appelant |
814
|
|
|
$shippingAmount = $totalShipping; |
815
|
|
|
$commandAmount = $totalHT; |
816
|
|
|
|
817
|
|
|
$vatAmount = $totalVAT; |
818
|
|
|
$commandAmountTTC = $totalHT + $totalVAT + $totalShipping; |
819
|
|
|
|
820
|
|
|
$cartForTemplate = $this->cartForTemplate; |
821
|
|
|
|
822
|
|
|
return true; |
823
|
|
|
} |
824
|
|
|
} |
825
|
|
|
|