############################################################################ # # # Description: Fenêtre principale avec l'accueil et les éléments pour # # effectuer une recherche # # # ############################################################################ # Import des éléments de PyQt5 from PyQt5.QtWidgets import ( QGroupBox, QPushButton, QComboBox, QLineEdit, QHBoxLayout, QWidget, QVBoxLayout, QLabel, QMessageBox ) # Import des éléments locals from src.app import ( mainLogin, mainRegister, mainMenuBar, windowRecherche, mainLogout ) from src.database.dbsearch import DbSearch def core_search_id(mainWindow: object, jobId: int) -> None: """ Recherche les professionnels ayant tel emploi par l'id de ce dernier. Renvoie le resultat de la recherche vers core_search_main """ # Instanciation dbsearch: object = DbSearch(mainWindow) # Recherche resRecherche: list = dbsearch.get_all_pro_by_jobid(jobId) # Si résultat on renvoie vers le "wrapper" de recherche, # sinon QMessage if resRecherche: core_search_main(mainWindow, resRecherche) else: QMessageBox.information( mainWindow, "Résultat", "Aucun résultat." ) def core_search_name(mainWindow: object, name: str) -> None: """ Recherche de professionnel par leur nom. Renvoie le resultat de la recherche vers core_search_main. """ # Instanciation dbsearch: object = DbSearch(mainWindow) # Recherche resRecherche: tuple = dbsearch.get_pro_info_by_lastname(name) # Si résultat on renvoie vers le "wrapper" de recherche, # sinon QMessage if resRecherche: core_search_main(mainWindow, resRecherche) else: QMessageBox.information( mainWindow, "Résultat", "Aucun résultat." ) def core_search_main(mainWindow: object, resRecherche: tuple) -> None: """ Prépare la données reçue par les fonctions core_search_id et core_search_name en ajoutant tous les emplois des professionels présant dans le résultat de la recherche et envoie l'ensemble à "winwdowRecherche" """ # Instaciation dbsearch: object = DbSearch(mainWindow) # Préparation du "payload", une liste pour tous les résultats results: list = [] # Pour chaque éléments dans les résultat de la recherche for i in resRecherche: # On initialise un dictionnaire ("Associative array" en PHP) proInfo: dict = {} # id -> proId proInfo["id"] = i[0] # text -> sera le texte à afficher resJobs = dbsearch.get_pro_job_by_proid(proInfo["id"]) # Tout depuis l'entrée '1' de la liste proInfo["text"] = list(i[1:]) # Et à '2' on ajoute le nom fr(i[2]) de chaque jobId associés au pro liée par un ", " proInfo["text"].insert(2, ", ".join([j[2] for j in resJobs])) # On transforme la liste en texte en liant les éléments avec un " - " proInfo["text"] = " - ".join(proInfo["text"]) results.append(proInfo) windowRecherche.window_main(mainWindow, results) def window_main(mainWindow, reloadMenu = False) -> None: """ Page principale de l'app d'où l'on peut effectuer des recherches """ # Si l'argument reloaMenu de la fonction est vrai on recharge la menuBar if reloadMenu: mainMenuBar.menu_init(mainWindow) # Instanciation de la classe dbsearch: object = DbSearch(mainWindow) # On check si la variable userConnected de la classe principale est vrai ou pas # pour savoir si un utilisateur est connecté, on crée le widget QLabel en conséquence if not mainWindow.userConnected: connState: object = QLabel("Non connecté.") else: connState: object = QLabel( f"Connecté: {mainWindow.userEmail} - {mainWindow.userStatus}" ) # On adapte les widgets QPushButton en fonction if not mainWindow.userConnected: btnConnexion: object = QPushButton("Connexion") # /!\ Association du bouton necessaire avec un lambda (fonction anonyme) # sinon la fonction est executé à l'execution de la fonction et non quand # on clique sur le bouton btnConnexion.clicked.connect(lambda: mainLogin.window_main(mainWindow)) else: btnDeconnexion: object = QPushButton("Déconnexion") btnDeconnexion.clicked.connect(lambda: [ mainLogout.core_logout(mainWindow), window_main(mainWindow, True) ] ) btnInscription: object = QPushButton("Inscription") btnInscription.clicked.connect(lambda: mainRegister.window_main(mainWindow)) # Partie layout des boutons de navigation layUser: object = QHBoxLayout() layUser.addStretch() layUser.addWidget(btnInscription) if not mainWindow.userConnected: layUser.addWidget(btnConnexion) else: layUser.addWidget(btnDeconnexion) # GroupeBox des boutons de navigation grpUser: object = QGroupBox("Gestion de l'utilisateur") grpUser.setLayout(layUser) # Widgets pour une recherche par nom labRechercheNom: object = QLabel("Par nom") inputRechercheNom: object = QLineEdit(maxLength=128) btnRechercheNom: object = QPushButton("Rechercher") btnRechercheNom.clicked.connect( lambda: core_search_name( mainWindow, inputRechercheNom.text() ) ) # Widgets pour une recherche par catégorie labRechercheCat: object = QLabel("Par emploi") cmbRechercheCat: object = QComboBox() alljobs: list = dbsearch.get_job_all() for i in alljobs: cmbRechercheCat.addItem("{0}".format(i[2]), i[0]) btnRechercheCat: object = QPushButton("Rechercher") btnRechercheCat.clicked.connect( lambda: core_search_id( mainWindow, cmbRechercheCat.currentData() ) ) # Layout recherche par nom layRechercheNom: object = QVBoxLayout() layRechercheNom.addWidget(labRechercheNom) layRechercheNom.addWidget(inputRechercheNom) layRechercheNom.addWidget(btnRechercheNom) # Layout recherche par catégorie layRechercheCat: object = QVBoxLayout() layRechercheCat.addWidget(labRechercheCat) layRechercheCat.addWidget(cmbRechercheCat) layRechercheCat.addWidget(btnRechercheCat) # Layout des deux types de recherche layRecherche: object = QHBoxLayout() layRecherche.addStretch() layRecherche.addLayout(layRechercheNom) layRecherche.addStretch() layRecherche.addLayout(layRechercheCat) layRecherche.addStretch() # Groupe des deux recherches grpRecherche: object = QGroupBox("Recherche") grpRecherche.setLayout(layRecherche) # Layout principale layMain: object = QVBoxLayout() layMain.addWidget(connState) layMain.addWidget(grpUser) layMain.addStretch() layMain.addWidget(grpRecherche) layMain.addStretch() # Si la fenêtre avait deja un layout au travers du "mainWidget", # on le supprime pour afficher les élements de cette fonction if hasattr(mainWindow, "mainWidget"): mainWindow.mainWidget.deleteLater() # On crée le mainWidget et on défini sont layout mainWindow.mainWidget = QWidget() mainWindow.mainWidget.setLayout(layMain) mainWindow.setCentralWidget(mainWindow.mainWidget)