/** * Collect address subtotal * * @param Mage_Sales_Model_Order_Address $address * @return Mage_Sales_Model_Order_Address_Total_Subtotal */ public function collect(TinyBrick_OrderEdit_Model_Order_Address $address) { /** * Reset subtotal information */ $address->setSubtotal(0); $address->setBaseSubtotal(0); $address->setTotalQty(0); $address->setBaseTotalPriceIncTax(0); $address->setGrandTotal(0); $address->setBaseGrandTotal(0); $order = $address->getOrder(); /** * Process address items */ $items = $order->getOrderItems(); foreach ($items as $item) { if (!$this->_initItem($address, $item) || $item->getQtyOrdered() <= 0) { //$this->_removeItem($address, $item); } } /** * Initialize grand totals */ $address->setGrandTotal($address->getSubtotal()); $address->setBaseGrandTotal($address->getBaseSubtotal()); return $this; }
/** * Checks the balance the customer owes * @param TinyBrick_OrderEdit_Model_Order_Address $address * @return TinyBrick_OrderEdit_Model_Order_Address_Total_Custbalance */ public function collect(TinyBrick_OrderEdit_Model_Order_Address $address) { $address->setCustbalanceAmount(0); $address->setBaseCustbalanceAmount(0); $address->setGrandTotal($address->getGrandTotal() - $address->getCustbalanceAmount()); $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getBaseCustbalanceAmount()); return $this; }
/** * Collects the taxes * @param TinyBrick_OrderEdit_Model_Order_Address $address * @return TinyBrick_OrderEdit_Model_Order_Address_Total_Tax */ public function collect(TinyBrick_OrderEdit_Model_Order_Address $address) { $store = $address->getOrder()->getStore(); $address->getOrder()->setTaxAmount(0); $address->getOrder()->setBaseTaxAmount(0); $address->setShippingTaxAmount(0); $address->setBaseShippingTaxAmount(0); $address->setAppliedTaxes(array()); $order = $address->getOrder(); $items = $order->getAllItems(); if (!count($items)) { return $this; } $custTaxClassId = $address->getOrder()->getCustomerTaxClassId(); $taxCalculationModel = Mage::getSingleton('tax/calculation'); /** * @var $taxCalculationModel Mage_Tax_Model_Calculation */ $request = $taxCalculationModel->getRateRequest($address->getOrder()->getShippingAddress(), $address->getOrder()->getBillingAddress(), $custTaxClassId, $store); foreach ($items as $item) { /** * Child item's tax we calculate for parent */ if ($item->getParentItemId()) { continue; } /** * We calculate parent tax amount as sum of children's tax amounts */ if ($item->getHasChildren() && $item->isChildrenCalculated()) { foreach ($item->getChildren() as $child) { $discountBefore = $item->getDiscountAmount(); $baseDiscountBefore = $item->getBaseDiscountAmount(); $rate = $taxCalculationModel->getRate($request->setProductClassId($child->getProduct()->getTaxClassId())); $child->setTaxPercent($rate); $child->calcTaxAmount(); if ($discountBefore != $item->getDiscountAmount()) { $address->setDiscountAmount($address->getDiscountAmount() + ($item->getDiscountAmount() - $discountBefore)); $address->setBaseDiscountAmount($address->getBaseDiscountAmount() + ($item->getBaseDiscountAmount() - $baseDiscountBefore)); $address->setGrandTotal($address->getGrandTotal() - ($item->getDiscountAmount() - $discountBefore)); $address->setBaseGrandTotal($address->getBaseGrandTotal() - ($item->getBaseDiscountAmount() - $baseDiscountBefore)); } $this->_saveAppliedTaxes($address, $taxCalculationModel->getAppliedRates($request), $child->getTaxAmount(), $child->getBaseTaxAmount(), $rate); } $address->setTaxAmount($address->getTaxAmount() + $item->getTaxAmount()); $address->setBaseTaxAmount($address->getBaseTaxAmount() + $item->getBaseTaxAmount()); } else { $discountBefore = $item->getDiscountAmount(); $baseDiscountBefore = $item->getBaseDiscountAmount(); $product = Mage::getModel('catalog/product')->load($item->getProductId()); $rate = $taxCalculationModel->getRate($request->setProductClassId($product->getTaxClassId())); if ($item->getTaxExempt()) { $item->setTaxPercent(0); } else { $item->setTaxPercent($rate); } $item->calcTaxAmount(); if ($discountBefore != $item->getDiscountAmount()) { $address->setDiscountAmount($address->getDiscountAmount() + ($item->getDiscountAmount() - $discountBefore)); $address->setBaseDiscountAmount($address->getBaseDiscountAmount() + ($item->getBaseDiscountAmount() - $baseDiscountBefore)); $address->setGrandTotal($address->getGrandTotal() - ($item->getDiscountAmount() - $discountBefore)); $address->setBaseGrandTotal($address->getBaseGrandTotal() - ($item->getBaseDiscountAmount() - $baseDiscountBefore)); } $address->getOrder()->setTaxAmount($address->getOrder()->getTaxAmount() + $item->getTaxAmount()); $address->getOrder()->setBaseTaxAmount($address->getOrder()->getBaseTaxAmount() + $item->getBaseTaxAmount()); $applied = $taxCalculationModel->getAppliedRates($request); $this->_saveAppliedTaxes($address, $applied, $item->getTaxAmount(), $item->getBaseTaxAmount(), $rate); } } $shippingTaxClass = Mage::getStoreConfig(Mage_Tax_Model_Config::CONFIG_XML_PATH_SHIPPING_TAX_CLASS, $store); $shippingTax = 0; $shippingBaseTax = 0; if ($shippingTaxClass) { if ($rate = $taxCalculationModel->getRate($request->setProductClassId($shippingTaxClass))) { if (!Mage::helper('tax')->shippingPriceIncludesTax()) { $shippingTax = $address->getShippingAmount() * $rate / 100; $shippingBaseTax = $address->getBaseShippingAmount() * $rate / 100; } else { $shippingTax = $address->getShippingTaxAmount(); $shippingBaseTax = $address->getBaseShippingTaxAmount(); } $shippingTax = $store->roundPrice($shippingTax); $shippingBaseTax = $store->roundPrice($shippingBaseTax); $address->setTaxAmount($address->getOrder()->getTaxAmount() + $shippingTax); $address->setBaseTaxAmount($address->getBaseTaxAmount() + $shippingBaseTax); $this->_saveAppliedTaxes($address, $taxCalculationModel->getAppliedRates($request), $shippingTax, $shippingBaseTax, $rate); } } if (!Mage::helper('tax')->shippingPriceIncludesTax()) { $address->setShippingTaxAmount($shippingTax); $address->setBaseShippingTaxAmount($shippingBaseTax); } $address->setGrandTotal($address->getGrandTotal() + $address->getOrder()->getTaxAmount()); $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getOrder()->getBaseTaxAmount()); return $this; }
/** * Collect shipping subtotal * @param TinyBrick_OrderEdit_Model_Order_Address $address * @return TinyBrick_OrderEdit_Model_Order_Address_Total_Shipping */ public function collect(TinyBrick_OrderEdit_Model_Order_Address $address) { $order = $address->getOrder(); $items = $order->getAllItems(); $method = $address->getOrder()->getShippingMethod(); $freeAddress = $address->getOrder()->getFreeShipping(); $addressWeight = $address->getOrder()->getWeight(); $addressWeight = 0; $freeMethodWeight = $address->getOrder()->getFreeMethodWeight(); $addressQty = 0; foreach ($items as $item) { /** * Children weight we calculate for parent */ if ($item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isShipSeparately()) { foreach ($item->getChildren() as $child) { if ($child->getProduct()->isVirtual()) { continue; } $addressQty += $item->getQtyOrdered() * $child->getQtyOrdered(); if (!$item->getProduct()->getWeightType()) { $itemWeight = $child->getWeight(); $itemQty = $item->getQtyOrdered() * $child->getQtyOrdered(); $rowWeight = $itemWeight * $itemQty; $addressWeight += $rowWeight; if ($freeAddress || $child->getFreeShipping() === true) { $rowWeight = 0; } elseif (is_numeric($child->getFreeShipping())) { $freeQty = $child->getFreeShipping(); if ($itemQty > $freeQty) { $rowWeight = $itemWeight * ($itemQty - $freeQty); } else { $rowWeight = 0; } } $freeMethodWeight += $rowWeight; $item->setRowWeight($rowWeight); } } if ($item->getProduct()->getWeightType()) { $itemWeight = $item->getWeight(); $rowWeight = $itemWeight * $item->getQtyOrdered(); $addressWeight += $rowWeight; if ($freeAddress || $item->getFreeShipping() === true) { $rowWeight = 0; } elseif (is_numeric($item->getFreeShipping())) { $freeQty = $item->getFreeShipping(); if ($item->getQtyOrdered() > $freeQty) { $rowWeight = $itemWeight * ($item->getQtyOrdered() - $freeQty); } else { $rowWeight = 0; } } $freeMethodWeight += $rowWeight; $item->setRowWeight($rowWeight); } } else { $itemWeight = $item->getWeight(); $rowWeight = $itemWeight * $item->getQtyOrdered(); $addressWeight += $rowWeight; if ($freeAddress || $item->getFreeShipping() === true) { $rowWeight = 0; } elseif (is_numeric($item->getFreeShipping())) { $freeQty = $item->getFreeShipping(); if ($item->getQtyOrdered() > $freeQty) { $rowWeight = $itemWeight * ($item->getQtyOrdered() - $freeQty); } else { $rowWeight = 0; } } $freeMethodWeight += $rowWeight; $item->setRowWeight($rowWeight); } } if (isset($addressQty)) { $address->getOrder()->setItemQty($addressQty); } $address->getOrder()->setWeight($addressWeight); $address->getOrder()->setFreeMethodWeight($freeMethodWeight); $address->recalculateShippingRates($address->getOrder()); $method = $address->getOrder()->getShippingMethod(); if ($method) { foreach ($address->getAllShippingRates() as $rate) { if ($rate->getCode() == $method) { $amountPrice = $address->getOrder()->getStore()->convertPrice($rate->getPrice(), false); $rate->setShippingAmount($amountPrice); $address->getOrder()->setShippingDescription($rate->getCarrierTitle() . ' - ' . $rate->getMethodTitle()); break; } } } $address->setGrandTotal($address->getGrandTotal() + $address->getOrder()->getShippingAmount()); $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getOrder()->getShippingAmount()); return $this; }