""" 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'