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()