/// <summary>
 /// Visit the special services rule node. Check the parameter rules, prerequisite rules and incompatible service rules for the parcel.
 /// </summary>
 /// <param name="specialServicesRule"></param>
 public void Visit(SpecialServicesRule specialServicesRule)
 {
     foreach (var ss in _rate.SpecialServices)
     {
         if (ss.SpecialServiceId == specialServicesRule.SpecialServiceId)
         {
             if (specialServicesRule.InputParameterRules != null && specialServicesRule.InputParameterRules.Count > 1)
             {
                 if (!specialServicesRule.HasRequiredParameters(ss))
                 {
                     _state = ValidationState.INVALID;
                     Reason = string.Format("Special service {0} is missing required parameters", ss.SpecialServiceId);
                     return;
                 }
                 if (!specialServicesRule.IsValidParameterValues(ss))
                 {
                     Reason = string.Format("Special service {0} has value outside the permissable range", ss.SpecialServiceId);
                     _state = ValidationState.INVALID;
                     return;
                 }
             }
         }
         else
         {
             if (specialServicesRule.IncompatibleSpecialServices != null && specialServicesRule.IncompatibleSpecialServices.Contains(ss.SpecialServiceId))
             {
                 Reason = string.Format("Special service {0} is incompatible with other selected services", ss.SpecialServiceId);
                 _state = ValidationState.INVALID;
                 return;
             }
         }
     }
     if (specialServicesRule.PrerequisiteRules != null && !specialServicesRule.IsValidPrerequisites(_rate.SpecialServices))
     {
         Reason = string.Format("Special service {0} is missing prerequisites", specialServicesRule.SpecialServiceId);
         _state = ValidationState.INVALID;
         return;
     }
 }
Beispiel #2
0
        public static RatesArrayFluent <T> SpecialServiceFromRule <T, S>(this RatesArrayFluent <T> f, SpecialServicesRule rule)
            where T : class, IRates, new()
            where S : class, ISpecialServices, new()
        {
            var ss = new S
            {
                SpecialServiceId = rule.SpecialServiceId,
                InputParameters  = new List <Parameter>()
            };

            if (rule.InputParameterRules == null)
            {
                ss.AddParameter(new Parameter("INPUT_VALUE", "0"));
            }
            else
            {
                foreach (var ip in rule.InputParameterRules.Values)
                {
                    ss.AddParameter(new Parameter(ip.Name, ip.MinValue.ToString()));
                }
            }
            f.SpecialService <S>(ss);
            return(f);
        }