public async Task <ActionResult> Listing(int id)
        {
            var itemQuery = await _listingService.Query(x => x.ID == id)
                            .Include(x => x.Category)
                            .Include(x => x.ListingMetas)
                            .Include(x => x.ListingMetas.Select(y => y.MetaField))
                            .Include(x => x.ListingStats)
                            .Include(x => x.ListingType)
                            .SelectAsync();

            var item = itemQuery.FirstOrDefault();

            if (item == null)
            {
                return(new HttpNotFoundResult());
            }

            var orders = _orderService.Queryable()
                         .Where(x => x.ListingID == id
                                //&& (x.Status != (int)Enum_OrderStatus.Pending || x.Status != (int)Enum_OrderStatus.Confirmed)
                                && (x.Status != (int)Enum_OrderStatus.Cancelled) &&
                                (x.FromDate.HasValue && x.ToDate.HasValue) &&
                                (x.FromDate >= DateTime.Now || x.ToDate >= DateTime.Now))
                         .ToList();

            List <DateTime> datesBooked = new List <DateTime>();

            foreach (var order in orders)
            {
                for (DateTime date = order.FromDate.Value; date <= order.ToDate.Value; date = date.Date.AddDays(1))
                {
                    datesBooked.Add(date);
                }
            }

            var reviews = await _listingReviewService
                          .Query(x => x.UserTo == item.UserID)
                          .Include(x => x.AspNetUserFrom)
                          .SelectAsync();

            var user = await UserManager.FindByIdAsync(item.UserID);

            var usuarios  = UserManager.Users.ToList();
            var itemModel = new ListingItemModel()
            {
                ListingCurrent = item,
                DatesBooked    = datesBooked,
                ListOrder      = orders,
                User           = user,
                ListUsers      = usuarios.ToList(),
                ListingReviews = reviews.ToList()
            };

            // Update stat count

            await _unitOfWorkAsync.SaveChangesAsync();

            return(View("~/Views/Manage/ListingCalendar.cshtml", itemModel));
        }
Exemple #2
0
        public async Task <ActionResult> Listing(int id)
        {
            var itemQuery = await _listingService.Query(x => x.ID == id)
                            .Include(x => x.Category)
                            .Include(x => x.ListingMetas)
                            .Include(x => x.ListingMetas.Select(y => y.MetaField))
                            .Include(x => x.ListingStats)
                            .Include(x => x.ListingType)
                            .SelectAsync();

            var item = itemQuery.FirstOrDefault();

            if (item == null)
            {
                return(new HttpNotFoundResult());
            }

            var orders = _orderService.Queryable()
                         .Where(x => x.ListingID == id &&
                                (x.Status != (int)Enum_OrderStatus.Pending || x.Status != (int)Enum_OrderStatus.Confirmed) &&
                                (x.FromDate.HasValue && x.ToDate.HasValue) &&
                                (x.FromDate >= DateTime.Now || x.ToDate >= DateTime.Now))
                         .ToList();

            List <DateTime> datesBooked = new List <DateTime>();

            foreach (var order in orders)
            {
                for (DateTime date = order.FromDate.Value; date <= order.ToDate.Value; date = date.Date.AddDays(1))
                {
                    datesBooked.Add(date);
                }
            }

            var pictures = await _listingPictureservice.Query(x => x.ListingID == id).SelectAsync();

            var picturesModel = pictures.Select(x =>
                                                new PictureModel()
            {
                ID        = x.PictureID,
                Url       = ImageHelper.GetListingImagePath(x.PictureID),
                ListingID = x.ListingID,
                Ordering  = x.Ordering
            }).OrderBy(x => x.Ordering).ToList();

            var reviews = await _listingReviewService
                          .Query(x => x.UserTo == item.UserID)
                          .Include(x => x.AspNetUserFrom)
                          .SelectAsync();

            var user = await UserManager.FindByIdAsync(item.UserID);

            var itemModel = new ListingItemModel()
            {
                ListingCurrent = item,
                Pictures       = picturesModel,
                DatesBooked    = datesBooked,
                User           = user,
                ListingReviews = reviews.ToList()
            };

            // Update stat count
            var itemStat = item.ListingStats.FirstOrDefault();

            if (itemStat == null)
            {
                _ListingStatservice.Insert(new ListingStat()
                {
                    ListingID   = id,
                    CountView   = 1,
                    Created     = DateTime.Now,
                    ObjectState = Repository.Pattern.Infrastructure.ObjectState.Added
                });
            }
            else
            {
                itemStat.CountView++;
                itemStat.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Modified;
                _ListingStatservice.Update(itemStat);
            }

            await _unitOfWorkAsync.SaveChangesAsync();

            return(View("~/Views/Listing/Listing.cshtml", itemModel));
        }