From 06c0c7d18d2d13bf7c0f2455fa63cb6a8995598c Mon Sep 17 00:00:00 2001 From: emanuel buzey <emanuel.buzey@somit.coop> Date: Thu, 7 Mar 2024 13:33:04 +0100 Subject: [PATCH] [WIP] energy_selfconsumption: create import for distribution table variable --- .../models/distribution_table.py | 2 +- .../security/ir.model.access.csv | 3 ++ .../distribution_table_import_wizard.py | 47 ++++++++++++------- 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/energy_selfconsumption/models/distribution_table.py b/energy_selfconsumption/models/distribution_table.py index e6bf00cc4..0e106799f 100644 --- a/energy_selfconsumption/models/distribution_table.py +++ b/energy_selfconsumption/models/distribution_table.py @@ -171,7 +171,7 @@ class DistributionTableVariable(models.Model): class DistributionTableVariableCoefficient(models.Model): - _name = "energy_selfconsumption.distribution_table_variable_coefficient" + _name = "energy_selfconsumption.distribution_table_var_coeff" distribution_table_variable_id = fields.Many2one( "energy_selfconsumption.distribution_table_variable", diff --git a/energy_selfconsumption/security/ir.model.access.csv b/energy_selfconsumption/security/ir.model.access.csv index d5f33eed5..6d748f3cd 100644 --- a/energy_selfconsumption/security/ir.model.access.csv +++ b/energy_selfconsumption/security/ir.model.access.csv @@ -14,3 +14,6 @@ accces_energy_selfconsumption_coefficient_report,energy_selfconsumption.coeffici access_energy_selfconsumption_define_invoicing_mode_wizard_admin,energy_selfconsumption.define_invoicing_mode.wizard.admin,model_energy_selfconsumption_define_invoicing_mode_wizard,energy_project.group_admin,1,1,1,1 access_energy_selfconsumption_invoicing_wizard_admin,energy_selfconsumption.invoicing.wizard.admin,model_energy_selfconsumption_invoicing_wizard,energy_project.group_admin,1,1,1,1 access_energy_selfconsumption_distribution_table_fixed_admin,energy_selfconsumption.distribution_table_fixed.admin,model_energy_selfconsumption_distribution_table_fixed,energy_project.group_admin,1,1,1,1 +access_energy_selfconsumption_distribution_table_variable_admin,energy_selfconsumption.distribution_table_variable.admin,model_energy_selfconsumption_distribution_table_variable,energy_project.group_admin,1,1,1,1 +access_energy_selfconsumption_distribution_table_var_coeff_admin,energy_selfconsumption.distribution_table_var_coeff.admin,model_energy_selfconsumption_distribution_table_var_coeff,energy_project.group_admin,1,1,1,1 + diff --git a/energy_selfconsumption/wizards/distribution_table_import_wizard.py b/energy_selfconsumption/wizards/distribution_table_import_wizard.py index cb2d438cc..eeca1d7c3 100644 --- a/energy_selfconsumption/wizards/distribution_table_import_wizard.py +++ b/energy_selfconsumption/wizards/distribution_table_import_wizard.py @@ -10,6 +10,7 @@ from odoo import _, api, fields, models from odoo.exceptions import UserError, ValidationError from odoo.http import request + logger = logging.getLogger(__name__) @@ -45,21 +46,21 @@ class DistributionTableImportWizard(models.TransientModel): raise ValidationError(_("Only csv format files are accepted.")) def import_file_button(self): + # Button to import file, checks whether it is necessary to enqueue or not according to the type field 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") - distribution_table = self.env[ - "energy_selfconsumption.distribution_table" - ].browse(active_id) - type = self.env.context.get("type") - + distribution_table = self.env['energy_selfconsumption.distribution_table'].browse(active_id) + + type = distribution_table.type + if type == 'variable_schedule': - # Para 'variable_schedule', encola el trabajo - self.env['queue.job'].sudo().with_delay().import_all_lines(parsing_data, distribution_table.id) + # For 'variable_schedule', queue job + self.with_delay().import_all_lines(parsing_data, active_id) message = 'La importación de la programación variable se está procesando en segundo plano.' else: - # Para cualquier otro tipo, procesa de manera sÃncrona - self.import_all_lines(parsing_data, distribution_table) + # For other type, syncron type + self.import_all_lines(parsing_data, active_id) message = 'La importación ha finalizado.' return { @@ -114,7 +115,9 @@ class DistributionTableImportWizard(models.TransientModel): raise UserError(_("Error parsing the file")) def import_all_lines(self, data, distribution_table): - type = self.env.context.get("type") + logger.debug('Inicio de la importación para la Distribution Table con ID: %s', distribution_table) + type = self.env['energy_selfconsumption.distribution_table'].browse(distribution_table).type + logger.debug('El valor de type es: %s', type) if type == 'fixed': supply_point_assignation_values_list = [] @@ -127,29 +130,41 @@ class DistributionTableImportWizard(models.TransientModel): {"supply_point_assignation_ids": supply_point_assignation_values_list} ) elif type == 'variable_schedule': + logger.debug('Procesando importación tipo "variable_schedule"') DistributionTableVariable = self.env['energy_selfconsumption.distribution_table_variable'] - DistributionTableVariableCoefficient = self.env['energy_selfconsumption.distribution_table_variable_coefficient'] - + DistributionTableVariableCoefficient = self.env['energy_selfconsumption.distribution_table_var_coeff'] cups_ids = data[0][1:] # Get CUPS + logger.debug('CUPS IDs encontrados: %s', cups_ids) hours_data = data[1:] # Get hours and coefficients for cups_index, cups_id in enumerate(cups_ids, start=1): # Create or find the record in DistributionTableVariable for the current CUPS - variable_record, _ = DistributionTableVariable.find_or_create({ - 'distribution_table_id': distribution_table.id, - 'cups_id': cups_id, - }) + logger.debug('Procesando CUPS ID: %s', cups_id) + # Check if record exist + variable_record = DistributionTableVariable.search([ + ('distribution_table_id', '=', distribution_table), + ('cups_id', '=', cups_id), + ], limit=1) + + # If not exist, create + if not variable_record: + variable_record = DistributionTableVariable.create({ + 'distribution_table_id': distribution_table, + 'cups_id': cups_id, + }) # Proccess every hour and coefficient for this CUPS for row in hours_data: hour = int(row[0]) coefficient = float(row[cups_index]) # Get the coefficient for the current hour and CUPS + logger.debug('Añadiendo coeficiente %s para la hora %s del CUPS ID: %s', coefficient, hour, cups_id) # Create the coefficient record DistributionTableVariableCoefficient.create({ 'distribution_table_variable_id': variable_record.id, 'hour': hour, 'coefficient': coefficient, }) + logger.debug('Finalización de la importación para la Distribution Table con ID: %s', distribution_table) def get_supply_point_assignation_values(self, line): return { -- GitLab