public bool DeleteCity(City city)
        {
            try
            {
                if (!this.context.CitySet.Contains(city))
                {
                    throw new ArgumentException(string.Format("The database does not contain {0} city", city));
                }

                this.context.CitySet.Remove(city);
                this.context.SaveChanges();
                return true;
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
            catch (ArgumentException e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
        }
        public ScheduleAddWindow(TicketDB dbContext, City startCity, City endCity, Train train)
        {
            InitializeComponent();

            this.dbContext = dbContext;
            this.startCity = startCity;
            this.endCity = endCity;
            this.train = train;
        }
 public AdminWindow(TicketDB dbContext, User user)
 {
     InitializeComponent();
     this.dbContext = dbContext;
     this.user = user;
     startCityForSchedule = null;
     endCityForSchedule = null;
     trainForSchedule = null;
     beginEditCity = null;
     beginEditTrain = null;
     beginEditSchedule = null;
 }
 static void Main ( string[] args )
 {
     using(var db = new TicketSystemModel())
     {
         //db.Database.Create();
         Console.WriteLine("Enter a name of a city:");
         string name = Console.ReadLine();
         City city = new City() { CityID = 1 , Name = name };
         db.Cities.Add(city);
         db.SaveChanges();
     }
 }
 public bool AddCity(City city)
 {
     try
     {
         this.context.CitySet.Add(city);
         this.context.SaveChanges();
         return true;
     }
     catch (SqlException e)
     {
         Console.WriteLine(e.Message);
         return false;
     }
 }
 private void cityDataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
 {
     if (!e.Row.IsEditing)
     {
         var city = e.Row.Item as City;
         if (city != null)
         {
             beginEditCity = new City();
             beginEditCity.CityID = city.CityID;
             beginEditCity.Name = city.Name;
         }
     }
 }
        private void startCityButton_Click(object sender, RoutedEventArgs e)
        {
            var selectedItem = cityDataGrid.SelectedItem;
            if (selectedItem != null)
            {
                var selectedCity = selectedItem as City;
                if (selectedCity != null)
                {
                    int endCityId = endCityForSchedule?.CityID ?? -1;
                    if (selectedCity.CityID != endCityId)
                    {
                        startCityForSchedule = selectedCity;
                        chosenStartCityLabel.Content = $"Start city: {selectedCity.CityID} - {selectedCity.Name}";
                        startCityInScheduleLabel.Content = $"{selectedCity.CityID} - {selectedCity.Name}";
                        return;
                    }
                    else
                    {
                        MessageBox.Show("Start and end city cannot be the same!");
                        return;
                    }
                }
            }

            MessageBox.Show("Plese select a city from the grid!");
        }
        private void cityDataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
        {
            var city = e.Row.Item as City;
            if (city != null)
            {
                if (city.CityID != 0)
                {
                    try
                    {
                        if (city.Name.Length < 1)
                        {
                            MessageBox.Show("City should have a name! Nothing saved to database!");
                            city.Name = beginEditCity.Name;
                            e.Row.Item = null;
                            e.Row.Item = city;
                        }
                        else
                            dbContext.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"Could not update database! Error message: {ex.Message}");
                    }
                }
                else
                {
                    try
                    {
                        if (city.Name.Length < 1)
                        {
                            MessageBox.Show("City should have a name! Nothing saved to database!");
                            var currentItemsSource = trainDataGrid.ItemsSource;
                            trainDataGrid.ItemsSource = null;
                            trainDataGrid.Items.Remove(e.Row);
                            trainDataGrid.ItemsSource = currentItemsSource;
                        }
                        else
                        {
                            dbContext.Cities.Add(city);
                            dbContext.SaveChanges();
                            e.Row.Item = null;
                            e.Row.Item = city;
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"Could not update database! Error message: {ex.Message}");
                    }
                }
            }

            beginEditCity = null;
        }
        private void cityDataGrid_PreviewCanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            var cityToDelete = cityDataGrid.SelectedItem as City;

            if (e.Command == DataGrid.DeleteCommand)
            {
                if (MessageBox.Show(string.Format("Would you like to delete {0}?",
                                                  cityToDelete.Name),
                                                  "Confirm Delete",
                                                  MessageBoxButton.YesNo,
                                                  MessageBoxImage.Question,
                                                  MessageBoxResult.No) != MessageBoxResult.Yes)
                {
                    e.Handled = true;
                }
                else
                {
                    try
                    {
                        var schedulesToDelete = from schedule in dbContext.Schedules
                                                where schedule.StartCityID == cityToDelete.CityID
                                                || schedule.EndCityID == cityToDelete.CityID
                                                select schedule;

                        foreach (var schedule in schedulesToDelete)
                        {

                            var ticketsToDelete = from ticket in dbContext.Tickets
                                                  where ticket.ScheduleID == schedule.ScheduleID
                                                  select ticket;

                            dbContext.Tickets.RemoveRange(ticketsToDelete);

                            var seatsToDelete = from seat in schedule.Train.Seats
                                                where seat.ScheduleID == schedule.ScheduleID
                                                select seat;

                            dbContext.Seats.RemoveRange(seatsToDelete);

                            dbContext.Schedules.Remove(schedule);
                        }

                        dbContext.Cities.Remove(cityToDelete);

                        dbContext.SaveChanges();

                        if(cityToDelete.CityID == (startCityForSchedule?.CityID ?? -1))
                        {
                            startCityForSchedule = null;
                            chosenStartCityLabel.Content = "Start city: None";
                            startCityInScheduleLabel.Content = "None";
                        }
                        else if (cityToDelete.CityID == (endCityForSchedule?.CityID ?? -1))
                        {
                            endCityForSchedule = null;
                            chosenEndCityLabel.Content = "End city: None";
                            endCityInScheduleLabel.Content = "None";
                        }

                        UpdateDataGrids();
                    }
                    catch (Exception ex)
                    {
                        e.Handled = true;
                        MessageBox.Show($"Could not delete item in database! Error message: {ex.Message}");
                    }
                }
            }
        }
 // TODO : edit a trip
 public IEnumerable<Schedule> AllTripsFrom(City a, City b)
 {
     return this.context.ScheduleSet.Where(x => x.StartCity.ToString().Equals(a.ToString()) && x.EndCity.ToString().Equals(b.ToString()));
 }
 public ComboBoxCustomItem(City city)
 {
     CustomItem = city;
     Content = city.Name;
 }
        private static void CreateCity()
        {
            using (var db = new TicketDB())
            {
                Console.WriteLine("Creating city!");
                Console.Write("Name: ");
                var name = Console.ReadLine().Trim();

                try
                {
                    City city = new City
                    {
                        Name = name
                    };

                    db.Cities.Add(city);
                    db.SaveChanges();
                }
                catch (OptimisticConcurrencyException ex)
                {
                    Console.WriteLine("Cannot insert city in database! Operation exited with message:");
                    Console.WriteLine(ex.Message);
                    return;
                }

                Console.WriteLine("City created successfully!");
            }
        }