如何创建部分发票?

7

我想从一个特定的订单中选择一些条目创建发票。

我已经成功地通过程序为整个订单创建了发票,但是我想创建该订单的部分发票。

2个回答

12

终于搞定了。
不得不深入研究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。

希望对某人有所帮助。


你能用同样的方法捕获吗? - Chris
@Chris:从哪个角度来看?你也可以在管理面板中看到发票。 - Nikhil_K_R
我们正在运行一个多店铺设置,在上述代码中仅适用于一个店铺。在运行其他店铺时,它会抛出一个“找不到项目”的错误。你能帮我解决这个问题吗?我也无法在管理面板中生成发票。 - saran

1
尝试这个...
<?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);
    }
}
?>

想了解更多信息请点击


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接