def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, style=wx.TAB_TRAVERSAL) self.barreTitre = FonctionsPerso.BarreTitre( self, _(u"Les types de qualifications"), u"") texteIntro = _( u"Vous pouvez ici ajouter, modifier ou supprimer des types de qualifications. Exemples : 'B.A.F.A', 'A.F.P.S.', etc... N'oubliez pas de\ncréer ensuite créer le type de pièces correspondants." ) self.label_introduction = FonctionsPerso.StaticWrapText( self, -1, texteIntro) self.listCtrl_TypesDiplomes = ListCtrlTypesDiplomes(self) self.listCtrl_TypesDiplomes.SetMinSize((20, 20)) self.bouton_ajouter = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ajouter.png"), wx.BITMAP_TYPE_ANY)) self.bouton_modifier = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Modifier.png"), wx.BITMAP_TYPE_ANY)) self.bouton_supprimer = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Supprimer.png"), wx.BITMAP_TYPE_ANY)) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnBoutonAjouter, self.bouton_ajouter) self.Bind(wx.EVT_BUTTON, self.OnBoutonModifier, self.bouton_modifier) self.Bind(wx.EVT_BUTTON, self.OnBoutonSupprimer, self.bouton_supprimer)
def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, style=wx.TAB_TRAVERSAL) self.barreTitre = FonctionsPerso.BarreTitre(self, _(u"Les types de pièces"), u"") texteIntro = _( u"Vous pouvez ici ajouter, modifier ou supprimer des types de pièces. Ce sont les documents que les employés doivent vous communiquer.\nCelles-ci peuvent être obligatoire pour tous (Exemple : 'Certificat médical'...) ou être obligatoire en fonction du diplôme détenu par la\npersonne (Exemple, si une personne a le diplôme 'A.F.P.S.', elle devra donner la pièce 'Diplôme A.F.P.S.'). Vous devez préciser une durée\nde validité par défaut pour chaque pièce." ) self.label_introduction = FonctionsPerso.StaticWrapText( self, -1, texteIntro) self.listCtrl_TypesPieces = ListCtrlTypesPieces(self) self.listCtrl_TypesPieces.SetMinSize((20, 20)) self.bouton_ajouter = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ajouter.png"), wx.BITMAP_TYPE_ANY)) self.bouton_modifier = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Modifier.png"), wx.BITMAP_TYPE_ANY)) self.bouton_supprimer = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Supprimer.png"), wx.BITMAP_TYPE_ANY)) self.__set_properties() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnBoutonAjouter, self.bouton_ajouter) self.Bind(wx.EVT_BUTTON, self.OnBoutonModifier, self.bouton_modifier) self.Bind(wx.EVT_BUTTON, self.OnBoutonSupprimer, self.bouton_supprimer)
def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, style=wx.TAB_TRAVERSAL) self.barreTitre = FonctionsPerso.BarreTitre( self, _(u"Configuration de la liste"), u"") texteIntro = _( u"Vous pouvez ici modifier les options d'affichage de la liste :") self.label_introduction = FonctionsPerso.StaticWrapText( self, -1, texteIntro) self.listCtrl = ListCtrl(self) self.listCtrl.SetMinSize((20, 20)) self.bouton_haut = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Fleche_haut.png"), wx.BITMAP_TYPE_ANY)) self.bouton_bas = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Fleche_bas.png"), wx.BITMAP_TYPE_ANY)) self.bouton_reinit = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Actualiser.png"), wx.BITMAP_TYPE_ANY)) self.__set_properties() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnBoutonReinit, self.bouton_reinit) self.Bind(wx.EVT_BUTTON, self.OnBoutonHaut, self.bouton_haut) self.Bind(wx.EVT_BUTTON, self.OnBoutonBas, self.bouton_bas) self.bouton_haut.Enable(False) self.bouton_bas.Enable(False)
def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, style=wx.TAB_TRAVERSAL, name="panel_config_pays") self.barreTitre = FonctionsPerso.BarreTitre(self, _(u"Les pays et nationalités"), u"") texteIntro = _(u"Vous pouvez ici ajouter, modifier ou supprimer des pays et les nationalités correspondantes :") self.label_introduction = FonctionsPerso.StaticWrapText(self, -1, texteIntro) self.listCtrl = ListCtrl(self) self.listCtrl.SetMinSize((20, 20)) self.bouton_ajouter = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ajouter.png"), wx.BITMAP_TYPE_ANY)) self.bouton_modifier = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Modifier.png"), wx.BITMAP_TYPE_ANY)) self.bouton_supprimer = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Supprimer.png"), wx.BITMAP_TYPE_ANY)) self.bouton_aide = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Aide.png"), wx.BITMAP_TYPE_ANY)) if parent.GetName() != "treebook_configuration" : self.bouton_aide.Show(False) self.__set_properties() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnBoutonAjouter, self.bouton_ajouter) self.Bind(wx.EVT_BUTTON, self.OnBoutonModifier, self.bouton_modifier) self.Bind(wx.EVT_BUTTON, self.OnBoutonSupprimer, self.bouton_supprimer) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) self.bouton_modifier.Enable(False) self.bouton_supprimer.Enable(False)
def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, style=wx.TAB_TRAVERSAL, name="config_typeContrat") self.barreTitre = FonctionsPerso.BarreTitre(self, _(u"Les types de contrats"), u"") texteIntro = _(u"Vous pouvez ici créer, modifier ou supprimer les types de contrats qui sont utilisés dans la création des\ncontrats. Exemples : 'Contrat à Durée Déterminée' ou 'Contrat à Durée Indéterminée', etc...") self.label_introduction = FonctionsPerso.StaticWrapText(self, -1, texteIntro) self.listCtrl = ListCtrl(self) self.listCtrl.SetMinSize((20, 20)) self.bouton_ajouter = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ajouter.png"), wx.BITMAP_TYPE_ANY)) self.bouton_modifier = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Modifier.png"), wx.BITMAP_TYPE_ANY)) self.bouton_supprimer = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Supprimer.png"), wx.BITMAP_TYPE_ANY)) self.bouton_aide = wx.BitmapButton(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Aide.png"), wx.BITMAP_TYPE_ANY)) if parent.GetName() != "treebook_configuration" : self.bouton_aide.Show(False) self.__set_properties() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnBoutonAjouter, self.bouton_ajouter) self.Bind(wx.EVT_BUTTON, self.OnBoutonModifier, self.bouton_modifier) self.Bind(wx.EVT_BUTTON, self.OnBoutonSupprimer, self.bouton_supprimer) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) self.bouton_modifier.Enable(False) self.bouton_supprimer.Enable(False)
def MaJ_header(self): # MàJ de l'affichage de ID : if self.IDpersonne == 0: ID = "Attribution de l'ID en cours" else: ID = self.IDpersonne # MàJ de l'affichage du contrat en cours : if self.contratEnCours == None: txtContrat = _(u"Aucun contrat en cours") else: date_debut = FonctionsPerso.DateEngFr(self.contratEnCours[1]) if self.contratEnCours[2] == "2999-01-01": txtContrat = _(u"Contrat en cours : ") + self.contratEnCours[ 0] + " depuis le " + date_debut + _(u" (Durée ind.)") else: date_fin = FonctionsPerso.DateEngFr(self.contratEnCours[2]) date_rupture = FonctionsPerso.DateEngFr(self.contratEnCours[3]) if date_rupture != "//": date_fin = date_rupture txtContrat = _(u"Contrat en cours : ") + self.contratEnCours[ 0] + " du " + date_debut + " au " + date_fin # Affichage self.label_hd_CatId.SetLabel(txtContrat + " | ID : " + str(ID)) try: self.sizer_header_textes.Layout() except: pass
def __init__(self, dictValeurs={}, dictOptions={}, IDmodele=None, ouverture=True, nomFichier=None): """ Impression """ global DICT_VALEURS, DICT_OPTIONS DICT_VALEURS = dictValeurs DICT_OPTIONS = dictOptions # Initialisation du document if nomFichier == None: nomDoc = FonctionsPerso.GenerationNomDoc("LOCATIONS", "pdf") else: nomDoc = nomFichier doc = BaseDocTemplate(nomDoc, pagesize=TAILLE_PAGE, showBoundary=False) # Mémorise le ID du modèle modeleDoc = DLG_Noedoc.ModeleDoc(IDmodele=IDmodele) doc.modeleDoc = modeleDoc # Importe le template de la première page doc.addPageTemplates(MyPageTemplate(pageSize=TAILLE_PAGE, doc=doc)) story = [] styleSheet = getSampleStyleSheet() h3 = styleSheet['Heading3'] styleTexte = styleSheet['BodyText'] styleTexte.fontName = "Helvetica" styleTexte.fontSize = 9 styleTexte.borderPadding = 9 styleTexte.leading = 12 # ----------- Insertion du contenu des frames -------------- listeLabels = [] for IDlocation, dictValeur in dictValeurs.iteritems(): listeLabels.append((dictValeur["{FAMILLE_NOM}"], IDlocation)) listeLabels.sort() for labelDoc, IDlocation in listeLabels: dictValeur = dictValeurs[IDlocation] if dictValeur["select"] == True: story.append(DocAssign("IDlocation", IDlocation)) nomSansCivilite = dictValeur["{FAMILLE_NOM}"] story.append(Bookmark(nomSansCivilite, str(IDlocation))) # Saut de page story.append(PageBreak()) # Finalisation du PDF doc.build(story) # Ouverture du PDF if ouverture == True: FonctionsPerso.LanceFichierExterne(nomDoc)
def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, name="panel_config_password", style=wx.TAB_TRAVERSAL) self.barreTitre = FonctionsPerso.BarreTitre( self, _(u"Protection par mot de passe"), u"") texteIntro = _( u"Vous pouvez protéger l'accès à ce fichier par un mot de passe. L'utilisateur de ce fichier devra\nainsi saisir le mot de passe à son ouverture. Cochez la case et saisissez le mot de passe souhaité\nà deux reprises. Pour désactiver la protection, il vous suffit de décocher cette case." ) self.label_introduction = FonctionsPerso.StaticWrapText( self, -1, texteIntro) self.staticbox = wx.StaticBox(self, -1, _(u"Protection")) self.checkBox = wx.CheckBox( self, -1, _(u"Activer la protection par mot de passe")) self.MAJ_checkBox() self.bouton_aide = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Aide.png"), wx.BITMAP_TYPE_ANY)) self.bouton_aide.SetToolTip( wx.ToolTip(_(u"Cliquez ici pour obtenir de l'aide"))) if parent.GetName() != "treebook_configuration": self.bouton_aide.Show(False) self.Bind(wx.EVT_CHECKBOX, self.OnCheck, self.checkBox) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) # Layout grid_sizer_principal = wx.FlexGridSizer(rows=5, cols=1, vgap=0, hgap=0) grid_sizer_principal.Add(self.barreTitre, 1, wx.EXPAND, 0) grid_sizer_principal.Add(self.label_introduction, 1, wx.ALL | wx.EXPAND, 10) staticbox = wx.StaticBoxSizer(self.staticbox, wx.VERTICAL) staticbox.Add(self.checkBox, 1, wx.EXPAND | wx.ALL, 10) grid_sizer_principal.Add(staticbox, 1, wx.ALL | wx.EXPAND, 10) grid_sizer_principal.Add((20, 20), 0, wx.ALL | wx.EXPAND, 10) grid_sizer_boutons = wx.FlexGridSizer(rows=1, cols=2, vgap=5, hgap=10) grid_sizer_boutons.Add((5, 5), 0, 0, 0) grid_sizer_boutons.Add(self.bouton_aide, 0, 0, 0) grid_sizer_boutons.AddGrowableCol(0) grid_sizer_principal.Add(grid_sizer_boutons, 1, wx.EXPAND | wx.ALL, 10) grid_sizer_principal.AddGrowableRow(3) grid_sizer_principal.AddGrowableCol(0) self.SetSizer(grid_sizer_principal) grid_sizer_principal.Fit(self)
def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, style=wx.TAB_TRAVERSAL, name="config_adresses_mail") self.barreTitre = FonctionsPerso.BarreTitre( self, _(u"Les adresses d'expéditeur"), u"") texteIntro = _( u"Vous pouvez ici créer, modifier ou supprimer les adresses mail d'expéditeur qui sont\nnécessaires à l'envoi de mails." ) self.label_introduction = FonctionsPerso.StaticWrapText( self, -1, texteIntro) self.listCtrl = ListCtrl(self) self.listCtrl.SetMinSize((20, 20)) self.bouton_ajouter = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ajouter.png"), wx.BITMAP_TYPE_ANY)) self.bouton_modifier = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Modifier.png"), wx.BITMAP_TYPE_ANY)) self.bouton_supprimer = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Supprimer.png"), wx.BITMAP_TYPE_ANY)) self.bouton_defaut = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ok.png"), wx.BITMAP_TYPE_ANY)) self.bouton_aide = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Aide.png"), wx.BITMAP_TYPE_ANY)) if parent.GetName() != "treebook_configuration": self.bouton_aide.Show(False) self.__set_properties() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnBoutonAjouter, self.bouton_ajouter) self.Bind(wx.EVT_BUTTON, self.OnBoutonModifier, self.bouton_modifier) self.Bind(wx.EVT_BUTTON, self.OnBoutonSupprimer, self.bouton_supprimer) self.Bind(wx.EVT_BUTTON, self.OnBoutonDefaut, self.bouton_defaut) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) self.bouton_modifier.Enable(False) self.bouton_supprimer.Enable(False)
def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, style=wx.TAB_TRAVERSAL) self.barreTitre = FonctionsPerso.BarreTitre(self, _(u"Gestion des gadgets"), u"") texteIntro = _( u"Vous pouvez ici modifier les options des gadgets de la page d'accueil." ) self.label_introduction = FonctionsPerso.StaticWrapText( self, -1, texteIntro) self.listCtrl = ListCtrl(self) self.listCtrl.SetMinSize((20, 20)) self.bouton_options = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Outils.png"), wx.BITMAP_TYPE_ANY)) self.bouton_reinit = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Actualiser.png"), wx.BITMAP_TYPE_ANY)) self.bouton_haut = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Fleche_haut.png"), wx.BITMAP_TYPE_ANY)) self.bouton_bas = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Fleche_bas.png"), wx.BITMAP_TYPE_ANY)) self.bouton_aide = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Aide.png"), wx.BITMAP_TYPE_ANY)) if parent.GetName() != "treebook_configuration": self.bouton_aide.Show(False) self.__set_properties() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnBoutonOptions, self.bouton_options) self.Bind(wx.EVT_BUTTON, self.OnBoutonReinit, self.bouton_reinit) self.Bind(wx.EVT_BUTTON, self.OnBoutonHaut, self.bouton_haut) self.Bind(wx.EVT_BUTTON, self.OnBoutonBas, self.bouton_bas) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) self.bouton_options.Enable(False) self.bouton_haut.Enable(False) self.bouton_bas.Enable(False)
def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, name="panel_config_Modeles_Contrats", style=wx.TAB_TRAVERSAL) self.barreTitre = FonctionsPerso.BarreTitre( self, _(u"Les modèles de contrats"), u"") texteIntro = _( u"Vous pouvez ici créer, modifier ou supprimer les modèles de contrats. Ceux-ci sont bien utiles quand vous avez besoin de créer\nsouvent les mêmes types de contrat." ) self.label_introduction = FonctionsPerso.StaticWrapText( self, -1, texteIntro) self.listCtrl = ListCtrl(self) self.listCtrl.SetMinSize((20, 20)) self.bouton_ajouter = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ajouter.png"), wx.BITMAP_TYPE_ANY)) self.bouton_modifier = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Modifier.png"), wx.BITMAP_TYPE_ANY)) self.bouton_supprimer = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Supprimer.png"), wx.BITMAP_TYPE_ANY)) self.bouton_aide = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Aide.png"), wx.BITMAP_TYPE_ANY)) if parent.GetName() != "treebook_configuration": self.bouton_aide.Show(False) self.__set_properties() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnBoutonAjouter, self.bouton_ajouter) self.Bind(wx.EVT_BUTTON, self.OnBoutonModifier, self.bouton_modifier) self.Bind(wx.EVT_BUTTON, self.OnBoutonSupprimer, self.bouton_supprimer) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) self.bouton_modifier.Enable(False) self.bouton_supprimer.Enable(False)
def __init__(self, parent, ID=-1): wx.Panel.__init__(self, parent, ID, name="panel_config_champsContrats", style=wx.TAB_TRAVERSAL) self.barreTitre = FonctionsPerso.BarreTitre( self, _(u"Les champs de contrats"), u"") texteIntro = _( u"Vous pouvez ici créer, modifier ou supprimer les champs personnalisés qui sont utilisés dans la création des contrats.\nIls vous permettent de personnaliser librement vos contrats en fonction de vos besoins." ) self.label_introduction = FonctionsPerso.StaticWrapText( self, -1, texteIntro) self.listCtrl = ListCtrl(self) self.listCtrl.SetMinSize((20, 20)) self.bouton_ajouter = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Ajouter.png"), wx.BITMAP_TYPE_ANY)) self.bouton_modifier = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Modifier.png"), wx.BITMAP_TYPE_ANY)) self.bouton_supprimer = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Supprimer.png"), wx.BITMAP_TYPE_ANY)) self.bouton_aide = wx.BitmapButton( self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/16x16/Aide.png"), wx.BITMAP_TYPE_ANY)) if parent.GetName() != "treebook_configuration": self.bouton_aide.Show(False) self.__set_properties() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnBoutonAjouter, self.bouton_ajouter) self.Bind(wx.EVT_BUTTON, self.OnBoutonModifier, self.bouton_modifier) self.Bind(wx.EVT_BUTTON, self.OnBoutonSupprimer, self.bouton_supprimer) self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide) self.bouton_modifier.Enable(False) self.bouton_supprimer.Enable(False)
def MAJ(self): """ MAJ du bouton Analyser """ # Lecture des fichiers du répertoire SYNC IDfichier = FonctionsPerso.GetIDfichier() listeFichiers = os.listdir(UTILS_Fichiers.GetRepSync()) nbreFichiers = 0 for nomFichier in listeFichiers: if nomFichier.startswith( "actions_%s" % IDfichier) and nomFichier.endswith(".dat"): nbreFichiers += 1 # MAJ du bouton Analyser if nbreFichiers == 0: self.bouton_analyse.SetToolTipString( _(u"Aucun fichier à importer")) self.bouton_analyse.SetBackgroundColour(self.couleur_defaut) self.bouton_analyse.Enable(False) elif nbreFichiers == 1: self.bouton_analyse.SetToolTipString(_(u"1 fichier à importer")) self.bouton_analyse.SetBackgroundColour((150, 255, 150)) self.bouton_analyse.Enable(True) else: self.bouton_analyse.SetToolTipString( _(u"%d fichiers à importer") % nbreFichiers) self.bouton_analyse.SetBackgroundColour((150, 255, 150)) self.bouton_analyse.Enable(True)
def VisualiserPage(self, event=None): index = self.GetSelection() if index == -1: dlg = wx.MessageDialog( self, _(u"Vous devez d'abord sélectionner un document !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return thumb = self.GetItem(index) track = thumb.track if track.isImage == True: # Ouvrir Editeur Photo from Dlg import DLG_Visualiseur_image dlg = DLG_Visualiseur_image.MyFrame(None, imgPIL=track.image) dlg.Show(True) else: # Création du doc dans le répertoire Temp et ouverture nomFichier = UTILS_Fichiers.GetRepTemp(fichier="document.%s" % track.type) buffer = track.buffer file = open(nomFichier, "wb") file.write(buffer) file.close() FonctionsPerso.LanceFichierExterne(nomFichier)
def OuvrirPiece(self, event): if len(self.Selection()) == 0: dlg = wx.MessageDialog( self, _(u"Vous devez d'abord sélectionner un destinataire à ouvrir dans la liste !" ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return track = self.Selection()[0] if track.pieces == []: dlg = wx.MessageDialog(self, _(u"Il n'y a aucune pièce à ouvrir !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Demande le fichier à ouvrir if len(track.pieces) > 1: dlg = wx.SingleChoiceDialog( self, _(u"Sélectionnez la pièce jointe personnelle à ouvrir :"), _(u"Ouvrir une pièce jointe personnelle"), track.pieces, wx.CHOICEDLG_STYLE) if dlg.ShowModal() == wx.ID_OK: fichier = track.pieces[dlg.GetSelection()] dlg.Destroy() else: dlg.Destroy() return else: fichier = track.pieces[0] # Ouverture du fichier FonctionsPerso.LanceFichierExterne(fichier)
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 AttacheFichiersJoints(self, email=None): for fichier in self.fichiers: """Guess the content type based on the file's extension. Encoding will be ignored, altough we should check for simple things like gzip'd or compressed files.""" ctype, encoding = mimetypes.guess_type(fichier) if ctype is None or encoding is not None: # No guess could be made, or the file is encoded (compresses), so # use a generic bag-of-bits type. ctype = 'application/octet-stream' maintype, subtype = ctype.split('/', 1) if maintype == 'text': fp = open(fichier) # Note : we should handle calculating the charset part = MIMEText(fp.read(), _subtype=subtype) fp.close() elif maintype == 'image': fp = open(fichier, 'rb') part = MIMEImage(fp.read(), _subtype=subtype) fp.close() else: fp = open(fichier, 'rb') part = MIMEBase(maintype, subtype) part.set_payload(fp.read()) fp.close() # Encode the payload using Base64 encoders.encode_base64(part) # Set the filename parameter nomFichier = os.path.basename(fichier) if type(nomFichier) == six.text_type: nomFichier = FonctionsPerso.Supprime_accent(nomFichier) # changement cosmetique pour ajouter les guillements autour du filename part.add_header('Content-Disposition', "attachment; filename=\"%s\"" % nomFichier) email.attach(part)
def Menu_Mail(self, event): adresse = self.adresseMail # Depuis l'éditeur d'Emails de Noethys if event.GetId() == 80: from Dlg import DLG_Mailer dlg = DLG_Mailer.Dialog(self) listeDonnees = [ { "adresse": adresse, "pieces": [], "champs": {}, }, ] dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ShowModal() dlg.Destroy() # Depuis le client de messagerie par défaut if event.GetId() == 81: FonctionsPerso.EnvoyerMail(adresses=[ adresse, ], sujet="", message="")
def __init__(self, parent, IDpersonne=None): wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL) self.IDpersonne = IDpersonne # Choix décoration self.label_decoration = wx.StaticText(self, -1, _(u"Cadre de décoration :"), style=wx.ALIGN_RIGHT) listeCadres = FonctionsPerso.GetListeCadresPhotos() self.combobox_decoration = wx.Choice(self, -1, choices=listeCadres) # Recherche du cadre de décoration attribué à la personne cadrePhoto, textePhoto = CTRL_Photo.GetCadreEtTexte(self.IDpersonne) if cadrePhoto != None and cadrePhoto != "" : self.combobox_decoration.SetStringSelection(cadrePhoto) else: self.combobox_decoration.SetSelection(0) # Saisie du texte personnalisé self.label_texte_perso = wx.StaticText(self, -1, _(u"Texte personnalisé :"), style=wx.ALIGN_RIGHT) self.texte_perso = wx.TextCtrl(self, -1, textePhoto) # Layout grid_sizer_base = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=10) grid_sizer_base.Add(self.label_decoration, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 0) grid_sizer_base.Add(self.combobox_decoration, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 0) grid_sizer_base.Add(self.label_texte_perso, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 0) grid_sizer_base.Add(self.texte_perso, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND, 0) grid_sizer_base.AddGrowableCol(3) self.SetSizer(grid_sizer_base) self.Layout() # Binds self.Bind(wx.EVT_CHOICE, self.OnChoixDecoration, self.combobox_decoration) self.Bind(wx.EVT_TEXT, self.OnTextePerso, self.texte_perso)
def OnBoutonImprimer(self, event): try: FonctionsPerso.LanceFichierExterne(Chemins.GetStaticPath("Images/Special/Bon_commande_documentation.pdf")) except: dlg = wx.MessageDialog(None, _(u"Noethys ne peut pas ouvrir le PDF !\n\nVeuillez vérifier qu'un autre PDF n'est pas déjà ouvert en arrière-plan..."),_(u"Erreur"), wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy()
def Importation_valPoint(self): controle = self.choice_valpoint selection = controle.GetSelection() IDselection = None if selection != -1: IDselection = controle.GetClientData(selection) # Récupération des données DB = GestionDB.DB() req = """SELECT * FROM valeurs_point ORDER BY date_debut """ DB.ExecuterReq(req) liste = DB.ResultatReq() DB.Close() # Recherche de la valeur actuelle dateJour = str(datetime.date.today()) valeurActuelle = None for ID, valeur, dateDebut in liste: if dateJour >= dateDebut: valeurActuelle = ID # Placement de la liste dans le Choice controle.Clear() x = 0 for ID, valeur, dateDebut in liste: txt = str(valeur) + _(u" ¤ (à partir du " ) + FonctionsPerso.DateEngFr(dateDebut) + ")" controle.Append(txt, ID) # Sélection de l'ancienne valeur sélectionnée if IDselection == ID: controle.SetSelection(x) # Sélection de la valeur actuelle si rien n'a été sélectionnée if IDselection == None and valeurActuelle == ID: controle.SetSelection(x) x += 1 self.listeValPoint = liste
def On_outils_purger_ftp(self, event): """ Supprime tous les fichiers du répertoire FTP """ 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="") IDfichier = FonctionsPerso.GetIDfichier() nbreFichiersSupprimes = 0 try: ftp = ftplib.FTP(hote, identifiant, mdp) ftp.cwd(repertoire) # Récupère la liste des fichiers de synchronisation présents sur le répertoire FTP for nomFichier in ftp.nlst(): if IDfichier in nomFichier and ( nomFichier.endswith( UTILS_Export_nomade.EXTENSION_CRYPTE) or nomFichier.endswith( UTILS_Export_nomade.EXTENSION_DECRYPTE)): ftp.delete(nomFichier) nbreFichiersSupprimes += 1 ftp.quit() except Exception, err: print err dlg = wx.MessageDialog( self, _(u"La connexion FTP n'a pas pu être établie !\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 MenuEnvoyerMail(self, event): """ Envoyer un Email """ from Utils import UTILS_Envoi_email listeAdresses = UTILS_Envoi_email.GetAdresseFamille(self.IDfamille) if len(listeAdresses) == 0: return # Depuis l'éditeur d'Emails de Noethys if event.GetId() == 200: import DLG_Mailer dlg = DLG_Mailer.Dialog(self) listeDonnees = [] for adresse in listeAdresses: listeDonnees.append({ "adresse": adresse, "pieces": [], "champs": {}, }) dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ShowModal() dlg.Destroy() # Depuis le client de messagerie par défaut if event.GetId() == 210: FonctionsPerso.EnvoyerMail(adresses=listeAdresses, sujet="", message="")
def EnvoyerEmail(self, event): # Récupère l'adresse if event.GetId() in (801, 802) : ctrl = self.ctrl_travail_mail if event.GetId() in (901, 902) : ctrl = self.ctrl_mail adresse = ctrl.GetValue() valide, erreur = ctrl.Validation() # Vérifie l'adresse if adresse == "" or valide == False : dlg = wx.MessageDialog(self, _(u"Vous devez d'abord saisir une adresse internet valide !"), "Information", wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() ctrl.SetFocus() return # Depuis l'éditeur d'Emails de Noethys if event.GetId() in (801, 901) : import DLG_Mailer dlg = DLG_Mailer.Dialog(self) listeDonnees = [{"adresse" : adresse, "pieces" : [], "champs" : {},},] dlg.SetDonnees(listeDonnees, modificationAutorisee=False) dlg.ShowModal() dlg.Destroy() # Depuis le client de messagerie par défaut if event.GetId() in (802, 902) : FonctionsPerso.EnvoyerMail(adresses=[adresse,], sujet="", message="")
def Categorie_general(self): nomCategorie = _(u"Général") listeItems = [] # Récupération du nom du fichier nomFichier = self.DB.GetNomFichierDefaut() if "[RESEAU]" in nomFichier: nomFichier = nomFichier[nomFichier.index("[RESEAU]"):] listeItems.append((_(u"Nom du fichier"), nomFichier)) # Récupération des paramètres du fichier req = """SELECT IDparametre, nom, parametre FROM parametres WHERE categorie='fichier' ;""" self.DB.ExecuterReq(req) listeTemp = self.DB.ResultatReq() dictInfos = {} for IDparametre, nom, parametre in listeTemp: dictInfos[nom] = parametre listeItems.append( (_(u"Date de création"), FonctionsPerso.DateEngFr(dictInfos["date_creation"]))) listeItems.append((_(u"Version de fichier"), dictInfos["version"])) listeItems.append((_(u"IDfichier"), dictInfos["IDfichier"])) # Nbre de tables de données listeTables = self.DB.GetListeTables() listeItems.append( (_(u"Nombre de tables de données"), str(len(listeTables) + 2))) return nomCategorie, listeItems
def setRepositoryBranch(): global repositoryBranch noethysVersion = FonctionsPerso.GetVersionLogiciel() if getFromGithub("versions.json", noethysVersion) is None: repositoryBranch = "master" else: repositoryBranch = noethysVersion
def EnvoyerEmail(self, event): """ Envoyer la facture par Email """ if len(self.Selection()) == 0: dlg = wx.MessageDialog( self, _(u"Vous n'avez sélectionné aucune facture à envoyer par Email !" ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return track = self.Selection()[0] if track.etat == "annulation": dlg = wx.MessageDialog( self, _(u"Vous ne pouvez pas envoyer par Email une facture annulée !" ), _(u"Information"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Envoi du mail from Utils import UTILS_Envoi_email UTILS_Envoi_email.EnvoiEmailFamille( parent=self, IDfamille=track.IDfamille, nomDoc=FonctionsPerso.GenerationNomDoc("FACTURE", "pdf"), categorie="facture")
def RecevoirFTP(self): """ Réception des fichiers FTP """ # 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="") IDfichier = FonctionsPerso.GetIDfichier() # Récupération des fichiers listeFichiersRecus = [] dlgAttente = wx.BusyInfo(_(u"Récupération des fichiers de synchronisation depuis un répertoire FTP..."), self) try : ftp = ftplib.FTP(hote, identifiant, mdp) ftp.cwd(repertoire) # Récupère la liste des fichiers de synchronisation présents sur le répertoire FTP for nomFichier in ftp.nlst() : if nomFichier.startswith("actions_%s" % IDfichier) and (nomFichier.endswith(UTILS_Export_nomade.EXTENSION_CRYPTE) or nomFichier.endswith(UTILS_Export_nomade.EXTENSION_DECRYPTE)) : try : tailleFichier = ftp.size(nomFichier) except : ftp.voidcmd('TYPE I') tailleFichier = ftp.size(nomFichier) ftp.retrbinary("RETR %s" % nomFichier, open(UTILS_Fichiers.GetRepSync(nomFichier), "wb").write) listeFichiersRecus.append((nomFichier, tailleFichier)) ftp.quit() except Exception, err : print err dlgAttente.Destroy() del dlgAttente dlg = wx.MessageDialog(self, _(u"La connexion FTP n'a pas pu être établie !\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 MAJ(self): """ MAJ du bouton Analyser """ # Paramètres liste blanche et liste noire d'IP global IP_AUTORISEES, IP_INTERDITES IP_AUTORISEES = UTILS_Config.GetParametre( "synchro_serveur_ip_autorisees", defaut=None) IP_INTERDITES = UTILS_Config.GetParametre( "synchro_serveur_ip_interdites", defaut=None) # Lecture des fichiers du répertoire SYNC IDfichier = FonctionsPerso.GetIDfichier() listeFichiers = os.listdir(UTILS_Fichiers.GetRepSync()) nbreFichiers = 0 for nomFichier in listeFichiers: if nomFichier.startswith( "actions_%s" % IDfichier) and nomFichier.endswith(".dat"): nbreFichiers += 1 # MAJ du bouton Analyser if nbreFichiers == 0: self.bouton_analyse.SetToolTip( wx.ToolTip(_(u"Aucun fichier à importer"))) self.bouton_analyse.SetBackgroundColour(self.couleur_defaut) self.bouton_analyse.Enable(False) elif nbreFichiers == 1: self.bouton_analyse.SetToolTip( wx.ToolTip(_(u"1 fichier à importer"))) self.bouton_analyse.SetBackgroundColour((150, 255, 150)) self.bouton_analyse.Enable(True) else: self.bouton_analyse.SetToolTip( wx.ToolTip(_(u"%d fichiers à importer") % nbreFichiers)) self.bouton_analyse.SetBackgroundColour((150, 255, 150)) self.bouton_analyse.Enable(True)
def ImportationCandidatures(self): """ Récupération des données """ DB = GestionDB.DB() req = """ SELECT candidatures.IDcontrat, cabdacontrats_class.nom, contrats_types.nom, date_debut, date_fin FROM candidatures LEFT JOIN candidats ON candidats.IDcandidat = candidatures.IDcandidat LEFT JOIN contrats_class ON contrats_class.IDclassification = contrats.IDclassification LEFT JOIN contrats_types ON contrats_types.IDtype = contrats.IDtype ORDER BY nomPersonne, date_debut """ DB.ExecuterReq(req) listeDonnees = DB.ResultatReq() DB.Close() listeContrats = [] dictGroupes = {} for IDcandidature, nomCandidat, classification, type, date_debut, date_fin in listeDonnees : texteContrat = _(u"%s %s du %s au %s") % (type, classification, FonctionsPerso.DateEngFr(date_debut), FonctionsPerso.DateEngFr(date_fin)) if nomPersonne in dictGroupes : dictGroupes[nomPersonne].append( (IDcontrat, texteContrat) ) else: dictGroupes[nomPersonne] = [ (IDcontrat, texteContrat), ] listeKeys = list(dictGroupes.keys()) listeKeys.sort() for key in listeKeys: listeContrats.append( (key, dictGroupes[key]) ) return listeContrats