155 lines
5.5 KiB
Python
155 lines
5.5 KiB
Python
import sys
|
|
import os
|
|
DOSSIER_COURRANT = os.path.dirname(os.path.abspath(__file__))
|
|
DOSSIER_PARENT = os.path.dirname(DOSSIER_COURRANT)
|
|
sys.path.append(DOSSIER_PARENT)
|
|
import DB.dbLink as db
|
|
|
|
class Task:
|
|
"""Modèle tache. Contient une tache."""
|
|
|
|
def __init__(self, tache_id='', heure_debut='', heure_fin='', commentaire='', id_util='', id_proj='', desc='', date='', id_type=''):
|
|
"""Constructeur initialisant l'entrée de temps à partir de son ID"""
|
|
|
|
#On load la tache depuis la BDD si demandée avec un ID
|
|
if tache_id != '':
|
|
self._id_tache = tache_id
|
|
#On va chercher la tâche en base de données
|
|
link = db.DBLink()
|
|
query = "SELECT t.HeureDebut, t.HeureFin, t.Commentaire, t.IDUtil, t.IDDate, t.IDProj, t.IDDesc, da.LaDate, de.Libellé, ty.Libellé, ty.IDType \
|
|
FROM tache AS t \
|
|
JOIN dates AS da ON t.IDDate = da.IDDate \
|
|
JOIN description AS de ON t.IDDesc = de.IDDesc \
|
|
JOIN type AS ty ON de.IDType = ty.IDType \
|
|
WHERE IDTach = %s"
|
|
result = link.query(query, [self._id_tache, ])
|
|
|
|
#On hydrate l'objet à partir des éléments récupérés en BDD
|
|
for HeureDebut, HeureFin, Commentaire, IDUtil, IDDate, IDProj, IDDesc, bdddate, bdddesc, typ, idtyp in result:
|
|
self.heure_debut = HeureDebut
|
|
self.heure_fin = HeureFin
|
|
self.commentaire = Commentaire
|
|
self.id_util = IDUtil
|
|
self.id_date = IDDate
|
|
self.id_proj = IDProj
|
|
self.id_desc = IDDesc
|
|
self.date = bdddate
|
|
self.description = bdddesc
|
|
self.type = typ
|
|
self.id_type = idtyp
|
|
|
|
#Sinon, on hydrate à partir des champs renseignés en paramètre
|
|
else:
|
|
self.heure_debut = heure_debut
|
|
self.heure_fin = heure_fin
|
|
self.commentaire = commentaire
|
|
self.id_util = id_util
|
|
self.date = date
|
|
self.id_proj = id_proj
|
|
self.description = desc
|
|
self.id_type = id_type
|
|
self.type = self.get_type()
|
|
|
|
def registerDescription(self):
|
|
"""Enregistrement de la description en BDD"""
|
|
link = db.DBLink()
|
|
|
|
query = "SELECT IDDesc \
|
|
FROM description \
|
|
WHERE Libellé = %s AND IDType = %s"
|
|
result = link.query(query, [self.description, self.id_type, ]).fetchone()
|
|
if result is not None:
|
|
#Si la description existe en BDD on recupère l'ID
|
|
for elem in result:
|
|
self.id_desc = elem
|
|
else:
|
|
#Sinon on l'enregistre
|
|
query = "INSERT INTO description \
|
|
(Libellé, IDType) \
|
|
VALUES (%s, %s)"
|
|
result = link.commit(query, [self.description, self.id_type])
|
|
|
|
#Récupération de l'ID ainsi créé
|
|
self.id_desc = result.lastrowid
|
|
|
|
def registerDate(self):
|
|
"""Enregistrement de la date en BDD"""
|
|
link = db.DBLink()
|
|
|
|
#On vérifie si la date existe
|
|
query = "SELECT IDDate \
|
|
FROM dates \
|
|
WHERE LaDate = %s "
|
|
result = link.query(query, [self.date, ]).fetchone()
|
|
|
|
#Si oui, on récupère son ID
|
|
if result is not None:
|
|
for element in result:
|
|
self.id_date = element
|
|
else:
|
|
#Sinon, on enregistre en BDD
|
|
link = db.DBLink()
|
|
query = "INSERT INTO dates \
|
|
SET LaDate = (%s)"
|
|
result = link.commit(query, [self.date, ])
|
|
print(result.lastrowid)
|
|
|
|
#Récupération de l'ID
|
|
self.id_date = result.lastrowid
|
|
|
|
|
|
def register(self):
|
|
"""Enregistrement d'une tache en BDD"""
|
|
link = db.DBLink()
|
|
|
|
|
|
#Gestion des données de date et description
|
|
self.registerDate()
|
|
self.registerDescription()
|
|
|
|
#Pis on insère la tâche
|
|
query = "INSERT INTO tache \
|
|
( HeureDebut, HeureFin, Commentaire, IDUtil, IDDate, IDProj, IDDesc) \
|
|
VALUES (%s, %s, %s, %s, %s, %s, %s)"
|
|
result = link.commit(query, [self.heure_debut, self.heure_fin, self.commentaire, self.id_util, self.id_date, self.id_proj, self.id_desc])
|
|
|
|
|
|
#Chargement de l'ID ainsi créé
|
|
self._id_tache = result.lastrowid
|
|
|
|
|
|
def update(self):
|
|
"""Mise à jour de la tache"""
|
|
link = db.DBLink()
|
|
|
|
#On met à jour les ID de date et description si besoin
|
|
self.registerDate()
|
|
self.registerDescription()
|
|
|
|
#pis la tâche
|
|
query = "UPDATE tache \
|
|
SET HeureDebut = %s, HeureFin = %s, Commentaire = %s, IDUtil = %s, IDDate = %s, IDProj = %s, IDDesc = %s \
|
|
WHERE IDTach = %s"
|
|
link.commit(query, [self.heure_debut, self.heure_fin, self.commentaire, self.id_util, self.id_date, self.id_proj, self.id_desc, self._id_tache])
|
|
|
|
def delete(self):
|
|
"""supprimer l'utilisateur"""
|
|
link = db.DBLink()
|
|
|
|
query = "DELETE \
|
|
FROM tache \
|
|
WHERE IDTach = %s"
|
|
link.commit(query, [self._id_tache, ])
|
|
|
|
def get_type(self):
|
|
"""Récupère la date à partir de l'ID"""
|
|
link = db.DBLink()
|
|
|
|
query = "SELECT Libellé \
|
|
FROM type \
|
|
WHERE IDType = %s"
|
|
result = link.query(query, [self.id_type])
|
|
|
|
for le_type, in result:
|
|
return le_type
|