У нас есть некоторые интеграции API, которые будут периодически создавать поставки для заказов.
Что бы я хотел хотел бы сделать, это создать наблюдателя, который также будет создавать соответствующий счет-фактуру и фиксировать платеж при создании этого груза. У меня это связано с sales_order_shipment_save_after
:
public function autoInvoice($observer){
$shipment = $observer->getEvent()->getShipment();
$order = $shipment->getOrder();
$items = $shipment->getItemsCollection();
$qty = array();
foreach($items as $item)
$qty[$item['order_item_id']] = $item['qty'];
$invoice = Mage::getModel('sales/order_invoice_api');
$invoiceId = $invoice->create($order->getIncrementId(), $qty);
$invoice->capture($invoiceId);
}
(Код для фактического захвата несколько наивен, но терпите меня.)
Странно то, что этот код работает нормально - доставка идет создан, счет будет создан и помечен как «Оплачен». Однако сам заказ остается в подвешенном состоянии и сохраняет статус «Ожидание».
Если посмотреть дальше, элементы в самом заказе имеют правильные количества как для «Заказанных», так и для «Отправленных», но нет списка количества, включенного в счет. Думаю, именно поэтому зависает статус. Как будто qty_invoiced
в таблице sales_order_item каким-то образом восстанавливается.
Опять же, счет-фактура показывает правильные элементы, поэтому я здесь совершенно запутался.
Есть идеи?