From 1eaf21fd423e5dedf1ed4361b0e9b6cbbcfc9fa0 Mon Sep 17 00:00:00 2001 From: Debulois Date: Sun, 1 May 2022 11:44:09 +0200 Subject: Ajout gestion des missions coté client & pro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gui/globalMenu.py | 35 +++++++---- src/gui/pageHome.py | 10 +-- src/gui/pageLogin.py | 4 +- src/gui/windowMissions.py | 153 +++++++++++++++++++++++++++++++++++++++++++++ src/gui/windowRecherche.py | 3 +- src/gui/windowUserInfo.py | 16 ++--- 6 files changed, 194 insertions(+), 27 deletions(-) create mode 100644 src/gui/windowMissions.py (limited to 'src/gui') 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" -- cgit v1.2.3