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 lefilament/oacc/oacc_repartition_keys!3
parents c144b8d2 d730d20a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
from . import acc_operation
from . import acc_repartition_keys
from . import api_enedis_acc
......@@ -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
......
# 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
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:
......@@ -84,7 +98,7 @@ class RepartitionKeyEntryFile:
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
......
# 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,
}
)
......
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