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, ]) #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