/// <summary> /// Searches buildings to match criterias. /// </summary> /// <param name="model">The Search model.</param> /// <returns>The result</returns> public ActionResult SearchBuilding(SearchViewModel model) { System.Diagnostics.Debug.WriteLine(model.Name); int[] facilitiesIds = model.Facilities.Concat(model.TopFacilities).Where(f => f.Selected) .Select(f => f.FacilityTypeId).ToArray(); using (var db = new Models.OnLeaveContext()) { var result = db.UtilityBuildings .Include(b => b.UtilityBuildingPhotoDetails) .Include(b => b.Periods) .Include(b => b.Periods.Select(p => p.RoomAmounts)) .Include(b => b.UtilityBuildingLocales) .Where(b => (model.Name == null || model.Name.Trim().Length == 0 || b.UtilityBuildingLocales.Any(l => l.Name.ToLower().Contains(model.Name.ToLower()))) && b.UtilityBuildingPhotoDetails.Count > 0) .Where(b => !model.CityId.HasValue || b.CityId == model.CityId) .Where(b => !model.UtilityBuildingTypeId.HasValue || b.UtilityBuildingTypeId == model.UtilityBuildingTypeId) // UtilityBuildingTypeId .Where(b => facilitiesIds.All(fID => b.UtilityBuidingFacilityDetails.Any(ft => ft.UtilityBuildingFacilityTypeId == fID))) .Where(b => !model.Rating.HasValue || b.Rating == model.Rating) .Where(b => (!model.MinAmount.HasValue && !model.MaxAmount.HasValue) || b.Periods.SelectMany(p => p.RoomAmounts).Any(a => (!model.MinAmount.HasValue || model.MinAmount <= a.Amount) && (!model.MaxAmount.HasValue || model.MaxAmount >= a.Amount))) .OrderByDescending(b => b.SearchRating) .Take(51) .ToArray(); var buildings = result .Select(b => new UtilityBuildingModel { Id = b.UtilityBuildingId, Name = b.UtilityBuildingLocales.Where(l => l.LocaleId == (int)LocaleTypes.BG).Select(l => l.Name).FirstOrDefault(), Description = b.UtilityBuildingLocales.Where(l => l.LocaleId == (int)LocaleTypes.BG).Select(l => l.Description).FirstOrDefault(), UrlAddress = b.ExternalUrl, Rating = b.Rating ?? 0, SystemTypeId = b.SystemTypeId, Size = b.Size, PhotoIds = new System.Collections.Generic.List <int>() { b.UtilityBuildingPhotoDetails.First().PhotoId }, Periods = b.Periods.OrderBy(p => p.RoomAmounts.Min(a => a.Amount)).Take(1).ToList() }).ToArray(); return(PartialView("_SearchResult", buildings)); } }
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); }
/// <summary> /// Renders Search Section. /// </summary> /// <returns></returns> public ActionResult Search() { var searchModel = new SearchViewModel(); var topFacilities = new int[] { (int)Common.Constant.FacilityTypes.WI_FI, (int)Common.Constant.FacilityTypes.SWIMMING_POOL, (int)Common.Constant.FacilityTypes.SPA, (int)Common.Constant.FacilityTypes.BREAKFASET }; using (var db = new Models.OnLeaveContext()) { searchModel.TopFacilities = db.UtilityBuildingFacilityTypes .Where(f => topFacilities.Any(tf => f.UtilityBuildingFacilityTypeId == tf)) .Select(ft => new FacilityTypeModel { FacilityTypeId = ft.UtilityBuildingFacilityTypeId, FacilityTypeName = ft.Name }).ToArray(); searchModel.Facilities = db.UtilityBuildingFacilityTypes .Where(f => !topFacilities.Any(tf => f.UtilityBuildingFacilityTypeId == tf)) .Select(ft => new FacilityTypeModel { FacilityTypeId = ft.UtilityBuildingFacilityTypeId, FacilityTypeName = ft.Name }).ToArray(); } 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() }); return(PartialView("_SearchSection", searchModel)); }
public ActionResult DeleteBuilding(int? buildingId) { if (!buildingId.HasValue) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest); } using (var db = new Models.OnLeaveContext()) { var building = db.UtilityBuildings .Include(b => b.UtilityBuildingLocales) .Include(b => b.UtilityBuildingPhotoDetails) .Include(b => b.UtilityBuildingPhotoDetails.Select(pd => pd.Photo)) .Include(b => b.UtilityBuidingFacilityDetails) .Include(b => b.Rooms) .Include(b => b.Periods.Select(p => p.RoomAmounts)) .Include(b => b.Offers) .FirstOrDefault(b => b.UtilityBuildingId == buildingId); System.Diagnostics.Debug.Assert(building != null, "building not found"); if (building.UserId != User.Identity.GetUserId() && !User.IsInRole("Root")) { Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("avoid to delete building, which doesn't belong to user")); // avoid to delete building, which doesn't belong to user return new HttpStatusCodeResult(System.Net.HttpStatusCode.Forbidden); } db.UtilityBuildingLocales.RemoveRange(building.UtilityBuildingLocales); db.UtilityBuildingPhotoDetails.RemoveRange(building.UtilityBuildingPhotoDetails); db.Photos.RemoveRange(building.UtilityBuildingPhotoDetails.Select(pd => pd.Photo)); db.UtilityBuidingFacilityDetails.RemoveRange(building.UtilityBuidingFacilityDetails); db.RoomAmounts.RemoveRange(building.Periods.SelectMany(p => p.RoomAmounts)); db.Rooms.RemoveRange(building.Rooms); db.Periods.RemoveRange(building.Periods); db.Offers.RemoveRange(building.Offers); db.UtilityBuildings.Remove(building); db.SaveChanges(); } return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK); }
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 SearchBuildings(SearchSystemViewModel model) { using (var db = new Models.OnLeaveContext()) { var result = db.UtilityBuildings .Where(b => (model.Name == null || model.Name.Trim() == string.Empty || b.UtilityBuildingLocales.Any(l => l.Name.Trim().ToLower().Contains(model.Name.Trim().ToLower()))) && b.UtilityBuildingPhotoDetails.Count > 0) .Where(b => !model.CityId.HasValue || b.CityId == model.CityId) .Include(b => b.UtilityBuildingPhotoDetails) .Include(b => b.UtilityBuildingLocales) .OrderByDescending(b => b.SearchRating) .ToArray(); UtilityBuildingModel[] photoes = result .Select(b => new UtilityBuildingModel { Id = b.UtilityBuildingId, Name = string.Join(" / ", b.UtilityBuildingLocales.Where(l => !string.IsNullOrWhiteSpace(l.Name)).Select(l => l.Name).ToArray()), Description = string.Join(System.Environment.NewLine, b.UtilityBuildingLocales.Where(l => !string.IsNullOrWhiteSpace(l.Description)).Select(l => l.Description).ToArray()), PhotoIds = b.UtilityBuildingPhotoDetails.Select(photo => photo.PhotoId).ToList(), SystemTypeId = b.SystemTypeId }).ToArray(); return PartialView("UtilityBuildings", photoes); } }
public ActionResult UtilityBuildings() { string userId = User.Identity.GetUserId(); using (var db = new Models.OnLeaveContext()) { var result = db.UtilityBuildings .Where(b => b.UserId == userId) .Include(b => b.UtilityBuildingPhotoDetails) .Include(b => b.UtilityBuildingLocales) .ToArray(); UtilityBuildingModel[] photoes = result .Select(b => new UtilityBuildingModel { Id = b.UtilityBuildingId, Name = string.Join(" / ", b.UtilityBuildingLocales.Where(l => !string.IsNullOrWhiteSpace(l.Name)).Select(l => l.Name).ToArray()), SystemTypeId = b.SystemTypeId, Description = string.Join(System.Environment.NewLine, b.UtilityBuildingLocales.Where(l => !string.IsNullOrWhiteSpace(l.Description)).Select(l => l.Description).ToArray()), PhotoIds = b.UtilityBuildingPhotoDetails.Select(photo => photo.PhotoId).ToList() }).ToArray(); return PartialView("UtilityBuildings", photoes); } }
public FileResult GetPhoto(int photoId, int? width, int? height) { using (var db = new Models.OnLeaveContext()) { var photo = db.Photos.FirstOrDefault(p => p.PhotoId == photoId); if (photo != null) { if (width.HasValue && height.HasValue) { // resize image if required var rSetting = new ImageResizer.ResizeSettings(width.Value, height.Value, ImageResizer.FitMode.Stretch, null); rSetting.Anchor = System.Drawing.ContentAlignment.MiddleCenter; rSetting.Scale = ImageResizer.ScaleMode.UpscaleCanvas; rSetting.BackgroundColor = System.Drawing.Color.FromArgb(51, 221, 255); var resizedImage = ImageResizer.ImageBuilder.Current.Build(photo.Image, rSetting); return File(resizedImage.ToByteArray(), MimeMapping.GetMimeMapping(photo.Name)); } else { return File(photo.Image, MimeMapping.GetMimeMapping(photo.Name)); } } } return null; }
public ActionResult RemovePhoto(int? id) { if (!id.HasValue) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest); } using (var db = new Models.OnLeaveContext()) { var photoDB = db.Photos .Include(p => p.UtilityBuildingPhotoDetails) .Include(p => p.UtilityBuildingPhotoDetails.Select(pDetail => pDetail.UtilityBuilding)) .FirstOrDefault(p => p.PhotoId == id); if (photoDB == null) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.NotFound); } if (photoDB.UtilityBuildingPhotoDetails.Select(pDetail => pDetail.UtilityBuilding).Any(building => building.UserId != User.Identity.GetUserId())) { // avoid deleting photoes, which doesn't belongs to User's buildings return new HttpStatusCodeResult(System.Net.HttpStatusCode.Forbidden); } db.UtilityBuildingPhotoDetails.RemoveRange(photoDB.UtilityBuildingPhotoDetails); db.Photos.Remove(photoDB); db.SaveChanges(); } return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK); }
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)); } }
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); } }
/// <summary> /// Searches buildings to match criterias. /// </summary> /// <param name="model">The Search model.</param> /// <returns>The result</returns> public ActionResult SearchBuilding(SearchViewModel model) { System.Diagnostics.Debug.WriteLine(model.Name); int[] facilitiesIds = model.Facilities.Concat(model.TopFacilities).Where(f => f.Selected) .Select(f => f.FacilityTypeId).ToArray(); using (var db = new Models.OnLeaveContext()) { var result = db.UtilityBuildings .Include(b => b.UtilityBuildingPhotoDetails) .Include(b => b.Periods) .Include(b => b.Periods.Select(p => p.RoomAmounts)) .Include(b => b.UtilityBuildingLocales) .Where(b => (model.Name == null || model.Name.Trim().Length == 0 || b.UtilityBuildingLocales.Any(l => l.Name.ToLower().Contains(model.Name.ToLower()))) && b.UtilityBuildingPhotoDetails.Count > 0) .Where(b => !model.CityId.HasValue || b.CityId == model.CityId) .Where(b => !model.UtilityBuildingTypeId.HasValue || b.UtilityBuildingTypeId == model.UtilityBuildingTypeId) // UtilityBuildingTypeId .Where(b => facilitiesIds.All(fID => b.UtilityBuidingFacilityDetails.Any(ft => ft.UtilityBuildingFacilityTypeId == fID))) .Where(b => !model.Rating.HasValue || b.Rating == model.Rating) .Where(b => (!model.MinAmount.HasValue && !model.MaxAmount.HasValue) || b.Periods.SelectMany(p => p.RoomAmounts).Any(a => (!model.MinAmount.HasValue || model.MinAmount <= a.Amount) && (!model.MaxAmount.HasValue || model.MaxAmount >= a.Amount))) .OrderByDescending(b => b.SearchRating) .Take(51) .ToArray(); var buildings = result .Select(b => new UtilityBuildingModel { Id = b.UtilityBuildingId, Name = b.UtilityBuildingLocales.Where(l => l.LocaleId == (int)LocaleTypes.BG).Select(l => l.Name).FirstOrDefault(), Description = b.UtilityBuildingLocales.Where(l => l.LocaleId == (int)LocaleTypes.BG).Select(l => l.Description).FirstOrDefault(), UrlAddress = b.ExternalUrl, Rating = b.Rating ?? 0, SystemTypeId = b.SystemTypeId, Size = b.Size, PhotoIds = new System.Collections.Generic.List<int>(){ b.UtilityBuildingPhotoDetails.First().PhotoId }, Periods = b.Periods.OrderBy(p => p.RoomAmounts.Min(a => a.Amount)).Take(1).ToList() }).ToArray(); return PartialView("_SearchResult", buildings); } }
/// <summary> /// Renders Search Section. /// </summary> /// <returns></returns> public ActionResult Search() { var searchModel = new SearchViewModel(); var topFacilities = new int[] { (int)Common.Constant.FacilityTypes.WI_FI, (int)Common.Constant.FacilityTypes.SWIMMING_POOL, (int)Common.Constant.FacilityTypes.SPA, (int)Common.Constant.FacilityTypes.BREAKFASET }; using (var db = new Models.OnLeaveContext()) { searchModel.TopFacilities = db.UtilityBuildingFacilityTypes .Where(f => topFacilities.Any(tf => f.UtilityBuildingFacilityTypeId == tf)) .Select(ft => new FacilityTypeModel { FacilityTypeId = ft.UtilityBuildingFacilityTypeId, FacilityTypeName = ft.Name }).ToArray(); searchModel.Facilities = db.UtilityBuildingFacilityTypes .Where(f => !topFacilities.Any(tf => f.UtilityBuildingFacilityTypeId == tf)) .Select(ft => new FacilityTypeModel { FacilityTypeId = ft.UtilityBuildingFacilityTypeId, FacilityTypeName = ft.Name }).ToArray(); } 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() }); return PartialView("_SearchSection", searchModel); }