CineBook Projekt hinzugefügt
This commit is contained in:
158
Views/ScreeningsView.xaml.cs
Normal file
158
Views/ScreeningsView.xaml.cs
Normal file
@@ -0,0 +1,158 @@
|
||||
using CineBook.Data;
|
||||
using CineBook.Helpers;
|
||||
using CineBook.Models;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace CineBook.Views;
|
||||
|
||||
public partial class ScreeningsView : UserControl
|
||||
{
|
||||
private readonly Repository _repo;
|
||||
private Screening? _selected;
|
||||
|
||||
public ScreeningsView(Repository repo)
|
||||
{
|
||||
InitializeComponent();
|
||||
_repo = repo;
|
||||
if (!Session.IsAdmin)
|
||||
{
|
||||
BtnAdd.Visibility = Visibility.Collapsed;
|
||||
BtnEdit.Visibility = Visibility.Collapsed;
|
||||
BtnDelete.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
LoadMovieFilter();
|
||||
LoadScreenings();
|
||||
}
|
||||
|
||||
private void LoadMovieFilter()
|
||||
{
|
||||
try
|
||||
{
|
||||
var movies = _repo.GetMovies(onlyActive: true);
|
||||
MovieFilter.Items.Clear();
|
||||
MovieFilter.Items.Add(new ComboBoxItem { Content = "— Alle Filme —", Tag = 0, Foreground = System.Windows.Media.Brushes.Gray, FontFamily = new System.Windows.Media.FontFamily("Courier New") });
|
||||
foreach (var m in movies)
|
||||
MovieFilter.Items.Add(new ComboBoxItem { Content = m.Title, Tag = m.MovieID, Foreground = System.Windows.Media.Brushes.Gold, FontFamily = new System.Windows.Media.FontFamily("Courier New") });
|
||||
MovieFilter.SelectedIndex = 0;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
private void LoadScreenings()
|
||||
{
|
||||
try
|
||||
{
|
||||
var list = _repo.GetScreenings();
|
||||
ScreeningsGrid.ItemsSource = list;
|
||||
StatusText.Text = $"● {list.Count} Vorführungen geladen.";
|
||||
}
|
||||
catch (System.Exception ex) { StatusText.Text = "⚠ Fehler: " + ex.Message; }
|
||||
}
|
||||
|
||||
private void FilterChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (MovieFilter.SelectedItem is ComboBoxItem item && item.Tag is int id && id > 0)
|
||||
{
|
||||
try { ScreeningsGrid.ItemsSource = _repo.GetScreeningsByMovie(id); }
|
||||
catch (System.Exception ex) { StatusText.Text = "⚠ " + ex.Message; }
|
||||
}
|
||||
else LoadScreenings();
|
||||
}
|
||||
|
||||
private void GridSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
_selected = ScreeningsGrid.SelectedItem as Screening;
|
||||
BtnDelete.IsEnabled = _selected != null && Session.IsAdmin;
|
||||
BtnEdit.IsEnabled = _selected != null && Session.IsAdmin;
|
||||
BtnBookSeat.IsEnabled = _selected != null && _selected.AvailableSeats > 0;
|
||||
}
|
||||
|
||||
private void LoadAllClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
MovieFilter.SelectedIndex = 0;
|
||||
LoadScreenings();
|
||||
}
|
||||
|
||||
private void AddClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var movies = _repo.GetMovies(onlyActive: true);
|
||||
var dlg = new ScreeningEditDialog(movies);
|
||||
if (dlg.ShowDialog() == true && dlg.Result != null)
|
||||
{
|
||||
try { _repo.CreateScreening(dlg.Result); LoadScreenings(); LoadMovieFilter(); }
|
||||
catch (System.Exception ex) { MessageBox.Show("DB-Fehler: " + ex.Message); }
|
||||
}
|
||||
}
|
||||
|
||||
private void EditClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selected == null) return;
|
||||
var movies = _repo.GetMovies(onlyActive: true);
|
||||
var dlg = new ScreeningEditDialog(movies, _selected);
|
||||
if (dlg.ShowDialog() == true && dlg.Result != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_repo.UpdateScreening(dlg.Result))
|
||||
LoadScreenings();
|
||||
else
|
||||
MessageBox.Show("Fehler beim Speichern.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
MessageBox.Show("DB-Fehler: " + ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selected == null) return;
|
||||
var r = MessageBox.Show($"Vorführung löschen?", "Bestätigung", MessageBoxButton.YesNo, MessageBoxImage.Warning);
|
||||
if (r == MessageBoxResult.Yes)
|
||||
{
|
||||
try { _repo.DeleteScreening(_selected.ScreeningID); LoadScreenings(); }
|
||||
catch (System.Exception ex) { MessageBox.Show("DB-Fehler: " + ex.Message); }
|
||||
}
|
||||
}
|
||||
|
||||
private void BookSeatClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selected == null) return;
|
||||
var seats = _repo.GetSeatsByScreening(_selected.ScreeningID);
|
||||
if (seats.Count == 0)
|
||||
{
|
||||
if (Session.IsAdmin)
|
||||
{
|
||||
var r = MessageBox.Show(
|
||||
"Für diese Vorführung existieren noch keine Sitzplätze.\nSoll jetzt automatisch ein Sitzplan erstellt werden?",
|
||||
"Sitzplan fehlt",
|
||||
MessageBoxButton.YesNo,
|
||||
MessageBoxImage.Question);
|
||||
if (r == MessageBoxResult.Yes)
|
||||
{
|
||||
if (_repo.EnsureSeatsForScreening(_selected.ScreeningID, _selected.TotalSeats))
|
||||
seats = _repo.GetSeatsByScreening(_selected.ScreeningID);
|
||||
}
|
||||
}
|
||||
if (seats.Count == 0)
|
||||
{
|
||||
MessageBox.Show("Keine Sitzplatzdaten verfügbar.", "Hinweis");
|
||||
return;
|
||||
}
|
||||
}
|
||||
var dlg = new SeatSelectionDialog(_selected, seats, Session.CurrentUser!);
|
||||
if (dlg.ShowDialog() == true)
|
||||
{
|
||||
try
|
||||
{
|
||||
_repo.CreateBooking(Session.CurrentUser!.UserID, dlg.SelectedScreeningId, dlg.SelectedSeatId, dlg.TotalPrice);
|
||||
LoadScreenings();
|
||||
MessageBox.Show($"✓ Buchung erfolgreich!\nSitz: {dlg.SeatDisplay}\nPreis: {dlg.TotalPrice:F2} €",
|
||||
"Buchung bestätigt", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
catch (System.Exception ex) { MessageBox.Show("DB-Fehler: " + ex.Message); }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user