active_shipping 1.0.0.pre4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.yardopts +0 -1
  5. data/CHANGELOG.md +17 -0
  6. data/CONTRIBUTING.md +2 -2
  7. data/Gemfile.activesupport32 +1 -0
  8. data/README.md +1 -1
  9. data/Rakefile +1 -1
  10. data/active_shipping.gemspec +2 -2
  11. data/lib/active_shipping.rb +2 -3
  12. data/lib/active_shipping/carriers.rb +1 -0
  13. data/lib/active_shipping/carriers/canada_post_pws.rb +281 -266
  14. data/lib/active_shipping/carriers/correios.rb +285 -0
  15. data/lib/active_shipping/carriers/fedex.rb +205 -199
  16. data/lib/active_shipping/carriers/stamps.rb +218 -219
  17. data/lib/active_shipping/carriers/ups.rb +287 -48
  18. data/lib/active_shipping/carriers/usps.rb +3 -3
  19. data/lib/active_shipping/delivery_date_estimate.rb +21 -0
  20. data/lib/active_shipping/delivery_date_estimates_response.rb +11 -0
  21. data/lib/active_shipping/errors.rb +20 -1
  22. data/lib/active_shipping/location.rb +0 -5
  23. data/lib/active_shipping/response.rb +0 -15
  24. data/lib/active_shipping/version.rb +1 -1
  25. data/test/credentials.yml +11 -3
  26. data/test/fixtures/xml/correios/book_response.xml +13 -0
  27. data/test/fixtures/xml/correios/book_response_invalid.xml +13 -0
  28. data/test/fixtures/xml/correios/clothes_response.xml +43 -0
  29. data/test/fixtures/xml/correios/poster_response.xml +23 -0
  30. data/test/fixtures/xml/correios/shoes_response.xml +43 -0
  31. data/test/fixtures/xml/fedex/tracking_request.xml +13 -11
  32. data/test/fixtures/xml/fedex/tracking_response_bad_tracking_number.xml +20 -0
  33. data/test/fixtures/xml/fedex/tracking_response_delivered_at_door.xml +254 -0
  34. data/test/fixtures/xml/fedex/tracking_response_delivered_at_facility.xml +403 -0
  35. data/test/fixtures/xml/fedex/tracking_response_delivered_with_signature.xml +269 -0
  36. data/test/fixtures/xml/fedex/tracking_response_in_transit.xml +127 -0
  37. data/test/fixtures/xml/fedex/tracking_response_multiple_results.xml +100 -0
  38. data/test/fixtures/xml/fedex/tracking_response_not_found.xml +52 -0
  39. data/test/fixtures/xml/fedex/tracking_response_shipment_exception.xml +209 -0
  40. data/test/fixtures/xml/ups/delivery_dates_response.xml +140 -0
  41. data/test/fixtures/xml/ups/package_exceeds_maximum_length.xml +12 -0
  42. data/test/fixtures/xml/ups/rate_single_service.xml +54 -0
  43. data/test/fixtures/xml/ups/rescheduled_shipment.xml +204 -0
  44. data/test/fixtures/xml/ups/test_real_home_as_residential_destination_response.xml +290 -1
  45. data/test/fixtures/xml/usps/delivered_extended_tracking_response.xml +11 -0
  46. data/test/remote/canada_post_pws_platform_test.rb +35 -22
  47. data/test/remote/canada_post_pws_test.rb +32 -40
  48. data/test/remote/correios_test.rb +83 -0
  49. data/test/remote/fedex_test.rb +95 -13
  50. data/test/remote/stamps_test.rb +1 -0
  51. data/test/remote/ups_test.rb +77 -40
  52. data/test/remote/usps_test.rb +13 -1
  53. data/test/test_helper.rb +12 -2
  54. data/test/unit/carriers/canada_post_pws_rating_test.rb +66 -59
  55. data/test/unit/carriers/canada_post_pws_shipping_test.rb +34 -23
  56. data/test/unit/carriers/correios_test.rb +244 -0
  57. data/test/unit/carriers/fedex_test.rb +161 -156
  58. data/test/unit/carriers/ups_test.rb +193 -1
  59. data/test/unit/carriers/usps_test.rb +14 -0
  60. data/test/unit/location_test.rb +0 -10
  61. metadata +63 -46
  62. metadata.gz.sig +0 -0
  63. data/lib/vendor/test_helper.rb +0 -6
  64. data/lib/vendor/xml_node/README +0 -36
  65. data/lib/vendor/xml_node/Rakefile +0 -21
  66. data/lib/vendor/xml_node/benchmark/bench_generation.rb +0 -30
  67. data/lib/vendor/xml_node/init.rb +0 -1
  68. data/lib/vendor/xml_node/lib/xml_node.rb +0 -221
  69. data/lib/vendor/xml_node/test/test_generating.rb +0 -89
  70. data/lib/vendor/xml_node/test/test_parsing.rb +0 -40
  71. data/test/fixtures/xml/fedex/tracking_response.xml +0 -151
  72. data/test/fixtures/xml/fedex/tracking_response_empty_destination.xml +0 -76
  73. data/test/fixtures/xml/fedex/tracking_response_no_destination.xml +0 -139
  74. data/test/fixtures/xml/fedex/tracking_response_no_ship_time.xml +0 -150
  75. data/test/fixtures/xml/fedex/tracking_response_with_estimated_delivery_date.xml +0 -95
  76. data/test/fixtures/xml/fedex/tracking_response_with_shipper_address.xml +0 -71
