Beispiel #1
0
        public async Task <IActionResult> Summary()
        {
            ordersVM = new OrdersVM()
            {
                Orders = new Models.Orders()
            };
            ordersVM.Orders.OrderTotal = 0;

            var             CIdentity = (ClaimsIdentity)this.User.Identity;
            var             claim     = CIdentity.FindFirst(ClaimTypes.NameIdentifier);
            ApplicationUser user      = await _db.ApplicationUsers.Where(u => u.Id == claim.Value).FirstOrDefaultAsync();

            var shoppingCart = _db.ShoppingCart.Where(s => s.ApplicationUserId == claim.Value);

            if (shoppingCart != null)
            {
                ordersVM.lstshoppingCarts = shoppingCart.ToList();
            }
            foreach (var i in ordersVM.lstshoppingCarts)
            {
                i.Menu = await _db.Menu.FirstOrDefaultAsync(m => m.Id == i.MenuId);

                ordersVM.Orders.OrderTotal = ordersVM.Orders.OrderTotal + (i.Menu.Price * i.Count);
                i.Menu.Descrption          = SD.ConvertToRawHtml(i.Menu.Descrption);
            }
            ordersVM.Orders.OrderTotalOriginal = ordersVM.Orders.OrderTotal;
            ordersVM.Orders.PickupName         = user.Name;
            ordersVM.Orders.Phone     = user.PhoneNumber;
            ordersVM.Orders.PicupTime = DateTime.Now;

            if (HttpContext.Session.GetString(SD.CouponCodeSession) != null)
            {
                ordersVM.Orders.CouponCode = HttpContext.Session.GetString(SD.CouponCodeSession);
                var coupon = await _db.Coupons.Where(c => c.Name.ToLower() == ordersVM.Orders.CouponCode.ToLower()).FirstOrDefaultAsync();

                ordersVM.Orders.OrderTotal = SD.CalculateDiscount(coupon, ordersVM.Orders.OrderTotalOriginal);
            }
            return(View(ordersVM));
        }
Beispiel #2
0
        public async Task <IActionResult> SummaryPost(string stripeEmail, string stripeToken)
        {
            var CIdentity = (ClaimsIdentity)this.User.Identity;
            var claim     = CIdentity.FindFirst(ClaimTypes.NameIdentifier);

            ordersVM.lstshoppingCarts = await _db.ShoppingCart.Where(s => s.ApplicationUserId == claim.Value).ToListAsync();

            ordersVM.Orders.PaymentStatus     = SD.PayementPending;
            ordersVM.Orders.OrderDate         = DateTime.Now;
            ordersVM.Orders.ApplicationUserId = claim.Value;
            ordersVM.Orders.Status            = SD.PayementPending;
            ordersVM.Orders.PicupTime         = Convert.ToDateTime(ordersVM.Orders.PicupTime.ToShortDateString() + " " + ordersVM.Orders.PicupTime.ToShortTimeString());

            List <OrderDetails> lstorderDetails = new List <OrderDetails>();

            _db.Orders.Add(ordersVM.Orders);
            await _db.SaveChangesAsync();

            ordersVM.Orders.OrderTotalOriginal = 0;

            foreach (var i in ordersVM.lstshoppingCarts)
            {
                i.Menu = await _db.Menu.FirstOrDefaultAsync(m => m.Id == i.MenuId);

                OrderDetails orderDetails = new OrderDetails
                {
                    MenuId      = i.MenuId,
                    OrderId     = ordersVM.Orders.Id,
                    Description = i.Menu.Descrption,
                    Name        = i.Menu.Name,
                    Price       = i.Menu.Price,
                    Count       = i.Count
                };
                ordersVM.Orders.OrderTotalOriginal += orderDetails.Count * orderDetails.Price;
                _db.OrderDetails.Add(orderDetails);
            }


            if (HttpContext.Session.GetString(SD.CouponCodeSession) != null)
            {
                ordersVM.Orders.CouponCode = HttpContext.Session.GetString(SD.CouponCodeSession);
                var coupon = await _db.Coupons.Where(c => c.Name.ToLower() == ordersVM.Orders.CouponCode.ToLower()).FirstOrDefaultAsync();

                ordersVM.Orders.OrderTotal = SD.CalculateDiscount(coupon, ordersVM.Orders.OrderTotalOriginal);
            }
            else
            {
                ordersVM.Orders.OrderTotal = ordersVM.Orders.OrderTotalOriginal;
            }
            ordersVM.Orders.CouponCodeDiscount = ordersVM.Orders.OrderTotalOriginal - ordersVM.Orders.OrderTotal;
            //await _db.SaveChangesAsync();

            _db.ShoppingCart.RemoveRange(ordersVM.lstshoppingCarts);
            HttpContext.Session.SetInt32(SD.CartCountSession, 0);
            await _db.SaveChangesAsync();

            //Stripe
            if (stripeToken != null)
            {
                var customers = new CustomerService();
                var charges   = new ChargeService();

                var customer = customers.Create(new CustomerCreateOptions
                {
                    Email       = stripeEmail,
                    SourceToken = stripeToken
                });

                var charge = charges.Create(new ChargeCreateOptions
                {
                    Amount      = Convert.ToInt32(ordersVM.Orders.OrderTotal * 100),
                    Description = "Order #" + ordersVM.Orders.Id,
                    Currency    = "usd",
                    CustomerId  = customer.Id
                });
                ordersVM.Orders.TransactionId = charge.BalanceTransactionId;
                if (charge.Status.ToLower() == "succeeded")
                {
                    var subject = "Spice -- Order " + ordersVM.Orders.Id + " Submitted";
                    var email   = _db.Users.Where(u => u.Id == claim.Value).FirstOrDefault();
                    var name    = _db.ApplicationUsers.Where(u => u.Id == claim.Value).FirstOrDefault();
                    var body    = "Dear <b>" + name.Name + "</b><br>Order <b>" + ordersVM.Orders.Id + "</b> has been submitted successfully<br> We will notify you when your order is ready for pick up.<b>Order Total:</b> $" + ordersVM.Orders.OrderTotal + "<br> Thank you for using us<br> Lokking forward to serve next time.<br>Spice Management<br><b>The Spicer The Better</b>";
                    await _es.SendEmailAsync(name.Email, subject, body);

                    ordersVM.Orders.PaymentStatus = SD.PayementApproved;
                    ordersVM.Orders.Status        = SD.OrderSubmitted;
                }
                else
                {
                    ordersVM.Orders.PaymentStatus = SD.PayementRejected;
                }
            }
            else
            {
                ordersVM.Orders.PaymentStatus = SD.PayementRejected;
            }
            await _db.SaveChangesAsync();

            //return RedirectToAction(nameof(Index));
            return(RedirectToAction("Confirm", "Orders", new { id = ordersVM.Orders.Id }));
        }