public IActionResult SummaryPOST(string stripeToken)
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            //initialize object
            ShoppingCartVM.OrderHeader.ApplicationUser = _unitOfWork.ApplicationUser.GetFirstOrDefault
                                                             (x => x.Id == claim.Value, includeProperties: "Company");
            ShoppingCartVM.ListCart = _unitOfWork.ShoppingCart.GetAll
                                          (x => x.ApplicationUserId == claim.Value, includeProperties: "Product");

            //initialize status
            ShoppingCartVM.OrderHeader.PaymentStatus     = SD.PaymentStatusPending;
            ShoppingCartVM.OrderHeader.OrderStatus       = SD.StatusPending;
            ShoppingCartVM.OrderHeader.ApplicationUserId = claim.Value;
            ShoppingCartVM.OrderHeader.OrderDate         = DateTime.Now;

            _unitOfWork.OrderHeader.Add(ShoppingCartVM.OrderHeader);
            _unitOfWork.Save();

            foreach (var item in ShoppingCartVM.ListCart)
            {
                item.Price = SD.GetPriceBasedOnQuantity(item.Count, item.Product.Price, item.Product.Price50, item.Product.Price100);

                OrderDetails orderDetails = new OrderDetails()
                {
                    ProductId = item.ProductId,
                    OrderId   = ShoppingCartVM.OrderHeader.Id,
                    Price     = item.Price,
                    Count     = item.Count
                };

                ShoppingCartVM.OrderHeader.OrderTotal += (orderDetails.Price * orderDetails.Count);
                _unitOfWork.OrderDetails.Add(orderDetails);
            }
            ;

            //remove all list of shopping cart
            _unitOfWork.ShoppingCart.RemoveRange(ShoppingCartVM.ListCart);
            _unitOfWork.Save();
            HttpContext.Session.SetInt32(SD.ssShoppingCart, 0);

            if (stripeToken == null)
            {
                //order will be created for delayed payment for auth company
                ShoppingCartVM.OrderHeader.PaymentDueDate = DateTime.Now.AddDays(30);
                ShoppingCartVM.OrderHeader.PaymentStatus  = SD.PaymentStatusDelayedPayment;
                ShoppingCartVM.OrderHeader.OrderStatus    = SD.StatusApproved;
            }
            else
            {
                //process the payment
                var options = new ChargeCreateOptions()
                {
                    Amount      = Convert.ToInt32(ShoppingCartVM.OrderHeader.OrderTotal * 100),//in cent
                    Currency    = "usd",
                    Description = $"Order ID: {ShoppingCartVM.OrderHeader.Id}",
                    Source      = stripeToken
                };

                //create charge service
                var    service = new ChargeService();
                Charge charge  = service.Create(options);

                //check for balance in acc
                if (charge.BalanceTransactionId == null)
                {
                    ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
                }
                else
                {
                    ShoppingCartVM.OrderHeader.TransactionId = charge.BalanceTransactionId;
                }

                //check for charge status
                if (charge.Status.ToLower() == "succeeded")
                {
                    ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                    ShoppingCartVM.OrderHeader.OrderStatus   = SD.StatusApproved;
                    ShoppingCartVM.OrderHeader.PaymentDate   = DateTime.Now;
                }
            }

            _unitOfWork.Save();
            return(RedirectToAction(nameof(OrderConfirmation), "Cart", new { id = ShoppingCartVM.OrderHeader.Id }));
        }
Пример #2
0
        public async Task <IActionResult> OnPostAsync(string stripeToken)
        {
            ShoppingCartVM.Order.PaymentStatus = SD.PaymentStatus.APPROVED;
            ShoppingCartVM.Order.OrderStatus   = SD.OrderStatus.APPROVED;
            ShoppingCartVM.Order.OrderDate     = DateTime.Now;
            ShoppingCartVM.CartItems           = await _cartService.GetAll(ShoppingCartVM.Order.UserId);

            ShoppingCartVM.Order.OrderTotal = CalculateSum(ShoppingCartVM.CartItems);

            if (ModelState.IsValid)
            {
                try
                {
                    if (stripeToken != null)
                    {
                        Models.Order newOrder = await _orderService.Create(ShoppingCartVM);

                        if (newOrder == null)
                        {
                            throw new Exception("Order creation failed");
                        }

                        HttpContext.Session.SetInt32(SD.CART_SESSION_KEY, 0);

                        var chargeOptions = new ChargeCreateOptions
                        {
                            Amount      = Convert.ToInt32(newOrder.OrderTotal * 100),
                            Currency    = "MYR",
                            Description = $"E-Mall Order No. {newOrder.Id}",
                            Source      = stripeToken
                        };

                        var    chargeService = new ChargeService();
                        Charge charge        = chargeService.Create(chargeOptions);

                        if (charge.Id == null)
                        {
                            newOrder.PaymentStatus = SD.PaymentStatus.REJECTED;
                        }
                        else
                        {
                            newOrder.TransactionId = charge.Id;
                        }

                        if (charge.Status.ToLower() == SD.StripeChargeStatus.SUCCEEDED)
                        {
                            newOrder.PaymentStatus = SD.PaymentStatus.APPROVED;
                            newOrder.OrderStatus   = SD.OrderStatus.APPROVED;
                            newOrder.PaymentDate   = DateTime.Now;
                        }

                        await _orderService.Update(newOrder);

                        SuccessMessage = "Thank you! Your order has been placed successfully!";
                    }
                }
                catch
                {
                    ErrorMessage = "There is an error placing your order. Please try again later.";
                }
            }
            else
            {
                ErrorMessage = "The information provided is not valid.";
            }
            return(RedirectToPage());
        }
Пример #3
0
        public IActionResult SummaryPost(string stripeToken)
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var id             = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier).Value;

            ShoppingCartVM.OrderHeader.ApplicationUser = _unitOfWork.ApplicationUser.GetFirstOrDefault(x => x.Id == id, includeProperties: "Company");
            ShoppingCartVM.ListCart = _unitOfWork.ShoppingCart.GetAll(x => x.ApplicationUserId == id, includeProperties: "Product");

            ShoppingCartVM.OrderHeader.PaymentStatus     = SD.PaymentStatusPending;
            ShoppingCartVM.OrderHeader.OrderStatus       = SD.OrderStatusPending;
            ShoppingCartVM.OrderHeader.ApplicationUserId = id;
            ShoppingCartVM.OrderHeader.OrderDate         = DateTime.Now;

            _unitOfWork.OrderHeader.Add(ShoppingCartVM.OrderHeader);
            _unitOfWork.Save();

            foreach (var item in ShoppingCartVM.ListCart)
            {
                item.Price = SD.GetPriceBasedOnQuantity(item.Count, item.Product.Price,
                                                        item.Product.Price50, item.Product.Price100);
                OrderDetails orderDetails = new OrderDetails()
                {
                    ProductId = item.ProductId,
                    OrderId   = ShoppingCartVM.OrderHeader.Id,
                    Price     = item.Price,
                    Count     = item.Count
                };
                ShoppingCartVM.OrderHeader.OrderTotal += orderDetails.Count * orderDetails.Price;
                _unitOfWork.OrderDetails.Add(orderDetails);
            }

            _unitOfWork.ShoppingCart.RemoveRange(ShoppingCartVM.ListCart);
            HttpContext.Session.SetInt32(SD.ShoppingCartSession, 0);
            _unitOfWork.Save();

            if (stripeToken == null) // Authorized user is placing order -> delayed payment
            {
                ShoppingCartVM.OrderHeader.PaymentDueDate = DateTime.Now.AddDays(30);
                ShoppingCartVM.OrderHeader.PaymentStatus  = SD.PaymentStatusDelayedPayment;
                ShoppingCartVM.OrderHeader.OrderStatus    = SD.OrderStatusApproved;
            }
            else
            {
                var options = new ChargeCreateOptions
                {
                    Amount      = Convert.ToInt32(ShoppingCartVM.OrderHeader.OrderTotal * 100),
                    Currency    = "usd",
                    Description = "Order ID : " + ShoppingCartVM.OrderHeader.Id,
                    Source      = stripeToken
                };

                var    service = new ChargeService();
                Charge charge  = service.Create(options);

                if (charge.Id == null)
                {
                    ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
                }
                else
                {
                    ShoppingCartVM.OrderHeader.TransactionId = charge.Id;
                }
                if (charge.Status.ToLower() == "succeeded")
                {
                    ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                    ShoppingCartVM.OrderHeader.OrderStatus   = SD.OrderStatusApproved;
                    ShoppingCartVM.OrderHeader.PaymentDate   = DateTime.Now;
                }
            }
            _unitOfWork.Save();

            return(RedirectToAction("OrderConfirmation", "Cart", new { id = ShoppingCartVM.OrderHeader.Id }));
        }
Пример #4
0
        public async Task <IActionResult> OnPostAsync()
        {
            // Pizza builder
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            pizzaOrder.IsComplete = false;

            _context.PizzaOrders.Add(pizzaOrder);
            await _context.SaveChangesAsync();

            // Stripe create charge
            var chargeOptions = new ChargeCreateOptions
            {
                Amount   = pizzaOrder.Cost,
                Currency = "usd",
                Source   = "tok_visa",
            };


            // Only assign shipping details to a charge object if delivery is selected
            if (pizzaOrder.IsDelivery == true)
            {
                var shippingOptions = new ChargeShippingOptions
                {
                    Name    = shippingAddress.FirstName + " " + shippingAddress.LastName,
                    Address = new AddressOptions()
                    {
                        Line1      = shippingAddress.Line1,
                        City       = shippingAddress.City,
                        State      = shippingAddress.State,
                        PostalCode = shippingAddress.PostalCode.ToString()
                    }
                };

                chargeOptions.Shipping = shippingOptions;
            }

            var service = new ChargeService();

            TempData["OrderSize"]     = pizzaOrder.Size;
            TempData["OrderQuantity"] = pizzaOrder.Quantity;
            TempData["OrderToppings"] = pizzaOrder.Toppings;
            // Divide by 100 for TempData to make the cost more viewable without bringing in any
            // JavaScript to format for us on the page. We only need the cost to be without a decimal
            // when communicating with Stripe
            TempData["OrderCost"] = pizzaOrder.Cost / 100;
            if (pizzaOrder.IsDelivery == true)
            {
                TempData["OrderRetrieval"] = "Your order will arrive in 30 minutes or less!";
            }
            else
            {
                TempData["OrderRetrieval"] = "Your order will be ready for pickup in 15 minutes";
            }
            Charge charge = service.Create(chargeOptions);

            return(RedirectToPage("./OrderConfirmation"));
        }