@@ -13,7 +13,7 @@ module ActiveShipping
13
13
  EventDetails = Struct.new(:description, :time, :zoneless_time, :location)
14
14
  EVENT_MESSAGE_PATTERNS = [
15
15
  /^(.*), (\w+ \d{1,2}, \d{4}, \d{1,2}:\d\d [ap]m), (.*), (\w\w) (\d{5})$/i,
16
- /^Your item \w{2,3} (out for delivery|delivered) at (\d{1,2}:\d\d [ap]m on \w+ \d{1,2}, \d{4}) in (.*), (\w\w) (\d{5})\.$/i
16
+ /^Your item \w{2,3} (out for delivery|delivered).* at (\d{1,2}:\d\d [ap]m on \w+ \d{1,2}, \d{4}) in (.*), (\w\w) (\d{5})\.$/i
17
17
  ]
18
18
  self.retry_safe = true
19
19
 
@@ -286,7 +286,7 @@ module ActiveShipping
286
286
  </CarrierPickupAvailabilityRequest>
287
287
  EOF
288
288
  xml = Nokogiri.XML(commit(:test, request, true)) { |config| config.strict }
289
- xml.at('/CarrierPickupAvailabilityResponse/City').text == 'SAN FRANCISCO' && xml.at('/CarrierPickupAvailabilityResponse/Address2').text == '18 FAIR AVE'
289
+ xml.at('/CarrierPickupAvailabilityResponse/City').try(:text) == 'SAN FRANCISCO' && xml.at('/CarrierPickupAvailabilityResponse/Address2').try(:text) == '18 FAIR AVE'
290
290
  end
291
291
 
292
292
  # options[:service] -- One of [:first_class, :priority, :express, :bpm, :parcel,
@@ -316,7 +316,7 @@ module ActiveShipping
316
316
  xml.ZipDestination(strip_zip(destination_zip))
317
317
  xml.Pounds(0)
318
318
  xml.Ounces("%0.1f" % [package.ounces, 1].max)
319
- xml.Container(CONTAINERS[package.options[:container]])
319
+ xml.Container(CONTAINERS[package.options[:container]] || (package.cylinder? ? 'NONRECTANGULAR' : 'RECTANGULAR'))
320
320
  xml.Size(USPS.size_code_for(package))
321
321
  xml.Width("%0.2f" % package.inches(:width))
322
322
  xml.Length("%0.2f" % package.inches(:length))
@@ -0,0 +1,21 @@
1
+ module ActiveShipping
2
+ class DeliveryDateEstimate
3
+ attr_reader :origin
4
+ attr_reader :destination
5
+ attr_reader :carrier
6
+ attr_reader :service_name
7
+ attr_reader :service_code
8
+ attr_reader :date
9
+ attr_reader :guaranteed
10
+ attr_reader :business_transit_days
11
+
12
+ def initialize(origin, destination, carrier, service_name, options={})
13
+ @origin, @destination, @carrier, @service_name = origin, destination, carrier, service_name
14
+ @service_code = options[:service_code]
15
+ @date = options[:date]
16
+ @guaranteed = options[:guaranteed]
17
+ @business_transit_days = options[:business_transit_days]
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,11 @@
1
+ module ActiveShipping
2
+ class DeliveryDateEstimatesResponse < Response
3
+ attr_reader :delivery_estimates
4
+
5
+ def initialize(success, message, params = {}, options = {})
6
+ @delivery_estimates = Array(options[:delivery_estimates])
7
+ super
8
+ end
9
+
10
+ end
11
+ end
@@ -1,7 +1,26 @@
1
1
  module ActiveShipping
