def GetMatriceAnterieurs(dlg): dicBandeau = {'titre': "Rappel d'un anterieur existant", 'texte': "les mots clés du champ en bas permettent de filtrer d'autres lignes et d'affiner la recherche", 'hauteur': 15, 'nomImage': "xpy/Images/32x32/Zoom_plus.png", 'bgColor':(220, 250, 220),} # Composition de la matrice de l'OLV anterieurs, retourne un dictionnaire lstChamps = ['date', 'fournisseur', 'IDanalytique', 'COUNT(IDinventaire)'] lstNomsColonnes = ['date', 'fournisseur', 'analytique', 'nbLignes'] lstTypes = [ 'DATE', 'VARCHAR(32)', 'VARCHAR(32)', 'INT'] lstCodesColonnes = [xformat.NoAccents(x).lower() for x in lstNomsColonnes] lstValDefColonnes = xformat.ValeursDefaut(lstNomsColonnes, lstTypes) lstLargeurColonnes = [100,180,180,200] lstColonnes = xformat.DefColonnes(lstNomsColonnes, lstCodesColonnes, lstValDefColonnes, lstLargeurColonnes) return { 'lstSaisons': dlg.lstSaisons, 'lstColonnes': lstColonnes, 'lstChamps': lstChamps, 'listeNomsColonnes': lstNomsColonnes, 'listeCodesColonnes': lstCodesColonnes, 'getDonnees': nust.SqlInvAnte, 'dicBandeau': dicBandeau, 'sortColumnIndex': 2, 'sensTri': False, 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", 'size': (650, 400)}
def InitOlv(self): self.listview = FastObjectListView(self, style=wx.LC_REPORT) self.listview.SetToolTip(u"Double Cliquez pour choisir") # Couleur en alternance des lignes self.listview.oddRowsBackColor = "#F0FBED" self.listview.evenRowsBackColor = wx.Colour(255, 255, 255) self.listview.useExpansionColumn = True self.listview.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnDblClicOk) lstColumns = [] self.lstCodes = [xformat.NoAccents(x) for x in self.lstColonnes] for ix in range(self.nbColonnes): width = self.lstWcol[ix] label = self.lstColonnes[ix] code = self.lstCodes[ix] setter = self.lstSetters[ix] lstColumns.append( ColumnDefn(label, "left", width, code, isSpaceFilling=True)) self.listview.SetColumns(lstColumns) self.listview.SetSortColumn(self.columnSort) if self.withCheck: self.listview.CreateCheckStateColumn() self.tracks = [Track(don, self.lstCodes) for don in self.lstDonnees] self.listview.SetObjects(self.tracks) self.listview.Refresh()
def GetDicOlvFam(): # appel des données à afficher lstChamps = [ "individus.IDindividu", "individus.nom", "individus.prenom", "familles.adresse_individu", "rattachements.titulaire", "rattachements.IDcategorie", "individus.date_naiss", "individus.tel_domicile", "individus.tel_mobile", "individus.mail", "individus.travail_mail", "individus.refus_pub", "individus.refus_mel", "individus.travail_tel" ] lstNomsColonnes = [ "IDind", "nom", "prénom", "catégorie", "né le", "tel domicile", "tel mobile", "mail1", "mail2", "noPub", "noMel", "tel travail" ] lstTypes = [ "INTEGER", "VARCHAR(32)", "VARCHAR(32)", "VARCHAR(7)", "DATE", "VARCHAR(10)", "VARCHAR(10)", "VARCHAR(32)", "VARCHAR(32)", "BOOL", "BOOL", "VARCHAR(10)" ] lstLargeurColonnes = [0, -1, -1, 50, 80, 90, 90, 170, 120, 50, 50, 90] lstCodesColonnes = [xformat.NoAccents(x) for x in lstNomsColonnes] lstValDefColonnes = xformat.ValeursDefaut(lstNomsColonnes, lstTypes) # matrice OLV lstColonnes = xformat.DefColonnes(lstNomsColonnes, lstCodesColonnes, lstValDefColonnes, lstLargeurColonnes) # personnalise les colonnes : fixe les éditables, pose minwidth for col in lstColonnes[4:]: col.isEditable = True for col in lstColonnes[:4]: col.isEditable = False for col in lstColonnes: if col.width == -1: col.minimumWidth = 60 dicOlv = { 'lstColonnes': lstColonnes, 'lstChamps': lstChamps, 'checkColonne': False, 'getBtnActions': None, 'sortColumnIndex': 2, 'sortAscending': True, 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", 'recherche': False, 'autoAddRow': False, 'editMode': True, } return dicOlv
def GetMatriceDepots(): dicBandeau = { 'titre': "Rappel d'un depot existant", 'texte': "les mots clés du champ en bas permettent de filtrer d'autres lignes et d'affiner la recherche", 'hauteur': 15, 'nomImage': "xpy/Images/32x32/Matth.png" } # Composition de la matrice de l'OLV depots, retourne un dictionnaire lstChamps = [ '0', 'IDdepot', 'depots.date', 'depots.nom', 'comptes_bancaires.nom', 'observations' ] lstNomsColonnes = [ '0', 'numéro', 'date', 'nomDépôt', 'banque', 'nbre', 'total', 'détail', 'observations' ] lstTypes = [ 'INTEGER', 'INTEGER', 'DATE', 'VARCHAR(80)', 'VARCHAR(130)', 'VARCHAR(10)', 'VARCHAR(10)', 'VARCHAR(170)', 'VARCHAR(170)' ] lstCodesColonnes = [xformat.NoAccents(x).lower() for x in lstNomsColonnes] lstValDefColonnes = xformat.ValeursDefaut(lstNomsColonnes, lstTypes) lstLargeurColonnes = xformat.LargeursDefaut(lstNomsColonnes, lstTypes) lstColonnes = xformat.DefColonnes(lstNomsColonnes, lstCodesColonnes, lstValDefColonnes, lstLargeurColonnes) return { 'lstColonnes': lstColonnes, 'lstChamps': lstChamps, 'listeNomsColonnes': lstNomsColonnes, 'listeCodesColonnes': lstCodesColonnes, 'getDonnees': GetDepots, 'dicBandeau': dicBandeau, 'sortColumnIndex': 2, 'sensTri': False, 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", 'size': (900, 400) }
def GetMatriceFamilles(): dicBandeau = { 'titre': "Recherche d'une famille", 'texte': "les mots clés du champ en bas permettent de filtrer d'autres lignes et d'affiner la recherche", 'hauteur': 15, 'nomImage': "xpy/Images/32x32/Matth.png" } # Composition de la matrice de l'OLV familles, retourne un dictionnaire lstChamps = [ '0', 'familles.IDfamille', 'familles.adresse_intitule', 'individus_1.cp_resid', 'individus_1.ville_resid', 'individus.nom', 'individus.prenom' ] lstNomsColonnes = [ "0", "IDfam", "désignation", "cp", "ville", "noms", "prénoms" ] lstTypes = [ 'INTEGER', 'INTEGER', 'VARCHAR(80)', 'VARCHAR(10)', 'VARCHAR(100)', 'VARCHAR(90)', 'VARCHAR(120)' ] lstCodesColonnes = [xformat.NoAccents(x) for x in lstNomsColonnes] lstValDefColonnes = xformat.ValeursDefaut(lstNomsColonnes, lstTypes) lstLargeurColonnes = xformat.LargeursDefaut(lstNomsColonnes, lstTypes) lstColonnes = xformat.DefColonnes(lstNomsColonnes, lstCodesColonnes, lstValDefColonnes, lstLargeurColonnes) return { 'lstColonnes': lstColonnes, 'lstChamps': lstChamps, 'listeNomsColonnes': lstNomsColonnes, 'listeCodesColonnes': lstCodesColonnes, 'getDonnees': GetFamilles, 'size': (800, 400), 'dicBandeau': dicBandeau, 'sortColumnIndex': 2, 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", }
def GetDicOlv(self, table): nature = None matrice = None if table in ('fournisseurs', 'clients', 'generaux', 'cpt3car'): nature = 'compte' matrice = MATRICE_COMPTES elif table in ('journaux', 'journOD'): nature = 'journal' matrice = MATRICE_JOURNAUX else: raise Exception( "la table '%s' n'est pas trouvée dans UTILS_Compta" % table) dicBandeau = { 'titre': "Choix d'un %s" % nature, 'texte': "les mots clés du champ en bas permettent de filtrer d'autres lignes et d'affiner la recherche", 'hauteur': 15, 'nomImage': "xpy/Images/32x32/Matth.png" } # Composition de la matrice de l'OLV familles, retourne un dictionnaire lstChamps = matrice['lstChamps'] lstNomsColonnes = matrice['lstNomsColonnes'] lstCodesColonnes = [xformat.NoAccents(x) for x in lstNomsColonnes] lstValDefColonnes = matrice['lstValDefColonnes'] lstLargeurColonnes = matrice['lstLargeurColonnes'] lstColonnes = xformat.DefColonnes(lstNomsColonnes, lstCodesColonnes, lstValDefColonnes, lstLargeurColonnes) return { 'lstColonnes': lstColonnes, 'lstChamps': lstChamps, 'listeNomsColonnes': lstNomsColonnes, 'listeCodesColonnes': lstCodesColonnes, 'getDonnees': self.GetDonnees, 'dicBandeau': dicBandeau, 'sortColumnIndex': 2, 'size': (800, 600), 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", }
def dicOlvFamilles(): # appel des données à afficher lstChamps = [ "0", "familles.IDfamille", "individus.IDindividu", "familles.adresse_intitule", "individus.nom", "individus.prenom", "individus.adresse_auto", "individus.rue_resid", "individus.cp_resid", "individus.ville_resid" ] lstNomsColonnes = [ "0", "famille", "individu", "intitule famille", "nom corresp.", "prenomcorresp.", "chez", "rue", "cp", "ville" ] lstTypes = [ "INTEGER", "INTEGER", "INTEGER", "VARCHAR(100)", "VARCHAR(100)", "VARCHAR(100)", "INTEGER", "VARCHAR(100)", "VARCHAR(11)", "VARCHAR(80)" ] lstCodesColonnes = [xformat.NoAccents(x) for x in lstNomsColonnes] lstValDefColonnes = xformat.ValeursDefaut(lstNomsColonnes, lstTypes) lstLargeurColonnes = xformat.LargeursDefaut(lstNomsColonnes, lstTypes) # matrice OLV lstColonnes = xformat.DefColonnes(lstNomsColonnes, lstCodesColonnes, lstValDefColonnes, lstLargeurColonnes) dicOlv = { 'lstColonnes': lstColonnes, 'lstChamps': lstChamps, 'checkColonne': False, 'sortColumnIndex': 4, 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", 'dictColFooter': { "nom": { "mode": "nombre", "alignement": wx.ALIGN_CENTER }, } } return dicOlv
def GetMatriceAnalytiques(self,axe,lstChamps,lstNomsCol,lstTypes,getDonnees): # Composition d'un dic matrice permettant de gérer un écran de saisie analytique dicBandeau = {'titre': "Choix d'un code analytique: %s"%str(axe), 'texte': "les mots clés du champ en bas permettent de filtrer les lignes et d'affiner la recherche", 'hauteur': 15, 'nomImage': "xpy/Images/32x32/Matth.png"} # Composition de la matrice de l'OLV Analytiques, retourne un dictionnaire lstCodesColonnes = [xformat.NoAccents(x).lower() for x in lstNomsCol] lstValDefColonnes = xformat.ValeursDefaut(lstNomsCol, lstTypes) lstLargeurColonnes = xformat.LargeursDefaut(lstNomsCol, lstTypes,IDcache=False) lstColonnes = xformat.DefColonnes(lstNomsCol, lstCodesColonnes, lstValDefColonnes, lstLargeurColonnes) return { 'lstColonnes': lstColonnes, 'lstChamps': lstChamps, 'listeNomsColonnes': lstNomsCol, 'listeCodesColonnes': lstCodesColonnes, 'getDonnees': getDonnees, 'dicBandeau': dicBandeau, 'sortColumnIndex': 1, 'sensTri': False, 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", }
def GetMatriceComptes(self): dicBandeau = { 'titre': "Recherche d'un compte prestation", 'texte': "le compte choisi détermine le code du plan comptable de la prestation générée", 'hauteur': 15, 'nomImage': "xpy/Images/32x32/Matth.png" } # Composition de la matrice de l'OLV comptes, retourne un dictionnaire lstChamps = [ '0', 'matPlanComptable.pctCompte', 'matPlanComptable.pctCodeComptable', 'matPlanComptable.pctLibelle', ] lstNomsColonnes = ["0", "compte", "code", "libellé"] lstTypes = ['INTEGER', 'VARCHAR(8)', 'VARCHAR(16)', 'VARCHAR(100)'] lstCodesColonnes = [xformat.NoAccents(x) for x in lstNomsColonnes] lstValDefColonnes = xformat.ValeursDefaut(lstNomsColonnes, lstTypes) lstLargeurColonnes = xformat.LargeursDefaut(lstNomsColonnes, lstTypes) lstColonnes = xformat.DefColonnes(lstNomsColonnes, lstCodesColonnes, lstValDefColonnes, lstLargeurColonnes) return { 'lstColonnes': lstColonnes, 'lstChamps': lstChamps, 'listeNomsColonnes': lstNomsColonnes, 'listeCodesColonnes': lstCodesColonnes, 'getDonnees': self.GetComptes, 'dicBandeau': dicBandeau, 'sortColumnIndex': 2, 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", }
def dicOlvIndividus(): # appel des données à afficher lstChamps = [ "0", "IDindividu", "nom", "prenom", "date_naiss", "adresse_auto", "rue_resid", "cp_resid", "ville_resid", "tel_domicile", "tel_mobile", "mail" ] lstNomsColonnes = [ "null", "Individu", "Nom", "Prenom", "Naissance", "chez", "rue", "cp", "ville", "tel domicile", "tel mobile", "mail" ] lstTypes = [ "INTEGER", "INTEGER", "VARCHAR(100)", "VARCHAR(100)", "DATE", "INTEGER", "VARCHAR(100)", "VARCHAR(8)", "VARCHAR(100)", "VARCHAR(11)", "VARCHAR(11)", "VARCHAR(40)" ] lstCodesColonnes = [xformat.NoAccents(x) for x in lstNomsColonnes] lstValDefColonnes = xformat.ValeursDefaut(lstNomsColonnes, lstTypes) lstLargeurColonnes = xformat.LargeursDefaut(lstNomsColonnes, lstTypes) # composition des données du tableau à partir du recordset # matrice OLV lstColonnes = xformat.DefColonnes(lstNomsColonnes, lstCodesColonnes, lstValDefColonnes, lstLargeurColonnes) dicOlv = { 'lstColonnes': lstColonnes, 'lstChamps': lstChamps, 'checkColonne': False, 'sortColumnIndex': 2, 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", 'dictColFooter': { "nom": { "mode": "nombre", "alignement": wx.ALIGN_CENTER }, } } return dicOlv
def GetAnalytique(self,**kwd): # choix d'un code analytique, retourne un dict, # Le mode:'auto' permet un automatisme d'affectation sans un arrêt, pour tous les autres cas =>affichage mode = kwd.pop('mode',None) axe = kwd.pop('axe',None) nbChampsTestes = kwd.pop('axe',3) #Pour une recherche sur tous les axes on ne teste que le champ ID pour éviter les ambiguités if not axe: nbChampsTestes = 1 filtre = kwd.pop('filtre',None) getAnalytiques = kwd.pop('getAnalytiques', None) lstNomsCol = kwd.pop('lstNomsCol',['IDanalytique','abrégé','nom','params','axe']) lstChamps = kwd.pop('lstChamps',['cpta_analytiques.IDanalytique', 'cpta_analytiques.abrege', 'cpta_analytiques.nom', 'cpta_analytiques.params', 'cpta_analytiques.axe' ]) lstTypes = kwd.pop('lstTypes',None) if not lstTypes: lstTypes = [y for x,y,z in DB_TABLES['cpta_analytiques']] lstCodesColonnes = [xformat.NoAccents(x).lower() for x in lstNomsCol] if not mode: mode = 'dlg' dicAnalytique = None nb = 0 # Test préalable sur début de clé seulement if filtre and len(str(filtre))>0: # pour recherche sur un seul axre, on déroule les champs progresivement, jusqu'à trouver un item unique for ix in range(nbChampsTestes): kwd['whereFiltre'] = """ AND (%s LIKE '%s%%' )"""%(lstChamps[ix],filtre) kwd['lstChamps'] = lstChamps kwd['mode'] = mode kwd['axe'] = axe ltAnalytiques = getAnalytiques(**kwd) nb = len(ltAnalytiques) if nb == 1: # une seule occurrence trouvée c'est ok dans tous les cas dicAnalytique={} for ix2 in range(len(ltAnalytiques[0])): dicAnalytique[lstCodesColonnes[ix2]] = ltAnalytiques[0][ix2] break elif nb > 1 and mode.lower() == 'auto': # Le mode auto prend la première occurrence trouvée même s'il y en a d'autres dicAnalytique={} for ix2 in range(len(ltAnalytiques[0])): dicAnalytique[lstCodesColonnes[ix2]] = ltAnalytiques[0][ix2] break elif nb > 1: # dès le premier champ trop d'occurrences, il faut les afficher break if mode.lower() == 'auto' or nb == 1: return dicAnalytique # le filtre semble trop peu sélectif pour un f4 on le supprime if nb < 2: filtre = None # un item unique n'a pas été trouvé on affiche les choix possibles getDonnees = getAnalytiques dicOlv = self.GetMatriceAnalytiques(axe,lstChamps,lstNomsCol,lstTypes,getDonnees) #dicOlv['lstCodesSup'] = ['axe',] dicOlv['size'] = (500,600) # appel dee l'écran de saisie dlg = xgtr.DLG_tableau(self,dicOlv=dicOlv) if dlg.ctrlOlv.Parent.ctrlOutils: barreRecherche = dlg.ctrlOlv.Parent.ctrlOutils.barreRecherche else: barreRecherche = dlg.ctrlOlv.Parent.barreRecherche if filtre and len(filtre)>0 and barreRecherche: barreRecherche.SetValue(filtre) dlg.ctrlOlv.Filtrer(filtre) ret = dlg.ShowModal() if ret == wx.OK: donnees = dlg.GetSelection().donnees dicAnalytique = {} for ix in range(len(donnees)): dicAnalytique[dicOlv['listeCodesColonnes'][ix]] = donnees[ix] dlg.Destroy() return dicAnalytique