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

661 lines
30 KiB
Python

"""
Ce dossier contient tous les modèles de la base de données d'OGURE
"""
# Import
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import ugettext_lazy as _
from bulk_update_or_create import BulkUpdateOrCreateQuerySet
"""
Script de création des diffferentes tables de la base
OGURE NG utilisation de l'ORM de Django pour réaliser cette étape
"""
# Modéle des Sous viviers de militaires et poste
class SousVivier(models.Model):
"""Modèle des Sous viviers de militaires et poste
"""
class Cols():
""" Constantes pour les noms de colonnes """
PK = 'sv_id'
LIBELLE = 'sv_libelle'
REL_GESTIONNAIRE = 'gestionnaire'
sv_id = models.CharField(max_length=100, primary_key=True)
gestionnaire = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True)
sv_libelle = models.CharField(max_length=100)
# Modèle des Domaines
class Domaine(models.Model):
"""Modèle des Domaines
"""
d_code = models.CharField(primary_key=True, max_length=100)
d_libelle = models.CharField(max_length=100, null=True)
def as_dict(self):
return {
"id": self.d_code,
"code": self.d_code,
"libelle": self.d_code,
}
# Modèle des Filières
class Filiere(models.Model):
"""Modèle des Filières
"""
f_code = models.CharField(primary_key=True, max_length=100)
domaine = models.ForeignKey(Domaine, on_delete=models.SET_NULL, null=True)
f_libelle_court = models.CharField(max_length=100, null=True)
f_libelle_long = models.CharField(max_length=100, null=True)
def as_dict(self):
return {
"id": self.f_code,
"domaineId": self.domaine_id,
"code": self.f_code,
"libelle": self.f_code,
"libelleCourt": self.f_code,
}
# Modèle de l'association des sous-viviers à la catégorie et la filière
class SousVivierAssociation(models.Model):
"""Modèle de l'association des sous-viviers à la catégorie et la filière
"""
CATEGORIE_CHOICES = [('MDR', 'MDR'), ('SOFF', 'SOFF'), ('OFF', 'OFF'), ('OGX', 'OGX')]
sva_id = models.IntegerField(primary_key=True)
sous_vivier = models.ForeignKey(SousVivier, on_delete=models.SET_NULL, null=True)
filiere = models.ForeignKey(Filiere, on_delete=models.SET_NULL, null=True)
sva_categorie = models.CharField(max_length=5, choices=CATEGORIE_CHOICES)
sva_arme = models.CharField(max_length=20, null=True)
# Modèle des Grades
# FIXME le code grade et libellé sont inversés
class Grade(models.Model):
"""Modèle des Grades
"""
gr_code = models.CharField(max_length=100, primary_key=True)
gr_categorie = models.CharField(max_length=100, null=True)
gr_ordre = models.IntegerField(null=True)
def as_dict(self):
return {
"id": self.gr_code,
"code": self.gr_code,
# TODO corriger ci-dessous : catégorie (ex : "Sous-officiers"), libellé long (ex : "SERGENT CHEF") + ordre
"categorie": self.gr_categorie,
"ordre": self.gr_ordre
}
# Modèle des Garnison
class Garnison(models.Model):
"""Modèle des Garnison
"""
gar_id = models.CharField(max_length=100, primary_key=True)
gar_lieu = models.CharField(max_length=100, verbose_name="Garnison")
gar_code_postal = models.CharField(max_length=100, null=True)
def __str__(self):
return self.gar_lieu
# Modèle de groupe FE
class GroupeFe(models.Model):
"""Modèle de groupe FE
"""
groupe_fe_nom = models.CharField(primary_key=True, max_length=100, verbose_name='Groupe de FE')
def __str__(self):
return self.groupe_fe_nom
# Modèle des Formation d'emplois
class FormationEmploi(models.Model):
"""Modèle des Formation d'emplois
"""
class Cols():
""" Constantes pour les noms de colonnes """
PK = 'fe_code'
ZONE_DEFENSE = 'zone_defense'
REL_GARNISON = 'garnison'
REL_MERE = 'mere'
fe_code = models.CharField(primary_key=True, max_length=100)
groupe_fe = models.ForeignKey(GroupeFe, blank=True, on_delete=models.SET_NULL, null=True)
garnison = models.ForeignKey(Garnison, on_delete=models.CASCADE)
fe_libelle = models.CharField(max_length=100)
fe_taux_armement_cible_off = models.FloatField(null=True, verbose_name="TA cible OFF")
fe_nb_poste_reo_off = models.IntegerField(null=True)
fe_nb_poste_reevalue_off = models.IntegerField(null=True)
fe_nb_poste_vacant_off = models.IntegerField(null=True)
fe_nb_poste_occupe_off = models.IntegerField(null=True)
fe_taux_armement_cible_soff = models.FloatField(null=True, verbose_name="TA cible SOFF")
fe_nb_poste_reo_soff = models.IntegerField(null=True)
fe_nb_poste_reevalue_soff = models.IntegerField(null=True)
fe_nb_poste_vacant_soff = models.IntegerField(null=True)
fe_nb_poste_occupe_soff = models.IntegerField(null=True)
fe_taux_armement_cible_mdr = models.FloatField(null=True, verbose_name="TA cible MDR")
fe_nb_poste_reo_mdr = models.IntegerField(null=True)
fe_nb_poste_reevalue_mdr = models.IntegerField(null=True)
fe_nb_poste_vacant_mdr = models.IntegerField(null=True)
fe_nb_poste_occupe_mdr = models.IntegerField(null=True)
zone_defense = models.CharField('zone de défense', db_column='fe_zone_defense', max_length=64, blank=True, null=True)
mere = models.ForeignKey('self', blank=True, null=True, on_delete=models.SET_NULL, verbose_name='FE mère', db_column='fe_mere_id')
def as_dict(self):
return {
"id": self.fe_code,
"code": self.fe_code,
"libelle": self.fe_libelle,
"groupe_fe": self.groupe_fe_id
}
# Modèle des Groupes de marques
class MarquesGroupe(models.Model):
"""Modèle des Groupes de marques
"""
gm_id = models.IntegerField(primary_key=True)
gm_type = models.CharField(max_length=100)
gm_code = models.CharField(max_length=100)
gm_libelle = models.CharField(max_length=100)
gm_ordre = models.IntegerField(null=True)
gm_selection_multiple = models.BooleanField(null=True)
def as_dict(self):
return {
"id": self.gm_id,
"type": self.gm_type,
"code": self.gm_code,
"libelle": self.gm_libelle,
"selectionMultiple": self.gm_selection_multiple,
"ordre": self.gm_ordre
}
# Modèle des Marques
class Marque(models.Model):
"""Modèle des Marques
"""
mar_id = models.TextField(primary_key=True)
groupe_marques = models.ForeignKey(MarquesGroupe, on_delete=models.CASCADE)
mar_code = models.CharField(max_length=100)
mar_libelle = models.CharField(max_length=100)
mar_ordre = models.IntegerField(null=True)
def as_dict(self):
return {
"id": self.mar_id,
"groupeMarquesId": self.groupe_marques_id,
"code": self.mar_code,
"libelle": self.mar_libelle,
"ordre": self.mar_ordre
}
# Modèle des fonctions
class Fonction(models.Model):
"""Modèle des fonctions
"""
fon_id = models.CharField(max_length=100, primary_key=True)
fon_libelle = models.CharField(max_length=100)
# Modèle Compétences
class Competence(models.Model):
"""Modèle Compétences
"""
comp_id = models.CharField(primary_key=True, max_length=100)
comp_libelle = models.CharField(null=True, max_length=100)
def as_dict(self):
return {
"id": self.comp_id,
"libelle": self.comp_libelle,
}
class SpecifiqueChoices(models.TextChoices):
"""Choix pour les propositions de CIAT d'un poste"""
SHM = 'SHM', 'SHM'
ITD = 'ITD', 'ITD'
PPE = 'PPE', 'PPE'
class PropositionsArmementChoices(models.TextChoices):
"""Choix pour les propositions d'armement d'un poste"""
PROPOSE = 'PROPOSE', 'Propositions'
VALIDE = 'VALIDE', 'Propositions validées'
# Modèle des Poste
class Poste(models.Model):
""" Modèle des Poste """
class Cols():
""" Constantes pour les noms de colonnes """
PK = 'p_id'
# relations many-to-many
M2M_COMPETENCES = 'competences'
# relations one-to-many
O2M_DECISION = 'decisions'
# relations one-to-one ou many-to-one
REL_FONCTION = 'fonction'
REL_FORMATION_EMPLOI = 'formation_emploi'
REL_SOUS_VIVIER = 'sous_vivier'
objects = BulkUpdateOrCreateQuerySet.as_manager()
CHOICES_NF = [('1A', '1A'), ('1B', '1B'), ('1C', '1C'), ('2.', '2.'), ('3A', '3A'), ('3B', '3B'),
('3B NFS', '3B NFS'), ('4.', '4.'), ('5A', '5A'), ('5B', '5B'), ('5C', '5C'), ('6A', '6A'),
('6B', '6B')]
AVIS = [('P1', 'P1'), ('P2', 'P2'), ('P3', 'P3'), ('P4', 'P4'), ('P4', 'P4'),('P4', 'P4'),('Gele','Gele'),('Non etudie','Non etudie')]
p_id = models.CharField(max_length=100, primary_key=True)
fonction = models.ForeignKey(Fonction, on_delete=models.SET_NULL, null=True)
sous_vivier = models.ForeignKey(SousVivier, on_delete=models.SET_NULL, null=True)
formation_emploi = models.ForeignKey(FormationEmploi, on_delete=models.SET_NULL, null=True)
competences = models.ManyToManyField(Competence)
p_domaine = models.ForeignKey(Domaine, on_delete=models.SET_NULL, null=True)
p_filiere = models.ForeignKey(Filiere, on_delete=models.SET_NULL, null=True)
p_fonction = models.CharField(max_length=100, null=True)
p_code_fonction = models.CharField(max_length=100, null=True)
p_nf = models.CharField(max_length=100, null=True, choices=CHOICES_NF)
p_categorie = models.CharField(max_length=100, null=True)
p_dep = models.IntegerField(null=True)
p_liste_id_marques = models.CharField(max_length=100, null=True, blank=True)
p_eip = models.CharField(max_length=100)
p_avis = models.CharField(max_length=100, default='Non etudie', choices=AVIS)
p_notes_gestionnaire = models.TextField(null=True)
p_notes_partagees = models.TextField(null=True)
p_poids_competences = models.FloatField(null=True)
p_poids_filiere = models.FloatField(null=True)
p_poids_nf = models.FloatField(null=True)
p_nb_p1 = models.IntegerField(null=True)
p_nb_p2 = models.IntegerField(null=True)
p_nb_p3 = models.IntegerField(null=True)
p_nb_p4 = models.IntegerField(null=True)
p_nb_non_etudie = models.IntegerField(null=True)
p_nb_gele = models.IntegerField(null=True)
p_nb_reo = models.IntegerField(null=True)
p_nb_reevalue = models.IntegerField(null=True)
p_nb_occupe = models.IntegerField(null=True)
p_nb_vacant = models.IntegerField(null=True)
p_nb_affectable = models.IntegerField(null=True)
p_ciat = models.BooleanField('CIAT', default=False, null=True)
p_specifique = models.CharField('Poste spécifique', max_length=250, choices=SpecifiqueChoices.choices, null=True, blank=True)
propositions_armement = models.CharField("propositions d'armement", db_column='p_propositions_armement', max_length=10, choices=PropositionsArmementChoices.choices, null=True, blank=True)
p_priorisation_pcp = models.TextField('Priorisation PCP', null=True, blank=True)
class Meta:
constraints = [
models.CheckConstraint(
name='%(app_label)s_%(class)s_p_specifique_valid',
check=models.Q(p_specifique__in=SpecifiqueChoices.values)
),
models.CheckConstraint(
name='%(app_label)s_%(class)s_propositions_armement_valid',
check=models.Q(propositions_armement__in=PropositionsArmementChoices.values)
)
]
class StatutPamChoices(models.TextChoices):
"""[Administre] choix pour le statut PAM"""
A_ETUDIER = 'A_ETUDIER', 'A étudier'
A_ETUDIER_REC = 'A_ETUDIER_REC', 'A étudier REC'
A_MAINTENIR = 'A_MAINTENIR', 'A maintenir'
A_MUTER = 'A_MUTER', 'A muter'
A_TRAITER = 'A_TRAITER', 'A traiter'
NON_DISPONIBLE = 'NON_DISPONIBLE', 'Non disponible'
NON_ETUDIE = 'NON_ETUDIE', 'Non étudié'
PARTANT = 'PARTANT', 'Partant'
class StatutFuturChoices(models.TextChoices):
"""[Administre] choix pour le statut futur"""
CLDM = 'CLDM', 'CLDM'
CP = 'CP', 'CP'
DRJI = 'DRJI', 'DRJI'
NRCT = 'NRCT', 'NRCT'
DET = 'DET', 'DET'
RECONV = 'RECONV', 'RECONV'
# Modèle des administrés
class Administre(models.Model):
"""Modèle des administrés"""
class Cols():
""" Constantes pour les noms de colonnes """
PK = 'a_id_sap'
STATUT_CONCERTO = 'a_statut_concerto'
STATUT_PAM = 'a_statut_pam'
DATE_STATUT_CONCERTO = 'a_date_statut_concerto'
# relations many-to-many
M2M_COMPETENCES = 'a_liste_id_competences'
# relations one-to-many
O2M_FMOB = 'fmobs'
# relations one-to-one ou many-to-one
REL_DECISION = 'decision'
REL_FONCTION = 'fonction'
REL_FORMATION_EMPLOI = 'formation_emploi'
REL_GRADE = 'grade'
REL_SOUS_VIVIER = 'sous_vivier'
objects = BulkUpdateOrCreateQuerySet.as_manager()
CHOICES_NF = [('1A', '1A'), ('1B', '1B'), ('1C', '1C'), ('2.', '2.'), ('3A', '3A'), ('3B', '3B'),
('3B NFS', '3B NFS'), ('4.', '4.'), ('5A', '5A'), ('5B', '5B'), ('5C', '5C'), ('6A', '6A'),
('6B', '6B')]
a_id_sap = models.IntegerField(primary_key=True)
formation_emploi = models.ForeignKey(FormationEmploi, related_name="formation_emploi", on_delete=models.SET_NULL,
null=True)
fonction = models.ForeignKey(Fonction, on_delete=models.SET_NULL, null=True)
sous_vivier = models.ForeignKey(SousVivier, on_delete=models.SET_NULL, null=True, blank=True)
grade = models.ForeignKey(Grade, on_delete=models.SET_NULL, null=True)
a_grade_date_debut = models.CharField(max_length=100, null=True)
a_liste_id_marques = models.CharField(max_length=100, null=True)
a_liste_id_competences = models.ManyToManyField(Competence)
a_nom = models.CharField(max_length=100)
a_prenom = models.CharField(max_length=100)
a_sexe = models.CharField(max_length=100)
a_id_def = models.CharField(max_length=100, null=True)
a_eip = models.CharField(max_length=100)
a_fonction = models.CharField(max_length=100, null=True)
a_code_fonction = models.CharField(max_length=100, null=True)
a_domaine = models.ForeignKey(Domaine, related_name="domaine", on_delete=models.SET_NULL, null=True)
a_filiere = models.ForeignKey(Filiere, on_delete=models.SET_NULL, null=True)
a_nf = models.CharField(max_length=100, null=True, choices=CHOICES_NF)
a_domaine_poste = models.ForeignKey(Domaine, related_name="domaine_poste", on_delete=models.SET_NULL, null=True)
a_filiere_poste = models.ForeignKey(Filiere, related_name="filiere_poste", on_delete=models.SET_NULL, null=True)
a_nf_poste = models.CharField(max_length=100, null=True, choices=CHOICES_NF)
a_categorie = models.CharField(max_length=5, null=True)
a_domaine_futur = models.ForeignKey(Domaine, related_name="domaine_futur", on_delete=models.SET_NULL, null=True)
a_filiere_futur = models.ForeignKey(Filiere, related_name="filiere_futur", on_delete=models.SET_NULL, null=True)
a_nf_futur = models.CharField(max_length=100, null=True, choices=CHOICES_NF)
a_bureau_gestion = models.CharField(max_length=100, null=True)
a_date_entree_service = models.CharField(max_length=100, null=True)
a_arme = models.CharField(max_length=100, null=True)
a_rg_origine_recrutement = models.CharField(max_length=100, null=True)
a_date_naissance = models.CharField(max_length=100, null=True)
a_diplome_hl = models.CharField(max_length=100, null=True)
a_dernier_diplome = models.CharField(max_length=100, null=True)
a_credo_fe = models.CharField(max_length=100, null=True)
a_date_arrivee_fe = models.CharField(max_length=100, null=True)
a_pos_statuaire = models.CharField(max_length=100, null=True)
a_date_pos_statuaire = models.CharField(max_length=100, null=True)
a_interruption_service = models.CharField(max_length=100, null=True)
a_situation_fam = models.CharField(max_length=100, null=True)
a_nombre_enfants = models.IntegerField(null=True)
a_date_rdc = models.DateField(null=True)
a_date_dernier_acr = models.DateField(null=True)
a_eis = models.CharField(max_length=100, null=True)
a_sap_conjoint = models.IntegerField(null=True)
a_flag_particulier = models.IntegerField(null=True)
a_flag_pam = models.IntegerField(null=True)
a_statut_pam = models.CharField('statut PAM', max_length=100, choices=StatutPamChoices.choices, null=True, blank=True)
a_notes_gestionnaire = models.TextField(null=True)
a_notes_partagees = models.TextField(null=True)
a_eip_futur = models.CharField(max_length=100, null=True)
a_affectation1 = models.CharField(max_length=100, null=True)
a_affectation2 = models.CharField(max_length=100, null=True)
a_affectation3 = models.CharField(max_length=100, null=True)
a_liste_depts_souhaites = models.CharField(max_length=100, null=True)
a_pls_gb_max = models.IntegerField(null=True)
a_marqueur_pn = models.BooleanField(default=False)
a_affectation4 = models.CharField(max_length=100, null=True)
a_affectation5 = models.CharField(max_length=100, null=True)
a_affectation6 = models.CharField(max_length=100, null=True)
a_affectation7 = models.CharField(max_length=100, null=True)
a_affectation8 = models.CharField(max_length=100, null=True)
a_affectation9 = models.CharField(max_length=100, null=True)
a_fonction1 = models.CharField(max_length=100, null=True)
a_fonction2 = models.CharField(max_length=100, null=True)
a_fonction3 = models.CharField(max_length=100, null=True)
a_fonction4 = models.CharField(max_length=100, null=True)
a_fonction5 = models.CharField(max_length=100, null=True)
a_fonction6 = models.CharField(max_length=100, null=True)
a_fonction7 = models.CharField(max_length=100, null=True)
a_fonction8 = models.CharField(max_length=100, null=True)
a_fonction9 = models.CharField(max_length=100, null=True)
a_profession_conjoint = models.CharField(max_length=100, null=True)
a_id_def_conjoint = models.CharField(max_length=100, null=True)
a_diplome_1 = models.CharField(max_length=100, null=True)
a_diplome_1_date = models.DateField(max_length=100, null=True)
a_diplome_1_note = models.FloatField(null=True)
a_diplome_2 = models.CharField(max_length=100, null=True)
a_diplome_2_date = models.DateField(max_length=100, null=True)
a_diplome_2_note = models.FloatField(null=True)
a_diplome_3 = models.CharField(max_length=100, null=True)
a_diplome_3_date = models.DateField(max_length=100, null=True)
a_diplome_3_note = models.FloatField(null=True)
a_diplome_4 = models.CharField(max_length=100, null=True)
a_diplome_4_date = models.DateField(max_length=100, null=True)
a_diplome_4_note = models.FloatField(null=True)
a_diplome_5 = models.CharField(max_length=100, null=True)
a_diplome_5_date = models.DateField(max_length=100, null=True)
a_diplome_5_note = models.FloatField(null=True)
a_diplome_6 = models.CharField(max_length=100, null=True)
a_diplome_6_date = models.DateField(max_length=100, null=True)
a_diplome_6_note = models.FloatField(null=True)
a_diplome_7 = models.CharField(max_length=100, null=True)
a_diplome_7_date = models.DateField(max_length=100, null=True)
a_diplome_7_note = models.FloatField(null=True)
a_diplome_8 = models.CharField(max_length=100, null=True)
a_diplome_8_date = models.DateField(max_length=100, null=True)
a_diplome_8_note = models.FloatField(null=True)
a_diplome_9 = models.CharField(max_length=100, null=True)
a_diplome_9_date = models.DateField(max_length=100, null=True)
a_diplome_9_note = models.FloatField(null=True)
a_diplome_10 = models.CharField(max_length=100, null=True)
a_diplome_10_date = models.DateField(max_length=100, null=True)
a_diplome_10_note = models.FloatField(null=True)
a_origine_recrutement = models.CharField(max_length=100, null=True)
statut_futur = models.CharField('statut futur', db_column='a_statut_futur', max_length=8, choices=StatutFuturChoices.choices, null=True, blank=True)
date_statut_futur = models.DateField('date du statut futur', db_column='a_date_statut_futur', null=True, blank=True)
a_statut_concerto = models.CharField('statut CONCERTO', max_length=32, null=True, blank=True)
a_date_statut_concerto = models.CharField('date du statut CONCERTO', max_length=32, null=True, blank=True)
suivi_previsionnel_situation = models.CharField('suivi prévisionnel de la situation du militaire', db_column='a_suivi_previsionnel_situation', max_length=100, null=True, blank=True)
date_suivi_previsionnel_situation = models.DateField('date du suivi prévisionnel de la situation du militaire', db_column='a_date_suivi_previsionnel_situation', null=True, blank=True)
a_annee_previsible_mutation = models.PositiveIntegerField('année prévisible de mutation', null=True)
a_fud = models.CharField('FUD de départ', max_length=32, null=True, blank=True)
a_date_fud = models.CharField('date du FUD', max_length=32, null=True, blank=True)
class Meta:
verbose_name = "Administré"
verbose_name_plural = "Administrés"
constraints = [
models.CheckConstraint(
name='%(app_label)s_%(class)s_statut_pam_valid',
check=models.Q(a_statut_pam__in=StatutPamChoices.values)
),
models.CheckConstraint(
name='%(app_label)s_%(class)s_statut_futur_valid',
check=models.Q(statut_futur__in=StatutFuturChoices.values)
),
]
# class CompetencesAdministre(models.Model):
# """Modèle de table intermédiaire entre Administrés et Compétences
# """
# competence = models.ForeignKey(Competence, on_delete=models.CASCADE)
# administre = models.ForeignKey(Administre, on_delete=models.CASCADE)
# def __unicode__(self):
# return self.competence.comp_id + self.administre.a_id_sap
class FMOB(models.Model):
"""Modèle de FMOB
"""
objects = BulkUpdateOrCreateQuerySet.as_manager()
fmob_id = models.CharField(max_length=100, primary_key=True)
administre = models.ForeignKey(Administre, on_delete=models.CASCADE, null=True, related_name="fmobs",
db_constraint=False)
fmob_millesime = models.IntegerField(null=True)
fmob_annulation_fmob = models.BooleanField(default=False)
fmob_annulation_femp = models.BooleanField(default=False)
fmob_sans_suite_militaire_fmob = models.BooleanField(default=False)
fmob_sans_suite_militaire_femp = models.BooleanField(default=False)
fmob_date_visa_militaire = models.DateField(max_length=100, null=True)
fmob_depart_institution_soff = models.BooleanField(default=False)
fmob_mobilite_bassin_externe = models.BooleanField(default=False)
fmob_mobilite_bassin_interne = models.BooleanField(default=False)
fmob_mobilite_centre_interet_adt = models.BooleanField(default=False)
fmob_mobilite_dans_specialite = models.BooleanField(default=False)
fmob_mobilite_hors_metropole = models.BooleanField(default=False)
fmob_mobilite_recrutement_particulier_administre = models.BooleanField(default=False)
fmob_motif_edition_la = models.CharField(max_length=100, null=True)
fmob_motif_edition_ll = models.CharField(max_length=100, null=True)
fmob_reception_drhat_fmob = models.BooleanField(default=False)
fmob_reconnaissance_parcours_pro_administre = models.BooleanField(default=False)
fmob_proposition_affectation_verrouille = models.CharField(max_length=100, null=True)
fmob_reception_drhat_femp = models.BooleanField(default=False)
fmob_avis_cdc_mobilite_interne = models.BooleanField(default=False)
fmob_avis_cdc_mobilite_externe = models.BooleanField(default=False)
fmob_avis_cdc_mutation_administre = models.BooleanField(default=False)
fmob_avis_cdc_mobilite_centre_interet = models.BooleanField(default=False)
fmob_avis_cdc_mobilite_specialite = models.BooleanField(default=False)
fmob_avis_cdc_mobilite_hors_metropole = models.BooleanField(default=False)
fmob_avis_cdc_mobilite_recrutement_particulier_admin = models.BooleanField(default=False)
fmob_date_deb_fmob = models.CharField(max_length=100, null=True)
fmob_date_fin_fmob = models.CharField(max_length=100, null=True)
fmob_date_signature_admin_fmob = models.DateField(max_length=100, null=True)
fmob_date_signature_admin_femp = models.DateField(max_length=100, null=True)
fmob_date_signature_chef_de_corps = models.DateField(max_length=100, null=True)
fmob_remarques_eventuelles_administres = models.TextField(null=True)
fmob_avis_commandant_formation = models.TextField(null=True)
fmob_fonction_1 = models.CharField(max_length=100, null=True)
fmob_fonction_2 = models.CharField(max_length=100, null=True)
fmob_fonction_3 = models.CharField(max_length=100, null=True)
fmob_fonction_4 = models.CharField(max_length=100, null=True)
fmob_fonction_5 = models.CharField(max_length=100, null=True)
fmob_commune_1 = models.CharField(max_length=100, null=True)
fmob_commune_2 = models.CharField(max_length=100, null=True)
fmob_commune_3 = models.CharField(max_length=100, null=True)
fmob_commune_4 = models.CharField(max_length=100, null=True)
fmob_commune_5 = models.CharField(max_length=100, null=True)
fmob_prio_1 = models.BooleanField(default=False)
fmob_prio_2 = models.BooleanField(default=False)
fmob_prio_3 = models.BooleanField(default=False)
fmob_prio_4 = models.BooleanField(default=False)
fmob_prio_5 = models.BooleanField(default=False)
fmob_avis_mutabilite = models.CharField(max_length=100, null=True)
fmob_obs = models.CharField(max_length=100, null=True)
fmob_fe_future = models.CharField(max_length=100, null=True)
# Modèle Liste de Préference
class PreferencesListe(models.Model):
"""Modèle Liste de Préference
"""
lp_id = models.IntegerField(primary_key=True)
administre = models.ForeignKey(Administre, on_delete=models.CASCADE)
poste = models.ForeignKey(Poste, on_delete=models.CASCADE)
lp_rang_poste = models.IntegerField()
# Modèle pour le suivi des calculs
class Calcul(models.Model):
"""Modèle pour le suivi des calculs
On y intègre également le statut du calcul
"""
class Statut(models.TextChoices):
AUCUN = 'AUCUN', 'aucun'
EN_ATTENTE = 'EN_ATTENTE', 'en attente'
EN_COURS = 'EN_COURS', 'en cours'
TERMINE = 'TERMINE', 'terminé'
ERREUR = 'ERREUR', 'terminé en erreur'
TERMINE_DE_FORCE = 'TERMINE_DE_FORCE', 'terminé de force'
ARRETER = 'ARRETER'
sous_vivier = models.OneToOneField(SousVivier, primary_key=True, on_delete=models.CASCADE)
ca_date_debut = models.DateTimeField(null=True, blank=True)
ca_date_fin = models.DateTimeField(null=True, blank=True)
ca_statut = models.CharField(max_length=100)
ca_statut_pourcentage = models.FloatField(default='100')
# Modèle pour Le PAM
class PAM(models.Model):
"""Modèle pour Le PAM
"""
pam_id = models.IntegerField(primary_key=True)
pam_date = models.CharField(max_length=100)
pam_libelle = models.CharField(max_length=100)
pam_statut = models.CharField(max_length=100)
# Modèle pour les notations
class Notation(models.Model):
"""Modèle pour les notations
"""
no_id = models.AutoField(primary_key=True)
administre = models.ForeignKey(Administre, on_delete=models.CASCADE)
poste = models.ForeignKey(Poste, on_delete=models.CASCADE)
pam = models.ForeignKey(PAM, on_delete=models.SET_NULL, null=True, blank=True)
no_rang_administre = models.IntegerField(null=True)
no_rang_poste = models.IntegerField(null=True)
no_date_execution = models.DateTimeField(auto_now=True)
no_score_administre = models.FloatField(null=True)
no_score_poste = models.FloatField(null=True)
no_flag_cple_ideal = models.BooleanField(default=False)
# Modèle pour les décisions
class Decision(models.Model):
"""Modèle pour les décisions
"""
administre = models.OneToOneField(Administre, on_delete=models.CASCADE, primary_key=True)
poste = models.ForeignKey(Poste, on_delete=models.CASCADE, related_name="decisions")
pam = models.ForeignKey(PAM, on_delete=models.SET_NULL, null=True, blank=True)
de_decision = models.CharField(max_length=100)
de_date_decision = models.DateTimeField(auto_now=True)
de_notes_gestionnaire = models.TextField(null=True, blank=True)
de_notes_partagees = models.TextField(null=True, blank=True)
notation = models.ForeignKey(Notation, on_delete=models.SET_NULL, null=True, blank=True)
# Modèle Utilisateur de l'application
class CustomUser(AbstractUser):
"""Modèle Utilisateur de l'application
"""
administre = models.ForeignKey(Administre, blank=True, on_delete=models.SET_NULL, null=True)
grade = models.CharField(blank=True, null=True, max_length=100)
# Modèle d'association des groupes de FE aux gestionnaires PCP
class PcpFeGroupe(models.Model):
"""Modèle d'association des groupes de FE aux gestionnaires PCP
"""
CATEGORIE_CHOICES = [('MDR', 'MDR'), ('OFF', 'OFF'), ('SOFF', 'SOFF'), ('OGX', 'OGX')]
pcp_fe_id = models.AutoField(primary_key=True)
pcp_fe_groupe = models.ForeignKey(GroupeFe, null=True, on_delete=models.CASCADE,
verbose_name='Nom du groupe')
pcp_fe_categorie = models.CharField(max_length=5, choices=CATEGORIE_CHOICES, null=True, verbose_name='Catégorie')
gestionnaire = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True, db_constraint=False)
def __str__(self):
return str(self.gestionnaire.first_name) + ' ' + str(self.gestionnaire.last_name.upper()) + ' / ' + self.pcp_fe_groupe.groupe_fe_nom + ' / ' + self.pcp_fe_categorie
class Meta:
verbose_name = 'Lien gest PCP / groupe FE'
verbose_name_plural = 'Liens gest PCP / groupe FE'