Création de la vue d'ajout de tâche rapide
This commit is contained in:
parent
167f4f5071
commit
b3c709a7e9
163
Views/quickTask.py
Normal file
163
Views/quickTask.py
Normal file
|
@ -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()
|
Loading…
Reference in a new issue