Пример #5
0
        public IActionResult SummaryPost(string stripeToken)
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            ShoppingCartVM.OrderHeader.ApplicationUser = _unitOfWork.ApplicationUser
                                                         .GetFirstOrDefault(c => c.Id == ShoppingCartVM.OrderHeader.ApplicationUserId,
                                                                            includeProperties: "Company");

            ShoppingCartVM.ListCart = _unitOfWork.ShoppingCart
                                      .GetAll(c => c.ApplicationUserId == claim.Value,
                                              includeProperties: "Product");


            ShoppingCartVM.OrderHeader.ApplicationUser = _context.ApplicationUsers.FirstOrDefault(c => c.Id == ShoppingCartVM.OrderHeader.ApplicationUserId);
            ShoppingCartVM.OrderHeader.PaymentStatus   = SD.PaymentStatusPending;
            ShoppingCartVM.OrderHeader.OrderStatus     = SD.StatusPending;
            ShoppingCartVM.OrderHeader.OrderDate       = DateTime.Now;
            _unitOfWork.OrderHeader.save(ShoppingCartVM.OrderHeader);
            _unitOfWork.Save();
            foreach (var item in ShoppingCartVM.ListCart)
            {
                item.Price = SD.GetPriceBasedOnQuantity(item.Count, item.Product.Price,
                                                        item.Product.Price50, item.Product.Price100);
                item.ApplicationUserId = ShoppingCartVM.OrderHeader.ApplicationUserId;
                OrderDetails orderDetails = new OrderDetails()
                {
                    ProductId   = item.ProductId,
                    OrderId     = ShoppingCartVM.OrderHeader.Id,
                    Price       = item.Price,
                    Count       = item.Count,
                    SweetenerId = item.SweetenerId,
                    SweetnessId = item.SweetnessId,
                    IceCubeId   = item.IceCubeId,
                    MilkTypeId  = item.MilkTypeId,
                    OriginId    = item.OriginId,
                    ToppingId   = item.ToppingId
                };
                ShoppingCartVM.OrderHeader.OrderTotal += orderDetails.Count * orderDetails.Price;
                _unitOfWork.OrderDetails.Add(orderDetails);
            }

            _unitOfWork.ShoppingCart.RemoveRange(ShoppingCartVM.ListCart);
            _unitOfWork.Save();
            HttpContext.Session.SetInt32(SD.ssShoppingCart, 0);


            if (stripeToken == null)
            {
                //order will be created for delayed payment for authroized company
                ShoppingCartVM.OrderHeader.PaymentDueDate = DateTime.Now;
                ShoppingCartVM.OrderHeader.PaymentStatus  = SD.PaymentStatusDelayedPayment;
                ShoppingCartVM.OrderHeader.OrderStatus    = SD.StatusApproved;
            }
            else
            {
                //process the payment
                var options = new ChargeCreateOptions
                {
                    Amount      = Convert.ToInt32(ShoppingCartVM.OrderHeader.OrderTotal * 100),
                    Currency    = "eur",
                    Description = "Αριθμός Παραγγελίας : " + ShoppingCartVM.OrderHeader.Id,
                    Source      = stripeToken
                };

                var    service = new ChargeService();
                Charge charge  = service.Create(options);

                if (charge.Id == null)
                {
                    ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
                }
                else
                {
                    ShoppingCartVM.OrderHeader.TransactionId = charge.Id;
                }
                if (charge.Status.ToLower() == "succeeded")
                {
                    ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                    ShoppingCartVM.OrderHeader.OrderStatus   = SD.StatusApproved;
                    ShoppingCartVM.OrderHeader.PaymentDate   = DateTime.Now;
                }
            }

            _unitOfWork.Save();

            return(RedirectToAction("OrderConfirmation", "Cart", new { id = ShoppingCartVM.OrderHeader.Id }));
        }
Пример #6
0
        public async Task <Uplata> CreateCharge(ClanUplataRequestModel Podaci, int ClanId)
        {
            //var IdTrenutnog = _HttpContext.HttpContext.User.Claims;
            Uplata     novaUplata;
            UplataClan clanUplata;

            try
            {
                StripeConfiguration.ApiKey = "sk_test_51IFliGAyuqhKSgYjdeKEYXUGcz2U8KAkBKySevIgXCl7aSGjUzsLTobfEe0VSyzSopOgo3rKwCI1a0R3ylEyjkwY00cXquMxaz";

                var optionsToken = new TokenCreateOptions
                {
                    Card = new TokenCardOptions
                    {
                        Number   = Podaci.BrojKartice,
                        ExpMonth = Podaci.DatumIsteka.Month,
                        ExpYear  = Podaci.DatumIsteka.Year,
                        Cvc      = Podaci.CCV
                    }
                };

                var   tokenService = new TokenService();
                Token stripeToken  = await tokenService.CreateAsync(optionsToken);

                var optionsCharge = new ChargeCreateOptions
                {
                    Amount      = Podaci.IznosUplate,
                    Currency    = "bam",
                    Description = $"Uplata za mjesec {DateTime.Now.Month}",
                    Source      = stripeToken.Id
                };

                var    serviceCharge = new ChargeService();
                Charge Charge        = await serviceCharge.CreateAsync(optionsCharge);

                if (Charge.Paid == true)
                {
                    novaUplata = new Uplata
                    {
                        Id                 = Charge.Id,
                        BrojKartice        = Podaci.BrojKartice,
                        CCV                = Podaci.CCV,
                        ClanId             = ClanId,
                        DatumIstekaKartice = Podaci.DatumIsteka,
                        DatumUplate        = DateTime.Now,
                        Email              = Podaci.Email,
                        Ime                = Podaci.Ime,
                        Prezime            = Podaci.Prezime,
                        UplaćeniIznos      = Podaci.IznosUplate / _NUMBER_FOR_CONVERTING_AMOUNTH_BETWEEN_STRIPE_AND_REAL
                    };

                    clanUplata = new UplataClan
                    {
                        UplataClanaId = novaUplata.Id,
                        ClanId        = novaUplata.ClanId,
                        GodinaUplate  = novaUplata.DatumUplate.Year,
                        MjesecUplate  = novaUplata.DatumUplate.Month,
                        DanUplate     = novaUplata.DatumUplate.Day
                    };

                    _Context.Uplate.Add(novaUplata);
                    _Context.UplateClanova.Add(clanUplata);
                    await _Context.SaveChangesAsync();

                    return(novaUplata);
                }
                else
                {
                    throw new Exception(Charge.FailureCode);
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        public async Task <IActionResult> OnPostAsync([FromForm] string stripeToken)
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var user = await _userManager.GetUserAsync(User);

            UserEmail        = user.Email;
            StripeCustomerId = user.CustomerIdentifier;
            var nullCustomerId = string.IsNullOrEmpty(StripeCustomerId);
            var planId         = Input.PlanId;
            var planAmount     = GetPlanPrice(planId);

            var      customerService = new CustomerService();
            Customer customerLookup  = new Customer();

            if (!nullCustomerId)
            {
                customerLookup = customerService.Get(StripeCustomerId);
            }

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            //Create new customer if doesnt exist
            if (nullCustomerId || customerLookup.Deleted == true)
            {
                var customers = new CustomerService();

                var customer = customers.Create(new CustomerCreateOptions
                {
                    Email       = UserEmail,
                    Plan        = planId,
                    Description = UserEmail + " " + "[" + user.Id + "]"
                });

                user.CustomerIdentifier = customer.Id;
                StripeCustomerId        = user.CustomerIdentifier;
            }
            else
            {
                var subcriptionService = new SubscriptionService();
                var subscriptionItems  = new List <SubscriptionItemOptions>
                {
                    new SubscriptionItemOptions
                    {
                        Plan = planId
                    }
                };
                var stripeSubscription = subcriptionService.Create(new SubscriptionCreateOptions
                {
                    Customer = StripeCustomerId,
                    Items    = subscriptionItems
                });
            }

            Charge charge = new Charge();

            if (planAmount > 0)
            {
                var chargeOptions = new ChargeCreateOptions
                {
                    Amount      = planAmount,
                    Currency    = "usd",
                    Description = "RazorStripe for" + " " + UserEmail,
                    Customer    = StripeCustomerId,
                };
                var chargeService = new ChargeService();
                charge = chargeService.Create(chargeOptions);
            }
            await _db.SaveChangesAsync();

            await _signInManager.RefreshSignInAsync(user);

            StatusMessage = "Your payment: " + charge.Status;

            return(RedirectToPage());
        }
Пример #8
0
        public async Task <IActionResult> Create([FromBody] CreateOrderViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var user = await _db.Users.SingleAsync(x => x.UserName == HttpContext.User.Identity.Name);

            var order = new Data.Entities.Order
            {
                DeliveryAddress = new Data.Entities.Address
                {
                    FirstName = model.FirstName,
                    LastName  = model.LastName,
                    Address1  = model.Address1,
                    Address2  = model.Address2,
                    TownCity  = model.TownCity,
                    County    = model.County,
                    Postcode  = model.Postcode
                },
                Items = model.Items.Select(x => new Data.Entities.OrderItem
                {
                    ProductId = x.ProductId,
                    ColourId  = x.ColourId,
                    StorageId = x.StorageId,
                    Quantity  = x.Quantity
                }).ToList()
            };

            user.Orders.Add(order);
            await _db.SaveChangesAsync();

            var total = await _db.Orders
                        .Where(x => x.Id == order.Id)
                        .Select(x => Convert.ToInt32(x.Items.Sum(i => i.ProductVariant.Price * i.Quantity) * 100))
                        .SingleAsync();

            var options = new ChargeCreateOptions
            {
                Amount      = total,
                Description = $"Order {order.Id} payment",
                Currency    = "GBP",
                Source      = model.StripeToken
            };

            var service = new ChargeService();
            var charge  = service.Create(options);

            if (string.IsNullOrEmpty(charge.FailureCode))
            {
                order.PaymentStatus = PaymentStatus.Paid;
            }
            else
            {
                order.PaymentStatus = PaymentStatus.Declined;
            }

            await _db.SaveChangesAsync();

            return(Ok(new CreateOrderResponseViewModel(order.Id, order.PaymentStatus)));
        }
Пример #9
0
        public async Task <IActionResult> SummaryPost(string stripeToken)
        //Stripe's Script pass string token
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            if (claim == null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            OrderDetailsCart.OrderHeader.PaymentStatus = SD.Status.paymentPending;
            OrderDetailsCart.OrderHeader.OrderDate     = DateTime.Now;
            OrderDetailsCart.OrderHeader.UserId        = claim.Value;
            OrderDetailsCart.OrderHeader.Status        = SD.Status.paymentPending;
            OrderDetailsCart.OrderHeader.PickupTime    = Convert.ToDateTime(OrderDetailsCart.OrderHeader.PickupDate.ToShortDateString() + " " +
                                                                            OrderDetailsCart.OrderHeader.PickupTime.TimeOfDay.ToString());
            OrderDetailsCart.OrderHeader.OrderTotalOriginal = "0";
            OrderDetailsCart.OrderHeader.OrderTotalDiscount = "0";

            List <OrderDetails> orderDetailList = new List <OrderDetails>();
            //We have to add OrderHeader ecouse order details need orderHedear.Id
            await _db.OrderHeader.AddAsync(OrderDetailsCart.OrderHeader);

            await _db.SaveChangesAsync();

            OrderDetailsCart.ListCart = await _db.ShoppingCart.Where(c => c.ApplicationUserId.ToString().Equals(claim.Value)).ToListAsync();

            decimal orderTotalAcc = 0;

            foreach (var list in OrderDetailsCart.ListCart)
            {
                list.MenuItem = await _db.MenuItem.FirstOrDefaultAsync(m => m.Id.ToString().Equals(list.MenuItemId.ToString()));

                OrderDetails orderDetails = new OrderDetails
                {
                    MenuItemId  = list.MenuItemId,
                    OrderId     = OrderDetailsCart.OrderHeader.Id,
                    Description = list.MenuItem.Description,
                    Name        = list.MenuItem.Name,
                    Price       = list.MenuItem.Price.ToString(),
                    Count       = list.Count,
                };
                orderTotalAcc += (orderDetails.Count * decimal.Parse(orderDetails.Price));
                await _db.OrderDetails.AddAsync(orderDetails);

                //decimal orderTotal = decimal.Parse(OrderDetailsCart.OrderHeader.OrderTotalDiscount);
                //orderTotal+=(decimal)(list.MenuItem.Price*list.Count);
                //OrderDetailsCart.OrderHeader.OrderTotalDiscount = orderTotal.ToString();
            }
            OrderDetailsCart.OrderHeader.OrderTotalOriginal = orderTotalAcc.ToString();
            OrderDetailsCart.OrderHeader.OrderTotalDiscount = OrderDetailsCart.OrderHeader.OrderTotalOriginal;
            //OrderDetailsCart.OrderHeader.PickupName = appUser.FirstName + " " + appUser.LastName;
            //OrderDetailsCart.OrderHeader.PhoneNumber = appUser.PhoneNumber;
            //OrderDetailsCart.OrderHeader.PickupTime = DateTime.Now;


            var couponCodeFormSession = HttpContext.Session.GetString(SD.SessionCouponCodeCookie);

            if (couponCodeFormSession != null)
            {
                OrderDetailsCart.OrderHeader.CouponCode = couponCodeFormSession;
                var couponFromDb = await _db.Coupon.Where(c => c.Name.ToLower().Equals(couponCodeFormSession.ToLower())).FirstOrDefaultAsync();

                OrderDetailsCart.OrderHeader.OrderTotalDiscount = SD.DicountedPrice(couponFromDb, decimal.Parse(OrderDetailsCart.OrderHeader.OrderTotalOriginal)).ToString();
            }
            OrderDetailsCart.OrderHeader.CouponCodeDiscount = (decimal.Parse(OrderDetailsCart.OrderHeader.OrderTotalOriginal) - decimal.Parse(OrderDetailsCart.OrderHeader.OrderTotalDiscount)).ToString();
            await _db.SaveChangesAsync();

            _db.ShoppingCart.RemoveRange(OrderDetailsCart.ListCart);
            HttpContext.Session.SetInt32(SD.SessionCartCountCookie, 0);
            await _db.SaveChangesAsync();

            //stripe transaction part
            var options = new ChargeCreateOptions
            {
                Amount      = (long?)(decimal.Parse(OrderDetailsCart.OrderHeader.OrderTotalDiscount) * 100),
                Currency    = SD.TransactionCurrency,
                Description = "Order ID : " + OrderDetailsCart.OrderHeader.Id.ToString(),
                Source      = stripeToken
            };
            var service = new ChargeService();
            //start transaction
            Charge charge = await service.CreateAsync(options);

            if (charge.BalanceTransactionId == null)
            {
                OrderDetailsCart.OrderHeader.PaymentStatus = SD.Status.paymentRejected;
            }
            else
            {
                OrderDetailsCart.OrderHeader.TransactionId = charge.BalanceTransactionId;
            }

            if (charge.Status.ToLower() == SD.TransactionSucceeded)
            {
                OrderDetailsCart.OrderHeader.PaymentStatus = SD.Status.paymentApproved;
                OrderDetailsCart.OrderHeader.Status        = SD.Status.orderSubmitted;
                //email for succesful SD.CompanyInformations; for fancy email write here html

                var emailFromDb = (await _db.Users.Where(u => u.Id.Equals(claim.Value)).FirstOrDefaultAsync()).Email;

                await _emailSender.SendEmailAsync(
                    emailFromDb,
                    SD.CompanyInformations.emailSubject + OrderDetailsCart.OrderHeader.Id.ToString(),
                    SD.CompanyInformations.emailMessageOrderSubmitedSuccess
                    );
            }
            else
            {
                OrderDetailsCart.OrderHeader.PaymentStatus = SD.Status.paymentRejected;
            }


            await _db.SaveChangesAsync();

            //return RedirectToAction("Index","Home");
            return(RedirectToAction("Confirm", "Order", new { id = OrderDetailsCart.OrderHeader.Id }));
        }
Пример #10
0
        public async Task <IActionResult> CheckoutPost(string stripeToken)
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            detailCart.listCart = await _db.ShoppingCart.Where(c => c.ApplicationUserId == claim.Value).ToListAsync();

            detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusPending;
            detailCart.OrderHeader.OrderDate     = DateTime.Now;
            detailCart.OrderHeader.UserId        = claim.Value;
            detailCart.OrderHeader.Status        = SD.PaymentStatusPending;


            List <OrderDetail> orderDetails = new List <OrderDetail>();

            _db.OrderHeader.Add(detailCart.OrderHeader);
            await _db.SaveChangesAsync();

            detailCart.OrderHeader.OrderTotalOriginal = 0;

            foreach (var item in detailCart.listCart)
            {
                item.Productitem = await _db.ProductsModel.FirstOrDefaultAsync(m => m.Id == item.ProductId);

                OrderDetail orderdetails = new OrderDetail
                {
                    ProductItemId = item.ProductId,
                    OrderId       = detailCart.OrderHeader.Id,
                    Description   = item.Productitem.About,
                    Name          = item.Productitem.Name,
                    Price         = item.Productitem.Price,
                    Count         = item.Count
                };
                detailCart.OrderHeader.OrderTotalOriginal += orderDetails.Count * orderdetails.Price;
                _db.OrderDetail.Add(orderdetails);
            }


            _db.ShoppingCart.RemoveRange(detailCart.listCart);
            HttpContext.Session.SetInt32("ssCartCount", 0);
            await _db.SaveChangesAsync();


            var options = new ChargeCreateOptions
            {
                Amount      = 10000,
                Currency    = "usd",
                Source      = stripeToken,
                Description = "Order Id : " + detailCart.OrderHeader.Id,
            };

            var    service = new ChargeService();
            Charge charge  = service.Create(options);

            if (charge.BalanceTransactionId == null)
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }
            else
            {
                detailCart.OrderHeader.TransactionId = charge.BalanceTransactionId;
            }

            if (charge.Status.ToLower() == "Succeeded")
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                detailCart.OrderHeader.Status        = SD.StatusSubmitted;
            }
            else
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }

            await _db.SaveChangesAsync();

            return(RedirectToAction("Confirm", "Order"));
        }
