Example #1
0
    def Init(self):
        self.db = xdb.DB()
        # définition de l'OLV
        self.ctrlOlv = None

        # boutons de bas d'écran - infos: texte ou objet window.  Les infos sont  placées en bas à gauche
        self.txtInfo = "Ici de l'info apparaîtra selon le contexte de la grille de saisie"
        lstInfos = [
            wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER,
                                     (16, 16)), self.txtInfo
        ]
        dicPied = {'lstBtns': GetBoutons(self), "lstInfos": lstInfos}

        # lancement de l'écran en blocs principaux
        if self.sens == 'entrees':
            self.pnlBandeau = xbandeau.Bandeau(
                self,
                TITRE[self.sens],
                INTRO[self.sens],
                hauteur=20,
                nomImage="xpy/Images/80x80/Entree.png",
                sizeImage=(60, 40))
            self.pnlBandeau.SetBackgroundColour(wx.Colour(220, 250, 220))
        else:
            self.pnlBandeau = xbandeau.Bandeau(
                self,
                TITRE[self.sens],
                INTRO[self.sens],
                hauteur=20,
                nomImage="xpy/Images/80x80/Sortie.png",
                sizeImage=(60, 40))
            self.pnlBandeau.SetBackgroundColour(wx.Colour(250, 220, 220))
        self.pnlParams = PNL_params(self)
        self.pnlOlv = PNL_corps(self, self.dicOlv)
        self.pnlPied = PNL_pied(self, dicPied)
        self.ctrlOlv = self.pnlOlv.ctrlOlv

        # charger les valeurs de pnl_params
        self.pnlParams.SetOneSet('fournisseur',
                                 values=nust.SqlFournisseurs(self.db),
                                 codeBox='param2')
        self.lstAnalytiques = nust.SqlAnalytiques(self.db, 'ACTIVITES')
        self.valuesAnalytiques = [
            '',
        ] + [nust.MakeChoiceActivite(x) for x in self.lstAnalytiques]
        self.codesAnalytiques = [x[:2] for x in self.valuesAnalytiques]
        self.codesAnalytiques[0] = '00'
        if len(self.codesAnalytiques) == 1:
            wx.MessageBox(
                "Aucune activité définie!\n\nLes affectations analytiques ne seront pas possibles par camp"
            )
        self.pnlParams.SetOneSet('analytique',
                                 values=self.valuesAnalytiques,
                                 codeBox='param2')
        self.SetAnalytique('00')
        self.pnlParams.SetOneValue('origine',
                                   valeur=DICORIGINES[self.sens]['values'][0],
                                   codeBox='param1')
        self.Bind(wx.EVT_CLOSE, self.OnClose)
    def Init(self):
        # boutons de bas d'écran - infos: texte ou objet window.  Les infos sont  placées en bas à gauche
        lstInfos = [ wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (16, 16)),lINFO_OLV]
        dicPied = {'lstBtns': lGetBoutons(self), "lstInfos": lstInfos}

        # lancement de l'écran en blocs principaux
        self.pnlBandeau = xbandeau.Bandeau(self,lTITRE,lINTRO,nomImage="xpy/Images/32x32/Matth.png")
        self.pnlParams = Pnl_params(self)
        self.pnlOlv = Pnl_corps(self, self.dicOlv)
        self.pnlPied = Pnl_pied(self, dicPied)
        self.ctrlOlv = self.pnlOlv.ctrlOlv
        self.Bind(wx.EVT_CLOSE,self.OnFermer)
        # placement des données
        if self.IDimmo:
            self.noegest.GetEnsemble(self.IDimmo,self.dicOlv['lstChmpEns'],self.pnlParams)
            self.noegest.GetComposants(self.IDimmo,self.dicOlv['lstChamps'])
        for object in self.ctrlOlv.modelObjects:
            self.noegest.ValideLigComp(object)
        self.ctrlOlv._FormatAllRows()
        self.ctrlOlv.Refresh()
        # conservation des originaux
        self.modelOriginal = [deepcopy(x) for x in self.ctrlOlv.modelObjects if not hasattr(x,'vierge')]
        self.ddParamsOriginal = self.pnlParams.GetValues()
        if self.IDimmo:
            self.pnlParams.SetOneValue('mode','Modification',codeBox='infos')
        else: self.pnlParams.SetOneValue('mode','Création',codeBox='infos')
        self.pnlParams.Refresh()
Example #3
0
    def __init__(self, ID, mode='familles', titre="", **kwds):
        minSize = (400, 200)
        kw = {'size': (1200, 400), 'pos': (55, 180)}
        super().__init__(None, **kw)
        self.mode = mode
        self.IDref = ID
        if not ID: raise ("pas d'ID %s reçu!" % mode)
        self.famNoPub, self.famNoMel = False, False

        intro = "Vous pouvez saisir dans la liste sans pouvoir ajouter ni retrancher une ligne, "
        intro += "le changement de nom ou de catérorie se fait dans NOETHYS."
        self.bandeau = xbandeau.Bandeau(self,
                                        titre=titre,
                                        texte=intro,
                                        hauteur=15,
                                        nomImage="xpy/Images/32x32/Matth.png")

        # appel des paramètes de l'OLV et chargement des données initiales, corrigées dans self.lstDonnees
        if mode == 'familles':
            self.dicOlv = GetDicOlvFam()
            self.dicOlv['lstDonnees'] = self.GetCoordonnees()
        else:
            self.dicOlv = GetDicOlvInd()
            self.dicOlv['lstDonnees'] = self.GetCoordIndividu()

        # pnl et pnlPied sont reconnus par le Size de DLG_vide
        self.pnl = PNL_corps(self, self.dicOlv, **kwds)
        self.ctrl = self.pnl.ctrlOlv

        self.pnlPied = PNL_pied(self)
        self.SetMinSize(minSize)

        if self.mode == 'familles':
            self.SetCheckFamNo()
        self.Sizer()
