Пример #1
0
        // Verified
        public void Delete()
        {
            if (BataDase.Properties.Settings.Default.IsAdmin)
            {
                if (TableV.Current_DataGrid.SelectedItems.Count < 1)
                {
                    MessageBox.Show("Выберите элементы для удаления!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                // Пока есть элементы, которые нужно удалить, то крутится цикл
                while (TableV.Current_DataGrid.SelectedItems.Count > 0)
                {
                    index = TableV.Current_DataGrid.SelectedIndex;

                    SchedulesM deleteEntity = SourceList[index];

                    var tickets = (from o in dbContext.TicketsMs
                                   where o._schedule_id == deleteEntity._schedule_id
                                   select o);

                    if (tickets != null)
                    {
                        dbContext.TicketsMs.RemoveRange(tickets);
                    }

                    dbContext.SchedulesMs.Local.Remove(deleteEntity);

                    // Удаляем НЕконтекстного юзера из SourceList
                    SourceList.Remove(deleteEntity);
                }

                // Сохраняем контекст БД
                dbContext.SaveChanges();

                TableV.Current_DataGrid.ItemsSource = SourceList;
                TableV.Current_DataGrid.Items.Refresh();
            }
            else
            {
                if (TableV.Current_DataGrid.SelectedItems.Count < 1)
                {
                    MessageBox.Show("Выберите рейс, на который хотите купить билет!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                else if (TableV.Current_DataGrid.SelectedItems.Count > 1)
                {
                    MessageBox.Show("Можно купить не более ОДНОГО билета за раз!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                // Покупка билетов тут
                AddEdit(false);
            }
        }
Пример #2
0
        // Verified
        public void ExecuteAddEdit(object sender, RoutedEventArgs e)
        {
            if (trainID.Items.Count < 1)
            {
                MessageBox.Show("Поезда отсутствуют в базе данных! Сначала добавьте ХОТЯ БЫ ОДИН поезд!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            if (routeName.Items.Count < 1)
            {
                MessageBox.Show("Маршруты отсутствуют в базе данных! Сначала добавьте ХОТЯ БЫ ОДИН маршрут!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if (departureDate.Text == null || departureDate.Text == "")
            {
                MessageBox.Show("Укажите дату и время отправления!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            DateTime dateTimeDeparture;

            if (!DateTime.TryParseExact(departureDate.Text, "dd.MM.yyyy HH:mm", App.Language, System.Globalization.DateTimeStyles.None, out dateTimeDeparture))
            {
                MessageBox.Show("Дата указана некорректно!\nУкажите дату и время в виде: \"dd.MM.yyyy HH:mm\"", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if (arrivalDate.Text == null || arrivalDate.Text == "")
            {
                MessageBox.Show("Укажите дату и время прибытия!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            DateTime dateTimeArrival;

            if (!DateTime.TryParseExact(arrivalDate.Text, "dd.MM.yyyy HH:mm", App.Language, System.Globalization.DateTimeStyles.None, out dateTimeArrival))
            {
                MessageBox.Show("Дата указана некорректно!\nУкажите дату и время в виде: \"dd.MM.yyyy HH:mm\"", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            if (price.Text == null || price.Text == "")
            {
                MessageBox.Show("Укажите цену на данный рейс!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            double result;

            if (!double.TryParse(price.Text, out result))
            {
                MessageBox.Show("Некорректная цена!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            var oneActive = (from o in dbContext.SchedulesMs
                             where (o._train_id == (int)trainID.SelectedItem && o._status == 0)
                             select o).FirstOrDefault();

            if (oneActive != null && (isAdd || oneActive._schedule_id != SourceList[index]._schedule_id))
            {
                MessageBox.Show("Данный поезд уже двигается по другому маршруту! Пожалуйста, выберите другой поезд!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            SchedulesM temp = new SchedulesM();

            temp._train_id = Convert.ToInt32(trainID.SelectedItem);

            temp._route_id = (from o in dbContext.RoutesMs
                              where o._route_name == routeName.SelectedItem.ToString()
                              select o._route_id).FirstOrDefault();

            dateTimeDeparture        = DateTime.ParseExact(departureDate.Text, "dd.MM.yyyy HH:mm", null);
            temp._departure_datetime = dateTimeDeparture.Subtract(DateTime.MinValue).TotalMilliseconds;

            dateTimeArrival        = DateTime.ParseExact(arrivalDate.Text, "dd.MM.yyyy HH:mm", null);
            temp._arrival_datetime = dateTimeArrival.Subtract(DateTime.MinValue).TotalMilliseconds;

            temp._status = status.SelectedIndex;
            temp._price  = double.Parse(price.Text);

            // Сохранение нового юзера в БД
            if (isAdd)
            {
                // Добавляем объект в БД
                dbContext.SchedulesMs.Local.Add(temp);

                // Очищаем поля
                trainID.SelectedIndex   = 0;
                routeName.SelectedIndex = 0;
                status.SelectedIndex    = 0;
                departureDate.Text      = null;
                arrivalDate.Text        = null;
                price.Text = null;
            }
            else
            {
                // Получаем объект из БД по айди, который будем изменять
                int id    = SourceList[index]._schedule_id;
                var sched = dbContext.SchedulesMs.Local
                            .Single(o => o._schedule_id == id);

                // Изменяем, просто изменяя поля на поля объекта temp
                sched._train_id           = temp._train_id;
                sched._route_id           = temp._route_id;
                sched._departure_datetime = temp._departure_datetime;
                sched._arrival_datetime   = temp._arrival_datetime;
                sched._status             = temp._status;
                sched._price = temp._price;

                // Говорим контексту БД, что данный объект был изменен
                dbContext.Entry(sched).State = EntityState.Modified;
            }
            dbContext.SaveChanges();

            // Обновление списка
            SourceList = dbContext.SchedulesMs.Local.ToBindingList();

            TableV.Current_DataGrid.ItemsSource = SourceList;
            TableV.Current_DataGrid.Items.Refresh();
        }
Пример #3
0
        // Verified
        public void AddEdit(bool isAdd)
        {
            this.isAdd = isAdd;
            // Показываем диалоговое окно
            DialogV dialogV    = new DialogV();
            Grid    dialogGrid = dialogV.Dialog_Grid;

            Button button = dialogV.Button_Execute;

            // Если это добавление
            if (isAdd)
            {
                button.Content = App.Current.Resources["Text_Add"];
                index          = -1;

                trainID.SelectedIndex   = 0;
                routeName.SelectedIndex = 0;
                status.SelectedIndex    = 0;
            }
            else
            if (Settings.Default.IsAdmin == false) // Покупка
            {
                // если ничего не выбрано в датагриде то ошибка
                // если выбрано больше 1 элемента то тоже ошибка
                if (TableV.Current_DataGrid.SelectedItems.Count < 1)
                {
                    MessageBox.Show("Выберите элемент для покупки!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                else if (TableV.Current_DataGrid.SelectedItems.Count > 1)
                {
                    MessageBox.Show("Можно выбрать для изменения не более ОДНОГО элемента за раз!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                //индекс текущей выбранной строки в DataGrid
                //кастыль, но куда без кастылей?
                index = TableV.Current_DataGrid.SelectedIndex;

                //Если всё ок, вставляем данные для данного юзера в форму, который затем будем менять
                SchedulesM temp = SourceList[index];
                trainID.SelectedItem   = temp._train_id;
                trainID.IsReadOnly     = true;
                routeName.SelectedItem = temp.RoutesM._route_name;
                routeName.IsReadOnly   = true;
                DateTime startdate = DateTime.MinValue.AddMilliseconds(temp._departure_datetime);
                DateTime enddate   = DateTime.MinValue.AddMilliseconds(temp._arrival_datetime);
                departureDate.Text       = startdate.ToString("dd.MM.yyyy");
                departureDate.IsReadOnly = true;
                arrivalDate.Text         = enddate.ToString("dd.MM.yyyy");
                arrivalDate.IsReadOnly   = true;
                price.Text       = temp._price.ToString();
                price.IsReadOnly = true;

                button.Content = App.Current.Resources["Text_Buy"];
            }
            else
            {
                // если ничего не выбрано в датагриде то ошибка
                // если выбрано больше 1 элемента то тоже ошибка
                if (TableV.Current_DataGrid.SelectedItems.Count < 1)
                {
                    MessageBox.Show("Выберите элемент для изменения!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                else if (TableV.Current_DataGrid.SelectedItems.Count > 1)
                {
                    MessageBox.Show("Можно выбрать для изменения не более ОДНОГО элемента за раз!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                //индекс текущей выбранной строки в DataGrid
                //кастыль, но куда без кастылей?
                index = TableV.Current_DataGrid.SelectedIndex;

                //Если всё ок, вставляем данные для данного юзера в форму, который затем будем менять
                SchedulesM temp = SourceList[index];

                trainID.SelectedItem   = temp._train_id;
                routeName.SelectedItem = temp.RoutesM._route_name;

                DateTime startdate = DateTime.MinValue.AddMilliseconds(temp._departure_datetime);
                DateTime enddate   = DateTime.MinValue.AddMilliseconds(temp._arrival_datetime);

                departureDate.Text = startdate.ToString("dd.MM.yyyy HH:mm");
                arrivalDate.Text   = enddate.ToString("dd.MM.yyyy HH:mm");

                status.SelectedIndex = temp._status;

                price.Text = temp._price.ToString();

                button.Content = App.Current.Resources["Text_Edit"];
            }

            if (Settings.Default.IsAdmin == false)
            {
                button.Click += new RoutedEventHandler(ExecuteBuy);

                // Вешаем элементы в Grid
                dialogGrid.Children.Add(TrainID);
                dialogGrid.Children.Add(RouteName);
                dialogGrid.Children.Add(DepartureDate);
                dialogGrid.Children.Add(ArrivalDate);
                dialogGrid.Children.Add(Price);
                dialogGrid.Children.Add(Seatnum);
                dialogGrid.Children.Add(CarriageNum);

                dialogGrid.Children.Add(trainID);
                dialogGrid.Children.Add(routeName);
                dialogGrid.Children.Add(departureDate);
                dialogGrid.Children.Add(arrivalDate);
                dialogGrid.Children.Add(price);
                dialogGrid.Children.Add(seatnum);
                dialogGrid.Children.Add(carriageNum);

                // Заполняем нижний Button текстом и вешаем локальный обработчик события нажатия

                dialogV.ShowDialog();

                // Очищаем Grid
                dialogGrid.Children.Remove(TrainID);
                dialogGrid.Children.Remove(RouteName);
                dialogGrid.Children.Remove(DepartureDate);
                dialogGrid.Children.Remove(ArrivalDate);
                dialogGrid.Children.Remove(Price);
                dialogGrid.Children.Remove(Seatnum);
                dialogGrid.Children.Remove(CarriageNum);

                dialogGrid.Children.Remove(trainID);
                dialogGrid.Children.Remove(routeName);
                dialogGrid.Children.Remove(departureDate);
                dialogGrid.Children.Remove(arrivalDate);
                dialogGrid.Children.Remove(price);
                dialogGrid.Children.Remove(seatnum);
                dialogGrid.Children.Remove(carriageNum);

                routeName.SelectedIndex = 0;
                departureDate.Text      = null;
                arrivalDate.Text        = null;
                price.Text                = null;
                seatnum.SelectedIndex     = 0;
                carriageNum.SelectedIndex = 0;
            }
            else
            {
                button.Click += new RoutedEventHandler(ExecuteAddEdit);

                // Вешаем элементы в Grid
                dialogGrid.Children.Add(TrainID);
                dialogGrid.Children.Add(RouteName);
                dialogGrid.Children.Add(DepartureDate);
                dialogGrid.Children.Add(ArrivalDate);
                dialogGrid.Children.Add(Price);

                dialogGrid.Children.Add(trainID);
                dialogGrid.Children.Add(routeName);
                dialogGrid.Children.Add(departureDate);
                dialogGrid.Children.Add(arrivalDate);
                dialogGrid.Children.Add(price);

                // Заполняем нижний Button текстом и вешаем локальный обработчик события нажатия

                dialogV.ShowDialog();

                // Очищаем Grid
                dialogGrid.Children.Remove(TrainID);
                dialogGrid.Children.Remove(RouteName);
                dialogGrid.Children.Remove(DepartureDate);
                dialogGrid.Children.Remove(ArrivalDate);
                dialogGrid.Children.Remove(Price);

                dialogGrid.Children.Remove(trainID);
                dialogGrid.Children.Remove(routeName);
                dialogGrid.Children.Remove(departureDate);
                dialogGrid.Children.Remove(arrivalDate);
                dialogGrid.Children.Remove(price);

                routeName.SelectedIndex = 0;
                departureDate.Text      = null;
                arrivalDate.Text        = null;
                price.Text = null;
            }
        }