public static bool GiveUserMark(IAccommodationContext context, MarkViewModel model)
        {
            try
            {
                User            user  = context.Users.FirstOrDefault(u => u.Username == model.Username);
                HistoricalOffer offer = context.HistoricalOffers.FirstOrDefault(o => o.Id == model.ReservedOfferId);
                int             mark  = (int)model.mark;

                if (user.AverageMark == null || user.MarkCount == null)
                {
                    user.AverageMark = 0;
                    user.MarkCount   = 0;
                }

                user.AverageMark = (user.AverageMark * user.MarkCount + mark) / (user.MarkCount + 1);
                user.MarkCount  += 1;

                offer.IsMarked = true;
                context.SaveChanges();
                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Example #2
0
        public IHttpActionResult EditOffer(OfferEditDataDto dto)
        {
            using (var context = _provider.GetNewContext())
            {
                using (var transaction = new TransactionScope())
                {
                    User user = context.Users.FirstOrDefault(u => u.Username.Equals(dto.Username));
                    if (user == null)
                    {
                        return(NotFound());
                    }
                    Offer offer = context.Offers.FirstOrDefault(x => x.Id == dto.OfferId);
                    if (offer == null)
                    {
                        return(NotFound());
                    }

                    HistoricalOffer ho = context.HistoricalOffers.FirstOrDefault(x => x.OriginalOfferId == offer.Id);

                    ho.OfferInfo          = offer.OfferInfo = dto.OfferInfo;
                    ho.Vendor             = offer.Vendor = user;
                    ho.Room               = offer.Room = dto.Room;
                    ho.Room.Place         = offer.Room.Place = dto.Place;
                    ho.Room.Place.Address = offer.Room.Place.Address = dto.Place.Address;

                    context.SaveChanges();
                    transaction.Complete();
                }
            }
            return(Ok());
        }
        /// <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 UserMarksViewModel(HistoricalOffer offer, User user)
        {
            OfferInfo offerInfo = offer.OfferInfo;

            OfferStartTime     = offerInfo.OfferStartTime.Date.ToString("dd/MM/yyyy");
            OfferEndTime       = offerInfo.OfferEndTime.Date.ToString("dd/MM/yyyy");
            OfferEndTimeDate   = offerInfo.OfferEndTime;
            OfferStartTimeDate = offerInfo.OfferStartTime;
            PlaceName          = offer.Room.Place.PlaceName;
            RoomNumber         = offer.Room.Number;
            Username           = user.Username;
            ReservedOfferId    = offer.Id;
        }
        public DisplayableOffer(HistoricalOffer offer)
        {
            OfferInfo offerInfo = offer.OfferInfo;

            OfferStartTime           = offerInfo.OfferStartTime.Date.ToString("dd/MM/yyyy");
            OfferEndTime             = offerInfo.OfferEndTime.Date.ToString("dd/MM/yyyy");
            OfferEndTimeDate         = offerInfo.OfferEndTime;
            OfferStartTimeDate       = offerInfo.OfferStartTime;
            Address                  = offer.Room.Place.Address;
            PlaceName                = offer.Room.Place.PlaceName;
            AvailableVacanciesNumber = offer.Room.Capacity;
            RoomNumber               = offer.Room.Number;
            Price            = offerInfo.Price;
            Description      = offerInfo.Description;
            OfferPublishTime = offerInfo.OfferPublishTime;
            Id       = offer.Id;
            IsBooked = offer.IsBooked;
        }
Example #6
0
        public IHttpActionResult GetHistorcialOffer(int id)
        {
            HistoricalOffer offer = null;

            using (var context = _provider.GetNewContext())
            {
                if (context is DbContext)
                {
                    (context as DbContext).Configuration.ProxyCreationEnabled = false;
                }
                offer = context.HistoricalOffers.FirstOrDefault(o => o.OriginalOfferId == id);
            }

            if (offer == null)
            {
                return((IHttpActionResult)NotFound());
            }
            return(Ok(offer));
        }
        /// <summary>
        /// Umożliwia rezygnacje z oferty danemu użytkownikowi
        /// </summary>
        /// <param name="context">Kontekst bazy danych</param>
        /// <param name="offerId">Id oferty</param>
        /// <param name="username">Nazwa użytkownika</param>
        /// <returns></returns>
        public static bool ResignOffer(IAccommodationContext context, int offerId, string username)
        {
            try
            {
                Offer           offer           = context.Offers.FirstOrDefault(o => o.Id == offerId);
                HistoricalOffer historicalOffer = context.HistoricalOffers.FirstOrDefault(ho => ho.OriginalOfferId == offer.Id);
                User            customer        = context.Users.FirstOrDefault(u => u.Username.Equals(username));
                User            vendor          = context.Users.FirstOrDefault(x => x.Id == offer.VendorId);

                if (offer == null || customer == null)
                {
                    return(false);
                }
                if (!offer.IsBooked)
                {
                    return(false);
                }


                OfferInfo offerInfo    = context.OfferInfo.FirstOrDefault(o => o.Id == offer.OfferInfoId);
                UserData  customerData = context.UserData.FirstOrDefault(x => x.Id == customer.UserDataId);
                UserData  vendorData   = context.UserData.FirstOrDefault(x => x.Id == vendor.UserDataId);
                Room      room         = context.Rooms.FirstOrDefault(x => x.Id == offer.RoomId);
                Place     place        = context.Places.FirstOrDefault(x => x.Id == room.PlaceId);
                offer.IsBooked           = false;
                offer.Customer           = null;
                historicalOffer.IsBooked = false;
                historicalOffer.Customer = null;
                context.SaveChanges();

                //Wysłanie powiadomienia mailowego, ostatni parametr oznacza rezygnację
                EmailNotification.SendNotification(offerInfo, place, vendorData, customerData, room, false);
                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Example #8
0
        public IHttpActionResult SaveOfferAsync(OfferAllDataDto dto)
        {
            using (var context = _provider.GetNewContext())
            {
                using (var transaction = new TransactionScope())
                {
                    Offer offerToAdd = new Offer();

                    User user = context.Users.FirstOrDefault(x => x.Id == dto.Vendor.Id);
                    if (user == null)
                    {
                        return(NotFound());
                    }

                    offerToAdd.Vendor    = user;
                    offerToAdd.OfferInfo = dto.OfferInfo;

                    Place place = context.Places.FirstOrDefault(p => p.PlaceName.Equals(dto.Place.PlaceName) &&
                                                                p.Address.City.Equals(dto.Place.Address.City) &&
                                                                p.Address.Street.Equals(dto.Place.Address.Street) &&
                                                                p.Address.LocalNumber == dto.Place.Address.LocalNumber);
                    if (place != null)
                    {
                        //istnieje to miejsce w bazie danych
                        Room room = context.Rooms.FirstOrDefault(r => r.PlaceId == place.Id && r.Number == dto.Room.Number);
                        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 <= dto.OfferInfo.OfferStartTime &&
                                                  offer.OfferInfo.OfferEndTime >= dto.OfferInfo.OfferStartTime) ||
                                        (offer.OfferInfo.OfferStartTime >= dto.OfferInfo.OfferStartTime &&
                                         offer.OfferInfo.OfferEndTime <= dto.OfferInfo.OfferEndTime)))
                            {
                                return(BadRequest());
                            }
                            //żadna oferta nie koliduje
                            offerToAdd.Room = room;
                        }
                        else
                        {
                            //nowy pokój
                            offerToAdd.Room       = dto.Room;
                            offerToAdd.Room.Place = place;
                        }
                    }
                    else
                    {
                        offerToAdd.Room               = dto.Room;
                        offerToAdd.Room.Place         = dto.Place;
                        offerToAdd.Room.Place.Address = dto.Place.Address;
                    }
                    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();
                    transaction.Complete();
                }
            }

            return(Ok(true));
        }
        /// <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);
            }
        }