Example #4
0
    def __init__(self, *args, **kwd):
        titre = kwd.pop('titre', "Ici mon titre")
        intro = kwd.pop('intro', "et mes explications")
        lstDonnees = kwd.pop('lstDonnees', [("a", 2), ("b", 10), ("c", "jj")])
        lstColonnes = kwd.pop('lstColonnes', ["col1", "col2"])
        lstWnomsCol = [len(x) * 6 for x in lstColonnes]
        self.lstWcol = kwd.pop('lstWcol', lstWnomsCol)
        self.lstSetters = kwd.pop('lstSetters', None)
        self.withCheck = kwd.pop('withCheck', False)
        self.columnSort = kwd.pop('columnSort', 1)
        size = kwd.pop('size', (600, 600))

        wx.Dialog.__init__(self,
                           None,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.SetMinSize(size)
        mess = None
        if not lstDonnees or len(lstDonnees) == 0:
            mess = "xchoixListe.DialogAffiche reçoit 'lstDonnees' vide"
        if (not lstDonnees[0]) or (not isinstance(lstDonnees[0],
                                                  (tuple, list))):
            mess = "xchoixListe.DialogAffiche reçoit 'lstDonnees' contenant un type :%s" % type(
                lstDonnees[0])
        if mess:
            wx.MessageBox(mess)
            self.EndModal(wx.ID_ABORT)
        if len(lstColonnes) != len(lstDonnees[0]):
            lstColonnes = []
            for i in range(len(lstDonnees[0])):
                lstColonnes.append("col " + str(i))
        self.lstDonnees = lstDonnees
        self.SetTitle("xchoixListe.DialogAffiche")
        self.choix = None
        self.lstColonnes = lstColonnes
        self.nbColonnes = len(lstColonnes)

        # Bandeau
        self.ctrl_bandeau = xbd.Bandeau(self,
                                        titre=titre,
                                        texte=intro,
                                        hauteur=18,
                                        nomImage="xpy/Images/32x32/Python.png")

        # Boutons
        bmpabort = wx.Bitmap("xpy/Images/32x32/Annuler.png")
        self.bouton_annuler = wx.Button(self,
                                        id=wx.ID_CANCEL,
                                        label=(u"Abandon"))
        self.bouton_annuler.SetBitmap(bmpabort)
        bmpok = wx.Bitmap("xpy/Images/32x32/Valider.png")
        self.bouton_fermer = wx.Button(self, id=-1, label=(u"Valider"))
        self.bouton_fermer.SetBitmap(bmpok)
        self.bouton_fermer.SetToolTip(u"Cliquez ici pour valider votre choix")
        self.InitOlv()
        self.__do_layout()
        # Binds
        self.Bind(wx.EVT_BUTTON, self.OnDblClicOk, self.bouton_fermer)
Example #5
0
    def __init__(self,
                 parent,
                 listeOriginale=[
                     ("Choix1", "Texte1"),
                     ("Choix2", "Texte2"),
                 ],
                 columnSort=1,
                 LargeurCode=80,
                 LargeurLib=100,
                 minSize=(350, 350),
                 titre=u"Faites un choix !",
                 intro=u"Double Clic sur la ou les réponses souhaitées...",
                 altOK=False):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)

        self.SetTitle("xchoixListe.DialogCoches")
        self.columnSort = columnSort
        self.altOK = altOK
        self.choix = None
        self.parent = parent
        self.minSize = minSize
        self.wCode = LargeurCode
        self.wLib = LargeurLib
        self.liste = []
        self.nbColonnes = 0
        for item in listeOriginale:
            if isinstance(item, (list, tuple)):
                self.nbColonnes = len(item)
            else:
                self.nbColonnes = 1
                item = (str(item), )
            self.liste.append(item)

        # Bandeau
        self.ctrl_bandeau = xbd.Bandeau(self,
                                        titre=titre,
                                        texte=intro,
                                        hauteur=15,
                                        nomImage="xpy/Images/32x32/Python.png")
        # conteneur des données
        self.listview = FastObjectListView(self)
        # Boutons
        self.bouton_ok = wx.Button(self, label=u"Valider")
        self.bouton_ok.SetBitmap(wx.Bitmap("xpy/Images/32x32/Valider.png"))
        self.bouton_annuler = wx.Button(self, label=u"Annuler")
        self.bouton_annuler.SetBitmap(
            wx.Bitmap("xpy/Images/32x32/Annuler.png"))

        self.__set_properties()
        self.__do_layout()
        # Binds
        self.Bind(wx.EVT_BUTTON, self.OnClicOk, self.bouton_ok)
        self.Bind(wx.EVT_BUTTON, self.OnClicFermer, self.bouton_annuler)
        self.listview.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnDblClic)
