Magento以编程方式创建部分发票

时间:2013-12-27 11:00:56

标签: magento invoice sales

从特定订单我想为该订单中的某些选定商品创建发票。

我已成功以编程方式为整个订单创建了发票,但我想创建该订单的部分发票。

2 个答案:

答案 0 :(得分: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作为密钥,将其数量作为其值 如果您不想为特定商品创建发票ID,则只需将其数量的值传递为0 // zero .

第3个参数:评论

第四个参数:发送邮件----> 1         不发送邮件----> 0

第五个参数:在邮件中包含评论----> 1         不包括邮件中的评论----> 0

它返回发票增量ID。

希望它有所帮助。

答案 1 :(得分: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);
    }
}
?>

了解更多info