dhl-get_quote 0.4.25

Sign up to get free protection for your applications and to get access to all the features.
@@ -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