Skip to content

Commit

Permalink
UPSCustomerClassification
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeybusygin committed Sep 11, 2024
1 parent ab91b29 commit 6a8bb17
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 16 deletions.
58 changes: 45 additions & 13 deletions ShippingRates.Tests/Models/UPS/UpsRatingRequestBuilderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,15 @@ namespace ShippingRates.Tests.Models.UPS
[TestFixture()]
internal class UpsRatingRequestBuilderTests
{
readonly Address AddressFrom = new("Annapolis", "MD", "21401", "US");
readonly Address AddressTo = new("", "", "30404", "US");
readonly List<Package> Packages = new() { new(1, 1, 1, 3, 0), new(1, 2, 3, 4, 5) };

[Test()]
public void UpsRatingRequestBuilder_CustomerClassification()
{
// US shipment
var from = new Address("Annapolis", "MD", "21401", "US");
var to = new Address("", "", "30404", "US");

var package1 = new Package(1, 1, 1, 3, 0);
var package2 = new Package(1, 2, 3, 4, 5);

var shipment = new Shipment(from, to, new List<Package>() { package1, package2 });

// International shipment
var fromNL = new Address("Amsterdam", "", "1043 AG", "NL");
var shipmentNL = new Shipment(fromNL, to, new List<Package>() { package1, package2 });
var shipment = new Shipment(AddressFrom, AddressTo, Packages);

// Daily rates
var dailyRatesConfig = new UPSProviderConfiguration()
Expand All @@ -43,17 +37,55 @@ public void UpsRatingRequestBuilder_CustomerClassification()
var retailRatesRequest = retailRatesBuilder.Build(shipment);
Assert.That(retailRatesRequest?.RateRequest?.CustomerClassification, Is.Not.Null);
Assert.That(retailRatesRequest?.RateRequest?.CustomerClassification.Code, Is.EqualTo("04"));
}


[Test()]
public void UpsRatingRequestBuilder_CustomerClassificationDefaults()
{
// US shipment
var shipment = new Shipment(AddressFrom, AddressTo, Packages);

// Regular rates
var regularRatesConfig = new UPSProviderConfiguration();
var regularRatesBuilder = new UpsRatingRequestBuilder(regularRatesConfig);
var regularRatesRequest = regularRatesBuilder.Build(shipment);
Assert.That(regularRatesRequest?.RateRequest?.CustomerClassification, Is.Not.Null);
Assert.That(regularRatesRequest?.RateRequest?.CustomerClassification.Code, Is.EqualTo("00"));

// International shipment
var internationalRequest = dailyRatesBuilder.Build(shipmentNL);
var fromNL = new Address("Amsterdam", "", "1043 AG", "NL");
var shipmentNL = new Shipment(fromNL, AddressTo, Packages);

var internationalRequest = regularRatesBuilder.Build(shipmentNL);
Assert.That(internationalRequest?.RateRequest?.CustomerClassification, Is.Null);
}


[Test()]
public void UpsRatingRequestBuilder_CustomerClassificationFromCode()
{
// US shipment
var shipment = new Shipment(AddressFrom, AddressTo, Packages);

// Daily rates
var dailyRatesConfig = new UPSProviderConfiguration()
{
CustomerClassification = UPSCustomerClassification.DailyRates
};
var dailyRatesBuilder = new UpsRatingRequestBuilder(dailyRatesConfig);
var dailyRatesRequest = dailyRatesBuilder.Build(shipment);
Assert.That(dailyRatesRequest?.RateRequest?.CustomerClassification, Is.Not.Null);
Assert.That(dailyRatesRequest?.RateRequest?.CustomerClassification.Code, Is.EqualTo("01"));

// Standard rates
var retailRatesConfig = new UPSProviderConfiguration()
{
CustomerClassification = UPSCustomerClassification.StandardListRates
};
var retailRatesBuilder = new UpsRatingRequestBuilder(retailRatesConfig);
var retailRatesRequest = retailRatesBuilder.Build(shipment);
Assert.That(retailRatesRequest?.RateRequest?.CustomerClassification, Is.Not.Null);
Assert.That(retailRatesRequest?.RateRequest?.CustomerClassification.Code, Is.EqualTo("53"));
}
}
}
11 changes: 8 additions & 3 deletions ShippingRates/Models/UPS/UpsRatingRequestBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,14 @@ public UpsRatingRequest Build(Shipment shipment)
}
if (shipFromUS) // Valid if ship from US
{
var code = _configuration.UseRetailRates
? "04"
: (_configuration.UseDailyRates ? "01" : "00");
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()
{
Expand Down
14 changes: 14 additions & 0 deletions ShippingRates/ShippingProviders/UPSProviderConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,19 @@ public class UPSProviderConfiguration
/// Use negotiated rates (only shippers approved to ship using negotiated rates can use negotiated rates)
/// </summary>
public bool UseNegotiatedRates { get; set; }
/// <summary>
/// Customer classification code, valid for shipments originating from a US address
/// </summary>
public UPSCustomerClassification CustomerClassification { get; set; }
}

public enum UPSCustomerClassification
{
ShipperNumberRates = 0,
DailyRates = 1,
RetailRates = 4,
RegionalRates = 5,
GeneralListRates = 6,
StandardListRates = 53
}
}

0 comments on commit 6a8bb17

Please sign in to comment.