############################################################################ # # # Description: Fenêtres et functions permettant d'administrer la BDD # # # ############################################################################ # Import des éléments de PyQt5 from PyQt5.QtWidgets import ( QDialog, QGroupBox, QLabel, QLineEdit, QVBoxLayout, QHBoxLayout, QGridLayout, QPushButton, QComboBox, QMessageBox ) # Import des éléments locals 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: """ Fonction permettant d'ajouter un emploi dans la BDD avec une fonction de DbAdmin """ # Instanciation des méthodes permettant de gérer la BDD en tant qu'admin dbadmin: object = DbAdmin(mainWindow) # Tentative d'enregistrement du nouveau job avec son nom EN et FR 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: """ Fonction permettant de supprimer un emploi de la BDD avec une fonction de DbAdmin """ # Instanciation des méthodes permettant de gérer la BDD en tant qu'admin dbadmin: object = DbAdmin(mainWindow) # Tentative de suppression d'un emploi avec son ID 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: """ Fonction permettant de supprimer un utilisateur de la BDD avec une fonction de DbAdmin """ # Instanciation des méthodes permettant de gérer la BDD en tant qu'admin dbadmin: object = DbAdmin(mainWindow) # Tentative de suppression d'un emploi avec son ID 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: """ Fonction permettant de supprimer une mission de la BDD avec une fonction de DbAdmin """ # Instanciation des méthodes permettant de gérer la BDD en tant qu'admin dbadmin: object = DbAdmin(mainWindow) # Tentative de suppression d'un emploi avec son ID 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(): """ Fenêtre permettant de gérer les emplois de la BDD, permet de pouvoir en ajouter ou en supprimer """ def cmb_populate(self, mainWindow: object , cmb: object) -> None: """ Méthode permettant de peupler le combobox avec tous les emplois de la BDD """ # Instanciation des méthodes de recherche dans la BDD dbsearch: object = DbSearch(mainWindow) allJobs: object = dbsearch.get_job_all() # On éfface les éléments présent dans le ComboBox cmb.clear() # On repeuple avec les nouveaux éléments for i in allJobs: cmb.addItem(f"{i[2]}", i[0]) def __init__(self, mainWindow: object) -> None: """ Affichage de la fenêtre """ # Instanciation d'une nouvealle fenêtre simple dial: object = QDialog(parent=mainWindow) # Attribution du titre de cette fenêtre dial.setWindowTitle("Admin - Emplois") # Widgets pour ajouter un nouveau job 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) ] ) # GridLayout pour l'ajout d'un nouveau job 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) # GroupBox pour ce GridLayout grpAjout: object = QGroupBox("Ajout d'un emploi") grpAjout.setLayout(layAjout) # Widgets pour supprimer un job 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. = this. = faire appel à une méthode ou une var qui appartient à notre classe self.cmb_populate(mainWindow, cmbSuppr) ] ) # GridLayouts pour supprimer un job laySuppr: object = QGridLayout() laySuppr.addWidget(labSuppr, 0, 0) laySuppr.addWidget(cmbSuppr, 0, 1) laySuppr.addWidget(btnSuppr, 1, 1) # GroupBox pour ce GridLayout grpSuppr: object = QGroupBox("Suppression d'un emploi") grpSuppr.setLayout(laySuppr) # Layout principal auquel on donne les deux GroupBox layMain: object = QVBoxLayout() layMain.addWidget(grpAjout) layMain.addWidget(grpSuppr) dial.setLayout(layMain) # On affiche la fenêtre dial.show() def window_admin_users(mainWindow: object) -> None: """ Fenêtre permettant de supprimer un utilisateur de la BDD """ # Instanciation des méthodes permettant de gérer la BDD en tant qu'admin dbadmin: object = DbAdmin(mainWindow) # Instanciation d'une nouvealle fenêtre simple dial: object = QDialog(parent=mainWindow) # Attribution du titre de cette fenêtre dial.setWindowTitle("Admin - Utilisateurs") # Widgets pour supprimer un utilisateur 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() ] ) # Création d'une liste qui stockera tous les QLabel pour chaque utilisateur labUsers: list = [] # Récupération de tous les utilisateurs allUsers: object = dbadmin.get_all_users_account() for i in allUsers: if i[5] == 0: status = "Admin" elif i[5] == 1: status = "Pro" elif i[5] == 2: status = "Client" # On formate une ligne avec les infos utiles labUsers.append(QLabel(f"ID:{i[0]} Mail:{i[1]} Inscr.{i[4]} Status:{status}")) # Layout pour la partie "commande" (Qlabel + QlineEdit + QPushButon) layCmd: object = QHBoxLayout() layCmd.addStretch() layCmd.addWidget(labCmdUser) layCmd.addWidget(inpCmdUser) layCmd.addWidget(btnSuppr) layCmd.addStretch() # Layout pour tous les utilisateurs layUsers: object = QVBoxLayout() for i in range(len(labUsers)): layUsers.addWidget(labUsers[i]) # Layout pour accueillir le layout des commandes et des utilisateurs laySuppr: object = QVBoxLayout() laySuppr.addLayout(layCmd) laySuppr.addLayout(layUsers) # GroupeBox principal grpUser: object = QGroupBox("Suppression d'un utilisateur") grpUser.setLayout(laySuppr) # Layout principal layMain: object = QVBoxLayout() layMain.addWidget(grpUser) dial.setLayout(layMain) # Affichage de la fenêtre dial.show() def window_admin_missions(mainWindow: object): """ Fenêtre permettant de supprimer une mission de la BDD """ # Instanciation des méthodes pour faire des # recherches dans la BDD dbmission: object = DbMission(mainWindow) dbsearch: object = DbSearch(mainWindow) # Instanciation d'une nouvealle fenêtre simple dial: object = QDialog(parent=mainWindow) # Attribution du titre de cette fenêtre dial.setWindowTitle("Admin - Missions") # Widgets pour supprimer un mission labCmdMission: object = QLabel("Id à supprimer") inpCmdMission: object = QLineEdit() btnSuppr: object = QPushButton("Supprimer") btnSuppr.clicked.connect( lambda: [ core_suppr_mission( mainWindow, inpCmdMission.text() ), # On ferme la fenêtre une fois la mission supprimer # pour ne pas avoir à la rafraichir dial.close() ] ) # Création d'une liste qui stockera tous les QLabel pour chaque mission labMissions: list = [] # Récupération de toutes les missions allMissions: object = dbmission.get_all_missions() for i in allMissions: # On récupère le nom FR ([2]), du job de la mission (i[10]) du premier resultat renvoyé par MySQL ([0]) jobName = dbsearch.get_job_by_jobid(i[10])[0][2] # On formate une ligne avec les infos utiles et en formatant les dates avec strftime labMissions.append( QLabel( f"ID:{i[0]} Emise le:{i[1].strftime('%m/%d/%Y')} Job:{jobName} Sujet:{i[2]} IdClient:{i[8]} IdPro:{i[9]}" ) ) # Layout pour la partie "commande" (Qlabel + QlineEdit + QPushButon) layCmd: object = QHBoxLayout() layCmd.addStretch() layCmd.addWidget(labCmdMission) layCmd.addWidget(inpCmdMission) layCmd.addWidget(btnSuppr) layCmd.addStretch() # Layout pour toutes les missions layMissions: object = QVBoxLayout() for i in range(len(labMissions)): layMissions.addWidget(labMissions[i]) # Layout pour accueillir le layout des commandes et des missions laySuppr: object = QVBoxLayout() laySuppr.addLayout(layCmd) laySuppr.addLayout(layMissions) # GroupeBox principal grpMission: object = QGroupBox("Suppression d'une mission") grpMission.setLayout(laySuppr) # Layout principal layMain: object = QVBoxLayout() layMain.addWidget(grpMission) dial.setLayout(layMain) # Affichage de la fenêtre dial.show()