init
This commit is contained in:
660
backend-django/backend/models.py
Normal file
660
backend-django/backend/models.py
Normal file
@@ -0,0 +1,660 @@
|
||||
"""
|
||||
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'
|
||||
Reference in New Issue
Block a user