public function getDuty() { $result = Dutycalculator_Charge_Model_Importdutytaxes::getAmount($this->getQuote()); if (is_array($result)) { return $result['total']; } return 0; }
public function updatePaypalTotal($evt) { $cart = $evt->getPaypalCart(); $salesEntity = $cart->getSalesEntity(); try { if (!$salesEntity->getIsVirtual()) { $items = $salesEntity->getAllVisibleItems(); if (!count($items)) { return $this; } $result = false; if ($salesEntity instanceof Mage_Sales_Model_Order) { $quote = Mage::getModel('sales/quote')->load($salesEntity->getQuoteId()); if ($quote->getId()) { $address = $quote->getShippingAddress(); } else { throw new Exception('No qoute found'); } $currencyFrom = Mage::getModel('directory/currency')->load($salesEntity->getOrderCurrencyCode()); } else { $address = $salesEntity->getShippingAddress(); $currencyFrom = Mage::getModel('directory/currency')->load($salesEntity->getQuoteCurrencyCode()); } if (Dutycalculator_Charge_Model_Importdutytaxes::canApply($address)) { $result = Dutycalculator_Charge_Model_Importdutytaxes::getAmount($salesEntity); } if ($result) { if ($result['failed_calculation']) { $salesEntity->setDeliveryDutyType(Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDU); } else { if ($salesEntity->getDeliveryDutyUserChoice()) { $salesEntity->setDeliveryDutyType($salesEntity->getDeliveryDutyUserChoice()); } else { $salesEntity->setDeliveryDutyType(Mage::getStoreConfig('dc_charge_extension/dccharge/delivery-type') !== Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDU ? Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDP : Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDU); } // $salesEntity->setDeliveryDutyType(Mage::getStoreConfig('dc_charge_extension/dccharge/delivery-type')); } /* @var $helper Dutycalculator_Charge_Helper_Data */ $helper = Mage::helper('dccharge'); $currencyTo = $salesEntity->getStore()->getBaseCurrency(); $balance = $helper->convertPrice($currencyFrom, $currencyTo, $result['total']); if ($salesEntity->getDeliveryDutyType() == Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDP) { $cart->updateTotal(Mage_Paypal_Model_Cart::TOTAL_SHIPPING, $balance); } } } } catch (Exception $ex) { $salesEntity->setDeliveryDutyType(Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDU); } return $this; }
public function collect(Mage_Sales_Model_Quote_Address $address) { $additionalServiceFeeType = Mage::getStoreConfig('dc_charge_extension/dccharge/ddp-fee-type'); $additionalServiceFeeValue = Mage::getStoreConfig('dc_charge_extension/dccharge/ddp-fee-value'); /* @var $helper Dutycalculator_Charge_Helper_Data */ $helper = Mage::helper('dccharge'); $this->_setAddress($address); if ($address->getAddressType() == Mage_Sales_Model_Quote_Address::TYPE_SHIPPING) { $quote = $address->getQuote(); $currencyFrom = Mage::getModel('directory/currency')->load($quote->getQuoteCurrencyCode()); $currencyTo = $quote->getStore()->getBaseCurrency(); $items = $quote->getAllVisibleItems(); if (!count($items)) { return $this; //this makes only address type shipping to come through } $address->setImportDutyTax(0); $address->setBaseImportDutyTax(0); $address->setImportDuty(0); $address->setBaseImportDuty(0); $address->setSalesTax(0); $address->setBaseSalesTax(0); $quote->setImportDutyTax(0); $quote->setBaseImportDutyTax(0); $quote->setImportDuty(0); $quote->setBaseImportDuty(0); $quote->setSalesTax(0); $quote->setBaseSalesTax(0); $quote->setDeliveryDutyType(Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDU); if (Mage::getStoreConfig('dc_charge_extension/dccharge/delivery-type') == Mage::helper('dccharge')->getDeliveryDutyOptionalType() && !$quote->getDeliveryDutyUserChoice()) { $quote->setDeliveryDutyUserChoice(Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDP); } $quote->setFailedCalculation(0); $quote->setDcOrderId(0); foreach ($items as $quoteItem) { $quoteItem->setImportDutyTax(0); $quoteItem->setBaseImportDutyTax(0); $quoteItem->setImportDuty(0); $quoteItem->setBaseImportDuty(0); $quoteItem->setSalesTax(0); $quoteItem->setBaseSalesTax(0); $quoteItem->setSalesTaxRate(0); $quoteItem->setImportDutyRate(0); } if (Dutycalculator_Charge_Model_Importdutytaxes::canApply($address) && !$quote->getIsVirtual()) { if ($quote->getDeliveryDutyUserChoice() === Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDP || Mage::getStoreConfig('dc_charge_extension/dccharge/delivery-type') === Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDP) { if ($additionalServiceFeeType === Dutycalculator_Charge_Helper_Data::DC_DDP_FEE_TYPE_FIXED) { $baseAdditionalServiceFee = $additionalServiceFeeValue; } else { if ($additionalServiceFeeType === Dutycalculator_Charge_Helper_Data::DC_DDP_FEE_TYPE_PERCENT) { $baseAdditionalServiceFee = round($address->getBaseSubtotal() * $additionalServiceFeeValue / 100, 2); } else { $baseAdditionalServiceFee = 0; } } $additionalServiceFee = Mage::app()->getStore()->convertPrice($baseAdditionalServiceFee); } else { $additionalServiceFee = 0; $baseAdditionalServiceFee = 0; } $shippingAmount = $address->getShippingAmount(); $baseShippingAmount = $address->getBaseShippingAmount(); $address->setShippingAmount($shippingAmount + $additionalServiceFee); $address->setBaseShippingAmount($baseShippingAmount + $baseAdditionalServiceFee); $result = Dutycalculator_Charge_Model_Importdutytaxes::getAmount($quote); if (is_array($result)) { $address->setImportDutyTax($result['total']); $address->setBaseImportDutyTax($helper->convertPrice($currencyFrom, $currencyTo, $result['total'])); $address->setImportDuty($result['duty']); $address->setBaseImportDuty($helper->convertPrice($currencyFrom, $currencyTo, $result['duty'])); $address->setSalesTax($result['sales_tax']); $address->setBaseSalesTax($helper->convertPrice($currencyFrom, $currencyTo, $result['sales_tax'])); $quote->setImportDutyTax($result['total']); $quote->setBaseImportDutyTax($helper->convertPrice($currencyFrom, $currencyTo, $result['total'])); $quote->setImportDuty($result['duty']); $quote->setBaseImportDuty($helper->convertPrice($currencyFrom, $currencyTo, $result['duty'])); $quote->setSalesTax($result['sales_tax']); $quote->setBaseSalesTax($helper->convertPrice($currencyFrom, $currencyTo, $result['sales_tax'])); if ($result['failed_calculation']) { $quote->setDeliveryDutyType(Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDU); $address->setShippingAmount($shippingAmount); $address->setBaseShippingAmount($baseShippingAmount); $additionalServiceFee = 0; $baseAdditionalServiceFee = 0; } else { //if optional - we also set to DDP if ($quote->getDeliveryDutyUserChoice()) { $quote->setDeliveryDutyType($quote->getDeliveryDutyUserChoice()); } else { $quote->setDeliveryDutyType(Mage::getStoreConfig('dc_charge_extension/dccharge/delivery-type') !== Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDU ? Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDP : Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDU); } } if ($quote->getDeliveryDutyType() === Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDP) { $shippingDescriptionPrefix = ''; if ($address->getShippingDescription()) { $shippingDescriptionPrefix = ', '; } $address->setShippingDescription($address->getShippingDescription() . $shippingDescriptionPrefix . 'incl. service fee'); } $quote->setDcServiceFee($additionalServiceFee); $quote->setBaseDcServiceFee($baseAdditionalServiceFee); $quote->setFailedCalculation($result['failed_calculation']); $quote->setDcOrderId($result['dc_order_id']); if ($quote->getDeliveryDutyType() == Dutycalculator_Charge_Helper_Data::DC_DELIVERY_TYPE_DDP) { $aggregatedItemsValues = array(); foreach ($items as $quoteItem) { if (isset($result['items'][$quoteItem->getId()])) { $quoteItem->setImportDutyTax($result['items'][$quoteItem->getId()]['total']); $quoteItem->setBaseImportDutyTax($helper->convertPrice($currencyFrom, $currencyTo, $result['items'][$quoteItem->getId()]['total'])); $quoteItem->setImportDuty($result['items'][$quoteItem->getId()]['duty']); $quoteItem->setBaseImportDuty($helper->convertPrice($currencyFrom, $currencyTo, $result['items'][$quoteItem->getId()]['duty'])); $quoteItem->setSalesTax($result['items'][$quoteItem->getId()]['sales_tax']); $quoteItem->setBaseSalesTax($helper->convertPrice($currencyFrom, $currencyTo, $result['items'][$quoteItem->getId()]['sales_tax'])); // $quoteItem->setSalesTaxRate($result['items'][$quoteItem->getId()]['sales_tax_rate']); // $quoteItem->setImportDutyRate($result['items'][$quoteItem->getId()]['duty_rate']); } else { foreach ($result['aggregated_items'] as $key => $_items) { if (in_array($quoteItem->getId(), $_items['items'])) { $aggregatedItemsValues[$key][$quoteItem->getId()] = $quoteItem->getRowTotal(); } } } } $totals = array(); $totalDuty = array(); $totalSalesTaxes = array(); $dutyRates = array(); $salesTaxRates = array(); foreach ($aggregatedItemsValues as $key => $aggregatedItemsValue) { $aggregatedTotal = $result['aggregated_items'][$key]['aggregated_total']; $aggregatedDuty = $result['aggregated_items'][$key]['aggregated_duty']; $aggregatedSalesTax = $result['aggregated_items'][$key]['aggregated_sales_tax']; $totalAggregatedItemsValue = array_sum($aggregatedItemsValue); foreach ($aggregatedItemsValue as $itemId => $value) { $totals[$itemId] = round($value / $totalAggregatedItemsValue * $aggregatedTotal, 2); $totalDuty[$itemId] = round($value / $totalAggregatedItemsValue * $aggregatedDuty, 2); $totalSalesTaxes[$itemId] = round($value / $totalAggregatedItemsValue * $aggregatedSalesTax, 2); // $dutyRates[$itemId] = $result['aggregated_items'][$key]['duty_rate']; // $salesTaxRates[$itemId] = $result['aggregated_items'][$key]['sales_tax_rate']; } } foreach ($items as $quoteItem) { if (isset($totals[$quoteItem->getId()])) { $quoteItem->setImportDutyTax($totals[$quoteItem->getId()]); $quoteItem->setBaseImportDutyTax($helper->convertPrice($currencyFrom, $currencyTo, $totals[$quoteItem->getId()])); $quoteItem->setImportDuty($totalDuty[$quoteItem->getId()]); $quoteItem->setBaseImportDuty($helper->convertPrice($currencyFrom, $currencyTo, $totalDuty[$quoteItem->getId()])); $quoteItem->setSalesTax($totalSalesTaxes[$quoteItem->getId()]); $quoteItem->setBaseSalesTax($helper->convertPrice($currencyFrom, $currencyTo, $totalSalesTaxes[$quoteItem->getId()])); // $quoteItem->setSalesTaxRate($salesTaxRates[$quoteItem->getId()]); // $quoteItem->setImportDutyRate($dutyRates[$quoteItem->getId()]); } } $address->setGrandTotal($address->getGrandTotal() + $address->getImportDutyTax() + $additionalServiceFee); $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getBaseImportDutyTax() + $baseAdditionalServiceFee); } } } } }