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
6cf61b96
Valider
6cf61b96
rédigé
Il y a 5 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
b91be7ca
Branches
Branches contenant la validation
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Modifications
2
Afficher les modifications d'espaces
En ligne
Côte à côte
Affichage de
2 fichiers modifiés
models/acc_operation.py
+9
-9
9 ajouts, 9 suppressions
models/acc_operation.py
models/acc_priority_group.py
+24
-23
24 ajouts, 23 suppressions
models/acc_priority_group.py
avec
33 ajouts
et
32 suppressions
models/acc_operation.py
+
9
−
9
Voir le fichier @
6cf61b96
...
...
@@ -24,7 +24,7 @@ def get_algo_description(algo):
"
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
):
...
...
@@ -102,9 +102,7 @@ class AccOperation(models.Model):
def
get_affect_sum
(
self
,
data_slot
):
affect_sum
=
0.0
for
counter
in
data_slot
.
get
(
"
affect
"
):
affect_counter
=
data_slot
.
get
(
"
affect
"
).
get
(
counter
)
if
affect_counter
:
affect_sum
+=
affect_counter
affect_sum
+=
data_slot
.
get
(
"
affect
"
).
get
(
counter
,
0
)
return
affect_sum
def
generate
(
self
):
...
...
@@ -141,10 +139,10 @@ class AccOperation(models.Model):
item
=
data
.
get
(
slot
)
affect
=
item
.
get
(
"
affect
"
)
if
affect
:
total_prod
uction
=
item
.
get
(
"
prod_initiale
"
)
total_prod
=
item
.
get
(
"
prod_initiale
"
)
remaining_prod
=
item
.
get
(
"
prod_totale
"
)
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
(
_
(
"
Une erreur s
'
est produite lors de l
'
affectation de l
'
auto-consommation
"
...
...
@@ -156,16 +154,18 @@ class AccOperation(models.Model):
item
=
data
.
get
(
slot
)
affect
=
item
.
get
(
"
affect
"
)
if
affect
:
total_prod
uction
=
item
.
get
(
"
prod_initiale
"
)
total_prod
=
item
.
get
(
"
prod_initiale
"
)
# calcul du pourcentage attribué à chaque compteur par rapport à la production totale
weights
=
{}
for
counter_id
in
affect
:
affecte_counter
=
affect
.
get
(
counter_id
)
if
total_prod
uction
==
0
:
if
total_prod
==
0
:
weight
=
0.0
else
:
weight
=
math
.
floor
((
affecte_counter
*
100
/
total_production
)
*
1e+6
)
/
1e+6
weight
=
(
math
.
floor
((
affecte_counter
*
100
/
total_prod
)
*
1e6
)
/
1e6
)
weights
[
counter_id
]
=
weight
slot_line
=
[]
...
...
Ce diff est replié.
Cliquez pour l'agrandir.
models/acc_priority_group.py
+
24
−
23
Voir le fichier @
6cf61b96
...
...
@@ -151,43 +151,40 @@ class AccPriorityGroup(models.Model):
return
d
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
(
"
name
"
):
consok
=
data_slot
.
get
(
"
conso
"
).
get
(
counter
)
if
consok
:
conso
+=
consok
return
conso
conso_sum
+=
data_slot
.
get
(
"
conso
"
).
get
(
counter
,
0
)
return
conso_sum
def
_prorata
(
self
,
data
):
for
slot
in
data
:
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
if
not
data
.
get
(
slot
).
get
(
"
affect
"
):
data
[
slot
][
"
affect
"
]
=
{}
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
)
# 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
# dans ce cas on affecte 0
if
(
remaining_prod
<
0
or
priority_counters_conso_sum
==
0
or
conso_k
is
None
):
part_a_affecter
=
0.0
if
remaining_prod
<=
0
or
total_conso
==
0
or
conso_k
is
None
:
newly_affected
=
0
sum_affected
=
already_affected
+
0.0
else
:
part_a_affecter
=
(
remaining_prod
*
conso_k
)
/
priority_counters_conso_sum
part_a_affecter
=
min
(
conso_k
,
part_a_affecter
)
data
[
slot
][
"
affect
"
][
counter
]
=
part_a_affecter
total_affecte
+=
part_a_affecter
part_a_affecter
=
(
remaining_prod
*
conso_k
)
/
total_conso
sum_affected
=
min
(
conso_k
,
(
already_affected
+
part_a_affecter
))
newly_affected
=
sum_affected
-
already_affected
data
[
slot
][
"
affect
"
][
counter
]
=
sum_affected
total_affecte
+=
newly_affected
# on met à jour la prod restant à affecter
data
[
slot
][
"
prod_totale
"
]
=
remaining_prod
-
total_affecte
# possiblement on peut avoir affecté plus que la production total_affecte=496.00000000000006
...
...
@@ -202,19 +199,23 @@ class AccPriorityGroup(models.Model):
data
[
slot
][
"
affect
"
]
=
{}
for
priority_group_counter
in
self
.
acc_priority_group_counter_ids
:
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
conso_k
=
data
.
get
(
slot
).
get
(
"
conso
"
).
get
(
counter
.
name
)
if
(
remaining_prod
<
0
remaining_prod
<
=
0
or
total_share
==
0
or
conso_k
is
None
or
counter_share
==
0
):
part_a_affecter
=
0.0
newly_affected
=
0
sum_affected
=
already_affected
+
0.0
else
:
part_a_affecter
=
(
remaining_prod
*
counter_share
)
/
total_share
part_a_affecter
=
min
(
conso_k
,
part_a_affecter
)
data
[
slot
][
"
affect
"
][
counter
]
=
part_a_affecter
total_affecte
+=
part_a_affecter
sum_affected
=
min
(
conso_k
,
(
already_affected
+
part_a_affecter
))
newly_affected
=
sum_affected
-
already_affected
data
[
slot
][
"
affect
"
][
counter
]
=
sum_affected
total_affecte
+=
newly_affected
data
[
slot
][
"
prod_totale
"
]
=
remaining_prod
-
total_affecte
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