Пример #11
0
        public IActionResult SummaryPost(string stripeToken)
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            ShoppingCartVM.OrderHeader.ApplicationUser = _unitOfWork.ApplicationUser
                                                         .GetFirstOrDefault(c => c.Id == claim.Value,
                                                                            includeProperties: "Company");

            ShoppingCartVM.ListCart = _unitOfWork.ShoppingCart.GetAll(c => c.ApplicationUserId == claim.Value,
                                                                      includeProperties: "Product");

            ShoppingCartVM.OrderHeader.PaymentStatus     = SD.PaymentStatusPending;
            ShoppingCartVM.OrderHeader.OrderStatus       = SD.StatusPending;
            ShoppingCartVM.OrderHeader.ApplicationUserId = claim.Value;
            ShoppingCartVM.OrderHeader.OrderDate         = DateTime.Now;

            _unitOfWork.OrderHeader.Add(ShoppingCartVM.OrderHeader);
            _unitOfWork.Save();

            //List<OrderDetails> orderDetailsList = new List<OrderDetails>();
            foreach (var item in ShoppingCartVM.ListCart)
            {
                // calculate Price
                item.Price = SD.GetPriceBasedOnQuantity(item.Count, item.Product.Price,
                                                        item.Product.Price50, item.Product.Price100);

                OrderDetails orderDetails = new OrderDetails()
                {
                    ProductId = item.ProductId,
                    OrderId   = ShoppingCartVM.OrderHeader.Id,
                    Price     = item.Price,
                    Count     = item.Count
                };
                ShoppingCartVM.OrderHeader.OrderTotal += orderDetails.Count * orderDetails.Price;
                _unitOfWork.OrderDetails.Add(orderDetails);
                //_unitOfWork.Save();
            }

            // remove from shopping cart and from session (for Home/Index view)
            _unitOfWork.ShoppingCart.RemoveRange(ShoppingCartVM.ListCart);
            _unitOfWork.Save();
            HttpContext.Session.SetInt32(SD.ssShoppingCart, 0);

            if (stripeToken == null)
            {
                // it's null for AuthorizedCompany User - they can place an order without payment(payment on delivery)
                // order will be created for delayed payment for authorized company
                // can be paid in 30 days
                ShoppingCartVM.OrderHeader.PaymentDueDate = DateTime.Now.AddDays(30);
                ShoppingCartVM.OrderHeader.PaymentStatus  = SD.PaymentStatusDelayedPayment;
                ShoppingCartVM.OrderHeader.OrderStatus    = SD.StatusApproved;
            }
            else
            {
                // process the payment using Stripe
                //
                var options = new ChargeCreateOptions
                {
                    Amount      = Convert.ToInt32(ShoppingCartVM.OrderHeader.OrderTotal * 100),
                    Currency    = "usd",
                    Description = "Order ID: " + ShoppingCartVM.OrderHeader.Id,
                    Source      = stripeToken
                };

                var    service = new ChargeService();
                Charge charge  = service.Create(options);
                if (charge.Id == null)
                {
                    ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
                }
                else
                {
                    ShoppingCartVM.OrderHeader.TransactionId = charge.Id;
                }
                if (charge.Status.ToLower() == "succeded")
                {
                    ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                    ShoppingCartVM.OrderHeader.OrderStatus   = SD.StatusApproved;
                    ShoppingCartVM.OrderHeader.PaymentDate   = DateTime.Now;
                }
            }

            _unitOfWork.Save();

            return(RedirectToAction("OrderConfirmation", "Cart", new { id = ShoppingCartVM.OrderHeader.Id }));
        }
Пример #12
0
        public async Task <bool> Payment(OrderItemsVm itemsVm, string username)
        {
            var orderVms  = itemsVm.orderedProducts;
            var addressVm = itemsVm.address;
            var token     = itemsVm.token;

            StripeConfiguration.ApiKey = System.Environment.GetEnvironmentVariable("STRIPE_SKKEY");

            if (orderVms.Count == 0 || orderVms == null)
            {
                throw new Exception("The order is null or empty.");
            }

            var bucketEntity = await _dbContext.Orders
                               .Include(o => o.Items)
                               .ThenInclude(c => c.Coffee)
                               .Where(o => o.ClientId == username)
                               .FirstOrDefaultAsync(o => o.IsPaymentCompleted == false);

            if (bucketEntity == null || bucketEntity.Items.Count == 0)
            {
                throw new Exception("Bucket is empty");
            }

            long dbPriceSum = 0;

            foreach (OrderVm order in orderVms)
            {
                var item = bucketEntity.Items.FirstOrDefault(i => i.Id == order.id);
                dbPriceSum += (long)(item.Price * 100);

                if (item.Id != order.id)
                {
                    throw new Exception("The order's id is invalid");
                }

                item.PaymentStatus = (PaymentStatus)2;
                _dbContext.OrderItems.Update(item);
            }
            await _dbContext.SaveChangesAsync();

            var amount = (long)(orderVms.Sum(o => o.price) * 100);

            if (amount != dbPriceSum)
            {
                return(false);
            }

            bucketEntity.City        = addressVm.place;
            bucketEntity.Street      = addressVm.road;
            bucketEntity.HouseNumber = addressVm.houseNumber;
            bucketEntity.PostalCode  = addressVm.zipcode;
            bucketEntity.Latitude    = addressVm.latLng.latitude;
            bucketEntity.Longitude   = addressVm.latLng.longitude;
            _dbContext.Update(bucketEntity);
            await _dbContext.SaveChangesAsync();

            var options = new ChargeCreateOptions
            {
                Amount      = amount,
                Currency    = "pln",
                Description = "Płatność",
                Source      = token
            };
            var    service = new ChargeService();
            Charge charge  = service.Create(options);

            bucketEntity.PaymentMethod = charge.PaymentMethodDetails.Card.Brand;
            bucketEntity.PaymentCard   = "**** **** **** " + charge.PaymentMethodDetails.Card.Last4;
            await _dbContext.SaveChangesAsync();

            return(true);
        }
