Создание счета-фактуры из заказа на продажу с использованием XML-RPC (Python)

#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. Ваш, вероятно, будет другим.