예제 #1
0
    def __init__(self):
        """ Récupération de toutes les données de base """

        DB = GestionDB.DB()

        # Récupération des infos sur l'organisme
        req = """SELECT nom, rue, cp, ville, tel, fax, mail, site, num_agrement, num_siret, code_ape
        FROM organisateur
        WHERE IDorganisateur=1;"""
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        self.dictOrganisme = {}
        for nom, rue, cp, ville, tel, fax, mail, site, num_agrement, num_siret, code_ape in listeDonnees:
            self.dictOrganisme["nom"] = nom
            self.dictOrganisme["rue"] = rue
            self.dictOrganisme["cp"] = cp
            if ville != None: ville = ville.capitalize()
            self.dictOrganisme["ville"] = ville
            self.dictOrganisme["tel"] = tel
            self.dictOrganisme["fax"] = fax
            self.dictOrganisme["mail"] = mail
            self.dictOrganisme["site"] = site
            self.dictOrganisme["num_agrement"] = num_agrement
            self.dictOrganisme["num_siret"] = num_siret
            self.dictOrganisme["code_ape"] = code_ape

        # Récupération des textes de rappels
        req = """SELECT IDtexte, titre, texte_pdf
        FROM textes_rappels;"""
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        self.dictTextesRappels = {}
        for IDtexte, titre, texte_pdf in listeDonnees:
            self.dictTextesRappels[IDtexte] = {
                "titre": titre,
                "texte_pdf": texte_pdf
            }

        DB.Close()

        # Get noms Titulaires
        self.dictTitulaires = UTILS_Titulaires.GetTitulaires()

        # Récupération des questionnaires
        self.Questionnaires = UTILS_Questionnaires.ChampsEtReponses(
            type="famille")

        # Récupération des infos de base familles
        self.infosIndividus = UTILS_Infos_individus.Informations()
