Exemplo n.º 1
0
    def Imprimer(self):
        """ Imprimer la liste au format PDF """
        if self.GetNbrePersonnes() == 0:
            dlg = wx.MessageDialog(
                self, _(u"Il n'y a aucune personne dans la liste !"), "Erreur",
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Récupération des valeurs
        liste_labelsColonnes, listeValeurs = self.GetValeurs()

        # Selection des lignes
        from Dlg import DLG_Selection_liste
        dlg = DLG_Selection_liste.Dialog(self,
                                         liste_labelsColonnes,
                                         listeValeurs,
                                         type="imprimerListePersonnes")
        if dlg.ShowModal() == wx.ID_OK:
            listeSelections = dlg.GetSelections()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return False

        Impression(liste_labelsColonnes, listeValeurs, listeSelections)
Exemplo n.º 2
0
    def CourrierPublipostage(self, mode="unique"):
        if mode == "unique":
            if len(self.Selection()) == 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez d'abord sélectionner un individu dans la liste."
                      ), "Information", wx.OK | wx.ICON_INFORMATION)
                dlg.ShowModal()
                dlg.Destroy()
                return False
            listeID = [
                self.Selection()[0].IDpersonne,
            ]
        else:
            if self.GetNbreItems() == 0:
                dlg = wx.MessageDialog(
                    self, _(u"Il n'y a aucune personne dans la liste !"),
                    "Erreur", wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                return
            # Récupération des valeurs
            liste_labelsColonnes, listeValeurs = self.GetValeurs()
            # Selection des lignes
            from Dlg import DLG_Selection_liste
            dlg = DLG_Selection_liste.Dialog(self,
                                             liste_labelsColonnes,
                                             listeValeurs,
                                             type="exportTexte")
            if dlg.ShowModal() == wx.ID_OK:
                listeSelections = dlg.GetSelections()
                dlg.Destroy()
            else:
                dlg.Destroy()
                return False
            listeID = listeSelections

        # Récupère les données pour le publipostage
        from Utils import UTILS_Publipostage_donnees
        dictDonnees = UTILS_Publipostage_donnees.GetDictDonnees(
            categorie="personne", listeID=listeID)
        # Ouvre le publiposteur
        from Dlg import DLG_Publiposteur
        dlg = DLG_Publiposteur.Dialog(self, "", dictDonnees=dictDonnees)
        dlg.ShowModal()
        dlg.Destroy()
Exemplo n.º 3
0
def ExportTexte(listview=None, grid=None, titre=u"", listeColonnes=None, listeValeurs=None, autoriseSelections=True):
    """ Export de la liste au format texte """
    if (listview != None and len(listview.donnees) == 0) or (grid != None and (grid.GetNumberRows() == 0 or grid.GetNumberCols() == 0)):
        dlg = wx.MessageDialog(None, _(u"Il n'y a aucune donnée dans la liste !"), "Erreur", wx.OK | wx.ICON_ERROR)
        dlg.ShowModal()
        dlg.Destroy()
        return

    # Récupération des valeurs
    if listview != None and listeColonnes == None and listeValeurs == None :
        listeColonnes, listeValeurs = GetValeursListview(listview, format="texte")
        
    if grid != None and listeColonnes == None and listeValeurs == None :
        autoriseSelections = False
        listeColonnes, listeValeurs = GetValeursGrid(grid)

    # Selection des lignes
    if autoriseSelections == True :
        dlg = DLG_Selection_liste.Dialog(None, listeColonnes, listeValeurs, type="exportTexte")
        if dlg.ShowModal() == wx.ID_OK:
            listeSelections = dlg.GetSelections()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return False
    
    # Demande à l'utilisateur le nom de fichier et le répertoire de destination
    nomFichier = "ExportTexte_%s.txt" % datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    wildcard = "Fichier texte (*.txt)|*.txt|" \
                    "All files (*.*)|*.*"
    sp = wx.StandardPaths.Get()
    cheminDefaut = sp.GetDocumentsDir()
    dlg = wx.FileDialog(
        None, message = _(u"Veuillez sélectionner le répertoire de destination et le nom du fichier"), defaultDir=cheminDefaut, 
        defaultFile = nomFichier, 
        wildcard = wildcard, 
        style = wx.SAVE
        )
    dlg.SetFilterIndex(0)
    if dlg.ShowModal() == wx.ID_OK:
        cheminFichier = dlg.GetPath()
        dlg.Destroy()
    else:
        dlg.Destroy()
        return
    
    # Le fichier de destination existe déjà :
    if os.path.isfile(cheminFichier) == True :
        dlg = wx.MessageDialog(None, _(u"Un fichier portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?"), "Attention !", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION)
        if dlg.ShowModal() == wx.ID_NO :
            dlg.Destroy()
            return False
        else:
            dlg.Destroy()

    # Création du fichier texte
    texte = ""
    separateur = ";"
    for labelCol, alignement, largeur, code in listeColonnes :
        try :
            if "CheckState" in unicode(code) :
                code = "Coche"
        except :
            pass
        texte += labelCol + separateur
    texte = texte[:-1] + "\n"

    for valeurs in listeValeurs :
        if autoriseSelections == False or valeurs[0] == "" or int(valeurs[0]) in listeSelections :
            for valeur in valeurs :
                if valeur == None :
                    valeur = u""
                texte += u"%s%s" % (valeur, separateur)
            texte = texte[:-1] + "\n"
    
    # Elimination du dernier saut à la ligne
    texte = texte[:-1]

    # Création du fichier texte
    f = open(cheminFichier, "w")
    f.write(texte.encode("utf8"))
    f.close()
    
    # Confirmation de création du fichier et demande d'ouverture directe dans Excel
    txtMessage = _(u"Le fichier Texte a été créé avec succès. Souhaitez-vous l'ouvrir dès maintenant ?")
    dlgConfirm = wx.MessageDialog(None, txtMessage, _(u"Confirmation"), wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION)
    reponse = dlgConfirm.ShowModal()
    dlgConfirm.Destroy()
    if reponse == wx.ID_NO:
        return
    else:
        FonctionsPerso.LanceFichierExterne(cheminFichier)
Exemplo n.º 4
0
def ExportExcel(listview=None, grid=None, titre=_(u"Liste"), listeColonnes=None, listeValeurs=None, autoriseSelections=True):
    """ Export de la liste au format Excel """
    # Plus de sélection pour éviter les bugs !!!!
    autoriseSelections = False 
    
    # Vérifie si données bien présentes
    if (listview != None and len(listview.donnees) == 0) or (grid != None and (grid.GetNumberRows() == 0 or grid.GetNumberCols() == 0)):
        dlg = wx.MessageDialog(None, _(u"Il n'y a aucune donnée dans la liste !"), "Erreur", wx.OK | wx.ICON_ERROR)
        dlg.ShowModal()
        dlg.Destroy()
        return
        
    # Récupération des valeurs
    if listview != None and listeColonnes == None and listeValeurs == None :
        listeColonnes, listeValeurs = GetValeursListview(listview, format="original")
        
    if grid != None and listeColonnes == None and listeValeurs == None :
        autoriseSelections = False
        listeColonnes, listeValeurs = GetValeursGrid(grid)
    
    # Selection des lignes
    if autoriseSelections == True :
        dlg = DLG_Selection_liste.Dialog(None, listeColonnes, listeValeurs, type="exportExcel")
        if dlg.ShowModal() == wx.ID_OK:
            listeSelections = dlg.GetSelections()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return False

    # Choix Action
    dlg = DLG_Choix_action(None)
    reponse = dlg.ShowModal()
    dlg.Destroy()
    if reponse == 100 :
        mode = "enregistrer"
    elif reponse == 200 :
        mode = "email"
    else :
        return

    # Définit le nom et le chemin du fichier
    nomFichier = "ExportExcel_%s.xls" % datetime.datetime.now().strftime("%Y%m%d%H%M%S")

    # Mode Enregistrer
    if mode == "enregistrer" :

        # Demande à l'utilisateur le nom de fichier et le répertoire de destination
        wildcard = "Fichier Excel (*.xls)|*.xls|" \
                        "All files (*.*)|*.*"
        sp = wx.StandardPaths.Get()
        cheminDefaut = sp.GetDocumentsDir()
        dlg = wx.FileDialog(
            None, message = _(u"Veuillez sélectionner le répertoire de destination et le nom du fichier"), defaultDir=cheminDefaut,
            defaultFile = nomFichier,
            wildcard = wildcard,
            style = wx.SAVE
            )
        dlg.SetFilterIndex(0)
        if dlg.ShowModal() == wx.ID_OK:
            cheminFichier = dlg.GetPath()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return

        # Le fichier de destination existe déjà :
        if os.path.isfile(cheminFichier) == True :
            dlg = wx.MessageDialog(None, _(u"Un fichier portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?"), "Attention !", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION)
            if dlg.ShowModal() == wx.ID_NO :
                return False
                dlg.Destroy()
            else:
                dlg.Destroy()

    # Mode Envoyer par Email
    if mode == "email" :
        cheminFichier = UTILS_Fichiers.GetRepTemp(fichier=nomFichier)


    # Export
    import pyExcelerator
    # Création d'un classeur
    wb = pyExcelerator.Workbook()
    # Création d'une feuille
    ws1 = wb.add_sheet(titre)
    # Remplissage de la feuille

    al = pyExcelerator.Alignment()
    al.horz = pyExcelerator.Alignment.HORZ_LEFT
    al.vert = pyExcelerator.Alignment.VERT_CENTER
    
    ar = pyExcelerator.Alignment()
    ar.horz = pyExcelerator.Alignment.HORZ_RIGHT
    ar.vert = pyExcelerator.Alignment.VERT_CENTER

    styleEuros = pyExcelerator.XFStyle()
    styleEuros.num_format_str = '"$"#,##0.00_);("$"#,##'
    styleEuros.alignment = ar

    styleDate = pyExcelerator.XFStyle()
    styleDate.num_format_str = 'DD/MM/YYYY'
    styleDate.alignment = ar

    styleHeure = pyExcelerator.XFStyle()
    styleHeure.num_format_str = "[hh]:mm"
    styleHeure.alignment = ar

    # Création des labels de colonnes
    x = 0
    y = 0
    for labelCol, alignement, largeur, nomChamp in listeColonnes :
        try :
            if "CheckState" in unicode(nomChamp) :
                nomChamp = "Coche"
        except :
            pass
        ws1.write(x, y, labelCol)
        ws1.col(y).width = largeur*42
        y += 1

    # -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    # Création des lignes
    def RechercheFormatFromChaine(valeur):
        """ Recherche le type de la chaîne """
        if valeur.endswith(SYMBOLE) :
            # Si c'est un montant en euros
            try :
                if valeur.startswith("- ") :
                    valeur = valeur.replace("- ", "-")
                if valeur.startswith("+ ") :
                    valeur = valeur.replace("+ ", "")
                nbre = float(valeur[:-1]) 
                return (nbre, styleEuros)
            except :
                pass
                
        # Si c'est un nombre
        try :
            if valeur.startswith("- ") :
                valeur = valeur.replace("- ", "-")
            nbre = float(valeur)
            return (nbre, None)
        except :
            pass
        
        # Si c'est une date
        try :
            if len(valeur) == 10 :
                if valeur[2] == "/" and valeur[5] == "/" :
                    return (valeur, styleDate)
        except :
            pass

        if type(valeur) == datetime.timedelta :
            return (valeur, styleHeure)

        # Si c'est une heure
        try :
            if len(valeur) > 3 :
                if ":" in valeur :
                    separateur = ":"
                elif "h" in valeur :
                    separateur = "h"
                else :
                    separateur = None
                if separateur != None :
                    heures, minutes = valeur.split(separateur)
                    valeur = datetime.timedelta(minutes= int(heures)*60 + int(minutes))
                    # valeur = datetime.time(hour=int(valeur.split(separateur)[0]), minute=int(valeur.split(separateur)[1]))
                    return (valeur, styleHeure)
        except :
            pass

        return unicode(valeur), None

    # -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    def RechercheFormat(valeur):
        """ Recherche le type de la donnée """
        if type(valeur) == decimal.Decimal :
            valeur = float(valeur)
            return (valeur, styleEuros)
                
        if type(valeur) == float :
            return (valeur, None)
                
        if type(valeur) == int :
            return (valeur, None)
        
        if type(valeur) == datetime.date :
            valeur = UTILS_Dates.DateDDEnFr(valeur)
            return (valeur, styleDate)

        if type(valeur) == datetime.timedelta :
            return (valeur, styleHeure)

        try :
            if len(valeur) > 3 :
                if ":" in valeur :
                    separateur = ":"
                elif "h" in valeur :
                    separateur = "h"
                else :
                    separateur = None
                if separateur != None :
                    donnees = valeur.split(separateur)
                    if len(donnees) == 2 :
                        heures, minutes = donnees
                    if len(donnees) == 3 :
                        heures, minutes, secondes = donnees
                    valeur = datetime.timedelta(minutes= int(heures)*60 + int(minutes))
                    # valeur = datetime.time(hour=int(valeur.split(separateur)[0]), minute=int(valeur.split(separateur)[1]))
                    return (valeur, styleHeure)
        except :
            pass

        if type(valeur) in (str, unicode) :
            if len(valeur) == 10 :
                if valeur[2] == "/" and valeur[5] == "/" : return (valeur, styleDate)
                if valeur[4] == "-" and valeur[7] == "-" : return (UTILS_Dates.DateEngFr(valeur), styleDate)
                
        return unicode(valeur), None

    # -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    x = 1
    y = 0
    for valeurs in listeValeurs :
        if autoriseSelections == False or int(valeurs[0]) in listeSelections :
            for valeur in valeurs :
                if valeur == None :
                    valeur = u""
                    
                # Recherche s'il y a un format de nombre ou de montant
                if listview != None :
                    valeur, format = RechercheFormat(valeur) #RechercheFormatFromChaine(valeur)
                else :
                    valeur, format = RechercheFormatFromChaine(valeur)
                        
                # Enregistre la valeur
                if format != None :
                    ws1.write(x, y, valeur, format)
                else:
                    ws1.write(x, y, valeur)

                y += 1
            x += 1
            y = 0
            
    # Finalisation du fichier xls
    try :
        wb.save(cheminFichier)
    except :
        dlg = wx.MessageDialog(None, _(u"Il est impossible d'enregistrer le fichier Excel. Veuillez vérifier que ce fichier n'est pas déjà ouvert en arrière-plan."), "Erreur", wx.OK | wx.ICON_ERROR)
        dlg.ShowModal()
        dlg.Destroy()
        return

    # Confirmation de création du fichier et demande d'ouverture directe dans Excel
    if mode == "enregistrer" :
        txtMessage = _(u"Le fichier Excel a été créé avec succès. Souhaitez-vous l'ouvrir dès maintenant ?")
        dlgConfirm = wx.MessageDialog(None, txtMessage, _(u"Confirmation"), wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION)
        reponse = dlgConfirm.ShowModal()
        dlgConfirm.Destroy()
        if reponse == wx.ID_NO:
            return
        else:
            FonctionsPerso.LanceFichierExterne(cheminFichier)

    # Envoyer par Email
    if mode == "email" :
        from Dlg import DLG_Mailer
        dlg = DLG_Mailer.Dialog(None)
        dlg.ChargerModeleDefaut()
        dlg.SetPiecesJointes([cheminFichier,])
        dlg.ShowModal()
        dlg.Destroy()
Exemplo n.º 5
0
    def ExportTexte(self):
        """ Export de la liste au format texte """
        if self.GetNbrePersonnes() == 0:
            dlg = wx.MessageDialog(
                self, _(u"Il n'y a aucune personne dans la liste !"), "Erreur",
                wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Récupération des valeurs
        liste_labelsColonnes, listeValeurs = self.GetValeurs()

        # Selection des lignes
        from Dlg import DLG_Selection_liste
        dlg = DLG_Selection_liste.Dialog(self,
                                         liste_labelsColonnes,
                                         listeValeurs,
                                         type="exportTexte")
        if dlg.ShowModal() == wx.ID_OK:
            listeSelections = dlg.GetSelections()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return False

        nomFichier = "ExportTexte.txt"
        # Demande à l'utilisateur le nom de fichier et le répertoire de destination
        wildcard = "Fichier texte (*.txt)|*.txt|" \
                        "All files (*.*)|*.*"
        sp = wx.StandardPaths.Get()
        cheminDefaut = sp.GetDocumentsDir()
        dlg = wx.FileDialog(
            self,
            message=
            _(u"Veuillez sélectionner le répertoire de destination et le nom du fichier"
              ),
            defaultDir=cheminDefaut,
            defaultFile=nomFichier,
            wildcard=wildcard,
            style=wx.FD_SAVE)
        dlg.SetFilterIndex(2)
        if dlg.ShowModal() == wx.ID_OK:
            cheminFichier = dlg.GetPath()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return

        # Le fichier de destination existe déjà :
        if os.path.isfile(cheminFichier) == True:
            dlg = wx.MessageDialog(
                None,
                _(u"Un fichier portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?"
                  ), "Attention !",
                wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION)
            if dlg.ShowModal() == wx.ID_NO:
                return False
                dlg.Destroy()
            else:
                dlg.Destroy()

        # Création du fichier texte
        texte = ""
        separateur = ";"
        for labelCol, alignement, largeur, nomChamp in liste_labelsColonnes:
            texte += nomChamp + separateur
        texte = texte[:-1] + "\n"

        for valeurs in listeValeurs:
            if int(valeurs[0]) in listeSelections:
                for valeur in valeurs:
                    texte += valeur + separateur
                texte = texte[:-1] + "\n"

        # Elimination du dernier saut à la ligne
        texte = texte[:-1]

        # Création du fichier texte
        f = open(cheminFichier, "w")
        f.write(texte)
        f.close()

        # Confirmation de création du fichier et demande d'ouverture directe dans Excel
        txtMessage = _(
            u"Le fichier Texte a été créé avec succès. Souhaitez-vous l'ouvrir dès maintenant ?"
        )
        dlgConfirm = wx.MessageDialog(
            self, txtMessage, _(u"Confirmation"),
            wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
        reponse = dlgConfirm.ShowModal()
        dlgConfirm.Destroy()
        if reponse == wx.ID_NO:
            return
        else:
            FonctionsPerso.LanceFichierExterne(cheminFichier)
Exemplo n.º 6
0
def Excel(parent, labels_colonnes=[], liste_valeurs=[], tableau=None):
    if tableau == None:
        dlg = DLG_Selection_liste.Dialog(parent, labels_colonnes, liste_valeurs, type="exportExcel")
        if dlg.ShowModal() == wx.ID_OK:
            listeSelections = dlg.GetSelections()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return False

    nomFichier = "ExportExcel.xlsx"

    # Demande à l'utilisateur le nom de fichier et le répertoire de destination
    wildcard = "Fichiers Excel (*.xlsx)|*.xlsx|Tous les fichiers (*.*)|*.*"
    sp = wx.StandardPaths.Get()
    cheminDefaut = sp.GetDocumentsDir()
    dlg = wx.FileDialog(
        parent, message=_(u"Veuillez sélectionner le répertoire de destination et le nom du fichier"),
        defaultDir=cheminDefaut,
        defaultFile=nomFichier,
        wildcard=wildcard,
        style=wx.FD_SAVE
    )
    dlg.SetFilterIndex(2)
    if dlg.ShowModal() == wx.ID_OK:
        cheminFichier = dlg.GetPath()
        dlg.Destroy()
    else:
        dlg.Destroy()
        return

    # Le fichier de destination existe déjà :
    if os.path.isfile(cheminFichier) == True:
        dlg = wx.MessageDialog(None, _(u"Un fichier portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?"), "Attention !", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION)
        reponse = dlg.ShowModal()
        dlg.Destroy()
        if reponse == wx.ID_NO:
            return False

    # Création d'un classeur et d'une feuille
    workbook = xlsxwriter.Workbook(cheminFichier)
    worksheet = workbook.add_worksheet()

    # Depuis une liste de sélections
    if tableau == None:
        # Création des labels de colonnes
        x = 0
        y = 0
        for labelCol, alignement, largeur, nomChamp in labels_colonnes:
            worksheet.write(x, y, labelCol)
            worksheet.set_column(y, y, largeur * 0.2)
            y += 1

        x = 1
        y = 0
        for valeurs in liste_valeurs:
            if int(valeurs[0]) in listeSelections:
                for valeur in valeurs:
                    worksheet.write(x, y, valeur)
                    y += 1
                x += 1
                y = 0

    # Depuis une grid
    if tableau != None:
        # Remplissage de la feuille
        nbreColonnes = tableau.GetNumberCols()
        nbreLignes = tableau.GetNumberRows()

        for numLigne in range(0, nbreLignes):
            for numCol in range(0, nbreColonnes):
                valeurCase = tableau.GetCellValue(numLigne, numCol)
                worksheet.write(numLigne, numCol, valeurCase)

    # Finalisation du fichier xlsx
    workbook.close()

    # Confirmation de création du fichier et demande d'ouverture directe dans Excel
    txtMessage = _(u"Le fichier Excel a été créé avec succès. Souhaitez-vous l'ouvrir dès maintenant ?")
    dlgConfirm = wx.MessageDialog(parent, txtMessage, _(u"Confirmation"), wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
    reponse = dlgConfirm.ShowModal()
    dlgConfirm.Destroy()
    if reponse == wx.ID_NO:
        return
    else:
        FonctionsPerso.LanceFichierExterne(cheminFichier)