/// <summary>
            /// Calculates the required reason codes.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The info codes response.</returns>
            private static CalculateRequiredReasonCodesServiceResponse CalculateRequiredReasonCodes(CalculateRequiredReasonCodesServiceRequest request)
            {
                CalculateRequiredReasonCodesServiceResponse response = ReasonCodesCalculator.CalculateRequiredReasonCodes(request);

                SetProductIdsForUpsell(request.RequestContext, response.RequiredReasonCodes);

                return(response);
            }
 /// <summary>
 /// Throws exception if any requires reason code are missing.
 /// </summary>
 /// <param name="serviceResponse">The service response.</param>
 private static void ThrowIfRequiredReasonCodesMissing(CalculateRequiredReasonCodesServiceResponse serviceResponse)
 {
     if (serviceResponse.RequiredReasonCodes.Any())
     {
         throw new MissingRequiredReasonCodeException(
                   serviceResponse.RequiredReasonCodes,
                   serviceResponse.TransactionRequiredReasonCodeIds,
                   serviceResponse.ReasonCodeRequirements,
                   DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_RequiredReasonCodesMissing,
                   "One or more reason codes required for the transaction are missing.");
     }
 }