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; }
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; } }
// 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); } }
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); }
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."; } }
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; }