public ActionResult <AccommodationDTO> AddAccommodation(AccommodationDTO body) { AccommodationPortClient accPortClient = new AccommodationPortClient(); addAccommodationRequest accRequest = new addAccommodationRequest { AccommodationDTO = body }; var acc = accPortClient.addAccommodationAsync(accRequest); acc.Wait(); AccommodationDTO accTemp = new AccommodationDTO(); accTemp = acc.Result.addAccommodationResponse.AccommodationDTO; Accommodation accommodation = accTemp.CreateAccommodation(); // attach type in context so it doesn't get saved in database again and check the same for location _context.AccommodationTypes.Attach(accommodation.AccommodationType); if (_context.Locations.Any(loc => loc.Id == accommodation.Location.Id)) { _context.Locations.Attach(accommodation.Location); } _context.Accommodations.Add(accommodation); _context.SaveChanges(); return(Ok(accTemp)); }
public async Task <AccommodationDTO> EditAccommodationInfo(AccommodationEditDTO accommodationInfo) { using (_unitOfWork) { if (!DateManagerService.checkFromToDates(accommodationInfo.From, accommodationInfo.To)) { return(null); } Accommodation accommodation = await _unitOfWork.AccommodationRepository.FindByID(accommodationInfo.AccommodationId); Location location = await _unitOfWork.LocationRepository.FindByID(accommodation.LocationId); accommodation.Type = accommodationInfo.Type; accommodation.Name = accommodationInfo.Name; accommodation.Description = accommodationInfo.Description; accommodation.From = accommodationInfo.From; accommodation.To = accommodationInfo.To; accommodation.Address = accommodationInfo.Address; if (!DateManagerService.checkParentChildDates(location.From, location.To, accommodation.From, accommodation.To)) { return(null); } await _unitOfWork.Save(); AccommodationDTO retValue = _mapper.Map <Accommodation, AccommodationDTO>(accommodation); await _messageControllerService.NotifyOnTripChanges(location.TripId, "EditAccommodation", retValue); return(retValue); } }
public ActionResult <Accommodation> PostAccommodation([FromBody] AccommodationDTO accommodation) { return(_accommodationService.InsertAccommodation(new Accommodation() { Name = accommodation.Name, Address = new Address() { City = accommodation.Address.City, Street = accommodation.Address.Street, Country = accommodation.Address.Country }, UrlPic = accommodation.UrlPic })); }
public async Task <AccommodationDTO> CreateAccommodation(AccommodationCreateDTO newAccommodation) { using (_unitOfWork) { if (!DateManagerService.checkFromToDates(newAccommodation.From, newAccommodation.To)) { return(null); } Accommodation accommodation = _mapper.Map <AccommodationCreateDTO, Accommodation>(newAccommodation); Location location = await _unitOfWork.LocationRepository.FindByID(newAccommodation.LocationId); if (!DateManagerService.checkParentChildDates(location.From, location.To, accommodation.From, accommodation.To)) { return(null); } accommodation.Location = location; if (location.Accommodations == null) { location.Accommodations = new List <Accommodation>(); } location.Accommodations.Add(accommodation); Votable votable = new Votable(); accommodation.Votable = votable; await _unitOfWork.VotableRepository.Create(votable); await _unitOfWork.AccommodationRepository.Create(accommodation); await _unitOfWork.Save(); AccommodationDTO retValue = _mapper.Map <Accommodation, AccommodationDTO>(accommodation); await _messageControllerService.NotifyOnTripChanges(location.TripId, "AddAccommodation", retValue); return(retValue); } }
public async Task <ActionResult> EditAccommodation(int tripId, [FromBody] AccommodationEditDTO accommodationInfo) { try { if (!await _editRightsService.HasEditRights(tripId)) { return(BadRequest(new JsonResult("You can't currently edit this trip."))); } AccommodationDTO result = await _accommodationService.EditAccommodationInfo(accommodationInfo); await _editRightsService.ProlongEditRights(tripId, _redisAppSettings.EditRightsProlongedTTL); if (result != null) { return(Ok(result)); } return(BadRequest(new JsonResult("Accommodation dates are not valid."))); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public ActionResult UpdateAccommodation(Accommodation acc) { var oldAcc = _context.Accommodations .Include(accommodation => accommodation.AdditionalServices) .Include(accommodation => accommodation.Location) .Include(accommodation => accommodation.AccommodationType) .Include(accommodation => accommodation.Unavailabilities) .Include(accommodation => accommodation.PeriodPrices) .FirstOrDefault(accommodation => accommodation.Id == acc.Id); if (oldAcc == null) { return(NotFound()); } AccommodationPortClient accPortClient = new AccommodationPortClient(); updateAccommodationRequest accRequest = new updateAccommodationRequest(); AccommodationDTO accDTO = new AccommodationDTO(acc); List <AccommodationService.AdditionalService> ads = new List <AccommodationService.AdditionalService>(); for (int i = 0; i < acc.AdditionalServices.Count; ++i) { AgentDB.Models.AdditionalServicesOnly additionalService = _context.AdditionalServicesOnlies.FirstOrDefault(addServ => addServ.AdditionalServiceName == acc.AdditionalServices[i].AdditionalServiceName); AccommodationService.AdditionalService addService = new AccommodationService.AdditionalService(); addService.id = additionalService.Id; addService.additionalServiceName = additionalService.AdditionalServiceName; ads.Add(addService); } accDTO.additionalServices = ads.ToArray(); accRequest.AccommodationDTO = accDTO; var accUpdate = accPortClient.updateAccommodationAsync(accRequest); accUpdate.Wait(); // update accommodation details _context.Entry(oldAcc).CurrentValues.SetValues(acc); // delete old services foreach (var oldServ in oldAcc.AdditionalServices.ToList()) { bool found = false; if (acc.AdditionalServices.Any(s => s.AdditionalServiceName == oldServ.AdditionalServiceName)) { found = true; } if (!found) { oldAcc.AdditionalServices.Remove(oldServ); _context.AdditionalServices.Remove(oldServ); } } // add new services foreach (var newServ in acc.AdditionalServices) { bool found = false; if (oldAcc.AdditionalServices.Any(s => s.AdditionalServiceName == newServ.AdditionalServiceName)) { found = true; } if (!found) { Models.AdditionalService service = new Models.AdditionalService(); service.AdditionalServiceName = newServ.AdditionalServiceName; oldAcc.AdditionalServices.Add(service); } } // add new period price foreach (var newPeriod in acc.PeriodPrices) { bool found = false; if (oldAcc.PeriodPrices.Any(p => p.Id == newPeriod.Id)) { found = true; } if (!found) { oldAcc.PeriodPrices.Add(newPeriod); } } // add new unavailability foreach (var newUnv in acc.Unavailabilities) { bool found = false; if (oldAcc.Unavailabilities.Any(u => u.Id == newUnv.Id)) { found = true; } if (!found) { oldAcc.Unavailabilities.Add(newUnv); } } _context.Entry(oldAcc).State = EntityState.Modified; _context.SaveChanges(); return(Ok(oldAcc)); }