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

[UPD] cron

parent 75cadeea
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!4Administration de l'opération
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data noupdate="1">
<record model="ir.cron" forcecreate="True" id="ir_cron_get_perimeter">
<field name="name">Enedis recuperation perimetre et courbes</field>
<record model="ir.cron" id="ir_cron_get_monthly_data">
<field name="name">Enedis récupération données mensuelles</field>
<field name="model_id" ref="oacc.model_acc_operation" />
<field name="state">code</field>
<field name="code">model.cron()</field>
<field
name="code"
>model.get_monthly_enedis_data(from_cron=True)</field>
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">months</field>
......
......@@ -2,10 +2,9 @@
<!-- Copyright 2021- Le Filament (https://le-filament.com)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<data noupdate="1">
<!--Email template -->
<record id="email_template_new_prm" model="mail.template">
<field name="name">Paramètres: Nouveau PRM ou pèriode</field>
<field name="name">Paramètres: Nouveau PRM ou période</field>
<field name="model_id" ref="oacc.model_acc_logs" />
<field name="email_from">"Elocoop" &lt;bonjour@elo.coop></field>
<field name="email_to">"Elocoop" &lt;bonjour@elo.coop></field>
......@@ -15,7 +14,7 @@
>Action requise - entrées/sorties de PRM de l’opération {{object.name}}</field>
<field
name="description"
>Envoi notification nouveau PRM ou nouvelle pèriode détecté.</field>
>Envoi notification nouveau PRM ou nouvelle période détecté.</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
Bonjour,<br />
......@@ -93,5 +92,4 @@
</div>
</field>
</record>
</data>
</odoo>
from . import acc_logs
from . import acc_operation
# Copyright 2024- Le Filament (https://le-filament.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import models
class AccLogs(models.Model):
_inherit = "acc.logs"
# ------------------------------------------------------
# Fields declaration
# ------------------------------------------------------
# ------------------------------------------------------
# SQL Constraints
# ------------------------------------------------------
# ------------------------------------------------------
# Default methods
# ------------------------------------------------------
# ------------------------------------------------------
# Computed fields / Search Fields
# ------------------------------------------------------
# ------------------------------------------------------
# Onchange / Constraints
# ------------------------------------------------------
# ------------------------------------------------------
# CRUD methods (ORM overrides)
# ------------------------------------------------------
# ------------------------------------------------------
# Actions
# ------------------------------------------------------
def send_new_prm_email(self):
"""
send email for new prm
"""
self.ensure_one()
template_id = self.env.ref("oacc_perimeter_api.email_template_new_prm")
template_id.send_mail(self.id)
def send_api_error_mail(self):
"""
send api error email
"""
self.ensure_one()
template_id = self.env.ref("oacc_perimeter_api.email_template_api_error")
template_id.send_mail(self.id)
# ------------------------------------------------------
# Business methods
# ------------------------------------------------------
# Copyright 2021- Le Filament (https://le-filament.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import calendar
from datetime import date, datetime, timedelta
from datetime import date
from odoo import fields, models
from odoo import api, fields, models
from odoo.exceptions import ValidationError
......@@ -14,10 +13,6 @@ class AccOperation(models.Model):
# ------------------------------------------------------
# Fields declaration
# ------------------------------------------------------
perimeter_api_log = fields.Text("Log de la recupération du périmètre", default="")
perimeter_impacted_prm = fields.Text(
"Liste des PRM impactés pas le périmètre", default=""
)
# ------------------------------------------------------
# SQL Constraints
......@@ -64,10 +59,7 @@ class AccOperation(models.Model):
call from user, for manual perimeter
"""
self.ensure_one()
message = self.perimeter()
log_id = self.create_log(
message=message, type_log="api", updated_objects=self.perimeter_impacted_prm
)
log_id = self._perimeter()
view_id = self.env.ref("oacc.acc_logs_form").id
return {
......@@ -82,42 +74,33 @@ class AccOperation(models.Model):
"target": "new",
"flags": {"initial_mode": "view"},
}
def _cron(self):
return self.perimeter(from_cron=True)
def cron(self):
def _get_monthly_enedis_data(self, from_cron):
return self._perimeter(from_cron)
@api.model
def get_monthly_enedis_data(self, from_cron):
"""
get perimeter from cron
get perimeter monthly (function used in cron job)
"""
for operation in self.search([]):
if operation.client_id and operation.secret_id:
for operation in self.search(
[("client_id", "!=", False), ("secret_id", "!=", False)]
):
try:
operation._cron()
operation._get_monthly_enedis_data(from_cron)
except ValidationError:
continue
def send_new_prm_email(self, log_id):
"""
send email for new prm
"""
template_id = self.env.ref("oacc_perimeter_api.email_template_new_prm")
template_id.send_mail(log_id.id)
def send_api_error_mail(self, log_id):
"""
send api error email
"""
template_id = self.env.ref("oacc_perimeter_api.email_template_api_error")
template_id.send_mail(log_id.id)
# ------------------------------------------------------
# API functions
# ------------------------------------------------------
def perimeter(self, from_cron=False):
def _perimeter(self, from_cron=False):
"""
Récupère les données de l'opération concernant le périmètre:
- liste des PRM
- date de début opération
@returns: log_id created with details
"""
# TODO : refactor, too complex
self._check_access_api()
......@@ -135,7 +118,7 @@ class AccOperation(models.Model):
except ValidationError as e:
if from_cron:
log_id = self.create_log(message=str(e), type_log="cron")
self.send_api_error_mail(log_id)
log_id.send_api_error_mail()
raise e from e
message += "<p><strong>Appel API terminé<br/>" "Traitement des données ...<br/>"
......@@ -285,13 +268,15 @@ class AccOperation(models.Model):
"<h1>Fin appel API Périmètre: " + str(fields.Datetime.now()) + "</h1>"
)
if from_cron:
log_id = self.create_log(
message=message, type_log="cron", updated_objects="<br/>".join(counter_used)
message=message,
type_log="cron" if from_cron else "api",
updated_objects="<br/>".join(counter_used),
)
self.send_new_prm_email(log_id)
if from_cron:
log_id.send_new_prm_email()
return message
return log_id
# ------------------------------------------------------
# Business methods
......
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