diff options
Diffstat (limited to 'src/app/windowMissions.py')
| -rw-r--r-- | src/app/windowMissions.py | 129 |
1 files changed, 100 insertions, 29 deletions
diff --git a/src/app/windowMissions.py b/src/app/windowMissions.py index 5878c8a..c3d225c 100644 --- a/src/app/windowMissions.py +++ b/src/app/windowMissions.py @@ -1,34 +1,37 @@ +############################################################################ +# # +# Description: Fenêtres et fonctions permettant de gérer ses missions # +# # +############################################################################ + +# Import de PyQt5 from PyQt5.QtWidgets import ( QDialog, QGroupBox, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QMessageBox, QLineEdit, QComboBox ) +# Import des éléments locaux from src.database.dbmission import DbMission +from src.database.dbsearch import DbSearch def core_review(dial: object, dbmission: object, missionId: int) -> None: - """""" + """ + Fenêtre permettant de donner un avis et une note à une mission + en tant que Client. + """ + # Instanciation d'une nouvealle fenêtre simple dialReview: object = QDialog(parent=dial) - # - lineNote: object = QHBoxLayout() + # Widgets pour pouvoir laisser un commentaire 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: [ @@ -42,27 +45,44 @@ def core_review(dial: object, dbmission: object, missionId: int) -> None: dialReview.close() ] ) + # Layout des lignes avec leurs widgets + lineNote: object = QHBoxLayout() + lineNote.addWidget(labNote) + lineNote.addStretch() + lineNote.addWidget(cmbNote) + lineReview: object = QHBoxLayout() + lineReview.addWidget(labReview) + lineReview.addStretch() + lineReview.addWidget(inpReview) + lineBtn: object = QHBoxLayout() lineBtn.addStretch() lineBtn.addWidget(btnValider) lineBtn.addStretch() - # + # Layout accueillant les lignes layReview: object = QVBoxLayout() layReview.addLayout(lineNote) layReview.addLayout(lineReview) layReview.addLayout(lineBtn) - # + # GroupBox principal grpMain: object = QGroupBox("Donnez votre avis") grpMain.setLayout(layReview) + # Layout principal layMain: object = QVBoxLayout() layMain.addWidget(grpMain) - # dialReview.setLayout(layMain) + # Affichage de la fenêtre dialReview.show() def core_validate(mainWindow: object, dial: object, missionId: int, status: str) -> None: - """""" + """ + Valide une mission et en fonction du statut de l'utilisateur + et de l'etat de la mission, renvoie vers le bon message ou + la possibilitée de laisser un commentaire + """ + # Instanciation des méthodes pour pouvoir gérer les missions dans la BDD dbmission: object = DbMission(mainWindow) + # Validation en fonction de l'étape à laquelle se trouve actuellement la mission if status == "acceptedByPro": dbmission.accept_mission_by_missionid(missionId) QMessageBox.information( @@ -80,17 +100,27 @@ def core_validate(mainWindow: object, dial: object, missionId: int, status: str) elif status == "validatedByClient": core_review(dial, dbmission, missionId) + # On ferme la fenetre pour éviter d'avoir à la rafraichir dial.close() def core_get_missions_by_status(mainWindow: object, status: str) -> list: - """""" + """ + Récupération des missions liées à l'utilisateur et sélection + des missions ayant le statut demandé + """ + # Instanciation des méthodes pour pouvoir gérer les missions dans la BDD dbmission: object = DbMission(mainWindow) + # Récupération des missions en fonction du status et selon l'ID + # de l'utilisateur actuellement connecté 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) + # Selon la fenêtre appelée dans le menu bar, on sélectionne les missions ayant ce status + # en regardant si les champs de validation sont vide ou non, on converti aussi les tuple des resultats + # que renvoi la BDD en list if status == "pending": missionsPending: list = [list(i) for i in missionsAll if i[5] == None] return missionsPending @@ -103,34 +133,71 @@ def core_get_missions_by_status(mainWindow: object, status: str) -> list: def window_main(mainWindow: object, status: str) -> None: - """""" - dial: object = QDialog(parent=mainWindow) - missions: list = core_get_missions_by_status(mainWindow, status) + """ + Fenêtre permettant de gérer ses missions + """ + dbsearch: object = DbSearch(mainWindow) + # Instanciation d'une nouvealle fenêtre simple + dial: object = QDialog(parent=mainWindow) + # Récupération des missions en fonction su status sélectionné + missions: list = core_get_missions_by_status(mainWindow, status) + # Liste qui va accueillir les lignes linesMission: list = [] - for mission in missions: - line: object = QHBoxLayout() - labMission: object = QLabel(" - ".join([str(i) for i in mission[1:] if i != None])) + # Mission à la place de "i" pour eviter d'avoir un "j" par la suite + for i in missions: + # Widgets de la ligne + line: object = QHBoxLayout() + # On récupère le nom FR de l'emploi + job = dbsearch.get_job_by_jobid(i[8])[0][2] + # On formate la ligne avec les infos intéréssantes selon le status de la mission + if status == "pending": + labMission: object = QLabel( + f"Emise le: {i[1].strftime('%m/%d/%Y')} Pro: {i[10]} Job: {job} Sujet: {i[2]}" + ) + elif status == "ongoing": + if i[6] != None: + valClient = i[6].strftime('%m/%d/%Y') + else: + valClient = "N/A" + + if i[7] != None: + valPro = i[7].strftime('%m/%d/%Y') + else: + valPro = "N/A" + + labMission: object = QLabel( + f"Emise le: {i[1].strftime('%m/%d/%Y')} Pro: {i[10]} Job: {job} Sujet: {i[2]} Validé Client: {valClient} Validé Pro: {valPro}" + ) + elif status == "completed": + labMission: object = QLabel( + f"Emise le: {i[1].strftime('%m/%d/%Y')} Pro: {i[10]} Job: {job} Sujet: {i[2]} Validé Client: {i[6].strftime('%m/%d/%Y')} Validé Pro: {i[7].strftime('%m/%d/%Y')} Note: {i[3]} Avis: {i[4]}" + ) + line.addWidget(labMission) + # On vérifie si le status de la mission peut étre validé par l'utilisateur actuel + # Si c'est une mission en attente et que l'on est le Pro if status == "pending" and mainWindow.userStatus == "Pro": btnValidate: object = QPushButton("Valider") btnValidate.clicked.connect( - lambda checked, missionId=mission[0]: + lambda checked, missionId=i[0]: core_validate(mainWindow, dial, missionId, "acceptedByPro") ) line.addStretch() line.addWidget(btnValidate) - elif status == "ongoing" and mainWindow.userStatus == "Pro" and mission[7] == None: + # Si la mission est en cours et qu'elle n'est pas encore validé par le pro et que l'on est ce dernier + elif status == "ongoing" and mainWindow.userStatus == "Pro" and i[7] == None: btnValidate: object = QPushButton("Valider") btnValidate.clicked.connect( - lambda checked, missionId=mission[0]: + lambda checked, missionId=i[0]: core_validate(mainWindow, dial, missionId, "validatedByPro") ) line.addStretch() line.addWidget(btnValidate) - elif status == "ongoing" and mainWindow.userStatus == "Client" and mission[6] == None: + # Si la mission est en cours et que l'on est le client + elif status == "ongoing" and mainWindow.userStatus == "Client" and i[6] == None: btnValidate: object = QPushButton("Valider") btnValidate.clicked.connect( - lambda checked, missionId=mission[0]: + lambda checked, missionId=i[0]: core_validate(mainWindow, dial, missionId, "validatedByClient") ) line.addStretch() @@ -138,10 +205,12 @@ def window_main(mainWindow: object, status: str) -> None: linesMission.append(line) + # On ajoute chaque lignes au layout des missions layMission: object = QVBoxLayout() for i in linesMission: layMission.addLayout(i) + # On crée un GroupBox en le nommant en fonction du status des missions if status == "pending": grpMain: object = QGroupBox("Missions en attente") elif status == "ongoing": @@ -150,7 +219,9 @@ def window_main(mainWindow: object, status: str) -> None: grpMain: object = QGroupBox("Missions terminées") grpMain.setLayout(layMission) + # On ajout le GroupBox au layout principal layMain: object = QVBoxLayout() layMain.addWidget(grpMain) dial.setLayout(layMain) + # On affiche la fenêtre dial.show() |