2
- class ResponseContentError < StandardError
2
+ class Error < ActiveUtils::ActiveUtilsError
3
+ end
4
+
5
+ class ResponseError < ActiveShipping::Error
6
+ attr_reader :response
7
+
8
+ def initialize(response = nil)
9
+ if response.is_a? Response
10
+ super(response.message)
11
+ @response = response
12
+ else
13
+ super(response)
14
+ end
15
+ end
16
+ end
17
+
18
+ class ResponseContentError < ActiveShipping::Error
3
19
  def initialize(exception, content_body)
4
20
  super("#{exception.message} \n\n#{content_body}")
5
21
  end
6
22
  end
23
+
24
+ class ShipmentNotFound < ActiveShipping::Error
25
+ end
7
26
  end
@@ -108,11 +108,6 @@ module ActiveShipping #:nodoc:
108
108
  }
109
109
  end
110
110
 
111
- def to_xml(options = {})
112
- options[:root] ||= "location"
113
- to_hash.to_xml(options)
114
- end
115
-
116
111
  def to_s
117
112
  prettyprint.gsub(/\n/, ' ')
118
113
  end
@@ -1,19 +1,4 @@
1
1
  module ActiveShipping #:nodoc:
2
- class Error < ActiveUtils::ActiveUtilsError
3
- end
4
-
5
- class ResponseError < Error
6
- attr_reader :response
7
-
8
- def initialize(response = nil)
9
- if response.is_a? Response
10
- super(response.message)
11
- @response = response
12
- else
13
- super(response)
14
- end
15
- end
16
- end
17
2
 
18
3
  # Basic Response class for requests against a carrier's API.
19
4
  class Response
@@ -1,3 +1,3 @@
1
1
  module ActiveShipping
2
- VERSION = "1.0.0.pre4"
2
+ VERSION = "1.0.0"
3
3
  end
data/test/credentials.yml CHANGED
@@ -11,9 +11,11 @@ usps:
11
11
  login: <%= ENV['ACTIVESHIPPING_USPS_LOGIN'] %>
12
12
 
13
13
  ups:
14
- key: <%= ENV['ACTIVESHIPPING_UPS_LOGIN'] %>
15
- login: <%= ENV['ACTIVESHIPPING_UPS_KEY'] %>
14
+ login: <%= ENV['ACTIVESHIPPING_UPS_LOGIN'] %>
15
+ key: <%= ENV['ACTIVESHIPPING_UPS_KEY'] %>
16
16
  password: <%= ENV['ACTIVESHIPPING_UPS_PASSWORD'] %>
17
+ origin_account: <%= ENV['ACTIVESHIPPING_UPS_ORIGIN_ACCOUNT'] %>
18
+ origin_name: <%= ENV['ACTIVESHIPPING_UPS_ORIGIN_NAME'] %>
17
19
 
18
20
  fedex:
19
21
  account: <%= ENV['ACTIVESHIPPING_FEDEX_ACCOUNT'] %>
@@ -32,10 +34,16 @@ new_zealand_post:
32
34
  key: <%= ENV['ACTIVESHIPPING_NEW_ZEALAND_POST_KEY'] %>
33
35
 
34
36
  canada_post_pws:
35
- platform_id: <%= ENV['ACTIVESHIPPING_CANADA_POST_PWS_PLATFORM_ID'] %>
37
+ customer_number: <%= ENV['ACTIVESHIPPING_CANADA_POST_PWS_CUSTOMER_NUMBER'] %>
36
38
  api_key: <%= ENV['ACTIVESHIPPING_CANADA_POST_PWS_API_KEY'] %>
37
39
  secret: <%= ENV['ACTIVESHIPPING_CANADA_POST_PWS_SECRET'] %>
38
40
 
41
+ canada_post_pws_platform:
42
+ platform_id: <%= ENV['ACTIVESHIPPING_CANADA_POST_PWS_PLATFORM_PLATFORM_ID'] %>
43
+ customer_number: <%= ENV['ACTIVESHIPPING_CANADA_POST_PWS_PLATFORM_CUSTOMER_NUMBER'] %>
44
+ api_key: <%= ENV['ACTIVESHIPPING_CANADA_POST_PWS_PLATFORM_API_KEY'] %>
45
+ secret: <%= ENV['ACTIVESHIPPING_CANADA_POST_PWS_PLATFORM_SECRET'] %>
46
+
39
47
  stamps:
