Пример #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 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) :
            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="")
Пример #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 Envoyer_email(self, event):
        # Envoyer un email à la famille
        from Utils import UTILS_Envoi_email
        listeAdresses = UTILS_Envoi_email.GetAdresseFamille(self.IDfamille)
        if 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 titulaires[id].has_key("titulairesAvecCivilite"):
                nom_famille = titulaires[id]["titulairesAvecCivilite"]
                break
        if nom_famille == None:
            raise
        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()
Пример #5
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()
    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.iteritems() :
                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 dictPieces.has_key(track.IDcompte_payeur) :
                    fichier = dictPieces[track.IDcompte_payeur]
                    champs = dictChampsFusion[track.IDcompte_payeur]
                    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 attestation fiscale à 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="attestation_fiscale")
        dlg.SetDonnees(listeDonnees, modificationAutorisee=False)
        dlg.ChargerModeleDefaut()
        dlg.ShowModal() 
        dlg.Destroy()

        # Suppression des PDF temporaires
        SupprimerFichiersTemp()
Пример #7
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 dictAdressesIndividus.has_key(int(IDindividu)) :
                         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})
     
     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
     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)
Пример #8
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" :
        import DLG_Mailer
        dlg = DLG_Mailer.Dialog(None)
        dlg.ChargerModeleDefaut()
        dlg.SetPiecesJointes([cheminFichier,])
        dlg.ShowModal()
        dlg.Destroy()