Création de la vue d'ajout de tâche rapide

This commit is contained in:
Matt Marcha 2017-08-03 18:05:49 +02:00
parent 167f4f5071
commit b3c709a7e9

163
Views/quickTask.py Normal file
View 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()