Skip to content

Commit 284f68e

Browse files
committed
Merge PR #3467 into 16.0
Signed-off-by SirAionTech
2 parents 0536eb0 + 6785350 commit 284f68e

File tree

2 files changed

+57
-6
lines changed

2 files changed

+57
-6
lines changed

l10n_it_declaration_of_intent/models/account_move.py

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ def _post(self, soft=True):
9797
continue
9898

9999
invoice.check_declarations_amounts(declarations)
100+
declarations_used_amounts = invoice.get_declarations_used_amounts(
101+
declarations
102+
)
100103

101104
# Assign account move lines to declarations for each invoice
102105
# Get only lines with taxes
@@ -105,11 +108,11 @@ def _post(self, soft=True):
105108
continue
106109
# Group lines by tax
107110
grouped_lines = self.get_move_lines_by_declaration(lines)
108-
invoice.update_declarations(declarations, grouped_lines)
111+
invoice.update_declarations(declarations_used_amounts, grouped_lines)
109112

110113
return posted
111114

112-
def update_declarations(self, declarations, grouped_lines):
115+
def update_declarations(self, declarations_used_amounts, grouped_lines):
113116
"""
114117
Update the declarations adding a new line representing this invoice.
115118
@@ -125,19 +128,30 @@ def update_declarations(self, declarations, grouped_lines):
125128
amount *= -1
126129
# Select right declaration(s)
127130
if force_declaration:
128-
declarations = [force_declaration]
131+
declaration_id_to_amount_dict = {force_declaration.id: amount}
129132
else:
130-
declarations = declarations
133+
declaration_id_to_amount_dict = declarations_used_amounts
131134

132-
for declaration in declarations:
135+
for declaration_id in declaration_id_to_amount_dict:
136+
declaration = self.env[
137+
"l10n_it_declaration_of_intent.declaration"
138+
].browse(declaration_id)
133139
if tax not in declaration.taxes_ids:
134140
continue
135141
# avoid creating line with same invoice_id
136142
declaration.line_ids.filtered(
137143
lambda line: line.invoice_id == self
138144
).unlink()
139145
declaration.line_ids = [
140-
(0, 0, self._prepare_declaration_line(amount, lines, tax)),
146+
(
147+
0,
148+
0,
149+
self._prepare_declaration_line(
150+
declaration_id_to_amount_dict[declaration_id],
151+
lines,
152+
tax,
153+
),
154+
),
141155
]
142156
# Link declaration to invoice
143157
self.declaration_of_intent_ids = [(4, declaration.id)]
@@ -216,6 +230,21 @@ def get_declarations(self):
216230
)
217231
return declarations
218232

233+
def get_declarations_used_amounts(self, declarations):
234+
"""Get used amount by declarations for this invoice."""
235+
self.ensure_one()
236+
declarations_used_amounts = {}
237+
sign = 1 if self.move_type in ["out_invoice", "in_invoice"] else -1
238+
for tax_line in self.line_ids.filtered("tax_ids"):
239+
amount = sign * tax_line.price_subtotal
240+
for declaration in declarations:
241+
if declaration.id not in declarations_used_amounts:
242+
declarations_used_amounts[declaration.id] = 0
243+
if any(tax in declaration.taxes_ids for tax in tax_line.tax_ids):
244+
declarations_used_amounts[declaration.id] += amount
245+
amount = 0.0
246+
return declarations_used_amounts
247+
219248
def check_declarations_amounts(self, declarations):
220249
"""
221250
Compare this invoice's tax amounts and `declarations` plafond.

l10n_it_declaration_of_intent/tests/test_declaration_of_intent.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,3 +523,25 @@ def test_action_register_payment(self):
523523
else:
524524
payments = action["domain"][0][2]
525525
self.assertTrue(len(payments) > 1)
526+
527+
def test_multiple_valid(self):
528+
"""
529+
Check multi declarations validation for same partner.
530+
"""
531+
declaration_model = self.env["l10n_it_declaration_of_intent.declaration"].sudo()
532+
post_used_amount2 = self.declaration2.used_amount
533+
post_used_amount3 = self.declaration3.used_amount
534+
self.assertAlmostEqual(post_used_amount2, 0.0, 2)
535+
self.assertAlmostEqual(post_used_amount3, 0.0, 2)
536+
valid_declarations = declaration_model.get_valid(
537+
type_d="out", partner_id=self.partner2.id, date=self.today_date
538+
)
539+
self.assertEqual(valid_declarations, self.declaration2 | self.declaration3)
540+
invoice6 = self._create_invoice(
541+
"test_multiple_valid", self.partner2, tax=self.tax1
542+
)
543+
invoice6.action_post()
544+
new_post_used_amount2 = self.declaration2.used_amount
545+
new_post_used_amount3 = self.declaration3.used_amount
546+
self.assertAlmostEqual(new_post_used_amount2, 900.0, 2)
547+
self.assertAlmostEqual(new_post_used_amount3, 0.0, 2)

0 commit comments

Comments
 (0)