Exemple #1
0
 /**
  * Calculate tax for each item
  * 
  * @param type $item
  * @param type $rate
  * @return Magestore_Customerreward_Model_Total_Quote_Tax
  */
 protected function _calcRowTaxAmount($item, $rate)
 {
     $discount = $item->getDiscountAmount();
     $baseDiscount = $item->getBaseDiscountAmount();
     $item->setDiscountAmount($discount + $item->getAffiliateplusAmount() + $item->getCustomerrewardAmount());
     $item->setBaseDiscountAmount($baseDiscount + $item->getBaseAffiliateplusAmount() + $item->getBaseCustomerrewardAmount());
     parent::_calcRowTaxAmount($item, $rate);
     $item->setDiscountAmount($discount);
     $item->setBaseDiscountAmount($baseDiscount);
     return $this;
 }
 /**
  * Calculate tax for each item
  * 
  * @param type $item
  * @param type $rate
  * @return Magestore_Customerreward_Model_Total_Quote_Tax
  */
 protected function _calcRowTaxAmount($item, $rate, &$taxGroups = null, $taxId = null, $recalculateRowTotalInclTax = false)
 {
     $discount = $item->getDiscountAmount();
     $baseDiscount = $item->getBaseDiscountAmount();
     /* hainh add this for calculating discount base on incl or excl tax price 22-04-2014 */
     if (!$this->_discountIncludeTax()) {
         $item->setDiscountAmount($discount + $item->getAffiliateplusAmount() + $item->getCustomerrewardAmount());
         $item->setBaseDiscountAmount($baseDiscount + $item->getBaseAffiliateplusAmount() + $item->getBaseCustomerrewardAmount());
     }
     parent::_calcRowTaxAmount($item, $rate, $taxGroups, $taxId, $recalculateRowTotalInclTax);
     $item->setDiscountAmount($discount);
     $item->setBaseDiscountAmount($baseDiscount);
     return $this;
 }
Exemple #3
0
 /**
  * Calculate tax for each item
  * 
  * @param type $item
  * @param type $rate
  * @return Magestore_Magestore_Model_Total_Quote_Tax
  */
 protected function _calcRowTaxAmount($item, $rate)
 {
     $discount = $item->getDiscountAmount();
     $baseDiscount = $item->getBaseDiscountAmount();
     if ($item->getIsPriceInclTax()) {
         $item->setMagestoreDiscountTax($this->_calculator->calcTaxAmount($item->getMagestoreDiscount(), $rate, false, false));
         $item->setMagestoreBaseDiscountTax($this->_calculator->calcTaxAmount($item->getMagestoreBaseDiscount(), $rate, false, false));
     }
     $item->setDiscountAmount($discount + $item->getMagestoreDiscount() + $item->getMagestoreDiscountTax());
     $item->setBaseDiscountAmount($baseDiscount + $item->getMagestoreDiscount() + $item->getMagestoreBaseDiscountTax());
     parent::_calcRowTaxAmount($item, $rate);
     $afterDiscount = (bool) Mage::getStoreConfig(Mage_Tax_Model_Config::CONFIG_XML_PATH_APPLY_AFTER_DISCOUNT, $this->_store);
     if ($item->getIsPriceInclTax() && $afterDiscount) {
         foreach ($this->_hiddenTaxes as $key => $taxInfoItem) {
             if (isset($taxInfoItem['item']) && $item->getId() == $taxInfoItem['item']->getId() && $taxInfoItem['value'] >= $item->getMagestoreDiscountTax() && $item->getMagestoreDiscountTax() > 0) {
                 $this->_hiddenTaxes[$key]['value'] = $taxInfoItem['value'] - $item->getMagestoreDiscountTax();
                 $this->_hiddenTaxes[$key]['base_value'] = $taxInfoItem['base_value'] - $item->getMagestoreBaseDiscountTax();
                 break;
             }
         }
         //fix 1.4
         if ($item->getHiddenTaxAmount()) {
             $item->setHiddenTaxAmount($item->getHiddenTaxAmount() - $item->getMagestoreDiscountTax());
             $item->setBaseHiddenTaxAmount($item->getBaseHiddenTaxAmount() - $item->getMagestoreBaseDiscountTax());
         }
     }
     $item->setDiscountAmount($discount);
     $item->setBaseDiscountAmount($baseDiscount);
     return $this;
 }
