/**
  * Collect gift wrapping totals
  *
  * @param   Mage_Sales_Model_Order_Creditmemo $creditmemo
  * @return  Enterprise_GiftWrapping_Model_Total_Creditmemo_Giftwrapping
  */
 public function collect(Mage_Sales_Model_Order_Creditmemo $creditmemo)
 {
     $order = $creditmemo->getOrder();
     /**
      * Wrapping for items
      */
     $refunded = 0;
     $baseRefunded = 0;
     foreach ($creditmemo->getAllItems() as $creditmemoItem) {
         if (!$creditmemoItem->getQty() || $creditmemoItem->getQty() == 0) {
             continue;
         }
         $orderItem = $creditmemoItem->getOrderItem();
         if ($orderItem->getGwId() && $orderItem->getGwBasePriceInvoiced() && $orderItem->getGwBasePriceInvoiced() != $orderItem->getGwBasePriceRefunded()) {
             $orderItem->setGwBasePriceRefunded($orderItem->getGwBasePriceInvoiced());
             $orderItem->setGwPriceRefunded($orderItem->getGwPriceInvoiced());
             $baseRefunded += $orderItem->getGwBasePriceInvoiced();
             $refunded += $orderItem->getGwPriceInvoiced();
         }
     }
     if ($refunded > 0 || $baseRefunded > 0) {
         $order->setGwItemsBasePriceRefunded($order->getGwItemsBasePriceRefunded() + $baseRefunded);
         $order->setGwItemsPriceRefunded($order->getGwItemsPriceRefunded() + $refunded);
         $creditmemo->setGwItemsBasePrice($baseRefunded);
         $creditmemo->setGwItemsPrice($refunded);
     }
     /**
      * Wrapping for order
      */
     if ($order->getGwId() && $order->getGwBasePriceInvoiced() && $order->getGwBasePriceInvoiced() != $order->getGwBasePriceRefunded()) {
         $order->setGwBasePriceRefunded($order->getGwBasePriceInvoiced());
         $order->setGwPriceRefunded($order->getGwPriceInvoiced());
         $creditmemo->setGwBasePrice($order->getGwBasePriceInvoiced());
         $creditmemo->setGwPrice($order->getGwPriceInvoiced());
     }
     /**
      * Printed card
      */
     if ($order->getGwAddCard() && $order->getGwCardBasePriceInvoiced() && $order->getGwCardBasePriceInvoiced() != $order->getGwCardBasePriceRefunded()) {
         $order->setGwCardBasePriceRefunded($order->getGwCardBasePriceInvoiced());
         $order->setGwCardPriceRefunded($order->getGwCardPriceInvoiced());
         $creditmemo->setGwCardBasePrice($order->getGwCardBasePriceInvoiced());
         $creditmemo->setGwCardPrice($order->getGwCardPriceInvoiced());
     }
     $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $creditmemo->getGwItemsBasePrice() + $creditmemo->getGwBasePrice() + $creditmemo->getGwCardBasePrice());
     $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $creditmemo->getGwItemsPrice() + $creditmemo->getGwPrice() + $creditmemo->getGwCardPrice());
     $creditmemo->setBaseCustomerBalanceReturnMax($creditmemo->getBaseCustomerBalanceReturnMax() + $creditmemo->getGwCardBasePrice() + $creditmemo->getGwBasePrice() + $creditmemo->getGwItemsBasePrice());
     $creditmemo->setCustomerBalanceReturnMax($creditmemo->getCustomerBalanceReturnMax() + $creditmemo->getGwCardPrice() + $creditmemo->getGwPrice() + $creditmemo->getGwItemsPrice());
     return $this;
 }
