from PyQt5.QtWidgets import ( QDialog, QGroupBox, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QMessageBox, QLineEdit, QComboBox ) from src.database.dbmission import DbMission def core_review(dial: object, dbmission: object, missionId: int) -> None: """""" dialReview: object = QDialog(parent=dial) # lineNote: object = QHBoxLayout() labNote: object = QLabel("Note: ") cmbNote: object = QComboBox() for i in range(6): cmbNote.addItem(str(i), i) lineNote.addWidget(labNote) lineNote.addStretch() lineNote.addWidget(cmbNote) # lineReview: object = QHBoxLayout() labReview: object = QLabel("Avis: ") inpReview: object = QLineEdit(maxLength=256) lineReview.addWidget(labReview) lineReview.addStretch() lineReview.addWidget(inpReview) # lineBtn: object = QHBoxLayout() btnValider: object = 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: object = QVBoxLayout() layReview.addLayout(lineNote) layReview.addLayout(lineReview) layReview.addLayout(lineBtn) # grpMain: object = QGroupBox("Donnez votre avis") grpMain.setLayout(layReview) layMain: object = QVBoxLayout() layMain.addWidget(grpMain) # dialReview.setLayout(layMain) dialReview.show() def core_validate(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": core_review(dial, dbmission, missionId) dial.close() def core_get_missions_by_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 = [list(i) for i in missionsAll if i[5] == None] return missionsPending elif status == "ongoing": missionsOngoing: list = [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 = [list(i) for i in missionsAll if (i[6] != None and i[7] != None)] return missionsCompleted def window_main(mainWindow: object, status: str) -> None: """""" dial: object = QDialog(parent=mainWindow) missions: list = core_get_missions_by_status(mainWindow, status) linesMission: list = [] for mission in missions: line: object = QHBoxLayout() labMission: object = QLabel(" - ".join([str(i) for i in mission[1:] if i != None])) line.addWidget(labMission) if status == "pending" and mainWindow.userStatus == "Pro": btnValidate: object = QPushButton("Valider") btnValidate.clicked.connect( lambda checked, missionId=mission[0]: core_validate(mainWindow, dial, missionId, "acceptedByPro") ) line.addStretch() line.addWidget(btnValidate) elif status == "ongoing" and mainWindow.userStatus == "Pro" and mission[7] == None: btnValidate: object = QPushButton("Valider") btnValidate.clicked.connect( lambda checked, missionId=mission[0]: core_validate(mainWindow, dial, missionId, "validatedByPro") ) line.addStretch() line.addWidget(btnValidate) elif status == "ongoing" and mainWindow.userStatus == "Client" and mission[6] == None: btnValidate: object = QPushButton("Valider") btnValidate.clicked.connect( lambda checked, missionId=mission[0]: core_validate(mainWindow, dial, missionId, "validatedByClient") ) line.addStretch() line.addWidget(btnValidate) linesMission.append(line) layMission: object = QVBoxLayout() for i in linesMission: layMission.addLayout(i) if status == "pending": grpMain: object = QGroupBox("Missions en attente") elif status == "ongoing": grpMain: object = QGroupBox("Missions en cours") elif status == "completed": grpMain: object = QGroupBox("Missions terminées") grpMain.setLayout(layMission) layMain: object = QVBoxLayout() layMain.addWidget(grpMain) dial.setLayout(layMain) dial.show()