Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
O
oacc_repartition_keys
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_repartition_keys
Validations
13cdb3cf
Valider
13cdb3cf
rédigé
Il y a 3 mois
par
Stéphane - Enercoop
Parcourir les fichiers
Options
Téléchargements
Correctifs
Plain Diff
[FIX] un même compteur peut être présent dans deux groupes de priorité
parent
2ee8f07a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion
!25
16.0 stephane
Modifications
2
Afficher les modifications d'espaces
En ligne
Côte à côte
Affichage de
2 fichiers modifiés
models/acc_operation.py
+7
-9
7 ajouts, 9 suppressions
models/acc_operation.py
models/acc_priority_group.py
+24
-23
24 ajouts, 23 suppressions
models/acc_priority_group.py
avec
31 ajouts
et
32 suppressions
models/acc_operation.py
+
7
−
9
Voir le fichier @
13cdb3cf
...
@@ -24,7 +24,7 @@ def get_algo_description(algo):
...
@@ -24,7 +24,7 @@ def get_algo_description(algo):
"
dyn_perso_compute
"
:
""
,
"
dyn_perso_compute
"
:
""
,
}
}
return
desc
.
get
(
algo
,
f
"
Pas de descri
t
pion associée a
{
algo
}
"
)
return
desc
.
get
(
algo
,
f
"
Pas de descrip
t
ion associée a
{
algo
}
"
)
class
AccOperation
(
models
.
Model
):
class
AccOperation
(
models
.
Model
):
...
@@ -102,9 +102,7 @@ class AccOperation(models.Model):
...
@@ -102,9 +102,7 @@ class AccOperation(models.Model):
def
get_affect_sum
(
self
,
data_slot
):
def
get_affect_sum
(
self
,
data_slot
):
affect_sum
=
0.0
affect_sum
=
0.0
for
counter
in
data_slot
.
get
(
"
affect
"
):
for
counter
in
data_slot
.
get
(
"
affect
"
):
affect_counter
=
data_slot
.
get
(
"
affect
"
).
get
(
counter
)
affect_sum
+=
data_slot
.
get
(
"
affect
"
).
get
(
counter
,
0
)
if
affect_counter
:
affect_sum
+=
affect_counter
return
affect_sum
return
affect_sum
def
generate
(
self
):
def
generate
(
self
):
...
@@ -142,10 +140,10 @@ class AccOperation(models.Model):
...
@@ -142,10 +140,10 @@ class AccOperation(models.Model):
item
=
data
.
get
(
slot
)
item
=
data
.
get
(
slot
)
affect
=
item
.
get
(
"
affect
"
)
affect
=
item
.
get
(
"
affect
"
)
if
affect
:
if
affect
:
total_prod
uction
=
item
.
get
(
"
prod_initiale
"
)
total_prod
=
item
.
get
(
"
prod_initiale
"
)
remaining_prod
=
item
.
get
(
"
prod_totale
"
)
remaining_prod
=
item
.
get
(
"
prod_totale
"
)
affect_sum
=
self
.
get_affect_sum
(
item
)
affect_sum
=
self
.
get_affect_sum
(
item
)
if
abs
(
affect_sum
+
remaining_prod
-
total_prod
uction
)
>
1e-3
:
if
abs
(
affect_sum
+
remaining_prod
-
total_prod
)
>
1e-3
:
raise
ValidationError
(
raise
ValidationError
(
_
(
_
(
"
Une erreur s
'
est produite lors de
"
"
Une erreur s
'
est produite lors de
"
...
@@ -158,18 +156,18 @@ class AccOperation(models.Model):
...
@@ -158,18 +156,18 @@ class AccOperation(models.Model):
item
=
data
.
get
(
slot
)
item
=
data
.
get
(
slot
)
affect
=
item
.
get
(
"
affect
"
)
affect
=
item
.
get
(
"
affect
"
)
if
affect
:
if
affect
:
total_prod
uction
=
item
.
get
(
"
prod_initiale
"
)
total_prod
=
item
.
get
(
"
prod_initiale
"
)
# calcul du pourcentage attribué à chaque
# calcul du pourcentage attribué à chaque
# compteur par rapport à la production totale
# compteur par rapport à la production totale
weights
=
{}
weights
=
{}
for
counter_id
in
affect
:
for
counter_id
in
affect
:
affecte_counter
=
affect
.
get
(
counter_id
)
affecte_counter
=
affect
.
get
(
counter_id
)
if
total_prod
uction
==
0
:
if
total_prod
==
0
:
weight
=
0.0
weight
=
0.0
else
:
else
:
weight
=
(
weight
=
(
math
.
floor
((
affecte_counter
*
100
/
total_prod
uction
)
*
1e6
)
math
.
floor
((
affecte_counter
*
100
/
total_prod
)
*
1e6
)
/
1e6
/
1e6
)
)
weights
[
counter_id
]
=
weight
weights
[
counter_id
]
=
weight
...
...
Ce diff est replié.
Cliquez pour l'agrandir.
models/acc_priority_group.py
+
24
−
23
Voir le fichier @
13cdb3cf
...
@@ -151,43 +151,40 @@ class AccPriorityGroup(models.Model):
...
@@ -151,43 +151,40 @@ class AccPriorityGroup(models.Model):
return
d
return
d
def
get_conso_sum
(
self
,
data_slot
):
def
get_conso_sum
(
self
,
data_slot
):
conso
=
0.0
conso
_sum
=
0.0
for
counter
in
self
.
acc_priority_group_counter_ids
.
acc_counter_id
.
mapped
(
for
counter
in
self
.
acc_priority_group_counter_ids
.
acc_counter_id
.
mapped
(
"
name
"
"
name
"
):
):
consok
=
data_slot
.
get
(
"
conso
"
).
get
(
counter
)
conso_sum
+=
data_slot
.
get
(
"
conso
"
).
get
(
counter
,
0
)
if
consok
:
return
conso_sum
conso
+=
consok
return
conso
def
_prorata
(
self
,
data
):
def
_prorata
(
self
,
data
):
for
slot
in
data
:
for
slot
in
data
:
remaining_prod
=
data
.
get
(
slot
).
get
(
"
prod_totale
"
)
remaining_prod
=
data
.
get
(
slot
).
get
(
"
prod_totale
"
)
priority_counters
_conso
_sum
=
self
.
get_conso_sum
(
data
.
get
(
slot
))
total
_conso
=
self
.
get_conso_sum
(
data
.
get
(
slot
))
total_affecte
=
0.0
total_affecte
=
0.0
if
not
data
.
get
(
slot
).
get
(
"
affect
"
):
if
not
data
.
get
(
slot
).
get
(
"
affect
"
):
data
[
slot
][
"
affect
"
]
=
{}
data
[
slot
][
"
affect
"
]
=
{}
for
counter
in
self
.
acc_priority_group_counter_ids
.
acc_counter_id
:
for
counter
in
self
.
acc_priority_group_counter_ids
.
acc_counter_id
:
# un compteur peut être présent dans deux groupes de priorité
already_affected
=
data
.
get
(
slot
).
get
(
"
affect
"
).
get
(
counter
,
0
)
conso_k
=
data
.
get
(
slot
).
get
(
"
conso
"
).
get
(
counter
.
name
)
conso_k
=
data
.
get
(
slot
).
get
(
"
conso
"
).
get
(
counter
.
name
)
# si le compteur rentre en cours de periode il figure dans le
# si le compteur rentre en cours de periode il figure dans le
# groupe de repartition mais pas dans les données brutes conso_k = None
# groupe de repartition mais pas dans les données brutes conso_k = None
# dans ce cas on affecte 0
# dans ce cas on affecte 0
if
(
if
remaining_prod
<=
0
or
total_conso
==
0
or
conso_k
is
None
:
remaining_prod
<
0
newly_affected
=
0
or
priority_counters_conso_sum
==
0
sum_affected
=
already_affected
+
0.0
or
conso_k
is
None
):
part_a_affecter
=
0.0
else
:
else
:
part_a_affecter
=
(
part_a_affecter
=
(
remaining_prod
*
conso_k
)
/
total_conso
remaining_prod
*
conso_k
sum_affected
=
min
(
conso_k
,
(
already_affected
+
part_a_affecter
))
)
/
priority_counters_conso_sum
newly_affected
=
sum_affected
-
already_affected
part_a_affecter
=
min
(
conso_k
,
part_a_affecter
)
data
[
slot
][
"
affect
"
][
counter
]
=
sum_affected
data
[
slot
][
"
affect
"
][
counter
]
=
part_a_affecter
total_affecte
+=
newly_affected
total_affecte
+=
part_a_affecter
# on met à jour la prod restant à affecter
data
[
slot
][
"
prod_totale
"
]
=
remaining_prod
-
total_affecte
data
[
slot
][
"
prod_totale
"
]
=
remaining_prod
-
total_affecte
# possiblement on peut avoir affecté plus que la p
# possiblement on peut avoir affecté plus que la p
# roduction total_affecte=496.00000000000006
# roduction total_affecte=496.00000000000006
...
@@ -203,19 +200,23 @@ class AccPriorityGroup(models.Model):
...
@@ -203,19 +200,23 @@ class AccPriorityGroup(models.Model):
data
[
slot
][
"
affect
"
]
=
{}
data
[
slot
][
"
affect
"
]
=
{}
for
priority_group_counter
in
self
.
acc_priority_group_counter_ids
:
for
priority_group_counter
in
self
.
acc_priority_group_counter_ids
:
counter
=
priority_group_counter
.
acc_counter_id
counter
=
priority_group_counter
.
acc_counter_id
already_affected
=
data
.
get
(
slot
).
get
(
"
affect
"
).
get
(
counter
,
0
)
counter_share
=
priority_group_counter
.
acc_counter_share
counter_share
=
priority_group_counter
.
acc_counter_share
conso_k
=
data
.
get
(
slot
).
get
(
"
conso
"
).
get
(
counter
.
name
)
conso_k
=
data
.
get
(
slot
).
get
(
"
conso
"
).
get
(
counter
.
name
)
if
(
if
(
remaining_prod
<
0
remaining_prod
<
=
0
or
total_share
==
0
or
total_share
==
0
or
conso_k
is
None
or
conso_k
is
None
or
counter_share
==
0
or
counter_share
==
0
):
):
part_a_affecter
=
0.0
newly_affected
=
0
sum_affected
=
already_affected
+
0.0
else
:
else
:
part_a_affecter
=
(
remaining_prod
*
counter_share
)
/
total_share
part_a_affecter
=
(
remaining_prod
*
counter_share
)
/
total_share
part_a_affecter
=
min
(
conso_k
,
part_a_affecter
)
sum_affected
=
min
(
conso_k
,
(
already_affected
+
part_a_affecter
))
data
[
slot
][
"
affect
"
][
counter
]
=
part_a_affecter
newly_affected
=
sum_affected
-
already_affected
total_affecte
+=
part_a_affecter
data
[
slot
][
"
affect
"
][
counter
]
=
sum_affected
total_affecte
+=
newly_affected
data
[
slot
][
"
prod_totale
"
]
=
remaining_prod
-
total_affecte
data
[
slot
][
"
prod_totale
"
]
=
remaining_prod
-
total_affecte
return
data
return
data
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