コード例 #1
0
    def __init__(self, parent):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent
        self.dictDonnees = {}

        # Titre
        self.staticbox_generalites_staticbox = wx.StaticBox(
            self, -1, _(u"Généralités"))
        self.label_titre = wx.StaticText(self, -1, _(u"Titre de l'onglet :"))
        self.ctrl_titre = wx.TextCtrl(self, -1, "")

        # Editeur
        self.staticbox_texte_staticbox = wx.StaticBox(self, -1, _(u"Texte"))
        self.ctrl_editeur = CTRL_Editeur_email.CTRL(self)

        # Commandes
        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_ok = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Ok"), cheminImage="Images/32x32/Valider.png")
        self.bouton_annuler = CTRL_Bouton_image.CTRL(
            self,
            id=wx.ID_CANCEL,
            texte=_(u"Annuler"),
            cheminImage="Images/32x32/Annuler.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok)
コード例 #2
0
    def __init__(self, parent, IDelement=None, categorie=None):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent
        self.IDelement = IDelement
        self.categorie = categorie

        # Editeur
        self.ctrl_editeur = CTRL_Editeur_email.CTRL(self)

        # Commandes
        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_ok = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Ok"), cheminImage="Images/32x32/Valider.png")
        self.bouton_annuler = CTRL_Bouton_image.CTRL(
            self,
            id=wx.ID_CANCEL,
            texte=_(u"Annuler"),
            cheminImage="Images/32x32/Annuler.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok)

        if self.IDelement != None or self.categorie != None:
            self.SetTitle(_(u"Modification d'un texte HTML"))
            self.Importation()
        else:
            self.SetTitle(_(u"Saisie d'un texte HTML"))
コード例 #3
0
ファイル: DLG_Mailer.py プロジェクト: allouchmed/Teamworks
    def VerifieFusion(self, texteHTML="", listeDestinataires=[]):
        """ Vérifie que tous les mots-clés ont été remplacés """
        listeResultats = []
        for track in listeDestinataires:
            dictChamps = track.champs

            # Remplacement des champs pour la fusion
            texte = copy.deepcopy(texteHTML)
            for motcle, valeur in CTRL_Editeur_email.GetChampsStandards(
            ).items():
                texte = texte.replace(motcle, valeur)
            for motcle, valeur in dictChamps.items():
                try:
                    if valeur == None: valeur = u""
                    if type(valeur) == int: valeur = str(valeur)
                    texte = texte.replace(motcle, valeur)
                except:
                    pass

            # Vérifie si champs non remplacés
            x = r"\{[A-Za-z0-9_]*?\}"
            regex = re.compile(x)
            listeAnomalies = regex.findall(texte)
            if len(listeAnomalies) > 0:
                listeResultats.append((track.adresse, listeAnomalies))

        # Affichage des résultats
        if len(listeResultats) > 0:
            message = _(
                u"Certains mots-clés semblent ne pas avoir été remplacés lors de la fusion des données. Est-ce normal ?\n\n"
            )
            affichageMax = 10
            for adresse, listeAnomalies in listeResultats[:affichageMax]:
                message += u"   - %s : %s.\n" % (adresse,
                                                 ", ".join(listeAnomalies))
            if len(listeResultats) > affichageMax:
                message += _(u"   - Ainsi que %d autres...\n") % (
                    len(listeResultats) - affichageMax)
            message += _(u"\nSouhaitez-vous tout de même continuer l'envoi ?")
            dlgErreur = wx.MessageDialog(
                self, message, _(u"Anomalies"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION)
            if dlgErreur.ShowModal() == wx.ID_YES:
                return True
            else:
                return False
        else:
            return True
コード例 #4
0
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL)
        self.parent = parent
        self.IDelement = None

        # Contrôles
        self.ctrl_editeur = CTRL_Editeur_email.CTRL(self)

        # Layout
        grid_sizer_base = wx.FlexGridSizer(rows=3, cols=1, vgap=5, hgap=5)
        grid_sizer_base.Add(self.ctrl_editeur, 0, wx.EXPAND | wx.LEFT, 10)
        grid_sizer_base.AddGrowableCol(0)
        grid_sizer_base.AddGrowableRow(0)
        self.SetSizer(grid_sizer_base)
        grid_sizer_base.Fit(self)
        self.Layout()
コード例 #5
0
 def MAJ_apercu(self):
     index = self.ctrl_adresse.GetSelection()
     if index == -1 :
         return
     xml = self.texte_xml
     if xml == None :
         return
     # Remplacement des champs standards
     for motcle, valeur in CTRL_Editeur_email.GetChampsStandards().iteritems() :
         xml = xml.replace(motcle, valeur)
     # Remplacement des champs spécifiques
     dictDonnee = self.donnees[index]
     for motcle, valeur in dictDonnee["champs"].iteritems() :
         if valeur == None or valeur == "//None" :
             valeur = ""
         xml = xml.replace(motcle, valeur)
     # MAJ éditeur
     self.ctrl_editeur.SetXML(xml)
コード例 #6
0
    def __init__(self, parent, donnees=[], texte_xml=None):
        wx.Dialog.__init__(self, parent, -1, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.THICK_FRAME)
        self.parent = parent  
        self.donnees = donnees 
        self.texte_xml = texte_xml
        
        listeAdresses = []
        for dictTemp in self.donnees :
            listeAdresses.append(dictTemp["adresse"])
        
        # Navigation
        self.bouton_premier = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Premier.png"), wx.BITMAP_TYPE_ANY))
        self.bouton_reculer = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Reculer.png"), wx.BITMAP_TYPE_ANY))
        self.ctrl_adresse = wx.ComboBox(self, -1, choices=listeAdresses, style=wx.CB_DROPDOWN )
        self.ctrl_adresse.SetEditable(False)
        if len(listeAdresses) > 0 :
            self.ctrl_adresse.Select(0)
        self.bouton_avancer = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Avancer.png"), wx.BITMAP_TYPE_ANY))
        self.bouton_dernier = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Dernier.png"), wx.BITMAP_TYPE_ANY))
        
        # Aperçu
        self.ctrl_editeur = CTRL_Editeur_email.Editeur(self)
        self.ctrl_editeur.SetEditable(False) 
        
        # Boutons
        self.bouton_aide = CTRL_Bouton_image.CTRL(self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_fermer = CTRL_Bouton_image.CTRL(self, texte=_(u"Fermer"), cheminImage="Images/32x32/Fermer.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonPremier, self.bouton_premier)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonReculer, self.bouton_reculer)
        self.Bind(wx.EVT_CHOICE, self.OnChoixAdresse, self.ctrl_adresse)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAvancer, self.bouton_avancer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonDernier, self.bouton_dernier)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonFermer, self.bouton_fermer)
        
        # Init contrôles
        self.bouton_fermer.SetFocus() 
        self.MAJ_apercu()
コード例 #7
0
 def MAJ_apercu(self):
     index = self.ctrl_adresse.GetSelection()
     if index == -1:
         return
     xml = self.texte_xml
     if xml == None:
         return
     # Remplacement des champs standards
     for motcle, valeur in CTRL_Editeur_email.GetChampsStandards().items():
         xml = xml.replace(motcle.encode("iso-8859-15"),
                           valeur.encode("iso-8859-15"))
     # Remplacement des champs spécifiques
     dictDonnee = self.donnees[index]
     for motcle, valeur in dictDonnee["champs"].items():
         if valeur == None or valeur == "//None":
             valeur = ""
         if type(valeur) == int:
             valeur = str(valeur)
         if type(valeur) == datetime.date:
             valeur = UTILS_Dates.DateDDEnFr(valeur)
         xml = xml.replace(motcle, valeur)
     # MAJ éditeur
     self.ctrl_editeur.SetXML(xml)
コード例 #8
0
ファイル: DLG_Mailer.py プロジェクト: allouchmed/Teamworks
    def Envoyer(self, listeDestinataires=[], adresseTest=None):
        # Expéditeur
        dictExp = self.ctrl_exp.GetDonnees()
        if dictExp == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez sélectionné aucune adresse d'expéditeur !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            if self.IsShown() == False: self.ShowModal()
            return

        # Accusé de réception
        accuseReception = self.check_accuseReception.GetValue()

        # Objet
        sujet = self.ctrl_objet.GetValue()
        if len(sujet) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement saisir un objet pour ce message !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            if self.IsShown() == False: self.ShowModal()
            self.ctrl_objet.SetFocus()
            return

        # Destinataires
        if len(listeDestinataires) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner au moins un destinataire !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            if self.IsShown() == False: self.ShowModal()
            return

        nbreAnomalies = 0
        for dest in listeDestinataires:
            if dest.adresse == None:
                nbreAnomalies += 1
        if nbreAnomalies > 0:
            dlg = wx.MessageDialog(
                self,
                _(u"%d adresse(s) Email ne sont pas renseignées !") %
                nbreAnomalies, _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Texte
        if len(self.ctrl_editeur.GetValue()) == 0:
            dlg = wx.MessageDialog(
                self, _(u"Vous devez obligatoirement saisir un texte !"),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            if self.IsShown() == False: self.ShowModal()
            self.ctrl_editeur.SetFocus()
            return
        texteHTML, listeImages, handler = self.ctrl_editeur.GetHTML(
            imagesIncluses=True)

        # Vérifie la fusion des mots-clés
        if self.VerifieFusion(texteHTML, listeDestinataires) == False:
            if self.IsShown() == False: self.ShowModal()
            return

        # Pièces jointes
        listePiecesCommunes = self.ctrl_pieces.GetDonnees()

        # Demande de confirmation
        if adresseTest == None and self.afficher_confirmation_envoi == True:
            dlg = wx.MessageDialog(
                self,
                _(u"Confirmez-vous l'envoi de ce message pour %d destinataires ?\n\nAttention, l'envoi peut prendre quelques minutes..."
                  ) % len(listeDestinataires), _(u"Confirmation"),
                wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
            if dlg.ShowModal() != wx.ID_YES:
                dlg.Destroy()
                if self.IsShown() == False: self.ShowModal()
                return
            dlg.Destroy()

        # Préparation des messages
        liste_messages = []
        for track in listeDestinataires:
            adresse = track.adresse
            if adresseTest != None:
                adresse = adresseTest
            listePiecesPersonnelles = track.pieces
            dictChamps = track.champs

            # Pièces Personnelles + communes
            listePieces = listePiecesPersonnelles
            listePieces.extend(listePiecesCommunes)

            # Traitement des champs pour la fusion
            texte = copy.deepcopy(texteHTML)
            for motcle, valeur in CTRL_Editeur_email.GetChampsStandards(
            ).items():
                texte = texte.replace(motcle, valeur)
            for motcle, valeur in dictChamps.items():
                if valeur == None: valeur = u""
                if type(valeur) == int: valeur = str(valeur)
                if type(valeur) == bool: valeur = str(valeur)
                if type(valeur) == datetime.date:
                    valeur = UTILS_Dates.DateDDEnFr(valeur)
                texte = texte.replace(motcle, valeur)

            # Mémorisation du message
            message = UTILS_Envoi_email.Message(
                destinataires=[
                    adresse,
                ],
                sujet=sujet,
                texte_html=texte,
                fichiers=listePieces,
                images=listeImages,
                champs=dictChamps,
            )
            liste_messages.append(message)

        # Connexion messagerie
        dlg_progress = wx.ProgressDialog(
            _(u"Envoi des mails"),
            _(u"Connexion au serveur de messagerie..."),
            maximum=len(liste_messages) + 1,
            parent=None)
        dlg_progress.SetSize((450, 140))
        dlg_progress.CenterOnScreen()

        try:
            messagerie = UTILS_Envoi_email.Messagerie(
                backend=dictExp["moteur"],
                hote=dictExp["smtp"],
                port=dictExp["port"],
                utilisateur=dictExp["utilisateur"],
                motdepasse=dictExp["motdepasse"],
                email_exp=dictExp["adresse"],
                nom_exp=dictExp["nom_adresse"],
                timeout=20,
                use_tls=dictExp["startTLS"],
                parametres=dictExp["parametres"])
            messagerie.Connecter()
        except Exception as err:
            dlg_progress.Destroy()
            err = str(err)
            intro = _(
                u"La connexion au serveur de messagerie est impossible :")
            conclusion = _(
                u"Vérifiez votre connexion internet ou les paramètres de votre adresse d'expédition."
            )
            dlgErreur = DLG_Messagebox.Dialog(self,
                                              titre=_(u"Erreur"),
                                              introduction=intro,
                                              detail=err,
                                              conclusion=conclusion,
                                              icone=wx.ICON_ERROR,
                                              boutons=[
                                                  _(u"Ok"),
                                              ])
            dlgErreur.ShowModal()
            dlgErreur.Destroy()
            return False

        # Envoi des messages
        self.listeSucces = messagerie.Envoyer_lot(
            messages=liste_messages,
            dlg_progress=dlg_progress,
            afficher_confirmation_envoi=self.afficher_confirmation_envoi)

        # Fermeture messagerie
        try:
            messagerie.Fermer()
        except:
            pass

        # Fermeture dlg_progress si besoin
        if dlg_progress != None:
            try:
                dlg_progress.Destroy()
            except:
                pass

        # Suppression des images temporaires incluses dans le message
        handler.DeleteTemporaryImages()

        # Mémorisation dans l'historique
        if self.listeSucces != False:
            for message in self.listeSucces:
                self.MemorisationHistorique(message.GetLabelDestinataires(),
                                            message.sujet)
コード例 #9
0
ファイル: DLG_Mailer.py プロジェクト: allouchmed/Teamworks
 def InsererMotcle(self, event):
     motcle, label = CTRL_Editeur_email.GetMotscles(
         self.categorie)[event.GetId() - 10000]
     self.ctrl_editeur.EcritTexte(motcle)
コード例 #10
0
ファイル: DLG_Mailer.py プロジェクト: allouchmed/Teamworks
    def __init__(self,
                 parent,
                 categorie="saisie_libre",
                 afficher_confirmation_envoi=True):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent
        self.categorie = categorie
        self.afficher_confirmation_envoi = afficher_confirmation_envoi
        self.listePiecesJointes = []
        self.listeAnomalies = []
        self.listeSucces = []

        # Bandeau
        intro = _(
            u"Vous pouvez ici expédier des Emails par lot. Sélectionnez une adresse d'expéditeur, un objet, un ou plusieurs destinataires avant de rédiger votre texte. Les Emails sont envoyés par lots afin de contourner les protections anti-spam des opérateurs."
        )
        titre = _(u"Editeur d'Emails")
        self.SetTitle(titre)
        self.ctrl_bandeau = CTRL_Bandeau.Bandeau(
            self,
            titre=titre,
            texte=intro,
            hauteurHtml=30,
            nomImage="Images/32x32/Editeur_email.png")

        # Destinataires
        self.box_destinataires_staticbox = wx.StaticBox(
            self, -1, _(u"Destinataires"))
        self.ctrl_destinataires = OL_Destinataires_emails.ListView(
            self,
            id=-1,
            style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_SINGLE_SEL
            | wx.LC_HRULES | wx.LC_VRULES)
        self.ctrl_destinataires.MAJ()
        self.bouton_modifier_dest = wx.BitmapButton(
            self, -1,
            wx.Bitmap(
                Chemins.GetStaticPath("Images/16x16/Email_destinataires.png"),
                wx.BITMAP_TYPE_ANY))
        self.bouton_ajouter_piece_spec = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ajouter.png"),
                      wx.BITMAP_TYPE_ANY))
        self.bouton_retirer_piece_spec = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Supprimer.png"),
                      wx.BITMAP_TYPE_ANY))

        # Paramètres
        self.box_param_staticbox = wx.StaticBox(self, -1, _(u"Paramètres"))
        self.label_exp = wx.StaticText(self, -1, _(u"Exp. :"))
        self.ctrl_exp = CTRL_Editeur_email.Panel_Expediteur(self)
        self.check_accuseReception = wx.CheckBox(self, -1,
                                                 _(u"Accusé de réception"))

        # Pièces jointes
        self.box_pieces_staticbox = wx.StaticBox(
            self, -1, _(u"Pièces jointes communes"))
        self.ctrl_pieces = OL_Pieces_jointes_emails.ListView(
            self,
            id=-1,
            style=wx.LC_NO_HEADER | wx.LC_REPORT | wx.SUNKEN_BORDER
            | wx.LC_SINGLE_SEL | wx.LC_HRULES | wx.LC_VRULES)
        self.ctrl_pieces.SetMinSize((200, 70))
        self.ctrl_pieces.MAJ()

        self.bouton_ajouter_piece = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ajouter.png"),
                      wx.BITMAP_TYPE_ANY))
        self.bouton_suppr_piece = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Supprimer.png"),
                      wx.BITMAP_TYPE_ANY))

        # Texte
        self.box_texte_staticbox = wx.StaticBox(self, -1, _(u"Message"))
        self.label_objet = wx.StaticText(self, -1, _(u"Objet :"))
        self.ctrl_objet = wx.TextCtrl(self, -1, u"")
        self.ctrl_objet.SetMinSize((200, -1))

        self.ctrl_editeur = CTRL_Editeur_email.CTRL(self)

        # Commandes
        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_outils = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Outils"),
            cheminImage="Images/32x32/Configuration.png")
        self.bouton_envoyer = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Envoyer l'Email"),
            cheminImage="Images/32x32/Emails_exp.png")
        self.bouton_annuler = CTRL_Bouton_image.CTRL(
            self,
            id=wx.ID_CANCEL,
            texte=_(u"Fermer"),
            cheminImage="Images/32x32/Fermer.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonOutils, self.bouton_outils)
        self.Bind(wx.EVT_BUTTON, self.ctrl_destinataires.Modifier,
                  self.bouton_modifier_dest)
        self.Bind(wx.EVT_BUTTON, self.ctrl_destinataires.AjouterPiece,
                  self.bouton_ajouter_piece_spec)
        self.Bind(wx.EVT_BUTTON, self.ctrl_destinataires.RetirerPiece,
                  self.bouton_retirer_piece_spec)
        self.Bind(wx.EVT_BUTTON, self.ctrl_pieces.Ajouter,
                  self.bouton_ajouter_piece)
        self.Bind(wx.EVT_BUTTON, self.ctrl_pieces.Retirer,
                  self.bouton_suppr_piece)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonEnvoyer, self.bouton_envoyer)

        # Init contrôles
        self.ctrl_objet.SetFocus()
