Skip to content

Commit

Permalink
merge pull request #64 from maximelaboisson
Browse files Browse the repository at this point in the history
* maximelaboisson-master:
  Added logic to support retail rates
  • Loading branch information
kylewest committed Feb 7, 2017
2 parents 9ab9a78 + 82d09f0 commit d1c35ab
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 10 deletions.
38 changes: 32 additions & 6 deletions DotNetShipping.Tests/Features/UPSRates.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void UPS_Domestic_Returns_Rates_When_Using_International_Addresses_For_Si

var response = rateManager.GetRates(DomesticAddress1, InternationalAddress1, Package1);

Debug.WriteLine(string.Format("Rates returned: {0}", response.Rates.Any() ? response.Rates.Count.ToString() : "0"));
Debug.WriteLine($"Rates returned: {(response.Rates.Any() ? response.Rates.Count.ToString() : "0")}");

Assert.NotNull(response);
Assert.NotEmpty(response.Rates);
Expand All @@ -66,7 +66,7 @@ public void UPS_Returns_Multiple_Rates_When_Using_Valid_Addresses_For_All_Servic

var response = rateManager.GetRates(DomesticAddress1, DomesticAddress2, Package1);

Debug.WriteLine(string.Format("Rates returned: {0}", response.Rates.Any() ? response.Rates.Count.ToString() : "0"));
Debug.WriteLine($"Rates returned: {(response.Rates.Any() ? response.Rates.Count.ToString() : "0")}");

Assert.NotNull(response);
Assert.NotEmpty(response.Rates);
Expand All @@ -89,7 +89,7 @@ public void UPS_Returns_Multiple_Rates_When_Using_Valid_Addresses_For_All_Servic

var response = rateManager.GetRates(DomesticAddress1, DomesticAddress2, Package1);

Debug.WriteLine(string.Format("Rates returned: {0}", response.Rates.Any() ? response.Rates.Count.ToString() : "0"));
Debug.WriteLine($"Rates returned: {(response.Rates.Any() ? response.Rates.Count.ToString() : "0")}");

Assert.NotNull(response);
Assert.NotEmpty(response.Rates);
Expand All @@ -112,7 +112,33 @@ public void UPS_Returns_Rates_When_Using_International_Origin_And_Destination_Ad

var response = rateManager.GetRates(InternationalAddress2, InternationalAddress1, Package1);

Debug.WriteLine(string.Format("Rates returned: {0}", response.Rates.Any() ? response.Rates.Count.ToString() : "0"));
Debug.WriteLine($"Rates returned: {(response.Rates.Any() ? response.Rates.Count.ToString() : "0")}");

Assert.NotNull(response);
Assert.NotEmpty(response.Rates);
Assert.Empty(response.ServerErrors);

foreach (var rate in response.Rates)
{
Assert.NotNull(rate);
Assert.True(rate.TotalCharges > 0);

Debug.WriteLine(rate.Name + ": " + rate.TotalCharges);
}
}

[Fact]
public void UPS_Returns_Rates_When_Using_International_Destination_Addresses_And_RetailRates_For_All_Services()
{
var rateManager = new RateManager();
var provider = new UPSProvider(UPSLicenseNumber, UPSUserId, UPSPassword);
provider.UseRetailRates = true;

rateManager.AddProvider(provider);

var response = rateManager.GetRates(DomesticAddress1, InternationalAddress1, Package1);

Debug.WriteLine($"Rates returned: {(response.Rates.Any() ? response.Rates.Count.ToString() : "0")}");

Assert.NotNull(response);
Assert.NotEmpty(response.Rates);
Expand All @@ -135,7 +161,7 @@ public void UPS_Returns_Rates_When_Using_International_Destination_Addresses_For

var response = rateManager.GetRates(DomesticAddress1, InternationalAddress1, Package1);

Debug.WriteLine(string.Format("Rates returned: {0}", response.Rates.Any() ? response.Rates.Count.ToString() : "0"));
Debug.WriteLine($"Rates returned: {(response.Rates.Any() ? response.Rates.Count.ToString() : "0")}");

Assert.NotNull(response);
Assert.NotEmpty(response.Rates);
Expand All @@ -158,7 +184,7 @@ public void UPS_Returns_Single_Rate_When_Using_Domestic_Addresses_For_Single_Ser

var response = rateManager.GetRates(DomesticAddress1, DomesticAddress2, Package1);

Debug.WriteLine(string.Format("Rates returned: {0}", response.Rates.Any() ? response.Rates.Count.ToString() : "0"));
Debug.WriteLine($"Rates returned: {(response.Rates.Any() ? response.Rates.Count.ToString() : "0")}");

Assert.NotNull(response);
Assert.NotEmpty(response.Rates);
Expand Down
22 changes: 18 additions & 4 deletions DotNetShipping/ShippingProviders/UPSProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public enum AvailableServices
private const string PRODUCTION_RATES_URL = "https://onlinetools.ups.com/ups.app/xml/Rate";
private AvailableServices _services = AvailableServices.All;
private bool _useNegotiatedRates = false;
private bool _useRetailRates = false;
private bool _useProduction = true;
private readonly string _licenseNumber;
private readonly string _password;
Expand Down Expand Up @@ -122,9 +123,13 @@ public AvailableServices Services
get { return _services; }
set { _services = value; }
}
private string RatesUrl

private string RatesUrl => UseProduction ? PRODUCTION_RATES_URL : DEVELOPMENT_RATES_URL;

public bool UseRetailRates
{
get { return UseProduction ? PRODUCTION_RATES_URL : DEVELOPMENT_RATES_URL; }
get { return _useRetailRates; }
set { _useRetailRates = value; }
}

public bool UseNegotiatedRates
Expand Down Expand Up @@ -165,7 +170,16 @@ private byte[] BuildRatesRequestMessage()
writer.WriteElementString("Code", "03");
writer.WriteEndElement(); // </PickupType>
writer.WriteStartElement("CustomerClassification");
writer.WriteElementString("Code", string.IsNullOrWhiteSpace(_shipperNumber) ? "01" : "00"); // 00 gets shipper number rates, 01 for daily rates

if (_useRetailRates)
{
writer.WriteElementString("Code", "04"); //04 gets retail rates
}
else
{
writer.WriteElementString("Code", string.IsNullOrWhiteSpace(_shipperNumber) ? "01" : "00"); // 00 gets shipper number rates, 01 for daily rates
}

writer.WriteEndElement(); // </CustomerClassification
writer.WriteStartElement("Shipment");
writer.WriteStartElement("Shipper");
Expand Down Expand Up @@ -264,7 +278,7 @@ public override void GetRates()
}

/// <summary>
///
///
/// </summary>
/// <returns></returns>
public IDictionary<string, string> GetServiceCodes()
Expand Down

0 comments on commit d1c35ab

Please sign in to comment.