Skip to content
Extraits de code Groupes Projets
Valider 9ecaf1a0 rédigé par Rémi - Le Filament's avatar Rémi - Le Filament
Parcourir les fichiers

[UPD] name parameters and fix dates

parent 467da72b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
# Copyright 2021- Le Filament (https://le-filament.com) # Copyright 2021- Le Filament (https://le-filament.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from datetime import datetime, time from datetime import datetime
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from odoo import _, models from odoo import _, fields, models
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from odoo.osv import expression from odoo.osv import expression
from odoo.tools import date_utils from odoo.tools import date_utils
...@@ -47,14 +47,16 @@ class AccOperation(models.Model): ...@@ -47,14 +47,16 @@ class AccOperation(models.Model):
start_date, end_date = self.get_interval("month", last_record) start_date, end_date = self.get_interval("month", last_record)
end_date_month = end_date + relativedelta(days=1) end_date_month = end_date + relativedelta(days=1)
query = ( query = (
self._select_clause("month", ["cons", "prod", "autocons"]) self._select_clause(
date_slot="month", curve_types=["cons", "prod", "autocons"]
)
+ self._from_clause() + self._from_clause()
+ self._where_clause( + self._where_clause(
self.id, operation_id=self.id,
start_date, start_date=start_date,
end_date_month, end_date=end_date_month,
) )
+ self._group_clause("month") + self._group_clause(date_slot="month")
+ self._order_clause() + self._order_clause()
) )
self.env.cr.execute(query) self.env.cr.execute(query)
...@@ -103,9 +105,8 @@ class AccOperation(models.Model): ...@@ -103,9 +105,8 @@ class AccOperation(models.Model):
""" """
# Convert end datetime to timezone # Convert end datetime to timezone
last_day_start = datetime.combine(cdc_record.date_slot, time.min) cdc_datetime = fields.Datetime.context_timestamp(self, cdc_record.date_slot)
last_day_end = datetime.combine(cdc_record.date_slot, time.max) start_month, end_month = date_utils.get_month(cdc_datetime)
start_month, end_month = date_utils.get_month(cdc_record.date_slot)
if scale == "year": if scale == "year":
end_date = end_month end_date = end_month
...@@ -114,11 +115,11 @@ class AccOperation(models.Model): ...@@ -114,11 +115,11 @@ class AccOperation(models.Model):
end_date = end_month end_date = end_month
start_date = start_month start_date = start_month
elif scale == "week": elif scale == "week":
end_date = last_day_end end_date = cdc_datetime.date()
start_date = last_day_end - relativedelta(days=7) start_date = cdc_datetime.date() - relativedelta(days=6)
elif scale == "day": elif scale == "day":
end_date = last_day_end end_date = cdc_datetime.date()
start_date = last_day_start start_date = cdc_datetime.date()
else: else:
raise ValueError( raise ValueError(
_( _(
...@@ -222,8 +223,8 @@ class AccOperation(models.Model): ...@@ -222,8 +223,8 @@ class AccOperation(models.Model):
Function to build WHERE section of query for retrieving curves Function to build WHERE section of query for retrieving curves
@param @param
int operation_id : id of operation for which curves should be retrieved int operation_id : id of operation for which curves should be retrieved
datetime start_date : first datetime to be retrieved date start_date : first date to be retrieved
datetime end_date : last datetime to be retrieved date end_date : last date to be retrieved
int prm_id : id of PRM to be retrieved (optional) int prm_id : id of PRM to be retrieved (optional)
char extra_curve_type : extra curve to be retrieved (optional) char extra_curve_type : extra curve to be retrieved (optional)
(allowed values : 'cons', 'autocons', 'allocons', (allowed values : 'cons', 'autocons', 'allocons',
...@@ -236,10 +237,13 @@ class AccOperation(models.Model): ...@@ -236,10 +237,13 @@ class AccOperation(models.Model):
and not isinstance(end_date, datetime) and not isinstance(end_date, datetime)
): ):
raise ValidationError(_("WHERE clause parameters incorrect")) raise ValidationError(_("WHERE clause parameters incorrect"))
start_datetime = self._convert_time(start_date)
end_datetime = self._convert_time(end_date)
result = f""" result = f"""
WHERE cdc.acc_operation_id = {operation_id} WHERE cdc.acc_operation_id = {operation_id}
AND cdc.date_slot >= '{start_date}' AND cdc.date_slot >= '{start_datetime}'
AND cdc.date_slot < '{end_date}' AND cdc.date_slot < '{end_datetime}'
""" """
if prm_id and isinstance(prm_id, int): if prm_id and isinstance(prm_id, int):
if extra_curve_type and extra_curve_type in ( if extra_curve_type and extra_curve_type in (
...@@ -303,13 +307,15 @@ class AccOperation(models.Model): ...@@ -303,13 +307,15 @@ class AccOperation(models.Model):
data_prod = [] data_prod = []
query = ( query = (
self._select_clause(slot_type, ["cons", "autocons", "prod"]) self._select_clause(
date_slot=slot_type, curve_types=["cons", "autocons", "prod"]
)
+ self._from_clause() + self._from_clause()
+ self._where_clause( + self._where_clause(
self.id, start_date, end_date, prm_id, "prod", partner_id self.id, start_date, end_date, prm_id, "prod", partner_id
) )
+ "AND cdc.comp_data_type IN ('autocons', 'cons', 'prod')" + "AND cdc.comp_data_type IN ('autocons', 'cons', 'prod')"
+ self._group_clause(slot_type) + self._group_clause(date_slot=slot_type)
+ self._order_clause() + self._order_clause()
) )
self.env.cr.execute(query) self.env.cr.execute(query)
...@@ -348,10 +354,16 @@ class AccOperation(models.Model): ...@@ -348,10 +354,16 @@ class AccOperation(models.Model):
data_allocons_histo = [] data_allocons_histo = []
query = ( query = (
self._select_clause("day", ["autocons", "allocons"]) self._select_clause(date_slot="day", curve_types=["autocons", "allocons"])
+ self._from_clause() + self._from_clause()
+ self._where_clause(self.id, start_date, end_date, prm_id, partner_id) + self._where_clause(
+ self._group_clause("day") operation_id=self.id,
start_date=start_date,
end_date=end_date,
prm_id=prm_id,
partner_id=partner_id,
)
+ self._group_clause(date_slot="day")
+ self._order_clause() + self._order_clause()
) )
...@@ -389,10 +401,18 @@ class AccOperation(models.Model): ...@@ -389,10 +401,18 @@ class AccOperation(models.Model):
data_surplus = [] data_surplus = []
query = ( query = (
self._select_clause(slot_type, ["autoprod", "surplus"]) self._select_clause(
date_slot=slot_type, curve_types=["autoprod", "surplus"]
)
+ self._from_clause() + self._from_clause()
+ self._where_clause(self.id, start_date, end_date, prm_id, partner_id) + self._where_clause(
+ self._group_clause(slot_type) operation_id=self.id,
start_date=start_date,
end_date=end_date,
prm_id=prm_id,
partner_id=partner_id,
)
+ self._group_clause(date_slot=slot_type)
+ self._order_clause() + self._order_clause()
) )
...@@ -428,10 +448,16 @@ class AccOperation(models.Model): ...@@ -428,10 +448,16 @@ class AccOperation(models.Model):
data_surplus_histo = [] data_surplus_histo = []
query = ( query = (
self._select_clause("day", ["autoprod", "surplus"]) self._select_clause(date_slot="day", curve_types=["autoprod", "surplus"])
+ self._from_clause() + self._from_clause()
+ self._where_clause(self.id, start_date, end_date, prm_id, partner_id) + self._where_clause(
+ self._group_clause("day") operation_id=self.id,
start_date=start_date,
end_date=end_date,
prm_id=prm_id,
partner_id=partner_id,
)
+ self._group_clause(date_slot="day")
+ self._order_clause() + self._order_clause()
) )
self.env.cr.execute(query) self.env.cr.execute(query)
...@@ -477,12 +503,12 @@ class AccOperation(models.Model): ...@@ -477,12 +503,12 @@ class AccOperation(models.Model):
""" """
Fonction appelée pour l'affichage des courbes globales Fonction appelée pour l'affichage des courbes globales
sur le portail sur le portail
:param: start_date: date début :param: date start_date: date début
end_date: date de fin date end_date: date de fin
partner_id: données uniquement de ce contact int partner_id: données uniquement de ce contact
prm_id: données uniquement de ce PRM (mutuellement exclusif de int prm_id: données uniquement de ce PRM (mutuellement exclusif de
partner_id) partner_id)
data_type: type de courbes à afficher: char data_type: type de courbes à afficher:
- "pmo" : vue globale (cons + prod sans filtrage) - "pmo" : vue globale (cons + prod sans filtrage)
- "cons" : vue mon suivi conso (avec filtrage possible) - "cons" : vue mon suivi conso (avec filtrage possible)
- "prod" : vue mon suivi production (avec filtrage possible) - "prod" : vue mon suivi production (avec filtrage possible)
...@@ -491,7 +517,7 @@ class AccOperation(models.Model): ...@@ -491,7 +517,7 @@ class AccOperation(models.Model):
self.ensure_one() self.ensure_one()
result_graph = {} result_graph = {}
start_date = datetime.strptime(start_date, "%d/%m/%Y") start_date = datetime.strptime(start_date, "%d/%m/%Y")
end_date = datetime.combine(datetime.strptime(end_date, "%d/%m/%Y"), time.max) end_date = datetime.strptime(end_date, "%d/%m/%Y") + relativedelta(days=1)
display_hourly_curves, step_curve, step_display_curve = self.get_step_from_date( display_hourly_curves, step_curve, step_display_curve = self.get_step_from_date(
start_date=start_date, end_date=end_date start_date=start_date, end_date=end_date
) )
......
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