diff --git a/ShippingRates.Tests/Models/UPS/UpsRatingRequestBuilderTests.cs b/ShippingRates.Tests/Models/UPS/UpsRatingRequestBuilderTests.cs index 1a30f95..ebfd1d1 100644 --- a/ShippingRates.Tests/Models/UPS/UpsRatingRequestBuilderTests.cs +++ b/ShippingRates.Tests/Models/UPS/UpsRatingRequestBuilderTests.cs @@ -57,7 +57,8 @@ public void UpsRatingRequestBuilder_CustomerClassificationDefaults() var shipmentNL = new Shipment(fromNL, AddressTo, Packages); var internationalRequest = regularRatesBuilder.Build(shipmentNL); - Assert.That(internationalRequest?.RateRequest?.CustomerClassification, Is.Null); + Assert.That(regularRatesRequest?.RateRequest?.CustomerClassification, Is.Not.Null); + Assert.That(regularRatesRequest?.RateRequest?.CustomerClassification.Code, Is.EqualTo("00")); } diff --git a/ShippingRates/Models/UPS/UpsRatingRequestBuilder.cs b/ShippingRates/Models/UPS/UpsRatingRequestBuilder.cs index 0851279..ff09952 100644 --- a/ShippingRates/Models/UPS/UpsRatingRequestBuilder.cs +++ b/ShippingRates/Models/UPS/UpsRatingRequestBuilder.cs @@ -48,7 +48,8 @@ public UpsRatingRequest Build(Shipment shipment) ShipTo = new ShipAddress(new UpsAddress(shipment.DestinationAddress)), NumOfPieces = shipment.Packages.Count, Package = shipment.Packages.Select(p => new UpsPackage(p, unitsSystem)).ToArray() - } + }, + CustomerClassification = GetCustomerClassification() } }; if (!string.IsNullOrEmpty(_configuration.ServiceDescription)) @@ -80,22 +81,6 @@ public UpsRatingRequest Build(Shipment shipment) NegotiatedRatesIndicator = "Y" }; } - if (shipFromUS) // Valid if ship from US - { - var customerClassification = _configuration.CustomerClassification; - - if (_configuration.UseRetailRates) - customerClassification = UPSCustomerClassification.RetailRates; - if (_configuration.UseDailyRates) - customerClassification = UPSCustomerClassification.DailyRates; - - var code = ((int)customerClassification).ToString("D2"); - - request.RateRequest.CustomerClassification = new CustomerClassification() - { - Code = code, - }; - } if (shipment.Options.ShippingDate != null) { request.RateRequest.Shipment.DeliveryTimeInformation = new DeliveryTimeInformation() @@ -112,6 +97,23 @@ public UpsRatingRequest Build(Shipment shipment) return request; } + CustomerClassification GetCustomerClassification() + { + var customerClassification = _configuration.CustomerClassification; + + if (_configuration.UseRetailRates) + customerClassification = UPSCustomerClassification.RetailRates; + if (_configuration.UseDailyRates) + customerClassification = UPSCustomerClassification.DailyRates; + + var code = ((int)customerClassification).ToString("D2"); + + return new CustomerClassification() + { + Code = code, + }; + } + static string GetServiceCode(string serviceDescription) { if (serviceDescription.Length == 2) diff --git a/ShippingRates/ShippingProviders/UPSProviderConfiguration.cs b/ShippingRates/ShippingProviders/UPSProviderConfiguration.cs index b5cae00..3fbeff9 100644 --- a/ShippingRates/ShippingProviders/UPSProviderConfiguration.cs +++ b/ShippingRates/ShippingProviders/UPSProviderConfiguration.cs @@ -27,11 +27,13 @@ public class UPSProviderConfiguration /// public string ServiceDescription { get; set; } /// - /// Use retails rates (for shipping from a UPS retail location) + /// Use retails rates (for shipping from a UPS retail location). + /// Overrides CustomerClassification. /// public bool UseRetailRates { get; set; } /// - /// Use daily rates (for customers who have a scheduled pickup and/or an account that provides you with daily rates) + /// Use daily rates (for customers who have a scheduled pickup and/or an account that provides you with daily rates). + /// Overrides CustomerClassification. /// public bool UseDailyRates { get; set; } /// @@ -47,7 +49,13 @@ public class UPSProviderConfiguration public enum UPSCustomerClassification { ShipperNumberRates = 0, + /// + /// Daily rates, for customers who have a scheduled pickup and/or an account that provides you with daily rates + /// DailyRates = 1, + /// + /// Retails rates, for shipping from a UPS retail location + /// RetailRates = 4, RegionalRates = 5, GeneralListRates = 6,