Beispiel #1
0
        public CartSummary GenerateCartSummary(SessionCart currentCart)
        {
            CartSummary cartSummary = new CartSummary
                {
                    CartItems = GenerateLineItems(currentCart),
                    SummaryMessages = new List<string>()
                };

            ApplySpecials(cartSummary);

            if (!string.IsNullOrEmpty(currentCart.DiscountCode))
            {
                if (!ApplyDiscount(cartSummary, currentCart))
                    currentCart.DiscountCode = string.Empty;
            }

            return cartSummary;
        }
Beispiel #2
0
        private bool SaveCart(SessionCart tempCart, CartSummary summary, int userId, string transactionId, CartType cartType)
        {
            try
            {
                Cart cart = new Cart
                {
                    TransactionDate = DateTime.Now,
                    TransactionId = transactionId,
                    UserId = userId,
                    CartType = cartType,
                    CartItems = new List<CartItem>(),
                    TotalCost = summary.TotalCost
                };

                _repository.Carts.Create(cart);
                _repository.SaveChanges();

                foreach (var summaryItem in summary.CartItems)
                {
                    CartItem newItem = new CartItem
                        {
                            CartId = cart.CartId,
                            PurchaseItemId = summaryItem.PurchaseItemId,
                            Cost = summaryItem.ItemCost,
                            Total = summaryItem.ItemTotal,
                            StandAloneItem = summaryItem.ProcessType == ProcessType.Individual ? true : false,
                            LocalTaxPercentage = summaryItem.LocalTaxPercentage,
                            LocalTaxValue = summaryItem.LocalTax,
                            StateTaxPercentage = summaryItem.StateTaxPercentage,
                            StateTaxValue = summaryItem.StateTax,
                            DiscountItemId = summaryItem.DiscountItemId,
                            DiscountValue = summaryItem.DiscountValue,
                            DiscountType = summaryItem.DiscountType,
                            DiscountValueTotal = summaryItem.DiscountTotal
                        };

                    cart.CartItems.Add(newItem);

                    _repository.SaveChanges();

                    if (summaryItem.SessionKey.HasValue && tempCart.ActionItems[summaryItem.SessionKey.Value].ActionObject != null)
                    {
                        ActionItem action = tempCart.ActionItems[summaryItem.SessionKey.Value];
                        int? discountId = summaryItem.DiscountItemId;
                        CompleteActions(action, newItem.CartItemId, discountId, transactionId);
                    }

                }

                IEmailService emailService = new EmailService();
                emailService.SendPaymentConfirmationEmail(cart.CartId);

                tempCart.ResultingConfirmationCode = cart.TransactionId;

                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
Beispiel #3
0
 // remove all the processing fees from this cart...
 private void RemoveProcessingFee(CartSummary cartSummary)
 {
     var fees =
         cartSummary.CartItems.Where(
             item => item.PurchaseType == PurchaseType.Fee && item.ItemName == PROCESSING_FEE).ToList();
     foreach (var item in fees)
     {
         cartSummary.CartItems.Remove(item);
     }
 }
Beispiel #4
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 #5
0
        private void ApplySpecials(CartSummary cartSummary)
        {
            //Apply upsale: if there is more than one registration give half off to the lowest registration
            var regList = cartSummary.CartItems.Where(x => x.PurchaseType == PurchaseType.Registration && x.ItemCost > 0).OrderBy(x => x.ItemCost).ToList();

            if (regList.Count > 1)
            {
                regList[0].ItemCost = regList[0].ItemCost / 2;
                regList[0].ItemDescription += " including upsale.";
            }
        }
Beispiel #6
0
        private bool ApplyDiscount(CartSummary cartSummary, SessionCart currentCart)
        {
            DiscountItem discount = _repository.DiscountItems.Find(x => x.Code.ToLower() == currentCart.DiscountCode.ToLower());

            if (discount != null)
            {
                if (cartSummary.TotalCost == 0) {
                    discount = null;
                    currentCart.DiscountCode = null;
                    cartSummary.SummaryMessages.Add("You cannot apply a discount code to this cart. There are no charges.");
                }

                if (discount is RedemptionCode)
                {
                    var discountableRegList = cartSummary.CartItems.Where(x => x.PurchaseType == PurchaseType.Registration && x.Discountable == true).OrderByDescending(x => x.ItemCost).ToList();

                    if (discountableRegList.Count() > 0)
                    {
                        RedemptionCode code = (RedemptionCode)discount;

                        IDiscountService discountService = new DiscountService(this._repository, false);
                        ServiceResult validationResult = discountService.ValidateDiscount(code);

                        if (validationResult.Success)
                        {
                            var cost = discountableRegList[0].ItemCost;
                            var discountValue = code.DiscountType == DiscountType.Dollars ? code.Value : cost * (code.Value / 100);

                            discountableRegList[0].DiscountItemId = code.DiscountItemId;
                            discountableRegList[0].DiscountDescription = code.Code;
                            discountableRegList[0].DiscountType = code.DiscountType;
                            discountableRegList[0].DiscountValue = discountableRegList[0].ItemTotal <= 0 ? cost : discountValue;

                            if (NeedToRemoveProcessingFee(currentCart, code))
                                RemoveProcessingFee(cartSummary);
                        }
                        else
                            cartSummary.SummaryMessages.Add(validationResult.GetServiceErrors().First().ErrorMessage);
                    }
                    else
                        cartSummary.SummaryMessages.Add("There are no applicable items for this discount.");
                }

                if (discount is Coupon)
                {
                    Coupon coupon = (Coupon)discount;
                    IDiscountService discountService = new DiscountService(this._repository, false);
                    ServiceResult validationResult = discountService.ValidateDiscount(coupon);

                    if (validationResult.Success)
                    {
                        switch (coupon.CouponType)
                        {
                            case CouponType.Registration:
                                var discountableRegList = cartSummary.CartItems.Where(
                                                x => x.PurchaseType == PurchaseType.Registration &&
                                                x.Discountable == true &&
                                                x.EventId == ((coupon.EventId.HasValue) ? coupon.EventId.Value : x.EventId)).OrderByDescending(x => x.ItemCost).ToList();

                                if (discountableRegList.Any())
                                {
                                    var cost = discountableRegList[0].ItemCost;
                                    var discountValue = coupon.DiscountType == DiscountType.Dollars ? coupon.Value : cost * (coupon.Value / 100);
                                    var discountedCost = cost - discountValue;

                                    discountableRegList[0].DiscountItemId = coupon.DiscountItemId;
                                    discountableRegList[0].DiscountDescription = coupon.Code;
                                    discountableRegList[0].DiscountType = coupon.DiscountType;
                                    discountableRegList[0].DiscountValue = discountableRegList[0].ItemTotal <= 0 ? cost : discountValue;

                                    if (NeedToRemoveProcessingFee(currentCart, coupon))
                                        RemoveProcessingFee(cartSummary);
                                }
                                else
                                    cartSummary.SummaryMessages.Add("There are no applicable items for this discount.");

                                break;
                        }
                    }
                    else
                        cartSummary.SummaryMessages.Add(validationResult.GetServiceErrors().First().ErrorMessage);
                }
            }
            else
                cartSummary.SummaryMessages.Add("This discount does not exist.");

            return cartSummary.SummaryMessages.Count <= 0;
        }