############################################################################ # # # Description: Fenêtre de resultat d'une recherche et fenêtre permettant # # de mandater un professionnel # # # ############################################################################ # https://docs.python.org/3/faq/programming.html#why-do-lambdas-defined-in-a-loop-with-different-values-all-return-the-same-result # https://stackoverflow.com/questions/53751106/create-lambda-functions-in-a-loop-for-pyqt5-signals?noredirect=1 # Import de PyQt5 from PyQt5.QtWidgets import ( QDialog, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QGroupBox, QComboBox, QLineEdit, QMessageBox ) # Import des éléments locaux from src.database.dbsearch import DbSearch from src.database.dbmission import DbMission def core_mandater(mainWindow: object, dial: object, proId: int) -> None: """ Fenêtre permettant de mandater un professionnel """ # Instaciation des méthodes pour rechercher et gérer les missions dans la BDD dbmission: object = DbMission(mainWindow) dbsearch: object = DbSearch(mainWindow) # Récupération des emplois du Pro avec son ID proJobs: list = dbsearch.get_pro_job_by_proid(proId) # Instanciation d'une fenêtre simple dial: object = QDialog(dial) # Widgets pour pouvoir mandater le pro labInpMandate: object = QLabel("Sujet de la mission:") inpMandate: object = QLineEdit(maxLength=128) labCmbMandate: object = QLabel("Profession concernée:") cmbMandate: object = QComboBox() for i in proJobs: cmbMandate.addItem(f"{i[2]}", i[0]) btnMandate = QPushButton("Mandater") btnMandate.clicked.connect( lambda: [ dbmission.register_mission( inpMandate.text(), mainWindow.userId, proId, cmbMandate.currentData() ), QMessageBox.information( dial, "Mandater une mission", "Votre mission à bien été mandatée" ), dial.close() ] ) # Layout pour les lignes layInpMandate: object = QHBoxLayout() layInpMandate.addWidget(labInpMandate) layInpMandate.addStretch() layInpMandate.addWidget(inpMandate) layCmbMandate: object = QHBoxLayout() layCmbMandate.addWidget(labCmbMandate) layCmbMandate.addStretch() layCmbMandate.addWidget(cmbMandate) layBtnMandate: object = QHBoxLayout() layBtnMandate.addStretch() layBtnMandate.addWidget(btnMandate) layBtnMandate.addStretch() # Layout du formulaire pour mandater layGrp: object = QVBoxLayout() layGrp.addLayout(layInpMandate) layGrp.addLayout(layCmbMandate) layGrp.addLayout(layBtnMandate) # GroupBox du formulaire grpMandate: object = QGroupBox() grpMandate.setLayout(layGrp) # Layout principal auquel on donne le GroupBox layMain: object = QVBoxLayout() layMain.addWidget(grpMandate) dial.setLayout(layMain) # Affichage de la fenêtre dial.show() def core_more_infos(mainWindow: object, dial: object, proId: int) -> None: """ Fenêtre permettant de voir toutes les infos d'un professionnel """ # Instanciation d'une fenètre simple dial: object = QDialog(dial) # Instanciation des méthode de recherche dans la BDD search: object = DbSearch(mainWindow) # Récupération des infos de l'utilisateur en se passant de son id (champ 1) resRecherche: list = search.get_user_info_by_userid(proId)[0][1:] # Liste comprenant le text des labels labelsText: list = [ "Nom", "Prénom", "Diplôme", "Capacités", "Description", "Téléphone", "Adresse", "Code postale", "Ville", ] # Pour chaque élément dans la liste des textes de label on crée # une ligne avec le resultat de la recherche qui lui est lié layProInfo = QVBoxLayout() for i in range(len(resRecherche)): line: object = QHBoxLayout() line.addWidget(QLabel(f"{labelsText[i]}: {resRecherche[i]}")) layProInfo.addLayout(line) # Si on est connecté en tant que client on rajoute le bouton pour mandater if mainWindow.userStatus == "Client": layBtnMandate: object = QHBoxLayout() btnMandate: object = QPushButton("Mandater") btnMandate.clicked.connect( lambda: core_mandater(mainWindow, dial, proId) ) layBtnMandate.addStretch() layBtnMandate.addWidget(btnMandate) layBtnMandate.addStretch() layProInfo.addLayout(layBtnMandate) # Enfin le GroupBox qui va recevoir l'ensemble grpProInfo: object = QGroupBox() grpProInfo.setLayout(layProInfo) # Le layout principal layMain: object = QVBoxLayout() layMain.addWidget(grpProInfo) dial.setLayout(layMain) # On affiche la fenêtre dial.show() def window_main(mainWindow: object, results: list) -> None: """ Fenêtre affichant le résultat d'une recherche """ # Instanciation d'une fenêtre simple dial: object = QDialog(parent=mainWindow) # On défini le titre de cette fenêtre dial.setWindowTitle("Résulta de la Recherche") # On crée une liste qui va recevoir les lignes qui possède # les widgets définis avec le payload des résultats linesResult: list = [] for i in results: layoutLine = QHBoxLayout() layoutLine.addWidget(QLabel(i["text"])) btnInfos: object = QPushButton("Infos") btnInfos.clicked.connect( lambda checked, proId=i["id"]: core_more_infos(mainWindow, dial, proId) ) layoutLine.addStretch() layoutLine.addWidget(btnInfos) linesResult.append(layoutLine) # Layout qui va recvoir les lignes layRecherche: object = QVBoxLayout() for i in linesResult: layRecherche.addLayout(i) # GroupBox de la recherche grpRecherche: object = QGroupBox("Recherche") grpRecherche.setLayout(layRecherche) # Layout principal a qui on donne le GroupBox layoutMain: object = QVBoxLayout() layoutMain.addWidget(grpRecherche) dial.setLayout(layoutMain) # On afficha la fenêtre dial.show()