Exemplo n.º 1
0
        public async void Save()
        {
            ShowBusyIndicator(true, "Идет сохранение в БД");
            await Task.Delay(500);

            //обновить изменения сушествующих записей
            _unitOfWork.RailwayStationRepository.Update(RailwayStation);


            //изменения в количестве элементов
            switch (CurrentOption)
            {
            case Options.Station:
                //ДОБАВЛЕННЫЕ
                var addedStations    = Stations.Except(RailwayStation.Stations).ToList();
                var errorNameStation = addedStations.Where(s => string.IsNullOrEmpty(s.Name)).ToList();
                if (errorNameStation.Any())
                {
                    MessageBox.Show("В добавленных станциях не указанно название станции", "ОШИБКА СОХРАНЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error);
                    ShowBusyIndicator(false);
                    return;
                }
                var errorEcpStation = addedStations.Where(s => s.EcpCode < 1).ToList();
                if (errorEcpStation.Any())
                {
                    MessageBox.Show("В добавленных станциях ECP код меньше 1", "ОШИБКА СОХРАНЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error);
                    ShowBusyIndicator(false);
                    return;
                }
                foreach (var addStation in addedStations)
                {
                    _unitOfWork.StationRepository.Insert(addStation);
                }

                //УДАЛЕННЫЕ
                var removedStations = RailwayStation.Stations.Except(Stations).ToList();
                foreach (var removedStation in removedStations)
                {
                    //TODO: испроавить EXCEPTION удаления станции
                    _unitOfWork.StationRepository.Remove(removedStation);
                }
                break;



            case Options.OperativeSchedule:
                //ДОБАВЛЕННЫЕ
                var addedOperShs         = OperativeSchedules.Except(RailwayStation.OperativeSchedules).ToList();
                var errorNumberOfTrainOp = addedOperShs.Where(op => string.IsNullOrEmpty(op.NumberOfTrain) || op.NumberOfTrain.Length > 10).ToList();
                if (errorNumberOfTrainOp.Any())
                {
                    MessageBox.Show("В добавленных строках оперативного расписания не верно указанн номер поезда", "ОШИБКА СОХРАНЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error);
                    ShowBusyIndicator(false);
                    return;
                }
                var errorRouteNameOp = addedOperShs.Where(op => string.IsNullOrEmpty(op.RouteName) || op.RouteName.Length > 100).ToList();
                if (errorRouteNameOp.Any())
                {
                    MessageBox.Show("В добавленных строках оперативного расписания не верно указанн маршрут", "ОШИБКА СОХРАНЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error);
                    ShowBusyIndicator(false);
                    return;
                }
                foreach (var addedOperSh in addedOperShs)
                {
                    RailwayStation.OperativeSchedules.Add(addedOperSh);
                }

                //УДАЛЕННЫЕ
                var removedOperShs = RailwayStation.OperativeSchedules.Except(OperativeSchedules).ToList();
                foreach (var removedOperSh in removedOperShs)
                {
                    _unitOfWork.OperativeScheduleRepository.Remove(removedOperSh);
                }
                _unitOfWork.RailwayStationRepository.Update(RailwayStation);
                break;



            case Options.RegulatorySchedule:
                //ДОБАВЛЕННЫЕ
                var addedRegShs           = RegulatorySchedules.Except(RailwayStation.RegulatorySchedules).ToList();
                var errorNumberOfTrainReg = addedRegShs.Where(op => string.IsNullOrEmpty(op.NumberOfTrain) || op.NumberOfTrain.Length > 10).ToList();
                if (errorNumberOfTrainReg.Any())
                {
                    MessageBox.Show("В добавленных строках регулярного расписания не верно указанн номер поезда", "ОШИБКА СОХРАНЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error);
                    ShowBusyIndicator(false);
                    return;
                }
                var errorRouteNameReg = addedRegShs.Where(op => string.IsNullOrEmpty(op.RouteName) || op.RouteName.Length > 100).ToList();
                if (errorRouteNameReg.Any())
                {
                    MessageBox.Show("В добавленных строках регулярного расписания не верно указанн маршрут", "ОШИБКА СОХРАНЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error);
                    ShowBusyIndicator(false);
                    return;
                }
                foreach (var addedRegSh in addedRegShs)
                {
                    RailwayStation.RegulatorySchedules.Add(addedRegSh);
                }

                //УДАЛЕННЫЕ
                var removedRegShs = RailwayStation.RegulatorySchedules.Except(RegulatorySchedules).ToList();
                foreach (var removedRegSh in removedRegShs)
                {
                    _unitOfWork.RegulatoryScheduleRepository.Remove(removedRegSh);
                }
                _unitOfWork.RailwayStationRepository.Update(RailwayStation);
                break;
            }



            //СОХРАНИМ ИЗМЕНЕНИЯ В БД одним запросом
            await _unitOfWork.SaveAsync();

            ShowBusyIndicator(false);
        }