From 185e71fe8987bd78c59d9f520ede69158cf29cb0 Mon Sep 17 00:00:00 2001
From: Remi <remi@le-filament.com>
Date: Mon, 14 Oct 2019 16:09:40 +0200
Subject: [PATCH] =?UTF-8?q?Ajout=20checks=20d=C3=A9but/fin=20p=C3=A9riode?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 wizard/scop_deces_wizard.py  |  42 +++++++------
 wizard/scop_period_wizard.py | 112 +++++++++++++++++++----------------
 2 files changed, 86 insertions(+), 68 deletions(-)

diff --git a/wizard/scop_deces_wizard.py b/wizard/scop_deces_wizard.py
index f82b085..9927c04 100644
--- a/wizard/scop_deces_wizard.py
+++ b/wizard/scop_deces_wizard.py
@@ -38,21 +38,27 @@ class ScopDecesWizard(models.TransientModel):
     @api.multi
     def deces_action(self):
         # Close previous period
-        last_period_id = self.env['scop.period'].browse(
-            self.last_period_id)
-        if last_period_id:
-            last_period_id.write({
-                'end': self.end,
-                'end_reason': 'autr',
-                'comments': self.comments,
-            })
-
-            # Update partner
-            partner = self.env['res.partner'].browse(self.partner_id)
-            partner.write({
-                'dissolution_date': self.end,
-                'dissolution_reason_id': self.dissolution_reason_id.id
-            })
-        else:
-            raise ValidationError(
-                "Il n'existe pas de période à fermer.")
+        for period in self:
+            last_period = self.env['scop.period'].browse(
+                period.last_period_id)
+            if last_period:
+                if period.end >= last_period.start:
+                    last_period.write({
+                        'end': period.end,
+                        'end_reason': 'autr',
+                        'comments': period.comments,
+                    })
+                else:
+                    raise ValidationError(
+                        "La date de fin doit être postèrieure à la date de " +
+                        "début : " + str(last_period.start))
+
+                # Update partner
+                partner = self.env['res.partner'].browse(period.partner_id)
+                partner.write({
+                    'dissolution_date': period.end,
+                    'dissolution_reason_id': period.dissolution_reason_id.id
+                })
+            else:
+                raise ValidationError(
+                    "Il n'existe pas de période à fermer.")
diff --git a/wizard/scop_period_wizard.py b/wizard/scop_period_wizard.py
index 75720da..616d748 100644
--- a/wizard/scop_period_wizard.py
+++ b/wizard/scop_period_wizard.py
@@ -2,6 +2,7 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 from odoo import api, fields, models
+from odoo.exceptions import ValidationError
 
 
 class ScopPeiodWizard(models.TransientModel):
@@ -162,53 +163,64 @@ class ScopPeiodWizard(models.TransientModel):
 
     @api.multi
     def create_period(self):
-        # Create new period
-        self.env['scop.period'].create({
-            'partner_id': self.partner_id,
-            'start': self.start,
-            'name': self.name,
-            'cooperative_form_id': self.cooperative_form_id.id,
-            'partner_company_type_id': self.partner_company_type_id.id,
-            'siret': self.siret,
-            'street': self.street,
-            'street2': self.street2,
-            'street3': self.street3,
-            'zip': self.zip,
-            'zip_id': self.zip_id.id,
-            'city': self.city,
-            'cedex': self.cedex,
-            'state_id': self.state_id.id,
-            'country_id': self.country_id.id,
-            'naf_id': self.naf_id.id,
-            'cae': self.cae
-        })
-
-        # Close previous period
-        previous_period = self.env['scop.period'].browse(
-            self.previous_period_id)
-        if previous_period:
-            previous_period.write({
-                'end': self.start,
-                'end_reason': self.end_reason,
-                'comments': self.comments,
-            })
-
-        # Update partner
-        partner = self.env['res.partner'].browse(self.partner_id)
-        partner.write({
-            'name': self.name,
-            'cooperative_form_id': self.cooperative_form_id.id,
-            'partner_company_type_id': self.partner_company_type_id.id,
-            'siret': self.siret,
-            'street': self.street,
-            'street2': self.street2,
-            'street3': self.street3,
-            'zip': self.zip,
-            'zip_id': self.zip_id.id,
-            'city': self.city,
-            'cedex': self.cedex,
-            'state_id': self.state_id.id,
-            'country_id': self.country_id.id,
-            'naf_id': self.naf_id.id,
-            'cae': self.cae
-        })
+        for period in self:
+            partner_values = {}
+            # Close previous period
+            previous_period = self.env['scop.period'].search(
+                [('partner_id', '=', self.env.context.get('active_id'))],
+                limit=1)
+            if previous_period:
+                if (previous_period.end and
+                        period.start >= previous_period.end):
+                    partner_values = {
+                        'dissolution_date': False,
+                        'dissolution_reason_id': False,
+                    }
+                else:
+                    raise ValidationError(
+                        "La nouvelle période ne peut commencer avant la "
+                        + "fin de la période précédente : "
+                        + str(previous_period.end))
+                if period.start >= previous_period.start:
+                    if not previous_period.end_reason:
+                        previous_period.write({
+                            'end': period.start,
+                            'end_reason': period.end_reason,
+                            'comments': period.comments,
+                        })
+                else:
+                    raise ValidationError(
+                        "La nouvelle période ne peut commencer avant la "
+                        + "période précédente : "
+                        + str(previous_period.start))
+
+            # Create new period
+            period_values = {
+                'start': period.start,
+                'partner_id': period.partner_id
+            }
+
+            values = {
+                'name': period.name,
+                'cooperative_form_id': period.cooperative_form_id.id,
+                'partner_company_type_id': period.partner_company_type_id.id,
+                'siret': period.siret,
+                'street': period.street,
+                'street2': period.street2,
+                'street3': period.street3,
+                'zip': period.zip,
+                'zip_id': period.zip_id.id,
+                'city': period.city,
+                'cedex': period.cedex,
+                'state_id': period.state_id.id,
+                'country_id': period.country_id.id,
+                'naf_id': period.naf_id.id,
+                'cae': period.cae
+            }
+            period_values.update(values)
+            self.env['scop.period'].create(period_values)
+
+            # Update partner
+            partner_values.update(values)
+            partner = self.env['res.partner'].browse(period.partner_id)
+            partner.write(partner_values)
-- 
GitLab