1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
############################################################################
# #
# 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)
|