Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 3366b73cabd770a05c9ebdbedd2a4f17a7b6da1f
  • 14.0 par défaut protégée
  • 16.0
3 résultats

enercoop_operation.py

Blame
  • scop_period.py 4,76 Kio
    # © 2019 Le Filament (<http://www.le-filament.com>)
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    
    from odoo import api, fields, models
    
    
    class ScopPeriod(models.Model):
        _name = "scop.period"
        _description = "SCOP Period"
        _order = "partner_id, start desc"
    
        # Infos générales
        partner_id = fields.Many2one(
            comodel_name="res.partner",
            string="Organisme",
            domain=[("is_cooperative", "=", True)],
            ondelete="cascade",
            required=True,
            index=True,
        )
        id_riga = fields.Integer("ID RIGA")
        start = fields.Date(
            "Début de validité",
            required=True,
            default=fields.Date.today(),
            index=True,
        )
        end = fields.Date("Fin de validité")
        end_reason = fields.Selection(
            [
                ("juri", "Modification de la forme juridique"),
                ("form", "Changement de forme coopérative"),
                ("acti", "Changement d'activité (NAF)"),
                ("adr", "Changement d'adresse"),
                ("nom", "Changement de dénomination sociale"),
                ("registration", "Immatriculation"),
                ("dreets", "Radiation DREETS"),
                ("deces", "Décès"),
                ("autr", "Autres"),
            ],
            string="Motif de fin de validité",
        )
        comments = fields.Text("Commentaires")
        name = fields.Char("Raison Sociale", required=True, index=True)
        cooperative_form_id = fields.Many2one(
            "res.partner.cooperative.form",
            string="Cooperative form",
            ondelete="restrict",
        )
        partner_company_type_id = fields.Many2one(
            comodel_name="res.partner.company.type",
            string="Legal Form",
            ondelete="restrict",
        )
        siret = fields.Char(string="SIRET", size=14)
        street = fields.Char()
        street2 = fields.Char()
        street3 = fields.Char()
        zip = fields.Char()
        zip_id = fields.Many2one("res.city.zip", "ZIP Location")
        city = fields.Char()
        cedex = fields.Char()
        state_id = fields.Many2one(
            "res.country.state",
            string="State",
            ondelete="restrict",
            domain="[('country_id', '=?', country_id)]",
        )
        country_id = fields.Many2one("res.country", string="Country", ondelete="restrict")
        naf_id = fields.Many2one("res.partner.naf", string="Code NAF", ondelete="restrict")
        ur_id = fields.Many2one(comodel_name="union.regionale", string="Union Régionale")
        cae = fields.Boolean("CAE")
        dissolution_reason_id = fields.Many2one(
            "res.partner.dissolution.reason",
            string="Motif Décès",
            ondelete="restrict",
        )
        number = fields.Char(
            string="No adhérent", related="partner_id.member_number", store=False
        )
    
        # ------------------------------------------------------
        # 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 = 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