Exemple #1
0
        public async Task <IActionResult> SuccessAsync()
        {
            var applicationDbContext = await _context.Orders.Include(o => o.Category)
                                       .Include(o => o.CustomUser)
                                       .Include(o => o.OrderStatus)
                                       .Include(o => o.Item)
                                       .OrderByDescending(o => o.Updated).ToListAsync();

            List <Order> orderList = new List <Order>();

            foreach (var item in applicationDbContext)
            {
                var trackingNumber = item.TrackingNumber;
                if (!orderList.Select(o => o.TrackingNumber).Contains(trackingNumber))
                {
                    orderList.Add(item);
                }
            }

            await DeleteOrder180DayAgoAsync();

            var TrackingNumber = CreateTrackingNumber();

            var CartList = await _context.Cart.Where(i => i.CustomUserId == _userManager.GetUserId(User) && !i.IsSold)
                           .Include(i => i.Category)
                           .Include(i => i.CustomUser)
                           .ToListAsync();

            var ReceivedStatus = _context.OrderStatuses.FirstOrDefault(o => o.Name == "Received").Id;
            var user           = await _userManager.FindByIdAsync(CartList.First().CustomUserId);

            var currentTime = DateTimeOffset.Now;

            foreach (var items in CartList)
            {
                //update number of sold item
                var item_of_shop = _context.Item.FirstOrDefault(i => i.Id == items.ItemId);
                item_of_shop.Number_Of_Sold += 1;
                await _canUserComment.AddUserToItemAsync(user.Id, items.ItemId);

                _context.Update(item_of_shop);
                await _context.SaveChangesAsync();

                Order newOrder = new Order
                {
                    TrackingNumber = TrackingNumber,
                    Name           = items.Name,
                    Price          = items.Price,
                    CustomUserId   = items.CustomUserId,
                    CategoryId     = items.CategoryId,
                    ItemId         = items.ItemId,
                    Quantity       = items.Quantity,
                    IsSold         = true,
                    ImageData      = items.ImageData,
                    ContentType    = items.ContentType,
                    Date           = currentTime,
                    Notes          = items.Notes,
                    Slug           = items.Slug,
                    IsViewByOwner  = false,
                    OrderStatusId  = ReceivedStatus,
                    TrackingLink   = "We are currently working on tracking link!",
                    Created        = currentTime,
                    Updated        = currentTime,
                    FirstName      = user.FirstName,
                    LastName       = user.LastName,
                    PhoneNumber    = user.PhoneNumber,
                    Email          = user.Email,
                    Adress         = user.Street,
                    State          = user.State,
                    City           = user.City,
                    Zipcode        = user.Zipcode
                };
                _context.Add(newOrder);
                await _context.SaveChangesAsync();

                _context.Cart.Remove(items);
                await _context.SaveChangesAsync();
            }


            var callbackUrl = Url.Action(
                "TrackOrderDetails",
                "Orders",
                values: new { TrackingNumber = TrackingNumber },
                protocol: Request.Scheme);

            await _emailSender.SendEmailAsync(user.Email, "Lan's Market received your order",
                                              $"<h1>You successfully placed an order on Lan's Market at {(currentTime).ToString("dd MMMM yyyy - hh:mm tt")}</h1> <br> <a style='background-color: #555555;border: none;color: white;padding: 15px 32px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;' href='{HtmlEncoder.Default.Encode(callbackUrl)}'>Clicking here to track your order</a>  <br> <h3>Your Tracking Number is: {TrackingNumber} </h3> <br>");


            await _emailSender.SendEmailAsync("*****@*****.**", "New order has been placed at Lan's Market",
                                              $"<h1>A new order have been placed at {(currentTime).ToString("dd MMMM yyyy - hh:mm tt")}</h1> <br> <a style='background-color: #555555;border: none;color: white;padding: 15px 32px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;' href='{HtmlEncoder.Default.Encode(callbackUrl)}'>Clicking here to go to order</a>  <br> <h3>Tracking Number is: {TrackingNumber} </h3> <br>");


            ViewData["TrackingNumber"] = TrackingNumber;
            return(View());
        }