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; }
/** * @param \AvaTax\GetTaxRequest $soapRequest * * @return array */ public function normalizeGetTaxRequest(AvaTax\GetTaxRequest $soapRequest) { $isDevMode = Mage::getIsDeveloperMode(); if ($isDevMode) { Mage::setIsDeveloperMode(false); } $soapRequest->prepare(); $request = array('CompanyCode' => $soapRequest->getCompanyCode(), 'DocType' => $soapRequest->getDocType(), 'DocCode' => $soapRequest->getDocCode(), 'Commit' => $soapRequest->getCommit(), 'DetailLevel' => $soapRequest->getDetailLevel(), 'DocDate' => $soapRequest->getDocDate(), 'CustomerCode' => $soapRequest->getCustomerCode(), 'CurrencyCode' => $soapRequest->getCurrencyCode(), 'Discount' => $soapRequest->getDiscount(), 'BusinessIdentificationNo' => $soapRequest->getBusinessIdentificationNo(), 'Addresses' => array(), 'Lines' => array(), 'TaxOverride' => array()); foreach ($soapRequest->getAddresses() as $soapAddress) { /** @var AvaTax\Address $soapAddress */ $request['Addresses'][] = array('AddressCode' => $soapAddress->getAddressCode(), 'Line1' => $soapAddress->getLine1(), 'Line2' => $soapAddress->getLine2(), 'Line3' => $soapAddress->getLine3(), 'City' => $soapAddress->getCity(), 'Region' => $soapAddress->getRegion(), 'Country' => $soapAddress->getCountry(), 'PostalCode' => $soapAddress->getPostalCode()); } foreach ($soapRequest->getLines() as $soapLine) { /** @var AvaTax\Line $soapLine */ $request['Lines'][] = array("LineNo" => $soapLine->getNo(), "ItemCode" => $soapLine->getItemCode(), "Qty" => $soapLine->getQty(), "Amount" => $soapLine->getAmount(), "OriginCode" => $soapLine->getOriginAddress()->getAddressCode(), "DestinationCode" => $soapLine->getDestinationAddress()->getAddressCode(), "Description" => $soapLine->getDescription(), "TaxCode" => $soapLine->getTaxCode(), "Discounted" => $soapLine->getDiscounted(), "TaxIncluded" => $soapLine->getTaxIncluded(), "Ref1" => $soapLine->getRef1(), "Ref2" => $soapLine->getRef2()); } if ($soapRequest->getTaxOverride() instanceof AvaTax\TaxOverride) { /** @var AvaTax\TaxOverride $override */ $override = $soapRequest->getTaxOverride(); $request['TaxOverride']['TaxOverrideType'] = $override->getTaxOverrideType(); $request['TaxOverride']['TaxDate'] = $override->getTaxDate(); $request['TaxOverride']['TaxAmount'] = $override->getTaxAmount(); $request['TaxOverride']['Reason'] = $override->getReason(); } if ($isDevMode) { Mage::setIsDeveloperMode(true); } return $this->recursiveKeySort($request); }