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)
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()
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)
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()
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)
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)