def OnBoutonEmail(self, event): nomFichier = self.GetNomFichier() # Définit le chemin de stockage du fichier cheminFichier = UTILS_Fichiers.GetRepTemp(fichier=nomFichier) # Génération du fichier XML self.GenerationFichier(cheminFichier) # Ouverture de l'envoi d'email listeAdresses = [] if self.IDfamille != None : from Utils import UTILS_Envoi_email listeAdresses = UTILS_Envoi_email.GetAdresseFamille(self.IDfamille) if len(listeAdresses) == 0 : return from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(None) # dlg.ChargerModeleDefaut() # Chargement de l'adresse de la famille if len(listeAdresses) > 0 : listeDonnees = [] for adresse in listeAdresses: listeDonnees.append({"adresse": adresse, "pieces": [], "champs": {}, }) dlg.SetDonnees(listeDonnees, modificationAutorisee=True) # Ajout du fichier en pièce jointe dlg.SetPiecesJointes([cheminFichier,]) dlg.ShowModal() dlg.Destroy()
def Menu_Mail(self, event): adresse = self.adresseMail # Depuis l'éditeur d'Emails de Noethys if event.GetId() == 80: from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self) listeDonnees = [ { "adresse": adresse, "pieces": [], "champs": {}, }, ] dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ShowModal() dlg.Destroy() # Depuis le client de messagerie par défaut if event.GetId() == 81: FonctionsPerso.EnvoyerMail(adresses=[ adresse, ], sujet="", message="")
def EnvoyerEmail(self, event): """ Envoi par Email des codes internet """ # Validation des données saisies tracks = self.ctrl_listview.GetTracksCoches() if len(tracks) == 0 : dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune famille dans la liste !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False dict_adresses = UTILS_Envoi_email.GetAdressesFamilles([track.IDfamille for track in tracks]) if dict_adresses == False: return False liste_donnees = [] for track in tracks: for adresse in dict_adresses.get(track.IDfamille, []): champs = { "{NOM_FAMILLE}" : track.nomTitulaires, "{IDENTIFIANT_INTERNET}" : track.internet_identifiant, "{MOTDEPASSE_INTERNET}" : track.internet_mdp, } liste_donnees.append({"adresse" : adresse, "pieces" : [], "champs" : champs}) # Transfert des données vers DLG Mailer from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="portail") dlg.SetDonnees(liste_donnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy()
def MenuEnvoyerMail(self, event): """ Envoyer un Email """ from Utils import UTILS_Envoi_email listeAdresses = UTILS_Envoi_email.GetAdresseFamille(self.IDfamille) if listeAdresses == False or len(listeAdresses) == 0: return # Depuis l'éditeur d'Emails de Noethys if event.GetId() == 200: from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self) listeDonnees = [] for adresse in listeAdresses: listeDonnees.append({ "adresse": adresse, "pieces": [], "champs": {}, }) dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ShowModal() dlg.Destroy() # Depuis le client de messagerie par défaut if event.GetId() == 210: FonctionsPerso.EnvoyerMail(adresses=listeAdresses, sujet="", message="")
def OnBoutonOk(self, event): """ Aperçu PDF des inscriptions """ # Validation des données saisies tracks = self.ctrl_liste_inscriptions.GetTracksCoches() if len(tracks) == 0 : dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune inscription à envoyer par Email !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Création des inscriptions sélectionnées listeIDinscription = [] for track in tracks : listeIDinscription.append(track.IDinscription) inscription = UTILS_Inscriptions.Inscription() dictOptions = self.ctrl_options.GetOptions() if dictOptions == False : return resultat = inscription.Impression(listeInscriptions=listeIDinscription, nomDoc=None, afficherDoc=False, dictOptions=dictOptions, repertoire=dictOptions["repertoire"], repertoireTemp=True) if resultat == False : return dictChampsFusion, dictPieces = resultat def SupprimerFichiersTemp(): for IDinscription, fichier in dictPieces.items(): if os.path.isfile(fichier): os.remove(fichier) # Récupération des adresses Emails dict_adresses = UTILS_Envoi_email.GetAdressesFamilles([track.IDfamille for track in tracks]) if dict_adresses == False: return False liste_donnees = [] for track in tracks: if track.IDinscription in dictPieces: for adresse in dict_adresses.get(track.IDfamille, []): fichier = dictPieces[track.IDinscription] champs = dictChampsFusion[track.IDinscription] liste_donnees.append({"adresse" : adresse, "pieces" : [fichier,], "champs" : champs}) # Transfert des données vers DLG Mailer from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="inscription") dlg.SetDonnees(liste_donnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy() # Suppression des PDF temporaires SupprimerFichiersTemp()
def EnvoiEmail(self, event=None): """ Envoi par Email des attestations fiscales """ # Validation des données saisies tracks = self.ctrl_attestations.GetTracksCoches() if len(tracks) == 0 : dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune attestation à imprimer !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False # Création des cotisations sélectionnées dictOptions = self.GetOptions() if dictOptions == False : return False x = UTILS_Attestations_fiscales.Attestations_fiscales() resultat = x.Impression(tracks=tracks, nomDoc=None, afficherDoc=False, dictOptions=dictOptions, repertoire=dictOptions["repertoire"], repertoireTemp=True) if resultat == False : return False dictChampsFusion, dictPieces = resultat def SupprimerFichiersTemp(): for IDcompte_payeur, fichier in dictPieces.items(): if os.path.isfile(fichier): os.remove(fichier) # Récupération des adresses mail dict_adresses = UTILS_Envoi_email.GetAdressesFamilles([track.IDfamille for track in tracks]) if dict_adresses == False: return False liste_donnees = [] for track in tracks: if track.IDcompte_payeur in dictPieces: for adresse in dict_adresses.get(track.IDfamille, []): fichier = dictPieces[track.IDcompte_payeur] champs = dictChampsFusion[track.IDcompte_payeur] liste_donnees.append({"adresse": adresse, "pieces": [fichier,], "champs": champs}) # Transfert des données vers DLG Mailer from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="attestation_fiscale") dlg.SetDonnees(liste_donnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy() # Suppression des PDF temporaires SupprimerFichiersTemp()
def EnvoyerEmail(self, event): # Récupère l'adresse if event.GetId() in (801, 802): ctrl = self.ctrl_travail_mail if event.GetId() in (901, 902): ctrl = self.ctrl_mail adresse = ctrl.GetValue() valide, erreur = ctrl.Validation() # Vérifie l'adresse if adresse == "" or valide == False: dlg = wx.MessageDialog( self, _(u"Vous devez d'abord saisir une adresse internet valide !"), "Information", wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() ctrl.SetFocus() return # Depuis l'éditeur d'Emails de Noethys if event.GetId() in (801, 901): from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self) listeDonnees = [ { "adresse": adresse, "pieces": [], "champs": {}, }, ] dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ShowModal() dlg.Destroy() # Depuis le client de messagerie par défaut if event.GetId() in (802, 902): FonctionsPerso.EnvoyerMail(adresses=[ adresse, ], sujet="", message="")
def Envoyer_email(self, event): # Envoyer un email à la famille from Utils import UTILS_Envoi_email listeAdresses = UTILS_Envoi_email.GetAdresseFamille(self.IDfamille) if listeAdresses == False or len(listeAdresses) == 0: dlg = wx.MessageDialog(self, _(u"Il n'y a aucune adresse email !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False from Utils import UTILS_Titulaires listefamilles = [] listefamilles.append(self.IDfamille) titulaires = UTILS_Titulaires.GetTitulaires(listefamilles) nom_famille = None for id in titulaires: if "titulairesAvecCivilite" in titulaires[id]: nom_famille = titulaires[id]["titulairesAvecCivilite"] break if nom_famille == None: raise from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="portail") listeDonnees = [] champs = { "{IDENTIFIANT_INTERNET}": self.ctrl_compte_internet.GetIdentifiant(), "{MOTDEPASSE_INTERNET}": self.ctrl_compte_internet.GetMdp(), "{NOM_FAMILLE}": nom_famille, } for adresse in listeAdresses: listeDonnees.append({ "adresse": adresse, "pieces": [], "champs": champs }) dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy()
def EnvoyerEmail(self, event): """ Envoi par Email de rappels de pièces manquantes """ # Validation des données saisies tracks = self.ctrl_listview.GetTracksCoches() if len(tracks) == 0: dlg = wx.MessageDialog( self, _(u"Vous n'avez sélectionné aucune famille dans la liste !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False # Récupération des adresses email dict_adresses = UTILS_Envoi_email.GetAdressesFamilles( [track.IDfamille for track in tracks]) if dict_adresses == False: return False liste_donnees = [] for track in tracks: for adresse in dict_adresses.get(track.IDfamille, []): champs = { "{NOM_FAMILLE}": track.nomTitulaires, "{LISTE_PIECES_MANQUANTES}": track.pieces, } liste_donnees.append({ "adresse": adresse, "pieces": [], "champs": champs }) # Transfert des données vers DLG Mailer from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="rappel_pieces_manquantes") dlg.SetDonnees(liste_donnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy()
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 EnvoyerAvisDepots(self): """ Envoi des avis de dépôt par Email aux familles """ # Recherche des adresses des individus DB = GestionDB.DB() req = """SELECT individus.IDindividu, mail, travail_mail FROM individus;""" DB.ExecuterReq(req) listeAdressesIndividus = DB.ResultatReq() DB.Close() dictAdressesIndividus = {} for IDindividu, mail, travail_mail in listeAdressesIndividus: dictAdressesIndividus[IDindividu] = { "perso": mail, "travail": travail_mail } # Recherche des titulaires dictTitulaires = UTILS_Titulaires.GetTitulaires() # Recherche les familles abonnées à ce service listeDonnees = [] for track in self.tracks: if track.email_depots != None and track.inclus == True: # Recherche de l'adresse d'envoi IDindividu, categorie, adresse = track.email_depots.split(";") if IDindividu != "": try: if int(IDindividu) in dictAdressesIndividus: adresse = dictAdressesIndividus[int( IDindividu)][categorie] except: adresse = u"" # Noms des titulaires de la famille nomTitulaires = dictTitulaires[ track.IDfamille]["titulairesSansCivilite"] # Champs sur le règlement dictChamps = { "{ID_REGLEMENT}": str(track.IDreglement), "{DATE_REGLEMENT}": DateEngFr(str(track.date)), "{MODE_REGLEMENT}": track.nom_mode, "{NOM_EMETTEUR}": track.nom_emetteur, "{NUM_PIECE}": track.numero_piece, "{MONTANT_REGLEMENT}": u"%.2f %s" % (track.montant, SYMBOLE), "{NOM_PAYEUR}": track.nom_payeur, "{NUM_QUITTANCIER}": track.numero_quittancier, "{DATE_SAISIE}": DateEngFr(str(track.date_saisie)), } listeDonnees.append({ "nomTitulaires": nomTitulaires, "IDreglement": track.IDreglement, "avis_depot": track.avis_depot, "IDfamille": track.IDfamille, "adresse": adresse, "pieces": [], "champs": dictChamps }) from Dlg import DLG_Selection_avis_depots dlg = DLG_Selection_avis_depots.Dialog(self, listeDonnees=listeDonnees) reponse = dlg.ShowModal() listeSelections = dlg.GetListeSelections() dlg.Destroy() if reponse != wx.ID_OK: return listeDonnees2 = [] for index in listeSelections: listeDonnees2.append(listeDonnees[index]) # Chargement du Mailer from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="reglement") dlg.SetDonnees(listeDonnees2, modificationAutorisee=True) dlg.ChargerModeleDefaut() dlg.ShowModal() listeSucces = dlg.listeSucces dlg.Destroy() # Mémorisation des avis envoyés avec succès DB = GestionDB.DB() listeIDreglements = [] for track in listeSucces: IDreglement = int(track.champs["{ID_REGLEMENT}"]) listeIDreglements.append(IDreglement) DB.ReqMAJ("reglements", [ ("avis_depot", str(datetime.date.today())), ], "IDreglement", IDreglement) DB.Close() for track in self.tracks: if track.IDreglement in listeIDreglements: track.avis_depot = datetime.date.today() self.ctrl_reglements.RefreshObject(track)
def OnBoutonOk(self, event): """ Aperçu PDF des cotisations """ # Validation des données saisies tracks = self.ctrl_liste_cotisations.GetTracksCoches() if len(tracks) == 0 : dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune cotisation à envoyer par Email !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Création des cotisations sélectionnées listeIDcotisation = [] for track in tracks : listeIDcotisation.append(track.IDcotisation) cotisation = UTILS_Cotisations.Cotisation() dictOptions = self.ctrl_options.GetOptions() if dictOptions == False : return resultat = cotisation.Impression(listeCotisations=listeIDcotisation, nomDoc=None, afficherDoc=False, dictOptions=dictOptions, repertoire=dictOptions["repertoire"], repertoireTemp=True) if resultat == False : return dictChampsFusion, dictPieces = resultat def SupprimerFichiersTemp(): for IDcotisation, fichier in dictPieces.items() : os.remove(fichier) # Récupération de toutes les adresses Emails DB = GestionDB.DB() req = """SELECT IDindividu, mail, travail_mail FROM individus;""" DB.ExecuterReq(req) listeAdressesIndividus = DB.ResultatReq() DB.Close() dictAdressesIndividus = {} for IDindividu, mail, travail_mail in listeAdressesIndividus : dictAdressesIndividus[IDindividu] = {"perso" : mail, "travail" : travail_mail} # Récupération des données adresse + champs + pièces listeDonnees = [] listeAnomalies = [] listeEnvoiNonDemande = [] for track in tracks : adresse = UTILS_Envoi_email.GetAdresseFamille(track.IDfamille, choixMultiple=False, muet=True, nomTitulaires=track.nomsTitulaires) # Mémorisation des données if adresse not in (None, "", []) : if track.IDcotisation in dictPieces : fichier = dictPieces[track.IDcotisation] champs = dictChampsFusion[track.IDcotisation] listeDonnees.append({"adresse" : adresse, "pieces" : [fichier,], "champs" : champs}) else : listeAnomalies.append(track.nomsTitulaires) # Annonce les anomalies trouvées if len(listeAnomalies) > 0 : texte = _(u"%d des familles sélectionnées n'ont pas d'adresse Email.\n\n") % len(listeAnomalies) texte += _(u"Souhaitez-vous quand même continuer avec les %d autres familles ?") % len(listeDonnees) dlg = wx.MessageDialog(self, texte, _(u"Avertissement"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_EXCLAMATION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES : SupprimerFichiersTemp() return # Dernière vérification avant transfert if len(listeDonnees) == 0 : dlg = wx.MessageDialog(self, _(u"Il ne reste finalement aucune cotisation à envoyer par Email !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() SupprimerFichiersTemp() return # Transfert des données vers DLG Mailer from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="cotisation") dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy() # Suppression des PDF temporaires SupprimerFichiersTemp()
def EnvoiEmailFamille(parent=None, IDfamille=None, nomDoc="", categorie="", listeAdresses=[], visible=True, log=None, CreationPDF=None, IDmodele=None): # Création du PDF if CreationPDF != None: temp = CreationPDF else: temp = parent.CreationPDF dictChamps = temp(nomDoc=nomDoc, afficherDoc=False) if dictChamps == False: return False if nomDoc != False: liste_pieces = [ nomDoc, ] else: liste_pieces = [] # Recherche adresse famille if len(listeAdresses) == 0: listeAdresses = GetAdresseFamille(IDfamille) if len(listeAdresses) == 0: return False # DLG Mailer listeDonnees = [] for adresse in listeAdresses: listeDonnees.append({ "adresse": adresse, "pieces": liste_pieces, "champs": dictChamps, }) from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(parent, categorie=categorie, afficher_confirmation_envoi=visible) dlg.SetDonnees(listeDonnees, modificationAutorisee=False) if IDmodele == None: dlg.ChargerModeleDefaut() else: dlg.ChargerModele(IDmodele) if visible == True: # Fenêtre visible dlg.ShowModal() else: # Fenêtre cachée dlg.OnBoutonEnvoyer(None) if len(dlg.listeSucces) > 0: resultat = True if log: log.EcritLog(_(u"L'Email a été envoyé avec succès.")) else: resultat = False if log: log.EcritLog(_(u"L'email n'a pas été envoyé.")) dlg.Destroy() # Suppression du PDF temporaire if nomDoc != False: try: os.remove(nomDoc) except: pass return resultat
def OnBoutonOk(self, event): """ Aperçu PDF des factures """ # Validation des données saisies tracks = self.ctrl_liste_factures.GetTracksCoches() if len(tracks) == 0: dlg = wx.MessageDialog( self, _(u"Vous n'avez sélectionné aucune facture à envoyer par Email !" ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Création des factures sélectionnées listeIDfacture = [] for track in tracks: # Avertissements if track.etat == "annulation": dlg = wx.MessageDialog( self, _(u"La facture n°%s a été annulée.\n\nVous ne pouvez pas l'envoyer par Email !" ) % track.numero, _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Ajout listeIDfacture.append(track.IDfacture) facturation = UTILS_Facturation.Facturation() dictOptions = self.ctrl_options.GetOptions() if dictOptions == False: return resultat = facturation.Impression( listeFactures=listeIDfacture, nomDoc=None, afficherDoc=False, dictOptions=dictOptions, repertoire=dictOptions["repertoire_copie"], repertoireTemp=True) if resultat == False: return dictChampsFusion, dictPieces = resultat def SupprimerFichiersTemp(): for IDfacture, fichier in dictPieces.items(): try: os.remove(fichier) except: pass # Récupération de toutes les adresses Emails DB = GestionDB.DB() req = """SELECT IDindividu, mail, travail_mail FROM individus;""" DB.ExecuterReq(req) listeAdressesIndividus = DB.ResultatReq() DB.Close() dictAdressesIndividus = {} for IDindividu, mail, travail_mail in listeAdressesIndividus: dictAdressesIndividus[IDindividu] = { "perso": mail, "travail": travail_mail } # Récupération des données adresse + champs + pièces listeDonnees = [] listeAnomalies = [] listeEnvoiNonDemande = [] for track in tracks: liste_adresses = [] if track.email == True: # Si Famille inscrite à l'envoi par Email : for valeur in track.email_factures.split("##"): IDindividu, categorie, adresse = valeur.split(";") if IDindividu != "": if int(IDindividu) in dictAdressesIndividus: adresse = dictAdressesIndividus[int( IDindividu)][categorie] liste_adresses.append(adresse) else: liste_adresses.append(adresse) else: # Si famille non inscrite à l'envoi par Email adresse = UTILS_Envoi_email.GetAdresseFamille( track.IDfamille, choixMultiple=False, muet=True, nomTitulaires=track.nomsTitulaires) if adresse == False: return False liste_adresses.append(adresse) # Mémorisation des données for adresse in liste_adresses: if adresse not in (None, "", []): if track.IDfacture in dictPieces: fichier = dictPieces[track.IDfacture] champs = dictChampsFusion[track.IDfacture] listeDonnees.append({ "adresse": adresse, "pieces": [ fichier, ], "champs": champs }) if track.email == False: if track.nomsTitulaires not in listeEnvoiNonDemande: listeEnvoiNonDemande.append( track.nomsTitulaires) else: listeAnomalies.append(track.nomsTitulaires) # Annonce les anomalies trouvées if len(listeAnomalies) > 0: texte = _( u"%d des familles sélectionnées n'ont pas d'adresse Email.\n\n" ) % len(listeAnomalies) texte += _( u"Souhaitez-vous quand même continuer avec les %d autres familles ?" ) % len(listeDonnees) dlg = wx.MessageDialog( self, texte, _(u"Avertissement"), wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES: SupprimerFichiersTemp() return # Annonce les envois non demandés if len(listeEnvoiNonDemande) > 0: texte = _( u"%d des familles sélectionnées n'ont pas demandé d'envoi par Email de leur facture :\n\n" ) % len(listeEnvoiNonDemande) texte += _( u"Souhaitez-vous quand même leur envoyer une facture ?") dlg = wx.MessageDialog( self, texte, _(u"Avertissement"), wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES: SupprimerFichiersTemp() return # Dernière vérification avant transfert if len(listeDonnees) == 0: dlg = wx.MessageDialog( self, _(u"Il ne reste finalement aucune facture à envoyer par Email !" ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() SupprimerFichiersTemp() return # Transfert des données vers DLG Mailer from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="facture") dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy() # Suppression des PDF temporaires SupprimerFichiersTemp()
def OnBoutonOk(self, event): # Sélection des lignes if self.radio_ligne_selectionnee.GetValue() == True: tracks = self.listview.GetSelectedObjects() if self.radio_lignes_affichees.GetValue() == True: tracks = self.listview.GetFilteredObjects() if self.radio_lignes_cochees.GetValue() == True: tracks = self.listview.GetCheckedObjects() # Récupération de toutes les adresses Emails listeDonnees = [] listeAnomalies = [] if self.radio_individu.GetValue() == True: DB = GestionDB.DB() req = """SELECT IDindividu, nom, prenom, mail FROM individus;""" DB.ExecuterReq(req) listeAdressesIndividus = DB.ResultatReq() DB.Close() dictAdressesIndividus = {} for IDindividu, nom, prenom, mail in listeAdressesIndividus: dictAdressesIndividus[IDindividu] = { "mail": mail, "nom": nom, "prenom": prenom } for track in tracks: if track.IDindividu in dictAdressesIndividus: adresse = dictAdressesIndividus[track.IDindividu]["mail"] nom, prenom = dictAdressesIndividus[ track.IDindividu]["nom"], dictAdressesIndividus[ track.IDindividu]["prenom"] if prenom == None: prenom = "" nomIndividu = u"%s %s" % (nom, prenom) if adresse not in ("", None): dictTemp = { "adresse": adresse, "pieces": [], "champs": {} } if dictTemp not in listeDonnees: listeDonnees.append(dictTemp) else: listeAnomalies.append(nomIndividu) if self.radio_famille.GetValue() == True: dict_titulaires = UTILS_Titulaires.GetTitulaires() for track in tracks: adresse = None if track.IDfamille in dict_titulaires: #adresse = UTILS_Envoi_email.GetAdresseFamille(track.IDfamille, choixMultiple=False, muet=True, nomTitulaires=track.nomTitulaires) listeEmails = dict_titulaires[ track.IDfamille]["listeMails"] if len(listeEmails) > 0: adresse = listeEmails[0] # Mémorisation des données if adresse != None: dictTemp = { "adresse": adresse, "pieces": [], "champs": {} } if dictTemp not in listeDonnees: listeDonnees.append(dictTemp) else: listeAnomalies.append(dict_titulaires[track.IDfamille] ["titulairesSansCivilite"]) # Annonce les anomalies trouvées if len(listeAnomalies) > 0: if self.radio_famille.GetValue() == True: introduction = _( u"%d des familles sélectionnées n'ont pas d'adresse Email :" ) % len(listeAnomalies) conclusion = _( u"Souhaitez-vous quand même continuer avec les %d autres familles ?" ) % len(listeDonnees) else: introduction = _( u"%d des individus sélectionnés n'ont pas d'adresse Email :" ) % len(listeAnomalies) conclusion = _( u"Souhaitez-vous quand même continuer avec les %d autres individus ?" ) % len(listeDonnees) dlg = DLG_Messagebox.Dialog( self, titre=_(u"Anomalies"), introduction=introduction, detail=u"\n".join(listeAnomalies), conclusion=conclusion, icone=wx.ICON_EXCLAMATION, boutons=[_(u"Oui"), _(u"Non"), _(u"Annuler")]) reponse = dlg.ShowModal() dlg.Destroy() if reponse in (1, 2): return False # Dernière vérification avant transfert if len(listeDonnees) == 0: dlg = wx.MessageDialog( self, _(u"Il ne reste finalement aucun email à envoyer !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Transfert des données vers DLG Mailer from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self) dlg.SetDonnees(listeDonnees, modificationAutorisee=True) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy() # Fermeture de la fenêtre self.EndModal(wx.ID_OK)
def EnvoyerEmail(self, event): """ Envoi par Email des codes internet """ # Validation des données saisies tracks = self.ctrl_listview.GetTracksCoches() if len(tracks) == 0: dlg = wx.MessageDialog( self, _(u"Vous n'avez sélectionné aucune famille dans la liste !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False # Récupération des données listeDonnees = [] listeAnomalies = [] listeEnvoiNonDemande = [] for track in tracks: adresse = UTILS_Envoi_email.GetAdresseFamille( track.IDfamille, choixMultiple=False, muet=True, nomTitulaires=track.nomTitulaires) # Mémorisation des données if adresse not in (None, "", []): champs = { "{NOM_FAMILLE}": track.nomTitulaires, "{IDENTIFIANT_INTERNET}": track.internet_identifiant, "{MOTDEPASSE_INTERNET}": track.internet_mdp, } listeDonnees.append({ "adresse": adresse, "pieces": [], "champs": champs }) else: listeAnomalies.append(track.nomTitulaires) # Annonce les anomalies trouvées if len(listeAnomalies) > 0: texte = _( u"%d des familles sélectionnées n'ont pas d'adresse Email.\n\n" ) % len(listeAnomalies) texte += _( u"Souhaitez-vous quand même continuer avec les %d autres familles ?" ) % len(listeDonnees) dlg = wx.MessageDialog( self, texte, _(u"Avertissement"), wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES: return # Dernière vérification avant transfert if len(listeDonnees) == 0: dlg = wx.MessageDialog( self, _(u"Il ne reste finalement aucune donnée à envoyer par Email !" ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Transfert des données vers DLG Mailer from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="portail") dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy()