def MenuEnvoyerMail(self, event): """ Envoyer un Email """ from Utils import UTILS_Envoi_email listeAdresses = UTILS_Envoi_email.GetAdresseFamille(self.IDfamille) if len(listeAdresses) == 0: return # Depuis l'éditeur d'Emails de Noethys if event.GetId() == 200: 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 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 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 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.nomTitulaires) # Mémorisation des données if adresse not in (None, "", []) and track.pieces not in (None, "", []): champs = { "{NOM_FAMILLE}" : track.nomTitulaires, "{LISTE_PIECES_MANQUANTES}" : track.pieces, } 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 ou n'ont pas de pièces manquantes.\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 aucun rappel à envoyer par Email !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Transfert des données vers DLG Mailer import DLG_Mailer dlg = DLG_Mailer.Dialog(self, categorie="rappel_pieces_manquantes") dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ChargerModeleDefaut() dlg.ShowModal() dlg.Destroy()
def Traitement_factures(self): # Récupération des paramètres IDfacture = int(self.dict_parametres["IDfacture"]) listeAdresses = UTILS_Envoi_email.GetAdresseFamille(self.track.IDfamille) edition = Edition_facture(parent=self.parent, IDfacture=IDfacture, IDfamille=self.track.IDfamille) # Traitement manuel if self.mode == "manuel" : if self.dict_parametres["methode_envoi"] == "email" : self.EcritLog(_(u"Veuillez envoyer cette facture par Email.")) edition.EnvoyerEmail(visible=True) elif self.dict_parametres["methode_envoi"] == "courrier" : self.EcritLog(_(u"Veuillez imprimer la facture pour un envoi par courrier.")) edition.Reedition() else : self.EcritLog(_(u"Veuillez imprimer la facture pour un retrait sur site.")) edition.Reedition() return True # Traitement automatique if self.mode == "automatique" : # Affichage du PDF pour envoi par courrier ou retrait sur site if self.dict_parametres["methode_envoi"] != "email" : message = _(u"La facture va être générée au format PDF et ouverte dans votre lecteur de PDF.\n\n") if self.dict_parametres["methode_envoi"] == "courrier" : message += _(u"Veuillez l'imprimer et l'envoyer par courrier.") else : message += _(u"Veuillez l'imprimer et le conserver pour un retrait sur site.") dlg = wx.MessageDialog(self.parent, message, _(u"Impression d'une facture"), wx.OK|wx.OK_DEFAULT|wx.CANCEL|wx.ICON_QUESTION) reponse = dlg.ShowModal() dlg.Destroy() if reponse == wx.ID_CANCEL : self.EcritLog(_(u"Interruption du traitement par l'utilisateur.")) return False edition.Reedition(afficherOptions=False) self.EcritLog(_(u"La génération de la facture est terminée.")) if self.dict_parametres["methode_envoi"] == "courrier" : self.EcritLog(_(u"Veuillez imprimer la facture pour un envoi par courrier.")) else : self.EcritLog(_(u"Veuillez imprimer la facture pour un retrait sur site.")) # Envoi par Email if self.dict_parametres["methode_envoi"] == "email" : resultat = edition.EnvoyerEmail(visible=False) return True
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 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.iteritems(): 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 dictAdressesIndividus.has_key(int(IDindividu)): 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) liste_adresses.append(adresse) # Mémorisation des données for adresse in liste_adresses: if adresse not in (None, "", []): if dictPieces.has_key(track.IDfacture): 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 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): """ 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 Traitement_recus(self): # Récupération des paramètres IDreglement = int(self.dict_parametres["IDreglement"]) listeAdresses = UTILS_Envoi_email.GetAdresseFamille(self.track.IDfamille) # Ouverture de la fenêtre d'édition d'un reçu from Dlg import DLG_Impression_recu dlg_impression = DLG_Impression_recu.Dialog(self.parent, IDreglement=IDreglement) dlg_impression.listeAdresses = listeAdresses # Traitement manuel if self.mode == "manuel" : self.EcritLog(_(u"Ouverture de la fenêtre d'édition d'un reçu.")) if self.dict_parametres["methode_envoi"] == "email" : self.EcritLog(_(u"Veuillez envoyer ce reçu de règlement par Email.")) elif self.dict_parametres["methode_envoi"] == "courrier" : self.EcritLog(_(u"Veuillez imprimer le reçu de règlement pour un envoi par courrier.")) else : self.EcritLog(_(u"Veuillez imprimer le reçu de règlement pour un retrait sur site.")) dlg_impression.ShowModal() dlg_impression.Destroy() return True # Traitement automatique if self.mode == "automatique" : nomDoc = FonctionsPerso.GenerationNomDoc("RECU", "pdf") categorie = "recu_reglement" # Affichage du PDF pour envoi par courrier ou retrait sur site if self.dict_parametres["methode_envoi"] != "email" : message = _(u"Le reçu de règlement va être généré au format PDF et ouvert dans votre lecteur de PDF.\n\n") if self.dict_parametres["methode_envoi"] == "courrier" : message += _(u"Veuillez l'imprimer et l'envoyer par courrier.") else : message += _(u"Veuillez l'imprimer et le conserver pour un retrait sur site.") dlg = wx.MessageDialog(self.parent, message, _(u"Impression d'un reçu"), wx.OK|wx.OK_DEFAULT|wx.CANCEL|wx.ICON_QUESTION) reponse = dlg.ShowModal() dlg.Destroy() if reponse == wx.ID_CANCEL : self.EcritLog(_(u"Interruption du traitement par l'utilisateur.")) return False dictChamps = dlg_impression.CreationPDF(nomDoc=nomDoc, afficherDoc=True) if dictChamps == False : dlg_impression.Destroy() self.EcritLog(_(u"[ERREUR] La génération du reçu au format PDF a rencontré une erreur.")) return False self.EcritLog(_(u"La génération du reçu est terminée.")) if self.dict_parametres["methode_envoi"] == "courrier" : self.EcritLog(_(u"Veuillez imprimer le reçu de règlement pour un envoi par courrier.")) else : self.EcritLog(_(u"Veuillez imprimer le reçu de règlement pour un retrait sur site.")) # Envoi par Email if self.dict_parametres["methode_envoi"] == "email" : resultat = UTILS_Envoi_email.EnvoiEmailFamille(parent=dlg_impression, IDfamille=self.track.IDfamille, nomDoc=nomDoc, categorie=categorie, listeAdresses=listeAdresses, visible=False, log=self.track) # Mémorisation de l'édition du reçu dlg_impression.Sauvegarder(demander=False) dlg_impression.Destroy() return True