예제 #1
0
import Chemins
from Utils.UTILS_Traduction import _
import wx
from Ctrl import CTRL_Bouton_image
import os
import datetime
import six
import decimal
from Dlg import DLG_Selection_liste
import FonctionsPerso
from Ctrl import CTRL_Bandeau
from Utils import UTILS_Fichiers
from Utils import UTILS_Dates
from Utils import UTILS_Config
SYMBOLE = UTILS_Config.GetParametre("monnaie_symbole", u"¤")

from Utils import UTILS_Interface
from Ctrl.CTRL_ObjectListView import FastObjectListView, ColumnDefn, Filter, CTRL_Outils


def GetValeursListview(listview=None, format="texte"):
    """ Récupère les valeurs affichées sous forme de liste """
    """ format = "texte" ou "original" """
    # Récupère les labels de colonnes
    listeColonnes = []
    for colonne in listview.columns:
        listeColonnes.append(
            (colonne.title, colonne.align, colonne.width, colonne.valueGetter))

    # Récupère les valeurs
예제 #2
0
def GetRepertoireMySQL(dictValeurs={}):
    """ Récupère le répertoire d'installation MySQL 
         dictValeurs = valeurs de connexion
    """
    # Récupération du chemin de MySQL à partir de la base de données
    ##    import MySQLdb
    ##    connexion = MySQLdb.connect(host=dictValeurs["hote"],user=dictValeurs["utilisateur"], passwd=dictValeurs["mdp"], port=dictValeurs["port"], use_unicode=True)
    ##    connexion.set_character_set('utf8')
    ##    cursor = connexion.cursor()
    ##    cursor.execute("SELECT @@basedir;")
    ##    donnees = cursor.fetchall()
    ##    if len(donnees) == 0 :
    ##        return None
    ##    return donnees[0][0]

    # 1- Recherche automatique
    if "linux" in sys.platform:
        if os.path.isfile(u"/usr/bin/mysqldump") and os.path.isfile(
                u"/usr/bin/mysql"):
            return u"/usr/"
    else:

        # Vérifie le chemin Canon (x86)
        chemin = "C:/Program Files (x86)/Canon/Easy-WebPrint EX/"
        if os.path.isfile(chemin + "bin/mysql.exe"):
            return chemin

        # Vérifie le chemin Canon
        chemin = "C:/Program Files/Canon/Easy-WebPrint EX/"
        if os.path.isfile(chemin + "bin/mysql.exe"):
            return chemin

        # Vérifie le chemin MySQL classique
        try:
            listeFichiers1 = os.listdir(u"C:/")
            for fichier1 in listeFichiers1:

                if "Program" in fichier1:
                    listeFichiers2 = os.listdir(u"C:/%s" % fichier1)
                    for fichier2 in listeFichiers2:
                        if "MySQL" in fichier2:
                            listeFichiers3 = os.listdir(u"C:/%s/%s" %
                                                        (fichier1, fichier2))
                            listeFichiers3.sort(reverse=True)
                            for fichier3 in listeFichiers3:
                                if "MySQL Server" in fichier3:
                                    chemin = u"C:/%s/%s/%s/" % (
                                        fichier1, fichier2, fichier3)
                                    if os.path.isfile(chemin +
                                                      "bin/mysql.exe"):
                                        return chemin
        except:
            pass

    # 2- Recherche dans le fichier Config
    try:
        chemin = UTILS_Config.GetParametre("sauvegarde_cheminmysql",
                                           defaut=None)
        if chemin != None:
            if os.path.isdir(chemin):
                return chemin
    except:
        pass

    # 3- Demande le chemin à l'utilisateur
    try:
        if "linux" in sys.platform:
            message = _(
                u"Pour effectuer la sauvegarde de fichiers réseau, mysqlclient doit être installé. Sélectionnez ici le répertoire où se trouve 'mysqldump' sur votre ordinateur."
            )
        else:
            message = _(
                u"Pour effectuer la sauvegarde de fichiers réseau, Noethys \ndoit utiliser les outils de MySQL. Sélectionnez ici le répertoire qui se nomme 'MySQL Server...' sur votre ordinateur."
            )
        dlg = wx.DirDialog(None,
                           message,
                           style=wx.DD_DEFAULT_STYLE | wx.DD_DIR_MUST_EXIST)
        if dlg.ShowModal() == wx.ID_OK:
            chemin = dlg.GetPath() + u"/"
            dlg.Destroy()
        else:
            dlg.Destroy()
            return None
    except:
        pass

    try:
        if os.path.isdir(chemin + _(u"bin/")):
            UTILS_Config.SetParametre("sauvegarde_cheminmysql", chemin)
            return chemin
    except:
        pass

    return None
    def __init__(self, parent):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           name="DLG_Impression_infos_medicales",
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX
                           | wx.THICK_FRAME)
        self.parent = parent

        intro = _(
            u"Vous pouvez ici imprimer une liste au format PDF des informations médicales des individus présents sur la période de votre choix. Pour une liste standard, sélectionnez simplement une période puis cliquez sur 'Aperçu'."
        )
        titre = _(u"Impression de la liste des informations médicales")
        self.ctrl_bandeau = CTRL_Bandeau.Bandeau(
            self,
            titre=titre,
            texte=intro,
            hauteurHtml=30,
            nomImage="Images/32x32/Imprimante.png")

        # Calendrier
        self.staticbox_date_staticbox = wx.StaticBox(self, -1, _(u"Période"))
        self.ctrl_calendrier = CTRL_Grille_periode.CTRL(self)
        self.ctrl_calendrier.SetMinSize((230, 150))

        # Activités
        self.staticbox_activites_staticbox = wx.StaticBox(
            self, -1, _(u"Activités"))
        self.ctrl_activites = CTRL_Activites(self)
        self.ctrl_activites.SetMinSize((10, 50))

        # Groupes
        self.staticbox_groupes_staticbox = wx.StaticBox(
            self, -1, _(u"Groupes"))
        self.ctrl_groupes = CTRL_Groupes(self)

        # Options
        self.staticbox_options_staticbox = wx.StaticBox(
            self, -1, _(u"Options"))
        self.label_modele = wx.StaticText(self, -1, _(u"Modèle :"))
        self.ctrl_modele = wx.Choice(self,
                                     -1,
                                     choices=[
                                         _(u"Modèle par défaut"),
                                     ])
        self.ctrl_modele.Select(0)
        self.label_tri = wx.StaticText(self, -1, _(u"Tri :"))
        self.ctrl_tri = wx.Choice(self,
                                  -1,
                                  choices=["Nom",
                                           _(u"Prénom"),
                                           _(u"Age")])
        self.ctrl_tri.Select(0)
        self.ctrl_ordre = wx.Choice(self,
                                    -1,
                                    choices=["Croissant",
                                             _(u"Décroissant")])
        self.ctrl_ordre.Select(0)
        self.checkbox_lignes_vierges = wx.CheckBox(
            self, -1, _(u"Afficher des lignes vierges :"))
        self.checkbox_lignes_vierges.SetValue(True)
        self.ctrl_nbre_lignes = wx.Choice(self,
                                          -1,
                                          choices=[
                                              "1", "2", "3", "4", "5", "6",
                                              "7", "8", "9", "10", "11", "12",
                                              "13", "14", "15"
                                          ])
        self.ctrl_nbre_lignes.Select(2)
        self.checkbox_page_groupe = wx.CheckBox(
            self, -1, _(u"Insérer un saut de page après chaque groupe"))
        self.checkbox_page_groupe.SetValue(True)
        self.checkbox_nonvides = wx.CheckBox(
            self, -1, _(u"Afficher uniquement les individus avec infos"))
        self.checkbox_nonvides.SetValue(False)
        self.checkbox_age = wx.CheckBox(self, -1,
                                        _(u"Afficher l'âge des individus"))
        self.checkbox_age.SetValue(True)
        self.checkbox_photos = wx.CheckBox(self, -1,
                                           _(u"Afficher les photos :"))
        self.checkbox_photos.SetValue(False)
        self.ctrl_taille_photos = wx.Choice(self,
                                            -1,
                                            choices=[
                                                _(u"Petite taille"),
                                                _(u"Moyenne taille"),
                                                _(u"Grande taille")
                                            ])
        self.ctrl_taille_photos.SetSelection(1)

        # Mémorisation des paramètres
        self.ctrl_memoriser = wx.CheckBox(self, -1,
                                          _(u"Mémoriser les paramètres"))
        font = self.GetFont()
        font.SetPointSize(7)
        self.ctrl_memoriser.SetFont(font)
        self.ctrl_memoriser.SetValue(True)

        # Boutons
        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"Aperçu"), cheminImage="Images/32x32/Apercu.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_CHECKBOX, self.OnCheckLignesVierges,
                  self.checkbox_lignes_vierges)
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckPhotos, self.checkbox_photos)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok)

        # Récupération des paramètres dans le CONFIG
        param_tri = UTILS_Config.GetParametre("impression_infos_med_tri",
                                              defaut=0)
        self.ctrl_tri.Select(param_tri)

        param_ordre = UTILS_Config.GetParametre("impression_infos_med_ordre",
                                                defaut=0)
        self.ctrl_ordre.Select(param_ordre)

        param_lignes_vierges = UTILS_Config.GetParametre(
            "impression_infos_med_lignes_vierges", defaut=1)
        self.checkbox_lignes_vierges.SetValue(param_lignes_vierges)

        if param_lignes_vierges == 1:
            param_nbre_lignes_vierges = UTILS_Config.GetParametre(
                "impression_infos_med_nbre_lignes_vierges", defaut=2)
            self.ctrl_nbre_lignes.Select(param_nbre_lignes_vierges)

        param_page_groupe = UTILS_Config.GetParametre(
            "impression_infos_med_page_groupe", defaut=1)
        self.checkbox_page_groupe.SetValue(param_page_groupe)

        param_nonvides = UTILS_Config.GetParametre(
            "impression_infos_med_nonvides", defaut=0)
        self.checkbox_nonvides.SetValue(param_nonvides)

        param_age = UTILS_Config.GetParametre("impression_infos_med_age",
                                              defaut=1)
        self.checkbox_age.SetValue(param_age)

        param_photos = UTILS_Config.GetParametre("impression_infos_med_photos",
                                                 defaut=1)
        self.checkbox_photos.SetValue(param_photos)

        param_taille_photos = UTILS_Config.GetParametre(
            "impression_infos_med_taille_photos", defaut=1)
        self.ctrl_taille_photos.SetSelection(param_taille_photos)

        param_memoriser = UTILS_Config.GetParametre(
            "impression_infos_med_memoriser", defaut=1)
        self.ctrl_memoriser.SetValue(param_memoriser)

        # Init Contrôles
        self.OnCheckLignesVierges(None)
        self.OnCheckPhotos(None)
        self.bouton_ok.SetFocus()

        self.ctrl_calendrier.SetVisibleSelection()
        self.SetListesPeriodes(self.ctrl_calendrier.GetDatesSelections())

        self.grid_sizer_base.Fit(self)
