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

[ADD] check dates depending on partner

parent aaf608ff
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -9,8 +9,6 @@ from odoo.exceptions import ValidationError
from odoo.osv import expression
from odoo.tools import date_utils
DEFAULT_MONTH_RANGE = 3
class AccOperation(models.Model):
_inherit = "acc.operation"
......@@ -49,7 +47,9 @@ class AccOperation(models.Model):
start_date, end_date = self.get_interval("month", last_record)
query = """
SELECT
date_trunc('month', cdc.date_slot) AS date_slot,
date_trunc('month',
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
) AS date_slot,
(SUM( (CASE
WHEN cdc.comp_data_type = 'cons' THEN cdc.power
ELSE 0 END) )/2) / 1000 as conso_tot,
......@@ -67,7 +67,8 @@ class AccOperation(models.Model):
cdc.acc_operation_id = %s
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
GROUP BY date_trunc('month', cdc.date_slot);
GROUP BY date_trunc('month',
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris');
"""
query_params = (
self.id,
......@@ -78,18 +79,19 @@ class AccOperation(models.Model):
raw_data = self.env.cr.fetchone()
return raw_data[1], raw_data[2], raw_data[3], start_date
def get_last_cdc_record(self):
def get_last_cdc_record(self, partner_id=None):
"""
@returns: last acc.enedis.cdc record in operations
"""
domain = [("acc_operation_id", "in", self.ids)]
if partner_id:
domain = expression.AND([domain, [("partner_id", "=", partner_id)]])
# Get last date slot recorded
last_record = (
self.env["acc.enedis.cdc"]
.sudo()
.search(
[
("acc_operation_id", "in", self.ids),
],
domain,
limit=1,
order="date_slot DESC",
)
......@@ -100,7 +102,7 @@ class AccOperation(models.Model):
return last_record
def get_interval(self, scale, last_record):
def get_interval(self, scale, cdc_record):
"""
Fonction retournant une date de début et une date de fin.
Ces dates sont calculées en fonction de l'échelle choisie et du dernier
......@@ -114,14 +116,14 @@ class AccOperation(models.Model):
date de début = début de l'année du dernier jour de données
:param str scale: type d'affichage des graphes
(day/week/month/year)
:param object last_record: Dernier enregistrement dans la base
:param object cdc_record: courbe de charge (table acc.enedis.cdc)
@returns: une date de début et une date de fin
"""
# Convert end datetime to timezone
last_day_start = datetime.combine(last_record.date_slot, time.min)
last_day_end = datetime.combine(last_record.date_slot, time.max)
start_month, end_month = date_utils.get_month(last_record.date_slot)
last_day_start = datetime.combine(cdc_record.date_slot, time.min)
last_day_end = datetime.combine(cdc_record.date_slot, time.max)
start_month, end_month = date_utils.get_month(cdc_record.date_slot)
if scale == "year":
end_date = end_month
......@@ -160,13 +162,13 @@ class AccOperation(models.Model):
step_display_curve = "hour"
# Calculate delta between 2 dates
delta = (end_date - start_date).days
if delta > 1 and delta < 32:
if delta > 0 and delta < 31:
step_display_curve = "day"
display_hourly_curves = True
elif delta >= 32 and delta <= 366:
elif delta >= 31 and delta <= 365:
step = "month"
step_display_curve = "month"
elif delta > 366:
elif delta > 365:
step = "year"
step_display_curve = "year"
......@@ -194,7 +196,9 @@ class AccOperation(models.Model):
query = """
SELECT
date_trunc(%s, cdc.date_slot) AS date_slot,
date_trunc(%s,
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
) AS date_slot,
(SUM( (CASE
WHEN cdc.comp_data_type = 'cons'
THEN cdc.power ELSE 0 END) )/2) / 1000 as cons,
......@@ -213,7 +217,8 @@ class AccOperation(models.Model):
AND ( cdc.acc_counter_id IN %s OR cdc.comp_data_type = 'prod' )
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
GROUP BY date_trunc(%s, cdc.date_slot)
GROUP BY date_trunc(%s,
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
ORDER BY date_slot ASC;
"""
query_params = (
......@@ -258,7 +263,9 @@ class AccOperation(models.Model):
query = """
SELECT
date_trunc('day', cdc.date_slot) AS date_slot,
date_trunc('day',
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
) AS date_slot,
(SUM( (CASE
WHEN cdc.comp_data_type = 'autocons'
THEN cdc.power ELSE 0 END) )/2) / 1000 as autocons,
......@@ -275,7 +282,8 @@ class AccOperation(models.Model):
AND cdc.acc_counter_id IN %s
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
GROUP BY date_trunc('day', cdc.date_slot)
GROUP BY date_trunc('day',
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
ORDER BY date_slot ASC;
"""
query_params = (
......@@ -316,7 +324,9 @@ class AccOperation(models.Model):
query = """
SELECT
date_trunc(%s, cdc.date_slot) AS date_slot,
date_trunc(%s,
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
) AS date_slot,
((SUM((CASE
WHEN cdc.comp_data_type = 'prod' THEN cdc.power
ELSE 0 END))
......@@ -334,7 +344,8 @@ class AccOperation(models.Model):
AND cdc.acc_operation_id IN %s
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
GROUP BY date_trunc(%s, cdc.date_slot)
GROUP BY date_trunc(%s,
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
ORDER BY date_slot ASC;
"""
query_params = (
......@@ -375,7 +386,9 @@ class AccOperation(models.Model):
query = """
SELECT
date_trunc('day', cdc.date_slot) AS date_slot,
date_trunc('day',
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
) AS date_slot,
((SUM((CASE
WHEN cdc.comp_data_type = 'prod' THEN cdc.power
ELSE 0 END))
......@@ -393,7 +406,8 @@ class AccOperation(models.Model):
AND cdc.acc_operation_id IN %s
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
GROUP BY date_trunc('day', cdc.date_slot)
GROUP BY date_trunc('day',
cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
ORDER BY date_slot ASC;
"""
query_params = (
......@@ -416,10 +430,18 @@ class AccOperation(models.Model):
}
return cdc_jour
def get_date_min_max(self):
def get_date_min_max(self, partner_id=None):
self.ensure_one()
last_record = self.get_last_cdc_record()
last_record = self.get_last_cdc_record(partner_id)
date_max = last_record.date_slot.strftime("%d/%m/%Y")
if partner_id:
first_date = self.env["acc.counter.period"].search(
[("acc_operation_id", "=", self.id), ("partner_id", "=", partner_id)],
order="start_date ASC",
limit=1,
)
date_min = first_date.start_date.strftime("%d/%m/%Y")
else:
date_min = self.date_start_contract.strftime("%d/%m/%Y")
return {"date_min": date_min, "date_max": date_max}
......@@ -495,7 +517,7 @@ class AccOperation(models.Model):
chart_data.update(chart_data_prod)
result_graph["chart_data"] = chart_data
result_graph.update(self.get_date_min_max())
result_graph.update(self.get_date_min_max(partner_id))
result_graph.update(
{
"start_date": start_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