Exemple #1
0
 /**
  * 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;
 }
Exemple #2
0
 /**
  * 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;
 }
Exemple #3
0
 /**
  * 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;
 }
Exemple #4
0
 /**
  * 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;
 }