Пример #13
0
        public IActionResult OnPost(string stripeToken)
        {
            DonationCauseObj = _unitOfWork.DonationCause.GetFirstOrDefault(c => c.Id == Int32.Parse(HttpContext.Session.GetString("donationCauseId")));
            if (ModelState.IsValid)
            {
                if (User.Identity.IsAuthenticated)
                {
                    var claimIdentity = (ClaimsIdentity)User.Identity;
                    var claim         = claimIdentity.FindFirst(ClaimTypes.NameIdentifier);
                    DonationDetails.UserId = claim.Value;
                }
                else
                {
                    DonationDetails.UserId = null;
                }
                DonationDetails.PaymentStatus   = SD.PaymentStatusPending;
                DonationDetails.DonationDate    = DateTime.Now;
                DonationDetails.DonationCauseId = DonationCauseObj.Id;
                if (stripeToken != null)
                {
                    var options = new ChargeCreateOptions
                    {
                        //Amount in cents
                        Amount      = Convert.ToInt32(DonationDetails.DonationTotal * 100),
                        Currency    = "usd",
                        Description = "This is a donation. See details for Transaction ID (in the upper right-hand corner of this charge's details page)",
                        Source      = stripeToken
                    };

                    var    service = new ChargeService();
                    Charge charge  = service.Create(options);

                    DonationDetails.TransactionId = charge.Id;

                    if (charge.Status.ToLower() == "succeeded")
                    {
                        //send confirmation email
                        EmailSender emailSender;
                        emailSender = new EmailSender(_authOptions);
                        double  amount = DonationDetails.DonationTotal;
                        decimal a;
                        a = Convert.ToDecimal(amount);
                        emailSender.SendEmailAsync(DonationDetails.Email, "Thank you for your donation to No Poor Africa!", "Donation amount: " + amount.ToString("C2") + "\n" + "Donation ID: " + DonationDetails.TransactionId);

                        DonationDetails.PaymentStatus = SD.PaymentStatusApproved;
                    }

                    else
                    {
                        DonationDetails.PaymentStatus = SD.PaymentStatusRejected;
                    }
                }
                _unitOfWork.DonationDetails.Add(DonationDetails);
                _unitOfWork.Save();
                HttpContext.Session.Remove("donationCauseId");
                return(RedirectToPage("/User/DonationCause/DonationConfirmation", new { id = DonationDetails.TransactionId }));
            }
            else
            {
                ViewData["Title"] = DonationCauseObj.Title;
                ViewData["Image"] = DonationCauseObj.Image;
                return(Page());
            }
        }
Пример #14
0
        public ActionResult Create(ChargeDTO chargeDTO, int ID)
        {
            double        price = 0;
            StringBuilder sb    = new StringBuilder();

            StripeConfiguration.ApiKey = "sk_test_51HHZalIRpf7rAmeBgc0q7aD4yiOcIaPjGCZ60FvMO4Yje4RnstURkwhMYOILHmZJwYHTzhq02OdsQDs1oP3ERsIS00k3aejALI";
            var x = c.Packages.Where(e => e.ID == ID);

            foreach (var item in x)
            {
                price = item.Price * 4.3478;
                sb.AppendFormat("NT Travel Guide xin cảm ơn quý khách đã sử dụng dịch vụ của chúng tôi. " +
                                "Quý khách đã thanh toán thành công. Xin vui lòng kiểm tra lại các thông tin sau: \n" +
                                "Điểm đến: {0}\n" +
                                "Ngày xuất phát: {3}-{2}-{1}\n" +
                                "Chuyến đi trong vòng: {4}\n" +
                                "Mã vé: NT{5}\n\n" +
                                "Trân trọng,\nNT Travel Guide\n" +
                                "Nếu những thông tin trên có sai sót hoặc quý khách có thắc mắc về chuyến đi, xin phản hồi lại email này.\n" +
                                "\nHoặc gọi vào hotline: 028-38364748 để được hỗ trợ tốt nhất.\nXin chân thành cảm ơn.", item.Destination, item.Depart.Year, item.Depart.Month, item.Depart.Day, item.Offer, item.ID);
            }
            var customerOptions = new CustomerCreateOptions
            {
                Description = chargeDTO.CardName,
                Source      = chargeDTO.StripeToken,
                Email       = chargeDTO.Email,
                Metadata    = new Dictionary <String, String>()
                {
                    { "Phone Number", chargeDTO.Phone }
                }
            };
            var      customerService = new CustomerService();
            Customer customer        = customerService.Create(customerOptions);

            var options = new ChargeCreateOptions
            {
                Amount      = (long)price,
                Currency    = "usd",
                Description = "Charge for [email protected]",
                Customer    = customer.Id
            };
            var    service = new ChargeService();
            Charge charge  = service.Create(options);

            var model = new ChargeViewModel();

            model.ChargeId = charge.Id;
            model.Name     = customer.Name;
            model.Email    = customer.Email;

            // Send mail for client
            MailMessage mail = new MailMessage();

            mail.From    = new System.Net.Mail.MailAddress("*****@*****.**");
            mail.Subject = "[MAIL XÁC NHẬN]";

            SmtpClient smtp = new SmtpClient();

            smtp.Port                  = 587;
            smtp.EnableSsl             = true;
            smtp.DeliveryMethod        = SmtpDeliveryMethod.Network;
            smtp.UseDefaultCredentials = false;
            smtp.Credentials           = new NetworkCredential(mail.From.ToString(), "daylamatkhaumanhduocchua?");
            smtp.Host                  = "smtp.gmail.com";

            // Recipient address
            mail.To.Add(new MailAddress(customer.Email));

            // Formatted mail body;
            string st = "Xin chào anh/chị " + customer.Description + ", \n" + sb;

            mail.Body = st;
            smtp.Send(mail);

            return(View("OrderStatus", model));
        }
Пример #15
0
        public bool Pay(
            string CardNo,
            int ExpiredYear, int ExpiredMonth,
            string CVV,
            decimal amount, string currency,
            string receiptEmail = "", string description = "")
        {
            try
            {
                TokenCreateOptions stripeCard = new TokenCreateOptions
                {
                    Card = new TokenCardOptions
                    {
                        Number   = CardNo,
                        ExpMonth = Convert.ToInt64(ExpiredMonth),
                        ExpYear  = Convert.ToInt64(ExpiredYear),
                        Cvc      = CVV,
                    },
                };

                TokenService service  = new TokenService();
                Token        newToken = service.Create(stripeCard);

                var cardOption = new SourceCreateOptions
                {
                    Type     = SourceType.Card,
                    Currency = currency,
                    Token    = newToken.Id
                };


                var    sourceService = new SourceService();
                Source source        = sourceService.Create(cardOption);

                /*
                 * CustomerCreateOptions customerInfo = new CustomerCreateOptions
                 * {
                 *  Name = "SP Tutorial",
                 *  Email = stripeEmail,
                 *  Description = "Paying 10 Rs",
                 *  Address = new AddressOptions {
                 *      City = "Kolkata",
                 *      Country = "India",
                 *      Line1 = "Sample Address",
                 *      Line2 = "Sample Address 2",
                 *      PostalCode = "700030",
                 *      State = "WB"
                 *  }
                 * };
                 *
                 * //var customerService = new CustomerService();
                 * //var customer = customerService.Create(customerInfo);
                 */

                var chargeoption = new ChargeCreateOptions
                {
                    Amount       = Convert.ToInt32(amount * 100),
                    Currency     = currency,
                    Description  = description,
                    ReceiptEmail = receiptEmail,
                    Source       = source.Id
                };

                var    chargeService = new ChargeService();
                Charge charge        = chargeService.Create(chargeoption);
                if (charge.Status == "succeeded")
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(false);
            }
        }
Пример #16
0
        private void Button1_Click_1(object sender, EventArgs e)
        {
            //This is the same code above only difference is Source i could add in a check above to see if CustomerID is empty but i think its easier to help people understand the difference.
            try
            {
                /*
                 * Using Stripe's library to make request
                 * Everything below is from the Official Documentation
                 * From https://stripe.com/docs/api
                 *
                 */

                //Set To public key so we can create a Card Card Object
                StripeConfiguration.ApiKey = MainForm.PubKey;

                //No Error Check Added so must be added in
                //Getting User Information
                int    PriceToCharge   = (Int32.Parse(ChargeAmmount.Text)) * 100;
                string DescriptionText = DescBox.Text;
                string CustomerID      = CustomerIDBox.Text;

                //Generating MetaData
                Dictionary <String, String> MetadataToAdd = new Dictionary <String, String>()
                {
                    { "ItemID", ItemIDBox.Text },
                    { "ItemName", ItemNameBox.Text },
                    { "Country", CountryBox.Text }
                };

                //Set To Private key to tell API that we are Charging.
                StripeConfiguration.ApiKey = MainForm.SecretKey;

                //Ive Tried to add as much Paramters into the ChargeOptions as incase you find something useful. The Only Things you Require is Amount, Currency and Source.
                var ChargeOptions = new ChargeCreateOptions
                {
                    Amount      = PriceToCharge,
                    Currency    = "gbp",
                    Description = DescriptionText,
                    Metadata    = MetadataToAdd,
                    CustomerId  = CustomerID,
                    //Source = "tok_mastercard" //Not Putting in a source defaults to customers default payment method
                };

                //Creating a Service To Charge the Card
                var    ChargeService = new ChargeService();
                Charge charge        = ChargeService.Create(ChargeOptions);

                //No Error
                MessageBox.Show("Successfully Charged Customer");
            }
            catch (StripeException ex)
            {
                //Switch Statement is from API Documentation
                switch (ex.StripeError.ErrorType)
                {
                case "card_error":
                    MessageBox.Show("Code: " + ex.StripeError.Code + " Message: " + ex.Message);
                    break;

                case "api_connection_error":
                    MessageBox.Show("Code: " + ex.StripeError.Code + " Message: " + ex.Message);
                    break;

                case "api_error":
                    MessageBox.Show("Code: " + ex.StripeError.Code + " Message: " + ex.Message);
                    break;

                case "authentication_error":
                    MessageBox.Show("Code: " + ex.StripeError.Code + " Message: " + ex.Message);
                    break;

                case "invalid_request_error":
                    MessageBox.Show("Code: " + ex.StripeError.Code + " Message: " + ex.Message);
                    break;

                case "rate_limit_error":
                    MessageBox.Show("Code: " + ex.StripeError.Code + " Message: " + ex.Message);
                    break;

                case "validation_error":
                    MessageBox.Show("Code: " + ex.StripeError.Code + " Message: " + ex.Message);
                    break;

                default:
                    MessageBox.Show("Code: " + ex.StripeError.Code + " Message: " + ex.Message);
                    // Unknown Error Type
                    break;
                }
            }
        }
