public ActionResult AddUtilityBuilding() { var utilityBuilding = new UtilityBuildingModel { UtilityBuildingTypeId = (int)UtilityBuildingTypes.Hotel, Periods = new List<Period>() }; using (var db = new Models.OnLeaveContext()) { utilityBuilding.Facilities = db.UtilityBuildingFacilityTypes .Select(ft => new FacilityTypeModel { FacilityTypeId = ft.UtilityBuildingFacilityTypeId, FacilityTypeName = ft.Name }) .ToArray(); // five periods per hotel while (utilityBuilding.Periods.Count < 5) { utilityBuilding.Periods.Add(new Period { FromDate = DateTime.Now.Date, ToDate = DateTime.Now.Date, RoomAmounts = StaticDataProvider.RoomTypes.Select(rType => new RoomAmount { Amount = 0M, RoomTypeId = rType.RoomTypeId, }).ToList() }); } } 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() }); return PartialView(utilityBuilding); }
public ActionResult EditBuilding(UtilityBuildingModel model) { if (ModelState.IsValid) { using (var db = new Models.OnLeaveContext()) { var buildingDB = db.UtilityBuildings .Include(b => b.Periods) .Include(b => b.Offers) .Include(b => b.UtilityBuildingPhotoDetails) .Include(b => b.UtilityBuildingLocales) .FirstOrDefault(b => b.UtilityBuildingId == model.Id); if (buildingDB == null || buildingDB.UserId != User.Identity.GetUserId()) { new HttpStatusCodeResult(System.Net.HttpStatusCode.NotFound); } buildingDB.UtilityBuildingTypeId = model.UtilityBuildingTypeId; buildingDB.PhoneNumber = model.PhoneNumber; buildingDB.CityId = model.CityId; buildingDB.Rating = model.Rating; buildingDB.Size = model.Size; if (User.IsInRole("Root")) { buildingDB.SearchRating = model.SearchRating; } var buildingLocaleBG = buildingDB.UtilityBuildingLocales.FirstOrDefault(l => l.LocaleId == (int)LocaleTypes.BG); if (buildingLocaleBG != null) { buildingLocaleBG.Name = model.Name; buildingLocaleBG.Description = model.Description; buildingLocaleBG.ContactPerson = model.ContactPerson; buildingLocaleBG.Address = model.Address; } else { buildingDB.UtilityBuildingLocales.Add(new UtilityBuildingLocale { LocaleId = (int)LocaleTypes.BG, Name = model.Name, Description = model.Description, ContactPerson = model.ContactPerson, Address = model.Address }); } var buildingLocaleEN = buildingDB.UtilityBuildingLocales.FirstOrDefault(l => l.LocaleId == (int)LocaleTypes.EN); if (buildingLocaleEN != null) { if (string.IsNullOrWhiteSpace(model.ContactPersonEN) && string.IsNullOrWhiteSpace(model.NameEN) && string.IsNullOrWhiteSpace(model.DescriptionEN) && string.IsNullOrWhiteSpace(model.AddressEN)) { // remove if no data db.UtilityBuildingLocales.Remove(buildingLocaleEN); } else { buildingLocaleEN.Name = model.NameEN; buildingLocaleEN.Description = model.DescriptionEN; buildingLocaleEN.ContactPerson = model.ContactPersonEN; buildingLocaleEN.Address = model.AddressEN; } } else { if (!string.IsNullOrWhiteSpace(model.ContactPersonEN) || !string.IsNullOrWhiteSpace(model.NameEN) || !string.IsNullOrWhiteSpace(model.DescriptionEN) || !string.IsNullOrWhiteSpace(model.Address)) { buildingDB.UtilityBuildingLocales.Add(new UtilityBuildingLocale { LocaleId = (int)LocaleTypes.EN, Name = model.NameEN, Description = model.DescriptionEN, ContactPerson = model.ContactPersonEN, Address = model.AddressEN }); } } // 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, UtilityBuildingId = model.Id }); } }); // periods model.Periods.Where(p => !p.StartDate.HasValue).ToList().ForEach(p => p.StartDate = DateTime.Now.Date); model.Periods.Where(p => !p.EndDate.HasValue).ToList().ForEach(p => p.EndDate = DateTime.Now.Date); var periodsToRemove = buildingDB.Periods .Where(pDB => !model.Periods.Where(p => p.PeriodId != 0).Any(p => p.PeriodId == pDB.PeriodId && p.RoomAmounts.Any(a => a.Amount != 0M))) .ToList(); var periodsToAdd = model.Periods.Where(p => p.PeriodId == 0 && p.RoomAmounts.Any(a => a.Amount != 0M)) .Select(p => new Period { FromDate = p.FromDate, ToDate = p.ToDate, RoomAmounts = p.RoomAmounts.Where(a => a.Amount != 0M).Select(a => new RoomAmount{ Amount = a.Amount, RoomTypeId = a.RoomTypeId }).ToList() }).ToList(); db.RoomAmounts.RemoveRange(periodsToRemove.SelectMany(p => p.RoomAmounts)); db.Periods.RemoveRange(periodsToRemove); buildingDB.Periods.ToList().ForEach(pDB => { var period = model.Periods.First(p => p.PeriodId == pDB.PeriodId); pDB.FromDate = period.FromDate; pDB.ToDate = period.ToDate; var amountsToDelete = pDB.RoomAmounts .Where(aDB => !period.RoomAmounts.Any(a => a.RoomAmountId == aDB.RoomAmountId && a.Amount != 0M)) .ToList(); db.RoomAmounts.RemoveRange(amountsToDelete); pDB.RoomAmounts .Where(aDB => period.RoomAmounts.Any(a => a.RoomTypeId == aDB.RoomTypeId)) .ToList() .ForEach(aDB => { aDB.Amount = period.RoomAmounts.First(a => a.RoomTypeId == aDB.RoomTypeId).Amount; }); period.RoomAmounts .Where(a => a.RoomAmountId == 0 && a.Amount != 0M) .ToList() .ForEach(a => pDB.RoomAmounts.Add(new RoomAmount { PeriodId = pDB.PeriodId, RoomTypeId = a.RoomTypeId, Amount = a.Amount })); }); periodsToAdd.ForEach(p => buildingDB.Periods.Add(p)); // Offers var offersToDelete = buildingDB.Offers .Where(o => model.Offers == null || !model.Offers.Any(offer => offer.OfferId == o.OfferId)); db.Offers.RemoveRange(offersToDelete); model.Offers.Where(o => o.OfferId > 0).ToList().ForEach(o => { var offerDB = buildingDB.Offers.FirstOrDefault(oDB => oDB.OfferId == o.OfferId); if (offerDB != null) { offerDB.StartDate = o.StartDate.Value; offerDB.EndDate = o.EndDate; offerDB.Discount = o.Discount; offerDB.Description = o.Description; } }); model.Offers.Where(o => o.OfferId == -1).ToList().ForEach(o => { buildingDB.Offers.Add(new Offer { StartDate = o.StartDate.Value, EndDate = o.EndDate, Discount = o.Discount, Description = o.Description, OfferTypeId = (int)OfferTypes.Discount }); }); db.SaveChanges(); model.Latitude = buildingDB.lat ?? 0M; model.Longitude = buildingDB.lon ?? 0M; model.Periods = buildingDB.Periods.ToList(); model.Periods.ForEach(p => { StaticDataProvider.RoomTypes.ToList().ForEach(rType => { if (!p.RoomAmounts.Any(a => a.RoomTypeId == rType.RoomTypeId)) { p.RoomAmounts.Add(new RoomAmount { RoomTypeId = rType.RoomTypeId, Amount = 0M, PeriodId = p.PeriodId }); } }); }); // 5 periods for each hotel while (model.Periods.Count < 5) { model.Periods.Add(new Period { UtilityBuildingId = model.Id, FromDate = DateTime.Now.Date, ToDate = DateTime.Now.Date, RoomAmounts = StaticDataProvider.RoomTypes.Select(rType => new RoomAmount { RoomTypeId = rType.RoomTypeId, Amount = 0M, }).ToList() }); } model.PhotoIds = buildingDB.UtilityBuildingPhotoDetails.Select(p => p.PhotoId).ToList(); } } else { using (var db = new Models.OnLeaveContext()) { var buildingDB = db.UtilityBuildings .Include(b => b.UtilityBuildingPhotoDetails) .FirstOrDefault(b => b.UtilityBuildingId == model.Id); if (buildingDB != null) { model.Latitude = buildingDB.lat ?? 0M; model.Longitude = buildingDB.lon ?? 0M; model.PhotoIds = buildingDB.UtilityBuildingPhotoDetails.Select(p => p.PhotoId).ToList(); } } } var roomTypesIDs = StaticDataProvider.RoomTypes.OrderBy(t => t.RoomTypeId).Select(t => t.RoomTypeId).ToList(); model.Periods.ForEach(p => { // sort room's amount per room's type var roomAmouns = p.RoomAmounts.OrderBy(a => a.RoomTypeId, Comparer<int>.Create((a, b) => { return roomTypesIDs.IndexOf(a).CompareTo(roomTypesIDs.IndexOf(b)); })).ToList(); p.RoomAmounts.Clear(); roomAmouns.ForEach(a => p.RoomAmounts.Add(a)); }); ViewBag.Cities = StaticDataProvider.Cities.Select(c => new SelectListItem { Text = c.Name, Value = c.CityId.ToString() }); ViewBag.RoomTypes = StaticDataProvider.RoomTypes.OrderBy(t => t.RoomTypeId).ToArray(); 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); }
public ActionResult GetBuilding(int? buildingId) { if (!buildingId.HasValue) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest); } using (var db = new Models.OnLeaveContext()) { var buildingDB = db.UtilityBuildings .Include(b => b.UtilityBuildingPhotoDetails) .Include(b => b.UtilityBuidingFacilityDetails) .Include(b => b.Periods) .Include(b => b.Periods.Select(p => p.RoomAmounts)) .Include(b => b.UtilityBuildingLocales) .Include(b => b.Offers) .FirstOrDefault(b => b.UtilityBuildingId == buildingId); if (buildingDB == null) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.NotFound); } var bg = buildingDB.UtilityBuildingLocales.FirstOrDefault(l => l.LocaleId == (int)LocaleTypes.BG); if (bg == null) bg = new UtilityBuildingLocale(); var en = buildingDB.UtilityBuildingLocales.FirstOrDefault(l => l.LocaleId == (int)LocaleTypes.EN); if (en == null) en = new UtilityBuildingLocale(); var model = new UtilityBuildingModel { Id = buildingDB.UtilityBuildingId, Name = bg.Name, NameEN = en.Name, Description = bg.Description, DescriptionEN = en.Description, UtilityBuildingTypeId = buildingDB.UtilityBuildingTypeId, Address = bg.Address, AddressEN = en.Address, ContactPerson = bg.ContactPerson, ContactPersonEN = en.ContactPerson, PhoneNumber = buildingDB.PhoneNumber, CityId = buildingDB.CityId, Rating = buildingDB.Rating ?? 0, SearchRating = User.IsInRole("Root") ? buildingDB.SearchRating : null, Latitude = buildingDB.lat ?? 0M, Longitude = buildingDB.lon ?? 0M, Size = buildingDB.Size, PhotoIds = buildingDB.UtilityBuildingPhotoDetails.Select(ph => ph.PhotoId).ToList(), Facilities = db.UtilityBuildingFacilityTypes.Select(ft => new FacilityTypeModel { FacilityTypeId = ft.UtilityBuildingFacilityTypeId, FacilityTypeName = ft.Name }).ToArray(), Periods = buildingDB.Periods.Select(p => { StaticDataProvider.RoomTypes.ToList().ForEach(rType => { var roomAmount = p.RoomAmounts.FirstOrDefault(rAmountDB => rAmountDB.RoomTypeId == rType.RoomTypeId); if (roomAmount == null) { // add default value for room type p.RoomAmounts.Add(new RoomAmount { PeriodId = p.PeriodId, RoomTypeId = rType.RoomTypeId, Amount = 0M, }); } }); return p; }).ToList() }; // get offers model.Offers = buildingDB.Offers.Select(o => new OnLeave.Models.BusinessEntities.Offer { OfferId = o.OfferId, Description = o.Description, StartDate = o.StartDate, EndDate = o.EndDate, Discount = o.Discount }).ToList(); // 5 periods for each hotel while (model.Periods.Count < 5) { model.Periods.Add(new Period { UtilityBuildingId = model.Id, FromDate = DateTime.Now.Date, ToDate = DateTime.Now.Date, RoomAmounts = StaticDataProvider.RoomTypes.Select(rType => new RoomAmount { RoomTypeId = rType.RoomTypeId, Amount = 0M, }).ToList() }); } foreach (var f in model.Facilities) { f.Selected = buildingDB.UtilityBuidingFacilityDetails.Any(ft => ft.UtilityBuildingFacilityTypeId == f.FacilityTypeId); } 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() }); return PartialView("EditBuilding", 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); }
public async Task<ActionResult> AddPicture(UtilityBuildingModel model) { //ModelState.Clear(); if (model.Id == 0) { ModelState.AddModelError(model.GetPropertyName(() => model.PhotoFile), "hotel missing"); } if (model.PhotoFile == null) { ModelState.AddModelError(model.GetPropertyName(() => model.PhotoFile), "image missing"); } // take just PhotoFile validation var errors = ModelState.Where(s => s.Key != model.GetPropertyName(() => model.PhotoFile)); errors.ToList().ForEach(e => ModelState.Remove(e.Key)); if (!ModelState.IsValid) { return PartialView("_BuildingPhotoes", model); } using (var db = new Models.OnLeaveContext()) { // add pictures //var resizedImage = ImageResizer.ImageBuilder.Current.Build(buffer, rSetting); //resizedImage.Save(@"C:\\Temp\" + Path.GetFileName(model.PhotoFile.FileName)); int count = db.UtilityBuildingPhotoDetails.Count(pDetail => pDetail.UtilityBuildingId == model.Id); if (count >= 7 - 1) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.Forbidden, "maximum number picture exceeded"); } using (var ms = new MemoryStream()) { var job = new ImageResizer.ImageJob( model.PhotoFile, ms, new ImageResizer.Instructions("mode=crop;format=jpg;width=600;height=472;")); await Task.Run(() => job.Build()); var imageDb = new Photo { KeyWords = null, Name = Path.GetFileName(model.PhotoFile.FileName), Image = ms.ToArray() }; db.Photos.Add(imageDb); var imageDetail = new UtilityBuildingPhotoDetail { UtilityBuildingId = model.Id, KeyWords = null, PhotoId = imageDb.PhotoId }; db.UtilityBuildingPhotoDetails.Add(imageDetail); try { db.SaveChanges(); } catch (Exception ex) { System.Console.WriteLine(ex); } // get images model.PhotoIds = db.UtilityBuildingPhotoDetails .Where(pDetail => pDetail.UtilityBuildingId == model.Id) .Select(pDetail => pDetail.PhotoId) .ToList(); } } return PartialView("_BuildingPhotoes", model); }
public ActionResult GetUtilityBuilding(int buildingId) { using (var db = new Models.OnLeaveContext()) { var buildingDB = db.UtilityBuildings .Include(b => b.UtilityBuildingPhotoDetails) .Include(b => b.UtilityBuidingFacilityDetails) .Include(b => b.Periods) .Include(b => b.Periods.Select(p => p.RoomAmounts)) .Include(b => b.UtilityBuildingLocales) .Include(b => b.Offers) .FirstOrDefault(b => b.UtilityBuildingId == buildingId); if (buildingDB == null) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.NotFound); } var model = new UtilityBuildingModel { Id = buildingDB.UtilityBuildingId, Name = string.Join(" / ", buildingDB.UtilityBuildingLocales.Select(l => l.Name).ToArray()), Description = string.Join(" <br /><br /> ", buildingDB.UtilityBuildingLocales.Select(l => l.Description).ToArray()), Address = string.Join(" / ", buildingDB.UtilityBuildingLocales.Select(l => l.Address).ToArray()), ContactPerson = string.Join(" / ", buildingDB.UtilityBuildingLocales.Select(l => l.ContactPerson).ToArray()), PhoneNumber = buildingDB.PhoneNumber, PhotoIds = buildingDB.UtilityBuildingPhotoDetails.Select(ph => ph.PhotoId).ToList(), CityId = buildingDB.CityId, Rating = buildingDB.Rating ?? 0, Latitude = buildingDB.lat ?? 0M, Longitude = buildingDB.lon ?? 0M, Size = buildingDB.Size, Periods = buildingDB.Periods.ToList(), Facilities = db.UtilityBuildingFacilityTypes.Select(ft => new FacilityTypeModel { FacilityTypeId = ft.UtilityBuildingFacilityTypeId, FacilityTypeName = ft.Name }).ToArray(), }; // sort by room types model.Periods.ForEach(p => { p.RoomAmounts = p.RoomAmounts .Join(StaticDataProvider.RoomTypes, r => r.RoomTypeId, t => t.RoomTypeId, (r, t) => new { Room = r, Order = t.Order }) .OrderBy(r => r.Order) .Select(r => r.Room) .ToList(); }); foreach (var f in model.Facilities) { f.Selected = buildingDB.UtilityBuidingFacilityDetails.Any(ft => ft.UtilityBuildingFacilityTypeId == f.FacilityTypeId); } model.Offers = buildingDB.Offers.Select(o => new OnLeave.Models.BusinessEntities.Offer { StartDate = o.StartDate, EndDate = o.EndDate, Discount = o.Discount, Description = o.Description }).ToList(); ViewBag.RoomTypes = StaticDataProvider.RoomTypes; ViewBag.Cities = StaticDataProvider.Cities; //return View(model); return PartialView("GetUtilityBuilding", model); } }