Example #1
0
 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;
 }
Example #2
0
 /**
  * @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);
 }