Example #2
0
 /**
  * Get gift wrapping tax class id
  *
  * @param Mage_Sales_Model_Order_Invoice|Mage_Sales_Model_Order_Creditmemo|Mage_Sales_Model_Quote_Address $object
  * @return int
  */
 protected function _getGwTaxClassId($object)
 {
     if (!$object->getGwPrice() && !$object->getGwItemsPrice() && !$object->getGwPrintedCardPrice()) {
         return 0;
     }
     if ($object instanceof Mage_Sales_Model_Quote_Address) {
         $storeId = $object->getQuote()->getStoreId();
     } else {
         $storeId = $object->getStoreId();
     }
     return $this->_getWrappingTaxClass($storeId);
 }
Example #3
0
 /**
  * Adds giftwraporder cost to request as item
  *
  * @param Mage_Sales_Model_Order_Invoice|Mage_Sales_Model_Order_Creditmemo $object
  * @param bool $credit
  * @return int|bool
  */
 protected function _addGwOrderAmount($object, $credit = false)
 {
     if ($object->getGwPrice() == 0) {
         return false;
     }
     $lineNumber = $this->_getNewLineCode();
     $storeId = $object->getStore()->getId();
     $amount = $object->getGwBasePrice();
     $line = $this->_getNewDocumentRequestLineObject();
     if ($this->_getTaxDataHelper()->priceIncludesTax($storeId)) {
         $amount += $object->getGwBaseTaxAmount();
         $line->setTaxIncluded('true');
     }
     //@startSkipCommitHooks
     $amount = $credit ? -1 * $amount : $amount;
     //@finishSkipCommitHooks
     $line->setLineCode($lineNumber);
     $gwOrderSku = $this->_getConfigHelper()->getGwOrderSku($storeId);
     $line->setItemCode($gwOrderSku ? $gwOrderSku : self::DEFAULT_GW_ORDER_SKU);
     $line->setItemDescription(self::DEFAULT_GW_ORDER_DESCRIPTION);
     $line->setAvalaraGoodsAndServicesType($this->_getGiftTaxClassCode($storeId));
     $line->setNumberOfItems(1);
     $line->setlineAmount($amount);
     $line->setDiscounted('false');
     $this->_lineToItemId[$lineNumber] = $gwOrderSku;
     $this->_lines[$lineNumber] = $line;
     $this->_setLinesToRequest();
     return $lineNumber;
 }
Example #4
0
 /**
  * Adds giftwraporder cost to request as item
  *
  * @param Mage_Sales_Model_Order_Invoice|Mage_Sales_Model_Order_Creditmemo $object
  * @param bool $credit
  * @return int|bool
  */
 protected function _addGwOrderAmount($object, $credit = false)
 {
     if ($object->getGwPrice() == 0) {
         return false;
     }
     $lineNumber = count($this->_lines);
     $storeId = $object->getStore()->getId();
     $amount = $object->getGwBasePrice();
     $line = new Line();
     if ($this->_getTaxDataHelper()->priceIncludesTax($storeId)) {
         $amount += $object->getGwBaseTaxAmount();
         $line->setTaxIncluded(true);
     }
     if ($credit) {
         //@startSkipCommitHooks
         $amount *= -1;
         //@finishSkipCommitHooks
     }
     $line->setNo($lineNumber);
     $line->setItemCode($this->_getConfigHelper()->getGwOrderSku($storeId));
     $line->setDescription('Gift Wrap Order Amount');
     $line->setTaxCode($this->_getGiftTaxClassCode($storeId));
     $line->setQty(1);
     $line->setAmount($amount);
     $line->setDiscounted(false);
     $this->_lineToItemId[$lineNumber] = $this->_getConfigHelper()->getGwOrderSku($storeId);
     $this->_lines[$lineNumber] = $line;
     $this->_request->setLines($this->_lines);
     return $lineNumber;
 }
