public async Task <ActionResult> AddOffer(AddNewOfferViewModel model, HttpPostedFileBase image = null) { if (ModelState.IsValid) { OfferValidator offerValidator = new OfferValidator(model); var errorList = offerValidator.ValidateOffer(); if (errorList.Count != 0) { int i = 0; foreach (var error in errorList) { ModelState.AddModelError(String.Format("{0}", i++), error); return(View(model)); } } else { string username = HttpContext.User?.Identity?.Name; if (await OfferAccessor.SaveOfferAsync(Context, model, username, image)) { return(RedirectToAction("MyOffers", "Offer")); } else { return(View("Error", "Offer")); } } } return(View(model)); }
public async Task EditOfferTest() { SetMockContext("bakalam"); AddNewOfferViewModel model = new AddNewOfferViewModel { AccommodationName = "nowododananazwa", City = "nowemiasto", Description = "nowyopis", StartDate = new DateTime(2015, 12, 25), EndDate = new DateTime(2015, 12, 29), LocalNumber = "1", PostalCode = "11-111", Price = "410", RoomNumber = "123", Street = "nowaulica", AvailiableVacanciesNumber = "123", Id = 1 }; var price1 = _context.Offers.Include(o => o.OfferInfo).FirstOrDefault(o => o.Id == model.Id).OfferInfo.Price; var result = await _controller.EditOffer(model); var price2 = _context.Offers.Include(o => o.OfferInfo).FirstOrDefault(o => o.Id == model.Id).OfferInfo.Price; Assert.IsNotNull(result); Assert.AreNotEqual(price1, price2); }
public async Task <ActionResult> EditOffer(int id) { AddNewOfferViewModel offer = await OfferAccessor.GetOfferByIdAsync(Context, id); if (offer == null) { return(View("Error", "Offer")); } return(View(offer)); }
/// <summary> /// Umożliwia edycję oferty w bazie /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="model">Model z danymi oferty</param> /// <returns></returns> public static bool EditOffer(IAccommodationContext context, AddNewOfferViewModel model) { try { Offer offer = context.Offers.FirstOrDefault(x => x.Id == model.Id); if (offer == null) { return(false); } HistoricalOffer ho = context.HistoricalOffers.FirstOrDefault(x => x.OriginalOfferId == offer.Id); OfferInfo newOfferInfo = new OfferInfo { Description = model.Description, OfferEndTime = model.EndDate, OfferStartTime = model.StartDate, OfferPublishTime = DateTime.Now, Price = double.Parse(model.Price) }; Address newAddress = new Address { City = model.City, Street = model.Street, LocalNumber = model.LocalNumber, PostalCode = model.PostalCode, }; Place newPlace = new Place { Address = newAddress, PlaceName = model.AccommodationName, }; Room newRoom = new Room { Capacity = int.Parse(model.AvailiableVacanciesNumber), Number = model.RoomNumber, Place = newPlace, }; ho.OfferInfo = offer.OfferInfo = newOfferInfo; ho.Room = offer.Room = newRoom; ho.Room.Place = offer.Room.Place = newPlace; ho.Room.Place.Address = offer.Room.Place.Address = newAddress; context.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
public OfferValidator(AddNewOfferViewModel model) { Model = new AddNewOfferViewModel { AccommodationName = model.AccommodationName, City = model.City, Description = model.Description, EndDate = model.EndDate, StartDate = model.StartDate, AvailiableVacanciesNumber = model.AvailiableVacanciesNumber, LocalNumber = model.LocalNumber, PostalCode = model.PostalCode, Price = model.Price, RoomNumber = model.RoomNumber, Street = model.Street }; }
public async Task AddNewOfferTest() { SetMockContext("bakalam"); AddNewOfferViewModel model = new AddNewOfferViewModel { AccommodationName = "nowododananazwa", City = "nowemiasto", Description = "nowyopis", StartDate = new DateTime(2015, 12, 25), EndDate = new DateTime(2015, 12, 29), LocalNumber = "1", PostalCode = "11-111", Price = "123", RoomNumber = "123", Street = "nowaulica", AvailiableVacanciesNumber = "123", }; int count = _context.Offers.Count(); var result = await _controller.AddOffer(model); Assert.IsNotNull(result); }
/// <summary> /// Asynchroniczna metoda wywołująca metodę do /// edycji ofert w bazie /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="model">Model z danymi oferty do edycji</param> /// <returns></returns> public static async Task <bool> EditOfferAsync(IAccommodationContext context, AddNewOfferViewModel model) { return(await Task.Run(() => EditOffer(context, model))); }
/// <summary> /// Zapisuje daną ofertę w bazie /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="model">Model z danymi oferty</param> /// <param name="username">Aktualnie zalogowany użytkownik</param> /// <param name="image">Opcjonalny obrazek</param> /// <returns></returns> public static bool SaveOffer(IAccommodationContext context, AddNewOfferViewModel model, string username, HttpPostedFileBase image = null) { try { Offer offerToAdd = new Offer(); User user = context.Users.FirstOrDefault(x => x.Username == username); if (user == null) { return(false); } offerToAdd.Vendor = user; offerToAdd.OfferInfo = new OfferInfo { OfferStartTime = model.StartDate, OfferEndTime = model.EndDate, OfferPublishTime = DateTime.Now, Price = double.Parse(model.Price), Description = model.Description }; if (image != null) { offerToAdd.OfferInfo.OfferImage = new byte[image.ContentLength]; image.InputStream.Read(offerToAdd.OfferInfo.OfferImage, 0, image.ContentLength); } Place place = context.Places.FirstOrDefault(p => p.PlaceName.Equals(model.AccommodationName) && p.Address.City.Equals(model.City) && p.Address.Street.Equals(model.Street) && p.Address.LocalNumber == model.LocalNumber); if (place != null) { //istnieje to miejsce w bazie danych Room room = context.Rooms.FirstOrDefault(r => r.PlaceId == place.Id && r.Number == model.RoomNumber); if (room != null) { //istnieje oferta na ten pokój List <Offer> off = context.Offers.Where(offer => offer.RoomId == room.Id) .Include(o => o.OfferInfo) .ToList(); if (off.Any(offer => (offer.OfferInfo.OfferStartTime <= model.StartDate && offer.OfferInfo.OfferEndTime >= model.EndDate) || (offer.OfferInfo.OfferStartTime >= model.StartDate && offer.OfferInfo.OfferEndTime <= model.EndDate))) { return(false); } //żadna oferta nie koliduje offerToAdd.Room = room; } else { //nowy pokój Room newRoom = new Room { Capacity = int.Parse(model.AvailiableVacanciesNumber), Number = model.RoomNumber, Place = place, }; offerToAdd.Room = newRoom; offerToAdd.Room.Place = place; } } else { Address newAddress = new Address { City = model.City, Street = model.Street, LocalNumber = model.LocalNumber, PostalCode = model.PostalCode, }; Place newPlace = new Place { Address = newAddress, PlaceName = model.AccommodationName, }; Room newRoom = new Room { Capacity = int.Parse(model.AvailiableVacanciesNumber), Number = model.RoomNumber, Place = newPlace, }; offerToAdd.Room = newRoom; } user.MyOffers.Add(offerToAdd); //zapisanie do historii HistoricalOffer historicalOffer = new HistoricalOffer(); historicalOffer.OfferInfo = offerToAdd.OfferInfo; historicalOffer.Vendor = offerToAdd.Vendor; historicalOffer.Room = offerToAdd.Room; historicalOffer.Room.Place = offerToAdd.Room.Place; historicalOffer.Room.Place.Address = offerToAdd.Room.Place.Address; historicalOffer.OriginalOffer = offerToAdd; user.MyHistoricalOffers.Add(historicalOffer); //ewentualna zmiana rangi int c = user.MyHistoricalOffers.Count; if (c >= 4 && c < 8) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Junior")); } else if (c >= 8 && c < 15) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Znawca")); } else if (c >= 15 && c < 25) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Mistrz")); } else if (c >= 25) { user.Rank = context.Ranks.FirstOrDefault(r => r.Name.Equals("Guru")); } context.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// Asynchroniczna metoda wywołująca metodę do /// zapisywania oferty w bazie /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="model">Model z danymi oferty</param> /// <param name="username">Aktualnie zalogowany użytkownik</param> /// <param name="image">Opcjonalny obrazek</param> /// <returns></returns> public static async Task <bool> SaveOfferAsync(IAccommodationContext context, AddNewOfferViewModel model, string username, HttpPostedFileBase image = null) { return(await Task.Run(() => SaveOffer(context, model, username, image))); }