Skip to content
Extraits de code Groupes Projets
Valider 29512263 rédigé par Juliana's avatar Juliana
Parcourir les fichiers

Add Cron function + rebuild function

parent 24a811df
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -11,6 +11,7 @@
'data': [
"security/ir.model.access.csv",
# datas
'data/service_cron.xml',
# views
'views/res_config_settings_views.xml',
'views/enercoop_operation_views.xml'
......
<?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="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="code">model._auto_get_enedis_data()</field>
<field name="state">code</field>
</record>
</odoo>
......@@ -126,7 +126,7 @@ class ApiEnedis(models.AbstractModel):
message))
return response
def definitive_load_curves(self, date_start, date_end, usage_point_id=None):
def definitive_load_curves(self, date_start, date_end, type, usage_point_name=None):
""" Read function
:param usage_point_id: id du PRM
@return object: Retourner les courbes de charge
......@@ -135,14 +135,17 @@ class ApiEnedis(models.AbstractModel):
"""
url = 'v1/collective_self_consumption/agreements/' + self.name + '/definitive_load_curves'
type_cdc = ['cons', 'autocons']
for type_courbe in type_cdc:
for delivery_counter_id in self.enercoop_delivery_operation_ids:
self.load_data(url, date_start, date_end, type_courbe, delivery_counter_id.enercoop_counter_id.name)
if usage_point_name:
name = usage_point_name + '_' + date_start + '_' + date_end + '_' + type
else:
name = self.name + '_' + date_start + '_' + date_end + '_' + type
type_cdc = ['prod', 'surplus']
for type_courbe in type_cdc:
self.load_data(url, date_start, date_end, type_courbe, None)
log_id = self.env['enercoop.enedis.import.logs'].search([
('name', '=', name),
('enercoop_operation_id', '=', self.id)
])
if not log_id:
self.load_data(url, date_start, date_end, type, usage_point_name)
return True
......@@ -160,7 +163,6 @@ class ApiEnedis(models.AbstractModel):
'end': date_end,
# Type de la courbe (enum)
'type': type_courbe,
# 'type': ['prod', 'autocons', 'surplus', 'complement', 'cons'],
# Identifiant du PRM
'usage_point_id': usage_point_id
}
......@@ -182,6 +184,7 @@ class ApiEnedis(models.AbstractModel):
name = counter_id.name + '_' + date_start + '_' + date_end + '_' + type
else:
name = self.name + '_' + date_start + '_' + date_end + '_' + type
for point in curve['interval_reading']:
date_slot = datetime.strptime(point['timestamp'], "%Y-%m-%dT%H:%M:%SZ")
self.env['enercoop.enedis.cdc'].create({
......@@ -193,6 +196,12 @@ class ApiEnedis(models.AbstractModel):
'date_slot': date_slot,
})
# Logs information loaded
self.env['enercoop.enedis.import.logs'].create({
'name': name,
'enercoop_operation_id': self.id,
})
def perimeter(self):
""" Read function
@return object: Retourne le périmètre d'une opération donnée
......
......@@ -2,6 +2,8 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models, api
from datetime import datetime, date
from dateutil.relativedelta import relativedelta
class EnercoopOperation(models.Model):
......@@ -33,22 +35,40 @@ class EnercoopOperation(models.Model):
# ------------------------------------------------------
# CRUD methods (ORM overrides)
# ------------------------------------------------------
@api.model
def _auto_get_enedis_data(self):
''' 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)
def _get_curves(self, date_month_before):
for operation in self:
yesterday = date.today() - relativedelta(days=1)
operation.get_curves(date_month_before, yesterday)
# ------------------------------------------------------
# Actions
# ------------------------------------------------------
def get_curves(self):
# action = self.env['ir.actions.act_window']._for_xml_id('enercoop_api.enercoop_operation_wizard_action')
# # Force the values of the move line in the context to avoid issues
# ctx = dict(self.env.context)
# ctx.pop('active_id', None)
# ctx['active_ids'] = self.ids
# # ctx['active_model'] = 'account.move.line'
# action['context'] = ctx
# return action
for operation in self:
res = operation.definitive_load_curves('2021-03-09', '2021-04-08')
return res
def get_curves(self, date_start, date_end):
# 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.name)
self.definitive_load_curves(date_start, date_end, 'autocons', delivery_counter_id.enercoop_counter_id.name)
# 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.name)
# Load surplus data by operation
self.definitive_load_curves(date_start, date_end, 'surplus', None)
# self.definitive_load_curves(date_start, date_end)
def get_perimeter(self):
for operation in self:
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter