summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebulois <quentin@debulois.fr>2022-05-01 11:44:09 +0200
committerDebulois <quentin@debulois.fr>2022-05-01 11:44:09 +0200
commit1eaf21fd423e5dedf1ed4361b0e9b6cbbcfc9fa0 (patch)
tree6557511b23ec5a067db75483ad1e42d836010851
parentafd6fb901b7e8f99cdb1bb0d2134cec2d6cebc3b (diff)
Ajout gestion des missions coté client & pro
-rw-r--r--src/core/coreUser.py26
-rw-r--r--src/database/dbadmin.py64
-rw-r--r--src/database/dbmission.py113
-rw-r--r--src/database/dbsearch.py88
-rw-r--r--src/database/dbuser.py72
-rw-r--r--src/gui/globalMenu.py35
-rw-r--r--src/gui/pageHome.py10
-rw-r--r--src/gui/pageLogin.py4
-rw-r--r--src/gui/windowMissions.py153
-rw-r--r--src/gui/windowRecherche.py3
-rw-r--r--src/gui/windowUserInfo.py16
-rw-r--r--src/main.py6
-rw-r--r--src/setup.py5
13 files changed, 382 insertions, 213 deletions
diff --git a/src/core/coreUser.py b/src/core/coreUser.py
index b8129d4..ec39b39 100644
--- a/src/core/coreUser.py
+++ b/src/core/coreUser.py
@@ -11,7 +11,7 @@ def core_login(mainWindow, email, password) -> None:
res = user.check_user_credential(email, password)
if res:
search = dbsearch.DbSearch(mainWindow).get_user_account_by_userid(res)
- QMessageBox.information(
+ QMessageBox.information(
mainWindow,
"Connexion",
"Vous êtes connecté"
@@ -28,13 +28,13 @@ def core_login(mainWindow, email, password) -> None:
mainWindow.userStatus = "Client"
pageHome.main(mainWindow, True)
else:
- QMessageBox.warning(
+ QMessageBox.warning(
mainWindow,
"Connexion",
"Mauvaise combinaison mail & mot de passe"
)
else:
- QMessageBox.warning(
+ QMessageBox.warning(
mainWindow,
"Connexion",
"Mauvais email"
@@ -49,13 +49,13 @@ def core_logout(mainWindow) -> None:
mainWindow.userInscrDate = ""
mainWindow.userStatus = ""
- QMessageBox.information(
+ QMessageBox.information(
mainWindow,
"Déconnection",
"Vous êtes déconnecté."
)
pageHome.main(mainWindow, True)
-
+
def core_register(mainWindow, email, password, userStatus) -> None:
user = dbuser.DbUser(mainWindow)
@@ -66,7 +66,7 @@ def core_register(mainWindow, email, password, userStatus) -> None:
# Si vide
if not email:
- QMessageBox.warning(
+ QMessageBox.warning(
mainWindow,
"Email invalide",
"Veuillez renseigner un email"
@@ -74,7 +74,7 @@ def core_register(mainWindow, email, password, userStatus) -> None:
return
if not password:
- QMessageBox.warning(
+ QMessageBox.warning(
mainWindow,
"Mot de passe invalide",
"Veuillez renseigner un mot de passe"
@@ -82,7 +82,7 @@ def core_register(mainWindow, email, password, userStatus) -> None:
return
if userStatus == None:
- QMessageBox.warning(
+ QMessageBox.warning(
mainWindow,
"Mauvais rôle",
"Veuillez selectionner un rôle"
@@ -91,7 +91,7 @@ def core_register(mainWindow, email, password, userStatus) -> None:
# les regex
if not re.fullmatch(regEmail, email):
- QMessageBox.warning(
+ QMessageBox.warning(
mainWindow,
"Email invalid",
"Email non conforme"
@@ -102,7 +102,7 @@ def core_register(mainWindow, email, password, userStatus) -> None:
or not re.search(regNumb, password)\
or not re.search(regUpper, password)\
or not re.search(regSpecial, password):
- QMessageBox.warning(
+ QMessageBox.warning(
mainWindow,
"Mot de passe invalide",
("Le mot de passe doit avoir:\n"
@@ -115,7 +115,7 @@ def core_register(mainWindow, email, password, userStatus) -> None:
# si email deja présent
if user.check_exist_email(email):
- QMessageBox.warning(
+ QMessageBox.warning(
mainWindow,
"Email invalid",
"Email déja utilisé"
@@ -124,13 +124,13 @@ def core_register(mainWindow, email, password, userStatus) -> None:
res = user.register_user(email, password, userStatus)
if res:
- QMessageBox.information(
+ QMessageBox.information(
mainWindow,
"Inscription",
"Inscription réussie!"
)
else:
- QMessageBox.warning(
+ QMessageBox.warning(
mainWindow,
"Erreur bdd",
"Erreur lors de l'inscritpion"
diff --git a/src/database/dbadmin.py b/src/database/dbadmin.py
index 7b00cd5..6fcd3f5 100644
--- a/src/database/dbadmin.py
+++ b/src/database/dbadmin.py
@@ -18,9 +18,9 @@ class DbAdmin(dbmain.DbMain):
# Récupérer toutes les infos de la table userAccount
def get_all_users_account(self) -> list:
reqGetAll: str = """
- SELECT
- *
- FROM
+ SELECT
+ *
+ FROM
""" + self.TABLEUSERACCOUNT
self.exec_cmd(reqGetAll)
result = self.cur.fetchall()
@@ -33,10 +33,10 @@ class DbAdmin(dbmain.DbMain):
# https:#stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table
reqCheckExistId: str = """
SELECT EXISTS(
- SELECT 1 FROM
- """ + self.TABLEUSERACCOUNT + """
- WHERE
- userId = %s
+ SELECT 1 FROM
+ """ + self.TABLEUSERACCOUNT + """
+ WHERE
+ userId = %s
LIMIT 1
)"""
self.exec_cmd(reqCheckExistId, [userId])
@@ -62,10 +62,10 @@ class DbAdmin(dbmain.DbMain):
# Préparation et execution de la requète pour voir si la categorie existe en anglais
reqCheckjobCategoryNameEn: str = """
SELECT EXISTS(
- SELECT 1 FROM
- """ + self.TABLEJOBCATEGORY + """
- WHERE
- jobCategoryNameEn = %s
+ SELECT 1 FROM
+ """ + self.TABLEJOBCATEGORY + """
+ WHERE
+ jobCategoryNameEn = %s
LIMIT 1
)"""
self.exec_cmd(reqCheckjobCategoryNameEn, [jobNameEn])
@@ -75,10 +75,10 @@ class DbAdmin(dbmain.DbMain):
# Préparation et execution de la requète pour voir si la categorie existe en Français
reqCheckjobCategoryNameFr: str = """
SELECT EXISTS(
- SELECT 1 FROM
- """ + self.TABLEJOBCATEGORY + """
- WHERE
- jobCategoryNameFr = %s
+ SELECT 1 FROM
+ """ + self.TABLEJOBCATEGORY + """
+ WHERE
+ jobCategoryNameFr = %s
LIMIT 1
)"""
self.exec_cmd(reqCheckjobCategoryNameFr, [jobNameFr])
@@ -87,10 +87,10 @@ class DbAdmin(dbmain.DbMain):
if not reqResultFr[0][0]:
# Préparation de la requète pour l'ajout
reqjobCategoryNameAdd: str = """
- INSERT INTO
+ INSERT INTO
""" + self.TABLEJOBCATEGORY + """
- (jobCategoryNameEn, jobCategoryNameFr)
- VALUES
+ (jobCategoryNameEn, jobCategoryNameFr)
+ VALUES
(%s ,%s)"""
# Exécution de la requète
self.exec_cmd(reqjobCategoryNameAdd, [jobNameEn, jobNameFr], True)
@@ -108,10 +108,10 @@ class DbAdmin(dbmain.DbMain):
# Préparation de la requète pour voir si l'utilisateur existe
reqCheckExistId: str = """
SELECT EXISTS(
- SELECT 1 FROM
- """ + self.TABLEJOBCATEGORY + """
- WHERE
- jobCategoryId = %s
+ SELECT 1 FROM
+ """ + self.TABLEJOBCATEGORY + """
+ WHERE
+ jobCategoryId = %s
LIMIT 1
)"""
# Exécution de la requète, fetchall pour avoir le résultat
@@ -121,9 +121,9 @@ class DbAdmin(dbmain.DbMain):
if (reqResult[0][0]):
# Préparation de la requète pour suppression
reqDelJobCategory: str = """
- DELETE FROM
- """ + self.TABLEJOBCATEGORY + """
- WHERE
+ DELETE FROM
+ """ + self.TABLEJOBCATEGORY + """
+ WHERE
jobCategoryId = %s"""
# Exécution de la requète
self.exec_cmd(reqDelJobCategory, [jobId], True)
@@ -141,10 +141,10 @@ class DbAdmin(dbmain.DbMain):
# Préparation de la requète pour voir si l'utilisateur existe
reqCheckExistId: str = """
SELECT EXISTS(
- SELECT 1 FROM
- """ + self.TABLEMISSION + """
- WHERE
- missionId = %s
+ SELECT 1 FROM
+ """ + self.TABLEMISSION + """
+ WHERE
+ missionId = %s
LIMIT 1
)"""
# Exécution de la requète
@@ -154,9 +154,9 @@ class DbAdmin(dbmain.DbMain):
if (reqResult[0][0]):
# Préparation de la requète pour suppression
reqDelMission: str = """
- DELETE FROM
- """ + self.TABLEMISSION + """
- WHERE
+ DELETE FROM
+ """ + self.TABLEMISSION + """
+ WHERE
missionId = %s"""
# Exécution de la requète
self.exec_cmd(reqDelMission, [missionId], True)
diff --git a/src/database/dbmission.py b/src/database/dbmission.py
index 7f6620e..9d23288 100644
--- a/src/database/dbmission.py
+++ b/src/database/dbmission.py
@@ -24,10 +24,10 @@ class DbMission(dbmain.DbMain):
def register_mission(self, subject, clientId, proId, jobId):
# Préparation de la requète pour enregistrement de la mission
reqAddMission = """
- INSERT INTO """ + self.TABLEMISSION + """
- (date, subject, clientId, proId, jobCategoryId)
- VALUES
- (?, ?, ?, ?, ?)"""
+ INSERT INTO """ + self.TABLEMISSION + """
+ (date, subject, clientId, proId, jobCategoryId)
+ VALUES
+ (%s, %s, %s, %s, %s)"""
# Exécution de la requète
self.exec_cmd(reqAddMission,
[datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
@@ -43,54 +43,53 @@ class DbMission(dbmain.DbMain):
def accept_mission_by_missionid(self, missionId):
# Préparation de la requète pour enregistrement de la mission
reqAddMission = """
- UPDATE
- """ + self.TABLEMISSION + """
+ UPDATE
+ """ + self.TABLEMISSION + """
SET
- acceptedByPro = ?
- WHERE
- missionId = ?"""
+ acceptedByPro = %s
+ WHERE
+ missionId = %s"""
# Exécution de la requète
- self.exec_cmd(reqAddMission, [datetime.now().strftime("%Y-%m-%d %H:%M:%S"), missionId])
+ self.exec_cmd(reqAddMission, [datetime.now().strftime("%Y-%m-%d %H:%M:%S"), missionId], True)
return 1
def validate_mission_pro_by_missionid(self, missionId):
# Préparation de la requète pour enregistrement de la mission
reqAddMission = """
- UPDATE
- """ + self.TABLEMISSION + """
+ UPDATE
+ """ + self.TABLEMISSION + """
SET
- validatedByPro = ?
- WHERE
- missionId = ?"""
+ validatedByPro = %s
+ WHERE
+ missionId = %s"""
# Exécution de la requète
- self.exec_cmd(reqAddMission, [datetime.now().strftime("%Y-%m-%d %H:%M:%S"), missionId])
+ self.exec_cmd(reqAddMission, [datetime.now().strftime("%Y-%m-%d %H:%M:%S"), missionId], True)
return 1
def validate_mission_client_by_missionid(self, missionId):
# Préparation de la requète pour enregistrement de la mission
reqAddMission = """
- UPDATE
- """ + self.TABLEMISSION + """
+ UPDATE
+ """ + self.TABLEMISSION + """
SET
- validatedByClient = ?
- WHERE
- missionId = ?"""
+ validatedByClient = %s
+ WHERE
+ missionId = %s"""
# Exécution de la requète
- self.exec_cmd(reqAddMission, [datetime.now().strftime("%Y-%m-%d %H:%M:%S"), missionId])
+ self.exec_cmd(reqAddMission, [datetime.now().strftime("%Y-%m-%d %H:%M:%S"), missionId], True)
return 1
- def review_mission(self, missionId, review, note):
+ def review_mission(self, missionId: int, review: str, note: int) -> None:
# Préparation de la requète pour enregistrement de la mission
reqAddMission = """
- UPDATE
- """ + self.TABLEMISSION + """
+ UPDATE
+ """ + self.TABLEMISSION + """
SET
- review = ?, note = ?
- WHERE
- missionId = ?"""
+ review = %s, note = %s
+ WHERE
+ missionId = %s"""
# Exécution de la requète
- self.exec_cmd(reqAddMission, [review, note, missionId])
- return 1
+ self.exec_cmd(reqAddMission, [review, note, missionId], True)
# ****************************************************************************
# RECUPERATION DES INFORMATIONS RELATIVES AUX MISSIONS
@@ -98,18 +97,18 @@ class DbMission(dbmain.DbMain):
# Récupérations des missions d'un pro par son id
def get_mission_by_proid(self, proId):
reqGetMissionsProId = """
- SELECT
+ SELECT
missionId, date, subject, note, review,
- acceptedByPro, validatedByClient,
- validatedByPro, jobCategoryId, proId, lastname
- FROM
+ acceptedByPro, validatedByClient,
+ validatedByPro, jobCategoryId, proId, lastname
+ FROM
""" + self.TABLEMISSION + """
- LEFT JOIN
- """ + self.TABLEUSERINFO + """
- ON
+ LEFT JOIN
+ """ + self.TABLEUSERINFO + """
+ ON
""" + self.TABLEMISSION + """.proId = """ + self.TABLEUSERINFO + """.userId
- WHERE
- proId = ?"""
+ WHERE
+ proId = %s"""
self.exec_cmd(reqGetMissionsProId, [proId])
result = self.cur.fetchall()
return result
@@ -117,18 +116,18 @@ class DbMission(dbmain.DbMain):
# Récupérations des missions d'un client par son id
def get_mission_by_clientid(self, clientId):
reqGetMissionsClientId = """
- SELECT
+ SELECT
missionId, date, subject, note, review,
- acceptedByPro, validatedByClient,
- validatedByPro, jobCategoryId, proId, lastname
- FROM
+ acceptedByPro, validatedByClient,
+ validatedByPro, jobCategoryId, proId, lastname
+ FROM
""" + self.TABLEMISSION + """
- LEFT JOIN
- """ + self.TABLEUSERINFO + """
- ON
+ LEFT JOIN
+ """ + self.TABLEUSERINFO + """
+ ON
""" + self.TABLEMISSION + """.proId = """ + self.TABLEUSERINFO + """.userId
- WHERE
- clientId = ?"""
+ WHERE
+ clientId = %s"""
self.exec_cmd(reqGetMissionsClientId, [clientId])
result = self.cur.fetchall()
return result
@@ -136,9 +135,9 @@ class DbMission(dbmain.DbMain):
# Récupérations des missions d'un client par son id
def get_all_missions(self):
reqGetAllMission = """
- SELECT
- *
- FROM
+ SELECT
+ *
+ FROM
""" + self.TABLEMISSION
self.exec_cmd(reqGetAllMission)
result = self.cur.fetchall()
@@ -147,14 +146,14 @@ class DbMission(dbmain.DbMain):
# Compte le nombre de mission d'un consultant par son nom
def count_pro_missions_by_proid(self, proId):
reqCountMission = """
- SELECT COUNT(*) FROM
+ SELECT COUNT(*) FROM
""" + self.TABLEMISSION + """
- INNER JOIN
- """ + self.TABLEUSERINFO + """
- ON
+ INNER JOIN
+ """ + self.TABLEUSERINFO + """
+ ON
""" + self.TABLEMISSION + """.proId = """ + self.TABLEUSERINFO + """.userId
- WHERE
- proId = ?"""
+ WHERE
+ proId = %s"""
self.exec_cmd(reqCountMission, [proId])
result = self.cur.fetchall()
return result
diff --git a/src/database/dbsearch.py b/src/database/dbsearch.py
index 3089bf1..0561c9d 100644
--- a/src/database/dbsearch.py
+++ b/src/database/dbsearch.py
@@ -20,11 +20,11 @@ class DbSearch(dbmain.DbMain):
# Récupération des infos d'un compte par son id
def get_user_account_by_userid(self, userId: int) -> list:
reqSearchUser = """
- SELECT
+ SELECT
userId, email, inscriptionDate, userStatus
- FROM
+ FROM
""" + self.TABLEUSERACCOUNT + """
- WHERE
+ WHERE
userId = %s"""
self.exec_cmd(reqSearchUser, [userId])
return self.cur.fetchall()
@@ -32,13 +32,13 @@ class DbSearch(dbmain.DbMain):
# Récupération des infos d'un utilisateur par son id
def get_user_info_by_userid(self, userId: int) -> list:
reqGetUserInfo = """
- SELECT
- userId, lastname, firstname, degree,
+ SELECT
+ userId, lastname, firstname, degree,
capability, description, phoneNumber,
- adress, zipCode, city
- FROM
- """ + self.TABLEUSERINFO + """
- WHERE
+ adress, zipCode, city
+ FROM
+ """ + self.TABLEUSERINFO + """
+ WHERE
userId = %s"""
self.exec_cmd(reqGetUserInfo, [userId])
return self.cur.fetchall()
@@ -48,16 +48,16 @@ class DbSearch(dbmain.DbMain):
# ****************************************************************************
def get_all_pro_by_jobid(self, jobId):
reqSearchConsultant = """
- SELECT
- """ + self.TABLEUSERINFO + """.userId,
- lastname, firstname, capability
- FROM
+ SELECT
+ """ + self.TABLEUSERINFO + """.userId,
+ lastname, firstname, capability
+ FROM
""" + self.TABLEUSERINFO + """
INNER JOIN
""" + self.TABLEUSERJOB + """
ON
""" + self.TABLEUSERINFO + """.userId = """ + self.TABLEUSERJOB + """.userId
- WHERE
+ WHERE
jobCategoryId = %s"""
self.exec_cmd(reqSearchConsultant, [jobId])
return self.cur.fetchall()
@@ -65,18 +65,18 @@ class DbSearch(dbmain.DbMain):
# Récupération des infos d'un pro par son nom
def get_pro_info_by_lastname(self, lastname):
reqSearchConsultant = """
- SELECT
- """ + self.TABLEUSERINFO + """.userId,
- lastname, firstname, capability
- FROM
+ SELECT
+ """ + self.TABLEUSERINFO + """.userId,
+ lastname, firstname, capability
+ FROM
""" + self.TABLEUSERINFO + """
- INNER JOIN
- """ + self.TABLEUSERACCOUNT + """
- ON
+ INNER JOIN
+ """ + self.TABLEUSERACCOUNT + """
+ ON
""" + self.TABLEUSERINFO + """.userId = """ + self.TABLEUSERACCOUNT + """.userId
- WHERE
- userStatus = '1'
- AND
+ WHERE
+ userStatus = '1'
+ AND
lastname LIKE CONCAT('%', %s, '%')"""
self.exec_cmd(reqSearchConsultant, [lastname])
return self.cur.fetchall()
@@ -84,16 +84,16 @@ class DbSearch(dbmain.DbMain):
# Récupération des emploies associés à un pro
def get_pro_job_by_proid(self, proId):
reqGetAll = """
- SELECT
- """ + self.TABLEUSERJOB + """.jobCategoryId,
- jobCategoryNameEn, jobCategoryNameFr
- FROM
+ SELECT
+ """ + self.TABLEUSERJOB + """.jobCategoryId,
+ jobCategoryNameEn, jobCategoryNameFr
+ FROM
""" + self.TABLEUSERJOB + """
- INNER JOIN
+ INNER JOIN
""" + self.TABLEJOBCATEGORY + """
- ON
+ ON
""" + self.TABLEUSERJOB + """.jobCategoryId = """ + self.TABLEJOBCATEGORY + """.jobCategoryId
- WHERE
+ WHERE
userId = %s"""
self.exec_cmd(reqGetAll, [proId])
return self.cur.fetchall()
@@ -101,15 +101,15 @@ class DbSearch(dbmain.DbMain):
# Récupération des notes d'un consultant par son nom
def get_pro_note_by_proid(self, proId):
reqCountMission = """
- SELECT
- note
- FROM
+ SELECT
+ note
+ FROM
""" + self.TABLEMISSION + """
- INNER JOIN
- """ + self.TABLEUSERINFO + """
- ON
+ INNER JOIN
+ """ + self.TABLEUSERINFO + """
+ ON
""" + self.TABLEMISSION + """.proId = """ + self.TABLEUSERINFO + """.userId
- WHERE
+ WHERE
proId = %s"""
self.exec_cmd(reqCountMission, [proId])
return self.cur.fetchall()
@@ -120,9 +120,9 @@ class DbSearch(dbmain.DbMain):
# Récupérer toutes les infos de la table jobCategory
def get_job_all(self) -> list:
reqGetAllJobs = """
- SELECT
- *
- FROM
+ SELECT
+ *
+ FROM
""" + self.TABLEJOBCATEGORY
self.exec_cmd(reqGetAllJobs)
return self.cur.fetchall()
@@ -130,9 +130,9 @@ class DbSearch(dbmain.DbMain):
# Récupérer toutes les infos de la table jobCategory
def get_job_by_jobid(self, jobId: int) -> list:
reqGetJobinfo = """
- SELECT
- *
- FROM
+ SELECT
+ *
+ FROM
""" + self.TABLEJOBCATEGORY + """
WHERE
jobCategoryId = %s"""
diff --git a/src/database/dbuser.py b/src/database/dbuser.py
index a57845c..9fbfeb6 100644
--- a/src/database/dbuser.py
+++ b/src/database/dbuser.py
@@ -18,7 +18,7 @@ class DbUser(dbmain.DbMain):
# ****************************************************************************
# GESTION DES UTILISATEURS
# ****************************************************************************
- # Enregistrement d'un nouvel utilisateur
+ # Enregistrement d'un nouvel utilisateur
def register_user(self, email: str, password: str, userStatus: int) -> int:
# On vérifie si l'email existe deja dans la bdd
exist = self.check_exist_email(email)
@@ -28,10 +28,10 @@ class DbUser(dbmain.DbMain):
passwordHash = self.crypt_pass(password)
# Préparation de la requète
reqAddUser = """
- INSERT INTO
- """ + self.TABLEUSERACCOUNT + """
- (email, password, inscriptionDate, userStatus)
- VALUES
+ INSERT INTO
+ """ + self.TABLEUSERACCOUNT + """
+ (email, password, inscriptionDate, userStatus)
+ VALUES
(%s, %s, %s, %s)"""
# Execution de la requète
self.exec_cmd(
@@ -52,11 +52,11 @@ class DbUser(dbmain.DbMain):
def check_user_credential(self, email, password):
# Préparation de la requète pour récupérer les infos ou l'email est présent
reqCheckCredential = """
- SELECT
- userId, password
- FROM
+ SELECT
+ userId, password
+ FROM
""" + self.TABLEUSERACCOUNT + """
- WHERE
+ WHERE
email = %s """
# Execution de la requète
self.exec_cmd(reqCheckCredential, [email])
@@ -71,32 +71,32 @@ class DbUser(dbmain.DbMain):
isPro: bool, oldJobs: list = None, newJobs: list = None) -> None:
# Préparation de la requète pour mise à jour des infos
reqAddInfoClient = """
- REPLACE INTO
- """ + self.TABLEUSERINFO + """
+ REPLACE INTO
+ """ + self.TABLEUSERINFO + """
(lastname, firstname, phoneNumber,
adress, zipCode, city, userId)
- VALUES
+ VALUES
(%s, %s, %s, %s, %s, %s, %s)"""
reqAddInfoPro = """
- REPLACE INTO
- """ + self.TABLEUSERINFO + """
+ REPLACE INTO
+ """ + self.TABLEUSERINFO + """
(lastname, firstname, phoneNumber,
adress, zipCode, city, degree,
capability, description, userId)
VALUES
(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
reqAddInfoProJobs = """
- INSERT INTO
- """ + self.TABLEUSERJOB + """
- (jobCategoryId, userId)
- VALUES
+ INSERT INTO
+ """ + self.TABLEUSERJOB + """
+ (jobCategoryId, userId)
+ VALUES
(%s, %s)"""
reqRemoveInfoProJobs = """
- DELETE FROM
- """ + self.TABLEUSERJOB + """
- WHERE
+ DELETE FROM
+ """ + self.TABLEUSERJOB + """
+ WHERE
jobCategoryId = %s
- AND
+ AND
userId = %s"""
if not isPro:
userInfos.append(userId)
@@ -118,11 +118,11 @@ class DbUser(dbmain.DbMain):
def check_token_autologin(self, email, token):
# Préparation de la requète pour récupérer les infos ou l'email est présent
reqCheckToken = """
- SELECT
- userId, tokenAutoLogin
- FROM
- """ + self.TABLEUSERACCOUNT + """
- WHERE
+ SELECT
+ userId, tokenAutoLogin
+ FROM
+ """ + self.TABLEUSERACCOUNT + """
+ WHERE
email = %s"""
# Exécution de la requète
self.exec_cmd(reqCheckToken, [email])
@@ -135,11 +135,11 @@ class DbUser(dbmain.DbMain):
def update_token_autologin(self, email, token):
# Préparation de la requète pour mise à jour du jeton d'auto-connection
reqUpdateToken = """
- UPDATE
- """ + self.TABLEUSERACCOUNT + """
- SET
+ UPDATE
+ """ + self.TABLEUSERACCOUNT + """
+ SET
tokenAutoLogin = %s
- WHERE
+ WHERE
email = %s"""
# Execution de la requète
self.exec_cmd(reqUpdateToken, [token, email])
@@ -148,11 +148,11 @@ class DbUser(dbmain.DbMain):
def del_token_autologin(self, email):
# Préparation de la requète pour supression du jeton d'auto-connection
reqDeleteToken = """
- UPDATE
- """ + self.TABLEUSERACCOUNT + """
- SET
- tokenAutoLogin = NULL
- WHERE
+ UPDATE
+ """ + self.TABLEUSERACCOUNT + """
+ SET
+ tokenAutoLogin = NULL
+ WHERE
email = %s"""
# Execution de la requète
self.exec_cmd(reqDeleteToken, [email])
diff --git a/src/gui/globalMenu.py b/src/gui/globalMenu.py
index 36a88c4..4625a54 100644
--- a/src/gui/globalMenu.py
+++ b/src/gui/globalMenu.py
@@ -3,33 +3,46 @@ from os.path import join
from pathlib import Path
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction
-from src.gui import windowAPropos, windowAdmin, windowUserInfo
+from src.gui import windowAPropos, windowAdmin, windowUserInfo, windowMissions
def init(mainWindow):
- logo = join(Path(__file__).parent, "ressources", "icon.ico")
+ logo: str = join(Path(__file__).parent, "ressources", "icon.ico")
mainWindow.setWindowIcon(QIcon(logo))
mainWindow.setWindowTitle("Alphajob")
- menu = mainWindow.menuBar()
+ menu: object = mainWindow.menuBar()
menu.clear() # Clear au cas où
if mainWindow.userConnected and mainWindow.userStatus == "Admin":
- menuAdmin = menu.addMenu("Admin")
- btnEmplois = QAction("Gestion des emplois", mainWindow)
+ menuAdmin: object = menu.addMenu("Admin")
+ btnEmplois: object = QAction("Gestion des emplois", mainWindow)
+ btnUsers: object = QAction("Gestion des Utilisateurs", mainWindow)
+ btnMissions: object = QAction("Gestion des missions", mainWindow)
btnEmplois.triggered.connect(lambda: windowAdmin.admin_emplois(mainWindow))
- btnUsers = QAction("Gestion des Utilisateurs", mainWindow)
btnUsers.triggered.connect(lambda: windowAdmin.admin_users(mainWindow))
- btnMissions = QAction("Gestion des missions", mainWindow)
btnMissions.triggered.connect(lambda: windowAdmin.admin_missions(mainWindow))
menuAdmin.addAction(btnEmplois)
menuAdmin.addAction(btnUsers)
menuAdmin.addAction(btnMissions)
elif mainWindow.userConnected and (
mainWindow.userStatus == "Pro" or mainWindow.userStatus == "Client"):
- menuUserInfos = menu.addMenu("Mes infos")
- btnMesInfos = QAction("Gérer ses infos", mainWindow)
+ # Infos
+ menuUserInfos: object = menu.addMenu("Mes infos")
+ btnMesInfos: object = QAction("Gérer ses infos", mainWindow)
btnMesInfos.triggered.connect(lambda: windowUserInfo.modif_infos(mainWindow))
menuUserInfos.addAction(btnMesInfos)
+ # Missions
+ menuMissions: object = menu.addMenu("Mes missions")
+ btnPendingMission: object = QAction("Missions en attente", mainWindow)
+ btnOngoignMission: object = QAction("Missions en cours", mainWindow)
+ btnCompletedMission: object = QAction("Missions en terminées", mainWindow)
+ btnPendingMission.triggered.connect(lambda: windowMissions.main(mainWindow, "pending"))
+ btnOngoignMission.triggered.connect(lambda: windowMissions.main(mainWindow, "ongoing"))
+ btnCompletedMission.triggered.connect(lambda: windowMissions.main(mainWindow, "completed"))
+ menuMissions.addAction(btnPendingMission)
+ menuMissions.addAction(btnOngoignMission)
+ menuMissions.addAction(btnCompletedMission)
- menuOptions = menu.addMenu("Options")
- btnApropos = QAction("A propos", mainWindow)
+
+ menuOptions: object = menu.addMenu("Options")
+ btnApropos: object = QAction("A propos", mainWindow)
btnApropos.triggered.connect(lambda: windowAPropos.main(mainWindow))
menuOptions.addAction(btnApropos)
diff --git a/src/gui/pageHome.py b/src/gui/pageHome.py
index 98a504f..03f8d81 100644
--- a/src/gui/pageHome.py
+++ b/src/gui/pageHome.py
@@ -1,7 +1,7 @@
from PyQt5.QtWidgets import (
QGroupBox, QPushButton,
- QComboBox, QLineEdit,
+ QComboBox, QLineEdit,
QHBoxLayout, QWidget,
QVBoxLayout, QLabel
)
@@ -47,7 +47,7 @@ def main(mainWindow, reloadMenu = False) -> None:
inputRechercheNom = QLineEdit()
btnRechercheNom = QPushButton("Rechercher")
btnRechercheNom.clicked.connect(
- lambda:
+ lambda:
core_search_name(
mainWindow,
inputRechercheNom.text()
@@ -60,9 +60,9 @@ def main(mainWindow, reloadMenu = False) -> None:
comboRechercheCat.addItem("{0}".format(i[2]), i[0])
btnRechercheCat = QPushButton("Rechercher")
btnRechercheCat.clicked.connect(
- lambda:
+ lambda:
core_search_id(
- mainWindow,
+ mainWindow,
comboRechercheCat.currentData()
)
)
@@ -95,7 +95,7 @@ def main(mainWindow, reloadMenu = False) -> None:
if hasattr(mainWindow, "mainWidget"):
mainWindow.mainWidget.deleteLater()
-
+
mainWindow.mainWidget = QWidget()
mainWindow.mainWidget.setLayout(layoutMain)
mainWindow.setCentralWidget(mainWindow.mainWidget)
diff --git a/src/gui/pageLogin.py b/src/gui/pageLogin.py
index 083ae84..e255dfb 100644
--- a/src/gui/pageLogin.py
+++ b/src/gui/pageLogin.py
@@ -32,7 +32,7 @@ def main(mainWindow) -> None:
leditPassword.setEchoMode(QLineEdit.Password)
btnConnexion = QPushButton("Connexion")
btnConnexion.clicked.connect(
- lambda:
+ lambda:
core_login(
mainWindow,
leditMail.text(),
@@ -46,7 +46,7 @@ def main(mainWindow) -> None:
LayoutInfoConnexion.addWidget(labPassword, 1, 0)
LayoutInfoConnexion.addWidget(leditPassword, 1, 1)
LayoutInfoConnexion.addWidget(btnConnexion, 2, 1)
-
+
layoutGroupConnexion = QHBoxLayout()
layoutGroupConnexion.addStretch()
layoutGroupConnexion.addLayout(LayoutInfoConnexion)
diff --git a/src/gui/windowMissions.py b/src/gui/windowMissions.py
new file mode 100644
index 0000000..d6fe57b
--- /dev/null
+++ b/src/gui/windowMissions.py
@@ -0,0 +1,153 @@
+
+from PyQt5.QtWidgets import (
+ QDialog, QGroupBox, QLabel,
+ QVBoxLayout, QHBoxLayout,
+ QPushButton, QMessageBox,
+ QLineEdit, QComboBox
+)
+from src.database.dbmission import DbMission
+
+
+def review_mission(dial: object, dbmission: object, missionId: int) -> None:
+ dialReview = QDialog(parent=dial)
+
+ lineNote = QHBoxLayout()
+ labNote = QLabel("Note: ")
+ cmbNote = QComboBox()
+ for i in range(6):
+ cmbNote.addItem(str(i), i)
+ lineNote.addWidget(labNote)
+ lineNote.addStretch()
+ lineNote.addWidget(cmbNote)
+
+ lineReview = QHBoxLayout()
+ labReview = QLabel("Avis: ")
+ inpReview = QLineEdit()
+ lineReview.addWidget(labReview)
+ lineReview.addStretch()
+ lineReview.addWidget(inpReview)
+
+ lineBtn = QHBoxLayout()
+ btnValider = QPushButton("Valider")
+ btnValider.clicked.connect(
+ lambda:
+ [dbmission.review_mission(missionId, inpReview.text(), cmbNote.currentData()),
+ dbmission.validate_mission_client_by_missionid(missionId),
+ QMessageBox.information(
+ dial,
+ "Mission",
+ "La mission a été validée"
+ ),
+ dialReview.close()]
+ )
+ lineBtn.addStretch()
+ lineBtn.addWidget(btnValider)
+ lineBtn.addStretch()
+
+
+ layReview = QVBoxLayout()
+ layReview.addLayout(lineNote)
+ layReview.addLayout(lineReview)
+ layReview.addLayout(lineBtn)
+
+ grpMain = QGroupBox("Donnez votre avis")
+ grpMain.setLayout(layReview)
+ layMain = QVBoxLayout()
+ layMain.addWidget(grpMain)
+
+ dialReview.setLayout(layMain)
+ dialReview.show()
+
+
+def validate_mission(mainWindow: object, dial: object, missionId: int, status: str) -> None:
+ dbmission: object = DbMission(mainWindow)
+ if status == "acceptedByPro":
+ dbmission.accept_mission_by_missionid(missionId)
+ QMessageBox.information(
+ dial,
+ "Mission",
+ "La mission a bien été acceptée"
+ )
+ elif status == "validatedByPro":
+ dbmission.validate_mission_pro_by_missionid(missionId)
+ QMessageBox.information(
+ dial,
+ "Mission",
+ "La mission a été validée"
+ )
+ elif status == "validatedByClient":
+ review_mission(dial, dbmission, missionId)
+
+ dial.close()
+
+
+def get_missions_status(mainWindow: object, status: str) -> list:
+ dbmission: object = DbMission(mainWindow)
+ if mainWindow.userStatus == "Pro":
+ missionsAll: list = dbmission.get_mission_by_proid(mainWindow.userId)
+ elif mainWindow.userStatus == "Client":
+ missionsAll: list = dbmission.get_mission_by_clientid(mainWindow.userId)
+
+ if status == "pending":
+ missionsPending = [list(i) for i in missionsAll if i[5] == None]
+ return missionsPending
+ elif status == "ongoing":
+ missionsOngoing = [list(i) for i in missionsAll if i[5] != None and (i[6] == None or i[7] == None)]
+ return missionsOngoing
+ elif status == "completed":
+ missionsCompleted = [list(i) for i in missionsAll if (i[6] != None and i[7] != None)]
+ return missionsCompleted
+
+
+def main(mainWindow: object, status: str) -> None:
+ missions: list = get_missions_status(mainWindow, status)
+ dial: object = QDialog(parent = mainWindow)
+
+ linesMission: list = []
+ for mission in missions:
+ line = QHBoxLayout()
+ labMission = QLabel(" - ".join([str(i) for i in mission[1:] if i != None]))
+ line.addWidget(labMission)
+ if status == "pending" and mainWindow.userStatus == "Pro":
+ btnValidate = QPushButton("Valider")
+ btnValidate.clicked.connect(
+ lambda checked, missionId=mission[0]:
+ validate_mission(mainWindow, dial, missionId, "acceptedByPro")
+ )
+ line.addStretch()
+ line.addWidget(btnValidate)
+ elif status == "ongoing" and mainWindow.userStatus == "Pro" and mission[7] == None:
+ btnValidate = QPushButton("Valider")
+ btnValidate.clicked.connect(
+ lambda checked, missionId=mission[0]:
+ validate_mission(mainWindow, dial, missionId, "validatedByPro")
+ )
+ line.addStretch()
+ line.addWidget(btnValidate)
+ elif status == "ongoing" and mainWindow.userStatus == "Client" and mission[6] == None:
+ btnValidate = QPushButton("Valider")
+ btnValidate.clicked.connect(
+ lambda checked, missionId=mission[0]:
+ validate_mission(mainWindow, dial, missionId, "validatedByClient")
+ )
+ line.addStretch()
+ line.addWidget(btnValidate)
+
+ linesMission.append(line)
+
+ layMission = QVBoxLayout()
+ for i in linesMission:
+ layMission.addLayout(i)
+
+ if status == "pending":
+ grpMain = QGroupBox("Missions en attente")
+ elif status == "ongoing":
+ grpMain = QGroupBox("Missions en cours")
+ elif status == "completed":
+ grpMain = QGroupBox("Missions terminées")
+
+ grpMain.setLayout(layMission)
+ layMain = QVBoxLayout()
+ layMain.addWidget(grpMain)
+ dial.setLayout(layMain)
+ dial.show()
diff --git a/src/gui/windowRecherche.py b/src/gui/windowRecherche.py
index c86bcc9..dd71f08 100644
--- a/src/gui/windowRecherche.py
+++ b/src/gui/windowRecherche.py
@@ -23,11 +23,10 @@ def more_infos(mainWindow, proId):
"Ville",
]
text: list = []
- print(resRecherche)
for i in range(len(resRecherche)):
text.append(f"{label[i]}: {resRecherche[i]}")
- QMessageBox.information(
+ QMessageBox.information(
mainWindow,
"Informations du pro",
"\n".join(text)
diff --git a/src/gui/windowUserInfo.py b/src/gui/windowUserInfo.py
index ccdcb27..e0a9b08 100644
--- a/src/gui/windowUserInfo.py
+++ b/src/gui/windowUserInfo.py
@@ -15,7 +15,7 @@ def add_job(jobName: str, jobId: int, listMyJobs: list, layMyJobs: object) -> No
labJob: object = QLabel(jobName)
btnRemoveJob: object = QPushButton("Supprimer")
btnRemoveJob.clicked.connect(
- lambda checked, jId=jobId, layItem=lineMyJobs: [
+ lambda checked, jId=jobId, layItem=lineMyJobs: [
listMyJobs.remove(jId),
delete_job(layItem)
]
@@ -25,6 +25,7 @@ def add_job(jobName: str, jobId: int, listMyJobs: list, layMyJobs: object) -> No
lineMyJobs.addWidget(btnRemoveJob)
layMyJobs.addLayout(lineMyJobs)
+
def delete_job(layLineJob: object) -> None:
lab: object = layLineJob.itemAt(0).widget()
btn: object = layLineJob.itemAt(2).widget()
@@ -32,6 +33,7 @@ def delete_job(layLineJob: object) -> None:
btn.deleteLater()
layLineJob.deleteLater()
+
def validate(mainWindow: object, dial: object, layoutLines: list, oldJobs: list = None, newJobs: list = None) -> None:
user: object = DbUser(mainWindow = mainWindow)
userInfos: list = []
@@ -59,7 +61,7 @@ def validate(mainWindow: object, dial: object, layoutLines: list, oldJobs: list
"Mes informations",
"Modification enregistrée"
)
-
+
# https://stackoverflow.com/questions/3077192/get-a-layouts-widgets-in-pyqt
def modif_infos(mainWindow: object) -> None:
@@ -117,7 +119,7 @@ def modif_infos(mainWindow: object) -> None:
layoutLines[i].addWidget(QLineEdit(maxLength=6))
else:
layoutLines[i].addWidget(QLineEdit(maxLength=128))
-
+
if mainWindow.userStatus == "Pro":
allJobs: object = search.get_job_all()
labSelectJobs: object = QLabel("Les emplois:")
@@ -133,7 +135,7 @@ def modif_infos(mainWindow: object) -> None:
cmbAllJobs.currentData(),
newJobs,
layMyJobs
- )
+ )
)
lineSelectJobs.addWidget(labSelectJobs)
lineSelectJobs.addStretch()
@@ -163,14 +165,14 @@ def modif_infos(mainWindow: object) -> None:
modifLayout: object = QVBoxLayout()
for i in layoutLines:
modifLayout.addLayout(layoutLines[i])
-
+
btnModif: object = QPushButton("modifer")
btnModif.clicked.connect(
- lambda:
+ lambda:
validate(
mainWindow,
dial,
- layoutLines,
+ layoutLines,
oldJobs,
newJobs
) if mainWindow.userStatus == "Pro"
diff --git a/src/main.py b/src/main.py
index bbff713..8ea9c2c 100644
--- a/src/main.py
+++ b/src/main.py
@@ -11,10 +11,10 @@ class mainWindow(QMainWindow):
mysqlReachable: bool = False
- userConnected: bool = False
- userId: str = ""
+ userConnected: bool = True
+ userId: str = "24"
userEmail: str = ""
- userStatus: str = ""
+ userStatus: str = "Client"
userInscrDate: str = ""
def __init__(self) -> None:
diff --git a/src/setup.py b/src/setup.py
index 56e2478..db06109 100644
--- a/src/setup.py
+++ b/src/setup.py
@@ -1,4 +1,7 @@
from os import system
-system("pyinstaller -w -i ./gui/ressources/icon.ico main.py")
+
+res = system("pyinstaller -w -i .\\gui\\ressources\\icon.ico main.py")
+if res == 0:
+ system(".\\dist\\main\\main.exe")