40
48
  integration_id: <%= ENV['ACTIVESHIPPING_STAMPS_INTEGRATION_ID'] %>
41
49
  username: <%= ENV['ACTIVESHIPPING_STAMPS_USERNAME'] %>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <Servicos>
3
+ <cServico>
4
+ <Codigo>41106</Codigo>
5
+ <Valor>105,20</Valor>
6
+ <ValorSemAdicionais>97,70</ValorSemAdicionais>
7
+ <ValorMaoPropria>4,30</ValorMaoPropria>
8
+ <ValorAvisoRecebimento>3,20</ValorAvisoRecebimento>
9
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
10
+ <Erro/>
11
+ <MsgErro/>
12
+ </cServico>
13
+ </Servicos>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <Servicos>
3
+ <cServico>
4
+ <Codigo>41106</Codigo>
5
+ <Valor>0</Valor>
6
+ <ValorSemAdicionais>0</ValorSemAdicionais>
7
+ <ValorMaoPropria>0</ValorMaoPropria>
8
+ <ValorAvisoRecebimento>0</ValorAvisoRecebimento>
9
+ <ValorValorDeclarado>0</ValorValorDeclarado>
10
+ <Erro>-2</Erro>
11
+ <MsgErro>CEP de origem invalido</MsgErro>
12
+ </cServico>
13
+ </Servicos>
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <Servicos>
3
+ <cServico>
4
+ <Codigo>41106</Codigo>
5
+ <Valor>120,00</Valor>
6
+ <ValorSemAdicionais>12,10</ValorSemAdicionais>
7
+ <ValorMaoPropria>12,20</ValorMaoPropria>
8
+ <ValorAvisoRecebimento>12,30</ValorAvisoRecebimento>
9
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
10
+ <Erro/>
11
+ <MsgErro/>
12
+ </cServico>
13
+ <cServico>
14
+ <Codigo>41300</Codigo>
15
+ <Valor>130,00</Valor>
16
+ <ValorSemAdicionais>13,10</ValorSemAdicionais>
17
+ <ValorMaoPropria>13,20</ValorMaoPropria>
18
+ <ValorAvisoRecebimento>13,30</ValorAvisoRecebimento>
19
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
20
+ <Erro/>
21
+ <MsgErro/>
22
+ </cServico>
23
+ <cServico>
24
+ <Codigo>40215</Codigo>
25
+ <Valor>140,00</Valor>
26
+ <ValorSemAdicionais>14,10</ValorSemAdicionais>
27
+ <ValorMaoPropria>14,20</ValorMaoPropria>
28
+ <ValorAvisoRecebimento>14,30</ValorAvisoRecebimento>
29
+ <ValorValorDeclarado>10,00</ValorValorDeclarado>
30
+ <Erro/>
31
+ <MsgErro/>
32
+ </cServico>
33
+ <cServico>
34
+ <Codigo>81019</Codigo>
35
+ <Valor>150,00</Valor>
36
+ <ValorSemAdicionais>15,10</ValorSemAdicionais>
37
+ <ValorMaoPropria>15,20</ValorMaoPropria>
38
+ <ValorAvisoRecebimento>15,30</ValorAvisoRecebimento>
39
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
40
+ <Erro/>
41
+ <MsgErro/>
42
+ </cServico>
43
+ </Servicos>
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <Servicos>
3
+ <cServico>
4
+ <Codigo>41106</Codigo>
5
+ <Valor>10,00</Valor>
6
+ <ValorSemAdicionais>97,70</ValorSemAdicionais>
7
+ <ValorMaoPropria>4,30</ValorMaoPropria>
8
+ <ValorAvisoRecebimento>3,20</ValorAvisoRecebimento>
9
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
10
+ <Erro/>
11
+ <MsgErro/>
12
+ </cServico>
13
+ <cServico>
14
+ <Codigo>40215</Codigo>
15
+ <Valor>20,00</Valor>
16
+ <ValorSemAdicionais>97,70</ValorSemAdicionais>
17
+ <ValorMaoPropria>4,30</ValorMaoPropria>
18
+ <ValorAvisoRecebimento>3,20</ValorAvisoRecebimento>
19
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
20
+ <Erro/>
21
+ <MsgErro/>
22
+ </cServico>
23
+ </Servicos>
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <Servicos>
3
+ <cServico>
4
+ <Codigo>41106</Codigo>
5
+ <Valor>20,00</Valor>
6
+ <ValorSemAdicionais>2,10</ValorSemAdicionais>
7
+ <ValorMaoPropria>2,20</ValorMaoPropria>
8
+ <ValorAvisoRecebimento>2,30</ValorAvisoRecebimento>
9
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
10
+ <Erro/>
11
+ <MsgErro/>
12
+ </cServico>
13
+ <cServico>
14
+ <Codigo>41300</Codigo>
15
+ <Valor>30,00</Valor>
16
+ <ValorSemAdicionais>3,10</ValorSemAdicionais>
17
+ <ValorMaoPropria>3,20</ValorMaoPropria>
18
+ <ValorAvisoRecebimento>3,30</ValorAvisoRecebimento>
19
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
20
+ <Erro/>
21
+ <MsgErro/>
22
+ </cServico>
23
+ <cServico>
24
+ <Codigo>40215</Codigo>
25
+ <Valor>40,00</Valor>
26
+ <ValorSemAdicionais>4,10</ValorSemAdicionais>
27
+ <ValorMaoPropria>4,20</ValorMaoPropria>
28
+ <ValorAvisoRecebimento>4,30</ValorAvisoRecebimento>
29
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
30
+ <Erro/>
31
+ <MsgErro/>
32
+ </cServico>
33
+ <cServico>
34
+ <Codigo>81019</Codigo>
35
+ <Valor>50,00</Valor>
36
+ <ValorSemAdicionais>5,10</ValorSemAdicionais>
37
+ <ValorMaoPropria>5,20</ValorMaoPropria>
38
+ <ValorAvisoRecebimento>5,30</ValorAvisoRecebimento>
39
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
40
+ <Erro/>
41
+ <MsgErro/>
42
+ </cServico>
43
+ </Servicos>
@@ -1,27 +1,29 @@
1
1
  <?xml version="1.0"?>
