using projet.modele;
using projet.Controller;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace projet.View
{
public partial class GestionAbsence : Form
{
private Personnel personne;
private GestionAbsenceController controller;
///
/// Méthode d'initialisation du formulaire de gestion des absences pour un personnel spécifique.
///
/// Personne concernée
public GestionAbsence(Personnel personne)
{
InitializeComponent();
this.personne = personne;
Init();
labelTitle.Text = $"Gestion des absences de {personne.Nom} {personne.Prenom}";
RemplirComboBoxMotif();
RemplirComboBoxAbsence();
}
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
RemplirComboBoxAbsence();
}
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 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 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();
}
private void btnModifAbsence_Click(object sender, EventArgs e)
{
if(dataGridViewAbsences.SelectedRows == null) {
MessageBox.Show("Veuillez sélectionner une absence à modifier.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else
{
this.Hide();
this.Close();
ModifierAbsence modifierAbsence = new ModifierAbsence(dataGridViewAbsences.SelectedRows[0].DataBoundItem as Absence, personne);
modifierAbsence.ShowDialog();
}
}
private void buttonBack_Click_1(object sender, EventArgs e)
{
buttonBack_Click(sender, e);
}
}
}