public ActionResult SaveUtilityBuildingExternal(UtilityBuildingExternalModel model) { ViewBag.Cities = StaticDataProvider.Cities.Select(c => new SelectListItem { Text = c.Name, Value = c.CityId.ToString() }); ViewBag.UtilityBuildingTypes = StaticDataProvider.UtilityBuildingTypes.Select(t => new SelectListItem { Text = t.Description, Value = t.UtilityBuildingTypeId.ToString() }); ViewBag.edit = ViewBag.edit ?? false; if (!ModelState.IsValid) return PartialView("UtilityBuildingExternal", model); if (model.UrlAddress != null && !model.UrlAddress.ToLowerInvariant().Contains("http")) { // make it absolute model.UrlAddress = string.Format("http://{0}", model.UrlAddress); } using (var db = new OnLeaveContext()) { UtilityBuilding building = new UtilityBuilding(); if (model.Id > 0) { building = db.UtilityBuildings .Include(b => b.UtilityBuildingPhotoDetails) .FirstOrDefault(b => b.UtilityBuildingId == model.Id); if (building == null || building.UserId != User.Identity.GetUserId()) { new HttpStatusCodeResult(System.Net.HttpStatusCode.NotFound); } building.KeyWords = model.Name; building.PhoneNumber = model.PhoneNumber; building.CityId = model.CityId; building.ExternalUrl = model.UrlAddress; var buildingLocaleBG = building.UtilityBuildingLocales.FirstOrDefault(l => l.LocaleId == (int)LocaleTypes.BG); if (buildingLocaleBG != null) { buildingLocaleBG.Name = model.Name; } else { building.UtilityBuildingLocales.Add(new UtilityBuildingLocale { LocaleId = (int)LocaleTypes.BG, Name = model.Name }); } var buildingLocaleEN = building.UtilityBuildingLocales.FirstOrDefault(l => l.LocaleId == (int)LocaleTypes.EN); if (buildingLocaleEN != null) { if (string.IsNullOrWhiteSpace(model.NameEN)) { // remove if no data db.UtilityBuildingLocales.Remove(buildingLocaleEN); } else { buildingLocaleEN.Name = model.NameEN; } } else { if (!string.IsNullOrWhiteSpace(model.NameEN)) { building.UtilityBuildingLocales.Add(new UtilityBuildingLocale { LocaleId = (int)LocaleTypes.EN, Name = model.NameEN }); } } } else { building = new UtilityBuilding { KeyWords = model.Name, UtilityBuildingTypeId = model.UtilityBuildingTypeId, UserId = User.Identity.GetUserId(), PhoneNumber = model.PhoneNumber, CityId = model.CityId, SystemTypeId = (int)Common.Constant.SystemType.Booking, ExternalUrl = model.UrlAddress }; building.UtilityBuildingLocales.Add(new UtilityBuildingLocale { LocaleId = (int)LocaleTypes.BG, Name = model.Name, }); if (!string.IsNullOrWhiteSpace(model.NameEN)) { building.UtilityBuildingLocales.Add(new UtilityBuildingLocale { LocaleId = (int)LocaleTypes.EN, Name = model.NameEN, }); } db.UtilityBuildings.Add(building); } db.SaveChanges(); model.Id = building.UtilityBuildingId; model.PhotoIds = building.UtilityBuildingPhotoDetails.Select(ph => ph.PhotoId).ToList(); } ViewBag.edit = true; ModelState.Clear(); return PartialView("UtilityBuildingExternal", model); }
public ActionResult AddUtilityBuilding(UtilityBuildingModel model) { if (ModelState.IsValid) { using (var db = new Models.OnLeaveContext()) { var city = StaticDataProvider.Cities.FirstOrDefault(c => c.CityId == model.CityId); model.Longitude = city.lon; model.Latitude = city.lat; var building = new UtilityBuilding { KeyWords = model.Name, UtilityBuildingTypeId = model.UtilityBuildingTypeId, UserId = User.Identity.GetUserId(), PhoneNumber = model.PhoneNumber, CityId = city.CityId, Rating = model.Rating, lon = model.Longitude, lat = model.Latitude, Size = model.Size }; building.UtilityBuildingLocales.Add(new UtilityBuildingLocale { LocaleId = (int)LocaleTypes.BG, Name = model.Name, Description = model.Description, ContactPerson = model.ContactPerson, Address = model.Address }); if (!string.IsNullOrWhiteSpace(model.ContactPersonEN) || !string.IsNullOrWhiteSpace(model.NameEN) || !string.IsNullOrWhiteSpace(model.DescriptionEN) || !string.IsNullOrWhiteSpace(model.Address)) { building.UtilityBuildingLocales.Add(new UtilityBuildingLocale { LocaleId = (int)LocaleTypes.EN, Name = model.NameEN, Description = model.DescriptionEN, ContactPerson = model.ContactPersonEN, Address = model.AddressEN }); } var buildingDB = db.UtilityBuildings.Add(building); // update facilities info var facilitiesToRemove = buildingDB.UtilityBuidingFacilityDetails .Where(fd => !model.Facilities.Any(f => f.FacilityTypeId == fd.UtilityBuildingFacilityTypeId && f.Selected)); db.UtilityBuidingFacilityDetails.RemoveRange(facilitiesToRemove); model.Facilities.Where(f => f.Selected).ToList().ForEach(f => { if (!buildingDB.UtilityBuidingFacilityDetails.Any(fd => fd.UtilityBuildingFacilityTypeId == f.FacilityTypeId)) { buildingDB.UtilityBuidingFacilityDetails.Add(new UtilityBuidingFacilityDetail { UtilityBuildingFacilityTypeId = f.FacilityTypeId, }); } }); model.Periods.Where(p => p.RoomAmounts.Any(a => a.Amount != 0M)).ToList().ForEach(p => { buildingDB.Periods.Add(p); p.RoomAmounts.Where(a => a.Amount == 0M) .ToList() .ForEach(a => p.RoomAmounts.Remove(a)); }); db.SaveChanges(); model.Id = buildingDB.UtilityBuildingId; } } ViewBag.Cities = StaticDataProvider.Cities.Select(c => new SelectListItem { Text = c.Name, Value = c.CityId.ToString() }); ViewBag.RoomTypes = StaticDataProvider.RoomTypes; ViewBag.UtilityBuildingTypes = StaticDataProvider.UtilityBuildingTypes.Select(t => new SelectListItem { Text = t.Description, Value = t.UtilityBuildingTypeId.ToString() }); ModelState.Keys.Where(key => key.StartsWith("Periods")).ToList().ForEach(key => ModelState.Remove(key)); return PartialView(model); }