summaryrefslogtreecommitdiff
path: root/src/gui
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 /src/gui
parentafd6fb901b7e8f99cdb1bb0d2134cec2d6cebc3b (diff)
Ajout gestion des missions coté client & pro
Diffstat (limited to 'src/gui')
-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
6 files changed, 194 insertions, 27 deletions
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"