from PyQt5.QtWidgets import ( QDialog, QGroupBox, QLabel, QLineEdit, QVBoxLayout, QHBoxLayout, QPushButton, QComboBox, QMessageBox ) from src.database.dbuser import DbUser from src.database.dbsearch import DbSearch def add_job(jobName: str, jobId: int, listMyJobs: list, layMyJobs: object) -> None: if jobId not in listMyJobs: listMyJobs.append(jobId) lineMyJobs: object = QHBoxLayout() labJob: object = QLabel(jobName) btnRemoveJob: object = QPushButton("Supprimer") btnRemoveJob.clicked.connect( lambda checked, jId=jobId, layItem=lineMyJobs: [ listMyJobs.remove(jId), delete_job(layItem) ] ) lineMyJobs.addWidget(labJob) lineMyJobs.addStretch() lineMyJobs.addWidget(btnRemoveJob) layMyJobs.addLayout(lineMyJobs) def delete_job(layLineJob: object) -> None: lab: object = layLineJob.itemAt(0).widget() btn: object = layLineJob.itemAt(2).widget() lab.deleteLater() btn.deleteLater() layLineJob.deleteLater() def validate(mainWindow: object, dial: object, layoutLines: list, oldJobs: list = None, newJobs: list = None) -> None: user: object = DbUser(mainWindow = mainWindow) userInfos: list = [] for i in layoutLines: if i != "selectJobs" and i != "myJobs": lineInput: object = layoutLines[i].itemAt(2).widget() userInfos.append(lineInput.text()) if mainWindow.userStatus == "Pro": isPro: bool = True else: isPro: bool = False if "" in userInfos: QMessageBox.warning( dial, "Mes informations", "Veuillez renseigner tous les champs" ) return user.update_user_infos(userInfos, mainWindow.userId, isPro, oldJobs, newJobs) QMessageBox.information( dial, "Mes informations", "Modification enregistrée" ) # https://stackoverflow.com/questions/3077192/get-a-layouts-widgets-in-pyqt def modif_infos(mainWindow: object) -> None: dial: object = QDialog(parent = mainWindow) dial.setWindowTitle("Mes infos") search: object = DbSearch(mainWindow) infos: list = search.get_user_info_by_userid(mainWindow.userId) if infos: champsClients: dict = { "Nom": infos[0][1], "Prénom": infos[0][2], "Téléphone": infos[0][6], "Addresse": infos[0][7], "Code postal": infos[0][8], "ville": infos[0][9] } champsPro: dict = { "Diplôme": infos[0][3], "Capacités": infos[0][4], "Description": infos[0][5] } else: champsClients: list = [ "Nom", "Prénom", "Téléphone", "Addresse", "Code postal", "ville" ] champsPro: list =[ "Diplôme", "Capacités", "Description" ] layoutLines: list = {} for i in champsClients: layoutLines[i] = QHBoxLayout() layoutLines[i].addWidget(QLabel(i)) layoutLines[i].addStretch() if infos: if i == "Téléphone": layoutLines[i].addWidget(QLineEdit(champsClients[i], maxLength=10)) elif i == "Code postal": layoutLines[i].addWidget(QLineEdit(champsClients[i], maxLength=6)) else: layoutLines[i].addWidget(QLineEdit(champsClients[i], maxLength=128)) else: if i == "Téléphone": layoutLines[i].addWidget(QLineEdit(maxLength=10)) elif i == "Code postal": layoutLines[i].addWidget(QLineEdit(maxLength=6)) else: layoutLines[i].addWidget(QLineEdit(maxLength=128)) if mainWindow.userStatus == "Pro": allJobs: object = search.get_job_all() labSelectJobs: object = QLabel("Les emplois:") cmbAllJobs: object = QComboBox() lineSelectJobs: object = QHBoxLayout() for i in allJobs: cmbAllJobs.addItem(f"{i[2]}", i[0]) btnSelectJobs = QPushButton("Ajouter") btnSelectJobs.clicked.connect( lambda : add_job( cmbAllJobs.currentText(), cmbAllJobs.currentData(), newJobs, layMyJobs ) ) lineSelectJobs.addWidget(labSelectJobs) lineSelectJobs.addStretch() lineSelectJobs.addWidget(cmbAllJobs) lineSelectJobs.addStretch() lineSelectJobs.addWidget(btnSelectJobs) layoutLines["selectJobs"] = lineSelectJobs myJobs: object = search.get_pro_job_by_proid(mainWindow.userId) layMyJobs: object = QVBoxLayout() newJobs: list = [] for i in myJobs: add_job(i[2], i[0], newJobs, layMyJobs) oldJobs: list = newJobs.copy() # Sinon pointer !!! layoutLines["myJobs"] = layMyJobs for i in champsPro: layoutLines[i] = QHBoxLayout() layoutLines[i].addWidget(QLabel(i)) layoutLines[i].addStretch() if infos: layoutLines[i].addWidget(QLineEdit(champsPro[i], maxLength=256)) else: layoutLines[i].addWidget(QLineEdit(maxLength=256)) modifLayout: object = QVBoxLayout() for i in layoutLines: modifLayout.addLayout(layoutLines[i]) btnModif: object = QPushButton("modifer") btnModif.clicked.connect( lambda: validate( mainWindow, dial, layoutLines, oldJobs, newJobs ) if mainWindow.userStatus == "Pro" else validate( mainWindow, dial, layoutLines ) ) layoutBtn: object = QHBoxLayout() layoutBtn.addStretch() layoutBtn.addWidget(btnModif) modifLayout.addLayout(layoutBtn) grpMain: object = QGroupBox("Mes infos") grpMain.setLayout(modifLayout) mainLayout: object = QVBoxLayout() mainLayout.addWidget(grpMain) dial.setLayout(mainLayout) dial.show()