コード例 #1
0
    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="")
コード例 #2
0
    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()
コード例 #3
0
    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()
コード例 #4
0
    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
コード例 #5
0
    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()
コード例 #6
0
    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()
コード例 #7
0
    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()
コード例 #8
0
    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