""" Ce dossier contient tous les modèles de la base de données d'OGURE """ from bulk_update_or_create import BulkUpdateOrCreateQuerySet from django.db import models from django.utils.translation import ugettext_lazy as _ from .administre import Administre, Administres_Pams from .commun import NiveauFonctionnelChoices, SpecifiqueChoices from .competence import Competence from .domaine import Domaine from .filiere import Filiere from .garnison import Garnison from .grade import Grade from .poste import Poste, Postes_Pams from .sous_vivier import SousVivier from .pam import PAM """ Script de création des diffferentes tables de la base OGURE NG utilisation de l'ORM de Django pour réaliser cette étape """ # TODO: supprimer ce modèle et le remplacer par le nouveau modèle des Sous-viviers # 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, blank=True) filiere = models.ForeignKey(Filiere, on_delete=models.SET_NULL, null=True, blank=True) sva_categorie = models.CharField(max_length=5, choices=CATEGORIE_CHOICES) sva_arme = models.CharField(max_length=20, null=True, blank=True) # 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, blank=True) gm_selection_multiple = models.BooleanField(null=True, blank=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, blank=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 } class ZoneGeographique(models.Model): """Modèle des Zones Geographiques """ zone_id = models.CharField(max_length=100, primary_key=True) zone_libelle = models.CharField(max_length=100) def as_dict(self): return { "id": self.zone_id, "libelle": self.zone_libelle } # Modèle Liste de Préference class PreferencesListe(models.Model): """Modèle Liste de Préference """ lp_id = models.IntegerField(primary_key=True) administre_pam = models.ForeignKey(Administres_Pams, on_delete=models.CASCADE, related_name= 'administre_pam_pref', default="") administre = models.ForeignKey(Administre, on_delete=models.CASCADE, related_name= 'administre_pref', default="") pam = models.ForeignKey(PAM, on_delete=models.CASCADE, default="") poste = models.ForeignKey(Poste, on_delete=models.CASCADE) lp_rang_poste = models.IntegerField() # 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) administre_pam = models.ForeignKey(Administres_Pams, on_delete=models.CASCADE, default="", related_name='administre_pam') poste_pam = models.ForeignKey(Postes_Pams, on_delete=models.CASCADE, default="", related_name='poste_pam') pam = models.ForeignKey(PAM, on_delete=models.SET_NULL, null=True, blank=True) no_rang_administre = models.IntegerField(null=True, blank=True) no_rang_poste = models.IntegerField(null=True, blank=True) no_date_execution = models.DateTimeField(auto_now=True) no_score_administre = models.FloatField(null=True, blank=True) no_score_poste = models.FloatField(null=True, blank=True) no_flag_cple_ideal = models.BooleanField(default=False) class Administre_Notation(models.Model): """Modèle le lien entre Notation et Administre """ id = models.CharField(max_length=100, primary_key=True) administre = models.ForeignKey(Administre, on_delete=models.CASCADE, null=True, blank=True, related_name='adm_not', db_constraint=False) no_annne_de_notation = models.CharField(max_length=100, null=True, blank=True) no_nr_ou_iris = models.CharField(max_length=100, null=True, blank=True) no_rac_ou_iris_cumule = models.CharField(max_length=100, null=True, blank=True) no_rf_qsr = models.CharField(max_length=100, null=True, blank=True) no_aptitude_emploie_sup = models.CharField(max_length=100, null=True, blank=True) no_potentiel_responsabilite_sup = models.CharField(max_length=100, null=True, blank=True) no_age_annees = models.CharField(max_length=100, null=True, blank=True) # Modèle du référentiel organique class RefOrg(models.Model): """Modèle de référentiel organique""" class Cols(): """ Constantes pour les noms de colonnes """ PK = 'ref_org_code' # relations one-to-one ou many-to-one REL_REF_GEST = 'ref_gest' # TODO: ajouter la condition d'unicité des lignes (utiliser class Meta) ref_org_code = models.CharField('Code niveau d\'org', max_length=100, primary_key=True) ref_org_code_niv_org1 = models.CharField('Code niveau d\'org 1', max_length=100, null=True, blank=True) ref_org_lib_niv_org1 = models.CharField('Livelle niveau d\'org 1', max_length=100, null=True, blank=True) ref_org_code_niv_org2 = models.CharField('Code niveau d\'org 2', max_length=100, null=True, blank=True) ref_org_lib_niv_org2 = models.CharField('Libelle niveau d\'org 2', max_length=100, null=True, blank=True) ref_org_code_niv_org3 = models.CharField('Code niveau d\'org 3', max_length=100, null=True, blank=True) ref_org_lib_niv_org3 = models.CharField('Libelle niveau d\'org 3', max_length=100, null=True, blank=True) ref_org_code_niv_org4 = models.CharField('Code niveau d\'org 4', max_length=100, null=True, blank=True) ref_org_lib_niv_org4 = models.CharField('Libell niveau d\'org 4', max_length=100, null=True, blank=True) ref_org_niv_org = models.IntegerField('Niveau d\'org', null=True, blank=True) ref_org_ref_fe = models.BooleanField('Pameur BMOB', default=False, null=True) ref_org_ref_sv_fil = models.BooleanField('Gestionnaire BGCAT', default=False, null=True) ref_org_droit_lect = models.BooleanField('Droit de lecture', default=False, null=True) ref_org_droit_ecr = models.BooleanField("Droit d'écriture", default=False, null=True) ref_org_expert_hme = models.BooleanField('Expert HME', default=False, null=True) ref_org_bvt = models.BooleanField('Gestionnaire BVT', default=False, null=True) ref_org_itd = models.BooleanField('Gestionnaire ITD', default=False, null=True) class Meta: verbose_name = 'Référentiel organique' verbose_name_plural = 'Référentiels organiques' # Modèle du référentiel gestionnaire class RefGest(models.Model): """Modèle de référentiel gestionnaire""" class Cols(): """ Constantes pour les noms de colonnes """ PK = 'ref_gest_sap' # relations one-to-one ou many-to-one REL_ORG = 'ref_gest_org' ref_gest_sap = models.IntegerField('Id SAP', primary_key=True) ref_gest_username = models.CharField('Nom d\'utilisateur', max_length=100, null=True, blank=True) ref_gest_email = models.CharField('Adresse mail', max_length=100, null=True, blank=True) ref_gest_first_name = models.CharField('Prénom', max_length=100, null=True, blank=True) ref_gest_last_name = models.CharField('Nom', max_length=100, null=True, blank=True) ref_gest_grade = models.CharField('Grade', max_length=100, null=True, blank=True) ref_gest_niv_org = models.CharField('Niveau d\'org', max_length=100, null=True, blank=True) ref_gest_org = models.ForeignKey(RefOrg, verbose_name='Référentiel organique', related_name=RefOrg.Cols.REL_REF_GEST, on_delete=models.CASCADE, db_column='ref_gest_org_id', null=True, blank=True) class Meta: verbose_name = 'Référentiel gestionnaire' verbose_name_plural = 'Référentiels gestionnaires' # Modèle du référentiel sous-vivier filière class RefSvFil(models.Model): """Modèle de référentiel sous-vivier filière """ class Cols(): """ Constantes pour les noms de colonnes """ # relations one-to-one ou many-to-one REL_SOUS_VIVIER = 'sous_vivier' ref_sv_fil_code = models.CharField('Code niveau d\'org', max_length=100, null=True, blank=True) ref_sv_fil_dom_gest = models.CharField('Domaine de gestion', max_length=100, null=True, blank=True) ref_sv_fil_dom = models.CharField('Domaine', max_length=100, null=True, blank=True) ref_sv_fil_fil = models.CharField('Filière', max_length=100, null=True, blank=True) ref_sv_fil_cat = models.CharField('Catégorie', max_length=100, null=True, blank=True) sous_vivier = models.ForeignKey(SousVivier, verbose_name='Sous-vivier', on_delete=models.SET_NULL, null=True, blank=True) def as_dict(self): return { "ref_sv_fil_code": self.ref_sv_fil_code, "ref_sv_fil_dom_gest": self.ref_sv_fil_dom_gest, "ref_sv_fil_dom": self.ref_sv_fil_dom, "ref_sv_fil_fil": self.ref_sv_fil_fil, "ref_sv_fil_cat": self.ref_sv_fil_cat, } class Meta: verbose_name = 'Référentiel sous-vivier/filière' verbose_name_plural = 'Référentiels sous-viviers/filières'