예제 #1
0
    def handle(self, *args, **kwargs):

        # Imports
        from app.apps import AppConfig
        from app.models import TClasse
        from app.models import TDroitsUtilisateur
        from app.models import TOrganisme
        from app.models import TStructure
        from app.models import TTypeIntervention
        from app.models import TTypePublic
        from app.models import TTypeUtilisateur
        from app.models import TUtilisateur
        from decouple import config
        from django.db import connection
        from smmaranim.custom_settings import CSV_ROOT
        import csv
        import os

        # Initialisation des données attributaires de chaque type d'utilisateur
        attrs_type_util = [{
            'pk': 'A',
            'int_type_util': 'Administrateur'
        }, {
            'pk': 'PCDA',
            'int_type_util': 'Peut créer des animations'
        }, {
            'pk': 'PR',
            'int_type_util': 'Peut réserver'
        }]

        # Création des instances TTypeUtilisateur
        for attrs in attrs_type_util:
            if TTypeUtilisateur.objects.filter(pk=attrs['pk']).count() == 0:
                TTypeUtilisateur.objects.create(**attrs)

        # Initialisation des données attributaires de l'organisme SMMAR
        attrs_org = {'est_prest': False, 'nom_org': 'SMMAR'}

        # Création d'une instance TOrganisme
        if TOrganisme.objects.filter(
                nom_org=attrs_org['nom_org']).count() == 0:
            TOrganisme.objects.create(**attrs_org)

        # Initialisation des données attributaires du compte utilisateur principal
        attrs_util = {
            'email': config('MAIN_ACCOUNT_EMAIL'),
            'first_name': config('MAIN_ACCOUNT_FIRSTNAME'),
            'id_org': TOrganisme.objects.get(nom_org=attrs_org['nom_org']),
            'is_staff': True,
            'is_superuser': True,
            'last_name': config('MAIN_ACCOUNT_LASTNAME'),
            'username': config('MAIN_ACCOUNT_USERNAME')
        }

        # Création du compte utilisateur principal (instance TUtilisateur)
        if TUtilisateur.objects.filter(
                username=attrs_util['username']).count() == 0:
            obj_util = TUtilisateur(**attrs_util)
            obj_util.set_password('password')
            obj_util.save()

            # Assignation de chaque type d'utilisateur
            for tu in TTypeUtilisateur.objects.all():
                TDroitsUtilisateur.objects.create(code_type_util=tu,
                                                  id_util=obj_util)

        # Initialisation des données attributaires de chaque type d'intervention
        attrs_type_interv = [{
            'pk': 'AP',
            'int_type_interv': 'Animation ponctuelle'
        }, {
            'pk': 'PP',
            'int_type_interv': 'Programme pédagogique'
        }]

        # Création des instances TTypeIntervention
        for attrs in attrs_type_interv:
            if TTypeIntervention.objects.filter(pk=attrs['pk']).count() == 0:
                TTypeIntervention.objects.create(**attrs)

        # Initialisation des données attributaires de chaque structure
        attrs_struct = [{
            'int_struct': 'Autre',
            'ordre_ld_struct': 3
        }, {
            'int_struct': 'Collectivité',
            'ordre_ld_struct': 2
        }, {
            'int_struct': 'Établissement scolaire',
            'ordre_ld_struct': 1
        }]

        # Création des instances TStructure
        for attrs in attrs_struct:
            if TStructure.objects.filter(
                    int_struct=attrs['int_struct']).count() == 0:
                TStructure.objects.create(**attrs)

        # Initialisation des données attributaires de chaque type de public
        attrs_type_public = [
            'Agriculteurs', 'Élus', 'Entreprises', 'Handicapés',
            'Grand public', 'Jeune public extra-scolaire',
            'Jeune public scolaire', 'Personnes agées'
        ]

        # Création des instances TTypePublic
        for attrs in attrs_type_public:
            if TTypePublic.objects.filter(int_type_public=attrs).count() == 0:
                TTypePublic.objects.create(int_type_public=attrs)

        # Initialisation des données attributaires de chaque classe
        attrs_classe = [{
            'int_classe': 'CE1',
            'ordre_ld_classe': 3
        }, {
            'int_classe': 'CE2',
            'ordre_ld_classe': 4
        }, {
            'int_classe': 'Cinquième',
            'ordre_ld_classe': 8
        }, {
            'int_classe': 'CM1',
            'ordre_ld_classe': 5
        }, {
            'int_classe': 'CM2',
            'ordre_ld_classe': 6
        }, {
            'int_classe': 'CP',
            'ordre_ld_classe': 2
        }, {
            'int_classe': 'Maternelle',
            'ordre_ld_classe': 1
        }, {
            'int_classe': 'Post Bac',
            'ordre_ld_classe': 14
        }, {
            'int_classe': 'Première',
            'ordre_ld_classe': 12
        }, {
            'int_classe': 'Quatrième',
            'ordre_ld_classe': 9
        }, {
            'int_classe': 'Seconde',
            'ordre_ld_classe': 11
        }, {
            'int_classe': 'Sixième',
            'ordre_ld_classe': 7
        }, {
            'int_classe': 'Terminale',
            'ordre_ld_classe': 13
        }, {
            'int_classe': 'Troisième',
            'ordre_ld_classe': 10
        }]

        # Création des instances TClasse
        for attrs in attrs_classe:
            if TClasse.objects.filter(
                    int_classe=attrs['int_classe']).count() == 0:
                TClasse.objects.create(**attrs)

        # Injection de données via des fichiers CSV
        for fichier in os.listdir(CSV_ROOT):

            # Stockage du chemin du fichier CSV courant
            path = '{}/{}'.format(CSV_ROOT, fichier)

            # Ouverture du fichier CSV en lecture
            fichier_csv = open(path, 'r', encoding='cp1252')
            reader = csv.reader(fichier_csv, delimiter=';')

            # Rédaction de la requête SQL
            sql = '''
			COPY {}({})
			FROM '{}'
			WITH DELIMITER ';'
			CSV HEADER
			ENCODING 'WIN1252';
			'''.format(fichier[:-4], ', '.join(next(reader)), path)

            # Exécution de la requête SQL
            with connection.cursor() as cursor:
                try:
                    cursor.execute(sql)
                except:
                    pass
            del cursor

        print('La base de données {} a été initialisée avec succès.'.format(
            AppConfig.verbose_name))
