/// <summary>
        /// Activates the loyalty account for the current user cart.
        /// </summary>
        /// <param name="storefront">
        /// The storefront.
        /// </param>
        /// <param name="userId">
        /// The user Id.
        /// </param>
        /// <returns>
        /// The manager response where the loyalty card is returned in the Result.
        /// </returns>
        public virtual ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard> ActivateAccount([NotNull] CommerceStorefront storefront, string userId)
        {
            var result = new JoinLoyaltyProgramResult {
                Success = false
            };
            var cartResult = this.CartManager.GetCart(userId);

            if (!cartResult.ServiceProviderResult.Success || cartResult.Result == null)
            {
                result.SystemMessages.ToList().AddRange(cartResult.ServiceProviderResult.SystemMessages);
                return(new ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard>(result, null));
            }

            var errorResult = new JoinLoyaltyProgramResult()
            {
                Success = false
            };

            // Limit the number of loyalty programs a user may join.
            var currentLoyaltyProgramResult = this.GetLoyaltyCards(storefront, userId, false);

            if (!currentLoyaltyProgramResult.ServiceProviderResult.Success)
            {
                currentLoyaltyProgramResult.ServiceProviderResult.SystemMessages.ToList().ForEach(m => errorResult.SystemMessages.Add(m));
                return(new ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard>(errorResult, null));
            }

            //TODO : Replace with call to Sitecore config item
            var maxLoyaltyProgramsToJoin = 10;

            if (currentLoyaltyProgramResult.Result.Count() >= maxLoyaltyProgramsToJoin)
            {
                var message = "You have reached the maximum number of loyalty programs to join {0}";
                message = string.Format(CultureInfo.InvariantCulture, message, maxLoyaltyProgramsToJoin);
                errorResult.SystemMessages.Add(new SystemMessage()
                {
                    Message = message
                });
                return(new ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard>(errorResult, null));
            }

            var cart    = (CommerceCart)cartResult.ServiceProviderResult.Cart;
            var request = new Sitecore.Commerce.Connect.DynamicsRetail.Services.LoyaltyPrograms.JoinLoyaltyProgramRequest(userId, storefront.ShopName)
            {
                CartId = cart.ExternalId
            };

            result = this.LoyaltyProgramServiceProvider.JoinLoyaltyProgram(request);

            result.WriteToSitecoreLog();
            return(new ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard>(result, result.LoyaltyCard));
        }
예제 #2
0
        /// <summary>
        /// Activates the loyalty account for the current user cart.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="visitorContext">The visitor context.</param>
        /// <returns>
        /// The manager response where the loyalty card is returned in the Result.
        /// </returns>
        public virtual ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard> ActivateAccount([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext)
        {
            var result = new JoinLoyaltyProgramResult {
                Success = false
            };
            var cartResult = this.CartManager.GetCurrentCart(storefront, visitorContext, false);

            if (!cartResult.ServiceProviderResult.Success || cartResult.Result == null)
            {
                result.SystemMessages.ToList().AddRange(cartResult.ServiceProviderResult.SystemMessages);
                return(new ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard>(result, null));
            }

            var errorResult = new JoinLoyaltyProgramResult()
            {
                Success = false
            };

            // Limit the number of loyalty programs a user may join.
            var currentLoyaltyProgramResult = this.GetLoyaltyCards(storefront, visitorContext.UserId);

            if (!currentLoyaltyProgramResult.ServiceProviderResult.Success)
            {
                currentLoyaltyProgramResult.ServiceProviderResult.SystemMessages.ToList().ForEach(m => errorResult.SystemMessages.Add(m));
                return(new ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard>(errorResult, null));
            }

            int maxLoyaltyProgramsToJoin = ((DynamicsStorefront)StorefrontManager.CurrentStorefront).MaxNumberOfLoyaltyProgramsToJoin;

            if (currentLoyaltyProgramResult.Result.Count() >= maxLoyaltyProgramsToJoin)
            {
                var message = StorefrontManager.GetSystemMessage(StorefrontConstants.SystemMessages.MaxLoyaltyProgramsToJoinReached);
                message = string.Format(CultureInfo.InvariantCulture, message, maxLoyaltyProgramsToJoin);
                errorResult.SystemMessages.Add(new Commerce.Services.SystemMessage()
                {
                    Message = message
                });
                return(new ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard>(errorResult, null));
            }

            var cart    = (CommerceCart)cartResult.ServiceProviderResult.Cart;
            var request = new Sitecore.Commerce.Connect.DynamicsRetail.Services.LoyaltyPrograms.JoinLoyaltyProgramRequest(visitorContext.UserId, storefront.ShopName)
            {
                CartId = cart.ExternalId
            };

            result = this.LoyaltyProgramServiceProvider.JoinLoyaltyProgram(request);

            Helpers.LogSystemMessages(result.SystemMessages, result);
            return(new ManagerResponse <JoinLoyaltyProgramResult, LoyaltyCard>(result, result.LoyaltyCard));
        }
        /// <summary>
        /// Activates the loyalty account for the current user cart.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="visitorContext">The visitor context.</param>
        /// <returns>
        /// The manager response where the loyalty card is returned in the Result.
        /// </returns>
        public virtual ManagerResponse<JoinLoyaltyProgramResult, LoyaltyCard> ActivateAccount([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext)
        {
            var result = new JoinLoyaltyProgramResult { Success = false };
            var cartResult = this.CartManager.GetCurrentCart(storefront, visitorContext, false);
            if (!cartResult.ServiceProviderResult.Success || cartResult.Result == null)
            {
                result.SystemMessages.ToList().AddRange(cartResult.ServiceProviderResult.SystemMessages);
                return new ManagerResponse<JoinLoyaltyProgramResult, LoyaltyCard>(result, null);
            }

            var errorResult = new JoinLoyaltyProgramResult() { Success = false };

            // Limit the number of loyalty programs a user may join.
            var currentLoyaltyProgramResult = this.GetLoyaltyCards(storefront, visitorContext.UserId);
            if (!currentLoyaltyProgramResult.ServiceProviderResult.Success)
            {
                currentLoyaltyProgramResult.ServiceProviderResult.SystemMessages.ToList().ForEach(m => errorResult.SystemMessages.Add(m));
                return new ManagerResponse<JoinLoyaltyProgramResult, LoyaltyCard>(errorResult, null);
            }

            int maxLoyaltyProgramsToJoin = ((DynamicsStorefront)StorefrontManager.CurrentStorefront).MaxNumberOfLoyaltyProgramsToJoin;
            if (currentLoyaltyProgramResult.Result.Count() >= maxLoyaltyProgramsToJoin)
            {
                var message = StorefrontManager.GetSystemMessage("MaxLoyaltyProgramsToJoinReached");
                message = string.Format(CultureInfo.InvariantCulture, message, maxLoyaltyProgramsToJoin);
                errorResult.SystemMessages.Add(new Commerce.Services.SystemMessage() { Message = message });
                return new ManagerResponse<JoinLoyaltyProgramResult, LoyaltyCard>(errorResult, null);
            }

            var cart = (CommerceCart)cartResult.ServiceProviderResult.Cart;
            var request = new Sitecore.Commerce.Connect.DynamicsRetail.Services.LoyaltyPrograms.JoinLoyaltyProgramRequest(visitorContext.UserId, storefront.ShopName) { CartId = cart.ExternalId };
            result = this.LoyaltyProgramServiceProvider.JoinLoyaltyProgram(request);

            Helpers.LogSystemMessages(result.SystemMessages, result);
            return new ManagerResponse<JoinLoyaltyProgramResult, LoyaltyCard>(result, result.LoyaltyCard);
        }