diff --git a/HegreHotel.csproj b/HegreHotel.csproj
index 8908392..cf89031 100644
--- a/HegreHotel.csproj
+++ b/HegreHotel.csproj
@@ -66,8 +66,4 @@
-
-
-
-
diff --git a/Views/Reservation/AjouterReservationPage.xaml b/Views/Reservation/AjouterReservationPage.xaml
index 74b2c81..ee647a5 100644
--- a/Views/Reservation/AjouterReservationPage.xaml
+++ b/Views/Reservation/AjouterReservationPage.xaml
@@ -5,13 +5,28 @@
x:Class="HegreHotel.Views.Reservation.AjouterReservationPage"
Title="Ajouter une Réservation">
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Views/Reservation/AjouterReservationPage.xaml.cs b/Views/Reservation/AjouterReservationPage.xaml.cs
index 9712f28..74a7458 100644
--- a/Views/Reservation/AjouterReservationPage.xaml.cs
+++ b/Views/Reservation/AjouterReservationPage.xaml.cs
@@ -10,28 +10,55 @@ namespace HegreHotel.Views.Reservation
public partial class AjouterReservationPage : ContentPage
{
private List _clients;
- private List _chambres;
+ private List _chambresDispo;
+ private bool _datesValidees = false;
public AjouterReservationPage()
{
InitializeComponent();
- LoadClientsAndChambres();
}
- private async void LoadClientsAndChambres()
+ private async void OnVerifierDisponibiliteClicked(object sender, EventArgs e)
{
+ if (DatePickerDebut.Date > DatePickerFin.Date)
+ {
+ await DisplayAlert("Erreur", "La date de début doit être avant la date de fin.", "OK");
+ return;
+ }
+
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "HegreHotel.db3");
var db = SingletonConnection.GetInstance(dbPath);
- _clients = await db.Table().ToListAsync();
- _chambres = await db.Table().ToListAsync();
+ var reservations = await db.Table().ToListAsync();
+ var chambresReservees = reservations
+ .Where(r => !(DatePickerFin.Date <= r.DateDebut || DatePickerDebut.Date >= r.DateFin))
+ .Select(r => r.ChambreId)
+ .ToList();
+ _chambresDispo = await db.Table().Where(c => !chambresReservees.Contains(c.Id)).ToListAsync();
+
+ if (_chambresDispo.Count == 0)
+ {
+ await DisplayAlert("Aucune chambre disponible", "Aucune chambre n'est disponible pour cette période.", "OK");
+ return;
+ }
+
+ _clients = await db.Table().ToListAsync();
PickerClient.ItemsSource = _clients.Select(c => $"{c.Nom} {c.Prenom}").ToList();
- PickerChambre.ItemsSource = _chambres.Select(ch => ch.Nom).ToList();
+ PickerChambre.ItemsSource = _chambresDispo.Select(ch => ch.Nom).ToList();
+
+ SelectionSection.IsVisible = true;
+ _datesValidees = true;
}
private async void OnEnregistrerClicked(object sender, EventArgs e)
{
+ if (!_datesValidees)
+ {
+ await DisplayAlert("Erreur", "Veuillez d'abord vérifier la disponibilité des chambres.", "OK");
+ return;
+ }
+
if (PickerClient.SelectedIndex == -1 || PickerChambre.SelectedIndex == -1)
{
await DisplayAlert("Erreur", "Veuillez sélectionner un client et une chambre", "OK");
@@ -41,7 +68,7 @@ namespace HegreHotel.Views.Reservation
var reservation = new Models.Reservation
{
ClientId = _clients[PickerClient.SelectedIndex].Id,
- ChambreId = _chambres[PickerChambre.SelectedIndex].Id,
+ ChambreId = _chambresDispo[PickerChambre.SelectedIndex].Id,
NbPersonnes = int.TryParse(EntryNbPersonne.Text, out int nb) ? nb : 0,
DateDebut = DatePickerDebut.Date,
DateFin = DatePickerFin.Date,
@@ -51,6 +78,8 @@ namespace HegreHotel.Views.Reservation
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "HegreHotel.db3");
var db = SingletonConnection.GetInstance(dbPath);
await db.InsertAsync(reservation);
+
+ await DisplayAlert("Succès", "Réservation ajoutée avec succès.", "OK");
await Navigation.PopAsync();
}
}