public void Can_not_add_duplicate_giftCardCouponCodes() { var customer = new Customer(); customer.ApplyGiftCardCouponCode("code1"); customer.ApplyGiftCardCouponCode("code2"); customer.ApplyGiftCardCouponCode("code1"); var codes = customer.ParseAppliedGiftCardCouponCodes(); codes.Length.ShouldEqual(2); codes[0].ShouldEqual("code1"); codes[1].ShouldEqual("code2"); }
/// <summary> /// Removes a coupon code /// </summary> /// <param name="customer">Customer</param> /// <param name="couponCode">Coupon code to remove</param> /// <returns>New coupon codes document</returns> public static void RemoveGiftCardCouponCode(this Customer customer, string couponCode) { //get applied coupon codes var existingCouponCodes = customer.ParseAppliedGiftCardCouponCodes(); //clear them customer.GiftCardCouponCodes = string.Empty; //save again except removed one foreach (string existingCouponCode in existingCouponCodes) { if (!existingCouponCode.Equals(couponCode, StringComparison.InvariantCultureIgnoreCase)) { customer.ApplyGiftCardCouponCode(existingCouponCode); } } }
/// <summary> /// Migrate shopping cart /// </summary> /// <param name="fromCustomer">From customer</param> /// <param name="toCustomer">To customer</param> /// <param name="includeCouponCodes">A value indicating whether to coupon codes (discount and gift card) should be also re-applied</param> public virtual void MigrateShoppingCart(Customer fromCustomer, Customer toCustomer, bool includeCouponCodes) { if (fromCustomer == null) throw new ArgumentNullException("fromCustomer"); if (toCustomer == null) throw new ArgumentNullException("toCustomer"); if (fromCustomer.ID == toCustomer.ID) return; //the same customer //shopping cart items var fromCart = fromCustomer.ShoppingCartItems.ToList(); for (int i = 0; i < fromCart.Count; i++) { var sci = fromCart[i]; AddToCart(toCustomer, sci.Product, sci.ShoppingCartType, sci.StoreId, sci.AttributesXml, sci.CustomerEnteredPrice, sci.RentalStartDateUtc, sci.RentalEndDateUtc, sci.Quantity, false); } for (int i = 0; i < fromCart.Count; i++) { var sci = fromCart[i]; DeleteShoppingCartItem(sci); } //migrate gift card and discount coupon codes if (includeCouponCodes) { //discount var discountCouponCode = fromCustomer.GetAttribute<string>(SystemCustomerAttributeNames.DiscountCouponCode); if (!String.IsNullOrEmpty(discountCouponCode)) _genericAttributeService.SaveAttribute(toCustomer, SystemCustomerAttributeNames.DiscountCouponCode, discountCouponCode); //gift card foreach (var gcCode in fromCustomer.ParseAppliedGiftCardCouponCodes()) toCustomer.ApplyGiftCardCouponCode(gcCode); //save customer _customerService.UpdateCustomer(toCustomer); } }
private void SyncCartWithKlarnaOrder(Customer customer, KlarnaCheckoutOrder klarnaCheckoutOrder) { var currentStoreId = _storeContext.CurrentStore.Id; var orderCurrency = _currencyService.GetCurrencyByCode(klarnaCheckoutOrder.PurchaseCurrency); if (orderCurrency != null) { _workContext.WorkingCurrency = orderCurrency; } ClearItemsInCart(customer, currentStoreId); ClearDiscountsAndShippingSelection(customer, currentStoreId); var physicalItems = klarnaCheckoutOrder.Cart.Items.Where(x => x.Type == CartItem.TypePhysical); var appliedCoupons = klarnaCheckoutOrder.Cart.Items.Where(x => x.Type == CartItem.TypeDiscount && x.HasOrderLevelDiscountCouponCode()); var appliedGiftCards = klarnaCheckoutOrder.Cart.Items.Where(x => x.Type == CartItem.TypeDiscount && x.IsDiscountGiftCardCartItem()); var appliedRewardPoints = klarnaCheckoutOrder.Cart.Items.Where(x => x.Type == CartItem.TypeDiscount && x.IsRewardPointsCartItem()); var checkoutAttributes = klarnaCheckoutOrder.Cart.Items.Where(x => x.Type == CartItem.TypeDiscount && x.IsCheckoutAttribtue()); var shippingItems = klarnaCheckoutOrder.Cart.Items.Where(x => x.Type == CartItem.TypeShippingFee); foreach (var physicalItem in physicalItems) { AddPhysicalItemToCart(customer, physicalItem, currentStoreId); var couponCodes = physicalItem.GetCouponCodesFromPhysicalCartItem(); foreach (var couponCode in couponCodes) { UseCouponCode(customer, couponCode); } } foreach (var coupon in appliedCoupons) { var couponCode = coupon.GetCouponCodeFromDiscountCouponCartItem(); UseCouponCode(customer, couponCode); } foreach (var giftCardCartItem in appliedGiftCards) { var giftCardId = giftCardCartItem.GetGiftCardIdFromDiscountGiftCardCartItem(); var giftCard = _giftCardService.GetGiftCardById(giftCardId); customer.ApplyGiftCardCouponCode(giftCard.GiftCardCouponCode); } if (appliedRewardPoints.Any()) { _genericAttributeService.SaveAttribute(customer, SystemCustomerAttributeNames.UseRewardPointsDuringCheckout, true, currentStoreId); } var checkoutAttributesXml = GetSelectedCheckoutAttributesThatHasNotBeenSentToKlarna(customer, currentStoreId); foreach (var item in checkoutAttributes) { var ca = _checkoutAttributeService.GetCheckoutAttributeById(item.GetCheckoutAttributeId()); checkoutAttributesXml = _checkoutAttributeParser.AddCheckoutAttribute(checkoutAttributesXml, ca, item.GetCheckoutAttributeValue()); } _genericAttributeService.SaveAttribute(customer, SystemCustomerAttributeNames.CheckoutAttributes, checkoutAttributesXml, currentStoreId); foreach (var shippingItem in shippingItems) { AddShippingItemToCart(customer, shippingItem, currentStoreId); var couponCodes = shippingItem.GetCouponCodesFromShippingItem(); foreach (var couponCode in couponCodes) { UseCouponCode(customer, couponCode); } } }