diff --git a/models/acc_operation.py b/models/acc_operation.py index 48f7b8f11eab6004cc84eb5e00d05916cb5a1bb8..5f3ef69922360f8d46c40bb89ff138f498a4cb73 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -148,26 +148,25 @@ class AccOperation(models.Model): limit=1, order="date_slot DESC", ) - date_end = last_record.date_slot + # Convert end datetime to timezone + last_day_start = last_record.date_slot.replace(hour=0, minute=0, second=0) + last_day_end = last_day_start + relativedelta(days=1) + # Get end time slot for previous month with timezone + end_month = last_day_start.replace(day=1) if scale == "semestre": - date_first = date_end - relativedelta(months=1) - date_end = date_utils.end_of(date_first, "month") - date_start = date_end - relativedelta(months=5) - date_start = date_utils.start_of(date_start, "month") - elif scale == "month": - date_start = date_end - relativedelta(months=1) - date_start = date_utils.start_of(date_start, scale) - date_end = date_utils.end_of(date_start, scale) + date_end = end_month + date_start = (end_month - relativedelta(months=6)) elif scale == "week": - date_start = date_end - relativedelta(days=6) - date_start = date_utils.start_of(date_start, "day") + date_start = last_day_end - relativedelta(days=7) + date_end = last_day_end elif scale == "day": - date_start = date_utils.start_of(date_end, "day") + date_start = last_day_start + date_end = last_day_end + # month by default else: - date_first = date_end - relativedelta(months=1) - date_end = date_utils.end_of(date_first, "month") - date_start = date_utils.start_of(date_end, scale) + date_start = end_month - relativedelta(months=1) + date_end = end_month return date_start, date_end @@ -227,7 +226,7 @@ class AccOperation(models.Model): :param slot_type: type de slot pour la query ('month' ou 'hour' ou 'year') date_start: date début date_end: date de fin - :return: un dictionnaire de données + @returns: un dictionnaire de données (labels et data pour les charts à afficher) """ @@ -246,15 +245,18 @@ class AccOperation(models.Model): (SUM( (CASE WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END) )/2) / 1000 as autocons, (SUM( (CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END) )/2) / 1000 as prod, (SUM( (CASE WHEN comp_data_type = 'complement' THEN A.power ELSE 0 END) )/2) / 1000 as allocons - FROM acc_enedis_cdc A - JOIN acc_operation E ON E.id = A.acc_operation_id - WHERE A.acc_operation_id IS NOT NULL - AND A.acc_operation_id IN %s - AND ( A.acc_counter_id IN %s OR A.comp_data_type = 'prod' ) - AND A.date_slot >= %s - AND A.date_slot < %s - GROUP BY date_trunc(%s, A.date_slot) - ORDER BY date_slot ASC; + FROM + acc_enedis_cdc A + JOIN + acc_operation E ON E.id = A.acc_operation_id + WHERE + A.acc_operation_id IS NOT NULL + AND A.acc_operation_id IN %s + AND ( A.acc_counter_id IN %s OR A.comp_data_type = 'prod' ) + AND A.date_slot >= %s + AND A.date_slot < %s + GROUP BY date_trunc(%s, A.date_slot) + ORDER BY date_slot ASC; """ query_params = ( slot_type, @@ -1281,7 +1283,6 @@ class AccOperation(models.Model): défini par le clic bouton :return: dictionnaire pour la construction des graphes """ - result_graph = {} if not date_start and not date_end: date_start, date_end = self.get_last_day(scale)