76 lines
3.6 KiB
Python
76 lines
3.6 KiB
Python
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
|
from odoo.tests import Form, tagged
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestAccountMoveDuplicate(AccountTestInvoicingCommon):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
cls.invoice = cls.init_invoice('in_invoice', products=cls.product_a + cls.product_b)
|
|
|
|
def test_in_invoice_single_duplicate_reference(self):
|
|
""" Ensure duplicated ref are computed correctly in this simple case (in_invoice)"""
|
|
bill_1 = self.invoice
|
|
bill_1.ref = 'a unique supplier reference that will be copied'
|
|
bill_2 = bill_1.copy(default={'invoice_date': bill_1.invoice_date})
|
|
# ensure no Error is raised
|
|
bill_2.ref = bill_1.ref
|
|
self.assertRecordValues(bill_2, [{'duplicated_ref_ids': bill_1.ids}])
|
|
|
|
def test_out_invoice_single_duplicate_reference(self):
|
|
"""
|
|
Ensure duplicated move are computed correctly in this simple case (out_invoice).
|
|
For it to be a duplicate, the partner, the invoice date and the amount total must be the same.
|
|
"""
|
|
invoice_1 = self.init_invoice(
|
|
move_type='out_invoice',
|
|
products=self.product_a,
|
|
invoice_date='2023-01-01'
|
|
)
|
|
invoice_2 = invoice_1.copy(default={'invoice_date': invoice_1.invoice_date})
|
|
self.assertRecordValues(invoice_2, [{'duplicated_ref_ids': invoice_1.ids}])
|
|
|
|
# Different date but same product and same partner, no duplicate
|
|
invoice_3 = invoice_1.copy(default={'invoice_date': '2023-12-31'})
|
|
self.assertRecordValues(invoice_3, [{'duplicated_ref_ids': []}])
|
|
|
|
# Different product and same partner and same date, no duplicate
|
|
invoice_4 = invoice_1 = self.init_invoice(
|
|
move_type='out_invoice',
|
|
products=self.product_b,
|
|
invoice_date='2023-01-01'
|
|
)
|
|
self.assertRecordValues(invoice_4, [{'duplicated_ref_ids': []}])
|
|
|
|
def test_in_invoice_single_duplicate_reference_with_form(self):
|
|
""" Ensure duplicated ref are computed correctly with UI's NEW_ID"""
|
|
invoice_1 = self.invoice
|
|
invoice_1.ref = 'a unique supplier reference that will be copied'
|
|
move_form = Form(self.env['account.move'].with_context(default_move_type='in_invoice'))
|
|
move_form.partner_id = self.partner_a
|
|
move_form.invoice_date = invoice_1.invoice_date
|
|
move_form.ref = invoice_1.ref
|
|
with move_form.invoice_line_ids.new() as line_form:
|
|
line_form.product_id = self.product_a
|
|
with move_form.invoice_line_ids.new() as line_form:
|
|
line_form.product_id = self.product_b
|
|
invoice_2 = move_form.save()
|
|
self.assertRecordValues(invoice_2, [{'duplicated_ref_ids': invoice_1.ids}])
|
|
|
|
def test_in_invoice_multiple_duplicate_reference_batch(self):
|
|
""" Ensure duplicated ref are computed correctly even when updated in batch"""
|
|
invoice_1 = self.invoice
|
|
invoice_1.ref = 'a unique supplier reference that will be copied'
|
|
invoice_2 = invoice_1.copy(default={'invoice_date': invoice_1.invoice_date})
|
|
invoice_3 = invoice_1.copy(default={'invoice_date': invoice_1.invoice_date})
|
|
|
|
# reassign to trigger the compute method
|
|
invoices = invoice_1 + invoice_2 + invoice_3
|
|
invoices.ref = invoice_1.ref
|
|
self.assertRecordValues(invoices, [
|
|
{'duplicated_ref_ids': (invoice_2 + invoice_3).ids},
|
|
{'duplicated_ref_ids': (invoice_1 + invoice_3).ids},
|
|
{'duplicated_ref_ids': (invoice_1 + invoice_2).ids},
|
|
])
|