Odoo18-Base/addons/account/tests/test_account_move_duplicate.py

76 lines
3.6 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
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},
])