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

Merge branch 'review' into '16.0'

Review

See merge request !3
parents c144b8d2 d730d20a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!3Review
from . import acc_operation from . import acc_operation
from . import acc_repartition_keys from . import acc_repartition_keys
from . import api_enedis_acc
...@@ -8,9 +8,9 @@ class AccRepartitionKeys(models.Model): ...@@ -8,9 +8,9 @@ class AccRepartitionKeys(models.Model):
# ------------------------------------------------------ # ------------------------------------------------------
# Fields declaration # Fields declaration
csv_file = fields.Binary("Contenu du fichier CSV") csv_file = fields.Binary("Contenu du fichier CSV", required=True)
date_send = fields.Date("Date de l'envoi des clefs", default=None) date_send = fields.Date("Date de l'envoi des clefs", required=True, default=None)
operation_id = fields.Many2one("acc.operation", "Opération") operation_id = fields.Many2one("acc.operation", "Opération", required=True)
# ------------------------------------------------------ # ------------------------------------------------------
# SQL Constraints # SQL Constraints
......
# 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
# ------------------------------------------------------
...@@ -6,9 +6,9 @@ from datetime import datetime ...@@ -6,9 +6,9 @@ from datetime import datetime
class RepartitionKeyEntryFile: class RepartitionKeyEntryFile:
def __init__(self, data, operation_counter_list, file_type="csv"): def __init__(self, data, file_type="csv"):
self.data = data self.data = data
self.operation_counter_list = operation_counter_list self.operation_counter_list = None
self.file_type = file_type self.file_type = file_type
self.json = self._to_json() self.json = self._to_json()
...@@ -66,6 +66,20 @@ class RepartitionKeyEntryFile: ...@@ -66,6 +66,20 @@ class RepartitionKeyEntryFile:
) )
return json 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): def data_to_send(self, send_empty_key=True):
""" """
build route and body for api sending build route and body for api sending
...@@ -74,7 +88,7 @@ class RepartitionKeyEntryFile: ...@@ -74,7 +88,7 @@ class RepartitionKeyEntryFile:
call_list = [] call_list = []
for horo in self.json: for horo in self.json:
date = datetime.strptime(horo, "%d-%m-%Y %H:%M") 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 = [] body = []
for key in self.json.get(horo): for key in self.json.get(horo):
if send_empty_key: if send_empty_key:
...@@ -84,7 +98,7 @@ class RepartitionKeyEntryFile: ...@@ -84,7 +98,7 @@ class RepartitionKeyEntryFile:
body.append(key) body.append(key)
if send_empty_key or body: if send_empty_key or body:
call_list.append({"route": route, "body": body}) call_list.append({"timestamp": timestamp, "body": body})
return call_list return call_list
......
# 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)
import base64 import base64
import datetime from datetime import datetime
from odoo import fields, models from odoo import fields, models
from odoo.exceptions import UserError, ValidationError from odoo.exceptions import UserError, ValidationError
...@@ -23,7 +23,7 @@ class AccRepartitionKeysWizard(models.TransientModel): ...@@ -23,7 +23,7 @@ class AccRepartitionKeysWizard(models.TransientModel):
# Fields declaration # Fields declaration
# ------------------------------------------------------ # ------------------------------------------------------
csv_file = fields.Binary("Contenu du fichier CSV") 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( operation_id = fields.Many2one(
"acc.operation", "Opération", default=_default_operation_id "acc.operation", "Opération", default=_default_operation_id
) )
...@@ -66,16 +66,27 @@ class AccRepartitionKeysWizard(models.TransientModel): ...@@ -66,16 +66,27 @@ class AccRepartitionKeysWizard(models.TransientModel):
except UnicodeDecodeError as exc: except UnicodeDecodeError as exc:
raise UserError("Fichier de répartitions au mauvais format") from 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: try:
entry_file_handler = RepartitionKeyEntryFile( entry_file_handler = RepartitionKeyEntryFile(data=file)
data=file, operation_counter_list=counter_list_from_operation 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() file_check_result = entry_file_handler.check()
except (ValueError, IndexError) as exc: except (ValueError, IndexError) as exc:
raise UserError("Fichier de répartitions au mauvais format") from exc raise UserError("Fichier de répartitions au mauvais format") from exc
...@@ -86,16 +97,18 @@ class AccRepartitionKeysWizard(models.TransientModel): ...@@ -86,16 +97,18 @@ class AccRepartitionKeysWizard(models.TransientModel):
data_to_send = entry_file_handler.data_to_send(send_empty_key=False) data_to_send = entry_file_handler.data_to_send(send_empty_key=False)
for key in data_to_send: 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: 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: except ValidationError as exc:
raise UserError(str(exc)) raise UserError(str(exc))
self.env["acc.repartition.keys"].create( self.env["acc.repartition.keys"].create(
{ {
"csv_file": self.csv_file, "csv_file": self.csv_file,
"date_send": datetime.datetime.today(), "date_send": fields.Date.context_today(),
"operation_id": self.operation_id.id, "operation_id": self.operation_id.id,
} }
) )
......
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