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);
            }
        }
Exemple #3
0
 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));
        }