diff --git a/models/res_partner.py b/models/res_partner.py index cb86092c604facfc39e54088c3147874d4a06318..acacca2cb209df853f5938b998a0b0910c470e6b 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -290,16 +290,17 @@ class ScopPartner(models.Model): 'Expert-comptable / Commissaire au compte')], on_delete='restrict') revision_person_id = fields.Many2one( - 'res.users', + comodel_name='res.users', string='Réviseur', on_delete='restrict', track_visibility='onchange') revision_certified_person_id = fields.Many2one( - 'res.users', + comodel_name='res.users', string='Réviseur agréé', on_delete='restrict') - revision_person_assign_date = fields.Date("Date de nomination du réviseur", - track_visibility='onchange') + revision_person_assign_date = fields.Date( + string="Date de nomination du réviseur", + track_visibility='onchange') revision_type = fields.Selection( [('1y', "Annuelle"), ('5y', 'Quinquennale'), @@ -313,18 +314,15 @@ class ScopPartner(models.Model): on_delete='restrict') revision_tarif = fields.Integer("Tarif de vente", related='revision_format_id.tarif', - store=False) - + store=False) revision_next_exercice = fields.Integer("Prochain exercice révisable", compute='_compute_revision_next_exercice', inverse='_inverse_revision_next_exercice', store=True) - revision_next_year = fields.Integer("Année prochaine révision", compute='_compute_revision_next_year', inverse='_inverse_revision_next_year', - store=True) - + store=True) revision_ids = fields.One2many( comodel_name='scop.revision', inverse_name='partner_id', @@ -872,7 +870,6 @@ class ScopPartner(models.Model): else: partner.is_administrative = False - @api.depends('revision_next_exercice') def _compute_revision_next_year(self): for partner in self: @@ -882,42 +879,51 @@ class ScopPartner(models.Model): for expense in self: return - @api.depends('revision_type', 'revision_ids', 'revision_ids.revision_result_year', 'first_closeout') + @api.depends('revision_type', 'revision_ids', + 'revision_ids.revision_result_year', 'first_closeout') @api.multi def _compute_revision_next_exercice(self): for partner in self: # Si aucune périodicité de défini, on n'insiste pas if (partner.revision_type == False): return + # On commence par regarder si l'on a des révisions - last_rev = partner.revision_ids.sorted(key=lambda r: r.revision_result_year, reverse=True) - - if (len(last_rev) > 0): - # On a déjà révisé un exercice - # Cas d'une révision annuelle - if (partner.revision_type == '1y'): - partner.revision_next_exercice = last_rev[0].revision_result_year + 1 - # Cas d'une révision quinquénnale - if (partner.revision_type == '5y'): - partner.revision_next_exercice = last_rev[0].revision_result_year + 5 - # Cas d'une révision quinquénnale séquencée (annuelle) - if (partner.revision_type == '5ys'): - partner.revision_next_exercice = last_rev[0].revision_result_year + 1 - # Cas d'une révision quinquénnale séquencée (2 et 3) - if (partner.revision_type == '5ys23'): - # On doit regarder l'écart avec la révision précédente - if(len(last_rev)>1): - # On a une réunion précédente, il faut regarder l'écart entre les deux - ex1 = last_rev[0].revision_result_year - ex2 = last_rev[1].revision_result_year - # le prochain exercie est donc 5 moins la durée de la précédente révision - partner.revision_next_exercice = last_rev[0].revision_result_year + (5 - (ex1-ex2)) - else: - # Pas de révision précédente - partner.revision_next_exercice = last_rev[0].revision_result_year + 2 - else: - # On n'a pas révisé d'exercice alors il faut révise le 1er exercice - partner.revision_next_exercice = partner.first_closeout.year + last_rev = partner.revision_ids.sorted( + key=lambda r: r.revision_result_year, reverse=True) + # On calcule l'année de référence du calcul + base_rev = partner.first_closeout.year - 1 + + if len(last_rev) > 0: + # si On a déjà révisé un exercice il devient la base du calcul + base_rev = last_rev[0].revision_result_year + + # On calcule le prochain exercice révisable + # Cas d'une révision annuelle + if partner.revision_type == '1y': + partner.revision_next_exercice = base_rev + 1 + + # Cas d'une révision quinquénnale + if partner.revision_type == '5y': + partner.revision_next_exercice = base_rev + 5 + + # Cas d'une révision quinquénnale séquencée (annuelle) + if partner.revision_type == '5ys': + partner.revision_next_exercice = base_rev + 1 + + # Cas d'une révision quinquénnale séquencée (2 et 3) + if partner.revision_type == '5ys23': + # On doit regarder l'écart avec la révision précédente + if len(last_rev) > 1: + # On a une réunion précédente, il faut regarder l'écart entre les deux + ex1 = last_rev[0].revision_result_year + ex2 = last_rev[1].revision_result_year + # le prochain exercie est donc 5 moins la durée de la précédente révision + partner.revision_next_exercice = base_rev + ( + 5 - (ex1 - ex2)) + else: + # Pas de révision précédente + partner.revision_next_exercice = base_rev + 2 def _inverse_revision_next_exercice(self): for expense in self: