/// <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); } } } }
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); }
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)); }