我使用這個代碼,以創建在Magento發票:Magento:創建發票號碼=訂單號的發票?
$invoiceId = Mage::getModel('sales/order_invoice_api')->create($order->getIncrementId(), array());
這會自動分配一個編號(increment_id)到發票,例如100016050.我想創建發票其中的發票increment_id =訂單的increment_id。
如何做到這一點?
謝謝!
我使用這個代碼,以創建在Magento發票:Magento:創建發票號碼=訂單號的發票?
$invoiceId = Mage::getModel('sales/order_invoice_api')->create($order->getIncrementId(), array());
這會自動分配一個編號(increment_id)到發票,例如100016050.我想創建發票其中的發票increment_id =訂單的increment_id。
如何做到這一點?
謝謝!
這需要編寫一個完整的自定義模塊,所以我將解釋一些基礎知識。
在Magento的,像order
,invoice
,creditmemo
和shipping
每個實體都有每store_id
自己的獨立的和數組。
這些號碼組可以在表eav_entity_store
定義:
entity_store_id entity_type_id store_id increment_prefix increment_last_id
1 5 1 1 100000000
2 6 1 2 200000000
3 7 1 3 300000000
4 8 1 4 400000000
要知道哪些entity_type_id是指實體,請檢查您eav_entity_type
表:
entity_type_id entity_type_code entity_model
5 order sales/order
6 invoice sales/order_invoice
7 creditmemo sales/order_creditmemo
8 shipment sales/order_shipment
請注意,您的entity_type_id
的可能(或可能不)與此不同。
Magento通常會將每個實體增加1,參見eav_entity_type.increment_per_store
。
這種情況發生在創建此實體的時間。但是,order
的創建並不總是意味着創建invoice
也是如此。例如,用戶可以在下訂單時取消付款,或者付款不會被付款提供商授權,因此不會創建invoice
。
這可能導致間隙,例如, order
已在100000005
,而invoice
仍在200000002
。
您的代碼需要以保持order
和invoice
同步的方式管理此間隙。例如,您可以爲sales_order_invoice_save_before
事件創建一個觀察者。
app/code/local/Mycompany/Mymodule/etc/config.xml
:
<config>
<modules>
<Mycompany_Mymodule>
<version>0.1.0</version>
</Mycompany_Mymodule>
</modules>
<global>
<models>
<mymodule>
<class>Mycompany_Mymodule_Model</class>
</mymodule>
</models>
<events>
<sales_order_invoice_save_before>
<observers>
<myobserver>
<type>singleton</type>
<class>mymodule/observer</class>
<method>salesOrderInvoiceSaveBefore</method>
</myobserver>
</observers>
</sales_order_invoice_save_before>
</events>
</global>
</config>
app/code/local/Mycompany/Mymodule/Model/Observer.php
:
class Mycompany_Mymodule_Model_Observer
{
/**
* Hook to observe `sales_order_invoice_save_before` event
*
* @param Varien_Event_Observer $oObserver
*/
public function salesOrderInvoiceSaveBefore($oObserver)
{
$oInvoice = $oObserver->getInvoice();
}
}
Magento的傳遞invoice
對象到此觀測器,該invoice
對象被保存之前。這將允許您使用此invoice
對象檢索相關的order
對象(並因此檢索order
的increment_id
)。
檢索了order.increment_id
後,您可以搜索invoice
以確定是否存在具有該order.increment_id
的invoice
。
如果它尚不存在,則可以在離開觀察者之前將order.increment_id
的值指定爲invoice.increment_id
並完成。
請注意,這些只是基礎知識。它還有一些缺陷。
例如,每個訂單案例的多個和/或重複發票尚未處理。
例如,在一些國家,財政/稅務部門要求發票號碼不斷增加。它必須是1, 2, 3, 4, 5
,但1, 2, 3, 4 is missing, 5
是不可接受的。使用上述技術,這種差距仍然可能發生,因爲用戶付款取消等。
但是,這應該讓你走上正軌。