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
Aucune requête de fusion associée trouvée
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<odoo> <odoo>
<data noupdate="1"> <data noupdate="1">
<record model="ir.cron" forcecreate="True" id="ir_cron_get_perimeter"> <record model="ir.cron" id="ir_cron_get_monthly_data">
<field name="name">Enedis recuperation perimetre et courbes</field> <field name="name">Enedis récupération données mensuelles</field>
<field name="model_id" ref="oacc.model_acc_operation" /> <field name="model_id" ref="oacc.model_acc_operation" />
<field name="state">code</field> <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="user_id" ref="base.user_root" />
<field name="interval_number">1</field> <field name="interval_number">1</field>
<field name="interval_type">months</field> <field name="interval_type">months</field>
......
...@@ -2,10 +2,9 @@ ...@@ -2,10 +2,9 @@
<!-- Copyright 2021- Le Filament (https://le-filament.com) <!-- Copyright 2021- Le Filament (https://le-filament.com)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo> <odoo>
<data noupdate="1">
<!--Email template --> <!--Email template -->
<record id="email_template_new_prm" model="mail.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="model_id" ref="oacc.model_acc_logs" />
<field name="email_from">"Elocoop" &lt;bonjour@elo.coop></field> <field name="email_from">"Elocoop" &lt;bonjour@elo.coop></field>
<field name="email_to">"Elocoop" &lt;bonjour@elo.coop></field> <field name="email_to">"Elocoop" &lt;bonjour@elo.coop></field>
...@@ -15,7 +14,7 @@ ...@@ -15,7 +14,7 @@
>Action requise - entrées/sorties de PRM de l’opération {{object.name}}</field> >Action requise - entrées/sorties de PRM de l’opération {{object.name}}</field>
<field <field
name="description" 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"> <field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;"> <div style="margin: 0px; padding: 0px;">
Bonjour,<br /> Bonjour,<br />
...@@ -93,5 +92,4 @@ ...@@ -93,5 +92,4 @@
</div> </div>
</field> </field>
</record> </record>
</data>
</odoo> </odoo>
from . import acc_logs
from . import acc_operation 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) # 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 calendar from datetime import date
from datetime import date, datetime, timedelta
from odoo import fields, models from odoo import api, fields, models
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
...@@ -14,10 +13,6 @@ class AccOperation(models.Model): ...@@ -14,10 +13,6 @@ class AccOperation(models.Model):
# ------------------------------------------------------ # ------------------------------------------------------
# Fields declaration # 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 # SQL Constraints
...@@ -64,10 +59,7 @@ class AccOperation(models.Model): ...@@ -64,10 +59,7 @@ class AccOperation(models.Model):
call from user, for manual perimeter call from user, for manual perimeter
""" """
self.ensure_one() self.ensure_one()
message = self.perimeter() log_id = self._perimeter()
log_id = self.create_log(
message=message, type_log="api", updated_objects=self.perimeter_impacted_prm
)
view_id = self.env.ref("oacc.acc_logs_form").id view_id = self.env.ref("oacc.acc_logs_form").id
return { return {
...@@ -82,42 +74,33 @@ class AccOperation(models.Model): ...@@ -82,42 +74,33 @@ class AccOperation(models.Model):
"target": "new", "target": "new",
"flags": {"initial_mode": "view"}, "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([]): for operation in self.search(
if operation.client_id and operation.secret_id: [("client_id", "!=", False), ("secret_id", "!=", False)]
):
try: try:
operation._cron() operation._get_monthly_enedis_data(from_cron)
except ValidationError: except ValidationError:
continue 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 # 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: Récupère les données de l'opération concernant le périmètre:
- liste des PRM - liste des PRM
- date de début opération - date de début opération
@returns: log_id created with details
""" """
# TODO : refactor, too complex # TODO : refactor, too complex
self._check_access_api() self._check_access_api()
...@@ -135,7 +118,7 @@ class AccOperation(models.Model): ...@@ -135,7 +118,7 @@ class AccOperation(models.Model):
except ValidationError as e: except ValidationError as e:
if from_cron: if from_cron:
log_id = self.create_log(message=str(e), type_log="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 raise e from e
message += "<p><strong>Appel API terminé<br/>" "Traitement des données ...<br/>" message += "<p><strong>Appel API terminé<br/>" "Traitement des données ...<br/>"
...@@ -285,13 +268,15 @@ class AccOperation(models.Model): ...@@ -285,13 +268,15 @@ class AccOperation(models.Model):
"<h1>Fin appel API Périmètre: " + str(fields.Datetime.now()) + "</h1>" "<h1>Fin appel API Périmètre: " + str(fields.Datetime.now()) + "</h1>"
) )
if from_cron:
log_id = self.create_log( 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 # 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