#odoo
#odoo
Вопрос:
Я следую документации по внешним API: https://www.odoo.com/documentation/13.0/webservices/odoo.html
для реализации требований наших компаний. Мне необходимо создать заказ на продажу и после этого автоматически создать счет-фактуру. Часть заказа на продажу выполнена, но, похоже, я не могу прикрепить счет-фактуру к заказу на продажу
Я пытался связать его с помощью поля ‘invoice_ids’, но в документации не упоминается, как указать в нем поле many2many. вот код:
many2manyInvoice = [(4, invoice_id)]
common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url))
#Admin user Id
uid = common.authenticate(db, username, password, {})
models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url))
models.execute_kw(db, uid, password, 'sale.order', 'write', [[sales_order_id], {'invoice_ids':many2manyInvoice}])
Возвращаемый ответ 200
, но на уровне заказа на продажу ничего не происходит. Я думаю, что это то, как я определил поле, которое может быть неправильным.
Может кто-нибудь помочь с этой проблемой? Заранее спасибо
Комментарии:
1. Этого должно быть достаточно, чтобы связать строки счета с соответствующими строками заказа на продажу. Хорошо, это тоже поле many2many. Вам нужно знать, какие строки счета (идентификаторы) будут подключены к какой строке (идентификатору) заказа. Просто используйте метод записи в sale.order. постройте и соедините строки счета-фактуры (поле is
invoice_lines
), используя триплеты, например [(6, 0, invoice_ids)], чтобы перезаписать все соединения или пример для одиночных добавлений: [(4, invoice_id_1), (4, invoice_id_2) …].2. @CZoellner могу ли я узнать, что означают числа 6 и 0 из [(6, 0, invoice_ids)]?
3. 6, о котором я уже писал, и 0 внутри — это просто заполнитель для «ничего», потому что этой команде triplet не нужно значение для этой (второй) позиции.
Ответ №1:
На уровне заказа на продажу ничего не происходит, потому что вы не создаете запись о продажах, не записываете в нее, ничего не делая. Не уверен, сработает ли это в вашем конкретном случае, но вот что я бы сделал.
Используйте предварительный счет-фактуру https://www.odoo.com/documentation/user/13.0/sales/invoicing/proforma.html
Затем, когда создается запись о продажах, запустите метод «Отправить предварительный счет-фактуру» с помощью web api. Это позаботится о связывании с БД, поскольку это может стать очень сложным.
Комментарии:
1. Как мы можем запустить метод из web api? Я новичок в Odoo, поэтому я не очень хорошо знаком с этим.
2. Я не знаю идентификатор специально для вашего действия. Но вот пример, который я использовал для выполнения действия через веб-API в Odoo 13.
models.execute_kw(db, uid, password, 'ir.cron', 'method_direct_trigger', 10)
Обратите внимание, что число 10 является идентификатором моего действия в odoo. Ваш, вероятно, будет другим.