From 818119ebabad0c299085dcbb60b55e78936882a8 Mon Sep 17 00:00:00 2001 From: Alfredo Zamora Date: Mon, 5 Jul 2021 10:25:48 +0200 Subject: [PATCH] l10n_it_dichiarazione_intento: permit to add dichiarazione.intento records that exceeds the limit_amount of dichiarazione.intento.yearly.limit --- .../models/account_invoice.py | 12 +++++++++-- .../models/dichiarazione_intento.py | 20 +++++++++++++++---- .../views/company_view.xml | 3 ++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/l10n_it_dichiarazione_intento/models/account_invoice.py b/l10n_it_dichiarazione_intento/models/account_invoice.py index b38bb8c84a1f..3820a3688ec0 100644 --- a/l10n_it_dichiarazione_intento/models/account_invoice.py +++ b/l10n_it_dichiarazione_intento/models/account_invoice.py @@ -79,14 +79,22 @@ def action_move_create(self): 'change fiscal position and verify applied tax')) else: continue + plafond = self.env.user.company_id.\ + dichiarazione_yearly_limit_ids.filtered( + lambda r: r.year == str(fields.first(dichiarazioni).date_start.year) + ) + available_plafond = plafond.limit_amount - plafond.actual_used_amount sign = 1 if invoice.type in ['out_invoice', 'in_invoice'] else -1 dichiarazioni_amounts = {} for tax_line in invoice.tax_line_ids: amount = sign * tax_line.base for dichiarazione in dichiarazioni: if dichiarazione.id not in dichiarazioni_amounts: - dichiarazioni_amounts[dichiarazione.id] = \ - dichiarazione.available_amount + if dichiarazione.available_amount > available_plafond: + dichiarazioni_amounts[dichiarazione.id] = available_plafond + else: + dichiarazioni_amounts[dichiarazione.id] = \ + dichiarazione.available_amount if tax_line.tax_id.id in [t.id for t in dichiarazione.taxes_ids]: dichiarazioni_amounts[dichiarazione.id] -= amount diff --git a/l10n_it_dichiarazione_intento/models/dichiarazione_intento.py b/l10n_it_dichiarazione_intento/models/dichiarazione_intento.py index b04555937202..53aecb843b77 100644 --- a/l10n_it_dichiarazione_intento/models/dichiarazione_intento.py +++ b/l10n_it_dichiarazione_intento/models/dichiarazione_intento.py @@ -15,8 +15,18 @@ class DichiarazioneIntentoYearlyLimit(models.Model): company_id = fields.Many2one('res.company', string='Company') year = fields.Char(required=True) - limit_amount = fields.Float() - used_amount = fields.Float(compute='_compute_used_amount') + limit_amount = fields.Float( + string='Plafond' + ) + # TODO align terms: used_amount > issued_declarations + used_amount = fields.Float( + string='Issued Declarations', + compute='_compute_used_amount' + ) + actual_used_amount = fields.Float( + string='Actual Used Amount', + compute='_compute_used_amount' + ) @api.multi def _compute_used_amount(self): @@ -30,6 +40,7 @@ def _compute_used_amount(self): ('date_end', '<=', date_end), ('type', '=', 'in'), ]) record.used_amount = sum([d.limit_amount for d in dichiarazioni]) + record.actual_used_amount = sum([d.used_amount for d in dichiarazioni]) class DichiarazioneIntento(models.Model): @@ -103,8 +114,9 @@ def create(self, values): actual_limit_total = sum([d.limit_amount for d in dichiarazioni]) \ + values['limit_amount'] if actual_limit_total > plafond.limit_amount: - raise UserError( - _('Total of documents exceed yearly limit')) + if plafond.limit_amount < plafond.actual_used_amount: + raise UserError( + _('Total of documents exceed yearly limit')) # ----- Assign a number to dichiarazione if values and not values.get('number', ''): values['number'] = self.env['ir.sequence'].next_by_code( diff --git a/l10n_it_dichiarazione_intento/views/company_view.xml b/l10n_it_dichiarazione_intento/views/company_view.xml index 7347834946f6..34bd4cbb2443 100644 --- a/l10n_it_dichiarazione_intento/views/company_view.xml +++ b/l10n_it_dichiarazione_intento/views/company_view.xml @@ -8,12 +8,13 @@ - + +