/** * Calculation of taxes and amounts for orders rendrering. * * @param array $memberInfos * @param bool $lines * * @return array */ public function calculateTotal($memberInfos, $lines = false) { $session = new Zend_Session_Namespace('order'); $data = array(); $oCart = new Cart(); $oItem = new ItemsObject(); $oProd = new ProductsCollection(); $subTotProv = 0; $subTotFed = 0; $subTot = 0; $total = 0; $taxProv = 0; $taxFed = 0; $tmpSum = 0; $nbPoint = 0; $cartData = $oCart->getAllIds(); $orderParams = Cible_FunctionsGeneral::getParameters(); if (!$memberInfos['noFedTax'] && $session->stateId == 11) { foreach ($cartData['cartId'] as $key => $id) { $itemId = $cartData['itemId'][$key]; $prodId = $cartData['prodId'][$key]; $itemDetails = $oItem->getAll(null, true, $itemId); $cartDetails = $oCart->getItem($id, $itemId, true); if ($itemDetails[0]['I_TaxFed']) { $subTotFed += $cartDetails['Total']; } } $addShipFee = Cible_FunctionsGeneral::compareFloats($subTotFed, '<', $orderParams['CP_ShippingFeesLimit'], 2); if ($addShipFee) { $subTotFed += $orderParams['CP_ShippingFees']; } if (isset($session->order['cod'])) { $subTotFed += $orderParams['CP_MontantFraisCOD']; } $taxFed = Cible_FunctionsGeneral::federalTax($subTotFed); } if (!$memberInfos['noProvTax']) { foreach ($cartData['cartId'] as $key => $id) { $itemId = $cartData['itemId'][$key]; $prodId = $cartData['prodId'][$key]; $itemDetails = $oItem->getAll(null, true, $itemId); $cartDetails = $oCart->getItem($id, $itemId, true); if ($itemDetails[0]['I_TaxProv']) { $subTotProv += $cartDetails['Total']; } } $addShipFee = Cible_FunctionsGeneral::compareFloats($subTotProv, '<', $orderParams['CP_ShippingFeesLimit'], 2); if ($addShipFee) { $subTotProv += $orderParams['CP_ShippingFees']; } if (isset($session->order['cod'])) { $subTotProv += $orderParams['CP_MontantFraisCOD']; } $taxProv = Cible_FunctionsGeneral::provinceTax($subTotProv); } foreach ($cartData['cartId'] as $key => $id) { $itemId = $cartData['itemId'][$key]; $prodId = $cartData['prodId'][$key]; $productData = $oProd->getDetails($prodId); $cartDetails = $oCart->getItem($id, $itemId, true); $subTot += $cartDetails['Total']; if ($oProd->getBonus()) { $nbPoint += ceil($cartDetails['Total'] * $orderParams['CP_BonusPointDollar']); } } $addShipFee = Cible_FunctionsGeneral::compareFloats($subTot, '<', $orderParams['CP_ShippingFeesLimit'], 2); if ($addShipFee) { $tmpSum += $orderParams['CP_ShippingFees']; } if (isset($session->order['cod'])) { $tmpSum += $orderParams['CP_MontantFraisCOD']; } $total = $subTot + $tmpSum + round($taxFed, 2) + round($taxProv, 2); $data = array('subTotProv' => $subTotProv, 'subTotFed' => $subTotFed, 'subTot' => $subTot, 'total' => $total, 'taxProv' => $taxProv, 'nbPoint' => $nbPoint, 'taxFed' => $taxFed); return $data; }