public async Task <IActionResult> GetAuction(int auctionId)
        {
            Auction auction = await this._context.auctions
                              .Where(a => a.id == auctionId)
                              .Include(u => u.user)
                              .Include(a => a.biddingList)
                              .ThenInclude(u => u.user)
                              .FirstOrDefaultAsync();

            AuctionView data = await this.GetImageView(auction.imageId);

            if (auction.state != Auction.AuctionState.OPEN)
            {
                data.open = false;
            }
            else
            {
                TimeSpan diff = auction.closingDateTime - DateTime.Now;
                data.remainingTime = this.GetRemainingTime(diff);
                data.open          = true;
            }

            auction.biddingList = auction.biddingList.OrderByDescending(b => b.bidTime).ToList();

            data.auction = auction;

            return(PartialView("Auction", data));
        }
示例#2
0
        public IActionResult AddListing(AuctionView model)
        {
            if (HttpContext.Session.GetInt32("id") == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            int user_id = (int)HttpContext.Session.GetInt32("id");

            if (ModelState.IsValid)
            {
                DateTime    date = DateTime.Now;
                AuctionItem item = new AuctionItem
                {
                    product_name = model.product_name,
                    description  = model.description,
                    starting_bid = model.starting_bid,
                    end_date     = model.end_date,
                    created_date = date,
                };
                auctionFactory.AddListing(user_id, item);
                auctionFactory.AddBid(user_id, model.starting_bid);

                return(RedirectToAction("Index"));
            }
            return(View(model));
        }
        //Get Image data to be shown on website
        public async Task <AuctionView> GetImageView(int index)
        {
            IList <Image> images = await this._context.images.ToListAsync();

            Image image = images.Where(i => i.id == index).FirstOrDefault();

            AuctionView model = new AuctionView()
            {
                base64Data = Convert.ToBase64String(image.data)
            };

            return(model);
        }
        public async Task <IActionResult> Index()
        {
            var auctionPortalContext = this._context.auctions;

            IList <Auction> list = await auctionPortalContext
                                   .Where(a => a.state == Auction.AuctionState.OPEN)
                                   .OrderByDescending(a => a.creationDateTime)
                                   .Take(12)
                                   .Include(u => u.user)
                                   .Include(a => a.biddingList)
                                   .ThenInclude(a => a.user)
                                   .ToListAsync();

            IList <AuctionView> auctionList = new List <AuctionView>();

            foreach (var el in list)
            {
                AuctionView data = await this.GetImageView(el.imageId);

                if (DateTime.Compare(el.closingDateTime, DateTime.Now) < 0 && el.state == Auction.AuctionState.OPEN)
                {
                    await this.closeAuction(el.id);
                }
                else
                {
                    TimeSpan diff = el.closingDateTime - DateTime.Now;
                    data.remainingTime = this.GetRemainingTime(diff);
                }

                el.biddingList = el.biddingList.OrderByDescending(b => b.bidTime).ToList();

                data.auction = el;

                data.open = true;

                auctionList.Add(data);
            }

            SearchModel searchModel = new SearchModel()
            {
                auctionList = auctionList,
                numPages    = Decimal.ToInt32(Math.Ceiling(Convert.ToDecimal(auctionPortalContext.Where(a => a.state == Auction.AuctionState.OPEN).Count() / 12.0))),
                currPage    = 1
            };

            return(View(searchModel));
        }
        public async Task <IActionResult> Details(int?auctionId)
        {
            if (auctionId == null)
            {
                return(NotFound());
            }

            var auction = await _context.auctions
                          .Where(m => m.id == auctionId)
                          .Include(u => u.user)
                          .Include(a => a.biddingList)
                          .ThenInclude(u => u.user)
                          .FirstOrDefaultAsync();

            if (auction == null)
            {
                return(NotFound());
            }

            auction.biddingList = auction.biddingList.OrderByDescending(b => b.bidTime).ToList();

            AuctionView auctionView = await this.GetImageView(auction.imageId);

            if (DateTime.Compare(auction.closingDateTime, DateTime.Now) < 0 && auction.state == Auction.AuctionState.OPEN)
            {
                await this.closeAuction(auction.id);
            }
            else
            {
                TimeSpan diff = auction.closingDateTime - DateTime.Now;
                auctionView.remainingTime = this.GetRemainingTime(diff);
            }

            if (auction.state == Auction.AuctionState.OPEN)
            {
                auctionView.open = true;
            }
            else
            {
                auctionView.open = false;
            }

            auctionView.auction = auction;

            return(View(auctionView));
        }
        //Show me all auctions I created
        public async Task <IActionResult> MyAuctions()
        {
            User user = await this.userManager.GetUserAsync(base.User);

            if (user == null)
            {
                return(RedirectToAction(nameof(UserController.Login), "User"));
            }

            IList <Auction> auctions = await this._context.auctions.Where(u => u.userId == user.Id)
                                       .Include(u => u.user)
                                       .Include(a => a.biddingList)
                                       .ThenInclude(u => u.user)
                                       .OrderByDescending(a => a.creationDateTime)
                                       .ToListAsync();

            IList <AuctionView> auctionViews = new List <AuctionView>();

            foreach (var item in auctions)
            {
                AuctionView auctionView = await GetImageView(item.id);

                if (DateTime.Compare(item.closingDateTime, DateTime.Now) < 0 && item.state == Auction.AuctionState.OPEN)
                {
                    await this.closeAuction(item.id);

                    auctionView.open = false;
                }
                else
                {
                    TimeSpan diff = item.closingDateTime - DateTime.Now;
                    auctionView.remainingTime = this.GetRemainingTime(diff);
                    auctionView.open          = true;

                    auctionView.auction = item;
                }

                auctionViews.Add(auctionView);
            }

            return(View(auctionViews));
        }
        //Show me details of my auction
        public async Task <IActionResult> MyAuctionDetails(int?auctionId)
        {
            if (auctionId == null)
            {
                return(NotFound());
            }

            var auction = await _context.auctions.FirstOrDefaultAsync(m => m.id == auctionId);

            if (auction == null)
            {
                return(NotFound());
            }

            AuctionView auctionView = await this.GetImageView(auction.imageId);

            auctionView.auction = auction;

            return(View(auctionView));
        }
        // GET: Auction/AdminDetails/5
        //Different Views for Admin and regular User
        public async Task <IActionResult> AdminDetails(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var auction = await _context.auctions.Include(a => a.biddingList).ThenInclude(u => u.user).FirstOrDefaultAsync(m => m.id == id);

            if (auction == null)
            {
                return(NotFound());
            }

            AuctionView auctionView = await this.GetImageView(auction.imageId);

            auctionView.auction = auction;

            return(View(auctionView));
        }
        private void AuctionFormShow(int crudMode, OrderEF selectedOrder = null)
        {
            AppJournal.Write("Auctions List", "Open auction - " + (crudMode == 1 ? "new" : SelectedAuction.number), true);

            if (crudMode == 1)
            {
                SelectedAuction = null;
            }

            var auctionViewModel = new AuctionViewModel(SelectedAuction, selectedOrder, (MarketPlaceEnum)SelectedSite.id)
            {
                Description = "Аукцион № " + (crudMode == 2 ? SelectedAuction.number : ""), DockLocation = altaik.baseapp.helper.PanelDockLocationEnum.DetailsDocument
            };
            var auctionView = new AuctionView();

            auctionViewModel.View = auctionView;

            Workspace.This.Panels.Add(auctionViewModel);
            Workspace.This.ActiveDocument = auctionViewModel;
        }
示例#10
0
        public IActionResult CreateAuction(AuctionView model)
        {
            if (ActiveUser == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            if (model.end_date == null)
            {
                ModelState.AddModelError("end_date", "End Date is required.");
            }
            else if (model.end_date < DateTime.Now)
            {
                ModelState.AddModelError("end_date", "End Date must be in the future.");
            }
            if (model.starting_bid == 0)
            {
                ModelState.AddModelError("starting_bid ", "Please specify your starting bid.");
            }

            if (ModelState.IsValid)
            {
                User         user       = _dbContext.users.Where(n => n.user_id == HttpContext.Session.GetInt32("UserId")).SingleOrDefault();
                AuctionEvent newAuction = new AuctionEvent
                {
                    product_name = model.product_name,
                    description  = model.description,
                    starting_bid = model.starting_bid,
                    end_date     = model.end_date,
                    user_id      = user.user_id,
                    highest_bid  = model.starting_bid
                };
                _dbContext.auctions.Add(newAuction);
                _dbContext.SaveChanges();
                HttpContext.Session.SetInt32("ItemId", newAuction.auction_id);
                return(Redirect("dashboard"));
            }
            return(View("CreateAuction"));
        }
        public async Task <IActionResult> Search(SearchModel model)
        {
            IQueryable <Auction> query = this._context.auctions;

            IList <Auction> auctions;
            double          numAuctions;

            if (!model.wonAuctions)
            {
                if (model.name != null)
                {
                    query = query.Where(auction => auction.name.ToLower().Contains(model.name));
                }

                if (model.minPrice != null)
                {
                    query = query.Where(auction => auction.startingPrice + auction.accession >= int.Parse(model.minPrice));
                }

                if (model.maxPrice != null)
                {
                    query = query.Where(auction => auction.startingPrice + auction.accession <= int.Parse(model.maxPrice));
                }

                if (model.state != null)
                {
                    switch (model.state)
                    {
                    case "1": query = query.Where(auction => auction.state == Auction.AuctionState.DRAFT);
                        break;

                    case "2": query = query.Where(auction => auction.state == Auction.AuctionState.READY);
                        break;

                    case "3": query = query.Where(auction => auction.state == Auction.AuctionState.OPEN);
                        break;

                    case "4": query = query.Where(auction => auction.state == Auction.AuctionState.SOLD);
                        break;

                    case "5": query = query.Where(auction => auction.state == Auction.AuctionState.EXPIRED);
                        break;

                    case "6": query = query.Where(auction => auction.state == Auction.AuctionState.DELETED);
                        break;
                    }
                }

                numAuctions = query.Count();

                auctions = await query
                           .OrderByDescending(auction => auction.openingDateTime)
                           .Skip((model.currPage - 1) * 12)
                           .Take(12)
                           .Include(u => u.user)
                           .Include(a => a.biddingList)
                           .ThenInclude(u => u.user)
                           .ToListAsync();
            }
            else
            {
                User loggedInUser = await this.userManager.GetUserAsync(base.User);

                IList <Auction> auctionList = this._context.auctions
                                              .Where(a => a.state == Auction.AuctionState.SOLD)
                                              .Include(u => u.user)
                                              .Include(a => a.biddingList)
                                              .ThenInclude(u => u.user)
                                              .ToList();

                auctions = new List <Auction>();

                foreach (var item in auctionList)
                {
                    if (item.biddingList.Last().userId == loggedInUser.Id)
                    {
                        auctions.Add(item);
                    }
                }

                numAuctions = auctions.Count;
            }

            IList <AuctionView> auctionViews = new List <AuctionView>();

            foreach (Auction a in auctions)
            {
                AuctionView av = await this.GetImageView(a.imageId);

                if (DateTime.Compare(a.closingDateTime, DateTime.Now) < 0 && a.state == Auction.AuctionState.OPEN)
                {
                    await this.closeAuction(a.id);
                }
                else
                {
                    TimeSpan diff = a.closingDateTime - DateTime.Now;
                    av.remainingTime = this.GetRemainingTime(diff);
                }

                if (a.state == Auction.AuctionState.OPEN)
                {
                    av.open = true;
                }
                else
                {
                    av.open = false;
                }

                a.biddingList = a.biddingList.OrderByDescending(b => b.bidTime).ToList();

                av.auction = a;

                auctionViews.Add(av);
            }

            SearchModel searchModel = new SearchModel()
            {
                auctionList = auctionViews,
                numPages    = Decimal.ToInt32(Math.Ceiling(Convert.ToDecimal(numAuctions / 12.0))),
                currPage    = model.currPage
            };

            if (model.second == true)
            {
                return(PartialView("Pagination", searchModel));
            }
            return(PartialView("AuctionList", searchModel));
        }