// GET: Listings/Details/5 public async Task <IActionResult> Details(int?id) { if (id == null) { return(NotFound()); } var listing = await AuctionContext.Listings .Include(l => l.Auction) .Include(l => l.Item) .ThenInclude(itemMedia0 => itemMedia0.ItemMedia) .SingleOrDefaultAsync(m => m.Id == id); if (listing == null) { return(NotFound()); } var sponsor = AuctionContext.Sponsors.SingleOrDefaultAsync(sponsor0 => sponsor0.Id == listing.Item.SponsorId).Result; var myView = new BidHistoryViewModel { ListingId = listing.Id, MyListing = listing, CurrentBid = listing.MinimumBid, Increment = listing.Increment, MinimumBid = listing.MinimumBid + listing.Increment, MySponsor = sponsor.Name, }; return(View(myView)); }
public async Task <IActionResult> Details(int id, [Bind("FirstName,LastName,Email,Phone,Amount")] BidDetailsViewModel myBidDetails) { var listing = await AuctionContext.Listings .Include(l => l.Auction) .Include(listing0 => listing0.Item) .ThenInclude(itemMedia0 => itemMedia0.ItemMedia) .Include(listing0 => listing0.Item) .ThenInclude(itemSponsor => itemSponsor.Sponsor) .SingleOrDefaultAsync(m => m.Id == id); var minBid = listing.MinimumBid + listing.Increment; var mybidhistory = new BidHistoryViewModel { ListingId = listing.Id, MyListing = listing, Increment = listing.Increment, MySponsor = listing.Item.Sponsor.Name, CurrentBid = listing.MinimumBid, MinimumBid = minBid, MyBidDetails = myBidDetails }; if (minBid > myBidDetails.Amount) { ModelState.AddModelError("Bid", "New bid must be higher than or equal to the minimum bid"); } if (myBidDetails.Amount % listing.Increment != 0) { ModelState.AddModelError("Bid", "Bid must be in specified increment"); } if (ModelState.IsValid) { User myuser = new User(); var myUsers = await AuctionContext.Users.ToListAsync(); foreach (var person in myUsers) { if (person.Email.Equals(myBidDetails.Email)) { myuser = person; } else { myuser.Email = null; } } if (myuser.Email == null) { myBidDetails.Phone = myBidDetails.Phone.Replace("-", ""); myuser = new User { FirstName = myBidDetails.FirstName, LastName = myBidDetails.LastName, Email = myBidDetails.Email, Phone = myBidDetails.Phone, RoleId = RoleId.User }; AuctionContext.Add(myuser); await AuctionContext.SaveChangesAsync(); var user = await AuctionContext.Users.FirstOrDefaultAsync(m => m.Email == myuser.Email); myuser = user; } var mybid = new BidHistory { Listing = listing, ListingId = id, UserId = myuser.UserId, User = myuser, Amount = myBidDetails.Amount, Date = DateTime.Today }; listing.MinimumBid = mybid.Amount; AuctionContext.Add(mybid); await AuctionContext.SaveChangesAsync(); AuctionContext.Update(listing); await AuctionContext.SaveChangesAsync(); var bidHistory = await AuctionContext.BidHistories .SingleOrDefaultAsync(m => m.User.UserId == mybid.User.UserId && m.Listing.Id == mybid.Listing.Id && m.Amount == mybid.Amount); TempData["SuccessMessage"] = $"Successfully placed bid on {listing.Item.Name}."; return(RedirectToAction(nameof(BidHistoriesController.Details), new RouteValueDictionary(new { controller = "BidHistories", action = "Details", id = bidHistory.Id }))); } return(View(mybidhistory)); }