public function callGetTaxForCreditmemo(Mage_Sales_Model_Order_Creditmemo $creditmemo, $commit = false) { // TODO: Implement callGetTaxForCreditmemo() method. /** @var Aoe_AvaTax_Helper_Data $helper */ $helper = Mage::helper('Aoe_AvaTax/Data'); $order = $creditmemo->getOrder(); $store = $order->getStore(); $hideDiscountAmount = Mage::getStoreConfigFlag(Mage_Tax_Model_Config::CONFIG_XML_PATH_APPLY_AFTER_DISCOUNT, $store); $request = new AvaTax\GetTaxRequest(); $request->setCompanyCode($helper->getConfig('company_code', $store)); $request->setDocType($commit ? AvaTax\DocumentType::$ReturnInvoice : AvaTax\DocumentType::$ReturnOrder); $request->setDocCode($helper->getCreditmemoDocCode($creditmemo)); $request->setReferenceCode($helper->getOrderDocCode($order)); $request->setCommit($commit); $request->setDetailLevel(AvaTax\DetailLevel::$Tax); $request->setDocDate($creditmemo->getCreatedAtDate()->toString('yyyy-MM-dd')); $request->setCustomerCode($helper->getOrderDocCode($order)); $request->setCurrencyCode($this->limit($creditmemo->getBaseCurrencyCode(), 3)); $request->setDiscount($hideDiscountAmount ? 0.0 : -$store->roundPrice($creditmemo->getBaseDiscountAmount())); $request->setOriginAddress($this->getOriginAddress($store)); $request->setDestinationAddress($this->getAddress($order->getShippingAddress())); $taxLines = array(); $itemPriceIncludesTax = Mage::getStoreConfigFlag(Mage_Tax_Model_Config::CONFIG_XML_PATH_PRICE_INCLUDES_TAX, $store); foreach ($this->getHelper()->getActionableCreditmemoItems($creditmemo) as $k => $item) { /** @var Mage_Sales_Model_Order_Creditmemo_Item $item */ $itemAmount = $store->roundPrice($itemPriceIncludesTax ? $item->getBaseRowTotalInclTax() : $item->getBaseRowTotal()); $itemAmount -= $store->roundPrice($item->getBaseDiscountAmount()); $taxLine = new AvaTax\Line(); $taxLine->setNo($k); $taxLine->setItemCode($item->getSku()); $taxLine->setQty(round($item->getQty(), 4)); $taxLine->setAmount(-$itemAmount); $taxLine->setDescription($item->getName()); $taxLine->setTaxCode($helper->getProductTaxCode($item->getOrderItem()->getProduct())); $taxLine->setDiscounted($item->getBaseDiscountAmount() > 0.0); $taxLine->setTaxIncluded($itemPriceIncludesTax); $taxLine->setRef1($helper->getCreditmemoItemRef1($item, $store)); $taxLine->setRef2($helper->getCreditmemoItemRef2($item, $store)); $taxLines[] = $taxLine; } $shippingPriceIncludesTax = Mage::getStoreConfigFlag(Mage_Tax_Model_Config::CONFIG_XML_PATH_SHIPPING_INCLUDES_TAX, $store); $shippingAmount = $store->roundPrice($shippingPriceIncludesTax ? $creditmemo->getBaseShippingInclTax() : $creditmemo->getBaseShippingAmount()); $shippingAmount -= $store->roundPrice($creditmemo->getBaseShippingDiscountAmount()); $taxLine = new AvaTax\Line(); $taxLine->setNo('SHIPPING'); $taxLine->setItemCode('SHIPPING'); $taxLine->setQty(1); $taxLine->setAmount(-$shippingAmount); $taxLine->setDescription("Shipping: " . $order->getShippingMethod()); $taxLine->setTaxCode($helper->getShippingTaxCode($store)); $taxLine->setDiscounted($creditmemo->getBaseShippingDiscountAmount() > 0.0); $taxLine->setTaxIncluded($shippingPriceIncludesTax); $taxLine->setRef1($order->getShippingMethod()); $taxLines[] = $taxLine; $request->setLines($taxLines); // If this credit memo is linked to an invoice, use the invoice date for tax calculation purposes /** @var Mage_Sales_Model_Order_Invoice $invoice */ $invoice = $creditmemo->getInvoice(); if (!$invoice instanceof Mage_Sales_Model_Order_Invoice && $creditmemo->getInvoiceId()) { $invoice = Mage::getModel('sales/order_invoice')->load($creditmemo->getInvoiceId()); } if ($invoice instanceof Mage_Sales_Model_Order_Invoice && !$invoice->isObjectNew()) { $override = new AvaTax\TaxOverride(); $override->setTaxOverrideType(AvaTax\TaxOverrideType::$TaxDate); $override->setTaxDate($invoice->getCreatedAtDate()->toString('yyyy-MM-dd')); $override->setReason('Refund'); $request->setTaxOverride($override); } Mage::dispatchEvent('aoe_avatax_soapapi_get_tax_for_creditmemo_before', array('request' => $request, 'creditmemo' => $creditmemo)); // TODO: Handle giftwrapping $result = $this->callGetTax($store, $request); if ($result['ResultCode'] === 'Error' && count($result['Messages']) === 1 && $helper->getConfigFlag('creditmemo_reattach', $store)) { $message = reset($result['Messages']); if ($message['Name'] === 'DocStatusError' && $message['Details'] === 'Expected Saved|Posted') { $request = new AvaTax\GetTaxHistoryRequest(); $request->setCompanyCode($helper->getConfig('company_code', $store)); $request->setDocType($commit ? AvaTax\DocumentType::$ReturnInvoice : AvaTax\DocumentType::$ReturnOrder); $request->setDocCode($helper->getCreditmemoDocCode($creditmemo)); $request->setDetailLevel(AvaTax\DetailLevel::$Tax); $historyResult = $this->callGetTaxHistory($store, $request); $result = $historyResult['GetTaxResult']; } } return $result; }