Пример #17
0
        public async Task <IActionResult> SummaryPost(string stripeEmail, string stripeToken)
        {
            var claimsIdentity  = (ClaimsIdentity)this.User.Identity;
            var claim           = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
            var applicationUser = await userService.GetUserById(claim.Value);

            DetailsCart.listCart = (await shoppingCartService.GetShoppingCartsByUserId(claim.Value)).ToList();

            DetailsCart.OrderHeader.PaymentStatus = SD.PaymentStatusPending;
            DetailsCart.OrderHeader.Status        = SD.PaymentStatusPending;
            DetailsCart.OrderHeader.UserId        = claim.Value;
            DetailsCart.OrderHeader.PickUpTime    =
                Convert.ToDateTime(DetailsCart.OrderHeader.PickUpDate.ToShortDateString()
                                   + " " + DetailsCart.OrderHeader.PickUpTime.ToShortTimeString());
            DetailsCart.OrderHeader.OrderDate = DateTime.Now;

            await orderService.AddOrderHeaderAsync(DetailsCart.OrderHeader);

            DetailsCart.OrderHeader.OrderTotalOriginal = 0;

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

            foreach (var item in DetailsCart.listCart)
            {
                item.MenuItem = await menuItemService.GetMenuItemById(item.MenuItemId);

                OrderDetails orderDetails = new OrderDetails
                {
                    MenuItemId  = item.MenuItemId,
                    OrderId     = DetailsCart.OrderHeader.Id,
                    Description = item.MenuItem.Description,
                    Name        = item.MenuItem.Name,
                    Price       = item.MenuItem.Price,
                    Count       = item.Count
                };
                DetailsCart.OrderHeader.OrderTotalOriginal += orderDetails.Count * orderDetails.Price;
                orderDetailsList.Add(orderDetails);
            }
            await orderService.AddOrdersDetailsAsync(orderDetailsList);

            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                DetailsCart.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode);
                var couponFromDb = await couponService.GetCouponByName(DetailsCart.OrderHeader.CouponCode.ToLower());

                DetailsCart.OrderHeader.OrderTotal = SD.DiscountedPrice(couponFromDb, DetailsCart.OrderHeader.OrderTotalOriginal);
            }
            else
            {
                DetailsCart.OrderHeader.OrderTotal = DetailsCart.OrderHeader.OrderTotalOriginal;
            }
            DetailsCart.OrderHeader.CouponCodeDiscount = DetailsCart.OrderHeader.OrderTotalOriginal - DetailsCart.OrderHeader.OrderTotal;
            await orderService.CommitAsync();

            await shoppingCartService.RemoveShoppingCarts(DetailsCart.listCart);

            HttpContext.Session.SetInt32(SD.ssShoppingCartCount, 0);
            var options = new ChargeCreateOptions()
            {
                Amount      = Convert.ToInt32(DetailsCart.OrderHeader.OrderTotal * 100),
                Currency    = "usd",
                Description = "Order Id : " + DetailsCart.OrderHeader.Id,
                Source      = stripeToken
            };
            var    service = new ChargeService();
            Charge charge  = await service.CreateAsync(options);

            if (charge.BalanceTransactionId == null)
            {
                DetailsCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }
            else
            {
                DetailsCart.OrderHeader.TransactionId = charge.BalanceTransactionId;
            }
            if (charge.Status.ToLower() == "succeeded")
            {
                var subject = "Spicy - Order Created " + DetailsCart.OrderHeader.Id.ToString();
                var msg     = "The Order Has been created successfully";

                await emailSender.SendEmailAsync(applicationUser.Email, subject, msg);

                //emailSender.SendMailkit(applicationUser.Name,applicationUser.Email);

                DetailsCart.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                DetailsCart.OrderHeader.Status        = SD.StatusSubmitted;
                await orderService.CommitAsync();
            }
            else
            {
                DetailsCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
                await orderService.CommitAsync();
            }

            return(RedirectToAction("Confirm", "Order", new { id = DetailsCart.OrderHeader.Id }));
            //return RedirectToAction("Index", "Home");
        }
Пример #18
0
        private void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                /*
                 * Using Stripe's library to make request
                 * Everything below is from the Official Documentation
                 * From https://stripe.com/docs/api
                 *
                 */

                //Set To public key so we can create a Card Card Object
                StripeConfiguration.ApiKey = MainForm.PubKey;

                //Getting Card & Price Information // No Error Checks added so it can crash the program
                int Month         = Int32.Parse(MonthExpiry.Text);
                int Year          = Int32.Parse(YearExpiry.Text);
                int PriceToCharge = (Int32.Parse(ChargeAmmount.Text)) * 100;

                string CardNo          = CardNoBox.Text;
                string CVCText         = SecCode.Text;
                string UserEmail       = EmailBox.Text;
                string DescriptionText = DescBox.Text;
                //Generating MetaData
                Dictionary <String, String> MetadataToAdd = new Dictionary <String, String>()
                {
                    { "ItemID", ItemIDBox.Text },
                    { "ItemName", ItemNameBox.Text },
                    { "Country", CountryBox.Text }
                };

                //Creating A Token to "Build" the card.
                var TokenOptions = new TokenCreateOptions
                {
                    Card = new CreditCardOptions //Card Object
                    {
                        Number   = CardNo,
                        ExpYear  = Year,
                        ExpMonth = Month,
                        Cvc      = CVCText
                    }
                };

                //Creating a Token and attaching Card Object
                var   Tokenservice = new TokenService();
                Token stripeToken  = Tokenservice.Create(TokenOptions);

                //Set To Private key to tell API that we are Charging.
                StripeConfiguration.ApiKey = MainForm.SecretKey;

                //Ive Tried to add as much Paramters into the ChargeOptions as incase you find something useful. The Only Things you Require is Amount, Currency and Source.
                var ChargeOptions = new ChargeCreateOptions
                {
                    Amount       = PriceToCharge,
                    Currency     = "gbp",
                    ReceiptEmail = UserEmail,
                    Description  = DescriptionText,
                    Metadata     = MetadataToAdd,
                    Source       = "tok_mastercard" // obtained with Stripe.js
                };

                //Creating a Service To Charge the Card
                var    ChargeService = new ChargeService();
                Charge charge        = ChargeService.Create(ChargeOptions);

                //No Error
                MessageBox.Show("Successfully Charged Card");
            }
            catch (StripeException ex)
            {
                //Switch Statement is from API Documentation
                switch (ex.StripeError.ErrorType)
                {
                case "card_error":
                    MessageBox.Show("Code: " + ex.StripeError.Code);
                    MessageBox.Show("Message: " + ex.StripeError.Message);
                    break;

                case "api_connection_error":
                    break;

                case "api_error":
                    break;

                case "authentication_error":
                    break;

                case "invalid_request_error":
                    break;

                case "rate_limit_error":
                    break;

                case "validation_error":
                    break;

                default:
                    // Unknown Error Type
                    break;
                }
            }
        }
Пример #19
0
        public async Task <IActionResult> SummaryPOST(string stripeToken)
        {
            /*PROCESS FLOW OF THE STRIPE TOKEN
             * When the user enters the credit card details and clicks the submit button,
             * All the details are posted on the stripe server directly and are not saved anyhere on our server,
             * Using the card numbers and details, stripe generates a token and sends the token to the post action method in the controller,
             * We will use the token in the controller and pass it to make the actual charge
             */
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);


            detailCart.ListCart = await _db.ShoppingBag.Where(c => c.ApplicationUserId == claim.Value).ToListAsync();                                                                       //retrieving all of the shopping cart

            detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusPending;                                                                                                                 //because we'll be calculating that when we need userid of the user that is logged in, to retrieve all the items in the shopcart the user has
            detailCart.OrderHeader.OrderDate     = DateTime.Now;                                                                                                                            //because we'll be calculating that when we need userid of the user that is logged in, to retrieve all the items in the shopcart the user has
            detailCart.OrderHeader.UserId        = claim.Value;                                                                                                                             //because we'll be calculating that when we need userid of the user that is logged in, to retrieve all the items in the shopcart the user has
            detailCart.OrderHeader.Status        = SD.PaymentStatusPending;                                                                                                                 //because we'll be calculating that when we need userid of the user that is logged in, to retrieve all the items in the shopcart the user has
            detailCart.OrderHeader.PickUpTime    = Convert.ToDateTime(detailCart.OrderHeader.PickUpDate.ToShortDateString() + " " + detailCart.OrderHeader.PickUpTime.ToShortTimeString()); //because we'll be calculating that when we need userid of the user that is logged in, to retrieve all the items in the shopcart the user has

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

            _db.OrderHeader.Add(detailCart.OrderHeader);
            await _db.SaveChangesAsync();

            var details = detailCart.OrderHeader.OrderTotalOriginal;

            foreach (var item in detailCart.ListCart)//Calculate the order total so far
            {
                item.MenuItem = await _db.MenuItem.FirstOrDefaultAsync(m => m.Id == item.MenuItemId);

                //Creating order details
                OrderDetails orderDetails = new OrderDetails
                {
                    MenuItemId  = item.MenuItemId,
                    OrderId     = detailCart.OrderHeader.Id,
                    Description = item.MenuItem.Description,
                    Name        = item.MenuItem.Name,
                    Price       = item.MenuItem.Price,
                    Count       = item.Count
                };
                details = orderDetails.Count * orderDetails.Price;
                _db.OrderDetails.Add(orderDetails);
                await _db.SaveChangesAsync();
            }



            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                detailCart.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode);
                var couponFromDb = await _db.Coupon.Where(c => c.Name.ToLower() == detailCart.OrderHeader.CouponCode.ToLower()).FirstOrDefaultAsync();

                detailCart.OrderHeader.OrderTotal = SD.DiscountedPrice(couponFromDb, detailCart.OrderHeader.OrderTotalOriginal);
            }
            else
            {
                detailCart.OrderHeader.OrderTotal = details;
            }
            detailCart.OrderHeader.CouponCodeDiscount = details - detailCart.OrderHeader.OrderTotal;

            _db.ShoppingBag.RemoveRange(detailCart.ListCart);
            HttpContext.Session.SetInt32(SD.ssShoppingCartCount, 0);
            await _db.SaveChangesAsync();

            //making the call (transaction) to stripe for getting our payment
            var options = new ChargeCreateOptions
            {
                Amount      = Convert.ToInt32(detailCart.OrderHeader.OrderTotal * 100),
                Currency    = "usd",
                Description = "Order ID : " + detailCart.OrderHeader.Id,
                Source      = stripeToken
            };
            var    service = new ChargeService();
            Charge charge  = service.Create(options);//This will do the actual transaction

            //check if there is a transaction ID
            if (charge.BalanceTransactionId == null)
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }
            else
            {
                detailCart.OrderHeader.TransactionId = charge.BalanceTransactionId;
            }

            if (charge.Status.ToLower() == "succeeded")
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                detailCart.OrderHeader.Status        = SD.StatusSubmitted;
            }
            else
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }
            await _db.SaveChangesAsync();

            //return RedirectToAction("Index", "Home");
            return(RedirectToAction("Confirm", "Order", new { id = detailCart.OrderHeader.Id }));//with a confirm action and a order header id
        }
        public async Task <IActionResult> SummaryPOST(string stripeToken)
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);                                  //--> we want to know Logged in users.

            detailCart.listCart = await _db.ShoppingCart.Where(c => c.ApplicationUserId == claim.Value).ToListAsync(); //--> Retriev the shopping cart.

            detailCart.OrderHeader.PaymentStatus = SD.PaymentPending;
            detailCart.OrderHeader.OrderDate     = DateTime.Now;
            detailCart.OrderHeader.UserId        = claim.Value;
            detailCart.OrderHeader.Status        = SD.PaymentPending;
            detailCart.OrderHeader.PickUpTime    = Convert.ToDateTime(detailCart.OrderHeader.PickUpDate.ToShortDateString() + " " + detailCart.OrderHeader.PickUpTime.ToShortTimeString());

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

            _db.OrderHeader.Add(detailCart.OrderHeader);  //--> we make order header into our database.
            await _db.SaveChangesAsync();

            detailCart.OrderHeader.OrderTotalOriginal = 0;

            foreach (var item in detailCart.listCart)
            {
                item.MenuItem = await _db.MenuItem.FirstOrDefaultAsync(m => m.Id == item.MenuItemId);

                OrderDetails orderDetails = new OrderDetails
                {
                    MenuItemId  = item.MenuItemId,
                    OrderId     = detailCart.OrderHeader.Id,
                    Description = item.MenuItem.Description,
                    Name        = item.MenuItem.Name,
                    Price       = item.MenuItem.Price,
                    Count       = item.Count,
                };
                detailCart.OrderHeader.OrderTotalOriginal += orderDetails.Count * orderDetails.Price;
                _db.OrderDetails.Add(orderDetails);
            }


            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                detailCart.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode); //--> we need to check that session and display the price accordingly.
                var couponFromDb = await _db.Coupon.Where(c => c.Name.ToLower() == detailCart.OrderHeader.CouponCode.ToLower()).FirstOrDefaultAsync();

                detailCart.OrderHeader.OrderTotal = SD.DiscountedPrice(couponFromDb, detailCart.OrderHeader.OrderTotalOriginal);
            }
            else
            {
                detailCart.OrderHeader.OrderTotal = detailCart.OrderHeader.OrderTotalOriginal;
            }

            detailCart.OrderHeader.CouponCodeDiscount = detailCart.OrderHeader.OrderTotalOriginal - detailCart.OrderHeader.OrderTotalOriginal;

            _db.ShoppingCart.RemoveRange(detailCart.listCart);
            HttpContext.Session.SetInt32(SD.ssShoppingCartCount, 0);
            await _db.SaveChangesAsync();

            //----//
            var options = new ChargeCreateOptions
            {
                Amount      = Convert.ToInt32(detailCart.OrderHeader.OrderTotal * 100),
                Currency    = "usd",
                Description = "Order ID : " + detailCart.OrderHeader.Id,
                Source      = stripeToken
            };

            var    service = new ChargeService();
            Charge charge  = service.Create(options);

            //---//

            if (charge.BalanceTransactionId == null)
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentRejected;
            }
            else
            {
                detailCart.OrderHeader.TransactionId = charge.BalanceTransactionId;
            }

            if (charge.Status.ToLower() == "Succeeded")
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentApproved;
                detailCart.OrderHeader.Status        = SD.StatusSubmitted;
            }
            else
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentRejected;
            }

            await _db.SaveChangesAsync();

            return(RedirectToAction("Index", "Home"));

            //return RedirectToAction("Confirm", "Order", new { id = detailCart.OrderHeader.Id });
        }
