Ajout des fonctionnalités pour modifier une personne et gérer ses absences

This commit is contained in:
Erwann PHILIPPE 2025-06-03 10:31:45 +02:00
parent b68adb42ee
commit e7f5498737
13 changed files with 511 additions and 42 deletions

View file

@ -0,0 +1,49 @@
using projet.dal;
using projet.modele;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace projet.Controller
{
internal class GestionAbsenceController
{
private readonly AbsenceAccess absenceAccess;
private readonly PersonnelAccess personnelAccess;
private readonly MotifAccess motifAccess;
public GestionAbsenceController()
{
absenceAccess = new AbsenceAccess();
personnelAccess = new PersonnelAccess();
motifAccess = new MotifAccess();
}
public List<Absence> GetAbsences(Personnel personnel)
{
return absenceAccess.GetAbsences(personnel);
}
public List<Motif> GetAllMotifs()
{
return motifAccess.GetAllMotifs();
}
public void AddAbsence(Absence absence, Personnel personne)
{
absenceAccess.AddAbsence(absence, personne);
}
public void DeleteAbsence(Absence absence)
{
absenceAccess.DeleteAbsence(absence);
}
public int GetMotifIdByLibelle(string libelle)
{
return motifAccess.GetMotifIdByLibelle(libelle);
}
}
}

View file

@ -0,0 +1,31 @@
using projet.dal;
using projet.modele;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace projet.Controller
{
internal class ModifierPersonneController
{
private readonly ServiceAccess serviceAccess;
private readonly PersonnelAccess personnelAccess;
public ModifierPersonneController()
{
serviceAccess = new ServiceAccess();
personnelAccess = new PersonnelAccess();
}
public List<Service> GetAllServices()
{
return serviceAccess.GetAllServices();
}
public void ModifierPersonnel(Personnel personnel)
{
personnelAccess.ModifierPersonnel(personnel);
}
}
}

View file

@ -136,6 +136,7 @@
buttonEdit.Size = new Size(150, 30);
buttonEdit.TabIndex = 9;
buttonEdit.Text = "Modifier personne";
buttonEdit.Click += buttonEdit_Click;
//
// buttonAbsence
//

View file