Exemple #4
0
 /**
  * Builds request for DeliverInvoice for Invoice and PaymentPlan payment.
  * Calls from Magento Capture
  *
  * @param type $invoice
  * @param type $auth
  * @param type $sveaOrderId
  * @return type
  */
 public function getDeliverInvoiceRequest($invoice, $auth, $sveaOrderId)
 {
     $conf = new SveaMageConfigProvider($auth);
     $sveaObject = WebPay::deliverOrder($conf);
     $order = $invoice->getOrder();
     $countryCode = $order->getBillingAddress()->getCountryId();
     $storeId = $order->getStoreId();
     $store = Mage::app()->getStore($storeId);
     $taxCalculationModel = Mage::getSingleton('tax/calculation');
     $taxConfig = Mage::getSingleton('tax/config');
     // Add invoiced items
     foreach ($invoice->getAllItems() as $item) {
         $orderItem = $item->getOrderItem();
         if ($orderItem->getProductType() === Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
             continue;
         }
         // Default to the item price
         $name = $item->getName();
         $price = $orderItem->getPrice();
         $priceInclTax = $orderItem->getPriceInclTax();
         $taxPercent = $orderItem->getTaxPercent();
         if (!(int) $taxPercent) {
             $taxPercent = false;
         }
         $parentItem = $orderItem->getParentItem();
         if ($parentItem) {
             switch ($parentItem->getProductType()) {
                 case Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE:
                     $price = $parentItem->getPrice();
                     $priceInclTax = $parentItem->getPriceInclTax();
                     $taxPercent = $parentItem->getTaxPercent();
                     break;
                 case Mage_Catalog_Model_Product_Type::TYPE_BUNDLE:
                     $taxPercent = $priceInclTax = $price = 0;
                     $name = '- ' . $name;
                     break;
             }
         }
         if ($taxPercent === false) {
             // If it's a bundle item we have to calculate the tax from
             // the including/excluding tax values
             $taxPercent = round(100 * ($priceInclTax / $price - 1));
         }
         switch (get_class($item)) {
             case 'Mage_Sales_Model_Quote_Item':
             case 'Mage_Sales_Model_Order_Invoice_Item':
             case 'Mage_Sales_Model_Order_Creditmemo_Item':
                 $qty = $item->getQty();
                 break;
             default:
                 $qty = $item->getQtyOrdered();
                 break;
         }
         $orderRow = WebPayItem::orderRow()->setArticleNumber($item->getSku())->setQuantity((int) $qty)->setName($name)->setUnit(Mage::helper('svea_webpay')->__('unit'))->setVatPercent((int) $taxPercent);
         if ($taxConfig->priceIncludesTax($storeId)) {
             $orderRow->setAmountIncVat((double) $priceInclTax);
         } else {
             $orderRow->setAmountExVat((double) $price);
         }
         $sveaObject->addOrderRow($orderRow);
     }
     $request = $taxCalculationModel->getRateRequest($order->getShippingAddress(), $order->getBillingAddress(), null, $store);
     // Add shipping fee
     if ($invoice->getShippingAmount() > 0) {
         $shippingFee = WebPayItem::shippingFee()->setUnit(Mage::helper('svea_webpay')->__('unit'))->setName($order->getShippingDescription());
         // We require shipping tax to be set
         $shippingTaxClass = Mage::getStoreConfig(Mage_Tax_Model_Config::CONFIG_XML_PATH_SHIPPING_TAX_CLASS, $storeId);
         $rate = $taxCalculationModel->getRate($request->setProductClassId($shippingTaxClass));
         $shippingFee->setVatPercent((int) $rate);
         if ($taxConfig->shippingPriceIncludesTax($storeId)) {
             $shippingFee->setAmountIncVat($invoice->getShippingInclTax());
         } else {
             $shippingFee->setAmountExVat($invoice->getShippingAmount());
         }
         $sveaObject->addFee($shippingFee);
     }
     // Possible discount
     $discount = abs($invoice->getDiscountAmount());
     if ($discount) {
         $discountRow = WebPayItem::fixedDiscount()->setAmountIncVat($discount)->setName(Mage::helper('svea_webpay')->__('discount'))->setUnit(Mage::helper('svea_webpay')->__('unit'));
         $sveaObject->addDiscount($discountRow);
     }
     // Gift card(s)
     if (abs($order->getGiftCardsAmount())) {
         $giftCardRow = WebPayItem::fixedDiscount()->setAmountIncVat(abs($order->getGiftCardsAmount()))->setUnit(Mage::helper('svea_webpay')->__('unit'));
         $sveaObject->addDiscount($giftCardRow);
     }
     // Invoice fee
     $paymentFee = $invoice->getSveaPaymentFeeAmount();
     $paymentFeeInclTax = $invoice->getSveaPaymentFeeInclTax();
     $invoiced = $invoice->getOrder()->getSveaPaymentFeeInvoiced();
     if ($paymentFee > 0 && $invoiced == 0) {
         $invoiceFee = WebPayItem::invoiceFee()->setUnit(Mage::helper('svea_webpay')->__('unit'))->setName(Mage::helper('svea_webpay')->__('invoice_fee'))->setAmountExVat($paymentFee)->setAmountIncVat($paymentFeeInclTax);
         $sveaObject->addFee($invoiceFee);
         $invoice->getOrder()->setSveaPaymentFeeInvoiced($paymentFeeInclTax);
     }
     $sveaObject = $sveaObject->setCountryCode($countryCode)->setOrderId($sveaOrderId)->setInvoiceDistributionType(Mage::getStoreConfig("payment/svea_invoice/deliver_method"));
     $invoice->setData('svea_deliver_request', $sveaObject);
     return $invoice->getData('svea_deliver_request');
 }
