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)); }