121 lines
4.6 KiB
Python
121 lines
4.6 KiB
Python
# -*-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])
|