diff --git a/models/__init__.py b/models/__init__.py index a07dd7e6871332d819cc1f6dff33d1365c4fb4d4..183168978d7da2e5bc4b899455e45738c23fa71c 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,3 +1,2 @@ from . import acc_operation from . import acc_repartition_keys -from . import api_enedis_acc diff --git a/models/acc_repartition_keys.py b/models/acc_repartition_keys.py index c71adcb01b9019c664f529ed4b20cd75c6a9bff5..52471e399d3d2fda2375c0745377c5593c093bdb 100644 --- a/models/acc_repartition_keys.py +++ b/models/acc_repartition_keys.py @@ -8,9 +8,9 @@ class AccRepartitionKeys(models.Model): # ------------------------------------------------------ # Fields declaration - csv_file = fields.Binary("Contenu du fichier CSV") - date_send = fields.Date("Date de l'envoi des clefs", default=None) - operation_id = fields.Many2one("acc.operation", "Opération") + csv_file = fields.Binary("Contenu du fichier CSV", required=True) + date_send = fields.Date("Date de l'envoi des clefs", required=True, default=None) + operation_id = fields.Many2one("acc.operation", "Opération", required=True) # ------------------------------------------------------ # SQL Constraints diff --git a/models/api_enedis_acc.py b/models/api_enedis_acc.py deleted file mode 100644 index aadd61bf611f239ac2cdf46e9945d6cc82a3194b..0000000000000000000000000000000000000000 --- a/models/api_enedis_acc.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2021- Le Filament (https://le-filament.com) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) -from odoo import api, models - - -class ApiEnedisAcc(models.AbstractModel): - _inherit = "api.enedis.acc" - - # ------------------------------------------------------ - # Actions - # ------------------------------------------------------ - - # ------------------------------------------------------ - # Business methods - # ------------------------------------------------------ - @api.model - def send_repartition_key(self, key): - """send keys for one date""" - - uri = f"{self.name}{key.get('route')}" - - return self._get_enedis(uri=uri, params=key.get("body")) - - # ------------------------------------------------------ - # Functions to manage route - # ------------------------------------------------------ diff --git a/tools/key_file.py b/tools/key_file.py index 70d324149a61addbaa48c8dbf3f8b1ca30f2fb3d..d3e141ee41b3f1c62a93a12566db6f1881bff7b8 100644 --- a/tools/key_file.py +++ b/tools/key_file.py @@ -6,9 +6,9 @@ from datetime import datetime class RepartitionKeyEntryFile: - def __init__(self, data, operation_counter_list, file_type="csv"): + def __init__(self, data, file_type="csv"): self.data = data - self.operation_counter_list = operation_counter_list + self.operation_counter_list = None self.file_type = file_type self.json = self._to_json() @@ -66,6 +66,20 @@ class RepartitionKeyEntryFile: ) return json + def get_min_date(self): + """ + get minimal date from file + """ + + return min(self.json) + + def get_max_date(self): + """ + get minimal date from file + """ + + return max(self.json) + def data_to_send(self, send_empty_key=True): """ build route and body for api sending @@ -74,7 +88,7 @@ class RepartitionKeyEntryFile: call_list = [] for horo in self.json: date = datetime.strptime(horo, "%d-%m-%Y %H:%M") - route = f"/repartition_keys/{date.strftime('%Y%m%dT%H%M%SZ')}" + timestamp = date.strftime('%Y%m%dT%H%M%SZ') body = [] for key in self.json.get(horo): if send_empty_key: @@ -82,10 +96,10 @@ class RepartitionKeyEntryFile: else: if float(key.get("key")) > 0: body.append(key) - + if send_empty_key or body: - call_list.append({"route": route, "body": body}) - + call_list.append({"timestamp": timestamp, "body": body}) + return call_list def _check_counter(self): diff --git a/wizard/acc_repartition_keys_wizard.py b/wizard/acc_repartition_keys_wizard.py index 4758365af03bbd51e95f98ccfe7b1dbe40d8e097..f3901242d0c392b0b2492b77d3a89b702e291bff 100644 --- a/wizard/acc_repartition_keys_wizard.py +++ b/wizard/acc_repartition_keys_wizard.py @@ -1,7 +1,7 @@ # Copyright 2021- Le Filament (https://le-filament.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) import base64 -import datetime +from datetime import datetime from odoo import fields, models from odoo.exceptions import UserError, ValidationError @@ -23,7 +23,7 @@ class AccRepartitionKeysWizard(models.TransientModel): # Fields declaration # ------------------------------------------------------ csv_file = fields.Binary("Contenu du fichier CSV") - date_send = fields.Date("Date de l'envoi des clefs", default=None) + date_send = fields.Date(default=None) operation_id = fields.Many2one( "acc.operation", "Opération", default=_default_operation_id ) @@ -66,16 +66,27 @@ class AccRepartitionKeysWizard(models.TransientModel): except UnicodeDecodeError as exc: raise UserError("Fichier de répartitions au mauvais format") from exc - counter_list_from_operation = [ - counter.name - for counter in self.env["acc.counter"].search( - [("acc_operation_id.id", "=", self.operation_id.id)] - ) - ] try: - entry_file_handler = RepartitionKeyEntryFile( - data=file, operation_counter_list=counter_list_from_operation + entry_file_handler = RepartitionKeyEntryFile(data=file) + except (ValueError, IndexError) as exc: + raise UserError("Fichier de répartitions au mauvais format") from exc + + counter_list_from_operation = ( + self.env["acc.counter.period"] + ._get_periods_from_interval( + [("acc_operation_id", "=", self.operation_id.id)], + datetime.strptime( + entry_file_handler.get_min_date(), "%d-%m-%Y %H:%M" + ).date(), + datetime.strptime( + entry_file_handler.get_max_date(), "%d-%m-%Y %H:%M" + ).date(), ) + .mapped("acc_counter_id.name") + ) + + entry_file_handler.operation_counter_list = counter_list_from_operation + try: file_check_result = entry_file_handler.check() except (ValueError, IndexError) as exc: raise UserError("Fichier de répartitions au mauvais format") from exc @@ -86,16 +97,18 @@ class AccRepartitionKeysWizard(models.TransientModel): data_to_send = entry_file_handler.data_to_send(send_empty_key=False) for key in data_to_send: - job_description = f"Send repartition key at {key.get('route')}" + job_description = f"Send repartition key at {key.get('timestamp')}" try: - self.operation_id.with_delay(description=job_description).send_repartition_key(key=key) + self.operation_id.with_delay( + description=job_description + ).send_repartition_key(key=key) except ValidationError as exc: raise UserError(str(exc)) self.env["acc.repartition.keys"].create( { "csv_file": self.csv_file, - "date_send": datetime.datetime.today(), + "date_send": fields.Date.context_today(), "operation_id": self.operation_id.id, } )