#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,