Les Reservations ne peuvent plus se superposer
This commit is contained in:
parent
3a149b8b5e
commit
1cc7257f5f
@ -66,8 +66,4 @@
|
||||
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Services\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -5,13 +5,28 @@
|
||||
x:Class="HegreHotel.Views.Reservation.AjouterReservationPage"
|
||||
Title="Ajouter une Réservation">
|
||||
<StackLayout Padding="10">
|
||||
<Picker x:Name="PickerClient" Title="Sélectionner un client"/>
|
||||
<Picker x:Name="PickerChambre" Title="Sélectionner une chambre"/>
|
||||
|
||||
<Entry x:Name="EntryNbPersonne" Placeholder="Nombre d'invités" Keyboard="Numeric"/>
|
||||
<Label Text="Sélectionnez la période" FontAttributes="Bold"/>
|
||||
<DatePicker x:Name="DatePickerDebut" />
|
||||
<DatePicker x:Name="DatePickerFin" />
|
||||
<Entry x:Name="EntryDemandeSpecifique" Placeholder="Demandes spécifiques"/>
|
||||
<Button Text="Enregistrer" Clicked="OnEnregistrerClicked" Margin="0,20"/>
|
||||
|
||||
<Button Text="Vérifier Disponibilité"
|
||||
Clicked="OnVerifierDisponibiliteClicked"
|
||||
Margin="10,0"/>
|
||||
|
||||
<StackLayout x:Name="SelectionSection" IsVisible="False">
|
||||
|
||||
<Label Text="Sélectionnez un client" FontAttributes="Bold"/>
|
||||
<Picker x:Name="PickerClient" Title="Sélectionner un client"/>
|
||||
|
||||
<Label Text="Sélectionnez une chambre disponible" FontAttributes="Bold"/>
|
||||
<Picker x:Name="PickerChambre" Title="Sélectionner une chambre"/>
|
||||
|
||||
<Entry x:Name="EntryNbPersonne" Placeholder="Nombre de personnes" Keyboard="Numeric"/>
|
||||
<Entry x:Name="EntryDemandeSpecifique" Placeholder="Demandes spécifiques"/>
|
||||
|
||||
<Button Text="Enregistrer" Clicked="OnEnregistrerClicked" Margin="0,20"/>
|
||||
</StackLayout>
|
||||
|
||||
</StackLayout>
|
||||
</ContentPage>
|
||||
|
||||
|
@ -10,28 +10,55 @@ namespace HegreHotel.Views.Reservation
|
||||
public partial class AjouterReservationPage : ContentPage
|
||||
{
|
||||
private List<Models.Client> _clients;
|
||||
private List<Models.Chambre> _chambres;
|
||||
private List<Models.Chambre> _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<Models.Client>().ToListAsync();
|
||||
_chambres = await db.Table<Models.Chambre>().ToListAsync();
|
||||
var reservations = await db.Table<Models.Reservation>().ToListAsync();
|
||||
var chambresReservees = reservations
|
||||
.Where(r => !(DatePickerFin.Date <= r.DateDebut || DatePickerDebut.Date >= r.DateFin))
|
||||
.Select(r => r.ChambreId)
|
||||
.ToList();
|
||||
|
||||
_chambresDispo = await db.Table<Models.Chambre>().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<Models.Client>().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();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user