Счет-фактура заказа на продажу Magento с обновлением количества продукта с использованием API не работает должным образом - PullRequest
1 голос
/ 13 марта 2012

Я создаю приложение Magento и планирую создать накладную заказа на продажу с помощью Magento API.

Вот мой псевдокод для создания накладной.Проблема заключается в том, что он создает счет-фактуру, но этот счет-фактура всегда пуст (без указания продуктов и количества)

<?php 

$proxy = new SoapClient('http://myurl/api/soap?wsdl');
$sessionId = $proxy->login('apiuser', 'apikey');

// item array with sku and quantity
$invoiceItems = array(
    '002' => '1', '003' => '1', '004' => '1', '005' => '1'
);

// Create new invoice
$newInvoiceId = $proxy->call($sessionId, 'sales_order_invoice.create', array($saleorderno, $invoiceItems, 'Invoice Created', true, true));

?>

Но когда я создаю такой счет-фактуру заказа на продажу, как этот (нет изменений в количестве от заказа на продажу), работает нормально

$newInvoiceId = $proxy->call($sessionId, 'sales_order_invoice.create', array($saleorderno, array(), 'Invoice Created', true, true));

Есть ли ошибки в моем коде?Кто-нибудь может дать мне совет?

1 Ответ

1 голос
/ 13 марта 2012

В переменной массива "$invoiceItems" вы указываете это значение: -

$invoiceItems = array(
    '002' => '1',
    '003' => '1',
    '004' => '1',
    '005' => '1'
);

Ключи для указанного выше массива должны соответствовать идентификатору позиции заказа, а не артикулу товара.Это означает, что всякий раз, когда размещается заказ, каждый заказанный товар получает свой уникальный идентификатор позиции заказа, который совсем не совпадает с идентификатором соответствующего SKU или соответствующего идентификатора продукта.

Итак, чтобы получить это, вынеобходимо загрузить коллекцию заказов из идентификатора заказа и получить список коллекции элементов, как показано ниже: -

$saleorderno = 'SOME VALID ORDER INCREMENT ID';
$order = Mage::getModel('sales/order')->loadByIncrementId($saleorderno);

$orderItems = $order->getAllItems();
$invoiceItems = array();

foreach ($orderItems as $_eachItem) {
    $invoiceItems[$_eachItem->getItemId()] = $_eachItem->getQtyOrdered();
}

$newInvoiceId = $proxy->call($sessionId, 'sales_order_invoice.create', array($saleorderno, $invoiceItems, 'Invoice Created', true, true));

Теперь этот код выше должен работать для вас.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...