예제 #2
0
    def handle(self, *args, **kwargs):

        # Imports
        from app.apps import AppConfig
        from app.models import TAnnee
        from app.models import TGroupeTypeAbsence
        from app.models import TRolesUtilisateur
        from app.models import TTypeAbsence
        from app.models import TTypeUtilisateur
        from app.models import TUtilisateur
        from datetime import date
        from decouple import config
        from django.conf import settings

        # Initialisation des types d'utilisateur
        tab_type_util = [['A', 'Agent'], ['D', 'Direction'],
                         ['S', 'Secrétaire']]
        for elem in tab_type_util:
            if TTypeUtilisateur.objects.filter(pk=elem[0]).count() == 0:
                TTypeUtilisateur.objects.create(pk=elem[0],
                                                int_type_util=elem[1])

        # Création du compte agent principal
        set_username = config('MAIN_ACCOUNT_USERNAME')
        if TUtilisateur.objects.filter(username=set_username).count() == 0:

            # Création d'une instance TUtilisateur
            obj_util = TUtilisateur(
                email=config('MAIN_ACCOUNT_EMAIL'),
                first_name=config('MAIN_ACCOUNT_FIRSTNAME'),
                is_staff=True,
                is_superuser=True,
                last_name=config('MAIN_ACCOUNT_LASTNAME'),
                username=set_username)
            obj_util.set_password('password')
            obj_util.save()

            # Lien avec la table t_roles_utilisateur
            for elem in tab_type_util:
                TRolesUtilisateur.objects.create(
                    code_type_util=TTypeUtilisateur.objects.get(pk=elem[0]),
                    id_util=obj_util)

        # Initialisation des années
        for i in range(settings.SMMAR_YEAR_CREATION, date.today().year + 1):
            if TAnnee.objects.filter(pk=i).count() == 0: TAnnee.create(i)

        # Initialisation des groupes de type d'absence ainsi que des types d'absence
        tab_gpe_type_abs = [{
            'abrev_gpe_type_abs':
            'C',
            'est_disp':
            True,
            'int_gpe_type_abs':
            'Congés',
            'ordre_zl_gpe_type_abs':
            1,
            'code_type_util':
            TTypeUtilisateur.objects.get(pk='D')
        }, {
            'abrev_gpe_type_abs':
            'RTT',
            'est_disp':
            True,
            'int_gpe_type_abs':
            'RTT',
            'ordre_zl_gpe_type_abs':
            1,
            'code_type_util':
            TTypeUtilisateur.objects.get(pk='S')
        }, {
            'abrev_gpe_type_abs':
            'CET',
            'est_disp':
            True,
            'int_gpe_type_abs':
            'Compte épargne temps',
            'ordre_zl_gpe_type_abs':
            1,
            'code_type_util':
            TTypeUtilisateur.objects.get(pk='S')
        }]
        for elem in tab_gpe_type_abs:
            if TGroupeTypeAbsence.objects.filter(
                    int_gpe_type_abs=elem['int_gpe_type_abs']).count() == 0:
                obj_gpe_type_abs = TGroupeTypeAbsence.objects.create(**elem)
                TTypeAbsence.objects.create(
                    int_type_abs=elem['int_gpe_type_abs'],
                    pj_abs_req=False,
                    id_gpe_type_abs=obj_gpe_type_abs)

        print('La base de données {} a été initialisée avec succès.'.format(
            AppConfig.verbose_name))