Пример #21
0
        public ResultAndMessage ChargeAccountToAccount(string BuyerCustId,
                                                       string VendorAcctId,
                                                       decimal purchaseAmount,
                                                       decimal smFee)
        {
            ResultAndMessage result = new ResultAndMessage();

            var charge = new ChargeCreateOptions
            {
                //  What is this property?
                //----------------------------------------
                //charge.OnBehalfOf = stripeAcctId;
                //-----------------------------------
                //   When you create destination charges on the platform account,
                //  Stripe automatically:
                //     -Settles charges in the country of the specified account,
                //        thereby minimizing declines
                //     -Uses the connected account’s currency for settlement,
                //        often avoiding currency conversions
                //     -Uses the fee structure for the connected account’s country
                // This same functionality is not automatically provided when creating
                //   separate charges and transfers, but you can replicate it using
                //   the on_behalf_of attribute when creating the charge.
                //   Setting on_behalf_of defines the business of record for the charge
                //   and funds will be settled using that account.

                //  For Custom Accounts, simplest route
                //  create the charge on platform’s account
                //  destination parm - connected account that receives funds.
                Destination = new ChargeDestinationCreateOptions()
                {
                    Account = VendorAcctId
                },

                // always set these properties
                Amount   = purchaseAmount.ToPennies(),
                Currency = "usd",

                //  two-step payments: you can first authorize a charge
                //  on your customer’s card, then wait to settle (capture)
                //  it later. When a charge is authorized, the funds are guaranteed
                //  by the issuing bank and the amount held on the customer’s card
                // for up to seven days. If the charge is not captured within this time,
                // the authorization is canceled and funds released.
                // To authorize a payment without capturing it, make a charge request
                // that also includes the capture parameter with a value of false.
                // This instructs Stripe to only authorize the amount
                // on the customer’s card.

                //charge.Capture = false;

                // Here's second step if two-step is employed
                //var chargeService = new StripeChargeService();
                //charge = chargeService.Capture({ CHARGE_ID});

                // set this if you want to
                Description = "simple-market purchase",

                //charge.SourceTokenOrExistingSourceId = BuyerAcctId;

                // set this property if using a customer
                // - this MUST be set if you are using an existing source!
                Customer             = BuyerCustId,
                ApplicationFeeAmount = smFee.ToPennies()
            };

            //string secKey = _cntxt.smAdmin.Single(r => r.type == AdminRecType.secKey).strData;
            //if (string.IsNullOrEmpty(secKey))
            //{
            //    result.message = "failure to fetch stripe key.";
            //    return result;
            //}
            //StripeConfiguration.SetApiKey(secKey);

            var    chargeService = new ChargeService();
            Charge stripeCharge  = chargeService.Create(charge);

            result.success = true;

            return(result);
        }
Пример #22
0
        public async Task <IActionResult> SummeryPost(string stripeToken)
        {
            //Saving OrderHeader To database
            var claimsIdentity = (ClaimsIdentity)this.User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier).Value;

            DetailsCartVM.ShoppingCartList = await _db.ShoppingCart.Where(u => u.ApplicationUserId == claim).ToListAsync();

            DetailsCartVM.OrderHeader.PaymentStatus     = SD.StatusPending;
            DetailsCartVM.OrderHeader.Status            = SD.StatusPending;
            DetailsCartVM.OrderHeader.ApplicationUserId = claim;
            DetailsCartVM.OrderHeader.OrderDate         = DateTime.Now;
            DetailsCartVM.OrderHeader.PickUpTime        = Convert.ToDateTime(DetailsCartVM.OrderHeader.PickUpDate.ToShortDateString() + " " + DetailsCartVM.OrderHeader.PickUpTime.ToShortTimeString());

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

            _db.OrderHeaders.Add(DetailsCartVM.OrderHeader);
            await _db.SaveChangesAsync();

            DetailsCartVM.OrderHeader.OrderTotalOriginal = 0;

            foreach (var item in DetailsCartVM.ShoppingCartList)
            {
                item.MenuItem = await _db.MenuItems.FirstOrDefaultAsync(u => u.MenuItemId == item.MenuItemId);

                OrderDetails orderDetails = new OrderDetails
                {
                    OrderId    = DetailsCartVM.OrderHeader.OrderHeaderId,
                    MenuItemId = item.MenuItemId,
                    Count      = item.Count,
                    ItemName   = item.MenuItem.MenuItemName,
                    Price      = item.MenuItem.Price
                };
                DetailsCartVM.OrderHeader.OrderTotalOriginal += item.Count * item.MenuItem.Price;
                _db.OrderDetails.Add(orderDetails);
            }

            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                DetailsCartVM.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode);
                var coupon = _db.Coupons.FirstOrDefault(u => u.CouponName.ToLower() == DetailsCartVM.OrderHeader.CouponCode.ToLower());
                DetailsCartVM.OrderHeader.OrderTotal = SD.DiscountedPrice(coupon, DetailsCartVM.OrderHeader.OrderTotalOriginal);
            }
            else
            {
                DetailsCartVM.OrderHeader.OrderTotal = DetailsCartVM.OrderHeader.OrderTotalOriginal;
            }
            DetailsCartVM.OrderHeader.CouponCodeDiscount = DetailsCartVM.OrderHeader.OrderTotalOriginal - DetailsCartVM.OrderHeader.OrderTotal;

            _db.ShoppingCart.RemoveRange(DetailsCartVM.ShoppingCartList);
            HttpContext.Session.SetInt32(SD.ssShoppingCartCount, 0);
            await _db.SaveChangesAsync();

            var options = new ChargeCreateOptions
            {
                Amount      = Convert.ToInt32((DetailsCartVM.OrderHeader.OrderTotal / 80) * 100),
                Currency    = "usd",
                Description = "Order Id : " + DetailsCartVM.OrderHeader.OrderHeaderId,
                Source      = stripeToken
            };

            var service = new ChargeService();

            Charge charge = service.Create(options);


            if (charge.Status.ToLower() == "succeeded")
            {
                DetailsCartVM.OrderHeader.TransactionId = charge.BalanceTransactionId;

                await _emailSender.SendEmailAsync(_db.Users.Where(u => u.Id == claim).FirstOrDefault().Email,
                                                  "ForYou payment completed OrderId: " + DetailsCartVM.OrderHeader.OrderHeaderId.ToString(),
                                                  "You have paid " + DetailsCartVM.OrderHeader.OrderTotal.ToString() + " for your Order<br /> <strong class =\"text-info\">THANK YOU!!</strong>");

                DetailsCartVM.OrderHeader.PaymentStatus = SD.StatusApproved;
                DetailsCartVM.OrderHeader.Status        = SD.StatusSubmitted;
            }
            else
            {
                await _emailSender.SendEmailAsync(_db.Users.Where(u => u.Id == claim).FirstOrDefault().Email,
                                                  "ForYou payment completed OrderId: " + DetailsCartVM.OrderHeader.OrderHeaderId.ToString(),
                                                  "Your payment request failed anyway. Please contuct us for more information.<br /> <strong class =\"text-info\">THANK YOU!!</strong>");

                DetailsCartVM.OrderHeader.PaymentStatus = SD.StatusRejected;
            }

            await _db.SaveChangesAsync();

            //return RedirectToAction("Index", "Cart");
            return(RedirectToAction("Confirm", "Order", new { id = DetailsCartVM.OrderHeader.OrderHeaderId }));
        }
Пример #23
0
        public IActionResult OnPost(string stripeToken)
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            detailCart.listCart = _unitOfWork.ShoppingCart.GetAll(c => c.ApplicationUserId == claim.Value).ToList();

            detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusPending;
            detailCart.OrderHeader.OrderDate     = DateTime.Now;
            detailCart.OrderHeader.UserId        = claim.Value;
            detailCart.OrderHeader.Status        = SD.PaymentStatusPending;
            detailCart.OrderHeader.PickUpTime    = Convert.ToDateTime(detailCart.OrderHeader.PickUpDate.ToShortDateString() + " " + detailCart.OrderHeader.PickUpTime.ToShortTimeString());

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

            _unitOfWork.OrderHeader.Add(detailCart.OrderHeader);
            _unitOfWork.Save();

            foreach (var item in detailCart.listCart)
            {
                item.MenuItem = _unitOfWork.MenuItem.GetFirstOrderDefault(m => m.Id == item.MenuItemId);
                OrderDetails orderDetails = new OrderDetails
                {
                    MenuItemId  = item.MenuItemId,
                    OrderId     = detailCart.OrderHeader.Id,
                    Description = item.MenuItem.Description,
                    Name        = item.MenuItem.Name,
                    Price       = item.MenuItem.Price,
                    Count       = item.Count
                };
                detailCart.OrderHeader.OrderTotal += (orderDetails.Count * orderDetails.Price);
                _unitOfWork.OrderDetails.Add(orderDetails);
            }
            detailCart.OrderHeader.OrderTotal = Convert.ToDouble(String.Format("{0:.##}", detailCart.OrderHeader.OrderTotal));
            _unitOfWork.ShoppingCart.RemoveRange(detailCart.listCart);
            HttpContext.Session.SetInt32(SD.ShoppingCart, 0);
            _unitOfWork.Save();

            if (stripeToken != null)
            {
                var options = new ChargeCreateOptions
                {
                    //Amount is in cents
                    Amount      = Convert.ToInt32(detailCart.OrderHeader.OrderTotal * 100),
                    Currency    = "usd",
                    Description = "Order ID : " + detailCart.OrderHeader.Id,
                    Source      = stripeToken
                };
                var    service = new ChargeService();
                Charge charge  = service.Create(options);

                detailCart.OrderHeader.TransactionId = charge.Id;

                if (charge.Status.ToLower() == "succeeded")
                {
                    //email
                    detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                    detailCart.OrderHeader.Status        = SD.StatusSubmitted;
                }
                else
                {
                    detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
                }
            }
            else
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }
            _unitOfWork.Save();

            return(RedirectToPage("/Customer/Card/OrderConfirmation", new { id = detailCart.OrderHeader.Id }));
        }
