プログラムでクレジットメモを作成します
-
16-10-2019 - |
質問
請求された命令(テストのために現金を引き渡す)があり、州の「処理」にある注文が与えられた場合、特定のSKUと数量のクレジットメモを作成するにはどうすればよいですか(Magentoルーティングの外にあるコードで;例: /test.php
)?
私の注文にSKUのアイテムがあるとします "100-0055-BRO-S"
と量 2
, 、そして、これらの1つを返金したいと思います。私の現在のコードは次のようになります:
require 'app/Mage.php';
umask(0);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
setlocale(LC_MONETARY, 'en_US');
$order = Mage::getModel('sales/order')->loadByIncrementId(1117575);
$convertor = Mage::getModel('sales/convert_order');
$refundSku = '100-0055-BRO-S';
$refundQty = 1;
$refundOi = null;
//$refundInvoice = null;
foreach($order->getAllItems() as $oi) {
if($oi->getSku() == $refundSku) {
$refundOi = Mage::getModel('sales/order_item')->load($oi->getId());
break;
}
}
$mcm = $convertor->toCreditmemo($order);
$mcmi = $convertor->itemToCreditmemoItem($refundOi);
$mcmi->setQty($refundQty);
$mcmi->setDiscountAmount($refundOi->getDiscountAmount() * ($mcmi->getQty() / $mcmi->getOrderItem()->getQtyOrdered()));
$mcmi->setBaseDiscountAmount($refundOi->getBaseDiscountAmount() * ($mcmi->getQty() / $mcmi->getOrderItem()->getQtyOrdered()));
$mcmi->setTaxAmount($refundOi->getTaxAmount() * ($mcmi->getQty() / $mcmi->getOrderItem()->getQtyOrdered()));
$mcmi->setBaseTaxAmount($refundOi->getBaseTaxAmount() * ($mcmi->getQty() / $mcmi->getOrderItem()->getQtyOrdered()));
$mcmi->setHiddenTaxAmount($refundOi->getHiddenTaxAmount() * ($mcmi->getQty() / $mcmi->getOrderItem()->getQtyOrdered()));
$mcmi->setBaseHiddenTaxAmount($refundOi->getBaseHiddenTaxAmount() * ($mcmi->getQty() / $mcmi->getOrderItem()->getQtyOrdered()));
$mcm->addItem($mcmi);
$mcm->register();
Mage::getModel('core/resource_transaction')
->addObject($mcm)
->addObject($mcm->getOrder())
->save();
これにより、注文でクレジットメモが作成され、管理パネルに表示されます。ただし、アイテムは次のようになります。
Price Qty Subtotal Tax Amount Discount Amount Row Total
$38.00 1 $0.00 $1.62 $19.00 -$17.39
なぜサブテルが0なのかわかりません。多分それは請求書を利用しないことと関係があるかもしれませんか?しかし、私はそれについてさえ行く方法がわかりません。割引額を取得し、小計 +税額から減算しているようです。また、すべてのクレジットメモの合計(小計、調整払い戻し、調整料、税、総計)は0.00ドルです。
の値を手動で設定するために私がしている数学 $mcmi
(Mage Credit Memo Item)は大ざっぱです。私が設定した数量を考えると、マゼントは私のためにこれらを設定すると思いますが、それはそうではないようです。これらの値を設定するためのより良い方法がある場合は、私もそこで助けを感謝します。
解決
コンバーターを直接使用する代わりに、代わりに注文サービスモデルを使用する方が良いでしょう。
Mage::app('admin');
$order = Mage::getModel('sales/order')->loadByIncrementId('1117575');
$orderItem = $order->getItemsCollection()->getItemByColumnValue('sku', '100-0055-BRO-S');
$service = Mage::getModel('sales/service_order', $order);
$data = array(
'qtys' => array(
$orderItem->getId() => 1
)
);
$creditMemo = $service->prepareCreditmemo($data)->register()->save();
少なくともこれまでのところ、それはうまくいきました。
他のヒント
オンラインで返金する必要がある場合は、このように使用する必要があります。
$order = Mage::getModel('sales/order')->loadByIncrementId('1117575');
$service = Mage::getModel('sales/service_order', $order);
$creditmemo = $service->prepareInvoiceCreditmemo($invoice);
$creditmemo->setRefundRequested(true)
->setOfflineRequested(false) // request to refund online
->register();
Mage::getModel('core/resource_transaction')
->addObject($creditmemo)
->addObject($creditmemo->getOrder())
->addObject($creditmemo->getInvoice())
->save();
所属していません magento.stackexchange