From e96398435538f27b3ebb62b073613db7e63e64cb Mon Sep 17 00:00:00 2001 From: Juliana <juliana@le-filament.com> Date: Mon, 10 Jan 2022 18:00:12 +0100 Subject: [PATCH] [UPD]adapt with acc --- README.rst | 8 +- __manifest__.py | 10 +- data/service_cron.xml | 4 +- models/__init__.py | 2 +- ...enercoop_operation.py => acc_operation.py} | 19 ++-- models/api_enedis.py | 104 ++++++++---------- security/ir.model.access.csv | 4 +- ...tion_views.xml => acc_operation_views.xml} | 10 +- views/res_config_settings_views.xml | 16 +-- wizards/__init__.py | 2 +- ...tion_wizard.py => acc_operation_wizard.py} | 6 +- ...ews.xml => acc_operation_wizard_views.xml} | 12 +- 12 files changed, 90 insertions(+), 107 deletions(-) rename models/{enercoop_operation.py => acc_operation.py} (77%) rename views/{enercoop_operation_views.xml => acc_operation_views.xml} (75%) rename wizards/{enercoop_operation_wizard.py => acc_operation_wizard.py} (89%) rename wizards/{enercoop_operation_wizard_views.xml => acc_operation_wizard_views.xml} (68%) diff --git a/README.rst b/README.rst index 5b135fc..e91ea20 100755 --- a/README.rst +++ b/README.rst @@ -3,15 +3,15 @@ :alt: License: AGPL-3 -===================== -ENERCOOP - API Enedis -===================== +================ +ACC - API Enedis +================ Description =========== Ce module implémente les fonctions pour l'API Enedis en utilisant le webservice mis à disposition. -Il ajoute un nouveau modèle abstract qui définient les fonctions de connexion, de récupération des données. +Il ajoute un nouveau modèle abstract qui définie les fonctions de connexion et de récupération des données. Usage ===== diff --git a/__manifest__.py b/__manifest__.py index 178e51e..503610f 100755 --- a/__manifest__.py +++ b/__manifest__.py @@ -1,21 +1,21 @@ { - 'name': "ENERCOOP - API Enedis", + 'name': "ACC - API Enedis", 'summary': "API Enedis", 'author': "Le Filament", 'website': "https://www.le-filament.com", - 'version': '12.0.1.0.1', + 'version': '14.0.1.0.1', 'license': "AGPL-3", 'depends': [ - 'enercoop_partner' + 'acc_operation' ], 'data': [ "security/ir.model.access.csv", # datas 'data/service_cron.xml', - 'wizards/enercoop_operation_wizard_views.xml', + 'wizards/acc_operation_wizard_views.xml', # views 'views/res_config_settings_views.xml', - 'views/enercoop_operation_views.xml', + 'views/acc_operation_views.xml', # views menu ], diff --git a/data/service_cron.xml b/data/service_cron.xml index a3e741e..fc769c9 100644 --- a/data/service_cron.xml +++ b/data/service_cron.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> <record id="ir_cron_auto_get_enedis_data" model="ir.cron"> - <field name="name">Enercoop - Get data API Enedis</field> + <field name="name">App - Get data API Enedis</field> <field name="interval_number">1</field> <field name="interval_type">days</field> <field name="numbercall">-1</field> <field name="doall" eval="False"/> - <field name="model_id" ref="enercoop_partner.model_enercoop_operation"/> + <field name="model_id" ref="acc_operation.model_acc_operation"/> <field name="code">model._auto_get_enedis_data()</field> <field name="state">code</field> </record> diff --git a/models/__init__.py b/models/__init__.py index b02c98e..4a09f0a 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -4,4 +4,4 @@ from . import res_company from . import res_config_settings from . import api_enedis -from . import enercoop_operation +from . import acc_operation diff --git a/models/enercoop_operation.py b/models/acc_operation.py similarity index 77% rename from models/enercoop_operation.py rename to models/acc_operation.py index 769145a..0429a64 100644 --- a/models/enercoop_operation.py +++ b/models/acc_operation.py @@ -6,9 +6,9 @@ from datetime import datetime, date from dateutil.relativedelta import relativedelta -class EnercoopOperation(models.Model): - _name = 'enercoop.operation' - _inherit = ['enercoop.operation', 'api.enedis'] +class AccOperation(models.Model): + _name = 'acc.operation' + _inherit = ['acc.operation', 'api.enedis'] # ------------------------------------------------------ # Fields declaration @@ -61,17 +61,14 @@ class EnercoopOperation(models.Model): def get_curves(self, date_start, date_end): # Ask token to API token = self.access_token() + # Load consommation data by PRM - for delivery_counter_id in self.enercoop_delivery_operation_ids: - self.definitive_load_curves(date_start, date_end, 'cons', delivery_counter_id.enercoop_counter_id, token=token) - self.definitive_load_curves(date_start, date_end, 'autocons', delivery_counter_id.enercoop_counter_id, token=token) + for delivery_counter_id in self.acc_delivery_ids: + self.definitive_load_curves(date_start, date_end, delivery_counter_id, token=token) # Load production data by PRM - for injection_counter_id in self.enercoop_injection_operation_ids: - self.definitive_load_curves(date_start, date_end, 'prod', injection_counter_id.enercoop_counter_id, token=token) - - # Load surplus data by operation - self.definitive_load_curves(date_start, date_end, 'surplus', usage_point_id=None, token=token) + for injection_counter_id in self.acc_injection_ids: + self.definitive_load_curves(date_start, date_end, injection_counter_id, token=token) def get_perimeter(self): for operation in self: diff --git a/models/api_enedis.py b/models/api_enedis.py index 2bd7faa..fcede75 100644 --- a/models/api_enedis.py +++ b/models/api_enedis.py @@ -30,7 +30,7 @@ class ApiEnedis(models.AbstractModel): url_enedis = self.env.user.company_id.url_enedis if not url_enedis: raise UserError( - "L'API n'est pas configurée. Veuillez rentrer l'URL de l'API dans Enercoop -> Configuration -> Configuration") + "L'API n'est pas configurée. Veuillez rentrer l'URL de l'API dans app -> Configuration -> Configuration") client_id = self.client_id secret_id = self.secret_id auth = _basic_auth_str(client_id, secret_id) @@ -128,13 +128,11 @@ class ApiEnedis(models.AbstractModel): message)) return response - def definitive_load_curves(self, date_start, date_end, type, usage_point_id=None, token=None): + def definitive_load_curves(self, date_start, date_end, usage_point_id=None, token=None): """ Fonction permettant d'appeler l'API Enedis et retourne les courbes - de chare en fonction d'un intervalle de date et d'un type + de chare en fonction d'un intervalle de date :param date_start: une date de début date_end: une date de fin - type: type de courbe à récupérer - (cons/autocons/surplus/prod) usage_point_id: id du PRM :return Retourner les courbes de charge à la maille d'une opération ou @@ -143,20 +141,20 @@ class ApiEnedis(models.AbstractModel): url = 'v1/collective_self_consumption/agreements/' + self.name + '/definitive_load_curves' if usage_point_id: - name = usage_point_id.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type + name = usage_point_id.name + '_' + str(date_start) + '_' + str(date_end) else: - name = self.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type + name = self.name + '_' + str(date_start) + '_' + str(date_end) - log_id = self.env['enercoop.enedis.cdc'].search([ + log_id = self.env['acc.enedis.cdc'].search([ ('name', '=', name), - ('enercoop_operation_id', '=', self.id) + ('acc_operation_id', '=', self.id) ]) if not log_id: - self.load_data(url, date_start, date_end, type, usage_point_id=usage_point_id, token=token) + self.load_data(url, date_start, date_end, usage_point_id=usage_point_id, token=token) return True - def load_data(self, url, date_start, date_end, type_courbe=None, usage_point_id=None, token=None): + def load_data(self, url, date_start, date_end, usage_point_id=None, token=None): """ Read function :param url : URL à appeler date_start: une date de début @@ -180,7 +178,7 @@ class ApiEnedis(models.AbstractModel): # Date de fin de la période souhaitée.La date est incluse dans la période 'end': date_end, # Type de la courbe (enum) - 'type': type_courbe, + "type": ['cons,autocons,surplus,prod,complement'], # Identifiant du PRM 'usage_point_id': usage_point_name } @@ -192,26 +190,21 @@ class ApiEnedis(models.AbstractModel): # get the data curves = response.json().get('curves') + + if curves: + name = usage_point_id.name + '_' + str(date_start) + '_' + str(date_end) for curve in curves: type = curve['type'] - if usage_point_id: - name = usage_point_id.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type - else: - name = self.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type - domain_all = [ ('date_slot', '>=', date_start), ('date_slot', '<=', date_end), - ('enercoop_operation_id', '=', self.id), + ('acc_operation_id', '=', self.id), ('comp_data_type', '=', type), ] - if counter_id: - domain_prm = domain_all + [('enercoop_counter_id', '=', counter_id)] - else: - domain_prm = domain_all + [('enercoop_counter_id', '=', False)] + domain_prm = domain_all + [('acc_counter_id', '=', counter_id)] - enercoop_enedis_cdc_ids = self.env['enercoop.enedis.cdc'].search(domain_prm) + acc_enedis_cdc_ids = self.env['acc.enedis.cdc'].search(domain_prm) record_created = False @@ -219,12 +212,12 @@ class ApiEnedis(models.AbstractModel): date_slot = pytz.utc.localize(datetime.strptime(point['timestamp'], "%Y-%m-%dT%H:%M:%SZ")) date_slot3 = fields.Datetime.to_string(date_slot) - record = enercoop_enedis_cdc_ids.filtered(lambda l: l.date_slot == fields.Datetime.to_datetime(date_slot3)) + record = acc_enedis_cdc_ids.filtered(lambda l: l.date_slot == fields.Datetime.to_datetime(date_slot3)) if not record: - self.env['enercoop.enedis.cdc'].create({ + self.env['acc.enedis.cdc'].create({ 'name': name, - 'enercoop_operation_id': self.id, - 'enercoop_counter_id': counter_id or False, + 'acc_operation_id': self.id, + 'acc_counter_id': counter_id or False, 'comp_data_type': type, 'power': point['value'], 'date_slot': date_slot3, @@ -232,13 +225,13 @@ class ApiEnedis(models.AbstractModel): record_created = True - if record_created: - # Logs information loaded - self.env['enercoop.enedis.import.logs'].create({ - 'name': name, - 'enercoop_operation_id': self.id, - }) - self.is_data_enedis = True + if record_created: + # Logs information loaded + self.env['acc.enedis.import.logs'].create({ + 'name': name, + 'acc_operation_id': self.id, + }) + self.is_data_enedis = True def perimeter(self): """ Fonction permettant d'appeler l'API Enedis et retourne le périmètre @@ -258,39 +251,32 @@ class ApiEnedis(models.AbstractModel): usage_points = response.json().get('usage_points') for usage_point in usage_points: - usage_id = self.env['enercoop.counter.operation'].search([ - ('operation_id', '=', self.id), - ('enercoop_counter_id', '=', usage_point['usage_point_id'])]) + usage_id = self.env['acc.counter'].search([ + ('acc_operation_id', '=', self.id), + ('name', '=', usage_point['usage_point_id'])]) if usage_id: usage_id.write({ 'date_start_contract': date.fromisoformat(usage_point['start']), 'date_end_contract': date.fromisoformat(usage_point['end']), }) else: - prm_id = self.env['enercoop.counter'].search([ - ('name', '=', usage_point['usage_point_id'])]) - if not prm_id: - is_delivery = False - is_injection = False - if usage_point['type'] == 'CONS': - is_delivery = True - if usage_point['type'] == 'PROD': - is_injection = True - self.date_start_contract = date.fromisoformat(usage_point['start']) - self.date_end_contract = date.fromisoformat(usage_point['end']) - - prm_id = self.env['enercoop.counter'].create({ - 'name': usage_point['usage_point_id'], - 'is_delivery': is_delivery, - 'is_injection': is_injection, - }) - - self.env['enercoop.counter.operation'].create({ - 'enercoop_counter_id': prm_id.id, - 'operation_id': self.id, + is_delivery = False + is_injection = False + if usage_point['type'] == 'CONS': + is_delivery = True + if usage_point['type'] == 'PROD': + is_injection = True + self.date_start_contract = date.fromisoformat(usage_point['start']) + self.date_end_contract = date.fromisoformat(usage_point['end']) + + prm_id = self.env['acc.counter'].create({ + 'name': usage_point['usage_point_id'], + 'is_delivery': is_delivery, + 'is_injection': is_injection, + 'acc_operation_id': self.id, 'date_start_contract': date.fromisoformat(usage_point['start']), 'date_end_contract': date.fromisoformat(usage_point['end']), - 'partner_id': prm_id.partner_id.id or None }) + return True diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 997c845..1e804f3 100755 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,5 +1,5 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink "access_api_enedis_group_partner_manager","api_enedis group_partner_manager","model_api_enedis","base.group_partner_manager",1,1,1,1 "access_api_enedis_group_user","api_enedis group_user","model_api_enedis","base.group_user",1,0,0,0 -"access_enercoop_operation_wizard_group_partner_manager","enercoop_operation_wizard group_partner_manager","model_enercoop_operation_wizard","base.group_partner_manager",1,1,1,1 -"access_enercoop_operation_wizard_group_user","enercoop_operation_wizard group_user","model_enercoop_operation_wizard","base.group_user",1,0,0,0 \ No newline at end of file +"access_acc_operation_wizard_group_partner_manager","acc_operation_wizard group_partner_manager","model_acc_operation_wizard","base.group_partner_manager",1,1,1,1 +"access_acc_operation_wizard_group_user","acc_operation_wizard group_user","model_acc_operation_wizard","base.group_user",1,0,0,0 \ No newline at end of file diff --git a/views/enercoop_operation_views.xml b/views/acc_operation_views.xml similarity index 75% rename from views/enercoop_operation_views.xml rename to views/acc_operation_views.xml index 26c39bb..39a6bde 100644 --- a/views/enercoop_operation_views.xml +++ b/views/acc_operation_views.xml @@ -2,10 +2,10 @@ <odoo> <data> - <record id="enercoop_operation_form_view" model="ir.ui.view"> - <field name="name">enercoop_operation_form_view.api.form</field> - <field name="model">enercoop.operation</field> - <field name="inherit_id" ref="enercoop_partner.enercoop_operation_form_view"/> + <record id="acc_operation_form_view" model="ir.ui.view"> + <field name="name">acc_operation_form_view.api.form</field> + <field name="model">acc.operation</field> + <field name="inherit_id" ref="acc_operation.acc_operation_form_view"/> <field name="arch" type="xml"> <header position="inside"> <button @@ -16,7 +16,7 @@ <button string="Récupération des courbes" type="action" - name="%(enercoop_enedis_api.enercoop_operation_wizard_action)d" + name="%(acc_enedis_api.acc_operation_wizard_action)d" attrs="{'invisible':[('client_id','=', False), ('secret_id','=', False)]}" /> </header> diff --git a/views/res_config_settings_views.xml b/views/res_config_settings_views.xml index 29c48bc..8bcbd5b 100644 --- a/views/res_config_settings_views.xml +++ b/views/res_config_settings_views.xml @@ -2,15 +2,15 @@ <odoo> <record id="res_config_settings_view_form" model="ir.ui.view"> - <field name="name">res.config.settings.view.form.inherit.enercoop</field> + <field name="name">res.config.settings.view.form.inherit.app</field> <field name="model">res.config.settings</field> <field name="priority" eval="10"/> <field name="inherit_id" ref="base.res_config_settings_view_form" /> <field name="arch" type="xml"> <xpath expr="//div[hasclass('settings')]" position="inside"> - <div class="app_settings_block" data-string="Enercoop" string="Enercoop" data-key="enercoop_enedis_api"> + <div class="acc_settings_block" data-string="ACC" string="ACC" data-key="acc_enedis_api"> <h2>Connexion Enedis</h2> - <div class="row mt16 o_settings_container" id="enercoop_selection_settings"> + <div class="row mt16 o_settings_container" id="acc_selection_settings"> <div class="col-12 col-lg-6 o_setting_box" id="url_enedis"> <div class="o_setting_right_pane"> <label string="URL" for="url_enedis"/> @@ -28,21 +28,21 @@ </field> </record> - <record id="action_enercoop_config_settings" model="ir.actions.act_window"> + <record id="action_acc_config_settings" model="ir.actions.act_window"> <field name="name">Configuration</field> <field name="type">ir.actions.act_window</field> <field name="res_model">res.config.settings</field> <field name="view_id" ref="res_config_settings_view_form"/> <field name="view_mode">form</field> <field name="target">inline</field> - <field name="context">{'module' : 'enercoop_enedis_api', 'bin_size': False}</field> + <field name="context">{'module' : 'acc_enedis_api', 'bin_size': False}</field> </record> - <menuitem id="menu_enercoop_general_settings" + <menuitem id="menu_acc_general_settings" name="Configuration" - parent="enercoop_partner.menu_enercoop_config" + parent="acc_operation.menu_acc_config" sequence="0" - action="action_enercoop_config_settings" + action="action_acc_config_settings" groups="base.group_system"/> </odoo> diff --git a/wizards/__init__.py b/wizards/__init__.py index 93cab0b..2db9426 100644 --- a/wizards/__init__.py +++ b/wizards/__init__.py @@ -1,4 +1,4 @@ # Copyright 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import enercoop_operation_wizard +from . import acc_operation_wizard diff --git a/wizards/enercoop_operation_wizard.py b/wizards/acc_operation_wizard.py similarity index 89% rename from wizards/enercoop_operation_wizard.py rename to wizards/acc_operation_wizard.py index 3e31665..b3cd7fd 100644 --- a/wizards/enercoop_operation_wizard.py +++ b/wizards/acc_operation_wizard.py @@ -5,8 +5,8 @@ from odoo import fields, models from odoo.exceptions import UserError -class EnercoopOperationWizard(models.TransientModel): - _name = 'enercoop.operation.wizard' +class appOperationWizard(models.TransientModel): + _name = 'acc.operation.wizard' _description = "Récupération des courbes pour une date donnée" # ------------------------------------------------------ @@ -44,7 +44,7 @@ class EnercoopOperationWizard(models.TransientModel): "L'intervalle de temps ne doit pas dépasser 31 Jours") context = dict(self._context or {}) if context.get('active_ids', False): - self.env['enercoop.operation'].browse(context.get('active_ids')).get_curves(self.date_start, self.date_end) + self.env['acc.operation'].browse(context.get('active_ids')).get_curves(self.date_start, self.date_end) return {'type': 'ir.actions.act_window_close'} # ------------------------------------------------------ # Business methods diff --git a/wizards/enercoop_operation_wizard_views.xml b/wizards/acc_operation_wizard_views.xml similarity index 68% rename from wizards/enercoop_operation_wizard_views.xml rename to wizards/acc_operation_wizard_views.xml index fd6f30a..bdd9029 100644 --- a/wizards/enercoop_operation_wizard_views.xml +++ b/wizards/acc_operation_wizard_views.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <odoo> <!-- WIZARD FORM --> - <record id="enercoop_operation_wizard_view_form" model="ir.ui.view"> - <field name="name">enercoop.operation.wizard.form</field> - <field name="model">enercoop.operation.wizard</field> + <record id="acc_operation_wizard_view_form" model="ir.ui.view"> + <field name="name">acc.operation.wizard.form</field> + <field name="model">acc.operation.wizard</field> <field name="arch" type="xml"> <form string="Choix de la période"> <group name="period" string="Période" col="2"> @@ -18,12 +18,12 @@ </field> </record> - <record id="enercoop_operation_wizard_action" model="ir.actions.act_window"> + <record id="acc_operation_wizard_action" model="ir.actions.act_window"> <field name="name">Récupération des courbes</field> <field name="type">ir.actions.act_window</field> - <field name="res_model">enercoop.operation.wizard</field> + <field name="res_model">acc.operation.wizard</field> <field name="view_mode">form</field> - <field name="view_id" ref="enercoop_operation_wizard_view_form"/> + <field name="view_id" ref="acc_operation_wizard_view_form"/> <field name="target">new</field> </record> -- GitLab