199 lines
8.5 KiB
Python
199 lines
8.5 KiB
Python
"""
|
||
Les signaux permettent à certains expéditeurs d’avertir un ensemble de destinataires qu’une action a eu lieu.
|
||
Dans ce projet, les signaux ont été utilisés pour mettre à jour les compteurs des postes appartenant à la FE lorsque le taux d'armement change en fonction de la catégorie.
|
||
"""
|
||
import numpy as np
|
||
|
||
from . import constants
|
||
from .models import FormationEmploi, Poste, SousVivierAssociation, Administre
|
||
from django.db.models.signals import post_save
|
||
|
||
|
||
|
||
def update_taux_mdr(sender, instance, **kwargs):
|
||
"""Met à jour les compteurs des postes appartenant à la FE dont on change le taux d'armement cible pour la catégorie MDR
|
||
|
||
:type instance: objet du modèle FormationEmploi
|
||
:param instance: FE dont on change le taux d'armement cible pour la catégorie MDR
|
||
|
||
|
||
"""
|
||
|
||
taux = instance.fe_taux_armement_cible_mdr
|
||
fe_id = instance.fe_code
|
||
|
||
postes = Poste.objects.filter(formation_emploi_id=fe_id, p_categorie='MDR')
|
||
if (len(postes) > 0) and (taux is not None):
|
||
taux = taux * 0.01
|
||
for poste in postes:
|
||
new_nb_reevalue = poste.p_nb_reevalue * taux
|
||
new_nb_vacant = new_nb_reevalue - poste.p_nb_occupe
|
||
if new_nb_reevalue >= poste.p_nb_reevalue:
|
||
new_nb_p4 = poste.p_nb_p4 + new_nb_vacant - poste.p_nb_vacant
|
||
poste.p_nb_p4 = new_nb_p4
|
||
|
||
else:
|
||
if new_nb_reevalue > poste.p_nb_occupe:
|
||
new_nb_non_etudie = poste.p_nb_non_etudie + poste.p_nb_reevalue - new_nb_reevalue
|
||
poste.p_nb_non_etudie = new_nb_non_etudie
|
||
delta_vacant = new_nb_vacant - poste.p_nb_vacant
|
||
if delta_vacant <= poste.p_nb_p4:
|
||
new_poste_p4 = poste.p_nb_p4 - delta_vacant
|
||
poste.p_nb_p4 = new_poste_p4
|
||
else:
|
||
delta_vacant -= poste.p_nb_p4
|
||
poste.p_nb_p4 = 0
|
||
if delta_vacant <= poste.p_nb_p3:
|
||
new_poste_p3 = poste.p_nb_p3 - delta_vacant
|
||
poste.p_nb_p3 = new_poste_p3
|
||
else:
|
||
delta_vacant -= poste.p_nb_p3
|
||
poste.p_nb_p3 = 0
|
||
if delta_vacant <= poste.p_nb_p2:
|
||
new_poste_p2 = poste.p_nb_p2 - delta_vacant
|
||
poste.p_nb_p2 = new_poste_p2
|
||
else:
|
||
delta_vacant -= poste.p_nb_p2
|
||
poste.p_nb_p2 = 0
|
||
new_nb_p1 = poste.p_nb_p1 - delta_vacant
|
||
poste.p_nb_p1 = new_nb_p1
|
||
else:
|
||
poste.p_nb_p3 = 0
|
||
poste.p_nb_p2 = 0
|
||
poste.p_nb_p1 = 0
|
||
poste.p_nb_p4 = 0
|
||
|
||
poste.p_nb_reevalue = new_nb_reevalue
|
||
poste.p_nb_vacant = new_nb_vacant
|
||
poste.save(
|
||
update_fields=['p_nb_reevalue', 'p_nb_vacant', 'p_nb_non_etudie', 'p_nb_p4', 'p_nb_p3', 'p_nb_p2',
|
||
'p_nb_p1'])
|
||
|
||
|
||
post_save.connect(update_taux_mdr, sender=FormationEmploi)
|
||
|
||
|
||
def update_taux_off(sender, instance, **kwargs):
|
||
"""Met à jour les compteurs des postes appartenant à la FE dont on change le taux d'armement cible pour la catégorie OFF
|
||
|
||
:type instance: objet du modèle FormationEmploi
|
||
:param instance: FE dont on change le taux d'armement cible pour la catégorie OFF
|
||
|
||
"""
|
||
taux = instance.fe_taux_armement_cible_off
|
||
fe_id = instance.fe_code
|
||
|
||
postes = Poste.objects.filter(formation_emploi_id=fe_id, p_categorie='OFF')
|
||
if (len(postes) > 0) and (taux is not None):
|
||
taux = taux * 0.01
|
||
for poste in postes:
|
||
new_nb_reevalue = poste.p_nb_reevalue * taux
|
||
new_nb_vacant = new_nb_reevalue - poste.p_nb_occupe
|
||
if new_nb_reevalue >= poste.p_nb_reevalue:
|
||
new_nb_p4 = poste.p_nb_p4 + new_nb_vacant - poste.p_nb_vacant
|
||
poste.p_nb_p4 = new_nb_p4
|
||
|
||
else:
|
||
if new_nb_reevalue > poste.p_nb_occupe:
|
||
new_nb_non_etudie = poste.p_nb_non_etudie + poste.p_nb_reevalue - new_nb_reevalue
|
||
poste.p_nb_non_etudie = new_nb_non_etudie
|
||
delta_vacant = new_nb_vacant - poste.p_nb_vacant
|
||
if delta_vacant <= poste.p_nb_p4:
|
||
new_poste_p4 = poste.p_nb_p4 - delta_vacant
|
||
poste.p_nb_p4 = new_poste_p4
|
||
else:
|
||
delta_vacant -= poste.p_nb_p4
|
||
poste.p_nb_p4 = 0
|
||
if delta_vacant <= poste.p_nb_p3:
|
||
new_poste_p3 = poste.p_nb_p3 - delta_vacant
|
||
poste.p_nb_p3 = new_poste_p3
|
||
else:
|
||
delta_vacant -= poste.p_nb_p3
|
||
poste.p_nb_p3 = 0
|
||
if delta_vacant <= poste.p_nb_p2:
|
||
new_poste_p2 = poste.p_nb_p2 - delta_vacant
|
||
poste.p_nb_p2 = new_poste_p2
|
||
else:
|
||
delta_vacant -= poste.p_nb_p2
|
||
poste.p_nb_p2 = 0
|
||
new_nb_p1 = poste.p_nb_p1 - delta_vacant
|
||
poste.p_nb_p1 = new_nb_p1
|
||
else:
|
||
poste.p_nb_p3 = 0
|
||
poste.p_nb_p2 = 0
|
||
poste.p_nb_p1 = 0
|
||
poste.p_nb_p4 = 0
|
||
|
||
poste.p_nb_reevalue = new_nb_reevalue
|
||
poste.p_nb_vacant = new_nb_vacant
|
||
poste.save(
|
||
update_fields=['p_nb_reevalue', 'p_nb_vacant', 'p_nb_non_etudie', 'p_nb_p4', 'p_nb_p3', 'p_nb_p2',
|
||
'p_nb_p1'])
|
||
|
||
|
||
post_save.connect(update_taux_off, sender=FormationEmploi)
|
||
|
||
|
||
def update_taux_soff(sender, instance, **kwargs):
|
||
"""Met à jour les compteurs des postes appartenant à la FE dont on change le taux d'armement cible pour la catégorie SOFF
|
||
|
||
:type instance: objet du modèle FormationEmploi
|
||
:param instance: FE dont on change le taux d'armement cible pour la catégorie SOFF
|
||
|
||
"""
|
||
taux = instance.fe_taux_armement_cible_soff
|
||
fe_id = instance.fe_code
|
||
|
||
postes = Poste.objects.filter(formation_emploi_id=fe_id, p_categorie='SOFF')
|
||
if (len(postes) > 0) and (taux is not None):
|
||
taux = taux * 0.01
|
||
|
||
for poste in postes:
|
||
new_nb_reevalue = np.ceil(poste.p_nb_reo * taux)
|
||
if new_nb_reevalue != poste.p_nb_reevalue:
|
||
if new_nb_reevalue > poste.p_nb_reevalue:
|
||
new_nb_p4 = poste.p_nb_p4 + new_nb_reevalue - poste.p_nb_reevalue
|
||
new_nb_non_etudie = (new_nb_reevalue - new_nb_p4) if (new_nb_reevalue - new_nb_p4) > 0 else 0
|
||
|
||
elif new_nb_reevalue > poste.p_nb_occupe:
|
||
new_nb_p4 = new_nb_reevalue - poste.p_nb_occupe
|
||
new_nb_non_etudie = new_nb_reevalue - new_nb_p4
|
||
poste.p_nb_p3 = 0
|
||
poste.p_nb_p2 = 0
|
||
poste.p_nb_p1 = 0
|
||
else:
|
||
new_nb_p4 = 0
|
||
new_nb_non_etudie = 0
|
||
poste.p_nb_p3 = 0
|
||
poste.p_nb_p2 = 0
|
||
poste.p_nb_p1 = 0
|
||
poste.p_nb_p4 = 0
|
||
new_nb_reevalue = poste.p_nb_occupe
|
||
|
||
poste.p_nb_non_etudie = new_nb_non_etudie
|
||
poste.p_nb_p4 = new_nb_p4
|
||
poste.p_nb_reevalue = new_nb_reevalue
|
||
poste.save(
|
||
update_fields=['p_nb_reevalue', 'p_nb_non_etudie', 'p_nb_p4', 'p_nb_p3', 'p_nb_p2',
|
||
'p_nb_p1'])
|
||
|
||
|
||
post_save.connect(update_taux_soff, sender=FormationEmploi)
|
||
|
||
|
||
def add_sva(sender, instance, **kwargs):
|
||
"""Met à jour les sous-viviers des militaires ayant la même filière de la nouvelle instance de SousVivierAssociation créée
|
||
|
||
:param instance: La nouvelle instance de SousVivierAssociation créée
|
||
:type instance: objet du modèle SousVivierAssociation
|
||
|
||
"""
|
||
filiere_id = instance.filiere_id
|
||
sva_categorie = instance.sva_categorie
|
||
sous_vivier_id = instance.sous_vivier_id
|
||
administres = Administre.objects.filter(a_filiere_id=filiere_id, a_categorie=sva_categorie)
|
||
administres.update(sous_vivier_id=sous_vivier_id)
|
||
|
||
|
||
post_save.connect(add_sva, sender=SousVivierAssociation)
|