Example #6
0
    def __init__(self, parent, modeImportation=False):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent
        self.saisie_pays = ""
        intro = "Vous pouvez ici saisir, modifier ou supprimer des pays utilisés dans les adresses"
        titre = "Gestion des pays postaux"
        self.ctrl_bandeau = xbd.Bandeau(
            self,
            titre=titre,
            texte=intro,
            hauteur=15,
            nomImage="xpy/Images/32x32/Secteur.png")
        self.ctrlOlv = OL_Pays.ListView(self,
                                        id=-1,
                                        style=wx.LC_REPORT | wx.SUNKEN_BORDER
                                        | wx.LC_SINGLE_SEL | wx.LC_HRULES
                                        | wx.LC_VRULES)
        self.ctrlOlv.MAJ()
        self.ctrl_recherche = OL_Pays.CTRL_Outils(self, listview=self.ctrlOlv)

        self.bouton_ajouter = wx.BitmapButton(
            self, -1,
            wx.Bitmap("xpy/Images/16x16/Ajouter.png", wx.BITMAP_TYPE_ANY))
        self.bouton_modifier = wx.BitmapButton(
            self, -1,
            wx.Bitmap("xpy/Images/16x16/Modifier.png", wx.BITMAP_TYPE_ANY))
        self.bouton_supprimer = wx.BitmapButton(
            self, -1,
            wx.Bitmap("xpy/Images/16x16/Supprimer.png", wx.BITMAP_TYPE_ANY))
        self.bouton_importer = CTRL_Bouton_image(
            self,
            texte="Choisir le pays",
            cheminImage="xpy/Images/32x32/Fleche_bas.png")
        self.bouton_fermer = CTRL_Bouton_image(
            self,
            id=wx.ID_CANCEL,
            texte="Fermer",
            cheminImage="xpy/Images/32x32/Annuler.png")

        if modeImportation == False:
            self.bouton_importer.Show(False)
            self.bouton_fermer = CTRL_Bouton_image(
                self,
                id=wx.ID_CANCEL,
                texte="Fermer",
                cheminImage="xpy/Images/32x32/Valider.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.Ajouter, self.bouton_ajouter)
        self.Bind(wx.EVT_BUTTON, self.Modifier, self.bouton_modifier)
        self.Bind(wx.EVT_BUTTON, self.Supprimer, self.bouton_supprimer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonChoisir, self.bouton_importer)
    def Init(self):
        # boutons de bas d'écran - infos: texte ou objet window.  Les infos sont  placées en bas à gauche
        lstInfos = [ wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (16, 16)),INFO_OLV]
        dicPied = {'lstBtns': GetBoutons(self), "lstInfos": lstInfos}

        # lancement de l'écran en blocs principaux
        self.pnlBandeau = xbandeau.Bandeau(self,TITRE,INTRO,nomImage="xpy/Images/32x32/Matth.png")
        self.pnlParams = PNL_params(self)
        self.pnlOlv = PNL_corps(self, self.dicOlv)
        self.pnlPied = PNL_pied(self, dicPied)
        self.ctrlOlv = self.pnlOlv.ctrlOlv
        self.Bind(wx.EVT_CLOSE,self.OnFermer)
        self.noegest.GetImmosComposants(self.dicOlv['lstChamps'])
