From 4453e0db0bd0e5e4b72fcbf51b0fdacb7c9647d4 Mon Sep 17 00:00:00 2001
From: Daniil Digtyar Vasilieva <daniildigtyar@gmail.com>
Date: Mon, 10 Jul 2023 11:45:17 +0200
Subject: [PATCH] [IMP] energy_selfconsumption: error return

---
 .../wizards/selfconsumption_import_wizard.py  | 61 +++++++++----------
 1 file changed, 29 insertions(+), 32 deletions(-)

diff --git a/energy_selfconsumption/wizards/selfconsumption_import_wizard.py b/energy_selfconsumption/wizards/selfconsumption_import_wizard.py
index 2d55a72ac..c4a55cac4 100644
--- a/energy_selfconsumption/wizards/selfconsumption_import_wizard.py
+++ b/energy_selfconsumption/wizards/selfconsumption_import_wizard.py
@@ -25,22 +25,19 @@ class SelfconsumptionImportWizard(models.TransientModel):
             raise ValidationError("Only csv format files are accepted.")
 
     def import_file_button(self):
+        error_string_list = ''
         file_data = base64.b64decode(self.import_file)
         parsing_data = self.with_context(active_id=self.ids[0])._parse_file(file_data)
         active_id = self.env.context.get('active_id')
         project = self.env['energy_selfconsumption.selfconsumption'].browse(active_id)
-        parsing_errors = []
-        for index, single_statement_data in enumerate(parsing_data[1:]):
-            found = self.import_line(single_statement_data, project)
-            if not found:
-                parsing_errors.append((index, single_statement_data))
-        if parsing_errors:
-            error_list = ''
-            for error in parsing_errors:
-                error_list = "".join(
-                    [error_list, _('<li>Line: {index} DNI: {vat} </li>\n').format(index=error[0], vat=error[1][0])])
-            project.message_post(subject=_('Import Result'),
-                                 body=_('Partners not found for: <ul>{list}</ul>'.format(list=error_list)))
+        for index, line in enumerate(parsing_data[1:]):
+            error = self.import_line(line, project)
+            if error:
+                error_string_list = "".join(
+                    [error_string_list, _('<li>Line {line}: {error}</li>\n').format(index, error)])
+        if error_string_list:
+            project.message_post(subject=_('Import Errors'),
+                                 body=_('Import errors found: <ul>{list}</ul>'.format(list=error_string_list)))
         return True
 
     def _parse_file(self, data_file):
@@ -71,27 +68,27 @@ class SelfconsumptionImportWizard(models.TransientModel):
         ], limit=1)
 
         if not partner:
-            if line[2]:
-                partner = self.env['res.partner'].create({
-                    'vat': line[0],
-                    'firstname': line[2],
-                    'lastname': line[3],
-                    'company_type': 'person'
+            return _('Partner with VAT:<b>{vat}</b> was not found.').format(vat=line[0])
+
+        if not project.inscription_ids.filtered_domain([('partner_id', '=', partner.id)]):
+            try:
+                self.env['energy_project.inscription'].create({
+                    'project_id': project.id,
+                    'partner_id': partner.id,
+                    'effective_date': fields.date.today()
                 })
-            else:
-                return False
-        if partner.id in project.inscription_ids.mapped('partner_id.id'):
-            return False
-        try:
-            self.env['energy_project.inscription'].create({
-                'project_id': project.id,
-                'partner_id': partner.id,
-                'effective_date': fields.date.today()
-            }
-            )
-        except:
-            return False
-        return True
+            except:
+                return _('Could not create inscription.').format(vat=line[0])
+
+        supply_point = self.env['energy_selfconsumption.supply_point'].search(
+            [('code', '=', line[2]), ('company_id', '=', self.env.company)])
+
+        if supply_point and supply_point.partner_id != partner:
+            return _(
+                'The supply point partner {supply_partner} and the partner {vat} in the subscription are different.').format(
+                supply_partner=supply_point.partner_id.vat, vat=partner.vat)
+
+        return False
 
     def create_supply_point(self, code, street, street2, city, state, zip, country, owner_vat):
         owner = self.env['res.partner'].search([
-- 
GitLab