/** * Calcul le montant des taxes * */ protected function computeTaxes() { // Taxes sur les produits au niveau de l'item (ligne de commande) // @FIXME bug et confusion entre indice d'item et indice d'order ? $cur = 0; // pour chaque ligne de commande foreach ($this->items as $item) { // Liste des taxes de la ligne $itemTaxes = $item->getTax(); $tItemsAmount = 0; // pour chaque taxe appliquée sur cette ligne foreach ($itemTaxes as $tax) { $amount = HIPAY_MAPI_UTILS::computeTax($item->getPrice(), $tax); $tax->setTaxAmount($amount); $tax->lock(); // mise a jour du montant total des taxes pour cet item (ligne de commande) $tItemsAmount += $amount; } if (!isset($this->order[$cur])) { $cur = 0; } if (!isset($this->_taxItemsAmount[$cur])) { $this->_taxItemsAmount[$cur] = 0; } // mise a jour du montant total des taxes pour cette ligne de commande // avec prise en compte du nombre de produits dans l'indice numLigneCommande // du tableau _taxItemsAmount de cette commande $this->_taxItemsAmount[$cur] += $tItemsAmount * $item->getQuantity(); $item->lock(); $cur++; } // Taxes sur frais d'envoi, assurances, coûts fixes // au niveau des commandes $cur = 0; foreach ($this->order as $order) { // Taxes sur frais d'envoi $taxArr =& $order->getShippingTax(); foreach ($taxArr as $key => $tax) { $amount = HIPAY_MAPI_UTILS::computeTax($order->getShippingAmount(), $tax); $taxArr[$key]->setTaxAmount($amount); $taxArr[$key]->lock(); if (!isset($this->_taxShippingAmount[$cur])) { $this->_taxShippingAmount[$cur] = 0; } $this->_taxShippingAmount[$cur] += $amount; } // Taxes sur assurances $taxArr =& $order->getInsuranceTax(); foreach ($taxArr as $key => $tax) { $amount = HIPAY_MAPI_UTILS::computeTax($order->getInsuranceAmount(), $tax); $taxArr[$key]->setTaxAmount($amount); $taxArr[$key]->lock(); if (!isset($this->_taxInsuranceAmount[$cur])) { $this->_taxInsuranceAmount[$cur] = 0; } $this->_taxInsuranceAmount[$cur] += $amount; } // Taxes sur coûts fixes $taxArr =& $order->getFixedCostTax(); foreach ($taxArr as $key => $tax) { $amount = HIPAY_MAPI_UTILS::computeTax($order->getFixedCostAmount(), $tax); $taxArr[$key]->setTaxAmount($amount); $taxArr[$key]->lock(); if (!isset($this->_taxFixedCostAmount[$cur])) { $this->_taxFixedCostAmount[$cur] = 0; } $this->_taxFixedCostAmount[$cur] += $amount; } $cur++; } }