Example #1
0
 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);
        }
Example #3
0
        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)));
 }