def __init__(self, parent, listeChamps=[], IDchamp=None, code="", nom="", formule="", titre=u""): """ listeChamps = [(code, label), ...] """ wx.Dialog.__init__(self, parent, -1, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.THICK_FRAME) self.parent = parent self.listeChamps = listeChamps self.IDchamp = IDchamp self.label_code = wx.StaticText(self, -1, _(u"Code :")) self.ctrl_code = wx.TextCtrl(self, -1, code, size=(160, -1)) self.label_code_info = wx.StaticText(self, -1, _(u"(En majuscules et sans espaces)")) self.label_nom = wx.StaticText(self, -1, _(u"Description :")) self.ctrl_nom = wx.TextCtrl(self, -1, nom) self.label_titre = wx.StaticText(self, -1, _(u"Titre de colonne :")) self.ctrl_titre = wx.TextCtrl(self, -1, titre) self.label_formule = wx.StaticText(self, -1, _(u"Formule :")) self.ctrl_formule = wx.TextCtrl(self, -1, formule, style=wx.TE_MULTILINE) self.hyper_formule = Hyperlien(self, label=_(u"Insérer un champ"), infobulle=_(u"Cliquez ici pour insérer un champ"), URL="") self.bouton_aide = CTRL_Bouton_image.CTRL(self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png") self.bouton_ok = CTRL_Bouton_image.CTRL(self, texte=_(u"Ok"), cheminImage="Images/32x32/Valider.png") self.bouton_annuler = CTRL_Bouton_image.CTRL(self, texte=_(u"Annuler"), cheminImage="Images/32x32/Annuler.png") self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok) self.Bind(wx.EVT_BUTTON, self.OnBoutonAnnuler, self.bouton_annuler)
def MAJ(self, date_debut=None, date_fin=None, IDactivite=None, listeGroupes=[], detail_groupes=False, affichage_donnees="quantite", affichage_regroupement="jour", affichage_mode="reservation", affichage_etat=["reservation", "present"], labelParametres=u""): # Chargement des informations individuelles if self.date_debut != date_debut : self.infosIndividus = UTILS_Infos_individus.Informations(date_reference=date_debut, qf=True, inscriptions=True, messages=False, infosMedicales=False, cotisationsManquantes=False, piecesManquantes=False, questionnaires=True, scolarite=True) self.dictInfosIndividus = self.infosIndividus.GetDictValeurs(mode="individu", ID=None, formatChamp=False) self.dictInfosFamilles = self.infosIndividus.GetDictValeurs(mode="famille", ID=None, formatChamp=False) # Mémorisation des paramètres self.date_debut = date_debut self.date_fin = date_fin self.IDactivite = IDactivite self.listeGroupes = listeGroupes self.detail_groupes = detail_groupes self.affichage_donnees = affichage_donnees self.affichage_regroupement = affichage_regroupement self.affichage_mode = affichage_mode self.affichage_etat = affichage_etat self.labelParametres = labelParametres # init grid try : dlgAttente = PBI.PyBusyInfo(_(u"Veuillez patienter durant la recherche des données..."), parent=None, title=_(u"Calcul en cours"), icon=wx.Bitmap("Images/16x16/Logo.png", wx.BITMAP_TYPE_ANY)) wx.Yield() self.InitGrid() del dlgAttente except Exception, err: del dlgAttente traceback.print_exc(file=sys.stdout) dlg = wx.MessageDialog(self, _(u"Désolé, le problème suivant a été rencontré dans la recherche des données de la synthèse des consommations : \n\n%s") % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False
def __do_layout(self): grid_sizer_base = wx.FlexGridSizer(rows=5, cols=2, vgap=5, hgap=5) # Port grid_sizer_base.Add(self.label_port, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, 0) grid_sizer_base.Add(self.ctrl_port, 0, wx.ALL, 0) # Hote grid_sizer_base.Add(self.label_hote, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, 0) grid_sizer_base.Add(self.ctrl_hote, 1, wx.EXPAND | wx.ALL, 0) # User grid_sizer_base.Add(self.label_user, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, 0) grid_sizer_base.Add(self.ctrl_user, 1, wx.EXPAND | wx.ALL, 0) # Mot de passe grid_sizer_base.Add(self.label_mdp, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, 0) grid_sizer_base.Add(self.ctrl_mdp, 1, wx.EXPAND | wx.ALL, 0) grid_sizer_base.AddGrowableCol(1) self.SetSizer(grid_sizer_base) grid_sizer_base.Fit(self) self.Layout() self.ctrl_port.SetToolTipString(_(u"Le numéro de port est 3306 par défaut.")) self.ctrl_hote.SetToolTipString(_(u"Indiquez ici le nom du serveur hôte.")) self.ctrl_user.SetToolTipString(_(u"Indiquez ici le nom de l'utilisateur. Ce nom doit avoir été validé par le créateur du fichier.")) self.ctrl_mdp.SetToolTipString(_(u"Indiquez ici le mot de passe nécessaire à la connexion à MySQL"))
def __init__(self, parent): HTL.HyperTreeList.__init__(self, parent, -1) self.parent = parent self.typeListe = "journ" # ou "period" self.listeActivites = [] # Importation des données self.dictTracks, self.dictActivites, self.dictInitial = self.Importation() # Création des colonnes listeColonnes = [ ( _(u"Activité / Unité"), 160, wx.ALIGN_LEFT), ( _(u"Abrégé"), 50, wx.ALIGN_LEFT), ( _(u"Type"), 90, wx.ALIGN_LEFT), ( _(u"Affichage"), LARGEUR_COLONNE_AFFICHAGE, wx.ALIGN_LEFT), ## ( _(u"Ordre"), 40, wx.ALIGN_CENTER), ] numColonne = 0 for label, largeur, alignement in listeColonnes : self.AddColumn(label) self.SetColumnWidth(numColonne, largeur) self.SetColumnAlignment(numColonne, alignement) numColonne += 1 self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnContextMenu) self.SetBackgroundColour(wx.WHITE) self.SetAGWWindowStyleFlag(wx.TR_ROW_LINES | wx.TR_COLUMN_LINES |wx.TR_HIDE_ROOT | wx.TR_HAS_BUTTONS | wx.TR_HAS_VARIABLE_ROW_HEIGHT | wx.TR_FULL_ROW_HIGHLIGHT ) # HTL.TR_NO_HEADER self.EnableSelectionVista(True)
def OnContextMenu(self, event): """Ouverture du menu contextuel """ item = self.GetSelection() dictItem = self.GetMainWindow().GetItemPyData(item) # Création du menu contextuel menuPop = wx.Menu() # Item Monter item = wx.MenuItem(menuPop, 10, _(u"Monter")) bmp = wx.Bitmap("Images/16x16/Fleche_haut.png", wx.BITMAP_TYPE_PNG) item.SetBitmap(bmp) menuPop.AppendItem(item) self.Bind(wx.EVT_MENU, self.Monter, id=10) # Item Descendre item = wx.MenuItem(menuPop, 20, _(u"Descendre")) bmp = wx.Bitmap("Images/16x16/Fleche_bas.png", wx.BITMAP_TYPE_PNG) item.SetBitmap(bmp) menuPop.AppendItem(item) self.Bind(wx.EVT_MENU, self.Descendre, id=20) menuPop.AppendSeparator() # Item Descendre item = wx.MenuItem(menuPop, 30, _(u"Réinitialiser")) bmp = wx.Bitmap("Images/16x16/Actualiser.png", wx.BITMAP_TYPE_PNG) item.SetBitmap(bmp) menuPop.AppendItem(item) self.Bind(wx.EVT_MENU, self.Reinit, id=30) # Finalisation du menu self.PopupMenu(menuPop) menuPop.Destroy()
def OnBoutonActualiser(self, event): IDactivite = self.ctrl_activite.GetID() if IDactivite == None : dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement sélectionner une activité !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_activite.SetFocus() return False date_debut = self.ctrl_date_debut.GetDate() if date_debut == None : dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement saisir une date de début !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_date_debut.SetFocus() return False date_fin = self.ctrl_date_fin.GetDate() if date_fin == None : dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement saisir une date de fin !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_date_fin.SetFocus() return False self.ctrl_individus.SetPeriode(date_debut, date_fin) self.ctrl_individus.SetActivite(IDactivite) self.ctrl_individus.MAJ()
def __init__(self, parent): wx.Dialog.__init__(self, parent, -1, name="DLG_Console_python", style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.THICK_FRAME) self.parent = parent # Bandeau intro = _(u"Cette console Python intégrée à Noethys peut être utilisée à des fins de débogage.") titre = _(u"Console Python") self.SetTitle(titre) self.ctrl_bandeau = CTRL_Bandeau.Bandeau(self, titre=titre, texte=intro, hauteurHtml=30, nomImage="Images/32x32/Python.png") # Contenu self.ctrl = py.crust.Crust(self, intro=u"") self.shell = self.ctrl.shell # Commandes self.bouton_aide = CTRL_Bouton_image.CTRL(self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png") self.bouton_fermer = CTRL_Bouton_image.CTRL(self, id=wx.ID_CANCEL, texte=_(u"Fermer"), cheminImage="Images/32x32/Fermer.png") self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) # Initialisation wx.CallAfter(self.Initialisation)
def GetPresents(self): if self.radio_inscrits.GetValue() == True : # Tous les inscrits return None else: # Uniquement les présents date_debut = self.ctrl_date_debut.GetDate() if self.ctrl_date_debut.FonctionValiderDate() == False or date_debut == None : dlg = wx.MessageDialog(self, _(u"La date de début ne semble pas valide !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_date_debut.SetFocus() return False date_fin = self.ctrl_date_fin.GetDate() if self.ctrl_date_fin.FonctionValiderDate() == False or date_fin == None : dlg = wx.MessageDialog(self, _(u"La date de fin ne semble pas valide !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_date_fin.SetFocus() return False if date_debut > date_fin : dlg = wx.MessageDialog(self, _(u"La date de début est supérieure à la date de fin !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_date_fin.SetFocus() return False return (date_debut, date_fin)
def __init__(self, parent): wx.Panel.__init__(self, parent, id=-1, name="panel_parametres", style=wx.TAB_TRAVERSAL) self.parent = parent # Activités self.staticbox_activites_staticbox = wx.StaticBox(self, -1, _(u"Activités")) self.ctrl_activites = CTRL_Selection_activites.CTRL(self) self.ctrl_activites.SetMinSize((-1, 90)) # Inscrits / Présents self.staticbox_presents_staticbox = wx.StaticBox(self, -1, _(u"Options")) self.ctrl_options = Options(self) # Villes self.staticbox_villes_staticbox = wx.StaticBox(self, -1, _(u"Filtre Villes")) self.ctrl_villes = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE) # Boutons afficher self.bouton_afficher = CTRL_Bouton_image.CTRL(self, texte=_(u"Rafraîchir la liste"), cheminImage="Images/32x32/Actualiser.png") self.bouton_afficher.SetMinSize((-1, 50)) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnBoutonAfficher, self.bouton_afficher)
def __init__(self, parent): wx.Dialog.__init__(self, parent, -1, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.THICK_FRAME) self.parent = parent intro = _(u"Vous pouvez ici consulter et imprimer la liste des prestations par ville. Sélectionnez un ou plusieurs groupes d'activités ou certaines activités en particulier, puis saisissez une liste de villes à sélectionner, avant de cliquer sur le bouton 'Rafraîchir la liste' pour afficher les résultats.") titre = _(u"Liste des prestations par famille") self.SetTitle(titre) self.ctrl_bandeau = CTRL_Bandeau.Bandeau(self, titre=titre, texte=intro, hauteurHtml=30, nomImage="Images/32x32/Euro.png") self.ctrl_parametres = Parametres(self) self.ctrl_prestations = CTRL_Prestations_villes.CTRL(self) self.bouton_ouvrir_fiche = wx.BitmapButton(self, -1, wx.Bitmap("Images/16x16/Famille.png", wx.BITMAP_TYPE_ANY)) self.bouton_apercu = wx.BitmapButton(self, -1, wx.Bitmap("Images/16x16/Apercu.png", wx.BITMAP_TYPE_ANY)) self.bouton_aide = CTRL_Bouton_image.CTRL(self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png") self.bouton_fermer = CTRL_Bouton_image.CTRL(self, id=wx.ID_CANCEL, texte=_(u"Fermer"), cheminImage="Images/32x32/Fermer.png") self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OuvrirFiche, self.bouton_ouvrir_fiche) self.Bind(wx.EVT_BUTTON, self.Apercu, self.bouton_apercu) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) self.MAJ()
def OnLeftLink(self, event): """ Sélectionner les données à importer """ # Préparation de la liste des données listeDonnees = [] listePreSelections = [] index = 0 for nomCategorie, tables, selection in self.listeTablesImportation : listeDonnees.append(nomCategorie) if selection == True : listePreSelections.append(index) index += 1 # Boîte de dialogue sélections multiples titre = _(u"Importation des données") message = _(u"Sélectionnez les données que vous souhaitez importer :") dlg = wx.MultiChoiceDialog(self, message, titre, listeDonnees, wx.CHOICEDLG_STYLE) # Coche ceux qui doivent être déjà sélectionnés dans la liste dlg.SetSelections(listePreSelections) # Résultats if dlg.ShowModal() == wx.ID_OK: listeSelections = dlg.GetSelections() index = 0 for categorie in self.listeTablesImportation : if index in listeSelections : self.listeTablesImportation[index][2] = True else: self.listeTablesImportation[index][2] = False index += 1 if len(listeSelections) == 0 : self.checkbox_details.SetValue(False) dlg.Destroy() else: dlg.Destroy()
def Importation(self): """ Importation des données """ if self.track == None : return self.ctrl_famille.SetIDfamille(self.track.IDfamille) if self.track.prelevement_iban != None : self.ctrl_iban.SetValue(self.track.prelevement_iban) if self.track.prelevement_bic != None : self.ctrl_bic.SetValue(self.track.prelevement_bic) ## if self.track.prelevement_banque != None : self.ctrl_banque.SetID(self.track.prelevement_banque) self.ctrl_titulaire.SetValue(self.track.titulaire) if self.track.type == "manuel" : labelType = _(u"Saisie manuelle") elif self.track.type == "facture" : labelType = _(u"Facture") else : labelType = u"" self.ctrl_type.SetLabel(labelType) self.ctrl_libelle.SetValue(self.track.libelle) self.ctrl_montant.SetMontant(self.track.montant) if self.track.reglement == True : self.ctrl_reglement.SetLabel(_(u"Oui")) else : self.ctrl_reglement.SetLabel(_(u"Non")) if self.track.statut == "valide" : self.radio_etat_valide.SetValue(True) elif self.track.statut == "refus" : self.radio_etat_refus.SetValue(True) else : self.radio_etat_attente.SetValue(True) self.ctrl_sequence.SetCode(self.track.sequence)
def __init__(self, parent, IDactivite=None, IDtarif=None, nouveauTarif=True): wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL) self.parent = parent self.IDactivite = IDactivite self.IDtarif = IDtarif self.nouveauTarif = nouveauTarif self.label_combinaisons = wx.StaticText(self, -1, _(u"Saisissez les combinaisons conditionnelles :")) self.ctrl_combinaisons = ListBoxCombinaisons(self, IDactivite=IDactivite, IDtarif=IDtarif) self.bouton_ajouter_combi = wx.BitmapButton(self, -1, wx.Bitmap(u"Images/16x16/Ajouter.png", wx.BITMAP_TYPE_ANY)) self.bouton_modifier_combi = wx.BitmapButton(self, -1, wx.Bitmap(u"Images/16x16/Modifier.png", wx.BITMAP_TYPE_ANY)) self.bouton_supprimer_combi = wx.BitmapButton(self, -1, wx.Bitmap(u"Images/16x16/Supprimer.png", wx.BITMAP_TYPE_ANY)) # Etats self.label_etats = wx.StaticText(self, -1, _(u"Cochez les états conditionnels :")) self.ctrl_etats = CTRL_Etats(self, IDactivite) self.ctrl_etats.SetIDcoches(("reservation", "present", "absenti")) self.ctrl_etats.SetMinSize((150, 120)) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnAjouterCombi, self.bouton_ajouter_combi) self.Bind(wx.EVT_BUTTON, self.OnModifierCombi, self.bouton_modifier_combi) self.Bind(wx.EVT_BUTTON, self.OnSupprimerCombi, self.bouton_supprimer_combi) if self.IDtarif != None : self.Importation()
def __init__(self, parent): wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL) self.parent = parent self.label_modele = wx.StaticText(self, -1, _(u"Modèle :")) self.ctrl_modele = CTRL_Choix_modele.CTRL_Choice(self, categorie="cotisation") self.bouton_modele = wx.BitmapButton(self, -1, wx.Bitmap(u"Images/16x16/Mecanisme.png", wx.BITMAP_TYPE_ANY)) ## self.checkbox_coupon = wx.CheckBox(self, -1, _(u"Insérer le coupon-réponse")) self.label_repertoire = wx.StaticText(self, -1, _(u"Copie :")) self.checkbox_repertoire = wx.CheckBox(self, -1, _(u"Enregistrer une copie unique dans le répertoire :")) self.ctrl_repertoire = wx.TextCtrl(self, -1, u"") self.ctrl_repertoire.SetMinSize((270, -1)) self.bouton_repertoire = wx.BitmapButton(self, -1, wx.Bitmap(u"Images/16x16/Repertoire.png", wx.BITMAP_TYPE_ANY)) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnBoutonModele, self.bouton_modele) self.Bind(wx.EVT_CHECKBOX, self.OnCheckRepertoire, self.checkbox_repertoire) self.Bind(wx.EVT_BUTTON, self.OnBoutonRepertoire, self.bouton_repertoire) # Récupération des paramètres dans le CONFIG ## self.checkbox_coupon.SetValue(UTILS_Config.GetParametre("impression_rappels_coupon", defaut=1)) param = UTILS_Config.GetParametre("impression_cotisations_repertoire", defaut="") if param != "" : self.checkbox_repertoire.SetValue(True) self.ctrl_repertoire.SetValue(param) # Init contrôles self.OnCheckRepertoire(None)
def __set_properties(self): self.SetTitle(_(u"Saisie d'une action")) self.bouton_aide.SetToolTipString(_(u"Cliquez ici pour obtenir de l'aide")) self.bouton_ok.SetToolTipString(_(u"Cliquez ici pour valider")) self.bouton_annuler.SetToolTipString(_(u"Cliquez ici pour annuler")) self.ctrl_conditions.SetMinSize((400, -1)) self.SetMinSize((-1, 580))
def CreationIDindividu(self): nom = self.ctrl_nom.GetValue() if nom == "" : dlg = wx.MessageDialog(self, _(u"Vous devez saisir le nom du nouvel individu à créer !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_nom.SetFocus() return prenom = self.ctrl_prenom.GetValue() if prenom == "" : dlg = wx.MessageDialog(self, _(u"Vous devez saisir le prénom du nouvel individu à créer !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_prenom.SetFocus() return # Vérifie que l'individu n'existe pas déjà dans la liste for individu in self.ctrl_propositions.donnees : if Formate(individu.nom) == Formate(nom) and Formate(individu.prenom) == Formate(prenom) : dlg = wx.MessageDialog(self, _(u"Un individu portant ce nom existe déjà dans la liste ! \n\nSi vous souhaitez quand même créer un nouvel individu avec ce nom, cliquez sur OUI."), _(u"Confirmation"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_EXCLAMATION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES : return self.mode = "creation" self.EndModal(wx.ID_OK)
def OnBoutonOk(self, event): # Vérification de la saisie date_debut = self.GetDateDebut() date_fin = self.GetDateFin() if date_debut == None or self.ctrl_date_debut.Validation() == False : dlg = wx.MessageDialog(self, _(u"Vous devez saisir une date de début valide !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_date_debut.SetFocus() return if date_fin == None or self.ctrl_date_fin.Validation() == False : dlg = wx.MessageDialog(self, _(u"Vous devez saisir une date de fin valide !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_date_fin.SetFocus() return if date_debut > date_fin : dlg = wx.MessageDialog(self, _(u"La date de début ne peut pas être supérieure à la date de fin !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.ctrl_date_debut.SetFocus() return # Valide la saisie self.EndModal(wx.ID_OK)
def __set_properties(self): self.SetTitle(_(u"Saisie d'un forfait crédit")) self.ctrl_forfaits.SetToolTipString(_(u"Sélectionnez un forfait à créer")) self.bouton_aide.SetToolTipString(_(u"Cliquez ici obtenir de l'aide")) self.bouton_ok.SetToolTipString(_(u"Cliquez ici pour valider")) self.bouton_annuler.SetToolTipString(_(u"Cliquez ici pour annuler")) self.SetMinSize((-1, 640))
def Validation(self): """ Vérification des donnéees """ if self.dictDonnees.has_key(self.code) == False : dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement sélectionner une méthode de calcul !"), "Erreur", wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False for numLigne, dictColonnes in self.dictDonnees[self.code].iteritems() : numColonne = 0 for indexChamp in self.listeColonnes : codeChamp = LISTE_COLONNES[indexChamp]["code"] label = LISTE_COLONNES[indexChamp]["label"] if codeChamp in self.champs_obligatoires : # Vérifie la valeur if dictColonnes.has_key(numColonne) == False : dlg = wx.MessageDialog(self, _(u"Vous devez obligatoirement renseigner la colonne '%s' de la ligne %d !") % (label, numLigne+1), "Erreur", wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False else: valeur = dictColonnes[numColonne] # ICI, PEUT-ETRE PROGRAMMER UNE VERIF DE LA VALEUR PLUS PRECISE... numColonne += 1 return True
def __set_properties(self): self.bouton_ajouter.SetToolTipString(_(u"Cliquez ici pour ajouter un modèle")) self.bouton_modifier.SetToolTipString(_(u"Cliquez ici pour modifier le modèle sélectionné dans la liste")) self.bouton_supprimer.SetToolTipString(_(u"Cliquez ici pour supprimer le modèle sélectionné dans la iste")) self.bouton_aide.SetToolTipString(_(u"Cliquez ici pour obtenir de l'aide")) self.bouton_fermer.SetToolTipString(_(u"Cliquez ici pour fermer")) self.SetMinSize((750, 600))
def __init__(self, parent, listeChoix=[]): wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL) self.parent = parent self.listeChoix = listeChoix self.listeChoix.append(("date:", _(u"La date suivante"))) self.label_date = wx.StaticText(self, -1, _(u"Date de facturation :")) choices = [] for code, label in self.listeChoix: choices.append(label) self.ctrl_choix = wx.Choice(self, -1, choices=choices) self.ctrl_choix.SetToolTipString(_(u"Sélectionnez la date de facturation de la prestation")) self.ctrl_date = CTRL_Saisie_date.Date2(self) grid_sizer_base = wx.FlexGridSizer(rows=1, cols=3, vgap=5, hgap=5) grid_sizer_base.Add(self.label_date, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) grid_sizer_base.Add(self.ctrl_choix, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND, 0) grid_sizer_base.Add(self.ctrl_date, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) grid_sizer_base.AddGrowableCol(1) self.SetSizer(grid_sizer_base) grid_sizer_base.Fit(self) self.Layout() self.Bind(wx.EVT_CHOICE, self.OnChoix, self.ctrl_choix) self.OnChoix()
def __init__(self, parent, IDactivite=None, IDtarif=None, nouveauTarif=False): wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL) self.parent = parent self.liste_pages = [ ("SIMPLE", _(u"Prestation simple"), Panel_type_sans_parametres(self, nouveauTarif)), ( "JOURN", _(u"Prestation journalière"), CTRL_Tarification_journ.Panel(self, IDactivite, IDtarif, nouveauTarif), ), ("FORFAIT", _(u"Forfait daté"), CTRL_Tarification_forfait.Panel(self, IDactivite, IDtarif, nouveauTarif)), ("CREDIT", _(u"Forfait crédit"), CTRL_Tarification_credit.Panel(self, IDactivite, IDtarif, nouveauTarif)), ] # Création des pages self.grid_sizer_pages = wx.FlexGridSizer(len(self.liste_pages), 1, 10, 10) self.dictPages = {} index = 0 for code, label, ctrl in self.liste_pages: self.grid_sizer_pages.Add(ctrl, 1, wx.EXPAND, 0) self.grid_sizer_pages.AddGrowableRow(index) ctrl.Show(False) self.dictPages[code] = {"index": index, "ctrl": ctrl} index += 1 # Layout self.grid_sizer_pages.AddGrowableCol(0) self.SetSizer(self.grid_sizer_pages)
def Menu_Supprimer(self, event): """ Suppression de la photo """ txtMessage = _(u"Souhaitez-vous vraiment supprimer cette photo ?") dlgConfirm = wx.MessageDialog(self, txtMessage, _(u"Confirmation de suppression"), wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION) reponse = dlgConfirm.ShowModal() dlgConfirm.Destroy() if reponse == wx.ID_NO: return # Suppression de la photo DB = GestionDB.DB(suffixe="PHOTOS") DB.ReqDEL("photos", "IDindividu", self.IDindividu) DB.Close() # Recherche la civilité de l'individu DB = GestionDB.DB() req = "SELECT IDcivilite FROM individus WHERE IDindividu=%d;" % self.IDindividu DB.ExecuterReq(req) IDcivilite = DB.ResultatReq()[0][0] if IDcivilite == None : return DB.Close() import DATA_Civilites as Civilites listeCivilites = Civilites.LISTE_CIVILITES for rubrique, civilites in listeCivilites : for civilite in civilites : if civilite[0] == IDcivilite : nomFichier = civilite[3] break nomFichier=u"Images/128x128/%s" % nomFichier # Applique l'image par défaut self.SetPhoto(self.IDindividu, nomFichier)
def Supprimer(self, event): if UTILS_Utilisateurs.VerificationDroitsUtilisateurActuel("parametrage_vaccins", "supprimer") == False : return if len(self.Selection()) == 0 : dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucun vaccin dans la liste"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return IDtype_vaccin = self.Selection()[0].IDtype_vaccin # Vérifie que ce type de vaccin n'a pas déjà été attribué à un individu DB = GestionDB.DB() req = """SELECT COUNT(IDvaccin) FROM vaccins WHERE IDtype_vaccin=%d ;""" % IDtype_vaccin DB.ExecuterReq(req) nbreVaccins = int(DB.ResultatReq()[0][0]) DB.Close() if nbreVaccins > 0 : dlg = wx.MessageDialog(self, _(u"Ce vaccin a déjà été attribué %d fois.\n\nVous ne pouvez donc pas le supprimer !") % nbreVaccins, _(u"Suppression impossible"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Confirmation de suppression dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment supprimer ce vaccin ?"), _(u"Suppression"), wx.YES_NO|wx.NO_DEFAULT|wx.CANCEL|wx.ICON_INFORMATION) if dlg.ShowModal() == wx.ID_YES : DB = GestionDB.DB() DB.ReqDEL("types_vaccins", "IDtype_vaccin", IDtype_vaccin) DB.ReqDEL("vaccins_maladies", "IDtype_vaccin", IDtype_vaccin) DB.Close() self.MAJ() dlg.Destroy()
def __init__(self, parent): wx.Panel.__init__(self, parent, id=-1, name="panel_parametres", style=wx.TAB_TRAVERSAL) self.parent = parent ## # Période ## self.staticbox_periode_staticbox = wx.StaticBox(self, -1, _(u"Date de référence")) ## self.ctrl_date = CTRL_Saisie_date.Date(self) ## self.ctrl_date.SetDate(datetime.date.today()) ## self.bouton_date = wx.BitmapButton(self, -1, wx.Bitmap(u"Images/16x16/Calendrier.png", wx.BITMAP_TYPE_ANY)) # Activités self.staticbox_activites_staticbox = wx.StaticBox(self, -1, _(u"Activités")) self.ctrl_activites = CTRL_Selection_activites.CTRL(self) self.ctrl_activites.SetMinSize((-1, 90)) # Inscrits / Présents self.staticbox_presents_staticbox = wx.StaticBox(self, -1, _(u"Options")) self.ctrl_options = Options(self) # Boutons afficher self.bouton_afficher = CTRL_Bouton_image.CTRL(self, texte=_(u"Rafraîchir la liste"), cheminImage="Images/32x32/Actualiser.png") self.bouton_afficher.SetMinSize((-1, 50)) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnBoutonAfficher, self.bouton_afficher)
def __init__(self, parent): wx.Dialog.__init__(self, parent, -1, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.THICK_FRAME) self.parent = parent intro = _(u"Vous pouvez ici consulter et imprimer la liste des régimes, caisses et numéros d'allocataire de chaque famille. Sélectionnez un ou plusieurs groupes d'activités ou certaines activités en particulier avant de cliquer sur le bouton 'Rafraîchir la liste' pour afficher les résultats.") titre = _(u"Liste des régimes et caisses") self.ctrl_bandeau = CTRL_Bandeau.Bandeau(self, titre=titre, texte=intro, hauteurHtml=30, nomImage="Images/32x32/Configuration2.png") self.ctrl_parametres = Parametres(self) self.ctrl_listview = OL_Liste_regimes.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_Liste_regimes.CTRL_Outils(self, listview=self.ctrl_listview) self.bouton_ouvrir_fiche = wx.BitmapButton(self, -1, wx.Bitmap("Images/16x16/Famille.png", wx.BITMAP_TYPE_ANY)) self.bouton_apercu = wx.BitmapButton(self, -1, wx.Bitmap("Images/16x16/Apercu.png", wx.BITMAP_TYPE_ANY)) self.bouton_imprimer = wx.BitmapButton(self, -1, wx.Bitmap("Images/16x16/Imprimante.png", wx.BITMAP_TYPE_ANY)) self.bouton_aide = CTRL_Bouton_image.CTRL(self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png") self.bouton_fermer = CTRL_Bouton_image.CTRL(self, id=wx.ID_CANCEL, texte=_(u"Fermer"), cheminImage="Images/32x32/Fermer.png") self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OuvrirFiche, self.bouton_ouvrir_fiche) self.Bind(wx.EVT_BUTTON, self.Apercu, self.bouton_apercu) self.Bind(wx.EVT_BUTTON, self.Imprimer, self.bouton_imprimer) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) self.MAJ(None)
def __init__(self, donnees, dictTitulaires): self.IDpiece = donnees[0] self.date_debut = UTILS_Dates.DateEngEnDateDD(donnees[1]) self.date_fin = UTILS_Dates.DateEngEnDateDD(donnees[2]) self.public = donnees[3] self.nomPiece = donnees[4] self.IDindividu = donnees[5] self.IDfamille = donnees[6] self.individu_nom = donnees[7] self.individu_prenom = donnees[8] # Nom Individu si pièce individuelle if self.individu_prenom == None : self.individu_nom_complet = self.individu_nom else : self.individu_nom_complet = u"%s %s" % (self.individu_nom, self.individu_prenom) # Nom Famille si pièce familiale if self.IDfamille != None : self.nom_titulaires = dictTitulaires[self.IDfamille]["titulairesSansCivilite"] else : self.nom_titulaires = "" # Type de pièce if self.public == "famille" : self.nomPublic = _(u"Familiale") else : self.nomPublic = _(u"Individuelle")
def __init__(self, *args, **kwds): wx.Frame.__init__(self, *args, **kwds) panel = wx.Panel(self, -1, name="test1") sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_1.Add(panel, 1, wx.ALL|wx.EXPAND) self.SetSizer(sizer_1) donnees = [ {"image" : wx.Bitmap("Images/16x16/Loupe.png", wx.BITMAP_TYPE_ANY), "label" : _(u"Item 1"), "description" : _(u"Ceci est la description de l'item 1 qui est vraiment un texte très long qui devrait normalement dépasser.")} , {"image" : wx.Bitmap("Images/16x16/Loupe.png", wx.BITMAP_TYPE_ANY), "label" : _(u"Item 2"), "description" : _(u"Ceci est la description de l'item 2")} , {"image" : None, "label" : _(u"Item 3"), "description" : _(u"Ceci est la description de l'item 3")} , {"label" : _(u"Item 4"), "description" : _(u"Ceci est la description de l'item 4")} , ] self.ctrl1 = CTRL(panel, donnees=donnees, nbreLignesDescription=1) self.ctrl1.Select(0) donnees = [] for x in range(1, 100) : donnees.append({"image" : wx.Bitmap("Images/32x32/Loupe.png", wx.BITMAP_TYPE_ANY), "label" : _(u"Item %d") % x, "description" : _(u"Ceci est la description de l'item %d") % x}) self.ctrl2 = CTRL(panel, donnees=donnees) ## self.ctrl2.Select(0) sizer_2 = wx.BoxSizer(wx.VERTICAL) sizer_2.Add(self.ctrl1, 0, wx.ALL | wx.EXPAND, 10) sizer_2.Add(self.ctrl2, 0, wx.ALL | wx.EXPAND, 10) panel.SetSizer(sizer_2) self.Layout() self.Bind(wx.EVT_COMBOBOX, self.OnSelection2, self.ctrl2)
def __init__(self, parent, IDactivite=None, IDtarif=None, nouveauTarif=False): wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL) self.parent = parent self.label_parametres = wx.StaticText(self, -1, _(u"Paramètres :")) self.ctrl_parametres = CTRL_Parametres(self, IDactivite=IDactivite, IDtarif=IDtarif, nouveauTarif=nouveauTarif) self.label_type = wx.StaticText(self, -1, _(u"Type de tarif :")) self.ctrl_type = Choix_type(self, liste_pages=self.ctrl_parametres.liste_pages) sizer_base = wx.BoxSizer(wx.VERTICAL) grid_sizer_base = wx.FlexGridSizer(rows=2, cols=2, vgap=10, hgap=10) grid_sizer_base.Add(self.label_type, 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 0) grid_sizer_base.Add(self.ctrl_type, 1, wx.EXPAND, 0) grid_sizer_base.Add(self.label_parametres, 0, wx.ALIGN_RIGHT, 0) grid_sizer_base.Add(self.ctrl_parametres, 1, wx.EXPAND, 0) grid_sizer_base.AddGrowableRow(1) grid_sizer_base.AddGrowableCol(1) sizer_base.Add(grid_sizer_base, 1, wx.EXPAND | wx.ALL, 10) self.SetSizer(sizer_base) sizer_base.Fit(self) # Binds self.Bind(wx.EVT_CHOICE, self.OnChoixType, self.ctrl_type) # Init contrôles self.SetType(code="SIMPLE")
def __set_properties(self): self.ctrl_date_debut.SetToolTipString(_(u"Saisissez la date de début")) self.ctrl_date_fin.SetToolTipString(_(u"Saisissez la date de fin")) self.bouton_aide.SetToolTipString(_(u"Cliquez ici pour obtenir de l'aide")) self.bouton_ok.SetToolTipString(_(u"Cliquez ici pour valider")) self.bouton_annuler.SetToolTipString(_(u"Cliquez ici pour annuler")) self.SetMinSize((500, 200))
def label(self, time, major=False): if major: # Example: Week 23 (1-7 Jan 2009) first_weekday = self.start(time) next_first_weekday = self.increment(first_weekday) last_weekday = next_first_weekday - timedelta(days=1) range_string = self._time_range_string(first_weekday, last_weekday) return (_(u"Semaine %s (%s)")) % (time.isocalendar()[1], range_string) # This strip should never be used as minor return ""
def GetDictCaisses(DB, dictParametres): # Vérifie si les données n'existent pas déj� global DICT_CAISSES if DICT_CAISSES["dictParametres"] == dictParametres: return DICT_CAISSES["dictResultats"] # Recherche des paramètres date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres) conditionsActivites = MODELES.GetConditionActivites(dictParametres) req = """SELECT IDcaisse, nom FROM caisses;""" DB.ExecuterReq(req) listeCaisses = DB.ResultatReq() dictCaisses = {} for IDcaisse, nom in listeCaisses: dictCaisses[IDcaisse] = nom if dictParametres["mode"] == "presents": req = """SELECT IDcaisse, COUNT(familles.IDfamille) FROM familles LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = familles.IDfamille LEFT JOIN consommations ON consommations.IDcompte_payeur = comptes_payeurs.IDcompte_payeur WHERE date>='%s' AND date<='%s' AND consommations.etat IN ('reservation', 'present') AND IDactivite IN %s GROUP BY IDcaisse, familles.IDfamille ;""" % (date_debut, date_fin, conditionsActivites) else: req = """SELECT IDcaisse, COUNT(familles.IDfamille) FROM familles LEFT JOIN comptes_payeurs ON comptes_payeurs.IDfamille = familles.IDfamille LEFT JOIN inscriptions ON inscriptions.IDcompte_payeur = comptes_payeurs.IDcompte_payeur WHERE inscriptions.statut='ok' AND IDactivite IN %s GROUP BY IDcaisse, familles.IDfamille ;""" % conditionsActivites DB.ExecuterReq(req) listeDonnees = DB.ResultatReq() if len(listeDonnees) == 0: return {} dictResultats = {} for IDcaisse, IDfamille in listeDonnees: if dictResultats.has_key(IDcaisse) == False: if dictCaisses.has_key(IDcaisse): nom = dictCaisses[IDcaisse] else: nom = _(u"Caisse inconnue") dictResultats[IDcaisse] = {"nom": nom, "nbreFamilles": 0} dictResultats[IDcaisse]["nbreFamilles"] += 1 # Mémorisation des résultats DICT_CAISSES["dictParametres"] = dictParametres DICT_CAISSES["dictResultats"] = dictResultats return dictResultats
def Archiver_familles(self, etat="archiver"): if etat == "archiver": valeur = "archive" label = _(u"archiver") elif etat == "desarchiver": valeur = None label = _(u"désarchiver") # Sélection des individus liste_individus = self.SelectionIndividus( intro=_(u"Cochez les individus à %s :") % label) if liste_individus == False: return False # Demande de confirmation dlg = wx.MessageDialog( None, _(u"Souhaitez-vous vraiment %s %d fiches familles et %d fiches individuelles ?" ) % (label, len(self.liste_familles), len(liste_individus)), _(u"Confirmation"), wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES: return False listeModifications = [] for IDfamille in self.liste_familles: listeModifications.append((valeur, IDfamille)) self.DB.Executermany("UPDATE familles SET etat=? WHERE IDfamille=?", listeModifications, commit=False) listeModifications = [] for IDindividu in liste_individus: listeModifications.append((valeur, IDindividu)) self.DB.Executermany("UPDATE individus SET etat=? WHERE IDindividu=?", listeModifications, commit=False) self.DB.Commit() return True
def CreationPDFunique(repertoireCible=""): dictPieces = {} dlgAttente = wx.BusyInfo( _(u"Génération des lettres de rappel à l'unité au format PDF..." ), None) wx.Yield() try: index = 0 for IDrappel, dictRappel in dictRappels.iteritems(): if dictRappel["select"] == True: num_rappel = dictRappel["num_rappel"] nomTitulaires = self.Supprime_accent( dictRappel["nomSansCivilite"]) nomFichier = _(u"Lettre de rappel %d - %s") % ( num_rappel, nomTitulaires) cheminFichier = u"%s/%s.pdf" % (repertoireCible, nomFichier) dictComptesTemp = {IDrappel: dictRappel} self.EcritStatusbar( _(u"Edition de la lettre de rappel %d/%d : %s") % (index, len(dictRappel), nomFichier)) UTILS_Impression_rappel.Impression( dictComptesTemp, dictOptions, IDmodele=dictOptions["IDmodele"], ouverture=False, nomFichier=cheminFichier) dictPieces[IDrappel] = cheminFichier index += 1 self.EcritStatusbar("") del dlgAttente return dictPieces except Exception, err: del dlgAttente traceback.print_exc(file=sys.stdout) dlg = wx.MessageDialog( None, _(u"Désolé, le problème suivant a été rencontré dans l'édition des lettres de rappel : \n\n%s" ) % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False
def A9080(): """ Création de la table DOCUMENTS """ from Data import DATA_Tables as Tables DB = GestionDB.DB(suffixe="DOCUMENTS", modeCreation=True) if DB.echec == 1: dlg = wx.MessageDialog(None, _(u"Erreur dans la création du fichier de documents.\n\nErreur : %s") % DB.erreur, _(u"Erreur de création de fichier"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False DB.CreationTables(Tables.DB_DOCUMENTS) DB.Close()
def InscriptionsSansIndividus(self): labelProbleme = _(u"Inscriptions sans individus associés") labelCorrection = _(u"Supprimer l'inscription") req = """SELECT IDinscription, inscriptions.IDactivite, activites.nom, inscriptions.date_inscription, inscriptions.IDindividu FROM inscriptions LEFT JOIN individus ON individus.IDindividu = inscriptions.IDindividu LEFT JOIN activites ON activites.IDactivite = inscriptions.IDactivite WHERE individus.IDindividu IS NULL;""" self.DB.ExecuterReq(req) listePrestations = self.DB.ResultatReq() listeTemp = [] for IDinscription, IDactivite, nomActivite, dateInscription, IDindividu in listePrestations: label = _(u"Individu ID%d inscrit le %s à l'activité %s") % ( IDindividu, UTILS_Dates.DateEngFr(dateInscription), nomActivite) listeTemp.append( InscriptionsSansIndividus(label=label, IDinscription=IDinscription, IDindividu=IDindividu)) self.listeResultats.append((labelProbleme, labelCorrection, listeTemp))
def LiensErrones(self): labelProbleme = _(u"Liens de parenté erronés") labelCorrection = _(u"Supprimer les liens erronés") req = """SELECT IDlien, IDfamille, IDindividu_sujet, IDtype_lien, IDindividu_objet, responsable, IDautorisation FROM liens ORDER BY IDlien;""" self.DB.ExecuterReq(req) listeDonnees = self.DB.ResultatReq() # Lecture des liens dictLiens = {} for IDlien, IDfamille, IDindividu_sujet, IDtype_lien, IDindividu_objet, responsable, IDautorisation in listeDonnees: key = (IDindividu_sujet, IDindividu_objet) if dictLiens.has_key(IDfamille) == False: dictLiens[IDfamille] = {} if dictLiens[IDfamille].has_key(key) == False: dictLiens[IDfamille][key] = [] dictLiens[IDfamille][key].append(IDlien) dictLiens[IDfamille][key].sort() # Analyse dictLiensASupprimer = {} for IDfamille, dictKeys in dictLiens.iteritems(): for key, listeIDlien in dictKeys.iteritems(): if len(listeIDlien) > 1: if dictLiensASupprimer.has_key(IDfamille) == False: dictLiensASupprimer[IDfamille] = [] # Suppression des liens obsolètes for IDlien in listeIDlien[1:]: dictLiensASupprimer[IDfamille].append(IDlien) # Mémorisation listeIDfamille = dictLiensASupprimer.keys() listeIDfamille.sort() listeTemp = [] for IDfamille in listeIDfamille: listeIDlien = dictLiensASupprimer[IDfamille] label = _(u"Famille ID%d : %d liens erronés") % (IDfamille, len(listeIDlien)) listeTemp.append( LiensErrones(label=label, IDfamille=IDfamille, listeIDlien=listeIDlien)) self.listeResultats.append((labelProbleme, labelCorrection, listeTemp))
def CreationPDFunique(repertoireCible=""): dictPieces = {} dlgAttente = wx.BusyInfo( _(u"Génération des PDF à l'unité en cours..."), None) try: index = 0 for IDinscription, dictInscription in dictInscriptions.iteritems( ): if dictInscription["select"] == True: nomTitulaires = self.Supprime_accent( dictInscription["{FAMILLE_NOM}"]) nomFichier = _(u"Inscription %d - %s") % ( IDinscription, nomTitulaires) cheminFichier = u"%s/%s.pdf" % (repertoireCible, nomFichier) dictComptesTemp = {IDinscription: dictInscription} self.EcritStatusbar( _(u"Edition de l'inscription %d/%d : %s") % (index, len(dictInscription), nomFichier)) UTILS_Impression_inscription.Impression( dictComptesTemp, dictOptions, IDmodele=dictOptions["IDmodele"], ouverture=False, nomFichier=cheminFichier) dictPieces[IDinscription] = cheminFichier index += 1 self.EcritStatusbar("") del dlgAttente return dictPieces except Exception, err: del dlgAttente traceback.print_exc(file=sys.stdout) dlg = wx.MessageDialog( None, _(u"Désolé, le problème suivant a été rencontré dans l'édition des inscriptions : \n\n%s" ) % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False
def Procedure(code=""): # Recherche si procédure existe if DICT_PROCEDURES.has_key(code) == False: dlg = wx.MessageDialog( None, _(u"Désolé, cette procédure n'existe pas..."), _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return titre = DICT_PROCEDURES[code] # Demande de confirmation de lancement dlg = wx.MessageDialog( None, _(u"Souhaitez-vous vraiment lancer la procédure suivante ?\n\n -> %s " ) % titre, _(u"Lancement de la procédure"), wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES: return # Lancement print "Lancement de la procedure '%s'..." % code try: exec("%s()" % code) except Exception, err: dlg = wx.MessageDialog( None, _(u"Désolé, une erreur a été rencontrée :\n\n-> %s ") % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return
def RechercheDonnees(self): self.listeResultats = [] EcritStatusbar( _(u"Recherche d'anomalies en cours... Veuillez patientez...")) try: dlgAttente = PBI.PyBusyInfo( _(u"Recherche d'anomalies en cours..."), parent=self.parent, title=_(u"Merci de patienter"), icon=wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Logo.png"), wx.BITMAP_TYPE_ANY)) wx.Yield() except: dlgAttente = None # Init DB self.DB = GestionDB.DB() # Recherches self.InscriptionsSansIndividus() self.CotisationsSansIndividus() self.CotisationsSansFamilles() self.PrestationsSansFamilles() self.VentilationsSansPrestations() self.VentilationsSansReglements() self.IndividusIncomplets() self.FamillesIncompletes() self.InscriptionsIncompletes() self.ConsommationsIncompletes() self.FacturesErronees() self.ConsommationsErronees() self.LiensTronques() self.RattachementsTronques() self.LiensErrones() self.VentilationExcessive() # Fermeture DB self.DB.Close() del dlgAttente EcritStatusbar("")
def VentilationsSansReglements(self): labelProbleme = _(u"Ventilations sans règlements associés") labelCorrection = _(u"Supprimer la ventilation") req = """SELECT IDventilation, IDprestation, ventilation.IDreglement, comptes_payeurs.IDfamille FROM ventilation LEFT JOIN reglements ON reglements.IDreglement = ventilation.IDreglement LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = ventilation.IDcompte_payeur WHERE reglements.IDreglement IS NULL;""" self.DB.ExecuterReq(req) listeDonnees = self.DB.ResultatReq() listeTemp = [] for IDventilation, IDprestation, IDreglement, IDfamille in listeDonnees: label = _( u"Ventilation ID%d pour la prestation ID%d et le règlement ID%d pour la famille ID%d" ) % (IDventilation, IDprestation, IDreglement, IDfamille) listeTemp.append( VentilationsSansReglements(label=label, IDventilation=IDventilation, IDprestation=IDprestation, IDreglement=IDreglement, IDfamille=IDfamille)) self.listeResultats.append((labelProbleme, labelCorrection, listeTemp))
def EnvoyerVersFTP(self, nomFichier=""): # Récupération des paramètres hote = UTILS_Config.GetParametre("synchro_ftp_hote", defaut="") identifiant = UTILS_Config.GetParametre("synchro_ftp_identifiant", defaut="") mdp = base64.b64decode(UTILS_Config.GetParametre("synchro_ftp_mdp", defaut="")) repertoire = UTILS_Config.GetParametre("synchro_ftp_repertoire", defaut="") # Envoyer le fichier dlgAttente = wx.BusyInfo(_(u"Envoi du fichier de données vers un répertoire FTP..."), None) try : ftp = ftplib.FTP(hote, identifiant, mdp) ftp.cwd(repertoire) fichier = open(nomFichier, "rb") ftp.storbinary("STOR %s" % os.path.basename(nomFichier), fichier) fichier.close() ftp.quit() except Exception, err : del dlgAttente dlg = wx.MessageDialog(None, _(u"Le fichier n'a pas pu être envoyé !\n\nVérifiez les paramètres de connexion FTP dans les paramètres de synchronisation."), "Erreur ", wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False
def Preview(self): if self.InitParametres() == False : return printPreview = self.printer.printout.GetPrintPreview() ## preview_window = PreviewFrame(printPreview, None, self.titre, self.orientation) printPreview.SetZoom(100) frame = wx.GetApp().GetTopWindow() preview_window = wx.PreviewFrame(printPreview, None, _(u"Aperçu avant impression")) preview_window.Initialize() preview_window.MakeModal(False) preview_window.SetPosition(frame.GetPosition()) preview_window.SetSize(frame.GetSize()) preview_window.Show(True)
def Extensions(ext="py"): """ Chargement d'une extension """ # Recherche d'extensions dans le répertoire chemin = os.curdir fichiers = os.listdir(chemin) fichiers.sort() listeExtensions = [] for fichier in fichiers: if fichier.endswith(ext): nomFichier = os.path.split(fichier)[1] titre = nomFichier[:-(len(ext) + 1)] listeExtensions.append(titre) if len(listeExtensions) == 0: dlg = wx.MessageDialog(None, _(u"Aucune extension n'est installée !"), _(u"Extensions"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False # Demande l'extension à charger dlg = wx.SingleChoiceDialog( None, _(u"Sélectionnez une extension dans la liste proposée :"), "Chargement d'une extension", listeExtensions) dlg.SetSize((500, 400)) dlg.CenterOnScreen() nomExtension = None if dlg.ShowModal() == wx.ID_OK: nomExtension = dlg.GetStringSelection() dlg.Destroy() if nomExtension == None: return False # Exécution de l'extension sys.path.append(chemin) module = importlib.import_module(nomExtension) module.Extension()
def RechercheDonnees(self): self.listeResultats = [] EcritStatusbar( _(u"Recherche d'anomalies en cours... Veuillez patienter...")) try: dlgAttente = wx.BusyInfo( _(u"Recherche d'anomalies en cours. Veuillez patienter..."), self.parent) wx.Yield() except: dlgAttente = None # Init DB self.DB = GestionDB.DB() # Recherches self.InscriptionsSansIndividus() self.CotisationsSansIndividus() self.CotisationsSansFamilles() self.PrestationsSansFamilles() self.VentilationsSansPrestations() self.VentilationsSansReglements() self.IndividusIncomplets() self.FamillesIncompletes() self.InscriptionsIncompletes() self.ConsommationsIncompletes() self.FacturesErronees() self.ConsommationsErronees() self.LiensTronques() self.RattachementsTronques() self.LiensErrones() self.VentilationExcessive() self.PrestationsFantomes() # Fermeture DB self.DB.Close() del dlgAttente EcritStatusbar("")
def GetTexte(self): self.RechercheDonnees() texte = u"" for labelProbleme, labelCorrection, listeDonnees in self.listeResultats : texte += u"<P><B>%s (%d) :</B><FONT SIZE=2><BR>" % (labelProbleme, len(listeDonnees)) if len(listeDonnees) > 0 : for anomalie in listeDonnees : texteCorrection = _(u"<A HREF='http://www.noethys.com'>Correction proposée : %s</A>") % labelCorrection texte += u" <IMG SRC='Static/Images/16x16/Interdit2.png'> %s. %s<BR>" % (anomalie.label, texteCorrection) else : texte += u" <IMG SRC='Static/Images/16x16/Ok4.png'> Aucune anomalie détectée...<BR>" texte += u"</FONT></P>" return texte
def MAJ(self, DB=None, dictParametres={}): self.dictParametres = dictParametres self.colonnes = [] self.lignes = [] self.totaux = [] # Recherche des paramètres date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres) conditionsActivites = MODELES.GetConditionActivites(dictParametres) dictResultats = GetDictMembres(DB, dictParametres) if dictParametres["mode"] == "presents" : self.nom = _(u"Nombre de membres présents") else: self.nom = _(u"Nombre de membres inscrits") # Création du tableau self.largeur = "400" self.colonnes = [ (_(u"Nombre de membres"), "250"), (_(u"Nombre de familles"), "150") ] self.lignes = [] for nbreMembres, nbreFamilles in dictResultats.iteritems() : self.lignes.append((nbreMembres, nbreFamilles)) self.lignes.sort()
def MAJ(self, DB=None, dictParametres={}): self.dictParametres = dictParametres self.colonnes = [] self.lignes = [] self.totaux = [] dictCaisses = GetDictCaisses(DB, dictParametres) # Création du tableau self.largeur = "400" self.colonnes = [ (_(u"Caisse"), "250"), (_(u"Nombre de familles"), "150") ] self.lignes = [] # Tri par nbre de familles listeCaisses = [] for IDcaisse, valeurs in dictCaisses.iteritems() : nbreFamilles = valeurs["nbreFamilles"] nomCaisse = valeurs["nom"] listeCaisses.append((nbreFamilles, nomCaisse)) listeCaisses.sort(reverse=True) for nbreFamilles, nomCaisse in listeCaisses : self.lignes.append((nomCaisse, nbreFamilles))
def CotisationsSansFamilles(self): labelProbleme = _(u"Cotisations sans familles associées") labelCorrection = _(u"Supprimer la cotisation") req = """SELECT IDcotisation, types_cotisations.nom, unites_cotisations.nom, cotisations.date_saisie, cotisations.IDfamille, cotisations.IDprestation FROM cotisations LEFT JOIN familles ON familles.IDfamille = cotisations.IDfamille LEFT JOIN types_cotisations ON types_cotisations.IDtype_cotisation = cotisations.IDtype_cotisation LEFT JOIN unites_cotisations ON unites_cotisations.IDunite_cotisation = cotisations.IDunite_cotisation WHERE familles.IDfamille IS NULL AND cotisations.IDfamille IS NOT NULL;""" self.DB.ExecuterReq(req) listeDonnees = self.DB.ResultatReq() listeTemp = [] for IDcotisation, nomType, nomUnite, dateSaisie, IDfamille, IDprestation in listeDonnees: label = _( u"Cotisation ID%d de type '%s - %s' saisie le %s pour la famille ID%d" ) % (IDcotisation, nomType, nomUnite, UTILS_Dates.DateEngFr(dateSaisie), IDfamille) listeTemp.append( CotisationsSansFamilles(label=label, IDcotisation=IDcotisation, IDfamille=IDfamille, IDprestation=IDprestation)) self.listeResultats.append((labelProbleme, labelCorrection, listeTemp))
def Ajouter(self, index=0, nbre=0): dlgAttente = PBI.PyBusyInfo( _(u"Merci de patienter durant l'opération... (%d/%d)") % (index + 1, nbre), parent=None, title=_(u"Patientez..."), icon=wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Logo.png"), wx.BITMAP_TYPE_ANY)) wx.Yield() # Importation self.dictID = {} self.DB = GestionDB.DB() importation = self.contenu[index] nom = importation["nom"] listeTables = importation["tables"] if importation.has_key("correspondances_speciales"): correspondances_speciales = importation[ "correspondances_speciales"] else: correspondances_speciales = [] self.Importer(listeTables, correspondances_speciales) self.DB.Close() del dlgAttente
def __set_properties(self): self.SetTitle(_(u"Envoyer le rapport à l'auteur")) self.label_ligne_1.SetFont(wx.Font(9, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) self.ctrl_commentaires.SetToolTip(wx.ToolTip(_(u"Vous pouvez saisir des commentaires ici"))) self.check_journal.SetToolTip(wx.ToolTip(_(u"Pour faciliter la résolution du bug, vous pouvez joindre votre rapport d'erreurs"))) self.bouton_apercu.SetToolTip(wx.ToolTip(_(u"Cliquez ici pour visualiser le contenu du message qui sera envoyé à l'auteur"))) self.bouton_envoyer.SetToolTip(wx.ToolTip(_(u"Cliquez ici pour envoyer le rapport et les commentaires à l'auteur"))) self.bouton_annuler.SetToolTip(wx.ToolTip(_(u"Cliquez ici pour annuler"))) self.SetMinSize((550, 350))
def MAJ(self, DB=None, dictParametres={}): self.dictParametres = dictParametres date_debut, date_fin = MODELES.GetDatesPeriode(dictParametres) conditionsActivites = MODELES.GetConditionActivites(dictParametres) # Recherche du nombre d'individus présents if dictParametres["mode"] == "presents": req = """SELECT COUNT(IDfamille) FROM consommations LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = consommations.IDcompte_payeur WHERE date>='%s' AND date<='%s' AND consommations.etat IN ('reservation', 'present') AND IDactivite IN %s GROUP BY comptes_payeurs.IDfamille ;""" % (date_debut, date_fin, conditionsActivites) else: req = """SELECT COUNT(comptes_payeurs.IDfamille) FROM inscriptions LEFT JOIN comptes_payeurs ON comptes_payeurs.IDcompte_payeur = inscriptions.IDcompte_payeur WHERE inscriptions.statut='ok' AND IDactivite IN %s GROUP BY comptes_payeurs.IDfamille ;""" % conditionsActivites DB.ExecuterReq(req) listeDonnees = DB.ResultatReq() if dictParametres["mode"] == "presents": mot = _(u"présent") else: mot = _(u"inscrit") if len(listeDonnees) == 0 or listeDonnees[0][0] == 0: self.texte = _(u"Aucune famille dont les membres sont %ss.") % mot else: self.texte = _(u"%d familles dont les membres sont %ss.") % ( len(listeDonnees), mot)
def ConversionReseauLocal(parent, nomFichier=""): # Demande le nom du nouveau fichier local from Dlg import DLG_Nouveau_fichier dlg = DLG_Nouveau_fichier.MyDialog(parent) dlg.SetTitle(_(u"Conversion d'un fichier réseau en fichier local")) dlg.radio_local.SetValue(True) dlg.OnRadioLocal(None) dlg.radio_local.Enable(False) dlg.radio_reseau.Enable(False) dlg.radio_internet.Enable(False) dlg.checkbox_details.Show(False) dlg.hyperlink_details.Show(False) dlg.DesactiveIdentite() dlg.CentreOnScreen() if dlg.ShowModal() == wx.ID_OK: nouveauFichier = dlg.GetNomFichier() dlg.Destroy() else: dlg.Destroy() return False # Vérifie que le fichier n'est pas déjà utilisé if os.path.isfile(UTILS_Fichiers.GetRepData(u"%s_DATA.dat" % nomFichier)) == True : dlg = wx.MessageDialog(parent, _(u"Le fichier existe déjà."), _(u"Erreur de création de fichier"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False nomFichierReseauFormate = nomFichier[nomFichier.index("[RESEAU]"):].replace("[RESEAU]", "") # Demande une confirmation pour la conversion message = _(u"Confirmez-vous la conversion du fichier réseau '%s' en fichier local portant le nom '%s' ? \n\nCette opération va durer quelques instants...\n\n(Notez que le fichier original sera toujours conservé)") % (nomFichierReseauFormate, nouveauFichier) dlg = wx.MessageDialog(parent, message, _(u"Confirmation de la conversion"), wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION) if dlg.ShowModal() == wx.ID_YES : dlg.Destroy() else: dlg.Destroy() return False # Lance la conversion parent.SetStatusText(_(u"Conversion du fichier en cours... Veuillez patienter...")) conversion = GestionDB.ConversionReseauLocal(nomFichier, nouveauFichier, parent) parent.SetStatusText(_(u"La conversion s'est terminée avec succès.")) dlg = wx.MessageDialog(None, _(u"La conversion s'est terminée avec succès. Le nouveau fichier a été créé."), "Information", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() return True
def Correction(self, DB=None): IDconso = self.kwds["IDconso"] heure_debut = self.kwds["heure_debut"] heure_fin = self.kwds["heure_fin"] date = self.kwds["date"] individu = self.kwds["individu"] if heure_debut != None: dlg = wx.TextEntryDialog( None, _(u"Corrigez l'heure de début de la consommation du %s de %s :\n\n(Obligatoirement au format HH:MM)" ) % (date.strftime("%d/%m/%Y"), individu), _(u"Correction d'une heure"), heure_debut) if dlg.ShowModal() == wx.ID_OK: DB.ReqMAJ("consommations", [ ("heure_debut", dlg.GetValue()), ], "IDconso", IDconso) self.corrige = True else: self.corrige = False dlg.Destroy() if heure_fin != None: dlg = wx.TextEntryDialog( None, _(u"Corrigez l'heure de fin de la consommation du %s de %s :\n\n(Obligatoirement au format HH:MM)" ) % (date.strftime("%d/%m/%Y"), individu), _(u"Correction d'une heure"), heure_fin) if dlg.ShowModal() == wx.ID_OK: DB.ReqMAJ("consommations", [ ("heure_fin", dlg.GetValue()), ], "IDconso", IDconso) self.corrige = True else: self.corrige = False dlg.Destroy()
def __init__(self, parent, intro=_(u"Cochez les individus à effacer :"), liste_familles=None, liste_individus=None): wx.Dialog.__init__(self, parent, -1, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX) self.parent = parent self.liste_familles = liste_familles self.liste_individus = liste_individus self.label_intro = wx.StaticText(self, -1, intro) self.ctrl_selection = CTRL_Selection(self, liste_familles=liste_familles, liste_individus=liste_individus) self.ctrl_selection.SetMinSize((700, 450)) # 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"Ok"), cheminImage="Images/32x32/Valider.png") self.bouton_annuler = CTRL_Bouton_image.CTRL( self, id=wx.ID_CANCEL, texte=_(u"Annuler"), cheminImage="Images/32x32/Annuler.png") self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnBoutonOk, self.bouton_ok) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
def __init__(self, preview, parent, title=_(u"Aperçu avant impression"), orientation=wx.PORTRAIT): wx.PyPreviewFrame.__init__(self, preview, parent, title) self.preview = preview self.orientation = orientation self.SetMinSize((650, 500)) self.controlBar = PreviewControlBar(self.preview, wx.PREVIEW_DEFAULT, self) self.SetControlBar(self.controlBar) previewCanvas = wx.PreviewCanvas(self.preview, self, style=wx.SUNKEN_BORDER) self.SetPreviewCanvas(previewCanvas) self.SetSize((900, 700)) self.CenterOnScreen()
def A8574(): """ Mise à niveau de la base de données """ import FonctionsPerso versionApplication = FonctionsPerso.GetVersionLogiciel() dlg = wx.TextEntryDialog( None, _(u"Saisissez le numéro de version à partir duquel vous souhaitez \neffectuer la mise à niveau ('x.x.x.x'):" ), _(u"Mise à niveau de la base de données"), versionApplication) reponse = dlg.ShowModal() version = dlg.GetValue() dlg.Destroy() if reponse != wx.ID_OK: return valide = True try: version = tuple([int(x) for x in version.split(".")]) except: valide = False if len(version) != 4: valide = False if valide == False: dlg = wx.MessageDialog( None, _(u"Impossible d'effectuer la procédure !\n\nLe numéro de version que vous avez saisi semble erroné. Vérifiez qu'il est formaté de la façon suivante : 'x.x.x.x'" ), _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False print "Procedure manuelle de mise a niveau de la base de donnee depuis la version : ", version DB = GestionDB.DB() resultat = DB.ConversionDB(version) DB.Close() print resultat
def LiensTronques(self): labelProbleme = _(u"Liens sans individus associés") labelCorrection = _(u"Supprimer le lien dans la base") req = """SELECT IDlien, IDindividu_sujet FROM liens LEFT JOIN individus ON individus.IDindividu = liens.IDindividu_sujet WHERE individus.IDindividu IS NULL ;""" self.DB.ExecuterReq(req) listeSujets = self.DB.ResultatReq() req = """SELECT IDlien, IDindividu_objet FROM liens LEFT JOIN individus ON individus.IDindividu = liens.IDindividu_objet WHERE individus.IDindividu IS NULL ;""" self.DB.ExecuterReq(req) listeObjets = self.DB.ResultatReq() listeTemp = [] for liste in (listeSujets, listeObjets) : for IDlien, IDindividu in liste : label = _(u"Lien ID%d (Individu ID%d)") % (IDlien, IDindividu) listeTemp.append(LiensTronques(label=label, IDlien=IDlien, IDindividu=IDindividu)) self.listeResultats.append((labelProbleme, labelCorrection, listeTemp))
def A5200(): """ Arrondi de toutes les prestations et ventilations de la base de données !!! """ import wx.lib.agw.pybusyinfo as PBI from UTILS_Decimal import FloatToDecimal as FloatToDecimal DB = GestionDB.DB() dlgAttente = PBI.PyBusyInfo(_(u"Veuillez patienter durant la procédure... Celle-ci peut nécessiter quelques minutes..."), parent=None, title=_(u"Veuillez patienter..."), icon=wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Logo.png"), wx.BITMAP_TYPE_ANY)) wx.Yield() # Récupère les prestations req = """SELECT IDprestation, montant FROM prestations;""" DB.ExecuterReq(req) listePrestations = DB.ResultatReq() # Récupère la ventilation req = """SELECT IDventilation, montant FROM ventilation;""" DB.ExecuterReq(req) listeVentilations = DB.ResultatReq() # Modification des arrondis total = len(listePrestations) + len(listeVentilations) index = 0 for IDprestation, montant in listePrestations : EcritStatusbar(_(u"Correction des arrondis... Merci de patienter... -> %d %% effectués") % (index * 100 / total)) DB.ReqMAJ("prestations", [("montant", FloatToDecimal(montant, plusProche=True)),], "IDprestation", IDprestation) index += 1 for IDventilation, montant in listeVentilations : EcritStatusbar(_(u"Correction des arrondis... Merci de patienter... - > %d %% effectués") % (index * 100 / total)) DB.ReqMAJ("ventilation", [("montant", FloatToDecimal(montant, plusProche=True)),], "IDventilation", IDventilation) index += 1 DB.Close() EcritStatusbar(u"") del dlgAttente
def MAJ(self, figure=None, DB=None, dictParametres={}): self.dictParametres = dictParametres # Création du graph ax = figure.add_subplot(111) dictCaisses = GetDictCaisses(DB, dictParametres) listeValeurs = [] listeLabels = [] listeCouleurs = [] # Tri par nbre de familles listeCaisses = [] nbreTotalFamilles = 0 for IDcaisse, valeurs in dictCaisses.iteritems(): nbreFamilles = valeurs["nbreFamilles"] nomCaisse = valeurs["nom"] listeCaisses.append((nbreFamilles, nomCaisse)) nbreTotalFamilles += nbreFamilles listeCaisses.sort(reverse=True) index = 1 for nbreFamilles, nomCaisse in listeCaisses: listeValeurs.append(nbreFamilles) listeLabels.append(nomCaisse) couleur = 1.0 * nbreFamilles / nbreTotalFamilles couleur = matplotlib.cm.hsv(index * 0.1) listeCouleurs.append(couleur) index += 1 cam = ax.pie(listeValeurs, labels=listeLabels, colors=listeCouleurs, autopct='%1.1f%%', shadow=False) title = ax.set_title( _(u"Répartition par caisse"), weight="bold", horizontalalignment='center') #, position=(0.5, 0.97)) matplotlib.pyplot.setp(title, rotation=0, fontsize=9) ax.set_aspect(1) labels, labelsPourcent = cam[1], cam[2] matplotlib.pyplot.setp(labels, rotation=0, fontsize=9) matplotlib.pyplot.setp(labelsPourcent, rotation=0, fontsize=9) return figure