summaryrefslogtreecommitdiff
path: root/src/app/windowMissions.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/windowMissions.py')
-rw-r--r--src/app/windowMissions.py129
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()