public UpdateAccommodationRequestDTO(Accommodation Accommodation)
        {
            Console.WriteLine("----" + Accommodation.Address.Number);

            UpdateAccommodatioRequest = new updateAccommodationRequest()
            {
                accommodation = new accommodation()
                {
                    Id                = Accommodation.Id,
                    Name              = Accommodation.Name,
                    Description       = Accommodation.Description,
                    Category          = Accommodation.Category,
                    AccommodationType = (accommodationType)Enum.Parse(typeof(accommodationType), Accommodation.AccommodationType.ToString(), true),
                    Address           = new AccommodationServiceReference.Address()
                    {
                        Id               = Accommodation.Address.Id,
                        Country          = Accommodation.Address.Country,
                        City             = Accommodation.Address.City,
                        Street           = Accommodation.Address.Street,
                        Number           = Accommodation.Address.Number,
                        Apartment_number = Accommodation.Address.ApartmentNumber,
                        Longitude        = Accommodation.Address.Longitude,
                        Latitude         = Accommodation.Address.Latitude,
                        Postal_code      = Accommodation.Address.PostalCode
                    }
                }
            };
        }
        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));
        }