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

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

Это код для преобразования моей модели в 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.


person Alejandro Velasquez    schedule 04.09.2020    source источник


Ответы (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,
person arryph    schedule 04.09.2020