Ejemplo n.º 1
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()
Ejemplo n.º 2
0
    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="")
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
    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="")
Ejemplo n.º 5
0
    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()
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
    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="")
Ejemplo n.º 8
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()
Ejemplo n.º 9
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 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()
Ejemplo n.º 10
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()
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
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()
Ejemplo n.º 13
0
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
Ejemplo n.º 14
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.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()
Ejemplo n.º 15
0
    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)
Ejemplo n.º 16
0
    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()