2
- <TrackRequest xmlns="http://fedex.com/ws/track/v3">
2
+ <TrackRequest xmlns="http://fedex.com/ws/track/v7">
3
3
  <WebAuthenticationDetail>
4
4
  <UserCredential>
5
- <Key>1111</Key>
6
- <Password>2222</Password>
5
+ <Key>5FJsRZSnp1kVPzRg</Key>
6
+ <Password>jziwHavkOa7KSvyHOMK0iz1GG</Password>
7
7
  </UserCredential>
8
8
  </WebAuthenticationDetail>
9
9
  <ClientDetail>
10
- <AccountNumber>3333</AccountNumber>
11
- <MeterNumber>4444</MeterNumber>
10
+ <AccountNumber>510087909</AccountNumber>
11
+ <MeterNumber>100007836</MeterNumber>
12
12
  </ClientDetail>
13
13
  <TransactionDetail>
14
14
  <CustomerTransactionId>ActiveShipping</CustomerTransactionId>
15
15
  </TransactionDetail>
16
16
  <Version>
17
17
  <ServiceId>trck</ServiceId>
18
- <Major>3</Major>
18
+ <Major>7</Major>
19
19
  <Intermediate>0</Intermediate>
20
20
  <Minor>0</Minor>
21
21
  </Version>
22
- <PackageIdentifier>
23
- <Value>077973360403984</Value>
24
- <Type>TRACKING_NUMBER_OR_DOORTAG</Type>
25
- </PackageIdentifier>
26
- <IncludeDetailedScans>1</IncludeDetailedScans>
22
+ <SelectionDetails>
23
+ <PackageIdentifier>
24
+ <Type>TRACKING_NUMBER_OR_DOORTAG</Type>
25
+ <Value>12345</Value>
26
+ </PackageIdentifier>
27
+ </SelectionDetails>
28
+ <ProcessingOptions>INCLUDE_DETAILED_SCANS</ProcessingOptions>
27
29
  </TrackRequest>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <TrackReply xmlns="http://fedex.com/ws/track/v7" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <HighestSeverity>ERROR</HighestSeverity>
