193 lines
8.7 KiB
Python
193 lines
8.7 KiB
Python
"""
|
|
Ce module contient la fonction permettant de démarrer le scoring sur le sous-vivier désiré
|
|
"""
|
|
|
|
import time
|
|
|
|
from django.utils import timezone
|
|
|
|
from .models import Calcul
|
|
from .models import StatutCalculChoices as StatutCalcul
|
|
from .utils.logging import get_logger
|
|
from .utils_extraction import to_table_liste_preference, to_table_liste_preference_selectif
|
|
from .utils_insertion import (insert_liste_preference, insert_matching,
|
|
insert_Notation)
|
|
from .utils_matching import (matching_parfait, preprocess_matching,
|
|
preprocess_matchingSelectif)
|
|
from .utils_scoring import notations, notations_liste
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
# Fonction de lancement du scoring
|
|
def lancer_calculs(pam_id,sv_id):
|
|
"""
|
|
Fonction de lancement du calcul du scoring
|
|
|
|
:param sv_id: L'id de sous vivier étudié
|
|
:type sv_id: char
|
|
"""
|
|
Statut = StatutCalcul
|
|
statut = Statut.TERMINE
|
|
pourcentage_incr = 16.67
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
|
|
start_time = time.time()
|
|
logger.info('---------------------Scoring beginning------------------------')
|
|
notations_list = notations(pam_id,sv_id)
|
|
logger.info('---------------------Scoring ending---------------------------')
|
|
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage += pourcentage_incr
|
|
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
logger.info("------------------Scoring time -- %d seconds -----------------", time.time() - start_time)
|
|
start_time_insert = time.time()
|
|
logger.info('---------------------insert scoring results begining-----------')
|
|
insert_Notation(notations_list,pam_id,sv_id)
|
|
logger.info('---------------------insert scoring results ending-----------')
|
|
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage += pourcentage_incr
|
|
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
logger.info("------------------Insert time -- %d seconds -----------------", time.time() - start_time_insert)
|
|
|
|
start_time2 = time.time()
|
|
logger.info('---------------------Preference list creation beginning-----------------')
|
|
df_preference = to_table_liste_preference(pam_id,sv_id)
|
|
|
|
logger.info('---------------------Preference list creation ending-------------------')
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage += pourcentage_incr
|
|
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
try:
|
|
|
|
|
|
start_time3 = time.time()
|
|
logger.info('---------------------Matching beginning------------------------')
|
|
proposant, disposant, capacite = preprocess_matching(pam_id, sv_id, df_preference)
|
|
results = matching_parfait(proposant, disposant, capacite)
|
|
logger.info('---------------------Matching ending---------------------------')
|
|
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage += pourcentage_incr
|
|
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
logger.info("------------------Matching time -- %d seconds -----------------", time.time() - start_time3)
|
|
start_time_insert = time.time()
|
|
logger.info('---------------------insert matching results begining-----------')
|
|
insert_matching(results, pam_id)
|
|
logger.info('---------------------insert matching results ending-----------')
|
|
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id),pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage = 100
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
logger.info("------------------Insert time -- %d seconds -----------------", time.time() - start_time_insert)
|
|
except Exception as e:
|
|
logger.warning('Arret du scoring, veuillez renseigner au moins un département',e)
|
|
|
|
|
|
|
|
# Fonction de lancement du scoring sélectif
|
|
def lancer_calculSelectif(sv_id, pam_id, l_a_id, l_p_id):
|
|
"""
|
|
Fonction de lancement du calcul du scoring sélectif
|
|
|
|
:param sv_id: L'id de sous vivier étudié
|
|
:param l_a_id: Liste d'ids d'administrés
|
|
:param l_p_id: Liste d'ids de postes
|
|
:type sv_id: char
|
|
"""
|
|
Statut = StatutCalcul
|
|
pourcentage_incr = 16.67
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
|
|
start_time = time.time()
|
|
logger.info('---------------------Scoring beginning------------------------')
|
|
notations_list = notations_liste(sv_id, pam_id, l_a_id, l_p_id)
|
|
logger.info('---------------------Scoring ending---------------------------')
|
|
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage += pourcentage_incr
|
|
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
logger.info("------------------Scoring time -- %d seconds -----------------", time.time() - start_time)
|
|
start_time_insert = time.time()
|
|
logger.info('---------------------insert scoring results begining-----------')
|
|
insert_Notation(notations_list, pam_id, sv_id)
|
|
logger.info('---------------------insert scoring results ending-----------')
|
|
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage += pourcentage_incr
|
|
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
logger.info("------------------Insert time -- %d seconds -----------------", time.time() - start_time_insert)
|
|
|
|
start_time2 = time.time()
|
|
logger.info('---------------------Preference list creation beginning-----------------')
|
|
df_preference = to_table_liste_preference_selectif(sv_id, pam_id,l_a_id,l_p_id)
|
|
|
|
logger.info('---------------------Preference list creation ending-------------------')
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage += pourcentage_incr
|
|
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
try:
|
|
|
|
|
|
start_time3 = time.time()
|
|
logger.info('---------------------Matching beginning------------------------')
|
|
proposant, disposant, capacite = preprocess_matchingSelectif(sv_id, pam_id,l_a_id,l_p_id, df_preference)
|
|
results = matching_parfait(proposant, disposant, capacite)
|
|
logger.info('---------------------Matching ending---------------------------')
|
|
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage += pourcentage_incr
|
|
calcul.ca_statut_pourcentage = round(calcul.ca_statut_pourcentage, 2)
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
logger.info("------------------Matching time -- %d seconds -----------------", time.time() - start_time3)
|
|
start_time_insert = time.time()
|
|
logger.info('---------------------insert matching results begining-----------')
|
|
insert_matching(results, pam_id)
|
|
logger.info('---------------------insert matching results ending-----------')
|
|
|
|
calcul = Calcul.objects.get(id=str(sv_id)+str(pam_id)+'selectif',pam_id=pam_id,sous_vivier_id=sv_id)
|
|
calcul.ca_statut_pourcentage = 100
|
|
calcul.save()
|
|
if calcul.ca_statut == Statut.EN_ATTENTE_ARRET:
|
|
raise Exception('Arret du calcul')
|
|
|
|
logger.info("------------------Insert time -- %d seconds -----------------", time.time() - start_time_insert)
|
|
except Exception as e:
|
|
logger.warning('Arret du scoring, veuillez renseigner au moins un département',e)
|
|
|
|
return
|
|
|
|
|