public ActionResult CheckOut(CartCheckOut model)
        {
            if (!Utilities.IsValidCart())
                return RedirectToAction("Index", "home");

            ServiceResult result = _service.ProcessCart(model, SessionManager.CurrentCart, CurrentUser.UserId);

            if (result.Success)
            {
                var confirmationCode = SessionManager.CurrentCart.ResultingConfirmationCode;
                var cartFocusType = SessionManager.CurrentCart.CheckOutFocus;
                var eventCity = (string.IsNullOrEmpty(SessionManager.CurrentCart.EventCity)) ? "" : SessionManager.CurrentCart.EventCity;
                var summary = _service.GenerateCartSummary(SessionManager.CurrentCart);
                TempData["cartSummary"] = summary;

                // ensure cart focus is correct
                ResetCartFocus();

                SessionManager.CurrentCart = null;
                return RedirectToAction("ThankYou", new { id = cartFocusType, confirm = confirmationCode, city = eventCity });
            }

            Utilities.AddModelStateErrors(ModelState, result.GetServiceErrors());
            model.ExpirationMonthList = DirtyGirlExtensions.ConvertToSelectList<Months>();
            model.ExpirationYearList = Utilities.CreateNumericSelectList(DateTime.Now.Year, DateTime.Now.AddYears(20).Year);
            model.CartSummary = _service.GenerateCartSummary(SessionManager.CurrentCart);

            return View(model);
        }
        public ActionResult CheckOut()
        {
            if (!Utilities.IsValidCart())
                return RedirectToAction("Index", "home");

            var vm = new CartCheckOut
                {
                    ExpirationMonthList = DirtyGirlExtensions.ConvertToSelectList<Months>(),
                    ExpirationYearList = Utilities.CreateNumericSelectList(DateTime.Now.Year, DateTime.Now.AddYears(20).Year),
                    CardHolderFirstname = CurrentUser.FirstName,
                    CardHolderLastname = CurrentUser.LastName,
                    CardHolderZipCode = CurrentUser.PostalCode,
                    CartSummary = _service.GenerateCartSummary(SessionManager.CurrentCart)
                };

            return View(vm);
        }
Beispiel #3
0
        private IGatewayResponse ChargeConsumer(CartCheckOut checkOutDetails, CartSummary cartSummary)
        {
            var paymentRequest = new AuthorizationRequest(checkOutDetails.CardNumber,
                                                    string.Format("{0}{1}", checkOutDetails.ExpirationMonth, checkOutDetails.ExpirationYear),
                                                    cartSummary.TotalCost,
                                                    "Dirty Girl Cart Purchase",
                                                    true);

            paymentRequest.FirstName = checkOutDetails.CardHolderFirstname;
            paymentRequest.LastName = checkOutDetails.CardHolderLastname;
            paymentRequest.Zip = checkOutDetails.CardHolderZipCode;
            paymentRequest.CardCode = checkOutDetails.CCVNumber;

            var totalTax = 0.0M;
            foreach (var item in cartSummary.CartItems)
            {
                paymentRequest.AddLineItem(item.PurchaseItemId.ToString(), item.ItemName, item.DiscountDescription, 1, item.ItemTotal, item.Taxable);
                if (item.Taxable)
                    totalTax += (item.StateTax + item.LocalTax);
            }

            paymentRequest.AddTax(totalTax);

            var gateway = new Gateway(DirtyGirlServiceConfig.Settings.PaymentGatewayId, DirtyGirlServiceConfig.Settings.PaymentGatewayKey, true);
            gateway.TestMode = DirtyGirlServiceConfig.Settings.PaymentTestMode;

            return gateway.Send(paymentRequest);
        }
Beispiel #4
0
        public ServiceResult ProcessCart(CartCheckOut checkOutDetails, SessionCart tempCart, int userId)
        {
            ServiceResult result = new ServiceResult();
            if (checkOutDetails != null && checkOutDetails.CartSummary != null && checkOutDetails.CartSummary.TotalCost > 0)
            {
                DateTime expired = new DateTime();
                expired.AddYears(checkOutDetails.ExpirationYear);
                expired.AddMonths(checkOutDetails.ExpirationMonth);

                if (DateTime.Now.CompareTo(expired) < 0)
                    result.AddServiceError("This credit card is expired");

                Regex rg = new Regex(@"^[a-zA-Z].*$");
                if (string.IsNullOrWhiteSpace(checkOutDetails.CardHolderFirstname))
                {
                    result.AddServiceError("Cardholder first name is required.");
                }
                else if (!rg.IsMatch(checkOutDetails.CardHolderFirstname))
                {
                    result.AddServiceError("Cardholder first name is invalid.");
                }

                if (string.IsNullOrWhiteSpace(checkOutDetails.CardHolderLastname))
                {
                    result.AddServiceError("Cardholder last name is required.");
                }
                else if (!rg.IsMatch(checkOutDetails.CardHolderLastname))
                {
                    result.AddServiceError("Cardholder last name is invalid.");
                }
            }

            if (result.GetServiceErrors().Count > 0)
            {
                return result;
            }
            try
            {
                CartSummary summary = GenerateCartSummary(tempCart);

                string transactionId = string.Empty;
                CartType cartType;

                if (summary.TotalCost == 0)
                {
                    transactionId = GenerateCartCode();
                    cartType = CartType.Free;
                }
                else
                {
                    IGatewayResponse payment;
                    payment = ChargeConsumer(checkOutDetails, summary);

                    if (payment.Approved)
                    {
                        transactionId = payment.TransactionID;
                        cartType = CartType.Standard;
                    }
                    else
                    {
                        switch (int.Parse(payment.ResponseCode))
                        {
                            case 2:
                                result.AddServiceError("This Card has been declined.");
                                break;
                            case 3:
                                result.AddServiceError(payment.Message);
                                break;
                            default:
                                result.AddServiceError("Card Error");
                            break;
                        }
                        return result;
                    }
                }

                if (!SaveCart(tempCart, summary, userId, transactionId, cartType))
                    result.AddServiceError("An error occured saving the shopping cart");
            }
            catch (Exception ex)
            {
                result.AddServiceError(Utilities.GetInnerMostException(ex));
            }

            return result;
        }