Example #8
0
    def __init__(self, titre="Ici mon titre",
                 intro="et mes explications",
                 lstDonnees=[("a",2),("b",10)],
                 lstColonnes=["let","nbre"],
                 lstWcol=None,
                 size=(600,600)):
        wx.Dialog.__init__(self, None, -1, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
        self.SetMinSize(size)
        mess = None
        if not lstDonnees or len(lstDonnees)==0 : mess = "xchoixListe.DialogAffiche reçoit 'lstDonnees' vide"
        if (not lstDonnees[0]) or (not isinstance(lstDonnees[0],(tuple,list))):
            mess = "xchoixListe.DialogAffiche reçoit 'lstDonnees' contenant un type :%s"%type(lstDonnees[0])
        if mess:
            wx.MessageBox(mess)
            self.EndModal(wx.ID_ABORT)
        if len(lstColonnes) != len(lstDonnees[0]):
            lstColonnes=[]
            for i in range(len(lstDonnees[0])):
                lstColonnes.append("col " + str(i))
        self.dicOlv = {
            'listeColonnes': self.ComposeColonnes(lstColonnes,lstWcol=lstWcol),
            'listeDonnees': lstDonnees,
            'checkColonne': False,
            'colonneTri': 0,
            'style': wx.LC_SINGLE_SEL | wx.LC_HRULES | wx.LC_VRULES,
            'msgIfEmpty': "Aucune donnée ne correspond à votre recherche",
            'dictColFooter': {lstColonnes[0]: {"mode": "nombre", "alignement": wx.ALIGN_CENTER}, }
        }
        self.SetTitle("xchoixListe.DialogAffiche")
        self.choix= None
        self.avecFooter = True
        self.barreRecherche = True

        # Bandeau
        self.ctrl_bandeau = xbd.Bandeau(self, titre=titre, texte=intro,  hauteur=18, nomImage="xpy/Images/32x32/Python.png")

        # Boutons
        bmpabort = wx.Bitmap("xpy/Images/32x32/Annuler.png")
        self.bouton_annuler = wx.Button(self, id=wx.ID_CANCEL,label=(u"Abandon"))
        self.bouton_annuler.SetBitmap(bmpabort)
        bmpok = wx.Bitmap("xpy/Images/32x32/Valider.png")
        self.bouton_fermer = wx.Button(self, id=-1,label=(u"Valider"))
        self.bouton_fermer.SetBitmap(bmpok)

        # Initialisations
        self.__init_olv()
        self.__set_properties()
        self.__do_layout()
    def __init__(self, mode='individus', titre=TITRE, intro=INTRO):
        self.limitSql = LIMITSQL
        self.db = xdb.DB()
        wx.Dialog.__init__(self,
                           None,
                           -1,
                           pos=(50, 80),
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
        if nuu.VerificationDroitsUtilisateurActuel("individus_fiche",
                                                   "consulter") == False:
            if self.IsModal():
                self.EndModal(wx.ID_CANCEL)
            else:
                self.Destroy()
        self.mode = mode
        self.SetTitle(NOM_MODULE)
        self.choix = None

        # Bandeau
        self.ctrl_bandeau = xbandeau.Bandeau(
            self,
            titre=titre,
            texte=intro,
            hauteur=18,
            nomImage="xpy/Images/32x32/Matth.png")

        # composition des objets
        if self.mode == 'familles':
            dicOlv = dicOlvFamilles()
            self.getDonnees = self.GetFamilles
        else:
            dicOlv = dicOlvIndividus()
            self.getDonnees = self.GetIndividus

        dicOlv['getDonnees'] = self.getDonnees
        pnlOlv = Pnl_tableau(self, dicOlv)
        self.ctrlOlv = pnlOlv.ctrlOlv
        self.olv = pnlOlv
        self.pnlPied = xgtr.PNL_pied(self, {'autoSizer': False, 'lstBtns': []})
        # Initialisations
        self.pnlPied.lstBtns = GetLstBtns(self.pnlPied, self.olv)
        btnFermer = self.pnlPied.lstBtns[1]
        self.Bind(wx.EVT_BUTTON, self.OnFermer, btnFermer)
        self.pnlPied.Sizer()
        self.__set_properties()
        self.Sizer()
        self.ctrlOlv.MAJ()
Example #10
0
    def Init(self):
        # boutons de bas d'écran - infos: texte ou objet window.  Les infos sont  placées en bas à gauche
        lstInfos = [ wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (16, 16)),self.txtInfo]
        dicPied = {'lstBtns': GetBoutons(self), "lstInfos": lstInfos}

        # lancement de l'écran en blocs principaux
        self.pnlBandeau = xbandeau.Bandeau(self,TITRE,INTRO,nomImage="xpy/Images/32x32/Matth.png")
        self.pnlParams = PNL_params(self)
        self.pnlOlv = PNL_corps(self, self.dicOlv)
        self.pnlPied = PNL_pied(self, dicPied)
        self.ctrlOlv = self.pnlOlv.ctrlOlv
        # connexion compta et affichage bas d'écran
        self.compta = self.GetCompta()
        self.table = self.GetTable()
        self.Bind(wx.EVT_CLOSE,self.OnFermer)
        self.pnlParams.SetOneValue('forcer',False)
        self.OnCloture(None)
Example #11
0
    def Init(self):
        # lancement de l'écran en blocs principaux
        self.pnlBandeau = xbandeau.Bandeau(self,TITRE,INTRO, hauteur=20,
                                           nomImage="xpy/Images/80x80/Famille.png",
                                           sizeImage=(60,60))
        self.pnlBandeau.SetBackgroundColour(wx.Colour(220, 250, 220))

       # charger les valeurs de pnl_params
        self.periode = xformat.PeriodeMois(self.today)
        self.pnlParams.SetOneValue('periode',self.periode,'param1')
        self.pnlParams.SetOneValue('cuisine',self.cuisine,'param2')
        self.lstAnalytiques = nust.SqlAnalytiques(self.db,'ACTIVITES')
        self.btnAnalytique = self.pnlParams.GetPnlCtrl('analytique','param2').btn
        self.btnAnalytique.Enable(False)
        self.OnCuisine(None)
        self.Bind(wx.EVT_CLOSE,self.OnFermer)
        self.ctrlOlv.SetFocus()
    def __init__(self,parent,dicParams={},dicOlv={},dicPied={}, **kwds):
        if not 'title' in kwds.keys():
            listArbo=os.path.abspath(__file__).split("\\")
            kwds['title'] = listArbo[-1] + "/" + self.__class__.__name__
        self.db =       kwds.pop('db',None) #purge d'éventuels arguments db à ne pas envoyer à super()
        autoSizer =     kwds.pop('autoSizer', True)
        size =          kwds.get('size',None)
        if not 'style' in kwds.keys():
            kwds['style'] = wx.DEFAULT_FRAME_STYLE

        # si size pas dans kwds, on pique celle de l'olv qui serait contrainte
        if not size and dicOlv.get('size',None):
            kwds['size'] = dicOlv.pop('size',None)

        # recherche d'un dicBandeau
        for dic in (kwds, dicParams, dicOlv):
            dicBandeau = dic.pop('dicBandeau',None)
            if dicBandeau != None:
                break

        super().__init__(parent,**kwds)
        if dicBandeau:
            self.bandeau = xbandeau.Bandeau(self,**dicBandeau)
        else: self.bandeau = None

        # Création des différentes parties de l'écran
        self.pnlParams = PNL_params(self, **dicParams)
        kwds['db'] = self.db
        if dicOlv != {}:
            self.dicOlv = xformat.CopyDic(dicOlv)
            self.pnlOlv = PNL_corps(self, dicOlv,  **kwds )
            self.ctrlOlv = self.pnlOlv.ctrlOlv
        else:
            autoSizer = False
        self.pnlPied = PNL_pied(self, dicPied,  **kwds )

        # permet un Sizer de substitution différé après l'init propre à l'instance
        if autoSizer:
            self.ctrlOlv.MAJ()
            self.Sizer()
    def __init__(self,parent,dicOlv,**kwds):
        # récup de la matrice servant à la gestion des données, si non fournie elle est composée automatiquemetn
        matrice = dicOlv.get('matriceSaisie',None)
        mode = dicOlv.get('mode','ajout')
        if not matrice:
            key = ("saisie","")
            matrice = xformat.DicOlvToMatrice(key,dicOlv)
        sizeSaisie = dicOlv.get('sizeSaisie',None)

        # Size de l'écran de saisie
        if not sizeSaisie:
            nblignes = 0
            for key, lst in matrice.items():
                nblignes += len(lst)
            sizeSaisie = (200,max(80 + nblignes * 50,400))
        kwds['size'] = sizeSaisie
        kwds['kwValideSaisie'] = dicOlv
        super().__init__(parent, **kwds)

        # construction de l'écran de saisie
        self.pnl = xusp.TopBoxPanel(self, matrice=matrice, lblTopBox=None)

        # grise le champ ID
        if mode in 'ajout' :
            titre = "Création d'une nouvelle ligne"
        else:
            titre = "Modification de la base de données"
            self.pnl.GetPnlCtrl('ID').Enable(False)
        texte = "Définissez les valeurs souhaitées pour la ligne"

        # personnalisation des éléments de l'écran
        self.bandeau = xbandeau.Bandeau(self,titre=titre,texte=texte,
                                        nomImage='xpy/images/32x32/Configuration.png')
        self.btn = self.Boutons(self)

        # layout
        self.Sizer(self.pnl)
Example #14
0
    def __init__(self, parent):
        wx.Dialog.__init__(self, parent, -1, name="DLG_Choix_action",
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.parent = parent

        # Bandeau
        intro = "Vous pouvez enregistrer le fichier généré dans le répertoire souhaité."
        titre = "Exporter vers Excel"
        self.ctrl_bandeau = xbandeau.Bandeau(self, titre=titre, texte=intro,hauteur=30,
                                                 nomImage=EXCEL_16X16_IMG)

        self.bouton_enregistrer = xctrlbi.CTRL(self, texte="Enregistrer sous",
                                               cheminImage= SAUVEGARDER_16X16_IMG,
                                               tailleImage=(48, 48), margesImage=(40, 20, 40, 0),
                                               positionImage=wx.TOP, margesTexte=(10, 10))
        self.bouton_enregistrer.SetToolTip(wx.ToolTip("Enregistrer le fichier Excel"))

        self.bouton_annuler = xctrlbi.CTRL(self, id=wx.ID_CANCEL, texte="Annuler",
                                           cheminImage=ANNULER_32X32_IMG)

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonEnregistrer, self.bouton_enregistrer)
Example #15
0
    def __init__(self, parent, **kwds):
        typeConfig = kwds.pop('typeConfig', None)
        nomConfig = kwds.pop('nomConfig', None)
        lblBox = kwds.pop('lblBox', "Paramètres de la base de donnée")
        modeBase = kwds.pop('modeBase', 'pointeur')
        kwds['size'] = (350, 430)
        super().__init__(parent, **kwds)
        self.modeBase = modeBase
        self.DB = None

        # récup info de l'utilisateur de la session
        cfg = xshelve.ParamUser()
        dicUser = cfg.GetDict(dictDemande=None, groupe='USER')
        mess = "Accès aux ParamUser"
        try:
            # vérif des droits
            if modeBase == 'creation':
                mess = "Echec de la vérification des droits de création"
                if dicUser['profil'] != 'administrateur':
                    mess += "\n\n%s de profil %s n'est pas administrateur!" % (
                        dicUser['utilisateur'], dicUser['profil'])
                    raise (mess)
            mess = None
        except:
            wx.MessageBox(mess, "xGestionConfig.DLG_saisieUneConfig")
        if mess:
            self.Destroy()

        # choix de la configuration prise dans paramFile
        cfgF = xshelve.ParamFile()
        grpConfigs = cfgF.GetDict(dictDemande=None, groupe='CONFIGS')

        # les choix de config sont stockés par application car Data peut être commun à plusieurs
        if parent and hasattr(parent, 'dictAppli'):
            dictAppli = self.parent.dictAppli
        else:
            cfg = xshelve.ParamUser()
            dictAppli = cfg.GetDict(dictDemande=None, groupe='APPLI')
        nomAppli = dictAppli['NOM_APPLICATION']

        # récup des données à afficher après construction

        choixConfigs = grpConfigs['choixConfigs'][nomAppli]
        if 'lastConfig' in choixConfigs:
            lastConfig = choixConfigs['lastConfig']
        else:
            lastConfig = None
        ddConfig = GetDdConfig(grpConfigs, lastConfig)

        # récup de la matrice ayant servi à la gestion des données
        if not typeConfig:
            lstcode = GetLstCodesMatrice(MATRICE_CONFIGS)
            typeConfig = lstcode[0]
        key = (typeConfig, lblBox)
        matrice = {
            key: MATRICE_CONFIGS[GetCleMatrice(typeConfig, MATRICE_CONFIGS)]
        }
        self.typeConfig = typeConfig

        # ajustement de la matrice selon les modeBase
        ixID = GetIxLigneMatrice('nameDB', matrice[key])
        if self.modeBase == 'pointeur':
            matrice[key][ixID] = {
                'name': 'nameDB',
                'genre': 'combo',
                'label': 'Nom de la Base',
                'help':
                "Le nom de la base est le fichier en local, ou son nom sur le serveur",
                'ctrlAction': 'OnNameDB',
            }

        elif self.modeBase == 'creation':
            matrice[key][ixID] = {
                'name': 'nameDB',
                'genre': 'texte',
                'label': 'Nom de la Base',
                'help':
                "Choisir un base de donnée non présente sur le serveur ou fichier non existant",
                'ctrlAction': 'OnNameDB',
            }

        # place la valeur du champ ID
        exist = False
        if nomConfig:
            ixID = GetIxLigneMatrice('ID', matrice[key])
            matrice[key][ixID]['value'] = nomConfig

        # construction de l'écran de saisie
        self.pnl = xusp.TopBoxPanel(self, matrice=matrice, lblTopBox=None)

        if self.typeConfig in ddConfig.keys() and nomConfig == ddConfig[
                self.typeConfig]['ID']:
            self.pnl.SetValues(ddConfig)

        # grise le champ ID
        ctrlID = self.pnl.GetPnlCtrl('ID')
        ctrlID.Enable(False)
        if self.modeBase in ('creation', 'pointeur'):
            titre = "Création d'une nouvelle base de données"
            texte = "Définissez les pointeurs d'accès et le nom de la base à y créer\n"
            texte += "le mot de passe présenté sera celui  des 'Accès aux bases de données'"
        else:
            titre = "Définition de la base de données"
            texte = "Définissez les pointeurs d'accès et le nom de la base souhaitée\n"
            texte += "l'éventuel mot de passe présenté sera celui des 'Accès aux bases de données'"

        # personnalisation des éléments de l'écran
        self.bandeau = xbandeau.Bandeau(
            self,
            titre=titre,
            texte=texte,
            nomImage='xpy/images/32x32/Configuration.png')
        self.btn = self.Boutons(self)

        # layout
        self.Sizer(self.pnl)
Example #16
0
    def __init__(self,
                 ID,
                 mode='individus',
                 LargeurCode=180,
                 LargeurLib=100,
                 minSize=(180, 350),
                 titre=u"Saisie d'une adresse normalisée",
                 intro=u"Lignes limitées à 38 caractères"):
        wx.Dialog.__init__(self,
                           None,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.SetTitle("aDLG_Adresses_saisie")
        self.mode = mode
        self.choix = None
        if self.mode == 'familles':
            self.dicCorrespondant = nua.GetDBfamille(ID)
            self.IDfamille = ID
            self.IDindividu = self.dicCorrespondant['IDindividu']
        else:
            self.dicCorrespondant = {'IDindividu': ID}
            self.IDindividu = ID
        self.minSize = minSize
        self.wCode = LargeurCode
        self.wLib = LargeurLib
        self.liste = []
        # Bandeau
        self.ctrl_bandeau = xbd.Bandeau(self,
                                        titre=titre,
                                        texte=intro,
                                        hauteur=15,
                                        nomImage="xpy/Images/32x32/Matth.png")
        # conteneur des données
        self.panelAdresse = PnlAdresse(self)
        self.lstCtrl = self.panelAdresse.lstCtrl
        self.lstNomsChamps = self.panelAdresse.lstNomsChamps

        if self.mode == 'familles':
            self.panelAdresse.SetCorrespondant(self.dicCorrespondant)
        self.lstAdresse, self.IDindividuLu, (nom, prenom) = nua.GetDBadresse(
            self.IDindividu, retNom=True)
        if self.IDindividu == self.IDindividuLu:
            self.panelAdresse.SetAdresse(self.lstAdresse)
        elif not nom or nom == "":
            mess = "Cette adresse est perdue,\n\nVoulez-vous créer une nouvelle adresse?"
            ret = wx.MessageBox(mess,
                                "Pas d'adresse personnelle",
                                style=wx.YES_NO | wx.CENTER)
            if ret == wx.YES:
                self.panelAdresse.SetAdresse(self.lstAdresse)
            else:
                self.Destroy()
        else:
            mess = "Cette personne avait l'adresse de %s %s\n\nVoulez-vous lui créer une adresse personnelle?" % (
                prenom, nom)
            mess += "\nSinon changez l'adresse de l'individu %s" % self.IDindividuLu
            ret = wx.MessageBox(mess,
                                "Pas d'adresse personnelle",
                                style=wx.YES_NO | wx.CENTER)
            if ret != wx.YES:
                self.Destroy()

        # Boutons
        self.bouton_remonte = CTRL_Bouton_image(
            self,
            texte=u"Remonte\nex adr.",
            image="xpy/Images/32x32/Actualiser.png",
        )
        self.bouton_ok = CTRL_Bouton_image(
            self, texte=u"Valider", image="xpy/Images/32x32/Valider.png")
        self.bouton_fermer = CTRL_Bouton_image(
            self, texte=u"Abandon", image="xpy/Images/32x32/Annuler.png")

        self.__set_properties()
        self.__do_layout()
Example #17
0
    def __init__(self, parent, dicOlv, *args, **kwds):
        self.parent = parent

        dicBandeau = dicOlv.pop('dicBandeau', None)
        autoSizer = dicOlv.pop('autoSizer', True)
        self.lstBtns = kwds.pop('lstBtns', None)
        self.lstActions = kwds.pop('lstActions', None)
        self.dicOnClick = kwds.pop('dicOnClick', None)
        if (not self.lstBtns):
            #force la présence d'un pied d'écran par défaut
            self.lstBtns = [
                ('BtnPrec', wx.ID_CANCEL,
                 wx.ArtProvider.GetBitmap(wx.ART_DELETE, wx.ART_OTHER,
                                          (32, 32)),
                 "Abandon, Cliquez ici pour retourner à l'écran précédent"),
                ('BtnOK', wx.ID_OK,
                 wx.Bitmap("xpy/Images/32x32/Valider.png", wx.BITMAP_TYPE_ANY),
                 "Cliquez ici pour Choisir l'item sélectionné")
            ]

        wx.Panel.__init__(self, parent, *args, **kwds)
        #ci dessous l'ensemble des autres paramètres possibles pour OLV
        if dicBandeau:
            self.bandeau = xbandeau.Bandeau(self, **dicBandeau)
        else:
            self.bandeau = None

        if 'recherche' in dicOlv:
            self.avecRecherche = dicOlv['recherche']
        else:
            self.avecRecherche = True

        #récup des seules clés possibles pour dicOLV
        lstParamsOlv = [
            'id',
            'style',
            'listeColonnes',
            'listeChamps',
            'colonneTri',
            'getDonnees',
            'getDonneesObj',
            'msgIfEmpty',
            'sensTri',
            'exportExcel',
            'exportTexte',
            'apercuAvantImpression',
            'imprimer',
            'titreImpression',
            'orientationImpression',
            'cellEditMode',
            'useAlternateBackColors',
        ]
        dicOlvOut = {}
        for key, valeur in dicOlv.items():
            if key in lstParamsOlv:
                dicOlvOut[key] = valeur

        self.ctrlOlv = ListView(self, **dicOlvOut)

        if self.avecRecherche:
            self.barreRecherche = BarreRecherche(
                self,
                listview=self.ctrlOlv,
                texteDefaut=u"Saisir une partie de mot à rechercher ...",
                style=wx.TE_LEFT | wx.TE_PROCESS_ENTER)
            self.barreRecherche.Bind(wx.EVT_CHAR, self.OnRechercheChar)
            self.pnlPied = (10, 10)
        else:
            # Le pnlPied est un spécifique alimenté par les descendants
            self.pnlPied = (200, 10)
        # Sizer différé pour les descendants avec spécificités modifiant le panel
        if autoSizer:
            self.ProprietesOlv()
            self.__do_layout()
Example #18
0
    def __init__(self, parent,dicList1={},lstChamps1=[],dicList2={},lstChamps2=[],lstLettres=[],columnSort=3,
                 LargeurCode=80,LargeurLib=100,minSize=(350, 350),titre=u"Lettrage des montants",
                 intro=u"Cochez les lignes associées puis cliquez sur lettrage...", altOK = False):
        wx.Dialog.__init__(self, None, -1, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX)

        self.SetTitle("xchoixListe.DialogLettrage")
        self.parent = parent
        self.lstLettresOriginal = copy.deepcopy(lstLettres)
        self.lstLettres = lstLettres
        self.dicList1 = dicList1
        self.dicList2 = dicList2
        self.lstChamps1 = lstChamps1
        self.lstChamps2 = lstChamps2
        self.columnSort = columnSort
        self.altOK = altOK
        self.choix = None
        self.parent = parent
        self.minSize = minSize
        self.wCode = LargeurCode
        self.wLib = LargeurLib
        self.nbValeurs = len(lstChamps2)
        if len(lstChamps1) > len(lstChamps2): self.nbValeurs = len(lstChamps1)
        self.nbColonnes = self.nbValeurs + 4
        self.lstLibels = [u"DC",u"ID",u"Let",]+([u"",]*(self.nbValeurs-1))+[u"Débits",u"Crédits",]

        #composition des libelles colonnes et des codes
        i=3
        for item in lstChamps1:
            if item.lower() == u"montant": continue
            self.lstLibels[i] = item
            i +=1
        i=3
        for item in lstChamps2:
            if item.lower() == u"montant": continue
            if self.lstLibels[i] != item:
                self.lstLibels[i] += u"/%s"%item
            i +=1
        # le code est le dernier mot du libellé de la colonne, sans accent et en minuscule
        self.lstCodes = [xdb.Supprime_accent(x.split(u"/")[-1].strip()).lower() for x in self.lstLibels]
        # vérif unicité code
        lstano = [x for x in self.lstCodes if self.lstCodes.count(x)>1]
        if len(lstano)>0:
            wx.MessageBox(u"Les noms des champs doivent être uniques dans un même liste liste!\n voir le doublon: '%s'"%lstano[0], u"Impossible")
            return
        # constitution de la liste de données et calcul au passage de la largeur nécessaire pour les colonnes
        self.lstDonnees = []
        self.lstWidth = [30]*self.nbColonnes # préalimentation d'une largeur par défaut
        self.lstWidth[1]=60 # lardeur de la colonne ID
        multiwidth = 6 # multiplicateur du nombre de caratère maxi dans la colonne pour déterminer la largeur
        for libel in self.lstLibels:
            if self.lstWidth[self.lstLibels.index(libel)] < multiwidth*len(libel)+10:
                self.lstWidth[self.lstLibels.index(libel)] = multiwidth*len(libel)+10
        for sens in (+1,-1):
            # les montants seront alignés dans les deux colonnes le plus à droite
            if sens == +1:
                ixMtt = self.nbColonnes-2
                dic = dicList1
                champs = lstChamps1
            else:
                ixMtt = self.nbColonnes-1
                dic = dicList2
                champs = lstChamps2
            if not "montant" in str(champs).lower():
                wx.MessageBox(u"Les listes de données n'ont pas chacune un champ 'montant'!",u"Impossible")
                return
            nbval = len(champs)
            # balayage des deux dictionnaires de données et de leur liste de champs
            for key,item in dic.items():
                donnee=[sens,key,""] + ([""]*(self.nbValeurs-1)) + [0.0,0.0]
                ixVal = 3
                valMtt = None
                for i in range(nbval):
                    if u"montant" in champs[i].lower():
                        valMtt = item[i]
                        continue
                    donnee[ixVal] = item[i]
                    if isinstance(item[i],(str)):
                        lg = len(item[i])
                    else: lg = len(str(item[i]))
                    if self.lstWidth[ixVal] < lg*multiwidth + 10: self.lstWidth[ixVal] = lg*multiwidth + 10
                    ixVal += 1
                # ajout du montant à droite
                donnee[ixMtt] = valMtt
                self.lstDonnees.append(donnee)

        # Bandeau
        self.ctrl_bandeau = xbd.Bandeau(self, titre=titre, texte=intro, hauteur=15,
                                                 nomImage="xpy/Images/32x32/matth.png")
        # conteneur des données
        self.listview = FastObjectListView(self, id=-1, style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_SINGLE_SEL | wx.LC_HRULES | wx.LC_VRULES)
        self.listview.SetMinSize((10, 10))
        self.barre_recherche = CTRL_Outils(self, listview=self.listview, afficherCocher=True)

        # Boutons
        self.bouton_lettrer = wx.Button(self, id = wx.ID_APPLY,label="Lettrer")
        self.bouton_lettrer.SetBitmap(wx.Bitmap("xpy/Images/32x32/Action.png"))
        self.bouton_delettrer = wx.Button(self, label=u"DeLettrer", )
        self.bouton_delettrer.SetBitmap(wx.Bitmap("xpy/Images/32x32/Depannage.png"))
        self.bouton_fermer = wx.Button(self, label=u"Annuler",)
        self.bouton_fermer.SetBitmap(wx.Bitmap("xpy/Images/32x32/Annuler.png"))
        self.bouton_ok = wx.Button(self, label=u"Valider", )
        self.bouton_ok.SetBitmap(wx.Bitmap("xpy/Images/32x32/Valider.png"))
        self.__set_properties()
        self.MAJ()
        self.__do_layout()
Example #19
0
    def Init(self):
        self.db = xdb.DB()
        # définition de l'OLV
        self.dicOlv = {'lstColonnes': GetOlvColonnes()}
        self.dicOlv.update({'lstCodesSup': GetOlvCodesSup()})
        self.dicOlv.update(GetOlvOptions())
        size = self.dicOlv.pop('size',None)
        self.choicesDiffere = self.dicOlv.pop('choicesDiffere',[])
        self.SetSize(size)
        self.depotOrigine = []
        self.ctrlOlv = None
        self.withDepot = True
        # récup des modesReglements nécessaires pour passer du texte à un ID d'un mode ayant un mot en commun
        choicesMode = []
        self.libelleDefaut = ''
        for colonne in self.dicOlv['lstColonnes']:
            if 'mode' in colonne.valueGetter:
                choicesMode = colonne.choices
            if 'libelle' in colonne.valueGetter:
                self.libelleDefaut = colonne.valueSetter

                
        # appel de modes de règlements
        self.ddModesRegl = nur.GetModesReglements(self.db)
        if self.ddModesRegl == wx.ID_ABORT:
            return wx.ID_ABORT

        # constitution d'un dictionnaire de modes de règlements possibles par choices de mode (vrt chq esp)
        self.dicModesChoices = {}
        for item in choicesMode + self.choicesDiffere:
            # les descriptifs de modes de règlements ne doivent pas avoir des mots en commun
            lstMots = item.split(' ')
            self.dicModesChoices[item]={'lstMots':lstMots}
            ok = False
            for IDmode, dicMode in self.ddModesRegl.items():
                # pour un mot dans les choices
                for mot in lstMots:
                    # présent dans le label d'un mode de règlement
                    if mot.lower() in dicMode['label'].lower():
                        self.dicModesChoices[item].update(dicMode)
                        dicMode['choice'] = item
                        ok = True
                        break
                if ok: break
            if not ok:
                wx.MessageBox("Problème mode de règlement\n\n'%s' n'a aucun mot commun avec un mode de règlement paramétré!"%item)

        # appel d'émetteurs selon les modes de règlement
        lstModes = [self.dicModesChoices[x]['IDmode'] for x in self.dicModesChoices.keys()]
        self.dlEmetteurs, self.dlIDemetteurs = nur.GetEmetteurs(self.db,lstModes)
        if self.dlEmetteurs == wx.ID_ABORT:
            return wx.ID_ABORT

        # boutons de bas d'écran - infos: texte ou objet window.  Les infos sont  placées en bas à gauche
        self.txtInfo =  "Ici de l'info apparaîtra selon le contexte de la grille de saisie"
        lstInfos = [ wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (16, 16)),self.txtInfo]
        dicPied = {'lstBtns': GetBoutons(self), "lstInfos": lstInfos}

        # lancement de l'écran en blocs principaux
        self.pnlBandeau = xbandeau.Bandeau(self,TITRE,INTRO,nomImage="xpy/Images/32x32/Matth.png")
        self.pnlParams = PNL_params(self)
        self.pnlOlv = PNL_corpsReglements(self, self.dicOlv)
        self.pnlPied = PNL_pied(self, dicPied)
        self.ctrlOlv = self.pnlOlv.ctrlOlv

        # la grille est modifiée selon la coche sans dépôt
        self.pnlParams.ctrlSsDepot.Bind(wx.EVT_KILL_FOCUS,self.OnSsDepot)
        self.choicesNonDiffere = self.ctrlOlv.lstColonnes[self.ctrlOlv.lstCodesColonnes.index('mode')].choices
        self.OnSsDepot(None)
        self.Bind(wx.EVT_CLOSE,self.OnClose)
        self.Sizer()
Example #20
0
    def __init__(self, parent, modeImportation=False):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
                           | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
        self.panel_saisie = wx.Panel(self, -1)
        self.SetTitle("DLG_Villes")
        titre = u"Gestion villes et codes postaux"
        if modeImportation == True:
            intro = u"Vous pouvez ici rechercher une ville ou un code postal grâce à la barre de recherche. Cliquez sur 'Choisir' pour importer la ville saisie ou sélectionnée."
        else:
            intro = u"Vous pouvez ici rechercher une ville ou un code postal. La barre de recherche vous permet d'effectuer une recherche sur une partie du nom ou du code postal."
        self.ctrl_bandeau = xbd.Bandeau(self,
                                        titre=titre,
                                        texte=intro,
                                        hauteur=15,
                                        nomImage="xpy/Images/32x32/Carte.png")
        self.ctrl_villes = olv.ListView(self,
                                        id=-1,
                                        style=wx.LC_REPORT | wx.SUNKEN_BORDER
                                        | wx.LC_SINGLE_SEL | wx.LC_HRULES
                                        | wx.LC_VRULES)
        self.ctrl_villes.MAJ()

        self.ctrl_barreRecherche = olv.CTRL_Outils(self,
                                                   listview=self.ctrl_villes)

        self.staticbox_saisie_staticbox = wx.StaticBox(
            self.panel_saisie, -1,
            u"Forcer une ville dans l'Adresse sans sauvegarde en modèle")
        self.label_cp = wx.StaticText(self.panel_saisie, -1, "Code postal :")
        self.ctrl_cp = wx.TextCtrl(self.panel_saisie, -1, "")
        self.label_ville = wx.StaticText(self.panel_saisie, -1, "Ville :")
        self.ctrl_ville = wx.TextCtrl(self.panel_saisie, -1, "")
        self.label_pays = wx.StaticText(self.panel_saisie, -1, "Pays :")
        self.ctrl_pays = wx.TextCtrl(self.panel_saisie, -1, "")

        self.bouton_ajouter = wx.BitmapButton(
            self, -1,
            wx.Bitmap("xpy/Images/16x16/Ajouter.png", wx.BITMAP_TYPE_ANY))
        self.bouton_modifier = wx.BitmapButton(
            self, -1,
            wx.Bitmap("xpy/Images/16x16/Modifier.png", wx.BITMAP_TYPE_ANY))
        self.bouton_supprimer = wx.BitmapButton(
            self, -1,
            wx.Bitmap("xpy/Images/16x16/Supprimer.png", wx.BITMAP_TYPE_ANY))

        self.bouton_importer = CTRL_Bouton_image(
            self,
            texte=u"Choisir la ville",
            cheminImage="xpy/Images/32x32/Fleche_bas.png")
        self.bouton_annuler = CTRL_Bouton_image(
            self, texte=u"Fermer", cheminImage="xpy/Images/32x32/Annuler.png")

        if modeImportation == False:
            self.panel_saisie.Show(False)
            self.bouton_importer.Show(False)

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.Ajouter, self.bouton_ajouter)
        self.Bind(wx.EVT_BUTTON, self.Modifier, self.bouton_modifier)
        self.Bind(wx.EVT_BUTTON, self.Supprimer, self.bouton_supprimer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonChoisir, self.bouton_importer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAnnuler, self.bouton_annuler)