コード例 #11
0
ファイル: DLG_Mailer.py プロジェクト: allouchmed/Teamworks
    def OnBoutonOutils(self, event):
        # Création du menu contextuel
        menuPop = UTILS_Adaptations.Menu()

        # Insérer un mot-clé
        listeMotscles = CTRL_Editeur_email.GetMotscles(self.categorie)
        sousMenuMotscles = UTILS_Adaptations.Menu()
        index = 0
        for motcle, label in listeMotscles:
            id = 10000 + index
            sousMenuMotscles.AppendItem(wx.MenuItem(menuPop, id, motcle))
            self.Bind(wx.EVT_MENU, self.InsererMotcle, id=id)
            index += 1
        menuPop.AppendMenu(10, _(u"Insérer un mot-clé"), sousMenuMotscles)

        # Aperçu de la fusion
        item = wx.MenuItem(menuPop, 60, _(u"Aperçu de la fusion"))
        item.SetBitmap(
            wx.Bitmap(
                Chemins.GetStaticPath("Images/16x16/Apercu_fusion_emails.png"),
                wx.BITMAP_TYPE_PNG))
        menuPop.AppendItem(item)
        self.Bind(wx.EVT_MENU, self.ApercuFusion, id=60)

        menuPop.AppendSeparator()

        # Effacer le texte
        item = wx.MenuItem(menuPop, 50, _(u"Effacer le texte"))
        item.SetBitmap(
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Gomme.png"),
                      wx.BITMAP_TYPE_PNG))
        menuPop.AppendItem(item)
        self.Bind(wx.EVT_MENU, self.EffacerTexte, id=50)

        menuPop.AppendSeparator()

        # Modèles d'Emails
        sousMenuModeles = UTILS_Adaptations.Menu()
        DB = GestionDB.DB()
        req = """SELECT IDmodele, nom, description
        FROM modeles_emails
        WHERE categorie='%s'
        ORDER BY nom;""" % self.categorie
        DB.ExecuterReq(req)
        listeDonnees = DB.ResultatReq()
        DB.Close()
        for IDmodele, nom, description in listeDonnees:
            id = 20000 + IDmodele
            item = wx.MenuItem(menuPop, id, nom)
            item.SetBitmap(
                wx.Bitmap(
                    Chemins.GetStaticPath("Images/16x16/Emails_modele.png"),
                    wx.BITMAP_TYPE_PNG))
            sousMenuModeles.AppendItem(item)
            self.Bind(wx.EVT_MENU, self.ChargerModeleMenu, id=id)

        item = menuPop.AppendMenu(20, _(u"Charger un modèle d'Email"),
                                  sousMenuModeles)
        if len(listeDonnees) == 0:
            if item != None:
                item.Enable(False)

        # Gestion des modèles d'Email
        item = wx.MenuItem(menuPop, 30, _(u"Gestion des modèles"))
        item.SetBitmap(
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Emails_modele.png"),
                      wx.BITMAP_TYPE_PNG))
        menuPop.AppendItem(item)
        self.Bind(wx.EVT_MENU, self.GestionModeles, id=30)

        menuPop.AppendSeparator()

        # Envoyer un email de test
        item = wx.MenuItem(menuPop, 40, _(u"Envoyer un Email de test"))
        item.SetBitmap(
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Mail.png"),
                      wx.BITMAP_TYPE_PNG))
        menuPop.AppendItem(item)
        self.Bind(wx.EVT_MENU, self.EnvoyerTest, id=40)

        self.PopupMenu(menuPop)
        menuPop.Destroy()
