From b3c709a7e9518b43bfaf1b6ff8d8e14e894e9d61 Mon Sep 17 00:00:00 2001 From: Aveias Date: Thu, 3 Aug 2017 18:05:49 +0200 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20de=20la=20vue=20d'ajout=20de=20?= =?UTF-8?q?t=C3=A2che=20rapide?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Views/quickTask.py | 163 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 Views/quickTask.py diff --git a/Views/quickTask.py b/Views/quickTask.py new file mode 100644 index 0000000..1a07d22 --- /dev/null +++ b/Views/quickTask.py @@ -0,0 +1,163 @@ +# -*-coding:utf8 -* +"""Fenêtre de rapide : Vue""" +#TODO: Rajouter une checkbox pour ajout d'une entrée de temps manuel (sans chrono) + + +from __future__ import unicode_literals +import sys +import os +from tkinter import * +from datetime import datetime, timedelta +DOSSIER_COURRANT = os.path.dirname(os.path.abspath(__file__)) +DOSSIER_PARENT = os.path.dirname(DOSSIER_COURRANT) +sys.path.append(DOSSIER_PARENT) +from DB.dbLink import DBLink as db + + + +class QuickTask: + """Fenêtre d'ajout rapide de tâche""" + + def __init__(self, project_name='Sélectionner...', activate=False): + #Initialisation des variables + QuickTask.activate = activate + link = db() #On aura besoin de la BDD pour récupérer projets et types + + QuickTask.fenetre = Tk() + QuickTask.fenetre.title("Tâche rapide") + + ###Titre + Label(QuickTask.fenetre, text="Ajout d'une tâche").pack() + self.msg = Label(QuickTask.fenetre, text='') + self.msg.pack() + + ###Champ de projet + Label(QuickTask.fenetre, text="Nom du projet :").pack() + # Create a Tkinter variable + QuickTask.project = StringVar(QuickTask.fenetre) + proj_choices = dict() + #Récupération des types et insertion comme options + projects = link.query("SELECT IDProj, Intitulé FROM projet ", []) + for pro_id, pro_nom in projects: + proj_choices[pro_nom] = pro_id + + QuickTask.project.set(project_name) # set the default option + OptionMenu(QuickTask.fenetre, QuickTask.project, *proj_choices).pack() + + ###Champ de type + # Create a Tkinter variable + QuickTask.type_value = StringVar(QuickTask.fenetre) + choices = dict() + #Récupération des types et insertion comme options + types = link.query("SELECT * FROM type ", []) + for ty_id, ty_nom in types: + choices[ty_nom] = ty_id + + QuickTask.type_value.set("Sélectionner...") # set the default option + Label(QuickTask.fenetre, text="Type de tâche :").pack() + OptionMenu(QuickTask.fenetre, QuickTask.type_value, *choices).pack() + + ###Champ de description + Label(QuickTask.fenetre, text="Description :").pack() + QuickTask.input_desc = Entry(QuickTask.fenetre) + QuickTask.input_desc.pack() + + ###Minutes de décalage pour le bouton démarrer/arrêter + Label(QuickTask.fenetre, text="Décalage : ").pack() + self.min_label = Label(QuickTask.fenetre, text="Tâche commencée il y a ") + self.min_label.pack() + QuickTask.input_min = Entry(QuickTask.fenetre) + QuickTask.input_min.insert(0, 0) + QuickTask.input_min.pack() + Label(QuickTask.fenetre, text="minute(s)").pack() + + ###Champs heures de début/fin + Label(QuickTask.fenetre, text="Heure de début : ").pack() + QuickTask.heure_debut = Entry(QuickTask.fenetre, state=DISABLED) + QuickTask.heure_debut.pack() + + Label(QuickTask.fenetre, text="Heure de fin : ").pack() + QuickTask.heure_fin = Entry(QuickTask.fenetre, state=DISABLED) + QuickTask.heure_fin.pack() + + ###Bouton démarrer/arrêter + QuickTask.start_stop = Button(QuickTask.fenetre, text="Démarrer", command=self.timer) + QuickTask.start_stop.pack() + + #Bouton annuler + QuickTask.cancel = Button(QuickTask.fenetre, command=self.stop, text="Annuler", state=DISABLED) + QuickTask.cancel.pack() + + def timer(self): + """Actions à engager lorsqu'on débute/arrête une tâche""" + + #Prise en compte du décalage de temps et remise à zéro du compteur + decalage = int(QuickTask.input_min.get()) + + #Action à déclencher en fonction de si on démarre ou finit l'enregistrement + if not QuickTask.activate: #Si on démarre l'enregistrement + #Gestion de l'heure de départ + QuickTask.start_time = datetime.now() - timedelta(minutes=decalage) + QuickTask.heure_debut['state'] = NORMAL + QuickTask.heure_debut.insert(0, QuickTask.start_time.strftime('%H:%M')) + QuickTask.heure_debut['state'] = DISABLED + #Modification des labels + QuickTask.start_stop['text'] = "Terminer" + self.min_label['text'] = "Tâche terminée il y a " + #On change le statut du bouton et on active l'annulation + QuickTask.activate = not QuickTask.activate + QuickTask.cancel['state'] = NORMAL + + else: #Si on le finit + #Vérifions que les champs sont bien remplis + if QuickTask.project.get() != 'Sélectionner...' \ + and QuickTask.type_value.get() != 'Sélectionner...' \ + and QuickTask.input_desc.get() != '': + #Oui ? ok on va pour enregistrer + QuickTask.end_time = datetime.now() - timedelta(minutes=decalage) + QuickTask.start_stop['text'] = "Démarrer" + self.min_label['text'] = "Tâche commencée il y a " + #TODO: appel à la fonction controleur enregistrant la tâche en BDD + #On change le statut du bouton et on vide les champs + QuickTask.activate = not QuickTask.activate + QuickTask.heure_debut['state'] = NORMAL + QuickTask.heure_debut.delete(0, 'end') + QuickTask.heure_debut['state'] = DISABLED + + #Désactivation du bouton annuler et vidage de champs + QuickTask.cancel['state'] = DISABLED + QuickTask.input_desc.delete(0, 'end') + + #On affiche un message disant OK + self.msg['text'] = "Tâche enregistrée" + + else: + #non ? on affiche un message et on valide rien du tout, namého + self.msg['text'] = "Tous les champs doivent êtres remplis pour enregistrer la tâche" + + def stop(self): + """Annulation d'une tâche démarrée""" + + #Gestion des labels + QuickTask.start_stop['text'] = "Démarrer" + self.min_label['text'] = "Tâche commencée il y a " + #On change le statut du bouton et on vide les champs + QuickTask.activate = not QuickTask.activate + QuickTask.heure_debut['state'] = NORMAL + QuickTask.heure_debut.delete(0, 'end') + QuickTask.heure_debut['state'] = DISABLED + #Désactivation du bouton annuler + QuickTask.cancel['state'] = DISABLED + + #AFfichage du message + self.msg['text'] = "Enregistrement de la tâche annulé" + + + + + + + +#Test de la fenêtre +fen = QuickTask() +fen.fenetre.mainloop()