From 7e04decdb1091b6d69b9d2536d559ac1be024e37 Mon Sep 17 00:00:00 2001
From: Daniil Digtyar Vasilieva <daniildigtyar@gmail.com>
Date: Mon, 26 Jun 2023 16:44:47 +0200
Subject: [PATCH] [IMP] import inscriptions funcionality

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

diff --git a/energy_selfconsumption/wizards/selfconsumption_import_wizard.py b/energy_selfconsumption/wizards/selfconsumption_import_wizard.py
index 37132c002..7a197ad59 100644
--- a/energy_selfconsumption/wizards/selfconsumption_import_wizard.py
+++ b/energy_selfconsumption/wizards/selfconsumption_import_wizard.py
@@ -26,12 +26,18 @@ class SelfconsumptionImportWizard(models.TransientModel):
         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)
-        # check exist distribution table
-        distribution_table = self.env['energy_selfconsumption.distribution_table'].create({
-            'selfconsumption_project_id': project.id
-        })
+        parsing_errors = []
         for index, single_statement_data in enumerate(parsing_data[1:]):
-            self.import_single_statement(single_statement_data, distribution_table)
+            found = self.import_single_statement(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)))
         return True
 
     def _parse_file(self, data_file):
@@ -56,25 +62,25 @@ class SelfconsumptionImportWizard(models.TransientModel):
             logger.warning("Parser error", exc_info=True)
             raise UserError(_("Error parsing the file"))
 
-    def import_single_statement(self, line, distribution_table):
-        supply_point = self.env['energy_selfconsumption.supply_point'].search([('code', '=', line[0])])
-        if not supply_point:
-            supply_point = self.create_supply_point(
-                code=line[0],
-                street=line[2],
-                street2=line[3],
-                city=line[4],
-                state=line[5],
-                zip=line[6],
-                country=line[7],
-                owner_vat=line[9]
-            )
+    def import_single_statement(self, line, project):
+        partner = self.env['res.partner'].search([
+            ('vat', '=ilike', line[0])
+        ], limit=1)
 
-        self.env['energy_selfconsumption.supply_point_assignation'].create({
-            'supply_point_id': supply_point.id,
-            'distribution_table_id': distribution_table.id,
-            'coefficient': line[1]
-        })
+        if not partner:
+            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
 
     def create_supply_point(self, code, street, street2, city, state, zip, country, owner_vat):
         owner = self.env['res.partner'].search([('vat', '=', owner_vat)])
@@ -88,11 +94,10 @@ class SelfconsumptionImportWizard(models.TransientModel):
             'street': street,
             'street2': street2,
             'city': city,
-            'state_id': self.env['res.country.state'].search([('code', '=', state), ('country_id', '=', country.id)]).id,
+            'state_id': self.env['res.country.state'].search(
+                [('code', '=', state), ('country_id', '=', country.id)]).id,
             'zip': zip,
             'country_id': country.id,
             'owner_id': owner.id,
-            'cooperator_id': owner.id #TODO move it to other module
+            'cooperator_id': owner.id  # TODO move it to other module
         })
-
-
-- 
GitLab