@ -46,11 +46,12 @@ namespace projet.View
private void buttonAbsence_Click(object sender, EventArgs e)
{
if(comboBoxPersonnel.SelectedItem != null)
if (comboBoxPersonnel.SelectedItem != null)
{
Personnel personne = (Personnel)comboBoxPersonnel.SelectedItem;
this.Hide();
this.Close();
GestionAbsence gestionAbsence = new GestionAbsence();
GestionAbsence gestionAbsence = new GestionAbsence(personne);
gestionAbsence.ShowDialog();
}
else
@ -61,7 +62,7 @@ namespace projet.View
private void buttonDelete_Click(object sender, EventArgs e)
{
if(comboBoxPersonnel.SelectedItem != null)
if (comboBoxPersonnel.SelectedItem != null)
{
Personnel personne = (Personnel)comboBoxPersonnel.SelectedItem;
this.Hide();
@ -74,5 +75,21 @@ namespace projet.View
MessageBox.Show("Veuillez sélectionner un membre du personnel.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonEdit_Click(object sender, EventArgs e)
{
if(comboBoxPersonnel.SelectedItem != null)
{
Personnel personne = (Personnel)comboBoxPersonnel.SelectedItem;
this.Hide();
this.Close();
ModifierPersonne modifierPersonne = new ModifierPersonne(personne);
modifierPersonne.ShowDialog();
}
else
{
MessageBox.Show("Veuillez sélectionner un membre du personnel.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View file

@ -46,12 +46,15 @@
/// </summary>
private void InitializeComponent()
{
DataGridViewCellStyle dataGridViewCellStyle1 = new DataGridViewCellStyle();
DataGridViewCellStyle dataGridViewCellStyle2 = new DataGridViewCellStyle();
DataGridViewCellStyle dataGridViewCellStyle3 = new DataGridViewCellStyle();
DataGridViewCellStyle dataGridViewCellStyle4 = new DataGridViewCellStyle();
pictureBoxTop = new PictureBox();
pictureBoxBottom = new PictureBox();
labelTitle = new Label();
dataGridViewAbsences = new DataGridView();
dataGridViewTextBoxColumn1 = new DataGridViewTextBoxColumn();
dataGridViewTextBoxColumn2 = new DataGridViewTextBoxColumn();
dataGridViewTextBoxColumn3 = new DataGridViewTextBoxColumn();
groupBoxNouvelleAbsence = new GroupBox();
labelDateDebut = new Label();
textBoxDateDebut = new TextBox();
@ -65,9 +68,7 @@
comboBoxAbsence = new ComboBox();
buttonSupprimer = new Button();
panelSeparator = new Panel();
dataGridViewTextBoxColumn1 = new DataGridViewTextBoxColumn();
dataGridViewTextBoxColumn2 = new DataGridViewTextBoxColumn();
dataGridViewTextBoxColumn3 = new DataGridViewTextBoxColumn();
buttonBack = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxTop).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureBoxBottom).BeginInit();
((System.ComponentModel.ISupportInitialize)dataGridViewAbsences).BeginInit();
@ -112,20 +113,36 @@
dataGridViewAbsences.AllowUserToAddRows = false;
dataGridViewAbsences.AllowUserToDeleteRows = false;
dataGridViewAbsences.AllowUserToResizeRows = false;
dataGridViewAbsences.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
dataGridViewAbsences.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle3;
dataGridViewAbsences.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewAbsences.Columns.AddRange(new DataGridViewColumn[] { dataGridViewTextBoxColumn1, dataGridViewTextBoxColumn2, dataGridViewTextBoxColumn3 });
dataGridViewAbsences.EnableHeadersVisualStyles = false;
dataGridViewAbsences.Location = new Point(60, 240);
dataGridViewAbsences.MultiSelect = false;
dataGridViewAbsences.Name = "dataGridViewAbsences";
dataGridViewAbsences.ReadOnly = true;
dataGridViewAbsences.RowHeadersVisible = false;
dataGridViewCellStyle2.Font = new Font("Segoe UI", 10F);
dataGridViewAbsences.RowsDefaultCellStyle = dataGridViewCellStyle2;
dataGridViewCellStyle4.Font = new Font("Segoe UI", 10F);
dataGridViewAbsences.RowsDefaultCellStyle = dataGridViewCellStyle4;
dataGridViewAbsences.ScrollBars = ScrollBars.Vertical;
dataGridViewAbsences.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewAbsences.Size = new Size(680, 180);
dataGridViewAbsences.TabIndex = 3;
dataGridViewAbsences.CellContentClick += dataGridViewAbsences_CellContentClick;
//
// dataGridViewTextBoxColumn1
//
dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
dataGridViewTextBoxColumn1.ReadOnly = true;
//
// dataGridViewTextBoxColumn2
//
dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2";
dataGridViewTextBoxColumn2.ReadOnly = true;
//
// dataGridViewTextBoxColumn3
//
dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3";
dataGridViewTextBoxColumn3.ReadOnly = true;
//
// groupBoxNouvelleAbsence
//
@ -210,6 +227,7 @@
buttonAjouter.TabIndex = 6;
buttonAjouter.Text = "Ajouter";
buttonAjouter.UseVisualStyleBackColor = true;
buttonAjouter.Click += buttonAjouter_Click;
//
// groupBoxSupprimerAbsence
//
@ -252,6 +270,7 @@
buttonSupprimer.TabIndex = 2;
buttonSupprimer.Text = "Supprimer";
buttonSupprimer.UseVisualStyleBackColor = true;
buttonSupprimer.Click += buttonSupprimer_Click;
//
// panelSeparator
//
@ -261,26 +280,22 @@
panelSeparator.Size = new Size(2, 160);
panelSeparator.TabIndex = 6;
//
// dataGridViewTextBoxColumn1
// buttonBack
//
dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
dataGridViewTextBoxColumn1.ReadOnly = true;
//
// dataGridViewTextBoxColumn2
//
dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2";
dataGridViewTextBoxColumn2.ReadOnly = true;
//
// dataGridViewTextBoxColumn3
//
dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3";
dataGridViewTextBoxColumn3.ReadOnly = true;
buttonBack.Location = new Point(60, 646);
buttonBack.Name = "buttonBack";
buttonBack.Size = new Size(75, 23);
buttonBack.TabIndex = 7;
buttonBack.Text = "Retour";
buttonBack.UseVisualStyleBackColor = true;
buttonBack.Click += buttonBack_Click;
//
// GestionAbsence
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 800);
Controls.Add(buttonBack);
Controls.Add(pictureBoxTop);
Controls.Add(pictureBoxBottom);
Controls.Add(labelTitle);
@ -307,5 +322,6 @@
private DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
private DataGridViewTextBoxColumn dataGridViewTextBoxColumn2;
private DataGridViewTextBoxColumn dataGridViewTextBoxColumn3;
private Button buttonBack;
}
}

View file

@ -1,4 +1,6 @@
using System;
using projet.modele;
using projet.Controller;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
@ -12,14 +14,114 @@ namespace projet.View
{
public partial class GestionAbsence : Form
{
public GestionAbsence()
private Personnel personne;
private GestionAbsenceController controller;
public GestionAbsence(Personnel personne)
{
InitializeComponent();
this.personne = personne;
Init();
labelTitle.Text = $"Gestion des absences de {personne.Nom} {personne.Prenom}";
RemplirComboBoxMotif();
RemplirComboBoxAbsence();
}
private void dataGridViewAbsences_CellContentClick(object sender, DataGridViewCellEventArgs e)
private void Init()
{
controller = new GestionAbsenceController();
// Effacer les colonnes par défaut avant d'assigner la source de données
dataGridViewAbsences.Columns.Clear();
dataGridViewAbsences.DataSource = controller.GetAbsences(personne);
dataGridViewAbsences.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
// Configuration des colonnes
dataGridViewAbsences.Columns["IdPersonnel"].Visible = false;
dataGridViewAbsences.Columns["DateDebut"].HeaderText = "Date de début";
dataGridViewAbsences.Columns["DateFin"].HeaderText = "Date de fin";
dataGridViewAbsences.Columns["IdMotif"].HeaderText = "Motif";
// Format des dates
dataGridViewAbsences.Columns["DateDebut"].DefaultCellStyle.Format = "dd/MM/yyyy";
dataGridViewAbsences.Columns["DateFin"].DefaultCellStyle.Format = "dd/MM/yyyy";
}
private void buttonAjouter_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(textBoxDateDebut.Text) || !string.IsNullOrEmpty(textBoxDateFin.Text) || comboBoxMotif.SelectedItem != null)
{
string dateDebutStr = textBoxDateDebut.Text;
string dateFinStr = textBoxDateFin.Text;
DateTime dateDebut, dateFin;
if (DateTime.TryParseExact(dateDebutStr, "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out dateDebut) &&
DateTime.TryParseExact(dateFinStr, "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out dateFin))
{
string idMotif = Convert.ToString(((Motif)comboBoxMotif.SelectedItem).IdMotif);
Absence absence = new Absence(personne.IdPersonnel, dateDebut, dateFin, idMotif);
controller.AddAbsence(absence, personne);
dataGridViewAbsences.DataSource = controller.GetAbsences(personne);
textBoxDateDebut.Clear();
textBoxDateFin.Clear();
comboBoxMotif.SelectedIndex = -1; // Réinitialiser la sélection du motif
}
else
{
MessageBox.Show("Erreur : Format de date invalide\nUtilisez le format : dd-MM-yyyy", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("Veuillez remplir tous les champs.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void RemplirComboBoxMotif()
{
List<Motif> motifs = controller.GetAllMotifs();
foreach (Motif motif in motifs)
{
comboBoxMotif.Items.Add(motif);
}
}
private void buttonSupprimer_Click(object sender, EventArgs e)
{
if (comboBoxAbsence.SelectedIndex == -1)
{
MessageBox.Show("Veuillez sélectionner une absence à supprimer.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
Absence absence = (Absence)comboBoxAbsence.SelectedItem;
int idMotif = controller.GetMotifIdByLibelle(absence.IdMotif);
Absence absence2 = new Absence(absence.IdPersonnel, absence.DateDebut, absence.DateFin, Convert.ToString(idMotif));
controller.DeleteAbsence(absence2);
RemplirComboBoxAbsence();
dataGridViewAbsences.DataSource = controller.GetAbsences(personne);
comboBoxAbsence.SelectedIndex = -1;
}
}
private void RemplirComboBoxAbsence()
{
comboBoxAbsence.Items.Clear();
List<Absence> absences = controller.GetAbsences(personne);
foreach (Absence absence in absences)
{
comboBoxAbsence.Items.Add(absence);
}
}
private void buttonBack_Click(object sender, EventArgs e)
{
this.Hide();
this.Close();
Admin admin = new Admin();
admin.ShowDialog();
}
}
}

View file

@ -128,7 +128,6 @@
tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
tableLayoutPanel.Size = new Size(560, 250);
tableLayoutPanel.TabIndex = 3;
tableLayoutPanel.Visible = false;
//
// labelNom
//
@ -244,6 +243,7 @@
buttonConfirmer.Size = new Size(120, 23);
buttonConfirmer.TabIndex = 0;
buttonConfirmer.Text = "CONFIRMER";
buttonConfirmer.Click += buttonConfirmer_Click;
//
// buttonAnnuler
//
@ -252,6 +252,7 @@
buttonAnnuler.Size = new Size(100, 23);
buttonAnnuler.TabIndex = 1;
buttonAnnuler.Text = "Annuler";
buttonAnnuler.Click += buttonAnnuler_Click;
//
// ModifierPersonne
//

View file

@ -1,4 +1,6 @@
using System;
using projet.Controller;
using projet.modele;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
@ -12,9 +14,73 @@ namespace projet.View
{
public partial class ModifierPersonne : Form
{
public ModifierPersonne()
private ModifierPersonneController controller;
private Personnel personne;
public ModifierPersonne(Personnel personne)
{
Init();
this.personne = personne;
InitializeComponent();
labelTitle.Text = $"Voulez vous vraiment modifier {personne.Prenom} ?";
remplirComboBoxService();
remplirInfos();
}
private void Init()
{
controller = new ModifierPersonneController();
}
private void buttonAnnuler_Click(object sender, EventArgs e)
{
this.Hide();
this.Close();
Admin admin = new Admin();
admin.ShowDialog();
}
private void remplirInfos()
{
textBoxNom.Text = personne.Nom;
textBoxPrenom.Text = personne.Prenom;
textBoxMail.Text = personne.Mail;
textBoxTel.Text = personne.Tel;
comboBoxService.SelectedIndex = personne.IdService - 1;
}
private void remplirComboBoxService()
{
List<Service> services = controller.GetAllServices();
foreach (Service service in services)
{
comboBoxService.Items.Add(service.Nom);
}
}
private void buttonConfirmer_Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(textBoxNom.Text) || string.IsNullOrEmpty(textBoxPrenom.Text) || string.IsNullOrEmpty(textBoxMail.Text) || string.IsNullOrEmpty(textBoxTel.Text) || comboBoxService.SelectedIndex == -1)
{
MessageBox.Show("Veuillez remplir tous les champs.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else
{
Personnel personne = new Personnel(
this.personne.IdPersonnel,
textBoxNom.Text,
textBoxPrenom.Text,
textBoxTel.Text,
textBoxMail.Text,
comboBoxService.SelectedIndex + 1
);
controller.ModifierPersonnel(personne);
this.Hide();
this.Close();
Admin admin = new Admin();
admin.ShowDialog();
}
}
}
}

View file

@ -1,12 +1,102 @@
namespace projet.dal
using projet.modele;
namespace projet.dal
{
public class AbsenceAccess
{
private static readonly string connectionString = "server=localhost;user id=root;password=;database=mediatek;";
public static string GetConnexion()
private readonly Access access;
public AbsenceAccess()
{
return connectionString;
access = Access.GetInstance();
}
public List<Absence> GetAbsences(Personnel personnel)
{
List<Absence> absences = new List<Absence>();
if (access.Manager != null)
{
// Sélecte toutes les absence + join libelle du motif d'absence
string req2 = "SELECT a.idPersonnel, a.dateDebut, a.dateFin, m.libelle FROM absence a JOIN motif m ON a.idMotif = m.idMotif WHERE a.idPersonnel = @idPersonnel ORDER BY a.dateDebut;";
//string req = "SELECT * FROM absence WHERE idPersonnel = @idPersonnel ORDER BY dateDebut;";
var parameters = new Dictionary<string, object>
{
{ "@idPersonnel", personnel.IdPersonnel }
};
try
{
// Exécute la requête de sélection
List<Object[]> resultats = access.Manager.ReqSelect(req2, parameters);
if (resultats != null)
{
// Parcourt les résultats et crée des objets Absence
foreach (Object[] resultat in resultats)
{
Absence absence = new Absence(
Convert.ToInt32(resultat[0]), // IdPersonnel
Convert.ToDateTime(resultat[1]), // DateDebut
Convert.ToDateTime(resultat[2]), // DateFin
Convert.ToString(resultat[3])// Motif
);
absences.Add(absence);
}
}
return absences;
}
catch (Exception)
{
Console.WriteLine("Erreur lors de la récupération des absences du personnel.");
Environment.Exit(0);
}
}
return absences;
}
public void AddAbsence(Absence absence, Personnel personne)
{
if (access.Manager != null)
{
string req = "INSERT INTO absence (idPersonnel, dateDebut, dateFin, idMotif) VALUES (@idPersonnel, @dateDebut, @dateFin, @idMotif);";
var parameters = new Dictionary<string, object>
{
{ "@idPersonnel", personne.IdPersonnel },
{ "@dateDebut", absence.DateDebut },
{ "@dateFin", absence.DateFin },
{ "@idMotif", Convert.ToInt32(absence.IdMotif) }
};
try
{
access.Manager.ReqUpdate(req, parameters);
}
catch (Exception)
{
Console.WriteLine("Erreur lors de l'ajout de l'absence.");
Environment.Exit(0);
}
}
}
public void DeleteAbsence(Absence absence)
{
if (access.Manager != null)
{
string req = "DELETE FROM absence WHERE idPersonnel = @idPersonnel AND dateDebut = @dateDebut AND dateFin = @dateFin AND idMotif = @idMotif;";
var parameters = new Dictionary<string, object>
{
{ "@idPersonnel", absence.IdPersonnel },
{ "@dateDebut", absence.DateDebut },
{ "@dateFin", absence.DateFin },
{ "@idMotif", Convert.ToInt32(absence.IdMotif) }
};
try
{
access.Manager.ReqUpdate(req, parameters);
}
catch (Exception)
{
Console.WriteLine("Erreur lors de la suppression de l'absence.");
Environment.Exit(0);
}
}
}
}
}

View file

@ -1,12 +1,72 @@
namespace projet.dal
using projet.modele;
namespace projet.dal
{
public class MotifAccess
{
private static readonly string connectionString = "server=localhost;user id=root;password=;database=mediatek;";
private readonly Access access;
public static string GetConnexion()
public MotifAccess()
{
return connectionString;
access = Access.GetInstance();
}
public List<Motif> GetAllMotifs()
{
List<Motif> motifList = new List<Motif>();
if (access.Manager != null)
{
string req = "SELECT * FROM motif ORDER BY libelle;";
try
{
List<Object[]> resultats = access.Manager.ReqSelect(req);
if (resultats != null)
{
foreach (Object[] resultat in resultats)
{
Motif motif = new Motif(
Convert.ToInt32(resultat[0]), // IdMotif
Convert.ToString(resultat[1]) // Libelle
);
motifList.Add(motif);
}
}
}
catch (Exception)
{
Console.WriteLine("Erreur lors de la récupération des données des motifs.");
Environment.Exit(0);
}
}
return motifList;
}
public int GetMotifIdByLibelle(string libelle)
{
int idMotif = -1;
if (access.Manager != null)
{
string req = "SELECT idMotif FROM motif WHERE libelle = @libelle;";
var parameters = new Dictionary<string, object>
{
{ "@libelle", libelle }
};
try
{
List<Object[]> resultats = access.Manager.ReqSelect(req, parameters);
if (resultats != null && resultats.Count > 0)
{
idMotif = Convert.ToInt32(resultats[0][0]);
}
return idMotif;
}
catch (Exception)
{
Console.WriteLine("Erreur lors de la récupération de l'ID du motif par libellé.");
Environment.Exit(0);
}
}
return idMotif;
}
}
}

View file

@ -89,5 +89,30 @@ namespace projet.dal
}
}
}
public void ModifierPersonnel(Personnel personnel)
{
if(access.Manager != null)
{
string req = "UPDATE personnel SET nom = @nom, prenom = @prenom, tel = @tel, mail = @mail, idService = @idService WHERE idPersonnel = @idPersonnel;";
var parameters = new Dictionary<string, object>
{
{ "@idPersonnel", personnel.IdPersonnel },
{ "@nom", personnel.Nom },
{ "@prenom", personnel.Prenom },
{ "@tel", personnel.Tel },
{ "@mail", personnel.Mail },
{ "@idService", personnel.IdService }
};
try
{
access.Manager.ReqUpdate(req, parameters);
}
catch (Exception)
{
Console.WriteLine("Erreur lors de la modification du personnel dans la base de données.");
Environment.Exit(0);
}
}
}
}
}

View file

@ -17,17 +17,23 @@ namespace projet.modele
public DateTime? DateFin { get; set; }
/// <summary>Identifiant du motif d'absence</summary>
public int IdMotif { get; set; }
public string IdMotif { get; set; }
/// <summary>
/// Constructeur de la classe Absence
/// </summary>
public Absence(int idPersonnel, DateTime dateDebut, DateTime? dateFin, int idMotif)
public Absence(int idPersonnel, DateTime dateDebut, DateTime? dateFin, string idMotif)
{
IdPersonnel = idPersonnel;
DateDebut = dateDebut;
DateFin = dateFin;
IdMotif = idMotif;
}
public override string ToString()
{
string dateDebut = Convert.ToString(DateDebut);
return dateDebut.Split(' ')[0];
}
}
}

View file

@ -19,5 +19,10 @@
IdMotif = idMotif;
Libelle = libelle;
}
public override string ToString()
{
return this.Libelle;
}
}
}