TripInfoPage.xaml.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System.Windows;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Controls;
  5. using System;
  6. namespace RaspisKusach.Pages
  7. {
  8. public partial class TripInfoPage : Page
  9. {
  10. Trips trip;
  11. public TripInfoPage(Trips _trip)
  12. {
  13. InitializeComponent();
  14. trip = _trip;
  15. Direction.Content = Functions.GetAllStations(trip.Routes);
  16. TrainName.Content = trip.Trains.Name;
  17. TrainCategory.Content = trip.Trains.Category;
  18. CarriageListBox.Items.Clear();
  19. UpdateCarriagesList();
  20. }
  21. private void UpdateCarriagesList()
  22. {
  23. List<CarriageClass> routeList = new List<CarriageClass>();
  24. int carrNum = 2;
  25. foreach (Carriages item in cnt.db.Carriages.Where(item => item.IdTrain == trip.IdTrain))
  26. {
  27. routeList.Add(new CarriageClass()
  28. {
  29. Carriage = item,
  30. CarriageNum = carrNum,
  31. AvailableSeats = Functions.GetCountAvailableSeats(item)
  32. });
  33. carrNum++;
  34. }
  35. CarriageListBox.ItemsSource = routeList;
  36. }
  37. private void BuyTicketButton_Click(object sender, RoutedEventArgs e)
  38. {
  39. Button btn = (Button)sender;
  40. if (btn.DataContext is CarriageClass)
  41. {
  42. Carriages carr = ((CarriageClass)btn.DataContext).Carriage;
  43. if (Session.User == null)
  44. new ErrorWindow("Для покупки необходимо войти в профиль.").ShowDialog();
  45. else if (Functions.GetCountAvailableSeats(carr) <= 0)
  46. new ErrorWindow("Свободных мест не осталось.").ShowDialog();
  47. else
  48. {
  49. try
  50. {
  51. Tickets newTicket = new Tickets()
  52. {
  53. IdTicket = cnt.db.Tickets.Select(p => p.IdTicket).DefaultIfEmpty(0).Max() + 1,
  54. IdUser = Session.User.IdUser,
  55. IdTrip = trip.IdTrip,
  56. IdCarriage = carr.IdCarriage,
  57. PlaceNumber = Functions.GetAvailableSeat(carr),
  58. BuyDate = DateTime.Now,
  59. };
  60. cnt.db.Tickets.Add(newTicket);
  61. cnt.db.SaveChanges();
  62. new ErrorWindow("Успешная покупка").ShowDialog();
  63. }
  64. catch (Exception ex)
  65. {
  66. new ErrorWindow($"Ошибка: {ex}").ShowDialog();
  67. }
  68. }
  69. }
  70. }
  71. public class CarriageClass
  72. {
  73. public Carriages Carriage { get; set; }
  74. public int CarriageNum { get; set; }
  75. public int AvailableSeats { get; set; }
  76. }
  77. }
  78. }