Files
2022-11-08 21:19:51 +01:00

199 lines
8.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Les signaux permettent à certains expéditeurs davertir un ensemble de destinataires quune 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)