diff --git a/__init__.py b/__init__.py index 957992f377d7ce8942a87238397684babc5eb305..1f538c8007e6965dee6c8b955f344ef90ee367a1 100644 --- a/__init__.py +++ b/__init__.py @@ -2,3 +2,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models +from . import wizards diff --git a/__manifest__.py b/__manifest__.py index aba5a9f0312defc135479849a58b45b36b184374..178e51e2dae796d4ec9974524ccdc1b3c97673b1 100755 --- a/__manifest__.py +++ b/__manifest__.py @@ -12,11 +12,12 @@ "security/ir.model.access.csv", # datas 'data/service_cron.xml', + 'wizards/enercoop_operation_wizard_views.xml', # views 'views/res_config_settings_views.xml', - 'views/enercoop_operation_views.xml' + 'views/enercoop_operation_views.xml', # views menu - # wizard + ], 'qweb': [ # "static/src/xml/*.xml", diff --git a/models/api_enedis.py b/models/api_enedis.py index 8f372e0b64c812d5ebbf645d276e3e51d4a524f7..138d1042f23679041c9788803b33584f5dcb8de6 100644 --- a/models/api_enedis.py +++ b/models/api_enedis.py @@ -141,9 +141,9 @@ class ApiEnedis(models.AbstractModel): url = 'v1/collective_self_consumption/agreements/' + self.name + '/definitive_load_curves' if usage_point_name: - name = usage_point_name + '_' + date_start + '_' + date_end + '_' + type + name = usage_point_name + '_' + str(date_start) + '_' + str(date_end) + '_' + type else: - name = self.name + '_' + date_start + '_' + date_end + '_' + type + name = self.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type log_id = self.env['enercoop.enedis.import.logs'].search([ ('name', '=', name), @@ -188,12 +188,14 @@ class ApiEnedis(models.AbstractModel): # Get the counter ID from data counter_id = self.env['enercoop.counter'] if usage_point_name: - counter_id = self.env['enercoop.counter'].search([('name', '=', usage_point_name)]) + counter_id = self.env['enercoop.counter'].search([ + ('name', '=', usage_point_name), + ('enercoop_operation_id', '=', self.id)]) type = curve['type'] if counter_id: - name = counter_id.name + '_' + date_start + '_' + date_end + '_' + type + name = counter_id.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type else: - name = self.name + '_' + date_start + '_' + date_end + '_' + type + name = self.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type for point in curve['interval_reading']: date_slot = datetime.strptime(point['timestamp'], "%Y-%m-%dT%H:%M:%SZ") @@ -237,4 +239,30 @@ class ApiEnedis(models.AbstractModel): 'date_start_contract': date.fromisoformat(usage_point['start']), 'date_end_contract': date.fromisoformat(usage_point['end']), }) + else: + prm_id = self.env['enercoop.counter'].search([ + ('enercoop_operation_id', '=', self.id), + ('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 + + prm_id = self.env['enercoop.counter'].create({ + 'name': usage_point['usage_point_id'], + 'enercoop_operation_id': self.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, + 'date_start_contract': date.fromisoformat(usage_point['start']), + 'date_end_contract': date.fromisoformat(usage_point['end']), + }) + return True \ No newline at end of file diff --git a/models/enercoop_operation.py b/models/enercoop_operation.py index 400af842423ea1480c978210fd5392525f1e763a..e992b80c59c224c5f4568213522fa86f3a923999 100644 --- a/models/enercoop_operation.py +++ b/models/enercoop_operation.py @@ -40,12 +40,13 @@ class EnercoopOperation(models.Model): ''' This method is called from a cron job. It is used to get data from Enedis with API. ''' - date_month_before = date.today() - relativedelta(months=1) - records = self.search([ - ('date_start_contract', '=', date_month_before), - ('date_end_contract', '>=', fields.Date.context_today(self)), - ]) - records._get_curves(date_month_before) + if date.today() == last_day_of_month(date.today()): + date_month_before = date.today() - relativedelta(months=1) + records = self.search([ + ('birthday_date', '=', date_month_before.day), + ('date_end_contract', '>=', fields.Date.context_today(self)), + ]) + records._get_curves(date_month_before) def _get_curves(self, date_month_before): for operation in self: @@ -76,3 +77,6 @@ class EnercoopOperation(models.Model): # ------------------------------------------------------ # Business methods # ------------------------------------------------------ + def last_day_of_month(date_value): + return date_value.replace(day=monthrange(date_value.year, date_value.month)[1]) + diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index c2664139141d271dbe50be1f018d7945c03bd413..997c8456d60a3b419293979a406c98a68ed7de18 100755 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,3 +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 \ No newline at end of file +"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 diff --git a/views/enercoop_operation_views.xml b/views/enercoop_operation_views.xml index b8cff8e9d146a933cd13724d9ad5342f5cf67608..95c781dbe9375dce6fa6d385fa579d3d9c429cb3 100644 --- a/views/enercoop_operation_views.xml +++ b/views/enercoop_operation_views.xml @@ -8,8 +8,11 @@ <field name="inherit_id" ref="enercoop_partner.enercoop_operation_form_view"/> <field name="arch" type="xml"> <header position="inside"> - <button string="Récupération des courbes" type="object" class="btn-primary" name="get_curves"/> - <button string="Périmètre" type="object" class="btn-primary" name="get_perimeter"/> + <button + string="Récupération des courbes" + type="action" + name="%(enercoop_enedis_api.enercoop_operation_wizard_action)d"/> + <button string="Périmètre" type="object" name="get_perimeter" attrs="{'invisible':[('client_id','=', False), ('secret_id','=', False)]}"/> </header> <xpath expr="//notebook" position="inside"> <page string="API Enedis" name="api"> diff --git a/wizards/enercoop_operation_wizard.py b/wizards/enercoop_operation_wizard.py index 4ac24629aba321ae06c3d2177974d93f81d17834..908f6f05cc0a36b55cb3703558261830f2b0f6a2 100644 --- a/wizards/enercoop_operation_wizard.py +++ b/wizards/enercoop_operation_wizard.py @@ -38,8 +38,10 @@ class EnercoopOperationWizard(models.TransientModel): # Actions # ------------------------------------------------------ def get_curves(self): - for operation in self: - return True + 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) + return {'type': 'ir.actions.act_window_close'} # ------------------------------------------------------ # Business methods # ------------------------------------------------------