Наконец, вот как я решил:
1 - добавление invoice_line_tax_ids, как указано выше:
invoiceLines = [
{ 'account_id': 162, 'name': "Product A", 'quantity': 1, 'price_unit': 17, 'product_id': 1 },
{ 'product_id': 1, 'account_id': 162, 'name': "Product B", 'quantity': 1, 'price_unit': 17 }
]
-------------------
// partnerId is an id of an existing partner in odoo
function createInvoiceObj(partnerId, lineEntries) {
inParams = [];
params = [];
inParams.push({
'partner_id': partnerId,
'account_id': 162,
'invoice_line_ids': lineEntries
});
params.push(inParams);
odoo.execute_kw('account.invoice', 'create', params, function (err, invoiceId) {
if (err) { throws('error during execution createInvoiceObj() ' + err); }
return createTax(invoiceId);
});
}
2 - создать налоговые записи для каждой строки (сначала найдите номера строк для счета)
function createTax(invoiceId) {
var inParams = [];
var params = [];
inParams.push([['invoice_id', '=', invoiceId]]);
params.push(inParams);
odoo.execute_kw('account.invoice.line', 'search', params, function (err, invoiceLineIds) {
if (err) { return console.log(err); }
invoiceLineId = invoiceLineIds[0];
inParams = [];
inParams.push(invoiceLineIds);
inParams.push({ 'invoice_line_tax_ids': [[6, 0, [12]]] })
params = [];
params.push(inParams);
odoo.execute_kw('account.invoice.line', 'write', params, function (err, value) {
if (err) { return console.log('Error during execution ' + err); }
return compute_taxes(invoiceId)
});
});
}
3 - запуск расчета налога на счете
function compute_taxes(invoiceId) {
inParams = [];
params = [];
inParams.push(invoiceId);
params.push(inParams);
odoo.execute_kw('account.invoice', 'compute_taxes', params, function (err, result) {
if (err) { return console.log(err); }
return invoice_open(invoiceId)
});
}
поэтому исправление magix в конце заключалось в вызове функции compute_taxes. Тем не менее, я попытался сделать следующий шаг и автоматически подтвердить счет, но это все равно не удается. Я использовал рабочий процесс invoice_open, но это не дает результата:
function invoice_open(invoiceId) {
var params = [];
params.push(invoiceId);
odoo.exec_workflow('account.invoice', 'invoice_open', params, function (err, value) {
if (err) { return console.log("Error during execution " + err); }
console.log('Result invoice_open: ' + value);
});
}
эта функция всегда возвращает false
, но без сообщения об ошибке. Состояние счета-фактуры также не переводится в «подтвержденное».