summaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
authorDebulois <quentin@debulois.fr>2022-05-01 23:24:19 +0200
committerDebulois <quentin@debulois.fr>2022-05-01 23:24:19 +0200
commit809f5c2c7ce0bdf05287c6f1b5ec1330efb0c469 (patch)
tree786477393b2608d3dd118d3e9ae4e57380804b5a /src/app
parent1eaf21fd423e5dedf1ed4361b0e9b6cbbcfc9fa0 (diff)
Ajout du système pour mandater et mise en page des documents
Diffstat (limited to 'src/app')
-rw-r--r--src/app/__init__.py0
-rw-r--r--src/app/mainHome.py155
-rw-r--r--src/app/mainLogin.py113
-rw-r--r--src/app/mainLogout.py18
-rw-r--r--src/app/mainMenuBar.py52
-rw-r--r--src/app/mainRegister.py177
-rw-r--r--src/app/ressources/icon.icobin0 -> 41662 bytes
-rw-r--r--src/app/windowAPropos.py15
-rw-r--r--src/app/windowAdmin.py268
-rw-r--r--src/app/windowMissions.py156
-rw-r--r--src/app/windowRecherche.py150
-rw-r--r--src/app/windowUserInfo.py199
12 files changed, 1303 insertions, 0 deletions
diff --git a/src/app/__init__.py b/src/app/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/app/__init__.py
diff --git a/src/app/mainHome.py b/src/app/mainHome.py
new file mode 100644
index 0000000..a366c66
--- /dev/null
+++ b/src/app/mainHome.py
@@ -0,0 +1,155 @@
+
+from PyQt5.QtWidgets import (
+ QGroupBox, QPushButton,
+ QComboBox, QLineEdit,
+ QHBoxLayout, QWidget,
+ QVBoxLayout, QLabel,
+ QMessageBox
+)
+from src.app import (
+ mainLogin, mainRegister,
+ mainMenuBar, windowRecherche,
+ mainLogout
+)
+from src.database.dbsearch import DbSearch
+
+
+def core_search_id(mainWindow: object, jobId: int) -> None:
+ """"""
+ dbsearch: object = DbSearch(mainWindow)
+ resRecherche: list = dbsearch.get_all_pro_by_jobid(jobId)
+ 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:
+ """"""
+ dbsearch: object = DbSearch(mainWindow)
+ resRecherche: tuple = dbsearch.get_pro_info_by_lastname(name)
+ 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:
+ """"""
+ dbsearch: object = DbSearch(mainWindow)
+ results: list = []
+ for i in resRecherche:
+ proInfo: dict = {}
+ proInfo["id"] = i[0]
+ resJobs = dbsearch.get_pro_job_by_proid(proInfo["id"])
+ proInfo["text"] = list(i[1:])
+ proInfo["text"].insert(2, ", ".join([j[2] for j in resJobs]))
+ proInfo["text"] = " - ".join(proInfo["text"])
+ results.append(proInfo)
+
+ windowRecherche.window_main(mainWindow, results)
+
+
+def window_main(mainWindow, reloadMenu = False) -> None:
+ """"""
+ if reloadMenu:
+ mainMenuBar.menu_init(mainWindow)
+
+ dbsearch: object = DbSearch(mainWindow)
+ #
+ if not mainWindow.userConnected:
+ connState: object = QLabel("Non connecté.")
+ else:
+ connState: object = QLabel(
+ f"Connecté: {mainWindow.userEmail} - {mainWindow.userStatus}"
+ )
+
+ if not mainWindow.userConnected:
+ btnConnexion: object = QPushButton("Connexion")
+ 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))
+ #
+ layUser: object = QHBoxLayout()
+ layUser.addStretch()
+ layUser.addWidget(btnInscription)
+ if not mainWindow.userConnected:
+ layUser.addWidget(btnConnexion)
+ else:
+ layUser.addWidget(btnDeconnexion)
+
+ grpUser: object = QGroupBox("Gestion de l'utilisateur")
+ grpUser.setLayout(layUser)
+ #
+ labRechercheNom: object = QLabel("Par nom")
+ inputRechercheNom: object = QLineEdit(maxLength=128)
+ btnRechercheNom: object = QPushButton("Rechercher")
+ btnRechercheNom.clicked.connect(
+ lambda:
+ core_search_name(
+ mainWindow,
+ inputRechercheNom.text()
+ )
+ )
+ 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()
+ )
+ )
+ #
+ layRechercheNom: object = QVBoxLayout()
+ layRechercheNom.addWidget(labRechercheNom)
+ layRechercheNom.addWidget(inputRechercheNom)
+ layRechercheNom.addWidget(btnRechercheNom)
+ layRechercheCat: object = QVBoxLayout()
+ layRechercheCat.addWidget(labRechercheCat)
+ layRechercheCat.addWidget(cmbRechercheCat)
+ layRechercheCat.addWidget(btnRechercheCat)
+ #
+ layRecherche: object = QHBoxLayout()
+ layRecherche.addStretch()
+ layRecherche.addLayout(layRechercheNom)
+ layRecherche.addStretch()
+ layRecherche.addLayout(layRechercheCat)
+ layRecherche.addStretch()
+ #
+ grpRecherche: object = QGroupBox("Recherche")
+ grpRecherche.setLayout(layRecherche)
+ #
+ layMain: object = QVBoxLayout()
+ layMain.addWidget(connState)
+ layMain.addWidget(grpUser)
+ layMain.addStretch()
+ layMain.addWidget(grpRecherche)
+ layMain.addStretch()
+ #
+ if hasattr(mainWindow, "mainWidget"):
+ mainWindow.mainWidget.deleteLater()
+
+ mainWindow.mainWidget = QWidget()
+ mainWindow.mainWidget.setLayout(layMain)
+ mainWindow.setCentralWidget(mainWindow.mainWidget)
diff --git a/src/app/mainLogin.py b/src/app/mainLogin.py
new file mode 100644
index 0000000..617df73
--- /dev/null
+++ b/src/app/mainLogin.py
@@ -0,0 +1,113 @@
+
+from PyQt5.QtWidgets import (
+ QPushButton, QHBoxLayout,
+ QGroupBox, QLabel,
+ QLineEdit, QWidget,
+ QVBoxLayout, QGridLayout,
+ QMessageBox
+)
+from src.app import mainHome, mainRegister
+from src.database.dbuser import DbUser
+from src.database.dbsearch import DbSearch
+
+
+def core_login(mainWindow: object, email: str, password: str) -> None:
+ """"""
+ dbuser: object = DbUser(mainWindow)
+ dbsearch: object = DbSearch(mainWindow)
+ if dbuser.check_exist_email(email):
+ userId = dbuser.check_user_credential(email, password)
+ if userId:
+ userAccount = dbsearch.get_user_account_by_userid(userId)[0]
+ QMessageBox.information(
+ mainWindow,
+ "Connexion",
+ "Vous êtes connecté"
+ )
+ mainWindow.userConnected = True
+ mainWindow.userId = userId
+ mainWindow.userEmail = userAccount[1]
+ mainWindow.userInscrDate = userAccount[2]
+ if userAccount[3] == 0:
+ mainWindow.userStatus = "Admin"
+ elif userAccount[3] == 1:
+ mainWindow.userStatus = "Pro"
+ elif userAccount[3] == 2:
+ mainWindow.userStatus = "Client"
+ mainHome.window_main(mainWindow, True)
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Connexion",
+ "Mauvaise combinaison mail & mot de passe"
+ )
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Connexion",
+ "Mauvais email"
+ )
+
+
+def window_main(mainWindow: object) -> None:
+ """"""
+ if not mainWindow.userConnected:
+ connState: object = QLabel("Non connecté.")
+ else:
+ connState: object = QLabel(
+ f"Connecté: {mainWindow.userEmail} - {mainWindow.userStatus}"
+ )
+
+ btnAccueil: object = QPushButton("Accueil")
+ btnAccueil.clicked.connect(lambda: mainHome.window_main(mainWindow))
+ btnInscription: object = QPushButton("Inscription")
+ btnInscription.clicked.connect(lambda: mainRegister.window_main(mainWindow))
+ #
+ layUser: object = QHBoxLayout()
+ layUser.addWidget(btnAccueil)
+ layUser.addStretch()
+ layUser.addWidget(btnInscription)
+ grpUtilisateur: object = QGroupBox("Gestion de l'utilisateur")
+ grpUtilisateur.setLayout(layUser)
+ #
+ labMail: object = QLabel("Email")
+ inpMail: object = QLineEdit(maxLength=128)
+ labPassword: object = QLabel("Mot de passe")
+ inpPassword: object = QLineEdit(maxLength=128)
+ inpPassword.setEchoMode(QLineEdit.Password)
+ btnConnexion: object = QPushButton("Connexion")
+ btnConnexion.clicked.connect(
+ lambda:
+ core_login(
+ mainWindow,
+ inpMail.text(),
+ inpPassword.text()
+ )
+ )
+ #
+ layGrid: object = QGridLayout()
+ layGrid.addWidget(labMail, 0, 0)
+ layGrid.addWidget(inpMail, 0, 1)
+ layGrid.addWidget(labPassword, 1, 0)
+ layGrid.addWidget(inpPassword, 1, 1)
+ layGrid.addWidget(btnConnexion, 2, 1)
+ #
+ layLogin: object = QHBoxLayout()
+ layLogin.addStretch()
+ layLogin.addLayout(layGrid)
+ layLogin.addStretch()
+ #
+ grpLogin: object = QGroupBox("Connexion")
+ grpLogin.setLayout(layLogin)
+ #
+ layMain: object = QVBoxLayout()
+ layMain.addWidget(connState)
+ layMain.addWidget(grpUtilisateur)
+ layMain.addStretch()
+ layMain.addWidget(grpLogin)
+ layMain.addStretch()
+ #
+ mainWindow.mainWidget.deleteLater()
+ mainWindow.mainWidget = QWidget()
+ mainWindow.mainWidget.setLayout(layMain)
+ mainWindow.setCentralWidget(mainWindow.mainWidget)
diff --git a/src/app/mainLogout.py b/src/app/mainLogout.py
new file mode 100644
index 0000000..4df4273
--- /dev/null
+++ b/src/app/mainLogout.py
@@ -0,0 +1,18 @@
+
+from PyQt5.QtWidgets import QMessageBox
+
+
+def core_logout(mainWindow: object) -> None:
+ """"""
+ if mainWindow.userConnected == True:
+ mainWindow.userConnected = False
+ mainWindow.userId = ""
+ mainWindow.userEmail = ""
+ mainWindow.userInscrDate = ""
+ mainWindow.userStatus = ""
+
+ QMessageBox.information(
+ mainWindow,
+ "Déconnection",
+ "Vous êtes déconnecté."
+ )
diff --git a/src/app/mainMenuBar.py b/src/app/mainMenuBar.py
new file mode 100644
index 0000000..3ab0090
--- /dev/null
+++ b/src/app/mainMenuBar.py
@@ -0,0 +1,52 @@
+
+from os.path import join
+from pathlib import Path
+from PyQt5.QtGui import QIcon
+from PyQt5.QtWidgets import QAction
+from src.app import (
+ windowAPropos, windowAdmin,
+ windowUserInfo, windowMissions
+)
+
+
+def menu_init(mainWindow: object) -> None:
+ """"""
+ logo: str = join(Path(__file__).parent, "ressources", "icon.ico")
+ mainWindow.setWindowIcon(QIcon(logo))
+ mainWindow.setWindowTitle("Alphajob")
+ menu: object = mainWindow.menuBar()
+ menu.clear() # Clear au cas où
+ if mainWindow.userConnected and mainWindow.userStatus == "Admin":
+ menuAdmin: object = menu.addMenu("Admin")
+ btnEmplois: object = QAction("Gestion des emplois", mainWindow)
+ btnUsers: object = QAction("Gestion des Utilisateurs", mainWindow)
+ btnMissions: object = QAction("Gestion des missions", mainWindow)
+ btnEmplois.triggered.connect(lambda: windowAdmin.window_admin_emplois(mainWindow))
+ btnUsers.triggered.connect(lambda: windowAdmin.window_admin_users(mainWindow))
+ btnMissions.triggered.connect(lambda: windowAdmin.window_admin_missions(mainWindow))
+ menuAdmin.addAction(btnEmplois)
+ menuAdmin.addAction(btnUsers)
+ menuAdmin.addAction(btnMissions)
+ elif mainWindow.userConnected and (
+ mainWindow.userStatus == "Pro" or mainWindow.userStatus == "Client"):
+ # Infos
+ menuUserInfos: object = menu.addMenu("Mes infos")
+ btnMesInfos: object = QAction("Gérer ses infos", mainWindow)
+ btnMesInfos.triggered.connect(lambda: windowUserInfo.window_main(mainWindow))
+ menuUserInfos.addAction(btnMesInfos)
+ # Missions
+ menuMissions: object = menu.addMenu("Mes missions")
+ btnPendingMission: object = QAction("Missions en attente", mainWindow)
+ btnOngoignMission: object = QAction("Missions en cours", mainWindow)
+ btnCompletedMission: object = QAction("Missions en terminées", mainWindow)
+ btnPendingMission.triggered.connect(lambda: windowMissions.window_main(mainWindow, "pending"))
+ btnOngoignMission.triggered.connect(lambda: windowMissions.window_main(mainWindow, "ongoing"))
+ btnCompletedMission.triggered.connect(lambda: windowMissions.window_main(mainWindow, "completed"))
+ menuMissions.addAction(btnPendingMission)
+ menuMissions.addAction(btnOngoignMission)
+ menuMissions.addAction(btnCompletedMission)
+
+ menuOptions: object = menu.addMenu("Options")
+ btnApropos: object = QAction("A propos", mainWindow)
+ btnApropos.triggered.connect(lambda: windowAPropos.window_main(mainWindow))
+ menuOptions.addAction(btnApropos)
diff --git a/src/app/mainRegister.py b/src/app/mainRegister.py
new file mode 100644
index 0000000..ce9486f
--- /dev/null
+++ b/src/app/mainRegister.py
@@ -0,0 +1,177 @@
+
+import re
+from PyQt5.QtWidgets import (
+ QPushButton, QHBoxLayout,
+ QGroupBox, QLabel,
+ QLineEdit, QWidget,
+ QVBoxLayout, QComboBox,
+ QGridLayout, QMessageBox
+)
+from src.app import mainLogin, mainHome, mainLogout
+from src.database.dbuser import DbUser
+
+
+def core_register(mainWindow: object, email: str, password: str, userStatus: str) -> None:
+ """"""
+ dbuser: object = DbUser(mainWindow)
+ regNumb: str = "[0-9]"
+ regUpper: str = "[A-Z]"
+ regSpecial: str = "[`!@#$%^&*()_+\-=\[\]{};':\"\\|,.<>\/?~µ°€£]"
+ regEmail: str = "^[a-z0-9._-]+@[a-z0-9-]+\.[a-z]+"
+ # Si vide
+ if not email:
+ QMessageBox.warning(
+ mainWindow,
+ "Email invalide",
+ "Veuillez renseigner un email"
+ )
+ return
+
+ if not password:
+ QMessageBox.warning(
+ mainWindow,
+ "Mot de passe invalide",
+ "Veuillez renseigner un mot de passe"
+ )
+ return
+
+ if userStatus == None:
+ QMessageBox.warning(
+ mainWindow,
+ "Mauvais rôle",
+ "Veuillez selectionner un rôle"
+ )
+ return
+
+ # les regex
+ if not re.fullmatch(regEmail, email):
+ QMessageBox.warning(
+ mainWindow,
+ "Email invalid",
+ "Email non conforme"
+ )
+ return
+
+ if len(password) < 8\
+ or not re.search(regNumb, password)\
+ or not re.search(regUpper, password)\
+ or not re.search(regSpecial, password):
+ QMessageBox.warning(
+ mainWindow,
+ "Mot de passe invalide",
+ ("Le mot de passe doit avoir:\n"
+ "-Au moins 8 characters\n"
+ "-Une majuscule\n"
+ "-Un chiffre\n"
+ "-Un character spécial")
+ )
+ return
+
+ # si email deja présent
+ if dbuser.check_exist_email(email):
+ QMessageBox.warning(
+ mainWindow,
+ "Email invalid",
+ "Email déja utilisé"
+ )
+ return
+
+ succes: int = dbuser.register_user(email, password, userStatus)
+ if succes:
+ QMessageBox.information(
+ mainWindow,
+ "Inscription",
+ "Inscription réussie!"
+ )
+ mainHome.window_main(mainWindow)
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Erreur bdd",
+ "Erreur lors de l'inscritpion"
+ )
+
+
+def window_main(mainWindow: object) -> None:
+ """"""
+ if not mainWindow.userConnected:
+ connexionState: object = QLabel("Non connecté.")
+ else:
+ connexionState: object = QLabel(
+ f"Connecté: {mainWindow.userEmail} - {mainWindow.userStatus}"
+ )
+
+ btnAccueil: object = QPushButton("Accueil")
+ btnAccueil.clicked.connect(lambda: mainHome.window_main(mainWindow))
+ #
+ if not mainWindow.userConnected:
+ btnConnexion: object = QPushButton("Connexion")
+ btnConnexion.clicked.connect(lambda: mainLogin.window_main(mainWindow))
+ else:
+ btnDeconnexion: object = QPushButton("Déconnexion")
+ btnDeconnexion.clicked.connect(
+ lambda: [
+ mainLogout.core_logout(mainWindow),
+ mainHome.window_main(mainWindow, True)
+ ]
+ )
+
+ layoutUser: object = QHBoxLayout()
+ layoutUser.addWidget(btnAccueil)
+ layoutUser.addStretch()
+ if not mainWindow.userConnected:
+ layoutUser.addWidget(btnConnexion)
+ else:
+ layoutUser.addWidget(btnDeconnexion)
+
+ grpUtilisateur: object = QGroupBox("Gestion de l'utilisateur")
+ grpUtilisateur.setLayout(layoutUser)
+ #
+ labMail: object = QLabel("Email")
+ leditMail: object = QLineEdit(maxLength=128)
+ labPassword: object = QLabel("Mot de passe")
+ leditPassword: object = QLineEdit(maxLength=128)
+ leditPassword.setEchoMode(QLineEdit.Password)
+ labStatus: object = QLabel("Rôle")
+ comboStatus: object = QComboBox()
+ comboStatus.addItem("Admin", 0)
+ comboStatus.addItem("Pro", 1)
+ comboStatus.addItem("Client", 2)
+ #
+ btnRegister: object = QPushButton("S'inscrire")
+ btnRegister.clicked.connect(
+ lambda: core_register(
+ mainWindow,
+ leditMail.text(),
+ leditPassword.text(),
+ comboStatus.currentData()
+ )
+ )
+ #
+ LayoutInfoConnexion: object = QGridLayout()
+ LayoutInfoConnexion.addWidget(labMail, 0, 0)
+ LayoutInfoConnexion.addWidget(leditMail, 0, 1)
+ LayoutInfoConnexion.addWidget(labPassword, 1, 0)
+ LayoutInfoConnexion.addWidget(leditPassword, 1, 1)
+ LayoutInfoConnexion.addWidget(labStatus, 2, 0)
+ LayoutInfoConnexion.addWidget(comboStatus, 2, 1)
+ LayoutInfoConnexion.addWidget(btnRegister, 3, 1)
+ #
+ layoutGroupConnexion: object = QHBoxLayout()
+ layoutGroupConnexion.addStretch()
+ layoutGroupConnexion.addLayout(LayoutInfoConnexion)
+ layoutGroupConnexion.addStretch()
+ grpConnexion: object = QGroupBox("Inscription")
+ grpConnexion.setLayout(layoutGroupConnexion)
+ #
+ layoutMain: object = QVBoxLayout()
+ layoutMain.addWidget(connexionState)
+ layoutMain.addWidget(grpUtilisateur)
+ layoutMain.addStretch()
+ layoutMain.addWidget(grpConnexion)
+ layoutMain.addStretch()
+ #
+ mainWindow.mainWidget.deleteLater()
+ mainWindow.mainWidget = QWidget()
+ mainWindow.mainWidget.setLayout(layoutMain)
+ mainWindow.setCentralWidget(mainWindow.mainWidget)
diff --git a/src/app/ressources/icon.ico b/src/app/ressources/icon.ico
new file mode 100644
index 0000000..7c550a3
--- /dev/null
+++ b/src/app/ressources/icon.ico
Binary files differ
diff --git a/src/app/windowAPropos.py b/src/app/windowAPropos.py
new file mode 100644
index 0000000..2450e03
--- /dev/null
+++ b/src/app/windowAPropos.py
@@ -0,0 +1,15 @@
+
+from PyQt5.QtWidgets import QMessageBox
+
+
+def window_main(mainWindow: object) -> None:
+ """"""
+ QMessageBox.information(
+ mainWindow,
+ "A propos",
+ f"Logiciel pour mon dossier professionnel.\
+ <br>Version: {mainWindow.VERSION}\
+ <br>Auteur: Debulois Quentin\
+ <br>Code source: \
+ <a href='https://git.debulois.fr/'>git.debulois.fr/</a>"
+ )
diff --git a/src/app/windowAdmin.py b/src/app/windowAdmin.py
new file mode 100644
index 0000000..af27e54
--- /dev/null
+++ b/src/app/windowAdmin.py
@@ -0,0 +1,268 @@
+
+from PyQt5.QtWidgets import (
+ QDialog, QGroupBox, QLabel,
+ QLineEdit, QVBoxLayout,
+ QHBoxLayout, QGridLayout,
+ QPushButton, QComboBox,
+ QMessageBox
+)
+from src.database.dbadmin import DbAdmin
+from src.database.dbsearch import DbSearch
+from src.database.dbmission import DbMission
+
+
+def core_ajout_emploi(mainWindow: object, nomEn: str, nomFr: str) -> int:
+ """"""
+ dbadmin: object = DbAdmin(mainWindow)
+ success: int = dbadmin.register_job_category(nomEn, nomFr)
+ if success:
+ QMessageBox.information(
+ mainWindow,
+ "Ajout d'un emploi",
+ "Emploi ajouté!"
+ )
+ return 1
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Ajout d'un emploi",
+ "Impossible d'ajouter cet emploi"
+ )
+ return 0
+
+
+def core_suppr_emploi(mainWindow: object, jobId: int) -> int:
+ """"""
+ dbadmin: object = DbAdmin(mainWindow)
+ success: int = dbadmin.del_job_category_by_jobid(jobId)
+ if success:
+ QMessageBox.information(
+ mainWindow,
+ "Suppresion d'un emploi",
+ "Emploi supprimé!"
+ )
+ return 1
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Suppresion d'un emploi",
+ "Impossible de supprimer cet emploi"
+ )
+ return 0
+
+
+def core_suppr_user(mainWindow: object, userId: int) -> int:
+ """"""
+ dbadmin: object = DbAdmin(mainWindow)
+ success: int = dbadmin.del_user_by_userid(userId)
+ if success:
+ QMessageBox.information(
+ mainWindow,
+ "Suppresion d'un utilisateur",
+ "Utilisateur supprimé!"
+ )
+ return 1
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Suppresion d'un utilisateur",
+ "Impossible de supprimer cet utilisateur"
+ )
+ return 0
+
+
+def core_suppr_mission(mainWindow: object, missionId: int) -> int:
+ """"""
+ dbadmin: object = DbAdmin(mainWindow)
+ success: int = dbadmin.del_mission_by_missionid(missionId)
+ if success:
+ QMessageBox.information(
+ mainWindow,
+ "Suppresion d'une mission",
+ "Mission supprimé!"
+ )
+ return 1
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Suppresion d'une mission",
+ "Impossible de supprimer cette mission"
+ )
+ return 0
+
+
+class window_admin_emplois():
+ """"""
+ def cmb_populate(self, mainWindow: object , cmb: object) -> None:
+ """"""
+ # Instanciation DB
+ dbsearch: object = DbSearch(mainWindow)
+ allJobs: object = dbsearch.get_job_all()
+ cmb.clear()
+ for i in allJobs:
+ cmb.addItem(f"{i[2]}", i[0])
+
+
+ def __init__(self, mainWindow: object) -> None:
+ """"""
+ # Fenêtre
+ dial: object = QDialog(parent=mainWindow)
+ dial.setWindowTitle("Admin - Emplois")
+
+ # Widgets Ajout
+ labAjoutEn: object = QLabel("Nom en Anglais")
+ inpAjoutEn: object = QLineEdit(maxLength=128)
+ labAjoutFr: object = QLabel("Nom en Français")
+ inpAjoutFr: object = QLineEdit(maxLength=128)
+ btnAjout: object = QPushButton("Enregistrer")
+ btnAjout.clicked.connect(
+ lambda: [
+ core_ajout_emploi(
+ mainWindow,
+ inpAjoutEn.text(),
+ inpAjoutFr.text()
+ ),
+ self.cmb_populate(mainWindow, cmbSuppr)
+ ]
+ )
+ # Layout Ajout
+ layAjout: object = QGridLayout()
+ layAjout.addWidget(labAjoutEn, 0, 0)
+ layAjout.addWidget(inpAjoutEn, 0, 1)
+ layAjout.addWidget(labAjoutFr, 1, 0)
+ layAjout.addWidget(inpAjoutFr, 1, 1)
+ layAjout.addWidget(btnAjout, 2, 1)
+ # Grp Ajout
+ grpAjout: object = QGroupBox("Ajout d'un emploi")
+ grpAjout.setLayout(layAjout)
+
+ # Widgets Suppr
+ labSuppr: object = QLabel("Emploi à supprimmer")
+ cmbSuppr: object = QComboBox()
+ self.cmb_populate(mainWindow, cmbSuppr)
+ btnSuppr: object = QPushButton("Supprimer")
+ btnSuppr.clicked.connect(
+ lambda: [
+ core_suppr_emploi(
+ mainWindow,
+ cmbSuppr.currentData()
+ ),
+ self.cmb_populate(mainWindow, cmbSuppr)
+ ]
+ )
+ # Layouts Suppr
+ laySuppr: object = QGridLayout()
+ laySuppr.addWidget(labSuppr, 0, 0)
+ laySuppr.addWidget(cmbSuppr, 0, 1)
+ laySuppr.addWidget(btnSuppr, 1, 1)
+ # Grp Suppr
+ grpSuppr: object = QGroupBox("Suppression d'un emploi")
+ grpSuppr.setLayout(laySuppr)
+
+ # Layout Main & show
+ layMain: object = QVBoxLayout()
+ layMain.addWidget(grpAjout)
+ layMain.addWidget(grpSuppr)
+ dial.setLayout(layMain)
+ dial.show()
+
+
+def window_admin_users(mainWindow: object) -> None:
+ """"""
+ # Instanciation DB
+ dbadmin: object = DbAdmin(mainWindow)
+ allUsers: object = dbadmin.get_all_users_account()
+ # Fenêtre
+ dial: object = QDialog(parent=mainWindow)
+ dial.setWindowTitle("Admin - Utilisateurs")
+ # Widgets Users
+ labCmdUser: object = QLabel("Id à supprimer")
+ inpCmdUser: object = QLineEdit(maxLength=128)
+ btnSuppr: object = QPushButton("Supprimer")
+ btnSuppr.clicked.connect(
+ lambda: [
+ core_suppr_user(
+ mainWindow,
+ inpCmdUser.text()
+ ),
+ dial.close()
+ ]
+ )
+ labUsers: list = []
+ for i in allUsers:
+ labUsers.append(QLabel(f"ID:{i[0]} Mail:{i[1]} Inscr.{i[4]} Status:{i[5]}"))
+ # Layouts Users
+ layCmd: object = QHBoxLayout()
+ layCmd.addStretch()
+ layCmd.addWidget(labCmdUser)
+ layCmd.addWidget(inpCmdUser)
+ layCmd.addWidget(btnSuppr)
+ layCmd.addStretch()
+ layUsers: object = QVBoxLayout()
+ for i in range(len(labUsers)):
+ layUsers.addWidget(labUsers[i])
+ laySuppr: object = QVBoxLayout()
+ laySuppr.addLayout(layCmd)
+ laySuppr.addLayout(layUsers)
+ # Grp Users
+ grpUser: object = QGroupBox("Suppression d'un utilisateur")
+ grpUser.setLayout(laySuppr)
+ # Layout Main & Show
+ layMain: object = QVBoxLayout()
+ layMain.addWidget(grpUser)
+ dial.setLayout(layMain)
+ dial.show()
+
+
+def window_admin_missions(mainWindow: object):
+ """"""
+ # Instanciation DB
+ dbmission: object = DbMission(mainWindow)
+ dbsearch: object = DbSearch(mainWindow)
+ # Fenêtre
+ dial: object = QDialog(parent=mainWindow)
+ dial.setWindowTitle("Admin - Missions")
+ # Widgets Users
+ labCmdMission: object = QLabel("Id à supprimer")
+ inpCmdMission: object = QLineEdit()
+ btnSuppr: object = QPushButton("Supprimer")
+ btnSuppr.clicked.connect(
+ lambda: [
+ core_suppr_mission(
+ mainWindow,
+ inpCmdMission.text()
+ ),
+ dial.close()
+ ]
+ )
+ allMissions: object = dbmission.get_all_missions()
+ labMissions: list = []
+ for i in allMissions:
+ jobName = dbsearch.get_job_by_jobid(i[10])[0][2]
+ labMissions.append(
+ QLabel(
+ f"ID:{i[0]} date:{i[1].strftime('%m/%d/%Y')} Emploi:{jobName} sujet:{i[2]} clientId:{i[8]} proId:{i[9]}"
+ )
+ )
+ # Layouts Missions
+ layCmd: object = QHBoxLayout()
+ layCmd.addStretch()
+ layCmd.addWidget(labCmdMission)
+ layCmd.addWidget(inpCmdMission)
+ layCmd.addWidget(btnSuppr)
+ layCmd.addStretch()
+ layMissions: object = QVBoxLayout()
+ for i in range(len(labMissions)):
+ layMissions.addWidget(labMissions[i])
+
+ laySuppr: object = QVBoxLayout()
+ laySuppr.addLayout(layCmd)
+ laySuppr.addLayout(layMissions)
+ # Grp Missions
+ grpMission: object = QGroupBox("Suppression d'une mission")
+ grpMission.setLayout(laySuppr)
+ # Layout Main & Show
+ layMain: object = QVBoxLayout()
+ layMain.addWidget(grpMission)
+ dial.setLayout(layMain)
+ dial.show()
diff --git a/src/app/windowMissions.py b/src/app/windowMissions.py
new file mode 100644
index 0000000..5878c8a
--- /dev/null
+++ b/src/app/windowMissions.py
@@ -0,0 +1,156 @@
+
+from PyQt5.QtWidgets import (
+ QDialog, QGroupBox, QLabel,
+ QVBoxLayout, QHBoxLayout,
+ QPushButton, QMessageBox,
+ QLineEdit, QComboBox
+)
+from src.database.dbmission import DbMission
+
+
+def core_review(dial: object, dbmission: object, missionId: int) -> None:
+ """"""
+ dialReview: object = QDialog(parent=dial)
+ #
+ lineNote: object = QHBoxLayout()
+ labNote: object = QLabel("Note: ")
+ cmbNote: object = QComboBox()
+ for i in range(6):
+ cmbNote.addItem(str(i), i)
+ lineNote.addWidget(labNote)
+ lineNote.addStretch()
+ lineNote.addWidget(cmbNote)
+ #
+ lineReview: object = QHBoxLayout()
+ labReview: object = QLabel("Avis: ")
+ inpReview: object = QLineEdit(maxLength=256)
+ lineReview.addWidget(labReview)
+ lineReview.addStretch()
+ lineReview.addWidget(inpReview)
+ #
+ lineBtn: object = QHBoxLayout()
+ btnValider: object = QPushButton("Valider")
+ btnValider.clicked.connect(
+ lambda: [
+ dbmission.review_mission(missionId, inpReview.text(), cmbNote.currentData()),
+ dbmission.validate_mission_client_by_missionid(missionId),
+ QMessageBox.information(
+ dial,
+ "Mission",
+ "La mission a été validée"
+ ),
+ dialReview.close()
+ ]
+ )
+ lineBtn.addStretch()
+ lineBtn.addWidget(btnValider)
+ lineBtn.addStretch()
+ #
+ layReview: object = QVBoxLayout()
+ layReview.addLayout(lineNote)
+ layReview.addLayout(lineReview)
+ layReview.addLayout(lineBtn)
+ #
+ grpMain: object = QGroupBox("Donnez votre avis")
+ grpMain.setLayout(layReview)
+ layMain: object = QVBoxLayout()
+ layMain.addWidget(grpMain)
+ #
+ dialReview.setLayout(layMain)
+ dialReview.show()
+
+
+def core_validate(mainWindow: object, dial: object, missionId: int, status: str) -> None:
+ """"""
+ dbmission: object = DbMission(mainWindow)
+ if status == "acceptedByPro":
+ dbmission.accept_mission_by_missionid(missionId)
+ QMessageBox.information(
+ dial,
+ "Mission",
+ "La mission a bien été acceptée"
+ )
+ elif status == "validatedByPro":
+ dbmission.validate_mission_pro_by_missionid(missionId)
+ QMessageBox.information(
+ dial,
+ "Mission",
+ "La mission a été validée"
+ )
+ elif status == "validatedByClient":
+ core_review(dial, dbmission, missionId)
+
+ dial.close()
+
+
+def core_get_missions_by_status(mainWindow: object, status: str) -> list:
+ """"""
+ dbmission: object = DbMission(mainWindow)
+ if mainWindow.userStatus == "Pro":
+ missionsAll: list = dbmission.get_mission_by_proid(mainWindow.userId)
+ elif mainWindow.userStatus == "Client":
+ missionsAll: list = dbmission.get_mission_by_clientid(mainWindow.userId)
+
+ if status == "pending":
+ missionsPending: list = [list(i) for i in missionsAll if i[5] == None]
+ return missionsPending
+ elif status == "ongoing":
+ missionsOngoing: list = [list(i) for i in missionsAll if i[5] != None and (i[6] == None or i[7] == None)]
+ return missionsOngoing
+ elif status == "completed":
+ missionsCompleted: list = [list(i) for i in missionsAll if (i[6] != None and i[7] != None)]
+ return missionsCompleted
+
+
+def window_main(mainWindow: object, status: str) -> None:
+ """"""
+ dial: object = QDialog(parent=mainWindow)
+ missions: list = core_get_missions_by_status(mainWindow, status)
+ linesMission: list = []
+ for mission in missions:
+ line: object = QHBoxLayout()
+ labMission: object = QLabel(" - ".join([str(i) for i in mission[1:] if i != None]))
+ line.addWidget(labMission)
+ if status == "pending" and mainWindow.userStatus == "Pro":
+ btnValidate: object = QPushButton("Valider")
+ btnValidate.clicked.connect(
+ lambda checked, missionId=mission[0]:
+ core_validate(mainWindow, dial, missionId, "acceptedByPro")
+ )
+ line.addStretch()
+ line.addWidget(btnValidate)
+ elif status == "ongoing" and mainWindow.userStatus == "Pro" and mission[7] == None:
+ btnValidate: object = QPushButton("Valider")
+ btnValidate.clicked.connect(
+ lambda checked, missionId=mission[0]:
+ core_validate(mainWindow, dial, missionId, "validatedByPro")
+ )
+ line.addStretch()
+ line.addWidget(btnValidate)
+ elif status == "ongoing" and mainWindow.userStatus == "Client" and mission[6] == None:
+ btnValidate: object = QPushButton("Valider")
+ btnValidate.clicked.connect(
+ lambda checked, missionId=mission[0]:
+ core_validate(mainWindow, dial, missionId, "validatedByClient")
+ )
+ line.addStretch()
+ line.addWidget(btnValidate)
+
+ linesMission.append(line)
+
+ layMission: object = QVBoxLayout()
+ for i in linesMission:
+ layMission.addLayout(i)
+
+ if status == "pending":
+ grpMain: object = QGroupBox("Missions en attente")
+ elif status == "ongoing":
+ grpMain: object = QGroupBox("Missions en cours")
+ elif status == "completed":
+ grpMain: object = QGroupBox("Missions terminées")
+
+ grpMain.setLayout(layMission)
+ layMain: object = QVBoxLayout()
+ layMain.addWidget(grpMain)
+ dial.setLayout(layMain)
+ dial.show()
diff --git a/src/app/windowRecherche.py b/src/app/windowRecherche.py
new file mode 100644
index 0000000..b2305e1
--- /dev/null
+++ b/src/app/windowRecherche.py
@@ -0,0 +1,150 @@
+
+# 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
+
+from PyQt5.QtWidgets import (
+ QDialog, QVBoxLayout,
+ QHBoxLayout, QLabel,
+ QPushButton, QGroupBox,
+ QComboBox, QLineEdit,
+ QMessageBox
+)
+from src.database.dbsearch import DbSearch
+from src.database.dbmission import DbMission
+
+
+def core_mandater(mainWindow: object, dial: object, proId: int) -> None:
+ """"""
+ dbmission: object = DbMission(mainWindow)
+ dbsearch: object = DbSearch(mainWindow)
+ proJobs: list = dbsearch.get_pro_job_by_proid(proId)
+
+ dial: object = QDialog(dial)
+
+ labInpMandate: object = QLabel("Sujet de la mission:")
+ inpMandate: object = QLineEdit(maxLength=128)
+ layInpMandate: object = QHBoxLayout()
+ layInpMandate.addWidget(labInpMandate)
+ layInpMandate.addStretch()
+ layInpMandate.addWidget(inpMandate)
+
+ labCmbMandate: object = QLabel("Profession concernée:")
+ cmbMandate: object = QComboBox()
+ layCmbMandate: object = QHBoxLayout()
+ for i in proJobs:
+ cmbMandate.addItem(f"{i[2]}", i[0])
+ layCmbMandate.addWidget(labCmbMandate)
+ layCmbMandate.addStretch()
+ layCmbMandate.addWidget(cmbMandate)
+
+ 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()
+ ]
+ )
+ layBtnMandate: object = QHBoxLayout()
+ layBtnMandate.addStretch()
+ layBtnMandate.addWidget(btnMandate)
+ layBtnMandate.addStretch()
+
+ layGrp: object = QVBoxLayout()
+ layGrp.addLayout(layInpMandate)
+ layGrp.addLayout(layCmbMandate)
+ layGrp.addLayout(layBtnMandate)
+
+ grpMandate: object = QGroupBox()
+ grpMandate.setLayout(layGrp)
+
+ layMain: object = QVBoxLayout()
+ layMain.addWidget(grpMandate)
+
+ dial.setLayout(layMain)
+ dial.show()
+
+
+def core_more_infos(mainWindow: object, dial: object, proId: int) -> None:
+ """"""
+ dial: object = QDialog(dial)
+ search: object = DbSearch(mainWindow)
+ resRecherche: list = search.get_user_info_by_userid(proId)[0][1:]
+ labelsText: list = [
+ "Nom",
+ "Prénom",
+ "Diplôme",
+ "Capacités",
+ "Description",
+ "Téléphone",
+ "Adresse",
+ "Code postale",
+ "Ville",
+ ]
+
+ layProInfo = QVBoxLayout()
+ for i in range(len(resRecherche)):
+ line: object = QHBoxLayout()
+ line.addWidget(QLabel(f"{labelsText[i]}: {resRecherche[i]}"))
+ layProInfo.addLayout(line)
+
+ 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)
+
+ grpProInfo: object = QGroupBox()
+ grpProInfo.setLayout(layProInfo)
+
+ layMain: object = QVBoxLayout()
+ layMain.addWidget(grpProInfo)
+
+ dial.setLayout(layMain)
+ dial.show()
+
+
+def window_main(mainWindow: object, results: list) -> None:
+ """"""
+ dial: object = QDialog(parent=mainWindow)
+ dial.setWindowTitle("Recherche")
+ layoutsResult: list = []
+ for i in results:
+ layoutLine = QHBoxLayout()
+ color = results.index(i) % 2
+ if color:
+ colored = QLabel(i["text"])
+ colored.setStyleSheet("background-color: rgb(230,200,200); border-radius: 3px")
+ layoutLine.addWidget(colored)
+ else:
+ layoutLine.addWidget(QLabel(i["text"]))
+ btnInfos = QPushButton("Infos")
+ btnInfos.clicked.connect(
+ lambda checked, proId=i["id"]:
+ core_more_infos(mainWindow, dial, proId)
+ )
+ layoutLine.addStretch()
+ layoutLine.addWidget(btnInfos)
+ layoutsResult.append(layoutLine)
+
+ layoutMain = QVBoxLayout()
+ for layout in layoutsResult:
+ layoutMain.addLayout(layout)
+
+ dial.setLayout(layoutMain)
+ dial.show()
diff --git a/src/app/windowUserInfo.py b/src/app/windowUserInfo.py
new file mode 100644
index 0000000..4455dde
--- /dev/null
+++ b/src/app/windowUserInfo.py
@@ -0,0 +1,199 @@
+
+# https://stackoverflow.com/questions/3077192/get-a-layouts-widgets-in-pyqt
+
+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 core_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),
+ core_delete_job(layItem)
+ ]
+ )
+ lineMyJobs.addWidget(labJob)
+ lineMyJobs.addStretch()
+ lineMyJobs.addWidget(btnRemoveJob)
+ layMyJobs.addLayout(lineMyJobs)
+
+
+def core_delete_job(layLineJob: object) -> None:
+ """"""
+ lab: object = layLineJob.itemAt(0).widget()
+ lab.deleteLater()
+ btn: object = layLineJob.itemAt(2).widget()
+ btn.deleteLater()
+ layLineJob.deleteLater()
+
+
+def core_validate(mainWindow: object, dial: object,
+ layLines: list, oldJobs: list = None, newJobs: list = None) -> None:
+ """"""
+ user: object = DbUser(mainWindow = mainWindow)
+ userInfos: list = []
+ 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
+
+ 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"
+ )
+
+
+def window_main(mainWindow: object) -> None:
+ search: object = DbSearch(mainWindow)
+ dial: object = QDialog(parent=mainWindow)
+ dial.setWindowTitle("Mes infos")
+ 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"
+ ]
+
+ layLines: list = {}
+ for i in champsClients:
+ layLines[i] = QHBoxLayout()
+ layLines[i].addWidget(QLabel(i))
+ layLines[i].addStretch()
+ if infos:
+ if i == "Téléphone":
+ layLines[i].addWidget(QLineEdit(champsClients[i], maxLength=10))
+ elif i == "Code postal":
+ layLines[i].addWidget(QLineEdit(champsClients[i], maxLength=6))
+ else:
+ layLines[i].addWidget(QLineEdit(champsClients[i], maxLength=128))
+ else:
+ if i == "Téléphone":
+ layLines[i].addWidget(QLineEdit(maxLength=10))
+ elif i == "Code postal":
+ layLines[i].addWidget(QLineEdit(maxLength=6))
+ else:
+ layLines[i].addWidget(QLineEdit(maxLength=128))
+
+ if mainWindow.userStatus == "Pro":
+ allJobs: object = search.get_job_all()
+ laySelectJobs: object = QHBoxLayout()
+ labSelectJobs: object = QLabel("Les emplois:")
+ cmbAllJobs: object = QComboBox()
+ for i in allJobs:
+ cmbAllJobs.addItem(f"{i[2]}", i[0])
+
+ btnSelectJobs = QPushButton("Ajouter")
+ btnSelectJobs.clicked.connect(
+ lambda :
+ core_add_job(
+ cmbAllJobs.currentText(),
+ cmbAllJobs.currentData(),
+ newJobs,
+ layMyJobs
+ )
+ )
+ laySelectJobs.addWidget(labSelectJobs)
+ laySelectJobs.addStretch()
+ laySelectJobs.addWidget(cmbAllJobs)
+ laySelectJobs.addStretch()
+ laySelectJobs.addWidget(btnSelectJobs)
+ layLines["selectJobs"] = laySelectJobs
+ #
+ myJobs: object = search.get_pro_job_by_proid(mainWindow.userId)
+ layMyJobs: object = QVBoxLayout()
+ newJobs: list = []
+ for i in myJobs:
+ core_add_job(i[2], i[0], newJobs, layMyJobs)
+ oldJobs: list = newJobs.copy() # Sinon pointer !!!
+ layLines["myJobs"] = layMyJobs
+ for i in champsPro:
+ layLines[i] = QHBoxLayout()
+ layLines[i].addWidget(QLabel(i))
+ layLines[i].addStretch()
+ if infos:
+ layLines[i].addWidget(QLineEdit(champsPro[i], maxLength=256))
+ else:
+ layLines[i].addWidget(QLineEdit(maxLength=256))
+
+ layModif: object = QVBoxLayout()
+ for i in layLines:
+ layModif.addLayout(layLines[i])
+
+ btnModif: object = QPushButton("modifer")
+ btnModif.clicked.connect(
+ lambda:
+ core_validate(
+ mainWindow,
+ dial,
+ layLines,
+ oldJobs,
+ newJobs
+ ) if mainWindow.userStatus == "Pro"
+ else core_validate(
+ mainWindow,
+ dial,
+ layLines
+ )
+ )
+ layBtn: object = QHBoxLayout()
+ layBtn.addStretch()
+ layBtn.addWidget(btnModif)
+ layModif.addLayout(layBtn)
+ #
+ grpMain: object = QGroupBox("Mes infos")
+ grpMain.setLayout(layModif)
+ mainLayout: object = QVBoxLayout()
+ mainLayout.addWidget(grpMain)
+ dial.setLayout(mainLayout)
+ dial.show()