dhl-get_quote 0.4.25

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.
@@ -0,0 +1,146 @@
1
+ require 'spec_helper'
2
+ require 'dhl-get_quote'
3
+
4
+ describe Dhl::GetQuote::Response do
5
+
6
+ let(:klass) { Dhl::GetQuote::Response }
7
+
8
+ let(:valid_xml) { valid_dhl_response }
9
+ let(:invalid_xml) { "<invalid></xml>" }
10
+
11
+ subject do
12
+ klass.new(valid_xml)
13
+ end
14
+
15
+ describe "#initialize" do
16
+
17
+ it "must return a Dhl::GetQuote::Response object" do
18
+ subject.must be_an_instance_of(klass)
19
+ end
20
+
21
+ context "valid xml" do
22
+
23
+ let(:r) { klass.new(valid_xml) }
24
+
25
+ it "must return a valid object" do
26
+ r.must be_an_instance_of(klass)
27
+ end
28
+
29
+ it "must not indicate an error" do
30
+ r.error?.must be_false
31
+ end
32
+
33
+ it "must expose the parsed XML" do
34
+ r.parsed_xml.must be_an_instance_of Hash
35
+ end
36
+
37
+ it "must preserve the original XML" do
38
+ r.raw_xml.must == valid_xml
39
+ end
40
+
41
+ end
42
+
43
+ context "invalid xml" do
44
+
45
+ let(:r) { klass.new(invalid_xml) }
46
+
47
+ it "must return a valid object" do
48
+ r.must be_an_instance_of(klass)
49
+ end
50
+
51
+ it "must indicate an error" do
52
+ r.error?.must be_true
53
+ end
54
+
55
+ it "must expose the root xml error" do
56
+ r.error.must be_an_instance_of MultiXml::ParseError
57
+ end
58
+
59
+ it "must preserve the original XML" do
60
+ r.raw_xml.must == invalid_xml
61
+ end
62
+
63
+ end
64
+
65
+ context "invalid site id" do
66
+ let(:r) { klass.new(incorrect_site_id_response) }
67
+
68
+ it "must return a valid object" do
69
+ r.must be_an_instance_of(klass)
70
+ end
71
+
72
+ it "must indicate an error" do
73
+ r.error?.must be_true
74
+ end
75
+
76
+ it "must set the error value appropriately" do
77
+ r.error.must be_an_instance_of Dhl::GetQuote::Upstream::ValidationFailureError
78
+ end
79
+
80
+ end
81
+
82
+ context "invalid password" do
83
+ let(:r) { klass.new(incorrect_password_response) }
84
+
85
+ it "must return a valid object" do
86
+ r.must be_an_instance_of(klass)
87
+ end
88
+
89
+ it "must indicate an error" do
90
+ r.error?.must be_true
91
+ end
92
+
93
+ it "must set the error value appropriately" do
94
+ r.error.must be_an_instance_of Dhl::GetQuote::Upstream::ValidationFailureError
95
+ end
96
+
97
+ end
98
+
99
+ end
100
+
101
+ describe "#error?" do
102
+ it "must be true if there is an error present" do
103
+ subject.instance_variable_set(:@error, mock(:error))
104
+
105
+ subject.error?.must be_true
106
+ end
107
+
108
+ it "must be false if there is no error present" do
109
+ subject.instance_variable_set(:@error, nil)
110
+
111
+ subject.error?.must be_false
112
+ end
113
+ end
114
+
115
+ describe "#load_costs" do
116
+ it "must load the costs with the associated currency_role_type_code" do
117
+ subject.load_costs("BILLC")
118
+
119
+ # references values from spec_helper#valid_dhl_response
120
+ subject.currency_code.must == 'USD'
121
+ subject.currency_role_type_code.must == 'BILLC'
122
+ subject.weight_charge.must == "253.550"
123
+ subject.total_amount.must == "283.980"
124
+ subject.total_tax_amount == "0.000"
125
+ subject.weight_charge_tax == "0.000"
126
+ end
127
+ end
128
+
129
+ describe "#offered_services" do
130
+
131
+ subject { klass.new(mkt_srv_response) }
132
+
133
+ it "must return a list of only offered services (MrkSrvInd=Y or TransInd=Y) as MarketService objects" do
134
+ subject.offered_services.map(&:code).must == %w[ AB D GG II QA SA TA ]
135
+ end
136
+ end
137
+
138
+ describe "#all_services" do
139
+
140
+ subject { klass.new(mkt_srv_response) }
141
+
142
+ it "must return a list of all services regardless of offer type (MrkSrvInd = N/Y) as MarketService objects" do
143
+ subject.all_services.map(&:code).must == %w[ AB AD D FF GG II JA OB OO PA PC PX QA SA TA ]
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,508 @@
1
+ require 'rspec'
2
+ require 'rspec/must'
3
+
4
+ RSpec.configure do |config|
5
+ config.treat_symbols_as_metadata_keys_with_true_values = true
6
+ config.run_all_when_everything_filtered = true
7
+ config.order = 'random'
8
+ end
9
+
10
+ def valid_dhl_response
11
+ '<?xml version="1.0" encoding="UTF-8"?>
12
+ <res:DCTResponse xmlns:res="http://www.dhl.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.dhl.com DCT-Response.xsd">
13
+ <GetQuoteResponse>
14
+ <Response>
15
+ <ServiceHeader>
16
+ <MessageTime>2013-04-23T01:12:14.907+01:00</MessageTime>
17
+ <SiteID>SomeSiteId</SiteID>
18
+ </ServiceHeader>
19
+ </Response>
20
+ <BkgDetails>
21
+ <OriginServiceArea>
22
+ <FacilityCode>SLC</FacilityCode>
23
+ <ServiceAreaCode>SLC</ServiceAreaCode>
24
+ </OriginServiceArea>
25
+ <DestinationServiceArea>
26
+ <FacilityCode>YQL</FacilityCode>
27
+ <ServiceAreaCode>YYC</ServiceAreaCode>
28
+ </DestinationServiceArea>
29
+ <QtdShp>
30
+ <GlobalProductCode>D</GlobalProductCode>
31
+ <LocalProductCode>D</LocalProductCode>
32
+ <ProductShortName>EXPRESS WORLDWIDE</ProductShortName>
33
+ <LocalProductName>EXPRESS WORLDWIDE DOC</LocalProductName>
34
+ <NetworkTypeCode>TD</NetworkTypeCode>
35
+ <POfferedCustAgreement>N</POfferedCustAgreement>
36
+ <TransInd>Y</TransInd>
37
+ <PickupDate>2013-04-22</PickupDate>
38
+ <PickupCutoffTime>PT17H</PickupCutoffTime>
39
+ <BookingTime>PT16H</BookingTime>
40
+ <CurrencyCode>USD</CurrencyCode>
41
+ <ExchangeRate>1.000000</ExchangeRate>
42
+ <WeightCharge>253.550</WeightCharge>
43
+ <WeightChargeTax>0.000</WeightChargeTax>
44
+ <TotalTransitDays>2</TotalTransitDays>
45
+ <PickupPostalLocAddDays>0</PickupPostalLocAddDays>
46
+ <DeliveryPostalLocAddDays>1</DeliveryPostalLocAddDays>
47
+ <PickupNonDHLCourierCode/>
48
+ <DeliveryNonDHLCourierCode/>
49
+ <DeliveryDate>2013-04-24</DeliveryDate>
50
+ <DeliveryTime>PT23H59M</DeliveryTime>
51
+ <DimensionalWeight>41.888</DimensionalWeight>
52
+ <WeightUnit>LB</WeightUnit>
53
+ <PickupDayOfWeekNum>1</PickupDayOfWeekNum>
54
+ <DestinationDayOfWeekNum>3</DestinationDayOfWeekNum>
55
+ <QtdShpExChrg>
56
+ <SpecialServiceType>FF</SpecialServiceType>
57
+ <LocalServiceType>FF</LocalServiceType>
58
+ <GlobalServiceName>FUEL SURCHARGE</GlobalServiceName>
59
+ <LocalServiceTypeName>FUEL SURCHARGE</LocalServiceTypeName>
60
+ <ChargeCodeType>SCH</ChargeCodeType>
61
+ <CurrencyCode>USD</CurrencyCode>
62
+ <ChargeValue>30.430</ChargeValue>
63
+ <QtdSExtrChrgInAdCur>
64
+ <ChargeValue>30.430</ChargeValue>
65
+ <CurrencyCode>USD</CurrencyCode>
66
+ <CurrencyRoleTypeCode>BILLC</CurrencyRoleTypeCode>
67
+ </QtdSExtrChrgInAdCur>
68
+ <QtdSExtrChrgInAdCur>
69
+ <ChargeValue>30.430</ChargeValue>
70
+ <CurrencyCode>USD</CurrencyCode>
71
+ <CurrencyRoleTypeCode>PULCL</CurrencyRoleTypeCode>
72
+ </QtdSExtrChrgInAdCur>
73
+ <QtdSExtrChrgInAdCur>
74
+ <ChargeValue>30.430</ChargeValue>
75
+ <CurrencyCode>USD</CurrencyCode>
76
+ <CurrencyRoleTypeCode>BASEC</CurrencyRoleTypeCode>
77
+ </QtdSExtrChrgInAdCur>
78
+ </QtdShpExChrg>
79
+ <PricingDate>2013-04-23</PricingDate>
80
+ <ShippingCharge>283.980</ShippingCharge>
81
+ <TotalTaxAmount>0.000</TotalTaxAmount>
82
+ <QtdSInAdCur>
83
+ <CurrencyCode>USD</CurrencyCode>
84
+ <CurrencyRoleTypeCode>BILLC</CurrencyRoleTypeCode>
85
+ <WeightCharge>253.550</WeightCharge>
86
+ <TotalAmount>283.980</TotalAmount>
87
+ <TotalTaxAmount>0.000</TotalTaxAmount>
88
+ <WeightChargeTax>0.000</WeightChargeTax>
89
+ </QtdSInAdCur>
90
+ <QtdSInAdCur>
91
+ <CurrencyCode>USD</CurrencyCode>
92
+ <CurrencyRoleTypeCode>PULCL</CurrencyRoleTypeCode>
93
+ <WeightCharge>253.550</WeightCharge>
94
+ <TotalAmount>283.980</TotalAmount>
95
+ <TotalTaxAmount>0.000</TotalTaxAmount>
96
+ <WeightChargeTax>0.000</WeightChargeTax>
97
+ </QtdSInAdCur>
98
+ <QtdSInAdCur>
99
+ <CurrencyCode>USD</CurrencyCode>
100
+ <CurrencyRoleTypeCode>BASEC</CurrencyRoleTypeCode>
101
+ <WeightCharge>253.550</WeightCharge>
102
+ <TotalAmount>283.980</TotalAmount>
103
+ <TotalTaxAmount>0.000</TotalTaxAmount>
104
+ <WeightChargeTax>0.000</WeightChargeTax>
105
+ </QtdSInAdCur>
106
+ </QtdShp>
107
+ </BkgDetails>
108
+ <Srvs>
109
+ <Srv>
110
+ <GlobalProductCode>D</GlobalProductCode>
111
+ <MrkSrv>
112
+ <LocalProductCode>D</LocalProductCode>
113
+ <ProductShortName>EXPRESS WORLDWIDE</ProductShortName>
114
+ <LocalProductName>EXPRESS WORLDWIDE DOC</LocalProductName>
115
+ <NetworkTypeCode>TD</NetworkTypeCode>
116
+ <POfferedCustAgreement>N</POfferedCustAgreement>
117
+ <TransInd>Y</TransInd>
118
+ </MrkSrv>
119
+ <MrkSrv>
120
+ <LocalServiceType>FF</LocalServiceType>
121
+ <GlobalServiceName>FUEL SURCHARGE</GlobalServiceName>
122
+ <LocalServiceTypeName>FUEL SURCHARGE</LocalServiceTypeName>
123
+ <ChargeCodeType>SCH</ChargeCodeType>
124
+ <MrkSrvInd>N</MrkSrvInd>
125
+ </MrkSrv>
126
+ </Srv>
127
+ </Srvs>
128
+ </GetQuoteResponse>
129
+ </res:DCTResponse>'
130
+ end
131
+
132
+ def incorrect_site_id_response
133
+ '<?xml version="1.0" encoding="UTF-8"?><res:ErrorResponse xmlns:res="http://www.dhl.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://www.dhl.com err-res.xsd">
134
+ <Response>
135
+ <ServiceHeader>
136
+ <MessageTime>2013-04-23T21:59:57+01:00</MessageTime>
137
+ <SiteID>SomeSiteId</SiteID>
138
+ <Password>SomeSiteId</Password>
139
+ </ServiceHeader>
140
+ <Status>
141
+ <ActionStatus>Error</ActionStatus>
142
+ <Condition>
143
+ <ConditionCode>100</ConditionCode>
144
+ <ConditionData>Validation Failure:Site Id is wrong</ConditionData>
145
+ </Condition>
146
+ </Status>
147
+ </Response></res:ErrorResponse>'
148
+ end
149
+
150
+ def incorrect_password_response
151
+ '<?xml version="1.0" encoding="UTF-8"?><res:ErrorResponse xmlns:res="http://www.dhl.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://www.dhl.com err-res.xsd">
152
+ <Response>
153
+ <ServiceHeader>
154
+ <MessageTime>2013-04-23T22:01:55+01:00</MessageTime>
155
+ <SiteID>SomeSiteId</SiteID>
156
+ <Password>SomeSiteId</Password>
157
+ </ServiceHeader>
158
+ <Status>
159
+ <ActionStatus>Error</ActionStatus>
160
+ <Condition>
161
+ <ConditionCode>100</ConditionCode>
162
+ <ConditionData>Validation Failure:Password provided is wrong</ConditionData>
163
+ </Condition>
164
+ </Status>
165
+ </Response></res:ErrorResponse>'
166
+ end
167
+
168
+ def mkt_srv_response
169
+ '<?xml version="1.0" encoding="UTF-8"?>
170
+ <res:DCTResponse xmlns:res="http://www.dhl.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.dhl.com DCT-Response.xsd">
171
+ <GetQuoteResponse>
172
+ <Response>
173
+ <ServiceHeader>
174
+ <MessageTime>2013-04-24T18:21:48.522+01:00</MessageTime>
175
+ <SiteID>Desere</SiteID>
176
+ </ServiceHeader>
177
+ </Response>
178
+ <BkgDetails>
179
+ <OriginServiceArea>
180
+ <FacilityCode>SLC</FacilityCode>
181
+ <ServiceAreaCode>SLC</ServiceAreaCode>
182
+ </OriginServiceArea>
183
+ <DestinationServiceArea>
184
+ <FacilityCode>YQL</FacilityCode>
185
+ <ServiceAreaCode>YYC</ServiceAreaCode>
186
+ </DestinationServiceArea>
187
+ <QtdShp>
188
+ <GlobalProductCode>D</GlobalProductCode>
189
+ <LocalProductCode>D</LocalProductCode>
190
+ <ProductShortName>EXPRESS WORLDWIDE</ProductShortName>
191
+ <LocalProductName>EXPRESS WORLDWIDE DOC</LocalProductName>
192
+ <NetworkTypeCode>TD</NetworkTypeCode>
193
+ <POfferedCustAgreement>N</POfferedCustAgreement>
194
+ <TransInd>Y</TransInd>
195
+ <PickupDate>2013-04-24</PickupDate>
196
+ <PickupCutoffTime>PT17H</PickupCutoffTime>
197
+ <BookingTime>PT16H</BookingTime>
198
+ <CurrencyCode>USD</CurrencyCode>
199
+ <ExchangeRate>1.000000</ExchangeRate>
200
+ <WeightCharge>266.510</WeightCharge>
201
+ <WeightChargeTax>0.000</WeightChargeTax>
202
+ <TotalTransitDays>2</TotalTransitDays>
203
+ <PickupPostalLocAddDays>0</PickupPostalLocAddDays>
204
+ <DeliveryPostalLocAddDays>1</DeliveryPostalLocAddDays>
205
+ <PickupNonDHLCourierCode/>
206
+ <DeliveryNonDHLCourierCode/>
207
+ <DeliveryDate>2013-04-26</DeliveryDate>
208
+ <DeliveryTime>PT23H59M</DeliveryTime>
209
+ <DimensionalWeight>44.092</DimensionalWeight>
210
+ <WeightUnit>LB</WeightUnit>
211
+ <PickupDayOfWeekNum>3</PickupDayOfWeekNum>
212
+ <DestinationDayOfWeekNum>5</DestinationDayOfWeekNum>
213
+ <QtdShpExChrg>
214
+ <SpecialServiceType>FF</SpecialServiceType>
215
+ <LocalServiceType>FF</LocalServiceType>
216
+ <GlobalServiceName>FUEL SURCHARGE</GlobalServiceName>
217
+ <LocalServiceTypeName>FUEL SURCHARGE</LocalServiceTypeName>
218
+ <ChargeCodeType>SCH</ChargeCodeType>
219
+ <CurrencyCode>USD</CurrencyCode>
220
+ <ChargeValue>31.980</ChargeValue>
221
+ <QtdSExtrChrgInAdCur>
222
+ <ChargeValue>31.980</ChargeValue>
223
+ <CurrencyCode>USD</CurrencyCode>
224
+ <CurrencyRoleTypeCode>BILLC</CurrencyRoleTypeCode>
225
+ </QtdSExtrChrgInAdCur>
226
+ <QtdSExtrChrgInAdCur>
227
+ <ChargeValue>31.980</ChargeValue>
228
+ <CurrencyCode>USD</CurrencyCode>
229
+ <CurrencyRoleTypeCode>PULCL</CurrencyRoleTypeCode>
230
+ </QtdSExtrChrgInAdCur>
231
+ <QtdSExtrChrgInAdCur>
232
+ <ChargeValue>31.980</ChargeValue>
233
+ <CurrencyCode>USD</CurrencyCode>
234
+ <CurrencyRoleTypeCode>BASEC</CurrencyRoleTypeCode>
235
+ </QtdSExtrChrgInAdCur>
236
+ </QtdShpExChrg>
237
+ <PricingDate>2013-04-24</PricingDate>
238
+ <ShippingCharge>298.490</ShippingCharge>
239
+ <TotalTaxAmount>0.000</TotalTaxAmount>
240
+ <QtdSInAdCur>
241
+ <CurrencyCode>USD</CurrencyCode>
242
+ <CurrencyRoleTypeCode>BILLC</CurrencyRoleTypeCode>
243
+ <WeightCharge>266.510</WeightCharge>
244
+ <TotalAmount>298.490</TotalAmount>
245
+ <TotalTaxAmount>0.000</TotalTaxAmount>
246
+ <WeightChargeTax>0.000</WeightChargeTax>
247
+ </QtdSInAdCur>
248
+ <QtdSInAdCur>
249
+ <CurrencyCode>USD</CurrencyCode>
250
+ <CurrencyRoleTypeCode>PULCL</CurrencyRoleTypeCode>
251
+ <WeightCharge>266.510</WeightCharge>
252
+ <TotalAmount>298.490</TotalAmount>
253
+ <TotalTaxAmount>0.000</TotalTaxAmount>
254
+ <WeightChargeTax>0.000</WeightChargeTax>
255
+ </QtdSInAdCur>
256
+ <QtdSInAdCur>
257
+ <CurrencyCode>USD</CurrencyCode>
258
+ <CurrencyRoleTypeCode>BASEC</CurrencyRoleTypeCode>
259
+ <WeightCharge>266.510</WeightCharge>
260
+ <TotalAmount>298.490</TotalAmount>
261
+ <TotalTaxAmount>0.000</TotalTaxAmount>
262
+ <WeightChargeTax>0.000</WeightChargeTax>
263
+ </QtdSInAdCur>
264
+ </QtdShp>
265
+ </BkgDetails>
266
+ <Srvs>
267
+ <Srv>
268
+ <GlobalProductCode>D</GlobalProductCode>
269
+ <MrkSrv>
270
+ <LocalProductCode>D</LocalProductCode>
271
+ <ProductShortName>EXPRESS WORLDWIDE</ProductShortName>
272
+ <LocalProductName>EXPRESS WORLDWIDE DOC</LocalProductName>
273
+ <NetworkTypeCode>TD</NetworkTypeCode>
274
+ <POfferedCustAgreement>N</POfferedCustAgreement>
275
+ <TransInd>Y</TransInd>
276
+ </MrkSrv>
277
+ <MrkSrv>
278
+ <LocalServiceType>FF</LocalServiceType>
279
+ <GlobalServiceName>FUEL SURCHARGE</GlobalServiceName>
280
+ <LocalServiceTypeName>FUEL SURCHARGE</LocalServiceTypeName>
281
+ <ChargeCodeType>SCH</ChargeCodeType>
282
+ <MrkSrvInd>N</MrkSrvInd>
283
+ </MrkSrv>
284
+ <MrkSrv>
285
+ <LocalServiceType>AB</LocalServiceType>
286
+ <GlobalServiceName>SATURDAY PICKUP</GlobalServiceName>
287
+ <LocalServiceTypeName>SATURDAY PICKUP</LocalServiceTypeName>
288
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
289
+ <ChargeCodeType>XCH</ChargeCodeType>
290
+ <MrkSrvInd>Y</MrkSrvInd>
291
+ </MrkSrv>
292
+ <MrkSrv>
293
+ <LocalServiceType>AD</LocalServiceType>
294
+ <GlobalServiceName>HOLIDAY PICKUP</GlobalServiceName>
295
+ <LocalServiceTypeName>HOLIDAY PICKUP</LocalServiceTypeName>
296
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
297
+ <ChargeCodeType>XCH</ChargeCodeType>
298
+ <MrkSrvInd>N</MrkSrvInd>
299
+ </MrkSrv>
300
+ <MrkSrv>
301
+ <LocalServiceType>GG</LocalServiceType>
302
+ <GlobalServiceName>PACKAGING</GlobalServiceName>
303
+ <LocalServiceTypeName>PACKAGING</LocalServiceTypeName>
304
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
305
+ <ChargeCodeType>XCH</ChargeCodeType>
306
+ <MrkSrvInd>Y</MrkSrvInd>
307
+ </MrkSrv>
308
+ <MrkSrv>
309
+ <LocalServiceType>II</LocalServiceType>
310
+ <GlobalServiceName>SHIPMENT INSURANCE</GlobalServiceName>
311
+ <LocalServiceTypeName>SHIPMENT VALUE PROTECTION</LocalServiceTypeName>
312
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
313
+ <ChargeCodeType>XCH</ChargeCodeType>
314
+ <MrkSrvInd>Y</MrkSrvInd>
315
+ </MrkSrv>
316
+ <MrkSrv>
317
+ <LocalServiceType>JA</LocalServiceType>
318
+ <GlobalServiceName>DELIVERY NOTIFICATION</GlobalServiceName>
319
+ <LocalServiceTypeName>DELIVERY NOTIFICATION</LocalServiceTypeName>
320
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
321
+ <ChargeCodeType>XCH</ChargeCodeType>
322
+ <MrkSrvInd>N</MrkSrvInd>
323
+ </MrkSrv>
324
+ <MrkSrv>
325
+ <LocalServiceType>OB</LocalServiceType>
326
+ <GlobalServiceName>REMOTE AREA PICKUP</GlobalServiceName>
327
+ <LocalServiceTypeName>REMOTE AREA PICKUP</LocalServiceTypeName>
328
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
329
+ <ChargeCodeType>SCH</ChargeCodeType>
330
+ <MrkSrvInd>N</MrkSrvInd>
331
+ </MrkSrv>
332
+ <MrkSrv>
333
+ <LocalServiceType>OO</LocalServiceType>
334
+ <GlobalServiceName>REMOTE AREA DELIVERY</GlobalServiceName>
335
+ <LocalServiceTypeName>REMOTE AREA DELIVERY</LocalServiceTypeName>
336
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
337
+ <ChargeCodeType>SCH</ChargeCodeType>
338
+ <MrkSrvInd>N</MrkSrvInd>
339
+ </MrkSrv>
340
+ <MrkSrv>
341
+ <LocalServiceType>PA</LocalServiceType>
342
+ <GlobalServiceName>SHIPMENT PREPARATION</GlobalServiceName>
343
+ <LocalServiceTypeName>SHIPMENT PREPARATION</LocalServiceTypeName>
344
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
345
+ <ChargeCodeType>XCH</ChargeCodeType>
346
+ <MrkSrvInd>N</MrkSrvInd>
347
+ </MrkSrv>
348
+ <MrkSrv>
349
+ <LocalServiceType>PC</LocalServiceType>
350
+ <GlobalServiceName>SHIPMENT CONSOLIDATION</GlobalServiceName>
351
+ <LocalServiceTypeName>SHIPMENT CONSOLIDATION</LocalServiceTypeName>
352
+ <SOfferedCustAgreement>Y</SOfferedCustAgreement>
353
+ <ChargeCodeType>XCH</ChargeCodeType>
354
+ <MrkSrvInd>N</MrkSrvInd>
355
+ </MrkSrv>
356
+ <MrkSrv>
357
+ <LocalServiceType>PX</LocalServiceType>
358
+ <GlobalServiceName>STANDARD PICKUP</GlobalServiceName>
359
+ <LocalServiceTypeName>NON STANDARD PICKUP</LocalServiceTypeName>
360
+ <SOfferedCustAgreement>Y</SOfferedCustAgreement>
361
+ <ChargeCodeType>INC</ChargeCodeType>
362
+ <MrkSrvInd>N</MrkSrvInd>
363
+ </MrkSrv>
364
+ <MrkSrv>
365
+ <LocalServiceType>QA</LocalServiceType>
366
+ <GlobalServiceName>DEDICATED PICKUP</GlobalServiceName>
367
+ <LocalServiceTypeName>DEDICATED PICKUP</LocalServiceTypeName>
368
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
369
+ <ChargeCodeType>XCH</ChargeCodeType>
370
+ <MrkSrvInd>Y</MrkSrvInd>
371
+ </MrkSrv>
372
+ <MrkSrv>
373
+ <LocalServiceType>SA</LocalServiceType>
374
+ <GlobalServiceName>DELIVERY SIGNATURE</GlobalServiceName>
375
+ <LocalServiceTypeName>DELIVERY SIGNATURE</LocalServiceTypeName>
376
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
377
+ <ChargeCodeType>XCH</ChargeCodeType>
378
+ <MrkSrvInd>Y</MrkSrvInd>
379
+ </MrkSrv>
380
+ <MrkSrv>
381
+ <LocalServiceType>TA</LocalServiceType>
382
+ <GlobalServiceName>DEDICATED DELIVERY</GlobalServiceName>
383
+ <LocalServiceTypeName>DEDICATED DELIVERY</LocalServiceTypeName>
384
+ <SOfferedCustAgreement>N</SOfferedCustAgreement>
385
+ <ChargeCodeType>XCH</ChargeCodeType>
386
+ <MrkSrvInd>Y</MrkSrvInd>
387
+ </MrkSrv>
388
+ <SBTP>
389
+ <Prod>
390
+ <VldSrvComb>
391
+ <SpecialServiceType>AB</SpecialServiceType>
392
+ <LocalServiceType>AB</LocalServiceType>
393
+ <CombRSrv>
394
+ <RestrictedSpecialServiceType/>
395
+ <RestrictedLocalServiceType/>
396
+ </CombRSrv>
397
+ </VldSrvComb>
398
+ <VldSrvComb>
399
+ <SpecialServiceType>AD</SpecialServiceType>
400
+ <LocalServiceType>AD</LocalServiceType>
401
+ <CombRSrv>
402
+ <RestrictedSpecialServiceType/>
403
+ <RestrictedLocalServiceType/>
404
+ </CombRSrv>
405
+ </VldSrvComb>
406
+ <VldSrvComb>
407
+ <SpecialServiceType>FF</SpecialServiceType>
408
+ <LocalServiceType>FF</LocalServiceType>
409
+ <CombRSrv>
410
+ <RestrictedSpecialServiceType/>
411
+ <RestrictedLocalServiceType/>
412
+ </CombRSrv>
413
+ </VldSrvComb>
414
+ <VldSrvComb>
415
+ <SpecialServiceType>GG</SpecialServiceType>
416
+ <LocalServiceType>GG</LocalServiceType>
417
+ <CombRSrv>
418
+ <RestrictedSpecialServiceType/>
419
+ <RestrictedLocalServiceType/>
420
+ </CombRSrv>
421
+ </VldSrvComb>
422
+ <VldSrvComb>
423
+ <SpecialServiceType>II</SpecialServiceType>
424
+ <LocalServiceType>II</LocalServiceType>
425
+ <CombRSrv>
426
+ <RestrictedSpecialServiceType/>
427
+ <RestrictedLocalServiceType/>
428
+ </CombRSrv>
429
+ </VldSrvComb>
430
+ <VldSrvComb>
431
+ <SpecialServiceType>JA</SpecialServiceType>
432
+ <LocalServiceType>JA</LocalServiceType>
433
+ <CombRSrv>
434
+ <RestrictedSpecialServiceType/>
435
+ <RestrictedLocalServiceType/>
436
+ </CombRSrv>
437
+ </VldSrvComb>
438
+ <VldSrvComb>
439
+ <SpecialServiceType>OB</SpecialServiceType>
440
+ <LocalServiceType>OB</LocalServiceType>
441
+ <CombRSrv>
442
+ <RestrictedSpecialServiceType/>
443
+ <RestrictedLocalServiceType/>
444
+ </CombRSrv>
445
+ </VldSrvComb>
446
+ <VldSrvComb>
447
+ <SpecialServiceType>OO</SpecialServiceType>
448
+ <LocalServiceType>OO</LocalServiceType>
449
+ <CombRSrv>
450
+ <RestrictedSpecialServiceType/>
451
+ <RestrictedLocalServiceType/>
452
+ </CombRSrv>
453
+ </VldSrvComb>
454
+ <VldSrvComb>
455
+ <SpecialServiceType>PA</SpecialServiceType>
456
+ <LocalServiceType>PA</LocalServiceType>
457
+ <CombRSrv>
458
+ <RestrictedSpecialServiceType/>
459
+ <RestrictedLocalServiceType/>
460
+ </CombRSrv>
461
+ </VldSrvComb>
462
+ <VldSrvComb>
463
+ <SpecialServiceType>PC</SpecialServiceType>
464
+ <LocalServiceType>PC</LocalServiceType>
465
+ <CombRSrv>
466
+ <RestrictedSpecialServiceType/>
467
+ <RestrictedLocalServiceType/>
468
+ </CombRSrv>
469
+ </VldSrvComb>
470
+ <VldSrvComb>
471
+ <SpecialServiceType>PX</SpecialServiceType>
472
+ <LocalServiceType>PX</LocalServiceType>
473
+ <CombRSrv>
474
+ <RestrictedSpecialServiceType/>
475
+ <RestrictedLocalServiceType/>
476
+ </CombRSrv>
477
+ </VldSrvComb>
478
+ <VldSrvComb>
479
+ <SpecialServiceType>QA</SpecialServiceType>
480
+ <LocalServiceType>QA</LocalServiceType>
481
+ <CombRSrv>
482
+ <RestrictedSpecialServiceType/>
483
+ <RestrictedLocalServiceType/>
484
+ </CombRSrv>
485
+ </VldSrvComb>
486
+ <VldSrvComb>
487
+ <SpecialServiceType>SA</SpecialServiceType>
488
+ <LocalServiceType>SA</LocalServiceType>
489
+ <CombRSrv>
490
+ <RestrictedSpecialServiceType/>
491
+ <RestrictedLocalServiceType/>
492
+ </CombRSrv>
493
+ </VldSrvComb>
494
+ <VldSrvComb>
495
+ <SpecialServiceType>TA</SpecialServiceType>
496
+ <LocalServiceType>TA</LocalServiceType>
497
+ <CombRSrv>
498
+ <RestrictedSpecialServiceType/>
499
+ <RestrictedLocalServiceType/>
500
+ </CombRSrv>
501
+ </VldSrvComb>
502
+ </Prod>
503
+ </SBTP>
504
+ </Srv>
505
+ </Srvs>
506
+ </GetQuoteResponse>
507
+ </res:DCTResponse>'
508
+ end