Example #5
0
 /**
  * Adds giftwraporder cost to request as item
  *
  * @param Mage_Sales_Model_Order_Invoice|Mage_Sales_Model_Order_Creditmemo $object
  * @param bool $credit
  * @return int|bool
  */
 protected function _addGwOrderAmount($object, $credit = false)
 {
     if ($object->getGwPrice() == 0) {
         return false;
     }
     $lineNumber = count($this->_lines);
     $storeId = Mage::app()->getStore()->getId();
     $amount = $object->getGwBasePrice();
     if ($credit) {
         //@startSkipCommitHooks
         $amount *= -1;
         //@finishSkipCommitHooks
     }
     $line = new Line();
     $line->setNo($lineNumber);
     $line->setItemCode(Mage::helper('avatax')->getGwOrderSku($storeId));
     $line->setDescription('Gift Wrap Order Amount');
     $line->setTaxCode('');
     $line->setQty(1);
     $line->setAmount($amount);
     $line->setDiscounted(false);
     $this->_lineToItemId[$lineNumber] = Mage::helper('avatax')->getGwOrderSku($storeId);
     $this->_lines[$lineNumber] = $line;
     $this->_request->setLines($this->_lines);
     return $lineNumber;
 }
Example #6
0
 /**
  * Article preparations for PAYMENT_REQUEST, PAYMENT_CHANGE, CONFIRMATION_DELIVER
  *
  * @param Mage_Sales_Model_Quote|Mage_Sales_Model_Order|Mage_Sales_Model_Order_Invoice|Mage_Sales_Model_Order_Creditmemo $object
  * @return array
  */
 public function getArticles($object)
 {
     $articles = array();
     $articleDiscountAmount = 0;
     $objectItems = $object->getAllItems();
     foreach ($objectItems as $item) {
         if ($item instanceof Mage_Sales_Model_Order_Item || $item instanceof Mage_Sales_Model_Quote_Item) {
             $orderItem = $item;
         } else {
             $orderItem = Mage::getModel('sales/order_item')->load($item->getOrderItemId());
         }
         $shopProduct = Mage::getModel('catalog/product')->load($orderItem->getProductId());
         if (($orderItem->getProductType() !== 'bundle' || $orderItem->getProductType() === 'bundle' && $shopProduct->getPrice() > 0) && $orderItem->getRowTotal() > 0) {
             $article = array();
             $article['articleNumber'] = $item->getSku();
             $article['articleName'] = $item->getName();
             $article['quantity'] = $object instanceof Mage_Sales_Model_Order ? $item->getQtyOrdered() : $item->getQty();
             $article['unitPriceGross'] = $item->getPriceInclTax();
             $article['taxPercent'] = $orderItem->getTaxPercent();
             $article['discountId'] = '';
             if ($item->getDiscountAmount() > 0) {
                 $discount = array();
                 $discount['articleNumber'] = 'DISCOUNT-' . $item->getSku();
                 $discount['articleName'] = 'DISCOUNT - ' . $item->getName();
                 $discount['quantity'] = $article['quantity'];
                 $discount['unitPriceGross'] = -1 * $item->getDiscountAmount() / $article['quantity'];
                 $discount['discountId'] = $item->getSku();
                 $articleDiscountAmount = $articleDiscountAmount + $item->getDiscountAmount();
             }
             $articles[] = $article;
             if ($item->getDiscountAmount() > 0) {
                 // only for sort reason
                 $articles[] = $discount;
             }
         }
     }
     if ($object->getGwPrice() > 0) {
         $article = array();
         $article['articleNumber'] = 'orderwrapping';
         $article['articleName'] = 'Wrapping Cost Order';
         $article['quantity'] = '1';
         $article['unitPriceGross'] = $object->getGwPrice();
         $article['taxPercent'] = 100 / $object->getGwPrice() * $object->getGwTaxAmount();
         $article['discountId'] = '';
         $articles[] = $article;
     }
     if ($object->getGwItemsPrice() > 0) {
         $article = array();
         $article['articleNumber'] = 'itemswrapping';
         $article['articleName'] = 'Wrapping Cost Items';
         $article['quantity'] = '1';
         $article['unitPriceGross'] = $object->getGwItemsPrice();
         $article['taxPercent'] = 100 / $object->getGwItemsPrice() * $object->getGwItemsTaxAmount();
         $article['discountId'] = '';
         $articles[] = $article;
     }
     if ($object->getGwAddCard() > 0) {
         $article = array();
         $article['articleNumber'] = 'printed_card';
         $article['articleName'] = 'Printed Card';
         $article['quantity'] = '1';
         $article['unitPriceGross'] = $object->getGwCardPrice();
         $article['taxPercent'] = 100 / $object->getGwCardPrice() * $object->getGwCardTaxAmount();
         $article['discountId'] = '';
         $articles[] = $article;
     }
     if (Mage::getEdition() == 'Enterprise') {
         $_cards = Mage::getBlockSingleton('enterprise_giftcardaccount/checkout_cart_total')->getQuoteGiftCards();
         if ($_cards) {
             foreach ($_cards as $card) {
                 $article = array();
                 $article['articleNumber'] = 'gift_card';
                 $article['articleName'] = $card['c'];
                 $article['quantity'] = '1';
                 $article['unitPriceGross'] = -round($card['ba'], 2);
                 $article['taxPercent'] = 0;
                 $article['discountId'] = '';
                 $articles[] = $article;
             }
         }
     }
     if ($object instanceof Mage_Sales_Model_Order || $object instanceof Mage_Sales_Model_Order_Invoice || $object instanceof Mage_Sales_Model_Order_Creditmemo) {
         $shippingObject = $object;
         if ($object instanceof Mage_Sales_Model_Order_Creditmemo) {
             $articles = $this->addAdjustments($object, $articles);
         }
     } else {
         $shippingObject = $object->getShippingAddress();
     }
     if ($shippingObject->getShippingAmount() > 0) {
         if ($object instanceof Mage_Sales_Model_Order_Invoice || $object instanceof Mage_Sales_Model_Order_Shipment || $object instanceof Mage_Sales_Model_Order_Creditmemo) {
             $shippingDiscountAmount = $shippingObject->getDiscountAmount() - $articleDiscountAmount;
             $shippingDescription = $object->getOrder()->getShippingDescription();
         } else {
             $shippingDiscountAmount = $shippingObject->getShippingDiscountAmount();
             $shippingDescription = $shippingObject->getShippingDescription();
         }
         $article = array();
         $article['articleNumber'] = 'SHIPPING';
         $article['articleName'] = $shippingDescription;
         $article['quantity'] = '1';
         $article['unitPriceGross'] = $shippingObject->getShippingInclTax();
         $shippingTaxPercent = 0;
         if ($shippingObject->getShippingInclTax() - $shippingObject->getShippingAmount() > 0) {
             $shippingTaxPercent = ($shippingObject->getShippingInclTax() - $shippingObject->getShippingAmount()) * 100 / $shippingObject->getShippingAmount();
         }
         $article['taxPercent'] = $shippingTaxPercent;
         $article['discountId'] = '';
         if ($shippingDiscountAmount > 0) {
             $discount = array();
             $discount['articleNumber'] = 'SHIPPINGDISCOUNT';
             $discount['articleName'] = 'Shipping - Discount';
             $discount['quantity'] = 1;
             $discount['unitPriceGross'] = -1 * $shippingObject->getShippingDiscountAmount();
             $discount['taxPercent'] = 0;
             $discount['discountId'] = 'SHIPPING';
         }
         $articles[] = $article;
         if ($shippingDiscountAmount > 0) {
             // only for sort reason
             $articles[] = $discount;
         }
     }
     if ($object->getRewardCurrencyAmount() > 0) {
         $article = array();
         $article['articleNumber'] = 'REWARDPOINTS';
         $article['articleName'] = 'Reward points';
         $article['quantity'] = '1';
         $article['unitPriceGross'] = -1 * $object->getRewardCurrencyAmount();
         $article['taxPercent'] = 0;
         $article['discountId'] = '';
         $articles[] = $article;
     }
     return $articles;
 }