/** * 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; }
/** * 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); }
/** * Adds giftwrapitems 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 _addGwItemsAmount($object, $credit = false) { if ($object->getGwItemsPrice() == 0) { return false; } $lineNumber = $this->_getNewLineCode(); $storeId = $object->getStore()->getId(); $amount = $object->getGwItemsBasePrice(); $line = $this->_getNewDocumentRequestLineObject(); if ($this->_getTaxDataHelper()->priceIncludesTax($storeId)) { $amount += $object->getGwItemsBaseTaxAmount(); $line->setTaxIncluded('true'); } //@startSkipCommitHooks $amount = $credit ? -1 * $amount : $amount; //@finishSkipCommitHooks $line->setLineCode($lineNumber); $gwItemsSku = $this->_getConfigHelper()->getGwItemsSku($storeId); $line->setItemCode($gwItemsSku ? $gwItemsSku : self::DEFAULT_GW_ITEMS_SKU); $line->setItemDescription(self::DEFAULT_GW_ITEMS_DESCRIPTION); $line->setAvalaraGoodsAndServicesType($this->_getGiftTaxClassCode($storeId)); $line->setNumberOfItems(1); $line->setlineAmount($amount); $line->setDiscounted('false'); $this->_lineToItemId[$lineNumber] = $gwItemsSku; $this->_lines[$lineNumber] = $line; $this->_setLinesToRequest(); return $lineNumber; }
/** * Adds giftwrapitems 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 _addGwItemsAmount($object, $credit = false) { if ($object->getGwItemsPrice() == 0) { return false; } $lineNumber = count($this->_lines); $storeId = $object->getStore()->getId(); $amount = $object->getGwItemsBasePrice(); $line = new Line(); if ($this->_getTaxDataHelper()->priceIncludesTax($storeId)) { $amount += $object->getGwItemsBaseTaxAmount(); $line->setTaxIncluded(true); } if ($credit) { //@startSkipCommitHooks $amount *= -1; //@finishSkipCommitHooks } $line->setNo($lineNumber); $line->setItemCode($this->_getConfigHelper()->getGwItemsSku($storeId)); $line->setDescription('Gift Wrap Items Amount'); $line->setTaxCode($this->_getGiftTaxClassCode($storeId)); $line->setQty(1); $line->setAmount($amount); $line->setDiscounted(false); $this->_lineToItemId[$lineNumber] = $this->_getConfigHelper()->getGwItemsSku($storeId); $this->_lines[$lineNumber] = $line; $this->_request->setLines($this->_lines); return $lineNumber; }
/** * Adds giftwrapitems 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 _addGwItemsAmount($object, $credit = false) { if ($object->getGwItemsPrice() == 0) { return false; } $lineNumber = count($this->_lines); $storeId = Mage::app()->getStore()->getId(); $amount = $object->getGwItemsBasePrice(); if ($credit) { //@startSkipCommitHooks $amount *= -1; //@finishSkipCommitHooks } $line = new Line(); $line->setNo($lineNumber); $line->setItemCode(Mage::helper('avatax')->getGwItemsSku($storeId)); $line->setDescription('Gift Wrap Items Amount'); $line->setTaxCode(''); $line->setQty(1); $line->setAmount($amount); $line->setDiscounted(false); $this->_lineToItemId[$lineNumber] = Mage::helper('avatax')->getGwItemsSku($storeId); $this->_lines[$lineNumber] = $line; $this->_request->setLines($this->_lines); return $lineNumber; }
/** * 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; }