283 lines
15 KiB
Python
283 lines
15 KiB
Python
from bulk_update_or_create import BulkUpdateOrCreateQuerySet
|
|
from django.db import models
|
|
|
|
from .commun import NiveauFonctionnelChoices, SpecifiqueChoices
|
|
from .competence import Competence
|
|
from .domaine import Domaine
|
|
from .filiere import Filiere
|
|
from .fonction import Fonction
|
|
from .formation_emploi import FormationEmploi
|
|
from .grade import Grade
|
|
from .sous_vivier import SousVivier
|
|
from .pam import PAM
|
|
class SuiviPrevisionnelMilitaire(models.TextChoices):
|
|
"""
|
|
[Administre] choix pour le gestionnaire PCP
|
|
"""
|
|
|
|
MOB_EXT = 'MOB_EXT', 'Mobilité externe'
|
|
MOB_INT = 'MOB_INT', 'Mobilité interne',
|
|
NRCT = 'NRCT', 'NRCT',
|
|
RDC = 'RDC', 'RDC',
|
|
LMT = 'LMT', 'Limite de contrat',
|
|
REC = 'REC', 'Reconversion',
|
|
REC_OE = 'REC_OE', 'Recrutement OE',
|
|
DFP = 'DFP', 'Détachement FP',
|
|
|
|
|
|
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'
|
|
|
|
|
|
class StatutPamChoices(models.TextChoices):
|
|
"""
|
|
[Administre] choix pour le statut PAM
|
|
attributs supplémentaires :
|
|
- calc_enabled : est-ce que ce statut permet le calcul ?
|
|
- dec_enabled : est-ce que ce statut permet de créer une décision ?
|
|
"""
|
|
|
|
# (valeur, calc_enabled, dec_enabled), libellé
|
|
A_ETUDIER = ('A_ETUDIER', True, True), 'A étudier'
|
|
A_ETUDIER_REC = ('A_ETUDIER_REC', True, True), 'A étudier REC'
|
|
A_MAINTENIR = ('A_MAINTENIR', False, True), 'A maintenir'
|
|
A_MUTER = ('A_MUTER', True, True), 'A muter'
|
|
A_TRAITER = ('A_TRAITER', False, False), 'A traiter'
|
|
NON_DISPONIBLE = ('NON_DISPONIBLE', False, False), 'Non disponible'
|
|
NON_ETUDIE = ('NON_ETUDIE', False, False), 'Non étudié'
|
|
PARTANT = ('PARTANT', False, False), 'Partant'
|
|
|
|
def __new__(cls, value):
|
|
obj = str.__new__(cls, value[0])
|
|
obj._value_ = value[0]
|
|
obj.calc_enabled = value[1]
|
|
obj.dec_enabled = value[2]
|
|
return obj
|
|
|
|
|
|
class Administre(models.Model):
|
|
"""
|
|
Modèle des administrés
|
|
"""
|
|
|
|
class Cols():
|
|
""" Constantes pour les noms de colonnes """
|
|
|
|
PK = 'a_id_sap'
|
|
CATEGORIE = 'a_categorie'
|
|
STATUT_CONCERTO = 'a_statut_concerto'
|
|
STATUT_CONCERTO_FUTUR = 'a_statut_concerto_futur'
|
|
DATE_STATUT_CONCERTO = 'a_date_statut_concerto'
|
|
DATE_STATUT_CONCERTO_FUTUR = 'a_date_statut_concerto_futur'
|
|
# relations many-to-many
|
|
M2M_COMPETENCES = 'a_liste_id_competences'
|
|
M2M_PAM = 'pam'
|
|
# relations one-to-many
|
|
O2M_FMOB = 'fmobs'
|
|
# relations one-to-one ou many-to-one
|
|
REL_DOMAINE = 'a_domaine'
|
|
REL_FILIERE = 'a_filiere'
|
|
REL_DECISION = 'decision'
|
|
REL_FONCTION = 'fonction'
|
|
REL_FORMATION_EMPLOI = 'formation_emploi'
|
|
REL_GRADE = 'grade'
|
|
REL_SOUS_VIVIER = 'sous_vivier'
|
|
STATUT_PAM = 'a_statut_pam'
|
|
REL_PAM_INTER = 'administre'
|
|
|
|
|
|
objects = BulkUpdateOrCreateQuerySet.as_manager()
|
|
|
|
a_id_sap = models.IntegerField(primary_key=True)
|
|
formation_emploi = models.ForeignKey(FormationEmploi, related_name="formation_emploi", on_delete=models.SET_NULL,
|
|
null=True, blank=True)
|
|
pam = models.ManyToManyField(PAM, through='Administres_Pams')
|
|
fonction = models.ForeignKey(Fonction, on_delete=models.SET_NULL, null=True, blank=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, blank=True)
|
|
a_grade_date_debut = models.CharField(max_length=100, null=True, blank=True)
|
|
a_liste_id_marques = models.CharField(max_length=100, null=True, blank=True)
|
|
a_liste_id_competences = models.ManyToManyField(Competence, blank=True)
|
|
a_nom = models.CharField(max_length=100)
|
|
a_prenom = models.CharField(max_length=100)
|
|
a_sexe = models.CharField(max_length=100, null=True, blank=True)
|
|
a_id_def = models.CharField(max_length=100, null=True, blank=True)
|
|
a_eip = models.CharField(max_length=100, null=True, blank=True)
|
|
a_fonction = models.CharField(max_length=100, null=True, blank=True)
|
|
a_code_fonction = models.CharField(max_length=100, null=True, blank=True)
|
|
a_domaine = models.ForeignKey(Domaine, on_delete=models.SET_NULL, null=True, blank=True, db_constraint=False)
|
|
a_filiere = models.ForeignKey(Filiere, on_delete=models.SET_NULL, null=True, blank=True, db_constraint=False)
|
|
a_nf = models.CharField(max_length=100, null=True, blank=True, choices=NiveauFonctionnelChoices.choices)
|
|
a_domaine_poste = models.ForeignKey(Domaine, related_name="domaine_poste", on_delete=models.SET_NULL, null=True, blank=True)
|
|
a_filiere_poste = models.ForeignKey(Filiere, related_name="filiere_poste", on_delete=models.SET_NULL, null=True, blank=True)
|
|
a_nf_poste = models.CharField(max_length=100, null=True, blank=True, choices=NiveauFonctionnelChoices.choices)
|
|
a_categorie = models.CharField(max_length=5, null=True, blank=True)
|
|
a_domaine_futur = models.ForeignKey(Domaine, related_name="domaine_futur", on_delete=models.SET_NULL, null=True, blank=True)
|
|
a_filiere_futur = models.ForeignKey(Filiere, related_name="filiere_futur", on_delete=models.SET_NULL, null=True, blank=True)
|
|
a_nf_futur = models.CharField(max_length=100, null=True, blank=True, choices=NiveauFonctionnelChoices.choices)
|
|
a_domaine_gestion = models.CharField('Domaine de gestion (BVT)', max_length=100, null=True, blank=True)
|
|
a_date_entree_service = models.CharField(max_length=100, null=True, blank=True)
|
|
a_arme = models.CharField(max_length=100, null=True, blank=True)
|
|
a_rg_origine_recrutement = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_naissance = models.CharField(max_length=100, null=True, blank=True)
|
|
a_diplome_hl = models.CharField(max_length=100, null=True, blank=True)
|
|
a_dernier_diplome = models.CharField(max_length=100, null=True, blank=True)
|
|
a_credo_fe = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_arrivee_fe = models.CharField(max_length=100, null=True, blank=True)
|
|
a_pos_statuaire = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_pos_statuaire = models.CharField(max_length=100, null=True, blank=True)
|
|
a_interruption_service = models.CharField(max_length=100, null=True, blank=True)
|
|
a_situation_fam = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_mariage = models.CharField(max_length=100, null=True, blank=True)
|
|
a_nombre_enfants = models.IntegerField(null=True, blank=True)
|
|
a_enfants = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_rdc = models.DateField(null=True, blank=True)
|
|
a_date_dernier_acr = models.DateField(null=True, blank=True)
|
|
a_eis = models.CharField(max_length=100, null=True, blank=True)
|
|
a_sap_conjoint = models.IntegerField(null=True, blank=True)
|
|
a_flag_particulier = models.IntegerField(null=True, blank=True)
|
|
a_notes_partagees = models.TextField(null=True, blank=True)
|
|
a_eip_fiche_detaille = models.CharField(max_length=100, null=True, blank=True)
|
|
a_eip_futur = models.CharField(max_length=100, null=True, blank=True)
|
|
a_liste_depts_souhaites = models.CharField(max_length=100, null=True, blank=True)
|
|
a_liste_zones_geographiques_shm = models.CharField(max_length=100, null=True, blank=True)
|
|
a_pls_gb_max = models.IntegerField(null=True, blank=True)
|
|
a_marqueur_pn = models.BooleanField(default=False, null=True)
|
|
a_fonction1 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_fonction2 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_fonction3 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_fonction4 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_fonction5 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_fonction6 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_fonction7 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_fonction8 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_fonction9 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_fonction1 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_fonction2 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_fonction3 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_fonction4 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_fonction5 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_fonction6 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_fonction7 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_fonction8 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_date_fonction9 = models.CharField(max_length=100, null=True, blank=True)
|
|
a_profession_conjoint = models.CharField(max_length=100, null=True, blank=True)
|
|
a_id_def_conjoint = models.CharField(max_length=100, null=True, blank=True)
|
|
a_notes_gestionnaire = models.TextField(null=True, blank=True)
|
|
a_statut_pam = models.CharField('statut PAM', max_length=100,choices=StatutPamChoices.choices, null=True, blank=True)
|
|
a_sexe_conjoint = models.CharField(max_length=100, null=True, blank=True)
|
|
a_lien_service = models.CharField(max_length=100, null=True, blank=True)
|
|
a_age_en_annees = models.CharField(max_length=100, null=True, blank=True)
|
|
a_origine_recrutement = models.CharField(max_length=100, null=True, blank=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=1000, null=True, blank=True)
|
|
a_date_statut_concerto = models.CharField('date du statut CONCERTO', max_length=32, null=True, blank=True)
|
|
a_statut_concerto_futur = models.CharField('statut CONCERTO futur', max_length=100, null=True, blank=True)
|
|
a_date_statut_concerto_futur = models.CharField('date du statut CONCERTO futur', max_length=32, null=True, blank=True)
|
|
suivi_previsionnel_situation = models.CharField('suivi prévisionnel de la situation du militaire', max_length=100, choices=SuiviPrevisionnelMilitaire.choices, 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, blank=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)
|
|
a_ciat = models.BooleanField('CIAT', default=False, null=True)
|
|
a_specifique = models.CharField('PPE / SHM / ITD', max_length=250, choices=SpecifiqueChoices.choices, null=True, blank=True)
|
|
a_date_affectation = models.DateField("Date d'affectation", null=True, blank=True)
|
|
|
|
class Meta:
|
|
verbose_name = "Administré"
|
|
verbose_name_plural = "Administrés"
|
|
constraints = [
|
|
models.CheckConstraint(
|
|
name='%(app_label)s_%(class)s_a_nf_valid',
|
|
check=models.Q(a_nf__in=NiveauFonctionnelChoices.values)
|
|
),
|
|
models.CheckConstraint(
|
|
name='%(app_label)s_%(class)s_a_nf_poste_valid',
|
|
check=models.Q(a_nf_poste__in=NiveauFonctionnelChoices.values)
|
|
),
|
|
models.CheckConstraint(
|
|
name='%(app_label)s_%(class)s_a_nf_futur_valid',
|
|
check=models.Q(a_nf_futur__in=NiveauFonctionnelChoices.values)
|
|
),
|
|
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)
|
|
),
|
|
models.CheckConstraint(
|
|
name='%(app_label)s_%(class)s_a_specifique',
|
|
check=models.Q(a_specifique__in=SpecifiqueChoices.values)
|
|
)
|
|
]
|
|
|
|
class Administres_Pams(models.Model):
|
|
class Cols():
|
|
""" Constantes pour les noms de colonnes """
|
|
|
|
PK = 'id'
|
|
REL_PAM = 'pam'
|
|
REL_ADMINISTRE = 'administre'
|
|
O2M_FMOB = 'fmobs'
|
|
REL_DECISION = 'decision'
|
|
STATUT_PAM = 'a_statut_pam_annee'
|
|
|
|
objects = BulkUpdateOrCreateQuerySet.as_manager()
|
|
|
|
id = models.CharField(primary_key=True, max_length=100)
|
|
pam = models.ForeignKey(PAM, on_delete = models.CASCADE, related_name='pam')
|
|
administre = models.ForeignKey(Administre, on_delete=models.CASCADE, related_name=Administre.Cols.REL_PAM_INTER)
|
|
a_statut_pam_annee = models.CharField('statut PAM', max_length=100,choices=StatutPamChoices.choices, null=True, blank=True)
|
|
notes_pam = models.TextField(null=True, blank=True)
|
|
a_ciat_pam = models.BooleanField('CIAT', default=False, null=True)
|
|
a_specifique_pam = models.CharField('PPE / SHM / ITD', max_length=250, choices=SpecifiqueChoices.choices, null=True, blank=True)
|
|
a_liste_depts_souhaites_pam = models.CharField(max_length=100, null=True, blank=True)
|
|
a_liste_zones_geographiques_shm_pam = models.CharField(max_length=100, null=True, blank=True)
|
|
a_situationfuture_notes_fe = models.TextField(null=True, blank=True)
|
|
|
|
|
|
|
|
|
|
class Affectation(models.Model):
|
|
"""
|
|
Modèle pour les affectations
|
|
"""
|
|
administre = models.ForeignKey(Administre, on_delete=models.CASCADE, null=True, blank=True, related_name='adm_affec', db_constraint=False)
|
|
affect_libelle = models.CharField(max_length=100, null=True, blank=True)
|
|
affect_date = models.CharField(max_length=100, null=True, blank=True)
|
|
|
|
|
|
class Diplome(models.Model):
|
|
"""
|
|
Modèle pour les diplomes
|
|
"""
|
|
|
|
administre = models.ForeignKey(Administre, on_delete=models.CASCADE, null=True, blank=True, related_name='adm_dip', db_constraint=False)
|
|
diplome_libelle = models.CharField(max_length=100, null=True, blank=True)
|
|
diplome_date = models.CharField(max_length=100, null=True, blank=True)
|
|
diplome_note = models.CharField(max_length=100, null=True, blank=True)
|
|
diplome_niveau = models.CharField(max_length=100, null=True, blank=True)
|
|
|
|
|
|
class FUD(models.Model):
|
|
"""
|
|
Modèle pour les formulaires unitaires de demandes
|
|
"""
|
|
|
|
administre = models.ForeignKey(Administre, on_delete=models.CASCADE, null=True, blank=True, related_name='adm_fud', db_constraint=False)
|
|
fud_libelle = models.CharField(max_length=100, null=True, blank=True)
|
|
fud_date_debut = models.CharField(max_length=100, null=True, blank=True)
|
|
fud_date_fin = models.CharField(max_length=100, null=True, blank=True)
|