diff --git a/src/VirtoCommerce.Xapi.Core/Services/ILoadUserToEvalContextService.cs b/src/VirtoCommerce.Xapi.Core/Services/ILoadUserToEvalContextService.cs index d1959a2..42a15a4 100644 --- a/src/VirtoCommerce.Xapi.Core/Services/ILoadUserToEvalContextService.cs +++ b/src/VirtoCommerce.Xapi.Core/Services/ILoadUserToEvalContextService.cs @@ -6,5 +6,7 @@ namespace VirtoCommerce.Xapi.Core.Services public interface ILoadUserToEvalContextService { Task SetShopperDataFromMember(EvaluationContextBase evalContextBase, string customerId); + + Task SetShopperDataFromOrganization(EvaluationContextBase evalContextBase, string organizationId); } } diff --git a/src/VirtoCommerce.Xapi.Data/Services/LoadUserToEvalContextService.cs b/src/VirtoCommerce.Xapi.Data/Services/LoadUserToEvalContextService.cs index 394bac7..9cf82e6 100644 --- a/src/VirtoCommerce.Xapi.Data/Services/LoadUserToEvalContextService.cs +++ b/src/VirtoCommerce.Xapi.Data/Services/LoadUserToEvalContextService.cs @@ -43,24 +43,37 @@ public virtual async Task SetShopperDataFromMember(EvaluationContextBase evalCon evalContextBase.GeoTimeZone = contact.TimeZone; - evalContextBase.UserGroups = contact.Groups?.ToArray(); + var userGroups = new List(); - if (!contact.Organizations.IsNullOrEmpty()) + if (!evalContextBase.UserGroups.IsNullOrEmpty()) { - var userGroups = new List(); - - if (!evalContextBase.UserGroups.IsNullOrEmpty()) - { - userGroups.AddRange(evalContextBase.UserGroups); - } + userGroups.AddRange(evalContextBase.UserGroups); + } - var organizations = await _memberService.GetByIdsAsync(contact.Organizations.ToArray(), MemberResponseGroup.WithGroups.ToString()); - userGroups.AddRange(organizations.OfType().SelectMany(x => x.Groups)); + userGroups.AddRange(contact.Groups?.ToArray()); - evalContextBase.UserGroups = userGroups.Distinct().ToArray(); - } + evalContextBase.UserGroups = userGroups.Distinct().ToArray(); } } + public async Task SetShopperDataFromOrganization(EvaluationContextBase evalContextBase, string organizationId) + { + if (organizationId.IsNullOrEmpty()) + { + return; + } + + var userGroups = new List(); + + if (!evalContextBase.UserGroups.IsNullOrEmpty()) + { + userGroups.AddRange(evalContextBase.UserGroups); + } + + var organizations = await _memberService.GetByIdsAsync([organizationId], MemberResponseGroup.WithGroups.ToString()); + userGroups.AddRange(organizations.OfType().SelectMany(x => x.Groups)); + + evalContextBase.UserGroups = userGroups.Distinct().ToArray(); + } } }