コード例 #12
0
    def __init__(self, parent, categorie="", IDmodele=None):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent
        self.categorie = categorie
        self.IDmodele = IDmodele
        self.defaut = 0

        # Généralités
        self.staticbox_generalites_staticbox = wx.StaticBox(
            self, -1, _(u"Généralités"))
        self.label_nom = wx.StaticText(self, -1, _(u"Nom :"))
        self.ctrl_nom = wx.TextCtrl(self, -1, u"")
        self.label_description = wx.StaticText(self, -1, _(u"Description :"))
        self.ctrl_description = wx.TextCtrl(self,
                                            -1,
                                            u"",
                                            style=wx.TE_MULTILINE)

        # Mots-clés
        self.listeMotsCles = []
        listeMotscles = CTRL_Editeur_email.GetMotscles(self.categorie)
        for motCle, code in listeMotscles:
            self.listeMotsCles.append(motCle)

        self.staticbox_motscles_staticbox = wx.StaticBox(
            self, -1, _(u"Mots-clés disponibles"))
        self.ctrl_motscles = wx.ListBox(self,
                                        -1,
                                        choices=self.listeMotsCles,
                                        style=wx.SIMPLE_BORDER)
        self.ctrl_motscles.SetBackgroundColour("#F0FBED")

        # Expéditeur
        self.label_exp = wx.StaticText(self, -1, _(u"Expéditeur :"))
        self.ctrl_exp = CTRL_Editeur_email.Panel_Expediteur(self)

        # Objet
        self.label_objet = wx.StaticText(self, -1, _(u"Objet :"))
        self.ctrl_objet = wx.TextCtrl(self, -1, u"")

        # texte
        self.staticbox_texte_staticbox = wx.StaticBox(self, -1, _(u"Message"))
        self.ctrl_editeur = CTRL_Editeur_email.CTRL(self)

        # Commandes
        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_ok = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Ok"), cheminImage="Images/32x32/Valider.png")
        self.bouton_annuler = CTRL_Bouton_image.CTRL(
            self,
            id=wx.ID_CANCEL,
            texte=_(u"Annuler"),
            cheminImage="Images/32x32/Annuler.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnInsertMotcle,
                  self.ctrl_motscles)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok)

        if self.IDmodele != None:
            self.SetTitle(_(u"Modification d'un modèle d'Email"))
            self.Importation()
        else:
            self.SetTitle(_(u"Saisie d'un modèle d'Email"))
