# -*-coding:utf8 -* import DB.dbLink as db class User: """Modèle utilisateur. Contient un objet utilisateur""" def __init__(self, id='', nom='', prenom='', identifiant='', mdp='', cout='', idfonc='', fonction='', pole='', roles=dict()): """Constructeur initialisant utilisateur à partir d'un ID ou des données indiquées""" #On load l'user depuis la BDD si demandé avec un ID if id != '': self._id_table = id #On va chercher l'user en base de données link = db.DBLink() query = "SELECT u.IDUtil AS id_bdd, u.Nom AS bdd_nom, u.Prénom AS bdd_prenom, u.Identifiant AS bdd_identifiant, u.MdP AS bdd_mdp, u.SalaireBrut AS bdd_cout, u.IDFonc AS bdd_id_fonc, f.Intitulé AS bdd_fonction, p.Libelle AS bdd_pole \ FROM utilisateur AS u \ JOIN fonction AS f ON f.IDFonc = u.IDFonc \ JOIN pole AS p ON p.IDPole = p.IDPole \ WHERE u.IDUtil = %s" result = link.query(query, [self._id_table, ]) #On hydrate l'objet à partir des éléments récupérés en BDD for id_bdd, bdd_nom, bdd_prenom, bdd_identifiant, bdd_mdp, bdd_cout, bdd_id_fonc, bdd_fonction, bdd_pole in result: self._id_table = id_bdd self.fonction = bdd_fonction self.pole = bdd_pole self.nom = bdd_nom self.prenom = bdd_prenom self.identifiant = bdd_identifiant self._mdp = bdd_mdp self.cout = bdd_cout self.id_fonc = bdd_id_fonc #Récupération de la liste des roles self.roles = dict() self.get_roles() #Sinon, on hydrate à partir des champs renseignés en paramètre else : self.id_fonc = idfonc self.fonction = fonction self.pole = pole self.nom = nom self.prenom = prenom self.identifiant = identifiant self._mdp = mdp self.cout = cout self.roles = roles def register(self): """Enregistrement de l'utilisateur""" link = db.DBLink() #Enregistrement des données utilisateur query = "INSERT INTO utilisateur \ (IDFonc, Nom, Prénom, Identifiant, MdP, SalaireBrut) \ VALUES (%s, %s, %s, %s, %s, %s)" link.commit(query, [self.id_fonc, self.nom, self.prenom, self.identifiant, self._mdp, self.cout]) #Chargement de l'id ainsi créé query = "SELECT IDUtil \ FROM utilisateur \ WHERE identifiant = %s" result = link.query(query, [self.identifiant, ]) for IDUtil, in result: self._id_table = IDUtil #Enregistrement des roles self.update_roles() def update(self): """Mise à jour de l'utilisateur""" link = db.DBLink() query = "UPDATE utilisateur \ SET Nom = %s, Prénom = %s, Identifiant = %s, MdP = %s, IDFonc = %s, SalaireBrut = %s \ WHERE IDUtil = %s" link.commit(query, [self.nom, self.prenom, self.identifiant, self._mdp, self.id_fonc, self.cout, self._id_table]) def delete(self): """supprimer l'utilisateur courant""" link = db.DBLink() query = "DELETE \ FROM roleattribution \ WHERE IDUtil = %s" link.commit(query, [self._id_table, ]) query = "DELETE \ FROM utilisateur \ WHERE IDUtil = %s" link.commit(query, [self._id_table, ]) def get_roles(self): """liste des roles de l'utilisateur""" link = db.DBLink() query = "SELECT a.IDRole AS id_role, r.Libellé AS role \ FROM roleattribution AS a \ JOIN role AS r ON a.IDRole = r.IDRole \ WHERE a.IDUtil = %s" result = link.query(query, [self._id_table, ]) for id_role, role in result: self.roles[role] = id_role def update_roles(self): """enregistrement/mise à jour des roles de l'uitlisateur""" link = db.DBLink() #On commence par supprimer les roles actuels s'ils existent query = "DELETE \ FROM roleattribution \ WHERE IDUtil = %s" link.commit(query, [self._id_table, ]) #Puis on enregistre les nouveaux for rol_id in self.roles.values(): query = "INSERT INTO roleattribution \ (IDUtil, IDRole) \ VALUES(%s, %s)" link.commit(query, [self._id_table, rol_id])