Пример #24
0
        public async Task <IActionResult> Create(Order frmOrder)
        {
            if (ModelState.IsValid)
            {
                var user = _identitySvc.Get(HttpContext.User);

                Order order = frmOrder;

                order.UserName = user.Email;
                order.BuyerId  = user.Email;

                var options = new RequestOptions
                {
                    ApiKey = _config["StripePrivateKey"]
                };
                var chargeOptions = new ChargeCreateOptions()

                {
                    //required
                    Amount   = (int)(order.OrderTotal * 100),
                    Currency = "usd",
                    Source   = order.StripeToken,
                    //optional
                    Description  = string.Format("Order Payment {0}", order.UserName),
                    ReceiptEmail = order.UserName,
                };

                var chargeService = new ChargeService();



                Charge stripeCharge = null;
                try
                {
                    stripeCharge = chargeService.Create(chargeOptions, options);
                    _logger.LogDebug("Stripe charge object creation" + stripeCharge.StripeResponse.ToString());
                }
                catch (StripeException stripeException)
                {
                    _logger.LogDebug("Stripe exception " + stripeException.Message);
                    ModelState.AddModelError(string.Empty, stripeException.Message);
                    return(View(frmOrder));
                }


                try
                {
                    if (stripeCharge.Id != null)
                    {
                        order.PaymentAuthCode = stripeCharge.Id;

                        int orderId = await _orderSvc.CreateOrder(order);

                        return(RedirectToAction("Complete", new { id = orderId, userName = user.UserName }));
                    }

                    else
                    {
                        ViewData["message"] = "Payment cannot be processed, try again";
                        return(View(frmOrder));
                    }
                }
                catch (BrokenCircuitException)
                {
                    ModelState.AddModelError("Error", "It was not possible to create a new order, please try later on. (Business Msg Due to Circuit-Breaker)");
                    return(View(frmOrder));
                }
            }
            else
            {
                return(View(frmOrder));
            }
        }
Пример #25
0
        public IActionResult SummaryPost(ShoppingCartVM shoppingCartVM, string stripeToken)
        {
            Claim claim = GetClaim();

            shoppingCartVM.OrderHeader.ApplicationUser = unitOfWork.ApplicationUser
                                                         .GetFirstOrDefault(c => c.Id == claim.Value, includeProperties: "Company");

            shoppingCartVM.ListCart = unitOfWork.ShoppingCart
                                      .GetAll(c => c.ApplicationUserId == claim.Value, includeProperties: "Product");

            shoppingCartVM.OrderHeader.PaymentStatus     = SD.PaymentStatusPending;
            shoppingCartVM.OrderHeader.OrderStatus       = SD.StatusPending;
            shoppingCartVM.OrderHeader.ApplicationUserId = claim.Value;
            shoppingCartVM.OrderHeader.OrderDate         = DateTime.Now;

            unitOfWork.OrderHeader.Add(shoppingCartVM.OrderHeader);
            unitOfWork.Save();

            foreach (var item in shoppingCartVM.ListCart)
            {
                item.Price = SetPrice(item);

                OrderDetails orderDetails = new OrderDetails()
                {
                    ProductId = item.ProductId,
                    OrderId   = shoppingCartVM.OrderHeader.Id,
                    Price     = item.Price,
                    Count     = item.Count
                };
                shoppingCartVM.OrderHeader.OrderTotal += orderDetails.Count * orderDetails.Price;
                unitOfWork.OrderDetails.Add(orderDetails);
            }

            unitOfWork.ShoppingCart.RemoveRange(shoppingCartVM.ListCart);

            // Save in one call to remove cart and add order details
            unitOfWork.Save();
            HttpContext.Session.SetInt32(SD.ShoppingCartSession, 0);

            // Should only be null if the user ordering is an authorized company
            if (stripeToken == null)
            {
                //order will be created for delayed payment for authroized company
                shoppingCartVM.OrderHeader.PaymentDueDate = DateTime.Now.AddDays(30);
                shoppingCartVM.OrderHeader.PaymentStatus  = SD.PaymentStatusDelayedPayment;
                shoppingCartVM.OrderHeader.OrderStatus    = SD.StatusApproved;
            }
            else
            {
                //process the payment
                var options = new ChargeCreateOptions
                {
                    Amount      = Convert.ToInt32(shoppingCartVM.OrderHeader.OrderTotal * 100),
                    Currency    = "usd",
                    Description = "Order ID : " + shoppingCartVM.OrderHeader.Id,
                    Source      = stripeToken
                };

                var service = new ChargeService();

                // Makes charge on card
                Charge charge = service.Create(options);

                if (charge.Id == null)
                {
                    shoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
                }
                else
                {
                    shoppingCartVM.OrderHeader.TransactionId = charge.Id;
                }
                if (charge.Status.ToLower() == "succeeded")
                {
                    shoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                    shoppingCartVM.OrderHeader.OrderStatus   = SD.StatusApproved;
                    shoppingCartVM.OrderHeader.PaymentDate   = DateTime.Now;
                }
            }

            unitOfWork.Save();

            return(RedirectToAction("OrderConfirmation", "Cart", new { id = shoppingCartVM.OrderHeader.Id }));
        }
Пример #26
0
        /// <summary>
        /// Make Payment
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        public async Task <ActionResult> MakePayment(FormCollection form)
        {
            HttpClient client        = new HttpClient();
            string     date          = form["expiration"];
            int        month         = int.Parse(date.Substring(5));
            int        year          = int.Parse(date.Substring(0, 4));
            string     amount        = form["payment_amount"];
            string     paymentAmount = (double.Parse(amount) * 100).ToString();
            long       amt           = long.Parse(paymentAmount);

            try
            {
                StripeConfiguration.ApiKey = "sk_test_51INLgeIR2cxnZNWwi0AHsRoFifYouOH6QcLsIxEEOmBwXNyXXXX4Jt2MOHbR6d5KKMotvMYyrKa1AtrBpcc8q8IB009h5ew7Iw";

                var optionstoken = new TokenCreateOptions
                {
                    Card = new TokenCardOptions
                    {
                        Number   = form["card_number"],
                        ExpMonth = month,
                        ExpYear  = year,
                        Cvc      = form["cvc"]
                    }
                };

                var   servicetoken = new TokenService();
                Token stripetoken  = await servicetoken.CreateAsync(optionstoken);

                var options = new ChargeCreateOptions
                {
                    Amount      = amt,
                    Currency    = "usd",
                    Description = "Payment from " + Name.last_name + ", " + Name.first_name,
                    Source      = stripetoken.Id
                };

                var    service = new ChargeService();
                Charge charge  = await service.CreateAsync(options);

                if (charge.Paid)
                {
                    //update database
                    Payment p = new Payment();

                    p.payment_amount = decimal.Parse(amount);
                    p.user_id        = Name.user_id;
                    p.payment_date   = DateTime.Now;
                    gds.Payments.Add(p);
                    gds.SaveChanges();

                    return(Balance());
                }
                else
                {
                    return(View("PaymentInfoView"));
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Пример #27
0
        public async Task <IActionResult> SummaryPost(string stripeToken, OrderHeader orderHeader, OrderDetailsCart orderdetailsCart)
        {
            //-- sega dobaveno
            //var detailCart = new Models.ViewModels.OrderDetailsCart()

            //{
            //    OrderHeader = orderHeader
            //};
            //-- do tuk
            //var detalCart = orderdetailsCart;

            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            detailCart.listCart = await _db.ShoppingCart.Where(c => c.ApplicationUserId == claim.Value).ToListAsync();


            detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusPending;
            detailCart.OrderHeader.OrderDate     = DateTime.Now;
            detailCart.OrderHeader.UserId        = claim.Value;
            detailCart.OrderHeader.Status        = SD.PaymentStatusPending;

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

            _db.OrderHeader.Add(detailCart.OrderHeader);
            await _db.SaveChangesAsync();



            foreach (var item in detailCart.listCart)
            {
                item.MenuItem = await _db.MenuItem.FirstOrDefaultAsync(m => m.Id == item.MenuItemId);

                OrderDetails orderDetails = new OrderDetails
                {
                    MenuItemId  = item.MenuItemId,
                    OrderId     = detailCart.OrderHeader.Id,
                    Desctiopion = item.MenuItem.Description,
                    Name        = item.MenuItem.Name,
                    Price       = item.MenuItem.Price,
                    Count       = item.Count
                };
                detailCart.OrderHeader.OrderTotalOriginal += orderDetails.Count * orderDetails.Price;
                _db.OrderDetails.Add(orderDetails);
            }

            // detailCart.OrderHeader.OrderTotalOriginal = detailCart.OrderHeader.OrderTotal;

            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                detailCart.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode);
                var couponFromDb = await _db.Coupon.Where(c => c.Name.ToLower() == detailCart.OrderHeader.CouponCode.ToLower()).FirstOrDefaultAsync();

                detailCart.OrderHeader.OrderTotal = SD.DiscountedPrice(couponFromDb, detailCart.OrderHeader.OrderTotalOriginal);
            }
            else
            {
                detailCart.OrderHeader.OrderTotal = detailCart.OrderHeader.OrderTotalOriginal;
            }

            detailCart.OrderHeader.CouponCodeDiscount = detailCart.OrderHeader.OrderTotalOriginal - detailCart.OrderHeader.OrderTotal;

            _db.ShoppingCart.RemoveRange(detailCart.listCart);
            HttpContext.Session.SetInt32(SD.ssShopingCartCount, 0);

            await _db.SaveChangesAsync();

            //to execute the actual payment and charge the credit card
            var options = new ChargeCreateOptions
            {
                Amount      = Convert.ToInt32(detailCart.OrderHeader.OrderTotal * 100),
                Currency    = "BGN",
                Description = "Order ID: " + detailCart.OrderHeader.Id,
                Source      = stripeToken
            };

            //
            var service = new ChargeService();
            //to make the actual trasaction
            Charge charge = service.Create(options);

            //check the result
            if (charge.BalanceTransactionId == null)
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }
            else
            {
                detailCart.OrderHeader.TransactionId = charge.BalanceTransactionId;
            }

            if (charge.Status.ToLower() == "succeeded")
            {
                //send order confirmation Email to the customer
                await _emailSender.SendEmailAsync(_db.Users.Where(u => u.Id == claim.Value).FirstOrDefault().Email,
                                                  "Lazy Dayze order " + detailCart.OrderHeader.Id.ToString() + " successfully accepted!",
                                                  "You order number " + detailCart.OrderHeader.Id.ToString() + " has been submitted successfully");

                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                detailCart.OrderHeader.Status        = SD.StatusSubmitted;
            }
            else
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }
            //

            await _db.SaveChangesAsync();

            return(RedirectToAction("Confirm", "Order", new { id = detailCart.OrderHeader.Id }));
            // return RedirectToAction("Index", "Home");
        }