Exemple #5
0
 /**
  * Add values and rows to Svea CreateOrder object
  *
  * Configurable products:
  *  Calculate prices using the parent price, to take price variations into concern
  *
  * Simple products:
  *  Just use their prices as is
  *
  * Bundle products:
  *  The main parent product has the price, but the associated products
  *  need to be transferred on separate 0 amount lines so the invoice is
  *  verbose enough
  *
  * Grouped products:
  *  These are treated the same way as simple products
  *
  * @param type $order
  * @param type $additionalInfo
  * @return type Svea CreateOrder object
  */
 public function getSveaPaymentObject($order, $additionalInfo = null)
 {
     //Get Request and billing addres
     $svea = $order->getData('svea_payment_request');
     $billingAddress = $order->getBillingAddress();
     $storeId = $order->getStoreId();
     $store = Mage::app()->getStore($storeId);
     $taxCalculationModel = Mage::getSingleton('tax/calculation');
     $taxConfig = Mage::getSingleton('tax/config');
     // Build the rows for request
     foreach ($order->getAllItems() as $item) {
         if ($item->getProductType() === Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
             continue;
         }
         // Default to the item price
         $name = $item->getName();
         $price = $item->getPrice();
         $priceInclTax = $item->getPriceInclTax();
         $taxPercent = $item->getTaxPercent();
         if (!(int) $taxPercent) {
             $taxPercent = false;
         }
         $parentItem = $item->getParentItem();
         if ($parentItem) {
             switch ($parentItem->getProductType()) {
                 case Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE:
                     $priceInclTax = $parentItem->getPriceInclTax();
                     $taxPercent = $parentItem->getTaxPercent();
                     break;
                 case Mage_Catalog_Model_Product_Type::TYPE_BUNDLE:
                     $taxPercent = $priceInclTax = $price = 0;
                     $name = '- ' . $name;
                     break;
             }
         }
         if ($taxPercent === false) {
             if ((double) $price === 0.0) {
                 if ((double) $priceInclTax === 0.0) {
                     $taxPercent = 0;
                 } else {
                     throw new Mage_Exception("Price is 0 but priceIncTax is not");
                 }
             } else {
                 // If it's a bundle item we have to calculate the tax from
                 // the including/excluding tax values
                 $taxPercent = round(100 * ($priceInclTax / $price - 1));
             }
         }
         $qty = get_class($item) == 'Mage_Sales_Model_Quote_Item' ? $item->getQty() : $item->getQtyOrdered();
         $orderRow = WebPayItem::orderRow()->setArticleNumber($item->getSku())->setQuantity((int) $qty)->setName($name)->setUnit(Mage::helper('svea_webpay')->__('unit'))->setVatPercent((int) $taxPercent)->setAmountIncVat((double) $priceInclTax);
         $svea->addOrderRow($orderRow);
     }
     $request = $taxCalculationModel->getRateRequest($order->getShippingAddress(), $order->getBillingAddress(), null, $store);
     // Shipping
     if ($order->getShippingAmount() > 0) {
         $shippingFee = WebPayItem::shippingFee()->setUnit(Mage::helper('svea_webpay')->__('unit'))->setName($order->getShippingDescription());
         // We require shipping tax to be set
         $shippingTaxClass = Mage::getStoreConfig(Mage_Tax_Model_Config::CONFIG_XML_PATH_SHIPPING_TAX_CLASS, $storeId);
         $rate = $taxCalculationModel->getRate($request->setProductClassId($shippingTaxClass));
         $shippingFee->setVatPercent((int) $rate);
         $shippingFee->setAmountIncVat($order->getShippingInclTax());
         $svea->addFee($shippingFee);
     }
     // Discount
     $discount = abs($order->getDiscountAmount());
     if ($discount > 0) {
         $discountRow = WebPayItem::fixedDiscount()->setName(Mage::helper('svea_webpay')->__('discount'))->setUnit(Mage::helper('svea_webpay')->__('unit'))->setAmountIncVat($discount);
         $svea->addDiscount($discountRow);
     }
     // Gift cards
     if (abs($order->getGiftCardsAmount()) > 0) {
         $giftCardRow = WebPayItem::fixedDiscount()->setUnit(Mage::helper('svea_webpay')->__('unit'))->setAmountIncVat(abs($order->getGiftCardsAmount()));
         $svea->addDiscount($giftCardRow);
     }
     // Invoice fee
     $paymentFeeInclTax = $order->getSveaPaymentFeeInclTax();
     if ($paymentFeeInclTax > 0) {
         $paymentFeeTaxClass = $this->getConfigData('handling_fee_tax_class');
         $rate = $taxCalculationModel->getRate($request->setProductClassId($paymentFeeTaxClass));
         $invoiceFeeRow = WebPayItem::invoiceFee()->setUnit(Mage::helper('svea_webpay')->__('unit'))->setName(Mage::helper('svea_webpay')->__('invoice_fee'))->setVatPercent((int) $rate);
         $invoiceFeeRow->setAmountIncVat((double) $paymentFeeInclTax);
         $svea->addFee($invoiceFeeRow);
     }
     $svea->setCountryCode($billingAddress->getCountryId())->setClientOrderNumber($order->getIncrementId())->setOrderDate(date("Y-m-d"))->setCurrency($order->getOrderCurrencyCode());
     return $svea;
 }