예제 #4
0
    def __init__(self, parent):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           name="DLG_Enregistrement",
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX
                           | wx.THICK_FRAME)
        self.parent = parent
        self.derniereValidation = (None, None)

        # Bandeau
        titre = _(u"Enregistrement")
        intro = _(
            u"Vous pouvez saisir ici votre code d'enregistrement personnel afin d'activer votre abonnement Classic ou Premium. Effectuez ce paramétrage sur chacun de vos postes."
        )
        self.SetTitle(titre)
        self.ctrl_bandeau = CTRL_Bandeau.Bandeau(
            self,
            titre=titre,
            texte=intro,
            hauteurHtml=30,
            nomImage="Images/32x32/Cle.png")

        # Saisie code
        self.staticbox_code_staticbox = wx.StaticBox(
            self, -1, _(u"Code d'enregistrement"))
        self.label_identifiant = wx.StaticText(self, -1, _(u"Identifiant :"))
        self.ctrl_identifiant = wx.TextCtrl(self, -1, "")
        self.label_code = wx.StaticText(self, -1, _(u"Code :"))
        self.ctrl_code = masked.TextCtrl(self,
                                         -1,
                                         "",
                                         mask="AAAA-AAAA-AAAA-AAAA-AAAA",
                                         formatcodes="F!")
        self.ctrl_code.SetMinSize((190, -1))
        self.bouton_validite = wx.Button(self, -1,
                                         _(u"Vérifier la validité"))
        self.ctrl_image = wx.StaticBitmap(
            self, -1,
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/absenti.png"),
                      wx.BITMAP_TYPE_ANY))
        self.label_validite = wx.StaticText(self, -1,
                                            _(u"Veuillez saisir un code."))

        # HTML
        self.ctrl_html = MyHtml(self, texte=TEXTE, hauteur=30)

        # 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.OnBoutonValidite, self.bouton_validite)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonFermer, self.bouton_fermer)
        self.Bind(wx.EVT_CLOSE, self.OnClose)

        # Init contrôles
        identifiant = UTILS_Config.GetParametre("enregistrement_identifiant",
                                                defaut=None)
        code = UTILS_Config.GetParametre("enregistrement_code", defaut=None)
        if identifiant != None and code != None:
            self.ctrl_identifiant.SetValue(identifiant)
            self.ctrl_code.SetValue(code)

        self.VerifieEtat(identifiant, code)

        # Vérifie droits utilisateurs
        if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel(
                "parametrage_enregistrement", "modifier",
                afficheMessage=False) == False:
            self.ctrl_identifiant.Enable(False)
            self.ctrl_code.Enable(False)
            self.bouton_validite.Enable(False)
