Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
O
oacc_perimeter_api
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Analyse
Données d'analyse des chaînes de valeur
Analyse des contributeurs
Données d'analyse du dépôt
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté GitLab
Contribuer à GitLab
Donner votre avis
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
Le Filament
Opération Auto-Consommation Collective
oacc_perimeter_api
Validations
b1e536ea
Valider
b1e536ea
rédigé
5 mars 2024
par
Julien - Le Filament
Validation de
Rémi - Le Filament
25 mars 2024
Parcourir les fichiers
Options
Téléchargements
Correctifs
Plain Diff
Improve cron
parent
4ea76091
Branches
Branches contenant la validation
Aucune étiquette associée trouvée
1 requête de fusion
!4
Administration de l'opération
Modifications
2
Afficher les modifications d'espaces
En ligne
Côte à côte
Affichage de
2 fichiers modifiés
data/cron_data.xml
+6
-5
6 ajouts, 5 suppressions
data/cron_data.xml
models/acc_operation.py
+107
-23
107 ajouts, 23 suppressions
models/acc_operation.py
avec
113 ajouts
et
28 suppressions
data/cron_data.xml
+
6
−
5
Voir le fichier @
b1e536ea
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<data
noupdate=
"1"
>
<record
model=
"ir.cron"
forcecreate=
"True"
id=
"ir_cron_get_perimeter"
>
<field
name=
"name"
>
Enedis recuperation perimetre
</field>
<field
name=
"model_id"
ref=
"oacc
_perimeter_api
.model_acc_operation"
/>
<field
name=
"model_id"
ref=
"oacc.model_acc_operation"
/>
<field
name=
"state"
>
code
</field>
<field
name=
"code"
>
model._cron
_get_perimeter
()
</field>
<field
name=
"code"
>
model._cron()
</field>
<field
name=
"user_id"
ref=
"base.user_root"
/>
<field
name=
"interval_number"
>
30
</field>
<field
name=
"interval_type"
>
days
</field>
<field
name=
"interval_number"
>
1
</field>
<field
name=
"interval_type"
>
minutes
</field>
<field
name=
"nextcall"
>
2024-03-09 22:00:00
</field>
<field
name=
"numbercall"
>
-1
</field>
<field
name=
"doall"
eval=
"False"
/>
<field
name=
"active"
eval=
"True"
/>
...
...
Ce diff est replié.
Cliquez pour l'agrandir.
models/acc_operation.py
+
107
−
23
Voir le fichier @
b1e536ea
# Copyright 2021- Le Filament (https://le-filament.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from
datetime
import
date
from
datetime
import
date
,
datetime
,
timedelta
import
calendar
from
odoo
import
fields
,
models
from
odoo.exceptions
import
ValidationError
...
...
@@ -14,7 +14,9 @@ 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
=
""
)
perimeter_impacted_prm
=
fields
.
Text
(
"
Liste des PRM impactés pas le périmètre
"
,
default
=
""
)
# ------------------------------------------------------
# SQL Constraints
...
...
@@ -39,30 +41,33 @@ class AccOperation(models.Model):
# ------------------------------------------------------
# Actions
# ------------------------------------------------------
def
get_perimeter
(
self
):
self
.
ensure_one
()
if
self
.
env
.
user
.
has_group
(
"
oacc.group_operation_superadmin
"
):
message
=
self
.
perimeter
()
elif
self
.
env
.
user
.
has_group
(
"
oacc.group_operation_admin
"
):
message
=
self
.
sudo
().
perimeter
()
def
create_log
(
self
,
message
,
type_log
=
"
api
"
,
new_prm
=
""
,
call
=
"
perimetre
"
):
if
call
==
"
perimetre
"
:
title
=
"
Appel API Enedis Périmètre
"
else
:
return
False
title
=
"
Appel API Enedis Courbe
"
# Logs information logs
log_id
=
self
.
env
[
"
acc.logs
"
].
create
(
return
self
.
env
[
"
acc.logs
"
].
create
(
{
"
name
"
:
"
Appel API Enedis Périmètre
"
+
self
.
name
+
"
du
"
+
str
(
fields
.
Date
.
today
()),
"
name
"
:
title
+
self
.
name
+
"
du
"
+
str
(
fields
.
Date
.
today
()),
"
date_launched
"
:
fields
.
Datetime
.
now
(),
"
type_log
"
:
"
api
"
,
"
type_log
"
:
type_log
,
"
new_prm
"
:
new_prm
,
"
message
"
:
message
,
"
acc_operation_id
"
:
self
.
id
,
}
)
def
get_perimeter
(
self
):
"""
call from user, for manual perimeter
"""
self
.
ensure_one
()
message
=
self
.
perimeter
()
log_id
=
self
.
create_log
(
message
=
message
,
type_log
=
"
api
"
,
new_prm
=
self
.
perimeter_impacted_prm
)
view_id
=
self
.
env
.
ref
(
"
oacc.acc_logs_form
"
).
id
return
{
"
name
"
:
"
LOGS
"
,
...
...
@@ -77,22 +82,100 @@ class AccOperation(models.Model):
"
flags
"
:
{
"
initial_mode
"
:
"
view
"
},
}
def
_cron_get_perimeter
(
self
):
def
_get_first_day_of_prec_month
(
self
):
"""
utility get datetime of the first day of the precedent month
"""
return
datetime
(
day
=
1
,
month
=
(
datetime
.
now
()
-
timedelta
(
days
=
30
)).
month
,
year
=
(
datetime
.
now
()
-
timedelta
(
days
=
30
)).
year
,
)
def
_get_last_day_of_prec_month
(
self
):
"""
utility get datetime of the last day of the precedent month
"""
prec_month
=
(
datetime
.
now
()
-
timedelta
(
days
=
30
)).
month
prec_year
=
(
datetime
.
now
()
-
timedelta
(
days
=
30
)).
year
return
datetime
(
day
=
calendar
.
monthrange
(
prec_year
,
prec_month
)[
1
],
month
=
prec_month
,
year
=
prec_year
,
)
def
_cron_perimeter
(
self
):
"""
get perimeter from cron and log it
"""
try
:
message
=
self
.
perimeter
(
from_cron
=
True
)
except
ValidationError
as
exc
:
message
=
str
(
exc
)
self
.
create_log
(
message
=
message
,
type_log
=
"
cron
"
,
new_prm
=
self
.
perimeter_impacted_prm
)
raise
exc
from
exc
self
.
create_log
(
message
=
message
,
type_log
=
"
cron
"
,
new_prm
=
self
.
perimeter_impacted_prm
)
return
message
def
_cron_curves
(
self
):
"""
get curves from cron and log it
"""
counters
=
self
.
env
[
"
acc.counter
"
].
search
(
[
(
"
acc_operation_id
"
,
"
=
"
,
self
.
id
),
]
)
for
counter
in
counters
:
try
:
message
=
self
.
_get_definitive_load_curves
(
self
.
_get_first_day_of_prec_month
(),
self
.
_get_last_day_of_prec_month
(),
counter
.
name
,
"
cons
"
if
counter
.
type
==
"
del
"
else
"
prod
"
,
)
except
ValidationError
as
exc
:
message
=
str
(
exc
)
self
.
create_log
(
message
=
message
,
type_log
=
"
cron
"
,
call
=
"
curve
"
)
def
_cron
(
self
):
"""
get perimeter and curves from cron
"""
for
operation
in
self
.
search
([]):
operation
.
perimeter_api_log
=
operation
.
perimeter
(
send_mail
=
True
)
try
:
operation
.
perimeter_api_log
=
operation
.
_cron_perimeter
()
except
ValidationError
:
continue
operation
.
_cron_curves
()
def
send_new_prm_email
(
self
):
"""
send email for new prm
"""
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
"""
template_id
=
self
.
env
.
ref
(
"
oacc_perimeter_api.email_template_api_error
"
)
template_id
.
send_mail
(
self
.
id
)
# ------------------------------------------------------
# API functions
# ------------------------------------------------------
def
perimeter
(
self
,
send_mail
=
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
...
...
@@ -112,9 +195,10 @@ class AccOperation(models.Model):
try
:
perimeter_data
=
self
.
_get_perimeter
()
except
ValidationError
as
e
:
if
send_mail
:
if
from_cron
:
self
.
perimeter_api_log
=
str
(
e
)
self
.
send_api_error_mail
()
self
.
create_log
(
message
=
str
(
e
),
type_log
=
"
cron
"
)
raise
e
from
e
message
+=
"
<p><strong>Appel API terminé<br/>
"
"
Traitement des données ...<br/>
"
...
...
@@ -266,7 +350,7 @@ class AccOperation(models.Model):
self
.
perimeter_api_log
=
message
self
.
perimeter_impacted_prm
=
"
<br/>
"
.
join
(
counter_used
)
if
send_mail
:
if
from_cron
:
self
.
send_new_prm_email
()
return
message
...
...
Ce diff est replié.
Cliquez pour l'agrandir.
Aperçu
0%
Chargement en cours
Veuillez réessayer
ou
joindre un nouveau fichier
.
Annuler
You are about to add
0
people
to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Enregistrer le commentaire
Annuler
Veuillez vous
inscrire
ou vous
se connecter
pour commenter