ups-ruby 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.hound.yml +2 -0
- data/.rubocop.yml +1064 -0
- data/.travis.yml +10 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +46 -0
- data/LICENSE.txt +14 -0
- data/README.md +78 -0
- data/Rakefile +17 -0
- data/lib/ups-ruby.rb +2 -0
- data/lib/ups.rb +33 -0
- data/lib/ups/builders/address_builder.rb +135 -0
- data/lib/ups/builders/builder_base.rb +216 -0
- data/lib/ups/builders/organisation_builder.rb +74 -0
- data/lib/ups/builders/rate_builder.rb +21 -0
- data/lib/ups/builders/ship_accept_builder.rb +30 -0
- data/lib/ups/builders/ship_confirm_builder.rb +103 -0
- data/lib/ups/builders/shipper_builder.rb +88 -0
- data/lib/ups/connection.rb +124 -0
- data/lib/ups/data.rb +50 -0
- data/lib/ups/data/canadian_states.rb +21 -0
- data/lib/ups/data/ie_counties.rb +10 -0
- data/lib/ups/data/ie_county_prefixes.rb +15 -0
- data/lib/ups/data/us_states.rb +59 -0
- data/lib/ups/exceptions.rb +7 -0
- data/lib/ups/packaging.rb +27 -0
- data/lib/ups/parsers/parser_base.rb +48 -0
- data/lib/ups/parsers/rates_parser.rb +60 -0
- data/lib/ups/parsers/ship_accept_parser.rb +52 -0
- data/lib/ups/parsers/ship_confirm_parser.rb +16 -0
- data/lib/ups/services.rb +21 -0
- data/lib/ups/version.rb +10 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/stubs/rates_negotiated_success.xml +227 -0
- data/spec/stubs/rates_success.xml +196 -0
- data/spec/stubs/ship_accept_failure.xml +12 -0
- data/spec/stubs/ship_accept_success.xml +56 -0
- data/spec/stubs/ship_confirm_failure.xml +12 -0
- data/spec/stubs/ship_confirm_success.xml +50 -0
- data/spec/support/RateRequest.xsd +1 -0
- data/spec/support/ShipAcceptRequest.xsd +36 -0
- data/spec/support/ShipConfirmRequest.xsd +996 -0
- data/spec/support/schema_path.rb +5 -0
- data/spec/support/shipping_options.rb +48 -0
- data/spec/support/xsd_validator.rb +11 -0
- data/spec/ups/builders/address_builder_spec.rb +97 -0
- data/spec/ups/builders/rate_builder_spec.rb +20 -0
- data/spec/ups/builders/ship_accept_builder_spec.rb +16 -0
- data/spec/ups/builders/ship_confirm_builder_spec.rb +23 -0
- data/spec/ups/connection/rates_negotiated_spec.rb +69 -0
- data/spec/ups/connection/rates_standard_spec.rb +71 -0
- data/spec/ups/connection/ship_spec.rb +111 -0
- data/spec/ups/connection_spec.rb +20 -0
- data/ups.gemspec +24 -0
- metadata +166 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'insensitive_hash'
|
2
|
+
|
3
|
+
module UPS
|
4
|
+
module Data
|
5
|
+
CANADIAN_STATES = {
|
6
|
+
'British Columbia' => 'BC',
|
7
|
+
'Ontario' => 'ON',
|
8
|
+
'Newfoundland and Labrador' => 'NL',
|
9
|
+
'Nova Scotia' => 'NS',
|
10
|
+
'Prince Edward Island' => 'PE',
|
11
|
+
'New Brunswick' => 'NB',
|
12
|
+
'Quebec' => 'QC',
|
13
|
+
'Manitoba' => 'MB',
|
14
|
+
'Saskatchewan' => 'SK',
|
15
|
+
'Alberta' => 'AB',
|
16
|
+
'Northwest Territories' => 'NT',
|
17
|
+
'Nunavut' => 'NU',
|
18
|
+
'Yukon Territory' => 'YT'
|
19
|
+
}.insensitive
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module UPS
|
2
|
+
module Data
|
3
|
+
IE_COUNTIES = %w(
|
4
|
+
Antrim Armagh Carlow Cavan Clare Cork Derry Donegal Down Dublin Fermanagh
|
5
|
+
Galway Kerry Kildare Kilkenny Laois Leitrim Limerick Longford Louth Mayo
|
6
|
+
Meath Monaghan Offaly Roscommon Sligo Tipperary Tyrone Waterford Westmeath
|
7
|
+
Wexford Wicklow
|
8
|
+
)
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'insensitive_hash'
|
2
|
+
|
3
|
+
module UPS
|
4
|
+
module Data
|
5
|
+
US_STATES = {
|
6
|
+
'Alabama' => 'AL',
|
7
|
+
'Alaska' => 'AK',
|
8
|
+
'Arizona' => 'AZ',
|
9
|
+
'Arkansas' => 'AR',
|
10
|
+
'California' => 'CA',
|
11
|
+
'Colorado' => 'CO',
|
12
|
+
'Connecticut' => 'CT',
|
13
|
+
'Delaware' => 'DE',
|
14
|
+
'District of Columbia' => 'DC',
|
15
|
+
'Florida' => 'FL',
|
16
|
+
'Georgia' => 'GA',
|
17
|
+
'Hawaii' => 'HI',
|
18
|
+
'Idaho' => 'ID',
|
19
|
+
'Illinois' => 'IL',
|
20
|
+
'Indiana' => 'IN',
|
21
|
+
'Iowa' => 'IA',
|
22
|
+
'Kansas' => 'KS',
|
23
|
+
'Kentucky' => 'KY',
|
24
|
+
'Louisiana' => 'LA',
|
25
|
+
'Maine' => 'ME',
|
26
|
+
'Maryland' => 'MD',
|
27
|
+
'Massachusetts' => 'MA',
|
28
|
+
'Michigan' => 'MI',
|
29
|
+
'Minnesota' => 'MN',
|
30
|
+
'Mississippi' => 'MS',
|
31
|
+
'Missouri' => 'MO',
|
32
|
+
'Montana' => 'MT',
|
33
|
+
'Nebraska' => 'NE',
|
34
|
+
'Nevada' => 'NV',
|
35
|
+
'New Hampshire' => 'NH',
|
36
|
+
'New Jersey' => 'NJ',
|
37
|
+
'New Mexico' => 'NM',
|
38
|
+
'New York' => 'NY',
|
39
|
+
'North Carolina' => 'NC',
|
40
|
+
'North Dakota' => 'ND',
|
41
|
+
'Ohio' => 'OH',
|
42
|
+
'Oklahoma' => 'OK',
|
43
|
+
'Oregon' => 'OR',
|
44
|
+
'Pennsylvania' => 'PA',
|
45
|
+
'Rhode Island' => 'RI',
|
46
|
+
'South Carolina' => 'SC',
|
47
|
+
'South Dakota' => 'SD',
|
48
|
+
'Tennessee' => 'TN',
|
49
|
+
'Texas' => 'TX',
|
50
|
+
'Utah' => 'UT',
|
51
|
+
'Vermont' => 'VT',
|
52
|
+
'Virginia' => 'VA',
|
53
|
+
'Washington' => 'WA',
|
54
|
+
'West Virginia' => 'WV',
|
55
|
+
'Wisconsin' => 'WI',
|
56
|
+
'Wyoming' => 'WY'
|
57
|
+
}.insensitive
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module UPS
|
2
|
+
PACKAGING = {
|
3
|
+
'01' => 'UPS Letter',
|
4
|
+
'02' => 'Customer Supplied Package',
|
5
|
+
'03' => 'Tube',
|
6
|
+
'04' => 'Pak',
|
7
|
+
'21' => 'UPS Express Box',
|
8
|
+
'24' => 'UPS 25kg box',
|
9
|
+
'25' => 'UPS 10kg box',
|
10
|
+
'30' => 'Pallet',
|
11
|
+
'2a' => 'Small Express Box',
|
12
|
+
'2b' => 'Medium Express Box',
|
13
|
+
'2c' => 'Large Express Box',
|
14
|
+
'56' => 'Flats',
|
15
|
+
'57' => 'Parcels',
|
16
|
+
'58' => 'BPM',
|
17
|
+
'59' => 'First Class',
|
18
|
+
'60' => 'Priority',
|
19
|
+
'61' => 'Machinables',
|
20
|
+
'62' => 'Irregulars',
|
21
|
+
'63' => 'Parcel Post',
|
22
|
+
'64' => 'BPM Parcel',
|
23
|
+
'65' => 'Media Mail',
|
24
|
+
'66' => 'BPM Flat',
|
25
|
+
'67' => 'Standard Flat'
|
26
|
+
}
|
27
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'ox'
|
3
|
+
|
4
|
+
module UPS
|
5
|
+
module Parsers
|
6
|
+
class ParserBase < ::Ox::Sax
|
7
|
+
attr_accessor :switches,
|
8
|
+
:status_code,
|
9
|
+
:status_description,
|
10
|
+
:error_description
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
self.switches = {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def start_element(name)
|
17
|
+
element_tracker_switch name, true
|
18
|
+
end
|
19
|
+
|
20
|
+
def end_element(name)
|
21
|
+
element_tracker_switch name, false
|
22
|
+
end
|
23
|
+
|
24
|
+
def value(value)
|
25
|
+
data = value.as_s
|
26
|
+
self.status_code = data if switch_active? :ResponseStatusCode
|
27
|
+
|
28
|
+
if switch_active?(:ResponseStatusDescription)
|
29
|
+
self.status_description = data
|
30
|
+
end
|
31
|
+
|
32
|
+
self.error_description = data if switch_active? :ErrorDescription
|
33
|
+
end
|
34
|
+
|
35
|
+
def element_tracker_switch(element, currently_in)
|
36
|
+
switches[element] = currently_in
|
37
|
+
end
|
38
|
+
|
39
|
+
def switch_active?(*elements)
|
40
|
+
elements.all? { |element| switches[element] == true }
|
41
|
+
end
|
42
|
+
|
43
|
+
def success?
|
44
|
+
['1', 1].include? status_code
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module UPS
|
2
|
+
module Parsers
|
3
|
+
class RatesParser < ParserBase
|
4
|
+
attr_accessor :rated_shipments
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super
|
8
|
+
self.rated_shipments = []
|
9
|
+
@current_rate = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def start_element(name)
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def end_element(name)
|
17
|
+
super
|
18
|
+
return unless name == :RatedShipment
|
19
|
+
rated_shipments << @current_rate.tap do |c|
|
20
|
+
if c.key? :negotiated_rate
|
21
|
+
c[:total] = c[:negotiated_rate]
|
22
|
+
c.delete :negotiated_rate
|
23
|
+
end
|
24
|
+
end
|
25
|
+
@current_rate = {}
|
26
|
+
end
|
27
|
+
|
28
|
+
def value(value)
|
29
|
+
super
|
30
|
+
if switch_active?(:RatedShipment, :Service, :Code)
|
31
|
+
parse_service_code value
|
32
|
+
elsif switch_active?(:RatedShipment, :TotalCharges)
|
33
|
+
parse_total_charges value
|
34
|
+
elsif switch_active?(:RatedShipment, :NegotiatedRates, :MonetaryValue)
|
35
|
+
parse_negotiated_rate value
|
36
|
+
elsif switch_active?(:RatedShipment, :RatedShipmentWarning)
|
37
|
+
parse_rated_shipment_warning value
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def parse_negotiated_rate(value)
|
42
|
+
@current_rate[:negotiated_rate] = value.as_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def parse_rated_shipment_warning(value)
|
46
|
+
@current_rate[:warnings] ||= []
|
47
|
+
@current_rate[:warnings] << value.as_s
|
48
|
+
end
|
49
|
+
|
50
|
+
def parse_service_code(value)
|
51
|
+
@current_rate[:service_code] = value.as_s
|
52
|
+
@current_rate[:service_name] = UPS::SERVICES[value.as_s]
|
53
|
+
end
|
54
|
+
|
55
|
+
def parse_total_charges(value)
|
56
|
+
@current_rate[:total] = value.as_s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
module UPS
|
5
|
+
module Parsers
|
6
|
+
class ShipAcceptParser < ParserBase
|
7
|
+
attr_accessor :graphic_image,
|
8
|
+
:graphic_extension,
|
9
|
+
:html_image,
|
10
|
+
:tracking_number
|
11
|
+
|
12
|
+
def value(value)
|
13
|
+
parse_graphic_image(value)
|
14
|
+
parse_html_image(value)
|
15
|
+
parse_tracking_number(value)
|
16
|
+
parse_graphic_extension(value)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def parse_graphic_image(value)
|
21
|
+
return unless switch_active?(:GraphicImage)
|
22
|
+
self.graphic_image = base64_to_file(value.as_s)
|
23
|
+
end
|
24
|
+
|
25
|
+
def parse_html_image(value)
|
26
|
+
return unless switch_active?(:HTMLImage)
|
27
|
+
self.html_image = base64_to_file(value.as_s)
|
28
|
+
end
|
29
|
+
|
30
|
+
def parse_tracking_number(value)
|
31
|
+
return unless switch_active?(:ShipmentIdentificationNumber)
|
32
|
+
self.tracking_number = value.as_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def parse_graphic_extension(value)
|
36
|
+
return unless switch_active?(:LabelImageFormat, :Code)
|
37
|
+
self.graphic_extension = ".#{value.as_s.downcase}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def base64_to_file(contents)
|
41
|
+
file_config = ['ups', graphic_extension]
|
42
|
+
Tempfile.new(file_config, nil, encoding: 'ascii-8bit').tap do |file|
|
43
|
+
begin
|
44
|
+
file.write Base64.decode64(contents)
|
45
|
+
ensure
|
46
|
+
file.rewind
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module UPS
|
2
|
+
module Parsers
|
3
|
+
class ShipConfirmParser < ParserBase
|
4
|
+
attr_accessor :identification_number, :shipment_digest
|
5
|
+
|
6
|
+
def value(value)
|
7
|
+
if switch_active?(:ShipmentIdentificationNumber)
|
8
|
+
self.identification_number = value.as_s
|
9
|
+
elsif switch_active?(:ShipmentDigest)
|
10
|
+
self.shipment_digest = value.as_s
|
11
|
+
end
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/ups/services.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module UPS
|
2
|
+
SERVICES = {
|
3
|
+
'01' => 'Next Day Air',
|
4
|
+
'02' => '2nd Day Air',
|
5
|
+
'03' => 'Ground',
|
6
|
+
'07' => 'Express',
|
7
|
+
'08' => 'Expedited',
|
8
|
+
'11' => 'UPS Standard',
|
9
|
+
'12' => '3 Day Select',
|
10
|
+
'13' => 'Next Day Air Saver',
|
11
|
+
'14' => 'Next Day Air Early AM',
|
12
|
+
'54' => 'Express Plus',
|
13
|
+
'59' => '2nd Day Air A.M.',
|
14
|
+
'65' => 'UPS Saver',
|
15
|
+
'82' => 'UPS Today Standard',
|
16
|
+
'83' => 'UPS Today Dedicated Courier',
|
17
|
+
'84' => 'UPS Today Intercity',
|
18
|
+
'85' => 'UPS Today Express',
|
19
|
+
'86' => 'UPS Today Express Saver'
|
20
|
+
}
|
21
|
+
end
|
data/lib/ups/version.rb
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start
|
3
|
+
|
4
|
+
path = File.expand_path('../../', __FILE__)
|
5
|
+
require "#{path}/lib/ups.rb"
|
6
|
+
|
7
|
+
# Set default env parameters to prevent CI failing on pull requests
|
8
|
+
ENV['UPS_LICENSE_NUMBER'] = '' unless ENV.key? 'UPS_LICENSE_NUMBER'
|
9
|
+
ENV['UPS_USER_ID'] = '' unless ENV.key? 'UPS_USER_ID'
|
10
|
+
ENV['UPS_PASSWORD'] = '' unless ENV.key? 'UPS_PASSWORD'
|
11
|
+
ENV['UPS_ACCOUNT_NUMBER'] = '' unless ENV.key? 'UPS_ACCOUNT_NUMBER'
|
12
|
+
|
13
|
+
require 'nokogiri'
|
14
|
+
require 'minitest/autorun'
|
15
|
+
|
16
|
+
require 'support/schema_path'
|
17
|
+
require 'support/shipping_options'
|
18
|
+
require 'support/xsd_validator'
|
@@ -0,0 +1,227 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<RatingServiceSelectionResponse>
|
3
|
+
<Response>
|
4
|
+
<ResponseStatusCode>1</ResponseStatusCode>
|
5
|
+
<ResponseStatusDescription>Success</ResponseStatusDescription>
|
6
|
+
</Response>
|
7
|
+
<RatedShipment>
|
8
|
+
<Service>
|
9
|
+
<Code>11</Code>
|
10
|
+
</Service>
|
11
|
+
<RatedShipmentWarning>Your invoice may vary from the displayed reference rates</RatedShipmentWarning>
|
12
|
+
<BillingWeight>
|
13
|
+
<UnitOfMeasurement>
|
14
|
+
<Code>KGS</Code>
|
15
|
+
</UnitOfMeasurement>
|
16
|
+
<Weight>0.5</Weight>
|
17
|
+
</BillingWeight>
|
18
|
+
<TransportationCharges>
|
19
|
+
<CurrencyCode>GBP</CurrencyCode>
|
20
|
+
<MonetaryValue>25.03</MonetaryValue>
|
21
|
+
</TransportationCharges>
|
22
|
+
<ServiceOptionsCharges>
|
23
|
+
<CurrencyCode>GBP</CurrencyCode>
|
24
|
+
<MonetaryValue>0.00</MonetaryValue>
|
25
|
+
</ServiceOptionsCharges>
|
26
|
+
<TotalCharges>
|
27
|
+
<CurrencyCode>GBP</CurrencyCode>
|
28
|
+
<MonetaryValue>25.03</MonetaryValue>
|
29
|
+
</TotalCharges>
|
30
|
+
<GuaranteedDaysToDelivery/>
|
31
|
+
<ScheduledDeliveryTime/>
|
32
|
+
<RatedPackage>
|
33
|
+
<TransportationCharges>
|
34
|
+
<CurrencyCode/>
|
35
|
+
<MonetaryValue/>
|
36
|
+
</TransportationCharges>
|
37
|
+
<ServiceOptionsCharges>
|
38
|
+
<CurrencyCode/>
|
39
|
+
<MonetaryValue/>
|
40
|
+
</ServiceOptionsCharges>
|
41
|
+
<TotalCharges>
|
42
|
+
<CurrencyCode/>
|
43
|
+
<MonetaryValue/>
|
44
|
+
</TotalCharges>
|
45
|
+
<Weight>0.5</Weight>
|
46
|
+
<BillingWeight>
|
47
|
+
<UnitOfMeasurement>
|
48
|
+
<Code/>
|
49
|
+
</UnitOfMeasurement>
|
50
|
+
<Weight/>
|
51
|
+
</BillingWeight>
|
52
|
+
</RatedPackage>
|
53
|
+
<NegotiatedRates>
|
54
|
+
<NetSummaryCharges>
|
55
|
+
<GrandTotal>
|
56
|
+
<CurrencyCode>GBP</CurrencyCode>
|
57
|
+
<MonetaryValue>24.78</MonetaryValue>
|
58
|
+
</GrandTotal>
|
59
|
+
</NetSummaryCharges>
|
60
|
+
</NegotiatedRates>
|
61
|
+
</RatedShipment>
|
62
|
+
<RatedShipment>
|
63
|
+
<Service>
|
64
|
+
<Code>65</Code>
|
65
|
+
</Service>
|
66
|
+
<RatedShipmentWarning>Your invoice may vary from the displayed reference rates</RatedShipmentWarning>
|
67
|
+
<BillingWeight>
|
68
|
+
<UnitOfMeasurement>
|
69
|
+
<Code>KGS</Code>
|
70
|
+
</UnitOfMeasurement>
|
71
|
+
<Weight>0.5</Weight>
|
72
|
+
</BillingWeight>
|
73
|
+
<TransportationCharges>
|
74
|
+
<CurrencyCode>GBP</CurrencyCode>
|
75
|
+
<MonetaryValue>45.61</MonetaryValue>
|
76
|
+
</TransportationCharges>
|
77
|
+
<ServiceOptionsCharges>
|
78
|
+
<CurrencyCode>GBP</CurrencyCode>
|
79
|
+
<MonetaryValue>0.00</MonetaryValue>
|
80
|
+
</ServiceOptionsCharges>
|
81
|
+
<TotalCharges>
|
82
|
+
<CurrencyCode>GBP</CurrencyCode>
|
83
|
+
<MonetaryValue>45.61</MonetaryValue>
|
84
|
+
</TotalCharges>
|
85
|
+
<GuaranteedDaysToDelivery>1</GuaranteedDaysToDelivery>
|
86
|
+
<ScheduledDeliveryTime>12:00 Noon</ScheduledDeliveryTime>
|
87
|
+
<RatedPackage>
|
88
|
+
<TransportationCharges>
|
89
|
+
<CurrencyCode/>
|
90
|
+
<MonetaryValue/>
|
91
|
+
</TransportationCharges>
|
92
|
+
<ServiceOptionsCharges>
|
93
|
+
<CurrencyCode/>
|
94
|
+
<MonetaryValue/>
|
95
|
+
</ServiceOptionsCharges>
|
96
|
+
<TotalCharges>
|
97
|
+
<CurrencyCode/>
|
98
|
+
<MonetaryValue/>
|
99
|
+
</TotalCharges>
|
100
|
+
<Weight>0.5</Weight>
|
101
|
+
<BillingWeight>
|
102
|
+
<UnitOfMeasurement>
|
103
|
+
<Code/>
|
104
|
+
</UnitOfMeasurement>
|
105
|
+
<Weight/>
|
106
|
+
</BillingWeight>
|
107
|
+
</RatedPackage>
|
108
|
+
<NegotiatedRates>
|
109
|
+
<NetSummaryCharges>
|
110
|
+
<GrandTotal>
|
111
|
+
<CurrencyCode>GBP</CurrencyCode>
|
112
|
+
<MonetaryValue>45.15</MonetaryValue>
|
113
|
+
</GrandTotal>
|
114
|
+
</NetSummaryCharges>
|
115
|
+
</NegotiatedRates>
|
116
|
+
</RatedShipment>
|
117
|
+
<RatedShipment>
|
118
|
+
<Service>
|
119
|
+
<Code>54</Code>
|
120
|
+
</Service>
|
121
|
+
<RatedShipmentWarning>Your invoice may vary from the displayed reference rates</RatedShipmentWarning>
|
122
|
+
<BillingWeight>
|
123
|
+
<UnitOfMeasurement>
|
124
|
+
<Code>KGS</Code>
|
125
|
+
</UnitOfMeasurement>
|
126
|
+
<Weight>0.5</Weight>
|
127
|
+
</BillingWeight>
|
128
|
+
<TransportationCharges>
|
129
|
+
<CurrencyCode>GBP</CurrencyCode>
|
130
|
+
<MonetaryValue>81.71</MonetaryValue>
|
131
|
+
</TransportationCharges>
|
132
|
+
<ServiceOptionsCharges>
|
133
|
+
<CurrencyCode>GBP</CurrencyCode>
|
134
|
+
<MonetaryValue>0.00</MonetaryValue>
|
135
|
+
</ServiceOptionsCharges>
|
136
|
+
<TotalCharges>
|
137
|
+
<CurrencyCode>GBP</CurrencyCode>
|
138
|
+
<MonetaryValue>81.71</MonetaryValue>
|
139
|
+
</TotalCharges>
|
140
|
+
<GuaranteedDaysToDelivery>1</GuaranteedDaysToDelivery>
|
141
|
+
<ScheduledDeliveryTime>9:00 A.M.</ScheduledDeliveryTime>
|
142
|
+
<RatedPackage>
|
143
|
+
<TransportationCharges>
|
144
|
+
<CurrencyCode/>
|
145
|
+
<MonetaryValue/>
|
146
|
+
</TransportationCharges>
|
147
|
+
<ServiceOptionsCharges>
|
148
|
+
<CurrencyCode/>
|
149
|
+
<MonetaryValue/>
|
150
|
+
</ServiceOptionsCharges>
|
151
|
+
<TotalCharges>
|
152
|
+
<CurrencyCode/>
|
153
|
+
<MonetaryValue/>
|
154
|
+
</TotalCharges>
|
155
|
+
<Weight>0.5</Weight>
|
156
|
+
<BillingWeight>
|
157
|
+
<UnitOfMeasurement>
|
158
|
+
<Code/>
|
159
|
+
</UnitOfMeasurement>
|
160
|
+
<Weight/>
|
161
|
+
</BillingWeight>
|
162
|
+
</RatedPackage>
|
163
|
+
<NegotiatedRates>
|
164
|
+
<NetSummaryCharges>
|
165
|
+
<GrandTotal>
|
166
|
+
<CurrencyCode>GBP</CurrencyCode>
|
167
|
+
<MonetaryValue>80.89</MonetaryValue>
|
168
|
+
</GrandTotal>
|
169
|
+
</NetSummaryCharges>
|
170
|
+
</NegotiatedRates>
|
171
|
+
</RatedShipment>
|
172
|
+
<RatedShipment>
|
173
|
+
<Service>
|
174
|
+
<Code>07</Code>
|
175
|
+
</Service>
|
176
|
+
<RatedShipmentWarning>Your invoice may vary from the displayed reference rates</RatedShipmentWarning>
|
177
|
+
<BillingWeight>
|
178
|
+
<UnitOfMeasurement>
|
179
|
+
<Code>KGS</Code>
|
180
|
+
</UnitOfMeasurement>
|
181
|
+
<Weight>0.5</Weight>
|
182
|
+
</BillingWeight>
|
183
|
+
<TransportationCharges>
|
184
|
+
<CurrencyCode>GBP</CurrencyCode>
|
185
|
+
<MonetaryValue>47.56</MonetaryValue>
|
186
|
+
</TransportationCharges>
|
187
|
+
<ServiceOptionsCharges>
|
188
|
+
<CurrencyCode>GBP</CurrencyCode>
|
189
|
+
<MonetaryValue>0.00</MonetaryValue>
|
190
|
+
</ServiceOptionsCharges>
|
191
|
+
<TotalCharges>
|
192
|
+
<CurrencyCode>GBP</CurrencyCode>
|
193
|
+
<MonetaryValue>47.56</MonetaryValue>
|
194
|
+
</TotalCharges>
|
195
|
+
<GuaranteedDaysToDelivery>1</GuaranteedDaysToDelivery>
|
196
|
+
<ScheduledDeliveryTime>10:30 A.M.</ScheduledDeliveryTime>
|
197
|
+
<RatedPackage>
|
198
|
+
<TransportationCharges>
|
199
|
+
<CurrencyCode/>
|
200
|
+
<MonetaryValue/>
|
201
|
+
</TransportationCharges>
|
202
|
+
<ServiceOptionsCharges>
|
203
|
+
<CurrencyCode/>
|
204
|
+
<MonetaryValue/>
|
205
|
+
</ServiceOptionsCharges>
|
206
|
+
<TotalCharges>
|
207
|
+
<CurrencyCode/>
|
208
|
+
<MonetaryValue/>
|
209
|
+
</TotalCharges>
|
210
|
+
<Weight>0.5</Weight>
|
211
|
+
<BillingWeight>
|
212
|
+
<UnitOfMeasurement>
|
213
|
+
<Code/>
|
214
|
+
</UnitOfMeasurement>
|
215
|
+
<Weight/>
|
216
|
+
</BillingWeight>
|
217
|
+
</RatedPackage>
|
218
|
+
<NegotiatedRates>
|
219
|
+
<NetSummaryCharges>
|
220
|
+
<GrandTotal>
|
221
|
+
<CurrencyCode>GBP</CurrencyCode>
|
222
|
+
<MonetaryValue>47.08</MonetaryValue>
|
223
|
+
</GrandTotal>
|
224
|
+
</NetSummaryCharges>
|
225
|
+
</NegotiatedRates>
|
226
|
+
</RatedShipment>
|
227
|
+
</RatingServiceSelectionResponse>
|