Создавайте счета и платежи, затем связывайте их с помощью кода в модуле Odoo

#odoo #odoo-13

#оду #odoo-13 #odoo

Вопрос:

Я использую Odoo 13, я создал модель под названием my_module.invoice, после использования этой модели мне нужно зарегистрировать некоторые платежи, поэтому я создал другую модель под названием my_module.платеж имеет отношение «один ко многим», и они работают нормально. После того, как платежи завершат соответствующий счет-фактуру, мне нужно взять значения счета-фактуры и платежей моего модуля и создать тот же сценарий в Odoo, используя account.move и account.payment. Я смог преобразовать my_module.invoice в account.move и my_module.оплата в account.payment, но a не может их связать.

Это код для преобразования моей модели в Odoo:

 # "record" is my_module.invoce model and "ni" is Odoo's account.move model
# Here I convert my invoice model into Odoo's model
new_invoice = record.env['account.move']
ni = new_invoice.create({
    'partner_id': record.client,
    'invoice_date': record.invoice_date,
    'type': 'out_invoice',
    'state': 'draft',
    'invoice_line_ids': [(0, 0, {'product_id': record.product_id,
                                    'account_id': record.account_id,
                                    'name': record.product_name,
                                    'quantity': 1,
                                    'price_unit': record.total_to_pay
                                    }
                            )],
})
  

Затем, если account.move создан, модуль создает account.payment:

 # If ni (account.move) is true, it means the invoice has been created, so lets create the account.payment
if ni:
    new_payment = self.env['account.payment']
    np = new_payment.create({
        'payment_type': 'inbound',
        'has_invoices': True,
        'payment_method_id': 1,
        'partner_type': 'customer',
        'partner_id': some_client,
        'amount': my_module.payment.amount,
        'payment_date': my_module.payment.create_date,
        'journal_id': my_module.payment.journal_id.id,
        'communication': ni,
    })
    np.post()


  

На данный момент все работает так, как ожидалось, но я не знаю, как назначить вновь созданный account.payment вновь созданному account.move

Кто-нибудь проходил через этот сценарий или знает, как их связать?

Примечание: Причина, по которой я создаю разные модели для преобразования их в модели Odoo, заключается в том, что перед использованием обычного потока в Odoo есть определенная логика и условия.

Ответ №1:

Вы можете использовать контекст для передачи отношений счетов-фактур к новому платежу:

 new_payment = self.env['account.payment'].
    with_context(active_ids=ni.ids, active_model='account.move', active_id=ni.id)

np = new_payment.create({ ......
  

Примечание: communication поле модели оплаты — это char поле, поэтому вы присваиваете account.move объект char полю, что неверно. Вы можете, например, передать name счет.

 'communication': ni.name,