/// <summary>
        /// Check the parcel rule and then the special services rules for the shipment.
        /// </summary>
        /// <param name="parcelRule"></param>
        public void Visit(ParcelTypeRule parcelRule)
        {
            if (_rate.ParcelType == null || _rate.ParcelType != parcelRule.ParcelType)
            {
                return;
            }

            foreach (var ss in _rate.SpecialServices)
            {
                if (!parcelRule.SpecialServiceRules.ContainsKey(ss.SpecialServiceId))
                {
                    Reason = string.Format("Parcel type {0} does not support special service type {1}", parcelRule.ParcelType, ss.SpecialServiceId);
                    _state = ValidationState.INVALID;
                    return;
                }
                if (!parcelRule.FitsDimensions(_shipment.Parcel.Dimension))
                {
                    Reason = string.Format("Parcel is outside of the dimension requirements for {0}", parcelRule.ParcelType);
                    _state = ValidationState.INVALID;
                    return;
                }
                if (!parcelRule.HoldsWeight(_shipment.Parcel.Weight))
                {
                    Reason = string.Format("Parcel is outside of the weight requirements for {0}", parcelRule.ParcelType);
                    _state = ValidationState.INVALID;
                    return;
                }
                foreach (var rule in parcelRule.SpecialServiceRules[ss.SpecialServiceId])
                {
                    if (_state == ValidationState.PROCESSING)
                    {
                        rule.Accept(this);
                    }
                }
            }
        }
Example #2
0
        public static RatesArrayFluent <T> SuggestedTrackingServiceFromRule <T, S>(this RatesArrayFluent <T> f, ParcelTypeRule parcelTypeRule)
            where T : class, IRates, new()
            where S : class, ISpecialServices, new()
        {
            var r = f.Current();

            foreach (var s in r.SpecialServices)
            {
                if (s.SpecialServiceId == parcelTypeRule.SuggestedTrackableSpecialServiceId)
                {
                    return(f);
                }
            }
            var trackingService = new S
            {
                SpecialServiceId = parcelTypeRule.SuggestedTrackableSpecialServiceId,
                InputParameters  = new List <Parameter>()
            };

            trackingService.AddParameter(new Parameter("INPUT_VALUE", "0"));
            r.AddSpecialservices(trackingService);
            return(f);
        }
Example #3
0
 public static RatesArrayFluent <T> RateFromRule <T>(this RatesArrayFluent <T> f, CarrierRule carrierRule, ServiceRule serviceRule, ParcelTypeRule parcelTypeRule)
     where T : class, IRates, new()
 {
     return(f
            .Carrier(carrierRule.Carrier)
            .ParcelType(parcelTypeRule.ParcelType)
            .Service(serviceRule.ServiceId));
 }