我想从一个特定的订单中选择一些条目创建发票。
我已经成功地通过程序为整个订单创建了发票,但是我想创建该订单的部分发票。
终于搞定了。
不得不深入研究Magento才得以解决。
$orderid // order id
$order = Mage::getModel('sales/order')->load($orderid);
or for order increment id
$orderincrmentid // order increment id
$order = Mage::getModel('sales/order')->loadByIncrementId($orderincrmentid);
if($order->canInvoice()) {
$invoiceId = Mage::getModel('sales/order_invoice_api')
->create($order->getIncrementId(), $itemsarray ,'your_comment' ,1,1);
}
echo $invoiceId; // Gives increment Invoice id
@parameters
用于上述创建函数:
第一个参数:订单增量id
第二个参数:数组
// array format . [Main point]
foreach($order->getAllItems() as $item) {
$item_id = $item->getItemId(); //order_item_id
$qty = $item->getQtyOrdered(); //qty ordered for that item
}
array('56'=>'3','57'=>'1','58'=>'0');
array([order_item_id] => [qty]); // general array format
因此,在这里,您将把订单项ID添加为键,其数量作为其值。
如果不想为特定项目创建发票编号,则只需将其数量的值传递为0 // zero。
第三个参数 : 注释
第四个参数 : 发送邮件 ----> 1 不发送邮件 ----> 0
第五个参数 : 在邮件中包含注释 ----> 1 不在邮件中包含注释 ----> 0
它返回发票增量ID。
希望对某人有所帮助。
<?php
$orderID = "145000010"; //order increment id
$orderDetails = Mage::getModel('sales/order')->loadByIncrementId($orderID);
if($orderDetails->canInvoice() and $orderDetails->getIncrementId())
{
//$order = Mage::getModel('sales/order')->loadByIncrementId($order_id);
$orderItems = $orderDetails->getAllItems();
$invoiceItems = array();
foreach ($orderItems as $_eachItem) {
$opid = $_eachItem->getId();
$opdtId = $_eachItem->getProductId();
$itemss = Mage::getModel('catalog/product')->load($opdtId);
$psku = $itemss->getSku(); // get product attribute which is used your condition
if($psku=='Test product1'){
$qty = $_eachItem->getQtyOrdered();
} else {
$qty = 0;
}
$itemsarray[$opid] = $qty;
}
if($orderDetails->canInvoice()) {
echo $invoiceId = Mage::getModel('sales/order_invoice_api')
->create($orderDetails->getIncrementId(), $itemsarray ,'Partially create Invoice programatically' ,0,0);
}
}
?>
想了解更多信息请点击