/// <summary> /// Можно менять только имя рейса /// </summary> public async Task <DictionaryCrudResponse> TripWithDaysCrud(DictionaryCrudRequest input) { var data = input.TripWithDays; if (data == null && input.IdToDelete == null) { throw new ValidationException(Error.ParserError); } var sqlR = new TripsRepository(_logger); if (input?.IdToDelete != null) { await sqlR.Delete((int)input.IdToDelete); return(new DictionaryCrudResponse { IsDeleted = true, TripWithDays = data }); } var all = await sqlR.GetAll(); if (data?.Id == null && all.Any(x => x.Name.Equals(input.TripWithDays.Name))) { throw new ValidationException(Error.AlreadyAddWithThisName); } if (data?.Id == 0) { var item = await sqlR.Add(data); return(new DictionaryCrudResponse { IsAdd = true, TripWithDays = item }); } else { var item = await sqlR.Update(data); return(new DictionaryCrudResponse { IsUpdated = true, TripWithDays = item }); } }
/// <summary> /// Добавить хуету /// </summary> public async Task <TripOnRouteWithStationsDto> AddTripOnRoute(TripOnRouteWithStationsDto input) { if (input.TripWithDateTimeStations.Id != 0) { if (!await CompareDaysFromTurnover(input)) { throw new ValidationException("Не совпадают дни графика оборота и рейса"); } } using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled)) { //var sqlRTripOnRoute = new TripsOnRouteRepository(_logger); var sqlRTrip = new TripsRepository(_logger); var sqlRStationOnTrip = new StantionOnTripsRepository(_logger); var sqlRDaysOfTrip = new DayOfTripsRepoisitory(_logger); var all = await sqlRTrip.GetAll(); if (input.TripWithDateTimeStations.Id == 0 && all.Any(x => x.Name.Equals(input.TripWithDateTimeStations.Name))) { throw new ValidationException(Error.AlreadyAddWithThisName); } var result = new TripOnRouteWithStationsDto { Days = new List <DayOfWeek>(), TripWithDateTimeStations = new TripWithDateTimeStations { StantionOnTrips = new List <StantionOnTrip>(), StantionOnTripsWithStringTime = new List <StationOnTripWithStringDateTime>() } }; if (input.TripWithDateTimeStations.Id == 0) { var newTrip = await sqlRTrip.Add(_mapper.Map <TripWithDateTimeStations, Trip>(input.TripWithDateTimeStations)); result.TripWithDateTimeStations.Id = newTrip.Id; result.TripWithDateTimeStations.Name = newTrip.Name; result.TripWithDateTimeStations.Description = newTrip.Description; result.TripId = newTrip.Id; } foreach (var day in input.Days) { var addedDay = await sqlRDaysOfTrip.Add(new DayOfTrip { TripId = result.TripId, Day = day }); result.Days.Add(addedDay.Day); } foreach (var item in input.TripWithDateTimeStations.StantionOnTripsWithStringTime) { var toAdd = _mapper.Map <StationOnTripWithStringDateTime, StantionOnTrip>(item); if (toAdd.InTime > toAdd.OutTime) { throw new ValidationException(Error.IncorrectTimeRange); } toAdd.TripId = result.TripWithDateTimeStations.Id; var stationOnTrip = await sqlRStationOnTrip.Add(toAdd); result.TripWithDateTimeStations.StantionOnTripsWithStringTime.Add( _mapper.Map <StantionOnTrip, StationOnTripWithStringDateTime>(stationOnTrip)); } //await CheckTimelineUsing(input.RouteId, input.TripId); transaction.Complete(); return(result); } }