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

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)