Exemplo n.º 1
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;
        }