예제 #5
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

        # Bandeau
        intro = _(
            u"Vous pouvez ici synchroniser les données avec Nomadhys, l'application nomade pour Noethys. Choisissez une méthode de synchronisation (Serveur direct WIFI/Internet ou FTP ou Manuel) puis renseignez les paramètres. Cliquez sur le bouton 'Lire les données' pour importer les données."
        )
        titre = _(u"Synchroniser Nomadhys")
        self.SetTitle(titre)
        self.ctrl_bandeau = CTRL_Bandeau.Bandeau(
            self,
            titre=titre,
            texte=intro,
            hauteurHtml=30,
            nomImage="Images/32x32/Nomadhys.png")

        # Paramètres
        self.box_parametres = wx.StaticBox(self, -1, _(u"Paramètres"))
        self.ctrl_parametres = Notebook(self)

        # Transfert
        self.box_transfert = wx.StaticBox(self, -1, _(u"Transfert manuel"))
        self.ctrl_mode = CTRL_Mode(self)
        self.bouton_envoyer = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Envoyer"),
            cheminImage="Images/32x32/Fleche_haut.png")
        self.bouton_recevoir = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Recevoir"),
            cheminImage="Images/32x32/Fleche_bas.png")

        # Lecture
        self.box_lecture = wx.StaticBox(self, -1,
                                        _(u"Importation des données"))
        self.ctrl_fichiers = OL_Synchronisation_fichiers.ListView(
            self,
            id=-1,
            style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_SINGLE_SEL
            | wx.LC_HRULES | wx.LC_VRULES)
        self.ctrl_recherche = OL_Synchronisation_fichiers.CTRL_Outils(
            self, listview=self.ctrl_fichiers, afficherCocher=True)
        self.check_archives = wx.CheckBox(self, -1,
                                          _(u"Afficher les archives"))
        self.bouton_actualiser = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Rafraîchir la liste"),
            cheminImage="Images/32x32/Actualiser.png")
        self.bouton_lecture = wx.BitmapButton(
            self, -1,
            wx.Bitmap(
                Chemins.GetStaticPath("Images/BoutonsImages/Lire_donnees.png"),
                wx.BITMAP_TYPE_ANY))

        # Boutons
        self.bouton_aide = CTRL_Bouton_image.CTRL(
            self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_googleplay = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Télécharger Nomadhys"),
            cheminImage="Images/32x32/Googleplay.png")
        self.bouton_outils = CTRL_Bouton_image.CTRL(
            self,
            texte=_(u"Outils"),
            cheminImage="Images/32x32/Configuration.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_CHECKBOX, self.OnCheckArchives, self.check_archives)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonEnvoyer, self.bouton_envoyer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonRecevoir, self.bouton_recevoir)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonActualiser,
                  self.bouton_actualiser)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonLecture, self.bouton_lecture)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonGoogleplay,
                  self.bouton_googleplay)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonOutils, self.bouton_outils)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonFermer, self.bouton_fermer)
        self.Bind(wx.EVT_CLOSE, self.OnClose)

        # Init
        self.SuppressionArchives()

        self.ctrl_parametres.ImportationParametres()
        self.ctrl_mode.SetMode(
            UTILS_Config.GetParametre("synchro_mode_favori", defaut="ftp"))
        self.ctrl_fichiers.MAJ()

        wx.CallAfter(self.AfficheAvertissement)
import Chemins
from Utils.UTILS_Traduction import _
import wx
import CTRL_Bouton_image
import wx.lib.agw.hypertreelist as HTL
from wx.lib.agw.customtreectrl import EVT_TREE_ITEM_CHECKED
import datetime
import copy
import sys
import traceback
import decimal
import wx.lib.agw.pybusyinfo as PBI

from Utils import UTILS_Config
SYMBOLE = UTILS_Config.GetParametre("monnaie_symbole", u"¤")
MONNAIE_SINGULIER = UTILS_Config.GetParametre("monnaie_singulier", _(u"Euro"))
MONNAIE_DIVISION = UTILS_Config.GetParametre("monnaie_division", _(u"Centime"))

import GestionDB
import FonctionsPerso
from Utils import UTILS_Impression_rappel
from Dlg import DLG_Apercu_rappel
from Utils import UTILS_Rappels
from Utils import UTILS_Dates

from Dlg.DLG_Saisie_texte_rappel import MOTSCLES