コード例 #13
0
ファイル: DLG_Mailer.py プロジェクト: ahmadshahwan/Noethys
    def Envoyer(self, listeDestinataires=[], adresseTest=None):
        # Expéditeur
        dictExp = self.ctrl_exp.GetDonnees()
        if dictExp == None :
            dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune adresse d'expéditeur !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            if self.IsShown() == False : self.ShowModal()
            return
        exp = dictExp["adresse"]
        nomexp = dictExp["nom_adresse"]
        serveur = dictExp["smtp"]
        port = dictExp["port"]
        connexionAuthentifiee = dictExp["auth"]
        connexionStartTLS = dictExp["startTLS"]
        motdepasse = dictExp["motdepasse"]
        utilisateur = dictExp["utilisateur"]
        
        # Accusé de réception
        accuseReception = self.check_accuseReception.GetValue()
        
        # Objet
        sujet = self.ctrl_objet.GetValue()
        if len(sujet) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement saisir un objet pour ce message !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            if self.IsShown() == False : self.ShowModal()
            self.ctrl_objet.SetFocus()
            return
        
        # Destinataires
        if len(listeDestinataires) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous devez sélectionner au moins un destinataire !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            if self.IsShown() == False : self.ShowModal()
            return
        
        nbreAnomalies = 0
        for dest in listeDestinataires :
            if dest.adresse == None :
                nbreAnomalies += 1
        if nbreAnomalies > 0 :
            dlg = wx.MessageDialog(self, _(u"%d adresse(s) Email ne sont pas renseignées !") % nbreAnomalies, _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
            
        # Texte
        if len(self.ctrl_editeur.GetValue()) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement saisir un texte !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            if self.IsShown() == False : self.ShowModal()
            self.ctrl_editeur.SetFocus()
            return
        texteHTML, listeImages, handler = self.ctrl_editeur.GetHTML(imagesIncluses=True)
        
        # Vérifie la fusion des mots-clés
        if self.VerifieFusion(texteHTML, listeDestinataires) == False :
            if self.IsShown() == False : self.ShowModal()
            return
    
        # Pièces jointes
        listePiecesCommunes = self.ctrl_pieces.GetDonnees() 

        # Demande de confirmation
        if adresseTest == None and self.afficher_confirmation_envoi == True :
            dlg = wx.MessageDialog(self, _(u"Confirmez-vous l'envoi de ce message pour %d destinataires ?\n\nAttention, l'envoi peut prendre quelques minutes...") % len(listeDestinataires), _(u"Confirmation"), wx.YES_NO|wx.YES_DEFAULT|wx.CANCEL|wx.ICON_QUESTION)
            if dlg.ShowModal() != wx.ID_YES :
                dlg.Destroy()
                if self.IsShown() == False : self.ShowModal()
                return
            dlg.Destroy()

        # Envoi des mails
        dlg = wx.ProgressDialog(_(u"Envoi des mails"), _(u"Veuillez patienter..."), maximum = len(listeDestinataires)+1, parent=self)
        dlg.SetSize((370, 140))
        dlg.CenterOnScreen() 
        
        index = 1
        self.listeAnomalies = []
        self.listeSucces = []
        for track in listeDestinataires :
            adresse = track.adresse
            if adresseTest != None :
                adresse = adresseTest
##            adresse = FonctionsPerso.Supprime_accent2(adresse)
            listePiecesPersonnelles = track.pieces
            dictChamps = track.champs      
            
            # Pièces Personnelles + communes
            listePieces = listePiecesPersonnelles
            listePieces.extend(listePiecesCommunes)
            
            # Traitement des champs pour la fusion
            texte = copy.deepcopy(texteHTML)
            for motcle, valeur in CTRL_Editeur_email.GetChampsStandards().iteritems() :
                texte = texte.replace(motcle, valeur)
            for motcle, valeur in dictChamps.iteritems() :
                if valeur == None : valeur = u""
                if type(valeur) == int : valeur = str(valeur)
                if type(valeur) == bool : valeur = str(valeur)
                if type(valeur) == datetime.date : valeur = UTILS_Dates.DateDDEnFr(valeur)
                texte = texte.replace(motcle, valeur)
            
            # Envoi du mail
            try :
                labelAdresse = adresse.decode("iso-8859-15")
            except :
                labelAdresse = adresse
            label = _(u"Envoi %d/%d : %s...") % (index, len(listeDestinataires), labelAdresse)
            self.EcritStatusBar(label)
            dlg.Update(index, label)
            
            try :
                etat = UTILS_Envoi_email.Envoi_mail( 
                    adresseExpediteur=exp, 
                    nomadresseExpediteur=nomexp, 
                    listeDestinataires=[adresse,], 
                    listeDestinatairesCCI=[], 
                    sujetMail=sujet, 
                    texteMail=texte, 
                    listeFichiersJoints=listePieces, 
                    serveur=serveur, 
                    port=port, 
                    avecAuthentification=connexionAuthentifiee,
                    avecStartTLS=connexionStartTLS,
                    listeImages=listeImages,
                    motdepasse=motdepasse,
                    accuseReception=accuseReception,
                    utilisateur=utilisateur,
                    )
                self.listeSucces.append(track)
                
                # Mémorisation dans l'historique
                self.MemorisationHistorique(adresse, sujet)

            except Exception, err:
                err = str(err).decode("iso-8859-15")
                self.listeAnomalies.append((track, err))
                print ("Erreur dans l'envoi d'un mail : %s...", err)
                traceback.print_exc(file=sys.stdout)

                if index == len(listeDestinataires) :
                    dlgErreur = wx.MessageDialog(self, _(u"%s\n\nL'erreur suivante a été détectée :\n%s.") % (label, err), _(u"Erreur"), wx.OK | wx.ICON_ERROR)
                    dlgErreur.ShowModal()
                    dlgErreur.Destroy()
                else :
                    dlgErreur = wx.MessageDialog(self, _(u"%s\n\nL'erreur suivante a été détectée :\n%s.\n\nSouhaitez-vous quand même continuer le processus ?") % (label, err), _(u"Erreur"), wx.YES_NO|wx.YES_DEFAULT|wx.CANCEL|wx.ICON_ERROR)
                    if dlgErreur.ShowModal() != wx.ID_YES :
                        dlgErreur.Destroy()
                        # Arrêt du processus
                        dlg.Destroy()
                        handler.DeleteTemporaryImages()
                        self.EcritStatusBar(u"")
                        return
                    dlgErreur.Destroy()

            if len(listeDestinataires) > 1 :
                time.sleep(2) # Attente entre chaque envoi...
            index += 1
コード例 #14
0
    def __init__(self, parent):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           name="DLG_Export_noethysweb",
                           style=wx.DEFAULT_DIALOG_STYLE)
        self.parent = parent

        # Bandeau
        intro = _(
            u"Utilisez cette fonctionnalité pour convertir votre base de données au format Noethysweb. Saisissez un mot de passe deux fois et cliquez sur le bouton Générer."
        )
        titre = _(u"Exporter les données vers Noethysweb")
        self.SetTitle(titre)
        self.ctrl_bandeau = CTRL_Bandeau.Bandeau(
            self,
            titre=titre,
            texte=intro,
            hauteurHtml=30,
            nomImage="Images/32x32/Document_export.png")

        # Fichier de destination
        self.box_destination_staticbox = wx.StaticBox(self, -1,
                                                      _(u"Destination"))
        self.label_nom = wx.StaticText(self, -1, u"Nom :")
        nom_fichier = _(u"Noethysweb_%s") % datetime.datetime.now().strftime(
            "%Y%m%d_%H%M")
        self.ctrl_nom = wx.TextCtrl(self, -1, nom_fichier)

        self.label_repertoire = wx.StaticText(self, -1, u"Répertoire :")
        sp = wx.StandardPaths.Get()
        cheminDefaut = sp.GetDocumentsDir()
        self.ctrl_repertoire = wx.TextCtrl(self, -1, cheminDefaut)
        self.bouton_repertoire = wx.BitmapButton(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath(u"Images/16x16/Repertoire.png"),
                      wx.BITMAP_TYPE_ANY))

        # Mot de passe
        self.box_cryptage_staticbox = wx.StaticBox(self, -1, _(u"Cryptage"))
        self.label_mdp = wx.StaticText(self, -1, _(u"Mot de passe :"))
        self.ctrl_mdp = wx.TextCtrl(self, -1, u"", style=wx.TE_PASSWORD)
        self.label_confirmation = wx.StaticText(self, -1, _(u"Confirmation :"))
        self.ctrl_confirmation = wx.TextCtrl(self,
                                             -1,
                                             u"",
                                             style=wx.TE_PASSWORD)

        # CTRL Editeur d'Emails pour récupérer la version HTML d'un texte XML
        self.ctrl_editeur = CTRL_Editeur_email.CTRL(self)
        self.ctrl_editeur.Show(False)

        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_generer = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Générer"),
            cheminImage="Images/32x32/Sauvegarder.png")
        self.bouton_annuler = CTRL_Bouton_image.CTRL(
            self,
            id=wx.ID_CANCEL,
            texte=_(u"Fermer"),
            cheminImage="Images/32x32/Annuler.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonRepertoire,
                  self.bouton_repertoire)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonGenerer, self.bouton_generer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)