Пример #28
0
        public async Task <IActionResult> SummaryPost(string stripeToken)
        {
            //---User id of logged user
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

            //---Modify detail cart
            //---Retrieve shopping cart
            detailCart.listCart = await _db.ShoppingCart.Where(c => c.ApplicationUserId == claim.Value).ToListAsync();

            //
            detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusPending;
            detailCart.OrderHeader.OrderDate     = DateTime.Now;
            detailCart.OrderHeader.UserId        = claim.Value;
            detailCart.OrderHeader.Status        = SD.PaymentStatusPending;
            detailCart.OrderHeader.PickupTime    = Convert.ToDateTime(detailCart.OrderHeader.PickupDate.ToShortDateString() + " " + detailCart.OrderHeader.PickupTime.ToShortTimeString());

            //---List of order details
            List <OrderDetails> orderDetatilsList = new List <OrderDetails>();

            _db.OrderHeader.Add(detailCart.OrderHeader);
            //--Order header created in DB
            await _db.SaveChangesAsync();

            detailCart.OrderHeader.OrderTotalOriginal = 0;

            foreach (var item in detailCart.listCart)
            {
                item.MenuItem = await _db.MenuItem.FirstOrDefaultAsync(m => m.Id == item.MenuItemId);

                OrderDetails orderDetails = new OrderDetails
                {
                    MenuItemId  = item.MenuItemId,
                    OrderId     = detailCart.OrderHeader.Id,
                    Description = item.MenuItem.Description,
                    Name        = item.MenuItem.Name,
                    Price       = item.MenuItem.Price,
                    Count       = item.Count
                };
                //--For each item, calculate and add to total
                detailCart.OrderHeader.OrderTotalOriginal += orderDetails.Count * orderDetails.Price;
                _db.OrderDetails.Add(orderDetails);
            }
            //---Use of coupon code and update the price
            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                detailCart.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode);
                var couponFromDb = await _db.Coupon.Where(c => c.Name.ToLower() == detailCart.OrderHeader.CouponCode.ToLower()).FirstOrDefaultAsync();

                //---Coupon Applied, updating order total
                detailCart.OrderHeader.OrderTotal = SD.DiscountedPrice(couponFromDb, detailCart.OrderHeader.OrderTotalOriginal);
            }
            else
            {
                detailCart.OrderHeader.OrderTotal = detailCart.OrderHeader.OrderTotalOriginal;
            }
            detailCart.OrderHeader.CouponCodeDiscount = detailCart.OrderHeader.OrderTotalOriginal - detailCart.OrderHeader.OrderTotal;
            //---Remove from session and shopping cart
            await _db.SaveChangesAsync();

            _db.ShoppingCart.RemoveRange(detailCart.listCart);
            HttpContext.Session.SetInt32(SD.ssShoppingCartCount, 0);
            //---Saving everything
            await _db.SaveChangesAsync();

            //---Stripe funcionality
            var options = new ChargeCreateOptions
            {
                Amount      = Convert.ToInt32(detailCart.OrderHeader.OrderTotal * 100),
                Currency    = "usd",
                Description = "Order ID: " + detailCart.OrderHeader.Id,
                SourceId    = stripeToken
            };

            var    service = new ChargeService();
            Charge charge  = service.Create(options);

            //---Check if there is a transaction id
            if (charge.BalanceTransactionId == null)
            {
                //---There was a problem, report
                detailCart.OrderHeader.Status = SD.PaymentStatusRejected;
            }
            else
            {
                detailCart.OrderHeader.TransactionId = charge.BalanceTransactionId;
            }
            if (charge.Status.ToLower() == "succeeded")
            {
                //Payment approved!
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                detailCart.OrderHeader.Status        = SD.StatusSubmitted;
            }
            else
            {
                //---Not approved
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }

            //---Finally, save changes
            await _db.SaveChangesAsync();

            //---For testing purposes
            //return RedirectToAction("Index", "Home");

            return(RedirectToAction("Confirm", "Order", new { id = detailCart.OrderHeader.Id }));
        }
Пример #29
0
        public async Task <IActionResult> SummaryPost(string stripeEmail, string stripeToken)
        {
            var claimsIdentity = (ClaimsIdentity)User.Identity;
            var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);



            detailCart.listCart = await _db.ShoppingCart.Where(c => c.ApplicationUserId == claim.Value).ToListAsync();


            detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusPending;
            detailCart.OrderHeader.OrderDate     = DateTime.Now;
            detailCart.OrderHeader.UserId        = claim.Value;
            detailCart.OrderHeader.Status        = SD.PaymentStatusPending;
            detailCart.OrderHeader.PickUpTime    = Convert.ToDateTime(detailCart.OrderHeader.PickUpDate.ToShortDateString() + " " + detailCart.OrderHeader.PickUpTime.ToShortTimeString());

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

            _db.OrderHeader.Add(detailCart.OrderHeader);
            await _db.SaveChangesAsync();

            detailCart.OrderHeader.OrderTotalOriginal = 0;


            ApplicationUser applicationUser = await _db.ApplicationUser.Where(c => c.Id == claim.Value).FirstOrDefaultAsync();



            foreach (var item in detailCart.listCart)
            {
                item.MenuItem = await _db.MenuItem.FirstOrDefaultAsync(m => m.Id == item.MenuItemId);

                OrderDetails orderDetails = new OrderDetails
                {
                    MenuItemId = item.MenuItemId,
                    OrderId    = detailCart.OrderHeader.Id,
                    Descrption = item.MenuItem.Description,
                    Name       = item.MenuItem.Name,
                    Price      = item.MenuItem.Price,
                    Count      = item.Count
                };
                detailCart.OrderHeader.OrderTotalOriginal += orderDetails.Count * orderDetails.Price;
                _db.OrderDetails.Add(orderDetails);
            }

            if (HttpContext.Session.GetString(SD.ssCouponCode) != null)
            {
                detailCart.OrderHeader.CouponCode = HttpContext.Session.GetString(SD.ssCouponCode);
                var couponFromDb = await _db.Coupon.Where(c => c.Name.ToLower() == detailCart.OrderHeader.CouponCode.ToLower()).FirstOrDefaultAsync();

                detailCart.OrderHeader.OrderTotal = SD.DiscountedPrice(couponFromDb, detailCart.OrderHeader.OrderTotalOriginal);
            }
            else
            {
                detailCart.OrderHeader.OrderTotal = detailCart.OrderHeader.OrderTotalOriginal;
            }
            detailCart.OrderHeader.CouponCodeDiscount = detailCart.OrderHeader.OrderTotalOriginal - detailCart.OrderHeader.OrderTotal;

            _db.ShoppingCart.RemoveRange(detailCart.listCart);
            HttpContext.Session.SetInt32(SD.ssShoppingCartCount, 0);
            await _db.SaveChangesAsync();

            var options = new ChargeCreateOptions
            {
                Amount      = Convert.ToInt32(detailCart.OrderHeader.OrderTotal * 100),
                Currency    = "usd",
                Description = "Order ID : " + detailCart.OrderHeader.Id,
                SourceId    = stripeToken
            };
            var    service = new ChargeService();
            Charge charge  = service.Create(options);

            if (charge.BalanceTransactionId == null)
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }
            else
            {
                detailCart.OrderHeader.TransactionId = charge.BalanceTransactionId;
            }

            if (charge.Status.ToLower() == "succeeded")
            {
                await _emailSender.SendEmailAsync(_db.Users.Where(u => u.Id == claim.Value).FirstOrDefault().Email, "Spice - Order Created" + detailCart.OrderHeader.Id.ToString(), "Order has been submitted successfully.");

                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusApproved;
                detailCart.OrderHeader.Status        = SD.StatusSubmitted;
            }
            else
            {
                detailCart.OrderHeader.PaymentStatus = SD.PaymentStatusRejected;
            }

            await _db.SaveChangesAsync();

            // return RedirectToAction("Index", "Home");
            return(RedirectToAction("Confirm", "Order", new { id = detailCart.OrderHeader.Id }));
        }
Пример #30
0
        public async Task <ActionResult> contratLocationClient(String stripeToken, decimal idLocation)
        {
            Location currentLocation = db.Location.FirstOrDefault(p => p.id == idLocation);

            if (currentLocation == null)
            {
                TempData["result_code"] = -1;
                TempData["message"]     = "Temps fourni pour le payment est expiré veuillez réessayer.";
                TempData.Keep();
                //TODO rediriger a la liste des candidatures
                return(RedirectToAction("mesDemandeLocation"));
            }

            Inscrire candidat = db.Inscrire.Where(p => p.id == currentLocation.Ins_id).First();

            if (candidat == null)
            {
                return(HttpNotFound());
            }
            Inscrire client = db.Inscrire.Where(p => p.id == currentLocation.Ins_id2).First();

            if (client == null)
            {
                return(HttpNotFound());
            }


            if (String.IsNullOrEmpty(stripeToken))
            {
                return(HttpNotFound());
            }
            StripeConfiguration.SetApiKey("sk_test_51Gx6jgIK0UhIWHGbs9dcTW7tyGLkl39s6waxls9Z5D8E0arsL4bjy9N0g563Tlzo5JNvbeFOkAl5fMEY85eerPIx00mYJFiqLY");

            var stripeOptions = new ChargeCreateOptions
            {
                Amount      = (long)Math.Ceiling(currentLocation.remuneration.Value) * 35 / 100, // 1 dollar is equal to 100 cent.
                Currency    = "USD",
                Description = "Charge for payment of 35% of Location",
                Source      = stripeToken,
                //Customer = customer.Id
            };
            var service = new ChargeService();

            if (Session["id"] == null)
            {
                return(HttpNotFound());
            }
            int idUserSession = Convert.ToInt32(Session["id"]);

            currentLocation.dateSgnClt      = DateTime.Now;
            currentLocation.avisClient      = 2;
            currentLocation.signClient      = 2;
            db.Entry(currentLocation).State = EntityState.Modified;


            double        amount        = (long)Math.Ceiling(currentLocation.remuneration.Value) * 35 / 100;
            FraisLocation fraisLocation = new FraisLocation();

            fraisLocation.archived = 1;
            fraisLocation.avance   = amount;
            fraisLocation.created  = DateTime.Now;
            fraisLocation.etat     = 0; //TODO mettre le bon etat
            fraisLocation.Ins_id   = candidat.id;
            fraisLocation.Ins_id2  = client.id;
            fraisLocation.Loc_id   = currentLocation.id;
            fraisLocation.libelle  = "Paiement de 35% pour la location";
            fraisLocation.montant  = Convert.ToDouble(currentLocation.remuneration);
            fraisLocation.userId   = idUserSession;
            fraisLocation.reste    = Convert.ToDouble(currentLocation.remuneration) - amount;
            fraisLocation.status   = 0;

            //TODO mettre le bon status je suppose o veut dire non achevé
            db.FraisLocation.Add(fraisLocation);


            try
            {
                Charge charge = service.Create(stripeOptions);
                var    map    = new Dictionary <String, String>();
                map.Add("@ViewBag.titre", "Paiement de 35% du salaire pour la location  de l'employé " + candidat.login);
                map.Add("@ViewBag.login", client.login);
                map.Add("@ViewBag.content", "Votre paiement a bien été pris en compte. Le montant à été prélever de votre compte avec succès. Bénéficiez du meilleur de nos service.");
                string body = MsMail.BuldBodyTemplate("~/EmailTemplate/CustomEmail.cshtml", map);

                var map1 = new Dictionary <String, String>();
                map1.Add("@ViewBag.titre", "Vous êtes sollicité pour un travail  ");
                map1.Add("@ViewBag.login", candidat.login);
                map1.Add("@ViewBag.content", "Votre demande de location a été confimer. Vous êtes conviez a prendre service le plutôt possible.");
                string body2 = MsMail.BuldBodyTemplate("~/EmailTemplate/CustomEmail.cshtml", map1);

                MsMail mail  = new MsMail();
                MsMail mail2 = new MsMail();

                db.SaveChanges();

                //TODO retraviller le mail avec du HTML
                await mail.Send(client.email, "Paiement location", body);

                await mail2.Send(candidat.email, "NiovarJobs, Demande location accepté ", body2);

                //TODO rediriger a la liste des candidatures
                return(RedirectToAction("mesDemandeLocation"));
            }
            catch (StripeException e)
            {
                // throw;
                return(RedirectToAction("contratLocationClient", new { id = currentLocation.id }));
            }

            return(RedirectToAction("contratLocationClient", new { id = currentLocation.id }));
        }