diff options
Diffstat (limited to 'src/app/windowUserInfo.py')
| -rw-r--r-- | src/app/windowUserInfo.py | 118 |
1 files changed, 91 insertions, 27 deletions
diff --git a/src/app/windowUserInfo.py b/src/app/windowUserInfo.py index 4455dde..181925d 100644 --- a/src/app/windowUserInfo.py +++ b/src/app/windowUserInfo.py @@ -1,6 +1,14 @@ +############################################################################ +# # +# Description: Fenêtre et fonctions permettant de gérer ses infos # +# # +############################################################################ + # https://stackoverflow.com/questions/3077192/get-a-layouts-widgets-in-pyqt +# Import de PyQt5 +from tkinter import Widget from PyQt5.QtWidgets import ( QDialog, QGroupBox, QLabel, QLineEdit, @@ -8,14 +16,21 @@ from PyQt5.QtWidgets import ( QPushButton, QComboBox, QMessageBox ) +# Import des fichiers locaux from src.database.dbuser import DbUser from src.database.dbsearch import DbSearch def core_add_job(jobName: str, jobId: int, listMyJobs: list, layMyJobs: object) -> None: - """""" + """ + Fonction permettant d'ajouter l'id de l'emploi sélectionné et + la ligne avec un bouton pour le retirer. + """ + # Uniquement si le job n'était pas deja sélectionné if jobId not in listMyJobs: + # On le rajoute à la liste des emplois sélectionnés listMyJobs.append(jobId) + # On crée le layout avec ses widgets pour pouvoir le supprimer si on le souhaite lineMyJobs: object = QHBoxLayout() labJob: object = QLabel(jobName) btnRemoveJob: object = QPushButton("Supprimer") @@ -32,29 +47,37 @@ def core_add_job(jobName: str, jobId: int, listMyJobs: list, layMyJobs: object) def core_delete_job(layLineJob: object) -> None: - """""" - lab: object = layLineJob.itemAt(0).widget() - lab.deleteLater() - btn: object = layLineJob.itemAt(2).widget() - btn.deleteLater() + """ + Fonction permettant de supprimer une ligne de la fenêtre + """ + # On loop a travers chaque item dans le layout et on le supprime + for i in range(layLineJob.count()): + widget: object = layLineJob.itemAt(i).widget() + if widget != None: # Stretch renvoi None + widget.deleteLater() + + # Enfin on supprime le layout layLineJob.deleteLater() def core_validate(mainWindow: object, dial: object, - layLines: list, oldJobs: list = None, newJobs: list = None) -> None: - """""" - user: object = DbUser(mainWindow = mainWindow) + layLines: dict, oldJobs: list = None, newJobs: list = None) -> None: + """ + Fonction validant les informations renseignées et modification + de ses dernières dans la BDD avec un méthode de BdUser. + """ + # Instanciation des méthodes pour gérer les utilisateurs + user: object = DbUser(mainWindow = mainWindow) + # On crée une liste qui vas recevoir les informations renseignées userInfos: list = [] + # Pour chaque ligne si cette ligne n'est pas sélectionenr un emploi ou + # mes emplois, on ajoute la valeur de l'input à la liste for i in layLines: if i != "selectJobs" and i != "myJobs": lineInput: object = layLines[i].itemAt(2).widget() userInfos.append(lineInput.text()) - if mainWindow.userStatus == "Pro": - isPro: bool = True - else: - isPro: bool = False - + # Si un champs est vide, on "return" pour arreter la fonction if "" in userInfos: QMessageBox.warning( dial, @@ -63,6 +86,13 @@ def core_validate(mainWindow: object, dial: object, ) return + # On regarde si l'utilisateur est un Pro ou un Client + if mainWindow.userStatus == "Pro": + isPro: bool = True + else: + isPro: bool = False + + # On met à jour les informations de l'utilisateur connecté user.update_user_infos(userInfos, mainWindow.userId, isPro, oldJobs, newJobs) QMessageBox.information( dial, @@ -72,10 +102,19 @@ def core_validate(mainWindow: object, dial: object, def window_main(mainWindow: object) -> None: + """ + Fenêtre permettant de modifier ses informations d'utilisateur + """ + # Instanciation des méthodes pour effectuer des recherches search: object = DbSearch(mainWindow) - dial: object = QDialog(parent=mainWindow) + # Instaciation d'une fenêtre simple + dial: object = QDialog(parent=mainWindow) + # On défini le titre de cette fenêtre dial.setWindowTitle("Mes infos") + # On récupère les infos de l'utilisateur infos: list = search.get_user_info_by_userid(mainWindow.userId) + # Si il y a déja des infos enregistrées, on les récupère dans deux dictionnaires + # en séparants les champs spécifiques aux pros if infos: champsClients: dict = { "Nom": infos[0][1], @@ -105,11 +144,17 @@ def window_main(mainWindow: object) -> None: "Description" ] - layLines: list = {} + # On crée un dict qui va recevoir les lignes + layLines: dict = {} + # Pour chaque élément dans champsClient, que ce soit une liste ou un dict for i in champsClients: + # On crée une ligne avec son QLabel défini selon l'index si c'est un dict, + # ou la valeur de l'élément si c'est une liste, et cette index ou cette valeur + # sera également l'index du dict des lignes layLines[i] = QHBoxLayout() layLines[i].addWidget(QLabel(i)) layLines[i].addStretch() + # Si il y a deja des infos, on attribut cette info au QLineEdit, sinon on laisse le champ vierge if infos: if i == "Téléphone": layLines[i].addWidget(QLineEdit(champsClients[i], maxLength=10)) @@ -125,9 +170,11 @@ def window_main(mainWindow: object) -> None: else: layLines[i].addWidget(QLineEdit(maxLength=128)) + # Si l'utilisateur est un pro, on rajoute les champs réservés à ces derniers if mainWindow.userStatus == "Pro": + # On récupère tous les emplois et rajoute les widgets + # pour pouvoir ajouter ces derniers allJobs: object = search.get_job_all() - laySelectJobs: object = QHBoxLayout() labSelectJobs: object = QLabel("Les emplois:") cmbAllJobs: object = QComboBox() for i in allJobs: @@ -143,20 +190,32 @@ def window_main(mainWindow: object) -> None: layMyJobs ) ) + # On définie le layout de cette ligne et on le rajoute au dictionnaire des lignes + laySelectJobs: object = QHBoxLayout() laySelectJobs.addWidget(labSelectJobs) laySelectJobs.addStretch() laySelectJobs.addWidget(cmbAllJobs) laySelectJobs.addStretch() laySelectJobs.addWidget(btnSelectJobs) layLines["selectJobs"] = laySelectJobs - # + # On récupère les jobs déja sélectionnés pour le pro myJobs: object = search.get_pro_job_by_proid(mainWindow.userId) - layMyJobs: object = QVBoxLayout() + # On initie une nouvelle liste pour les jobs qui vont étre sélectionnés newJobs: list = [] + # On Crée la partie qui recevra les lignes des emplois + layMyJobs: object = QVBoxLayout() + # Pour chaque job qui avait déja été sélectionné for i in myJobs: + # On crée une une ligne en passant le nom FR, l'id, + # la liste des nouveaux jobs et le layout qui recoit ces lignes core_add_job(i[2], i[0], newJobs, layMyJobs) - oldJobs: list = newJobs.copy() # Sinon pointer !!! + + # On duplique tout de suite la liste des nouveaux jobs + # pour pouvoir faire la diff avant après + oldJobs: list = newJobs.copy() # Obligé de "copy" sinon pointer !!! + # On donne au dictionnaire des lignes le layout qui recoit les jobs sélectionnés layLines["myJobs"] = layMyJobs + # On ajoute les autres champs réservés aux pros for i in champsPro: layLines[i] = QHBoxLayout() layLines[i].addWidget(QLabel(i)) @@ -166,34 +225,39 @@ def window_main(mainWindow: object) -> None: else: layLines[i].addWidget(QLineEdit(maxLength=256)) - layModif: object = QVBoxLayout() - for i in layLines: - layModif.addLayout(layLines[i]) - + # On crée le bouton pour valider les modifications btnModif: object = QPushButton("modifer") btnModif.clicked.connect( lambda: - core_validate( + core_validate( # Si c'est un pro mainWindow, dial, layLines, oldJobs, newJobs ) if mainWindow.userStatus == "Pro" - else core_validate( + else core_validate( # Sinon mainWindow, dial, layLines ) ) + # On crée et peuple le layout qui recoit toutes les lignes + layModif: object = QVBoxLayout() + for i in layLines: + layModif.addLayout(layLines[i]) + + # On ajoute le bouton layBtn: object = QHBoxLayout() layBtn.addStretch() layBtn.addWidget(btnModif) layModif.addLayout(layBtn) - # + # On crée et donne au GroupBox le layout des lignes grpMain: object = QGroupBox("Mes infos") grpMain.setLayout(layModif) + # On crée le layout principal auquel on donne le GroupBox mainLayout: object = QVBoxLayout() mainLayout.addWidget(grpMain) dial.setLayout(mainLayout) + # On affiche la fenêtre dial.show() |