class CTRL_document(wx.Choice):
    def __init__(self,
예제 #7
0
    def MAJ(self, forcerActualisation=False):
        # Recherche des données
        condition = ""
        listeFiltreGroupesActivites = None

        DB = GestionDB.DB()

        # Recherche des paramètres
        parametres = UTILS_Config.GetParametre("nbre_inscrits_parametre_activites", defaut=None)
        if parametres != None :
            code, liste = parametres.split("###")
            if liste != "" :
                listeID = []
                for ID in liste.split(";") :
                    listeID.append(int(ID))
                if code == "liste_groupes_activites" :
                    listeFiltreGroupesActivites = listeID
                    req = """SELECT IDtype_groupe_activite, IDactivite
                    FROM groupes_activites
                    WHERE IDtype_groupe_activite IN %s
                    ;""" % GestionDB.ConvertConditionChaine(listeID)
                    DB.ExecuterReq(req)
                    listeDonnees = DB.ResultatReq()
                    listeActivites = []
                    for IDtype_groupe_activite, IDactivite in listeDonnees :
                        listeActivites.append(IDactivite)
                    condition = "WHERE activites.IDactivite IN %s" % GestionDB.ConvertConditionChaine(listeActivites)

                if code == "liste_activites" :
                    condition = "WHERE activites.IDactivite IN %s" % GestionDB.ConvertConditionChaine(listeID)

        # Tri
        tri = UTILS_Config.GetParametre("nbre_inscrits_parametre_tri", 3)
        if tri == 0 :
            tri = "activites.nom"
        elif tri == 1 :
            tri = "activites.date_debut"
        elif tri == 2 :
            tri = "activites.date_fin"
        elif tri == 3 :
            tri = "activites.abrege"
        else :
            tri = "activites.nom"
        
        # Sens
        sens = UTILS_Config.GetParametre("nbre_inscrits_parametre_sens", 1)
        if sens == 0 :
            sens = ""
        else :
            sens = "DESC"
        
        # Seuil d'alerte
        self.seuil_alerte = UTILS_Config.GetParametre("nbre_inscrits_parametre_alerte", 5)

        # Regroupement par groupe d'activités
        self.regroupement_groupe_activites = UTILS_Config.GetParametre("nbre_inscrits_parametre_regroup", 0)

        # Récupération des groupes
        req = """SELECT groupes.IDgroupe, groupes.IDactivite, groupes.nom, groupes.abrege, groupes.nbre_inscrits_max,
        COUNT(inscriptions.IDinscription) as nbre_inscriptions
        FROM groupes
        LEFT JOIN activites ON activites.IDactivite = groupes.IDactivite
        LEFT JOIN inscriptions ON inscriptions.IDgroupe = groupes.IDgroupe
        %s
        GROUP BY groupes.IDgroupe
        ORDER BY groupes.ordre
        ;""" % condition
        DB.ExecuterReq(req)
        listeGroupes = DB.ResultatReq()

        dictGroupes = {}
        for IDgroupe, IDactivite, nom, abrege, nbre_inscrits_max, nbre_inscrits in listeGroupes :
            if nbre_inscrits == None : nbre_inscrits = 0
            if nom == None : nom = _(u"Sans nom !")
            if abrege == None : abrege = ""

            if nbre_inscrits_max != None :
                nbre_places_libres = nbre_inscrits_max - nbre_inscrits
            else :
                nbre_places_libres = None

            if dictGroupes.has_key(IDactivite) == False :
                dictGroupes[IDactivite] = []
            dictGroupes[IDactivite].append({"IDgroupe" : IDgroupe, "nom" : nom, "abrege" : abrege, "nbre_inscrits_max" : nbre_inscrits_max, "nbre_inscrits" : nbre_inscrits, "nbre_places_libres" : nbre_places_libres, "IDactivite" : IDactivite})

        # Récupération des activités
        activite_ouverte = UTILS_Config.GetParametre("nbre_inscrits_parametre_ouvert", 1)
        if activite_ouverte == 1 :
            if condition == "" :
                condition = "WHERE activites.date_fin>='%s'" % str(datetime.date.today())
            else :
                condition += " AND activites.date_fin>='%s'" % str(datetime.date.today())

        req = """SELECT activites.IDactivite, activites.nom, activites.abrege, activites.nbre_inscrits_max
        FROM activites
        %s
        GROUP BY activites.IDactivite
        ORDER BY %s %s
        ;""" % (condition, tri, sens)
        DB.ExecuterReq(req)
        listeActivites = DB.ResultatReq()

        listeActivitesTemp = []
        listeIDactivite = []
        for IDactivite, nom, abrege, nbre_inscrits_max in listeActivites :
            if nom == None : nom = _(u"Sans nom !")
            if abrege == None : abrege = ""

            liste_groupes = []
            if dictGroupes.has_key(IDactivite) :
                liste_groupes = dictGroupes[IDactivite]
            nbre_inscrits = 0
            liste_infos = [nom,]
            for dictGroupe in liste_groupes :
                nbre_inscrits += dictGroupe["nbre_inscrits"]
                liste_infos.append(dictGroupe["nom"])

            if nbre_inscrits_max != None :
                nbre_places_libres = nbre_inscrits_max - nbre_inscrits
            else :
                nbre_places_libres = None

            listeActivitesTemp.append({"IDactivite" : IDactivite, "nom" : nom, "abrege" : abrege, "nbre_inscrits_max" : nbre_inscrits_max, "nbre_inscrits" : nbre_inscrits, "nbre_places_libres" : nbre_places_libres, "liste_groupes" : liste_groupes, "infos" : " ".join(liste_infos)})
            listeIDactivite.append(IDactivite)

        # Pour éviter l'actualisation de l'affichage si aucune modification des données
        if self.listeActivites != listeActivitesTemp or forcerActualisation == True :
            self.listeActivites = listeActivitesTemp
        else :
            DB.Close()
            return

        # Récupération des groupes d'activités
        if self.regroupement_groupe_activites == 1 :

            req = """SELECT groupes_activites.IDtype_groupe_activite, nom, IDactivite
            FROM groupes_activites
            LEFT JOIN types_groupes_activites ON types_groupes_activites.IDtype_groupe_activite = groupes_activites.IDtype_groupe_activite
            WHERE IDactivite IN %s
            ;""" % GestionDB.ConvertConditionChaine(listeIDactivite)
            DB.ExecuterReq(req)
            listeDonnees = DB.ResultatReq()
            dictGroupeParActivite = {}
            dictGroupesActivites = {}
            for IDtype_groupe_activite, nom, IDactivite in listeDonnees :

                if not dictGroupeParActivite.has_key(IDactivite) :
                    dictGroupeParActivite[IDactivite] = []
                dictGroupeParActivite[IDactivite].append(IDtype_groupe_activite)

                if not dictGroupesActivites.has_key(IDtype_groupe_activite) :
                    dictGroupesActivites[IDtype_groupe_activite] = nom

            liste_groupes_activites = []
            for IDtype_groupe_activite, nom in dictGroupesActivites.iteritems() :
                if listeFiltreGroupesActivites == None or IDtype_groupe_activite in listeFiltreGroupesActivites :
                    liste_groupes_activites.append((nom.upper(), IDtype_groupe_activite))
            liste_groupes_activites.sort()

        else :
            liste_groupes_activites = [(None, None),]

        DB.Close()

        # MAJ du contrôle
        self.DeleteChildren(self.root)

        # Préparation pour impression
        self.dictImpression["contenu"] = []
        self.dictImpression["coloration"] = []


        for nom, IDtype_groupe_activite in liste_groupes_activites :
            if nom == None :
                niveau_parent = self.root
            else :
                niveau_regroup = self.AppendItem(self.root, nom)
                self.SetItemBackgroundColour(niveau_regroup, "#DDDDDD")
                self.dictImpression["contenu"].append([nom,])
                self.dictImpression["coloration"].append((len(self.dictImpression["contenu"])-1, "regroup"))
                niveau_parent = niveau_regroup

            for dictActivite in self.listeActivites :

                if self.filtre == None or (self.filtre.lower() in dictActivite["infos"].lower()) :

                    IDactivite = dictActivite["IDactivite"]
                    if self.regroupement_groupe_activites == 0 or (self.regroupement_groupe_activites == 1 and dictGroupeParActivite.has_key(IDactivite) and IDtype_groupe_activite in dictGroupeParActivite[IDactivite]) :

                        # Ligne Activité
                        label = u" " + dictActivite["nom"]
                        niveau_activite = self.AppendItem(niveau_parent, label)
                        font = self.GetFont()
                        font.SetWeight(wx.BOLD)
                        self.SetItemFont(niveau_activite, font)
                        self.SetPyData(niveau_activite, dictActivite)

                        # Abrégé
                        self.SetItemText(niveau_activite, dictActivite["abrege"], 1)

                        # Valeurs
                        nbre_inscrits = dictActivite["nbre_inscrits"]
                        if nbre_inscrits == None :
                            texte_inscrits = ""
                        else :
                            texte_inscrits = str(nbre_inscrits)
                        self.SetItemText(niveau_activite, texte_inscrits, 2)

                        nbre_inscrits_max = dictActivite["nbre_inscrits_max"]
                        if nbre_inscrits_max == None :
                            texte_inscrits_max = ""
                        else :
                            texte_inscrits_max = str(nbre_inscrits_max)
                        self.SetItemText(niveau_activite, texte_inscrits_max, 3)

                        nbre_places_libres = dictActivite["nbre_places_libres"]
                        if nbre_places_libres == None :
                            texte_places_libres = ""
                        else :
                            texte_places_libres = str(nbre_places_libres)
                        self.SetItemText(niveau_activite, texte_places_libres, 4)

                        # Couleur de la ligne
                        couleur_fond = self.GetCouleurLigne(nbre_places_libres)
                        if couleur_fond != None :
                            self.SetItemBackgroundColour(niveau_activite, couleur_fond)

                        # Mémorisation ligne activité pour impression
                        self.dictImpression["contenu"].append([label, dictActivite["abrege"], texte_inscrits, texte_inscrits_max, texte_places_libres])
                        self.dictImpression["coloration"].append((len(self.dictImpression["contenu"])-1, "activite"))

                        # Ligne Groupe
                        for dictGroupe in dictActivite["liste_groupes"] :

                            label = u" " + dictGroupe["nom"]
                            niveau_groupe = self.AppendItem(niveau_activite, label)
                            self.SetPyData(niveau_groupe, dictGroupe)

                            # Abrégé
                            self.SetItemText(niveau_groupe, dictGroupe["abrege"], 1)

                            nbre_inscrits = dictGroupe["nbre_inscrits"]
                            if nbre_inscrits == None :
                                texte_inscrits = ""
                            else :
                                texte_inscrits = str(nbre_inscrits)
                            self.SetItemText(niveau_groupe, texte_inscrits, 2)

                            nbre_inscrits_max = dictGroupe["nbre_inscrits_max"]
                            if nbre_inscrits_max == None :
                                texte_inscrits_max = ""
                            else :
                                texte_inscrits_max = str(nbre_inscrits_max)
                            self.SetItemText(niveau_groupe, texte_inscrits_max, 3)

                            nbre_places_libres = dictGroupe["nbre_places_libres"]
                            if nbre_places_libres == None :
                                texte_places_libres = ""
                            else :
                                texte_places_libres = str(nbre_places_libres)
                            self.SetItemText(niveau_groupe, texte_places_libres, 4)

                            # Couleur de la ligne
                            couleur_fond = self.GetCouleurLigne(nbre_places_libres)
                            if couleur_fond != None :
                                self.SetItemBackgroundColour(niveau_groupe, couleur_fond)

                            # Mémorisation ligne activité pour impression
                            self.dictImpression["contenu"].append([u"     %s" % label, dictGroupe["abrege"], texte_inscrits, texte_inscrits_max, texte_places_libres])


        self.ExpandAllChildren(self.root)
예제 #8
0
    def __init__(self, parent):
        wx.Dialog.__init__(self, parent, -1, name="DLG_Gestionnaire_conso", style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.THICK_FRAME)
        self.parent = parent

        self._mgr = aui.AuiManager()
        self._mgr.SetManagedWindow(self)
        
        # Détermine la taille de la fenêtre
        self.SetMinSize((700, 600))
        taille_fenetre = UTILS_Config.GetParametre("taille_fenetre_tableau_presences")
        if taille_fenetre == None :
            self.SetSize((900, 600))
        if taille_fenetre == (0, 0) :
            self.Maximize(True)
        else:
            self.SetSize(taille_fenetre)
        self.CenterOnScreen()

        # Récupère les perspectives
        cfg = UTILS_Config.FichierConfig()
        self.userConfig = cfg.GetDictConfig()
        if self.userConfig.has_key("gestionnaire_perspectives") == True :
            self.perspectives = self.userConfig["gestionnaire_perspectives"]
        else:
            self.perspectives = []
        if self.userConfig.has_key("gestionnaire_perspective_active") == True :
            self.perspective_active = self.userConfig["gestionnaire_perspective_active"]
        else:
            self.perspective_active = None

        # Création du notebook
        self.panel_grille = PanelGrille(self)
        self.dictActivites = self.panel_grille.grille.dictActivites
        self.dictIndividus = self.panel_grille.grille.dictIndividus
        self.dictGroupes = self.panel_grille.grille.dictGroupes
        self.listeSelectionIndividus = self.panel_grille.grille.listeSelectionIndividus
                        
        # Création des panels amovibles
        self.panel_commandes = Commandes(self)
        self._mgr.AddPane(self.panel_commandes, aui.AuiPaneInfo().
                          Name("commandes").Caption(_(u"Commandes")).
                          Bottom().Layer(0).Position(1).CaptionVisible(False).CloseButton(False).MaximizeButton(False).MinSize((-1, 50)))

        self.panel_totaux = CTRL_Grille_totaux.CTRL(self, grille=self.panel_grille.grille)
        self._mgr.AddPane(self.panel_totaux, aui.AuiPaneInfo().
                          Name("totaux").Caption(_(u"Totaux")).
                          Bottom().Layer(0).Position(0).Row(1).CloseButton(False).MaximizeButton(False).MinSize((160, 100)))

        self.panel_calendrier = CTRL_Grille_calendrier.CTRL(self)
        self._mgr.AddPane(self.panel_calendrier, aui.AuiPaneInfo().
                          Name("calendrier").Caption(_(u"Sélection de la date")).
                          Left().Layer(1).BestSize(wx.Size(195, 180)).Position(1).CloseButton(False).Fixed().MaximizeButton(False))
                                
        self.panel_activites = CTRL_Grille_activite3.CTRL(self)        
        self._mgr.AddPane(self.panel_activites, aui.AuiPaneInfo().
                          Name("activites").Caption(_(u"Sélection des activités")).
                          Left().Layer(1).Position(1).CloseButton(False).MaximizeButton(False).BestSize(wx.Size(-1,50)))
        pi = self._mgr.GetPane("activites")
        pi.dock_proportion = 100000 # Proportion
        
        self.panel_legende = OL_Legende_grille.ListView(self, id=-1, name="OL_legende", style=wx.LC_REPORT|wx.LC_NO_HEADER | wx.SUNKEN_BORDER|wx.LC_SINGLE_SEL)
        self.panel_legende.SetSize((50, 50))
        self._mgr.AddPane(self.panel_legende, aui.AuiPaneInfo().
                          Name("legende").Caption(_(u"Légende")).
                          Left().Layer(1).Position(2).CloseButton(False).MaximizeButton(False).MinSize((160, 100)).MaxSize((-1, 120)) )

        self.panel_raccourcis = OL_Raccourcis_grille.ListView(self, id=-1, name="OL_raccourcis", style=wx.LC_REPORT|wx.LC_NO_HEADER | wx.SUNKEN_BORDER|wx.LC_SINGLE_SEL)
        self.panel_raccourcis.SetSize((50, 50))
        self._mgr.AddPane(self.panel_raccourcis, aui.AuiPaneInfo().
                          Name("raccourcis").Caption(_(u"Touches raccourcis")).
                          Left().Layer(1).Position(3).CloseButton(False).MaximizeButton(False).MinSize((160, 100)).MaxSize((-1, 120)) )
        self._mgr.GetPane("raccourcis").dock_proportion = 60000

        self.panel_etiquettes = CTRL_Etiquettes.CTRL(self, activeMenu=False)
        self._mgr.AddPane(self.panel_etiquettes, aui.AuiPaneInfo().
                          Name("etiquettes").Caption(_(u"Etiquettes")).
                          Right().Layer(0).Position(0).CloseButton(False).BestSize(wx.Size(275, 100)).MaximizeButton(False).MinSize((275, 100)))    
        self._mgr.GetPane("etiquettes").Hide()

        self.panel_forfaits = CTRL_Grille_forfaits.CTRL(self, grille=self.panel_grille.grille)
        self._mgr.AddPane(self.panel_forfaits, aui.AuiPaneInfo().
                          Name("forfaits").Caption(_(u"Forfaits crédits")).
                          Right().Layer(0).Position(1).BestSize(wx.Size(275,140)).Position(4).CloseButton(False).MaximizeButton(False).MinSize((275, 100)))
        self._mgr.GetPane("forfaits").Hide()
        
        # Création du panel central
        self._mgr.AddPane(self.panel_grille, aui.AuiPaneInfo().Name("grille").
                          CenterPane())
        self._mgr.GetPane("grille").Show()     
        
        # Sauvegarde de la perspective par défaut
        self.perspective_defaut = self._mgr.SavePerspective()

        # Récupération de la perspective chargée
        if self.perspective_active != None :
            self._mgr.LoadPerspective(self.perspectives[self.perspective_active]["perspective"])
        else:
            self._mgr.LoadPerspective(self.perspective_defaut)
        
        # Affichage du panneau du panneau Forfait Credits
        if self.panel_grille.grille.tarifsForfaitsCreditsPresents == True :
            self._mgr.GetPane("forfaits").Show()
        else:
            self._mgr.GetPane("forfaits").Hide()

        # Affichage du panneau du panneau Etiquettes
        if self.panel_grille.grille.afficherListeEtiquettes == True :
            self._mgr.GetPane("etiquettes").Show()
        else:
            self._mgr.GetPane("etiquettes").Hide()

        self._mgr.Update()
        
        self.SetTitle(_(u"Gestionnaire des consommations"))
        
        self.Bind(wx.EVT_CLOSE, self.OnClose)
                
        # Initialisation des contrôles
        date = self.panel_calendrier.GetDate()
##        self.SetDate(date)
        
        # Init
        self.panel_activites.SetCocherParDefaut(UTILS_Config.GetParametre("gestionnaire_conso_cocher_activites", defaut=True))

        # Affichage du panneau du panneau Forfait Credits
##        if self.panel_grille.grille.tarifsForfaitsCreditsPresents == True :
##            self._mgr.GetPane("forfaits").Show()
##        else:
##            self._mgr.GetPane("forfaits").Hide()
##        self._mgr.Update()

        # Contre le bug de maximize
        wx.CallAfter(self._mgr.Update)
예제 #9
0
    def MAJ(self, forcerActualisation=False):
        condition = ""

        DB = GestionDB.DB()

        # Recherche des paramètres
        parametres = UTILS_Config.GetParametre(
            "nbre_inscrits_parametre_activites", defaut=None)
        if parametres != None:
            code, liste = parametres.split("###")
            if liste != "":
                listeID = []
                for ID in liste.split(";"):
                    listeID.append(int(ID))
                if code == "liste_groupes_activites":
                    req = """SELECT IDtype_groupe_activite, IDactivite
                    FROM groupes_activites
                    WHERE IDtype_groupe_activite IN %s
                    ;""" % GestionDB.ConvertConditionChaine(listeID)
                    DB.ExecuterReq(req)
                    listeDonnees = DB.ResultatReq()
                    listeActivites = []
                    for IDtype_groupe_activite, IDactivite in listeDonnees:
                        listeActivites.append(IDactivite)
                    condition = "WHERE activites.IDactivite IN %s" % GestionDB.ConvertConditionChaine(
                        listeActivites)

                if code == "liste_activites":
                    condition = "WHERE activites.IDactivite IN %s" % GestionDB.ConvertConditionChaine(
                        listeID)

        # Tri
        tri = UTILS_Config.GetParametre("nbre_inscrits_parametre_tri", 3)
        if tri == 0:
            tri = "activites.nom"
        elif tri == 1:
            tri = "activites.date_debut"
        elif tri == 2:
            tri = "activites.date_fin"
        else:
            tri = "activites.nom"

        # Sens
        sens = UTILS_Config.GetParametre("nbre_inscrits_parametre_sens", 1)
        if sens == 0:
            sens = ""
        else:
            sens = "DESC"

        # Seuil d'alerte
        self.seuil_alerte = UTILS_Config.GetParametre(
            "nbre_inscrits_parametre_alerte", 5)

        # Récupération des groupes
        req = """SELECT groupes.IDgroupe, groupes.IDactivite, groupes.nom, groupes.nbre_inscrits_max,
        COUNT(inscriptions.IDinscription) as nbre_inscriptions
        FROM groupes
        LEFT JOIN activites ON activites.IDactivite = groupes.IDactivite
        LEFT JOIN inscriptions ON inscriptions.IDgroupe = groupes.IDgroupe
        %s
        GROUP BY groupes.IDgroupe
        ORDER BY groupes.ordre
        ;""" % condition
        DB.ExecuterReq(req)
        listeGroupes = DB.ResultatReq()

        dictGroupes = {}
        for IDgroupe, IDactivite, nom, nbre_inscrits_max, nbre_inscrits in listeGroupes:
            if nbre_inscrits_max == None: nbre_inscrits_max = 0
            if nbre_inscrits == None: nbre_inscrits = 0
            if nom == None: nom = _(u"Sans nom !")

            if dictGroupes.has_key(IDactivite) == False:
                dictGroupes[IDactivite] = []
            dictGroupes[IDactivite].append({
                "IDgroupe": IDgroupe,
                "nom": nom,
                "nbre_inscrits_max": nbre_inscrits_max,
                "nbre_inscrits": nbre_inscrits,
                "IDactivite": IDactivite
            })

        # Récupération des activités
        activite_ouverte = UTILS_Config.GetParametre(
            "nbre_inscrits_parametre_ouvert", 1)
        if activite_ouverte == 1:
            if condition == "":
                condition = "WHERE activites.date_fin>='%s'" % str(
                    datetime.date.today())
            else:
                condition += " AND activites.date_fin>='%s'" % str(
                    datetime.date.today())

        req = """SELECT activites.IDactivite, activites.nom, activites.nbre_inscrits_max
        FROM activites
        %s
        GROUP BY activites.IDactivite
        ;""" % condition
        DB.ExecuterReq(req)
        listeActivites = DB.ResultatReq()

        DB.Close()

        listeActivitesTemp = []
        for IDactivite, nom, nbre_inscrits_max in listeActivites:
            if nbre_inscrits_max == None: nbre_inscrits_max = 0
            if nom == None: nom = _(u"Sans nom !")

            liste_groupes = []
            if dictGroupes.has_key(IDactivite):
                liste_groupes = dictGroupes[IDactivite]
            nbre_inscrits = 0
            liste_infos = [
                nom,
            ]
            for dictGroupe in liste_groupes:
                nbre_inscrits += dictGroupe["nbre_inscrits"]
                liste_infos.append(dictGroupe["nom"])

            listeActivitesTemp.append({
                "IDactivite": IDactivite,
                "nom": nom,
                "nbre_inscrits_max": nbre_inscrits_max,
                "nbre_inscrits": nbre_inscrits,
                "liste_groupes": liste_groupes,
                "infos": " ".join(liste_infos)
            })

        # Pour éviter l'actualisation de l'affichage si aucune modification des données
        if self.listeActivites != listeActivitesTemp or forcerActualisation == True:
            self.listeActivites = listeActivitesTemp
        else:
            return

        # MAJ du contrôle
        self.Freeze()
        self.DeleteAllItems()

        self.dictRenderers = {}
        index = 0
        for dictActivite in self.listeActivites:

            if self.filtre == None or (self.filtre.lower()
                                       in dictActivite["infos"].lower()):

                couleur_fond = UTILS_Interface.GetValeur(
                    "couleur_tres_claire", wx.Colour(214, 250, 199))

                # Colonne Activité
                label = u" " + dictActivite["nom"]
                self.InsertStringItem(index, label)
                self.SetItemPyData(index, dictActivite)
                self.SetItemBackgroundColour(index, couleur_fond)

                item = self.GetItem(index, 0)
                font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
                font.SetWeight(wx.BOLD)
                item.SetFont(font)
                self.SetItem(item)

                # Colonne Gauge
                renderer = Renderer_gauge(self)
                renderer.SetValeurs(
                    mode="activite",
                    couleur_fond=couleur_fond,
                    nbre_inscrits=dictActivite["nbre_inscrits"],
                    nbre_inscrits_max=dictActivite["nbre_inscrits_max"])
                self.dictRenderers[index] = renderer
                self.SetItemCustomRenderer(index, 1, renderer)

                index += 1

                for dictGroupe in dictActivite["liste_groupes"]:

                    label = u" " + dictGroupe["nom"]
                    self.InsertStringItem(index, label)
                    self.SetItemPyData(index, dictGroupe)

                    # Colonne Gauge
                    renderer = Renderer_gauge(self)
                    renderer.SetValeurs(
                        mode="groupe",
                        nbre_inscrits=dictGroupe["nbre_inscrits"],
                        nbre_inscrits_max=dictGroupe["nbre_inscrits_max"])
                    self.dictRenderers[index] = renderer
                    self.SetItemCustomRenderer(index, 1, renderer)

                    index += 1

        # Ajuste la taille des colonnes
        self.SetColumnWidth(0, wx.LIST_AUTOSIZE)
        self.SetColumnWidth(1, ULC.ULC_AUTOSIZE_FILL)

        # Actualiser l'affichage pour éviter bug de positionnement
        try:
            self.DoLayout()
        except:
            pass

        self.Thaw()
예제 #10
0
    def InitObjectListView(self):
        # Couleur en alternance des lignes
        self.oddRowsBackColor = UTILS_Interface.GetValeur(
            "couleur_tres_claire", wx.Colour(240, 251, 237))
        self.evenRowsBackColor = wx.Colour(255, 255, 255)
        self.useExpansionColumn = True

        # Règle la taille des images
        self.afficheImages = UTILS_Config.GetParametre(
            "depots_afficher_images", defaut=True)
        if self.afficheImages == True:
            taille = self.tailleImagesMaxi
        else:
            taille = self.tailleImagesMini

        # Image list
        dictImages = {"standard": {}, "modes": {}, "emetteurs": {}}
        imageList = wx.ImageList(taille[0], taille[1])

        # Images standard
        dictImages["standard"]["vert"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(
                    Chemins.GetStaticPath("Images/16x16/Ventilation_vert.png"),
                    wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["orange"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(
                    Chemins.GetStaticPath(
                        "Images/16x16/Ventilation_orange.png"),
                    wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["rouge"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(
                    Chemins.GetStaticPath(
                        "Images/16x16/Ventilation_rouge.png"),
                    wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["ok"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ok.png"),
                          wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["erreur"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Interdit.png"),
                          wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["attente"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Attente.png"),
                          wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["avis_depot_oui"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Emails_exp.png"),
                          wx.BITMAP_TYPE_PNG), taille))
        dictImages["standard"]["avis_depot_non"] = imageList.Add(
            self.ConvertTailleImage(
                wx.Bitmap(
                    Chemins.GetStaticPath("Images/16x16/Emails_exp_gris.png"),
                    wx.BITMAP_TYPE_PNG), taille))

        # Images Modes
        if self.afficheImages == True:

            DB = GestionDB.DB()
            req = """SELECT modes_reglements.IDmode, modes_reglements.image FROM modes_reglements"""
            DB.ExecuterReq(req)
            listeModes = DB.ResultatReq()
            for IDmode, buffer in listeModes:
                bmp = self.GetImagefromBuffer(buffer, taille)
                dictImages["modes"][IDmode] = imageList.Add(bmp)

            # Images Emetteurs
            req = """SELECT emetteurs.IDemetteur, emetteurs.image FROM emetteurs"""
            DB.ExecuterReq(req)
            listeEmetteurs = DB.ResultatReq()
            for IDemetteur, buffer in listeEmetteurs:
                bmp = self.GetImagefromBuffer(buffer, taille)
                dictImages["emetteurs"][IDemetteur] = imageList.Add(bmp)

            DB.Close()

        self.SetImageLists(imageList, imageList)

        # Flèches tri
        bmp_haut = self.ConvertTailleImage(
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Fleche_haut_2.png"),
                      wx.BITMAP_TYPE_PNG), taille)
        bmp_bas = self.ConvertTailleImage(
            wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Fleche_bas_2.png"),
                      wx.BITMAP_TYPE_PNG), taille)
        self.RegisterSortIndicators(bmp_haut, bmp_bas)

        def GetImageMode(track):
            if dictImages["modes"].has_key(track.IDmode):
                return dictImages["modes"][track.IDmode]
            else:
                return None

        def GetImageEmetteur(track):
            if dictImages["emetteurs"].has_key(track.IDemetteur):
                return dictImages["emetteurs"][track.IDemetteur]
            else:
                return None

        def GetImageVentilation(track):
            if track.montant_ventilation == None:
                return dictImages["standard"]["rouge"]
            resteAVentiler = decimal.Decimal(str(
                track.montant)) - decimal.Decimal(
                    str(track.montant_ventilation))
            if resteAVentiler == decimal.Decimal(str("0.0")):
                return dictImages["standard"]["vert"]
            if resteAVentiler > decimal.Decimal(str("0.0")):
                return dictImages["standard"]["orange"]
            if resteAVentiler < decimal.Decimal(str("0.0")):
                return dictImages["standard"]["rouge"]

        def GetImageDepot(track):
            if track.IDdepot == None:
                if track.encaissement_attente == 1:
                    return dictImages["standard"]["attente"]
                else:
                    return dictImages["standard"]["erreur"]
            else:
                return dictImages["standard"]["ok"]

        def GetImageDiffere(track):
            if track.date_differe == None:
                return None
            if track.date_differe <= datetime.date.today():
                return dictImages["standard"]["ok"]
            else:
                return dictImages["standard"]["erreur"]

        def GetImageAttente(track):
            if track.encaissement_attente == True:
                return dictImages["standard"]["attente"]
            return None

        def GetImageAvisDepot(track):
            if track.avis_depot != None:
                return dictImages["standard"]["avis_depot_oui"]
            if track.email_depots != None:
                return dictImages["standard"]["avis_depot_non"]
            return None

        def FormateDateLong(dateDD):
            return DateComplete(dateDD)

        def FormateDateCourt(dateDD):
            if dateDD == None:
                return ""
            else:
                return DateEngFr(str(dateDD))

        def FormateMontant(montant):
            if montant == None: return u""
            return u"%.2f %s" % (montant, SYMBOLE)

        def FormateAttente(attente):
            if attente == True:
                return _(u"Attente !")
            return ""

        def rowFormatter(listItem, track):
            # Si Observations
            if track.observations != "":
                listItem.SetTextColour((0, 102, 205))
            # Si en attente
            if track.encaissement_attente == True:
                listItem.SetTextColour((255, 0, 0))
            # Si date différé est supérieure à la date d'aujourd'hui
            if track.date_differe != None:
                if track.date_differe > datetime.date.today():
                    listItem.SetTextColour((255, 0, 0))

        liste_Colonnes = [
            ColumnDefn(_(u"ID"), "left", 0, "IDreglement",
                       typeDonnee="entier"),
            ColumnDefn(_(u"Date"),
                       'left',
                       80,
                       "date",
                       typeDonnee="date",
                       stringConverter=FormateDateCourt),
            ColumnDefn(_(u"Mode"),
                       'left',
                       120,
                       "nom_mode",
                       typeDonnee="texte",
                       imageGetter=GetImageMode),
            ColumnDefn(_(u"Emetteur"),
                       'left',
                       145,
                       "nom_emetteur",
                       typeDonnee="texte",
                       imageGetter=GetImageEmetteur),
            ColumnDefn(_(u"Numéro"),
                       'left',
                       60,
                       "numero_piece",
                       typeDonnee="texte"),
            ColumnDefn(_(u"Famille"),
                       'left',
                       160,
                       "nomTitulaires",
                       typeDonnee="texte"),
            ColumnDefn(_(u"Payeur"),
                       'left',
                       160,
                       "nom_payeur",
                       typeDonnee="texte"),
            ColumnDefn(_(u"Montant"),
                       'right',
                       80,
                       "montant",
                       typeDonnee="montant",
                       stringConverter=FormateMontant),
            ColumnDefn(_(u"Avis"),
                       'left',
                       110,
                       "avis_depot",
                       typeDonnee="date",
                       stringConverter=FormateDateCourt,
                       imageGetter=GetImageAvisDepot),
            ColumnDefn(_(u"Compte"),
                       'left',
                       100,
                       "nom_compte",
                       typeDonnee="texte"),
            ColumnDefn(_(u"Différé"),
                       'left',
                       85,
                       "date_differe",
                       typeDonnee="date",
                       stringConverter=FormateDateCourt
                       ),  #, imageGetter=GetImageDiffere),
            ColumnDefn(_(u"Attente"),
                       'left',
                       65,
                       "encaissement_attente",
                       typeDonnee="texte",
                       stringConverter=FormateAttente
                       ),  #, imageGetter=GetImageAttente),
            ColumnDefn(_(u"Quittancier"),
                       'left',
                       75,
                       "numero_quittancier",
                       typeDonnee="texte"),
            ColumnDefn(_(u"Observations"),
                       'left',
                       200,
                       "observations",
                       typeDonnee="texte"),
        ]

        self.rowFormatter = rowFormatter
        self.SetColumns(liste_Colonnes)
        if self.inclus == True:
            self.SetEmptyListMsg(_(u"Aucun règlement dans ce dépôt"))
        else:
            self.SetEmptyListMsg(_(u"Aucun règlement disponible"))
        self.SetEmptyListMsgFont(wx.FFont(11, wx.DEFAULT, False, "Tekton"))
        ##        self.SetSortColumn(self.columns[self.numColonneTri])
        self.SortBy(self.numColonneTri, ascending=self.ordreAscendant)
        self.SetObjects(self.donnees)