Skip to content

Commit f184baa

Browse files
committed
Merge branch '4.90-bug-fixes' into develop
2 parents 3bc030f + fac1a3e commit f184baa

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

src/Libraries/Nop.Services/Discounts/DiscountService.cs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,32 +67,33 @@ public DiscountService(ICustomerService customerService,
6767
/// <summary>
6868
/// Get discount validation result
6969
/// </summary>
70-
/// <param name="requirements">Collection of discount requirement</param>
70+
/// <param name="requirementsToValidate">Collection of discount requirement to validate rules</param>
71+
/// <param name="allRequirements">Collection of all discount requirement related to discount</param>
7172
/// <param name="groupInteractionType">Interaction type within the group of requirements</param>
7273
/// <param name="customer">Customer</param>
7374
/// <param name="errors">Errors</param>
7475
/// <returns>
7576
/// A task that represents the asynchronous operation
7677
/// The task result contains true if result is valid; otherwise false
7778
/// </returns>
78-
protected virtual async Task<bool> GetValidationResultAsync(IList<DiscountRequirement> requirements,
79+
protected virtual async Task<bool> GetValidationResultAsync(IList<DiscountRequirement> requirementsToValidate, IList<DiscountRequirement> allRequirements,
7980
RequirementGroupInteractionType groupInteractionType, Customer customer, List<string> errors)
8081
{
8182
var result = false;
8283

83-
var requirementsForCheck = requirements.Any(r => !r.ParentId.HasValue)
84-
? requirements.Where(r => !r.ParentId.HasValue)
85-
: requirements;
84+
var requirementsForCheck = requirementsToValidate.Any(r => !r.ParentId.HasValue)
85+
? requirementsToValidate.Where(r => !r.ParentId.HasValue)
86+
: requirementsToValidate;
8687

8788
foreach (var requirement in requirementsForCheck)
8889
{
8990
if (requirement.IsGroup)
9091
{
91-
var childRequirements = requirements.Where(r => r.ParentId == requirement.Id).ToList();
92+
var childRequirements = allRequirements.Where(r => r.ParentId == requirement.Id).ToList();
9293

9394
//get child requirements for the group
9495
var interactionType = requirement.InteractionType ?? RequirementGroupInteractionType.And;
95-
result = await GetValidationResultAsync(childRequirements, interactionType, customer, errors);
96+
result = await GetValidationResultAsync(childRequirements, allRequirements, interactionType, customer, errors);
9697
}
9798
else
9899
{
@@ -134,6 +135,22 @@ protected virtual async Task<bool> GetValidationResultAsync(IList<DiscountRequir
134135

135136
return result;
136137
}
138+
139+
/// <summary>
140+
/// Get discount validation result
141+
/// </summary>
142+
/// <param name="requirements">Collection of discount requirement to validate rules</param>
143+
/// <param name="groupInteractionType">Interaction type within the group of requirements</param>
144+
/// <param name="customer">Customer</param>
145+
/// <param name="errors">Errors</param>
146+
/// <returns>
147+
/// A task that represents the asynchronous operation
148+
/// The task result contains true if result is valid; otherwise false
149+
/// </returns>
150+
protected virtual async Task<bool> GetValidationResultAsync(IList<DiscountRequirement> requirements, RequirementGroupInteractionType groupInteractionType, Customer customer, List<string> errors)
151+
{
152+
return await GetValidationResultAsync(requirements, requirements, groupInteractionType, customer, errors);
153+
}
137154

138155
#endregion
139156

@@ -606,7 +623,7 @@ public virtual async Task<DiscountValidationResult> ValidateDiscountAsync(Discou
606623
//requirements exist, let's check them
607624
var errors = new List<string>();
608625

609-
result.IsValid = await GetValidationResultAsync(requirements, topLevelGroup.InteractionType.Value, customer, errors);
626+
result.IsValid = await GetValidationResultAsync(requirements, requirements, topLevelGroup.InteractionType.Value, customer, errors);
610627

611628
//set errors if result is not valid
612629
if (!result.IsValid)

0 commit comments

Comments
 (0)