2013-06-25 46 views
2

我正尝试以编程方式创建Magento贷项凭证,但Magento向我显示零总计的贷项凭证。如何以编程方式在magento中创建贷项凭证

$incrementID = "100000016"; 
$orderMagento = Mage::getModel('sales/order')->loadByIncrementId($incrementID); 

$convertOrder = new Mage_Sales_Model_Convert_Order(); 
$creditmemo = $convertOrder->toCreditmemo ($orderMagento); 

$items = $orderMagento->getAllItems(); 

foreach ($items as $item) { 
    $_eachCreditMemoItem = $convertOrder->itemToCreditmemoItem ($item); 
    $_eachCreditMemoItem->setQty ($item->getQtyInvoiced()); 
    $_eachCreditMemoItem->register(); 
    $creditmemo->addItem ($_eachCreditMemoItem); 
    $totalQty += $item->getQtyInvoiced(); 
} 

$creditmemo->refund(); 
$creditmemo->setTotalQty ($totalQty); 
$creditmemo->collectTotals(); 

$orderCreditMemoStatusCode = Mage_Sales_Model_Order::STATE_CLOSED; 
$orderCreditMemoStatusComment = $comment; 
$saveTransaction = Mage::getModel('core/resource_transaction')->addObject ($creditmemo)->addObject ($orderMagento)->save(); 
$orderMagento->addStatusToHistory ($orderCreditMemoStatusCode, $orderCreditMemoStatusComment, false); 
$orderMagento->save(); 

我在StackOverflow中找到了这段代码,我正在尝试使用它,但它不起作用。

为什么总数没有更新?哪个是创建它的正确方法?

Magento Credit Note Page 感谢

+0

最好的方法是遵循在贷项凭证控制器中处理这些步骤和代码。将日志行放入控制器中,查看数据的外观,然后尝试将输入格式设置为与控制器所需的类似。事实上,当你试图在代码中复制一些在控制器中完成的事情时,你应该这样做。 – Marius

回答

1

您可以轻松地支付的发票进行信用凭证。所以,首先你需要从您的订单得到所有支付的发票:

$invoices = array(); 
foreach ($order->getInvoiceCollection() as $invoice) { 
    if ($invoice->canRefund()) { 
     $invoices[] = $invoice; 
    } 
} 

然后去整个发票并进行贷项通知单:

$service = Mage::getModel('sales/service_order', $order); 
foreach ($invoices as $invoice) { 
    $creditmemo = $service->prepareInvoiceCreditmemo($invoice); 
    $creditmemo->refund(); 
} 

希望它为你工作。

相关问题