@@ -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