예제 #2
0
    def Run(self, afficherDlgAttente=False):
        dictParametres = self.GetParametres()

        # Ouverture dlg d'attente
        if afficherDlgAttente == True:
            dlgAttente = wx.BusyInfo(
                _(u"Génération du fichier de données..."), None)

        try:

            # Génération du nom de fichier
            self.nomFichier = UTILS_Fichiers.GetRepTemp(
                fichier=u"data_%s" % dictParametres["IDfichier"])

            # Vérifie si le fichier existe déj�
            nomFichierTemp = self.nomFichier + ".dat"
            if os.path.isfile(nomFichierTemp):
                os.remove(nomFichierTemp)

            # Création des tables
            dbdest = GestionDB.DB(suffixe=None,
                                  nomFichier=nomFichierTemp,
                                  modeCreation=True)
            dbdest.CreationTables(dicoDB=self.dictTables)

            # Enregistrement des paramètres
            listeParametres = [
                ("IDfichier", dictParametres["IDfichier"]),
                ("horodatage", dictParametres["horodatage"]),
                ("type", "donnees"),
            ]
            self.Enregistrer(dbdest,
                             nomTable="parametres",
                             listeChamps=["nom", "valeur"],
                             listeDonnees=listeParametres)

            # Données du dictIndividus
            import UTILS_Infos_individus
            infos = UTILS_Infos_individus.Informations()
            dictValeurs = infos.GetDictValeurs(mode="individu",
                                               formatChamp=False)
            listeDonnees = []
            for ID, dictTemp in dictValeurs.iteritems():
                for champ, valeur in dictTemp.iteritems():
                    if type(valeur) in (str, unicode) and valeur not in ("",
                                                                         None):
                        listeDonnees.append((ID, champ, valeur))

            self.Enregistrer(dbdest,
                             nomTable="informations",
                             listeChamps=["IDindividu", "champ", "valeur"],
                             listeDonnees=listeDonnees)

            # Données individus
            db = GestionDB.DB(suffixe="PHOTOS")
            req = """SELECT IDindividu, photo FROM photos;"""
            db.ExecuterReq(req)
            listePhotos = db.ResultatReq()
            db.Close()
            dictPhotos = {}
            for IDindividu, photo in listePhotos:
                dictPhotos[IDindividu] = photo

            db = GestionDB.DB()
            req = """SELECT IDindividu, IDcivilite, nom, prenom FROM individus;"""
            db.ExecuterReq(req)
            listeIndividus = db.ResultatReq()
            db.Close()
            listeDonnees = []
            for IDindividu, IDcivilite, nom, prenom in listeIndividus:
                if dictPhotos.has_key(IDindividu):
                    photo = sqlite3.Binary(dictPhotos[IDindividu])
                else:
                    photo = None
                listeDonnees.append(
                    (IDindividu, IDcivilite, nom, prenom, photo))

            self.Enregistrer(dbdest,
                             nomTable="individus",
                             listeChamps=[
                                 "IDindividu", "IDcivilite", "nom", "prenom",
                                 "photo"
                             ],
                             listeDonnees=listeDonnees)

            # Données Titulaires de dossier
            dictTitulaires = UTILS_Titulaires.GetTitulaires()
            listeDonnees = []
            for IDfamille, dictTemp in dictTitulaires.iteritems():
                nom = dictTitulaires[IDfamille]["titulairesSansCivilite"]
                listeDonnees.append((IDfamille, nom))

            self.Enregistrer(dbdest,
                             nomTable="titulaires",
                             listeChamps=["IDfamille", "nom"],
                             listeDonnees=listeDonnees)

            # Données organisateur
            db = GestionDB.DB()
            req = """SELECT IDorganisateur, nom, logo FROM organisateur;"""
            db.ExecuterReq(req)
            listeTemp = db.ResultatReq()
            db.Close()
            listeDonnees = []
            for IDorganisateur, nom, logo in listeTemp:
                if logo != None:
                    logo = sqlite3.Binary(logo)
                listeDonnees.append((IDorganisateur, nom, logo))

            self.Enregistrer(dbdest,
                             nomTable="organisateur",
                             listeChamps=["IDorganisateur", "nom", "logo"],
                             listeDonnees=listeDonnees)

            # Tables à copier en intégralité
            listeTables = [
                "vacances",
                "jours_feries",
                "activites",
                "groupes",
                "unites",
                "unites_groupes",
                "unites_incompat",
                "unites_remplissage",
                "unites_remplissage_unites",
                "ouvertures",
                "remplissage",
                "inscriptions",
                "consommations",
                "memo_journee",
                "comptes_payeurs",
                "familles",
                "utilisateurs",
                "nomade_archivage",
            ]
            self.CopieTables(dbdest, listeTables)

            # Cloture de la base
            dbdest.connexion.commit()
            dbdest.Close()

            # Compression
            fichierZip = zipfile.ZipFile(self.nomFichier + EXTENSION_DECRYPTE,
                                         "w",
                                         compression=zipfile.ZIP_DEFLATED)
            fichierZip.write(self.nomFichier + ".dat", "database.dat")
            fichierZip.close()
            os.remove(self.nomFichier + ".dat")

            # Cryptage
            cryptage_actif = UTILS_Config.GetParametre(
                "synchro_cryptage_activer", defaut=False)
            cryptage_mdp = base64.b64decode(
                UTILS_Config.GetParametre("synchro_cryptage_mdp", defaut=""))
            if cryptage_actif == True and cryptage_mdp != "":
                UTILS_Cryptage_fichier.CrypterFichier(
                    self.nomFichier + EXTENSION_DECRYPTE,
                    self.nomFichier + EXTENSION_CRYPTE, cryptage_mdp)
                os.remove(self.nomFichier + EXTENSION_DECRYPTE)
                nomFichierFinal = self.nomFichier + EXTENSION_CRYPTE
            else:
                nomFichierFinal = self.nomFichier + EXTENSION_DECRYPTE

        except Exception, err:
            if afficherDlgAttente == True:
                dlgAttente.Destroy()
                del dlgAttente
            dlg = wx.MessageDialog(
                None,
                _(u"Désolé, l'erreur suivante a été rencontrée : ") +
                str(err), "Erreur ", wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            return None