4
+ <Notifications>
5
+ <Severity>ERROR</Severity>
6
+ <Source>trck</Source>
7
+ <Code>5508</Code>
8
+ <Message>Invalid tracking number.</Message>
9
+ <LocalizedMessage>Invalid tracking number.</LocalizedMessage>
10
+ </Notifications>
11
+ <TransactionDetail>
12
+ <CustomerTransactionId>ActiveShipping</CustomerTransactionId>
13
+ </TransactionDetail>
14
+ <Version>
15
+ <ServiceId>trck</ServiceId>
16
+ <Major>7</Major>
17
+ <Intermediate>0</Intermediate>
18
+ <Minor>0</Minor>
19
+ </Version>
20
+ </TrackReply>
@@ -0,0 +1,254 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <TrackReply xmlns="http://fedex.com/ws/track/v7" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <HighestSeverity>SUCCESS</HighestSeverity>
4
+ <Notifications>
5
+ <Severity>SUCCESS</Severity>
6
+ <Source>trck</Source>
7
+ <Code>0</Code>
8
+ <Message>Request was successfully processed.</Message>
9
+ <LocalizedMessage>Request was successfully processed.</LocalizedMessage>
10
+ </Notifications>
11
+ <TransactionDetail>
12
+ <CustomerTransactionId>ActiveShipping</CustomerTransactionId>
13
+ </TransactionDetail>
14
+ <Version>
15
+ <ServiceId>trck</ServiceId>
16
+ <Major>7</Major>
17
+ <Intermediate>0</Intermediate>
18
+ <Minor>0</Minor>
19
+ </Version>
20
+ <CompletedTrackDetails>
21
+ <HighestSeverity>SUCCESS</HighestSeverity>
22
+ <Notifications>
23
+ <Severity>SUCCESS</Severity>
24
+ <Source>trck</Source>
25
+ <Code>0</Code>
26
+ <Message>Request was successfully processed.</Message>
27
+ <LocalizedMessage>Request was successfully processed.</LocalizedMessage>
28
+ </Notifications>
29
+ <DuplicateWaybill>false</DuplicateWaybill>
30
+ <MoreData>false</MoreData>
31
+ <TrackDetails>
32
+ <Notification>
33
+ <Severity>SUCCESS</Severity>
34
+ <Source>trck</Source>
35
+ <Code>0</Code>
36
+ <Message>Request was successfully processed.</Message>
37
+ <LocalizedMessage>Request was successfully processed.</LocalizedMessage>
38
+ </Notification>
39
+ <TrackingNumber>403934084723025</TrackingNumber>
40
+ <TrackingNumberUniqueIdentifier>12013~403934084723025~FDEG</TrackingNumberUniqueIdentifier>
41
+ <StatusDetail>
42
+ <CreationTime>2014-01-08T00:00:00</CreationTime>
43
+ <Code>DL</Code>
44
+ <Description>Delivered</Description>
45
+ <Location>
46
+ <StreetLines>11304 E 33RD AVE</StreetLines>
47
+ <City>Spokane</City>
48
+ <StateOrProvinceCode>WA</StateOrProvinceCode>
49
+ <CountryCode>US</CountryCode>
50
+ <CountryName>United States</CountryName>
51
+ <Residential>false</Residential>
52
+ </Location>
53
+ <AncillaryDetails>
54
+ <Reason>014</Reason>
55
+ <ReasonDescription>Left at front door.Signature Service not requested.</ReasonDescription>
56
+ </AncillaryDetails>
57
+ </StatusDetail>
58
+ <CarrierCode>FDXG</CarrierCode>
59
+ <OperatingCompanyOrCarrierDescription>FedEx Ground</OperatingCompanyOrCarrierDescription>
60
+ <OtherIdentifiers>
61
+ <PackageIdentifier>
62
+ <Type>GROUND_SHIPMENT_ID</Type>
63
+ <Value>403934084723025</Value>
64
+ </PackageIdentifier>
65
+ </OtherIdentifiers>
66
+ <OtherIdentifiers>
67
+ <PackageIdentifier>
68
+ <Type>DEPARTMENT</Type>
69
+ <Value>31826722</Value>
70
+ </PackageIdentifier>
71
+ </OtherIdentifiers>
72
+ <Service>
73
+ <Type>GROUND_HOME_DELIVERY</Type>
74
+ <Description>FedEx Home Delivery</Description>
75
+ <ShortDescription>HD</ShortDescription>
76
+ </Service>
77
+ <PackageWeight>
78
+ <Units>LB</Units>
79
+ <Value>0.4</Value>
80
+ </PackageWeight>
81
+ <Packaging>Package</Packaging>
82
+ <PackagingType>YOUR_PACKAGING</PackagingType>
83
+ <PackageSequenceNumber>1</PackageSequenceNumber>
84
+ <PackageCount>1</PackageCount>
85
+ <OriginLocationAddress>
86
+ <City>CAMBRIDGE</City>
87
+ <StateOrProvinceCode>OH</StateOrProvinceCode>
88
+ <CountryCode>US</CountryCode>
89
+ <CountryName>United States</CountryName>
90
+ <Residential>false</Residential>
91
+ </OriginLocationAddress>
92
+ <ShipTimestamp>2014-01-03T00:00:00</ShipTimestamp>
93
+ <DestinationAddress>
94
+ <City>Spokane Valley</City>
95
+ <StateOrProvinceCode>WA</StateOrProvinceCode>
96
+ <CountryCode>US</CountryCode>
97
+ <CountryName>United States</CountryName>
98
+ <Residential>false</Residential>
99
+ </DestinationAddress>
100
+ <ActualDeliveryTimestamp>2014-01-08T12:53:10-08:00</ActualDeliveryTimestamp>
101
+ <ActualDeliveryAddress>
102
+ <City>Spokane</City>
103
+ <StateOrProvinceCode>WA</StateOrProvinceCode>
104
+ <CountryCode>US</CountryCode>
105
+ <CountryName>United States</CountryName>
106
+ <Residential>false</Residential>
107
+ </ActualDeliveryAddress>
108
+ <DeliveryAttempts>0</DeliveryAttempts>
109
+ <DeliverySignatureName>Signature not required</DeliverySignatureName>
110
+ <TotalUniqueAddressCountInConsolidation>0</TotalUniqueAddressCountInConsolidation>
111
+ <RedirectToHoldEligibility>INELIGIBLE</RedirectToHoldEligibility>
112
+ <Events>
113
+ <Timestamp>2014-01-08T12:53:10-08:00</Timestamp>
114
+ <EventType>DL</EventType>
115
+ <EventDescription>Delivered</EventDescription>
116
+ <StatusExceptionCode>014</StatusExceptionCode>
117
+ <StatusExceptionDescription>Left at front door. Signature Service not requested.</StatusExceptionDescription>
118
+ <Address>
119
+ <City>Spokane</City>
120
+ <StateOrProvinceCode>WA</StateOrProvinceCode>
121
+ <PostalCode>99206</PostalCode>
122
+ <CountryCode>US</CountryCode>
123
+ <CountryName>United States</CountryName>
124
+ <Residential>false</Residential>
125
+ </Address>
126
+ <ArrivalLocation>DELIVERY_LOCATION</ArrivalLocation>
127
+ </Events>
128
+ <Events>
129
+ <Timestamp>2014-01-08T06:33:00-08:00</Timestamp>
130
+ <EventType>OD</EventType>
131
+ <EventDescription>On FedEx vehicle for delivery</EventDescription>
132
+ <Address>
133
+ <City>SPOKANE</City>
134
+ <StateOrProvinceCode>WA</StateOrProvinceCode>
135
+ <PostalCode>99216</PostalCode>
136
+ <CountryCode>US</CountryCode>
137
+ <CountryName>United States</CountryName>
138
+ <Residential>false</Residential>
139
+ </Address>
140
+ <ArrivalLocation>VEHICLE</ArrivalLocation>
141
+ </Events>
142
+ <Events>
143
+ <Timestamp>2014-01-08T05:46:00-08:00</Timestamp>
144
+ <EventType>AR</EventType>
145
+ <EventDescription>At local FedEx facility</EventDescription>
146
+ <Address>
147
+ <City>SPOKANE</City>
148
+ <StateOrProvinceCode>WA</StateOrProvinceCode>
149
+ <PostalCode>99216</PostalCode>
150
+ <CountryCode>US</CountryCode>
151
+ <CountryName>United States</CountryName>
152
+ <Residential>false</Residential>
153
+ </Address>
154
+ <ArrivalLocation>DESTINATION_FEDEX_FACILITY</ArrivalLocation>
155
+ </Events>
156
+ <Events>
157
+ <Timestamp>2014-01-08T02:15:57-08:00</Timestamp>
158
+ <EventType>IT</EventType>
159
+ <EventDescription>In transit</EventDescription>
160
+ <Address>
161
+ <City>PASCO</City>
162
+ <StateOrProvinceCode>WA</StateOrProvinceCode>
163
+ <PostalCode>99301</PostalCode>
164
+ <CountryCode>US</CountryCode>
165
+ <CountryName>United States</CountryName>
166
+ <Residential>false</Residential>
167
+ </Address>
168
+ <ArrivalLocation>FEDEX_FACILITY</ArrivalLocation>
169
+ </Events>
170
+ <Events>
171
+ <Timestamp>2014-01-07T21:54:07-08:00</Timestamp>
172
+ <EventType>DP</EventType>
173
+ <EventDescription>Departed FedEx location</EventDescription>
174
+ <Address>
175
+ <City>TROUTDALE</City>
176
+ <StateOrProvinceCode>OR</StateOrProvinceCode>
177
+ <PostalCode>97060</PostalCode>
178
+ <CountryCode>US</CountryCode>
179
+ <CountryName>United States</CountryName>
180
+ <Residential>false</Residential>
181
+ </Address>
182
+ <ArrivalLocation>FEDEX_FACILITY</ArrivalLocation>
183
+ </Events>
184
+ <Events>
185
+ <Timestamp>2014-01-07T20:14:00-08:00</Timestamp>
186
+ <EventType>AR</EventType>
187
+ <EventDescription>Arrived at FedEx location</EventDescription>
188
+ <Address>
189
+ <City>TROUTDALE</City>
190
+ <StateOrProvinceCode>OR</StateOrProvinceCode>
191
+ <PostalCode>97060</PostalCode>
192
+ <CountryCode>US</CountryCode>
193
+ <CountryName>United States</CountryName>
194
+ <Residential>false</Residential>
195
+ </Address>
196
+ <ArrivalLocation>FEDEX_FACILITY</ArrivalLocation>
197
+ </Events>
198
+ <Events>
199
+ <Timestamp>2014-01-04T14:30:17-05:00</Timestamp>
200
+ <EventType>DP</EventType>
201
+ <EventDescription>Departed FedEx location</EventDescription>
202
+ <Address>
203
+ <City>GROVE CITY</City>
204
+ <StateOrProvinceCode>OH</StateOrProvinceCode>
205
+ <PostalCode>43123</PostalCode>
206
+ <CountryCode>US</CountryCode>
207
+ <CountryName>United States</CountryName>
208
+ <Residential>false</Residential>
209
+ </Address>
210
+ <ArrivalLocation>FEDEX_FACILITY</ArrivalLocation>
211
+ </Events>
212
+ <Events>
213
+ <Timestamp>2014-01-04T00:43:00-05:00</Timestamp>
214
+ <EventType>AR</EventType>
215
+ <EventDescription>Arrived at FedEx location</EventDescription>
216
+ <Address>
217
+ <City>GROVE CITY</City>
218
+ <StateOrProvinceCode>OH</StateOrProvinceCode>
219
+ <PostalCode>43123</PostalCode>
220
+ <CountryCode>US</CountryCode>
221
+ <CountryName>United States</CountryName>
222
+ <Residential>false</Residential>
223
+ </Address>
224
+ <ArrivalLocation>FEDEX_FACILITY</ArrivalLocation>
225
+ </Events>
226
+ <Events>
227
+ <Timestamp>2014-01-03T15:03:00-05:00</Timestamp>
228
+ <EventType>OC</EventType>
229
+ <EventDescription>Shipment information sent to FedEx</EventDescription>
230
+ <Address>
231
+ <PostalCode>43822</PostalCode>
232
+ <CountryCode>US</CountryCode>
233
+ <CountryName>United States</CountryName>
234
+ <Residential>false</Residential>
235
+ </Address>
236
+ <ArrivalLocation>CUSTOMER</ArrivalLocation>
237
+ </Events>
238
+ <Events>
239
+ <Timestamp>2014-01-03T00:00:00</Timestamp>
240
+ <EventType>PU</EventType>
241
+ <EventDescription>Picked up</EventDescription>
242
+ <Address>
243
+ <City>CAMBRIDGE</City>
244
+ <StateOrProvinceCode>OH</StateOrProvinceCode>
245
+ <PostalCode>43725</PostalCode>
246
+ <CountryCode>US</CountryCode>
247
+ <CountryName>United States</CountryName>
248
+ <Residential>false</Residential>
249
+ </Address>
250
+ <ArrivalLocation>PICKUP_LOCATION</ArrivalLocation>
251
+ </Events>
252
+ </TrackDetails>
253
+ </CompletedTrackDetails>
254
+ </TrackReply>