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