From 488ec2357b70baee52d89a255c2246073bbbfb96 Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Thu, 31 Oct 2024 17:17:44 +0100 Subject: [PATCH] [UPD] update coop data when creating last period --- models/res_partner.py | 3 +- models/scop_period.py | 69 +++++++++++++++++++++++------------- wizard/scop_period_wizard.py | 2 +- 3 files changed, 47 insertions(+), 27 deletions(-) diff --git a/models/res_partner.py b/models/res_partner.py index beac707..3e51412 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -873,7 +873,7 @@ class ScopPartner(models.Model): partner.scop_period_ids = new_period def _add_period(self, partner): - new_period = self.env["scop.period"].create( + new_period = self.env["scop.period"].with_context().create( { "partner_id": partner.id, "start": partner.registration_date or fields.Date.today(), @@ -1387,7 +1387,6 @@ class ScopPartner(models.Model): if (partner.revision_type == "1y") and (partner.cooperative_form_id.name == "SCIC") : partner.revision_type_ok = False - # ------------------------------------------------------ # Button & Action # ------------------------------------------------------ diff --git a/models/scop_period.py b/models/scop_period.py index f52de72..3a8c9b7 100644 --- a/models/scop_period.py +++ b/models/scop_period.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, models +from odoo import api, fields, models class ScopPeriod(models.Model): @@ -82,32 +82,53 @@ class ScopPeriod(models.Model): # ------------------------------------------------------ # Override ORM # ------------------------------------------------------ + @api.model_create_multi + def create(self, vals_list): + period_ids = super().create(vals_list) + vals_list_index = 0 + for period in period_ids: + if period == period.partner_id.scop_period_ids[0]: + partner_vals = period._get_partner_vals(vals_list[vals_list_index]) + # Update partner + period.partner_id.sudo().write(partner_vals) + vals_list_index += 1 + return period_ids + def write(self, vals): for period in self: if period == period.partner_id.scop_period_ids[0]: - partner_vals = dict(vals) - # Suppression des valeurs à ne pas remonter à l'organisme - partner_vals.pop("partner_id", False) - partner_vals.pop("id_riga", False) - partner_vals.pop("start", False) - partner_vals.pop("comments", False) - - # Si la date de fin est modifiée et que l'organisme est décédé - # on remonte la date de décès - if "end" in partner_vals: - if ( - partner_vals.get("end_reason", False) == "deces" - or period.end_reason == "deces" - ): - partner_vals.update( - {"dissolution_date": partner_vals.get("end")} - ) - if not partner_vals.get("end"): - partner_vals.update({"dissolution_date": None}) - - partner_vals.pop("end", False) - partner_vals.pop("end_reason", False) - + partner_vals = self._get_partner_vals(vals) # Update partner period.partner_id.sudo().write(partner_vals) return super(ScopPeriod, self).write(vals) + + # ------------------------------------------------------ + # Business funcitons + # ------------------------------------------------------ + def _get_partner_vals(self, vals): + """ + :param dict vals: dictionnaire des valeurs à créer ou à mettre à jour + """ + partner_vals = dict(vals) + # Suppression des valeurs à ne pas remonter à l'organisme + partner_vals.pop("partner_id", False) + partner_vals.pop("id_riga", False) + partner_vals.pop("start", False) + partner_vals.pop("comments", False) + + # Si la date de fin est modifiée et que l'organisme est décédé + # on remonte la date de décès + if "end" in partner_vals: + if ( + partner_vals.get("end_reason", False) == "deces" + or self.end_reason == "deces" + ): + partner_vals.update( + {"dissolution_date": partner_vals.get("end")} + ) + if not partner_vals.get("end"): + partner_vals.update({"dissolution_date": None}) + + partner_vals.pop("end", False) + partner_vals.pop("end_reason", False) + return partner_vals diff --git a/wizard/scop_period_wizard.py b/wizard/scop_period_wizard.py index c52b835..0029db1 100644 --- a/wizard/scop_period_wizard.py +++ b/wizard/scop_period_wizard.py @@ -246,7 +246,7 @@ class ScopPeriodWizard(models.TransientModel): "ur_id": period.ur_id.id, } period_values.update(values) - self.env["scop.period"].create(period_values) + self.env["scop.period"].with_context().create(period_values) # Update partner partner_values.update(values) -- GitLab