Passed
Push — master ( bada6f...d61b94 )
by Aimeos
04:42
created

OrderAddTestData::addOrderBaseData()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 33
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 21
nc 2
nop 3
dl 0
loc 33
c 0
b 0
f 0
cc 2
rs 9.584
1
<?php
2
3
/**
4
 * @license LGPLv3, https://opensource.org/licenses/LGPL-3.0
5
 * @copyright Metaways Infosystems GmbH, 2012
6
 * @copyright Aimeos (aimeos.org), 2015-2021
7
 */
8
9
10
namespace Aimeos\Upscheme\Task;
11
12
13
/**
14
 * Adds order test data.
15
 */
16
class OrderAddTestData extends Base
17
{
18
	/**
19
	 * Returns the list of task names which this task depends on.
20
	 *
21
	 * @return string[] List of task names
22
	 */
23
	public function after() : array
24
	{
25
		return ['CustomerAddTestData', 'ProductAddTestData', 'PluginAddTestData', 'ServiceAddTestData', 'StockAddTestData'];
26
	}
27
28
29
	/**
30
	 * Adds order test data.
31
	 */
32
	public function up()
33
	{
34
		$this->info( 'Adding order test data', 'v' );
35
		$this->context()->setEditor( 'core:lib/mshoplib' );
0 ignored issues
show
Bug introduced by
The method context() does not exist on Aimeos\Upscheme\Task\OrderAddTestData. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

35
		$this->/** @scrutinizer ignore-call */ 
36
         context()->setEditor( 'core:lib/mshoplib' );
Loading history...
36
37
		$localeManager = \Aimeos\MShop\Locale\Manager\Factory::create( $this->context(), 'Standard' );
38
		$orderManager = \Aimeos\MShop\Order\Manager\Factory::create( $this->context(), 'Standard' );
39
		$orderBaseManager = $orderManager->getSubManager( 'base' );
40
41
		$search = $orderBaseManager->filter();
42
		$search->setConditions( $search->compare( '==', 'order.base.sitecode', array( 'unittest', 'unit' ) ) );
43
44
		foreach( $orderBaseManager->search( $search ) as $order ) {
45
			$orderBaseManager->delete( $order->getId() );
46
		}
47
48
49
		$ds = DIRECTORY_SEPARATOR;
50
		$path = __DIR__ . $ds . 'data' . $ds . 'order.php';
51
52
		if( ( $testdata = include( $path ) ) == false ) {
53
			throw new \Aimeos\MShop\Exception( sprintf( 'No file "%1$s" found for order domain', $path ) );
54
		}
55
56
		$this->context()->setLocale( $this->context()->getLocale()->setCurrencyId( 'EUR' ) );
57
58
		$bases = $this->addOrderBaseData( $localeManager, $orderBaseManager, $testdata );
59
		$bases['items'] = $this->addOrderBaseProductData( $orderBaseManager, $bases, $testdata );
60
		$bases['items'] = $this->addOrderBaseServiceData( $orderBaseManager, $bases, $testdata );
61
62
		//update order bases (getPrice)
63
		foreach( $bases['items'] as $baseItem ) {
64
			$orderBaseManager->save( $baseItem, false );
65
		}
66
67
		$this->context()->setLocale( $this->context()->getLocale()->setCurrencyId( null ) );
68
69
		$this->addOrderBaseCouponData( $testdata );
70
		$this->addOrderData( $orderManager, $bases['ids'], $testdata );
71
	}
72
73
74
	/**
75
	 * Adds the required order base data.
76
	 *
77
	 * @param \Aimeos\MShop\Common\Manager\Iface $localeManager Locale manager
78
	 * @param \Aimeos\MShop\Common\Manager\Iface $orderBaseManager Order base manager
79
	 * @param array $testdata Associative list of key/list pairs
80
	 * @throws \Aimeos\MW\Setup\Exception If no type ID is found
81
	 */
82
	protected function addOrderBaseData( \Aimeos\MShop\Common\Manager\Iface $localeManager,
83
		\Aimeos\MShop\Common\Manager\Iface $orderBaseManager, array $testdata )
84
	{
85
		$bases = [];
86
		$locale = $localeManager->create();
87
		$customerIds = $this->getCustomerIds( $testdata );
88
		$orderBaseAddressManager = $orderBaseManager->getSubManager( 'address', 'Standard' );
89
90
		$orderBaseManager->begin();
91
92
		foreach( $testdata['order/base'] as $key => $dataset )
93
		{
94
			$bases['items'][$key] = $orderBaseManager->create();
95
			$bases['items'][$key]->setId( null );
96
			$bases['items'][$key]->setComment( $dataset['comment'] );
97
			$bases['items'][$key]->setCustomerReference( $dataset['customerref'] );
98
			$bases['items'][$key]->setCustomerId( $customerIds[$dataset['customerid']] );
99
100
			$locale->setId( null );
101
			$locale->setSiteId( $this->context()->getLocale()->getSiteId() );
102
			$locale->setLanguageId( $dataset['langid'] );
103
			$locale->setCurrencyId( $dataset['currencyid'] );
104
			$bases['items'][$key]->setLocale( $locale );
105
106
			$orderBaseManager->save( $bases['items'][$key] );
107
			$bases['ids'][$key] = $bases['items'][$key]->getId();
108
		}
109
110
		$this->addOrderBaseAddressData( $orderBaseAddressManager, $bases, $testdata );
111
112
		$orderBaseManager->commit();
113
114
		return $bases;
115
	}
116
117
118
	/**
119
	 * Adds the order address data.
120
	 *
121
	 * @param \Aimeos\MShop\Common\Manager\Iface $manager
122
	 * @param array $testdata
123
	 */
124
	protected function addOrderBaseAddressData( \Aimeos\MShop\Common\Manager\Iface $manager,
125
		array $bases, array $testdata )
126
	{
127
		$orderAddr = $manager->create();
128
129
		foreach( $testdata['order/base/address'] as $dataset )
130
		{
131
			if( !isset( $bases['ids'][$dataset['baseid']] ) ) {
132
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No base ID found for "%1$s"', $dataset['baseid'] ) );
0 ignored issues
show
Bug introduced by
The type Aimeos\MW\Setup\Exception was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
133
			}
134
135
			$orderAddr->setId( null );
136
			$orderAddr->setBaseId( $bases['ids'][$dataset['baseid']] );
137
			$orderAddr->setAddressId( ( $dataset['addrid'] ?? '' ) );
138
			$orderAddr->setType( $dataset['type'] );
139
			$orderAddr->setCompany( $dataset['company'] ?? '' );
140
			$orderAddr->setVatID( ( $dataset['vatid'] ?? '' ) );
141
			$orderAddr->setSalutation( $dataset['salutation'] );
142
			$orderAddr->setTitle( $dataset['title'] );
143
			$orderAddr->setFirstname( $dataset['firstname'] );
144
			$orderAddr->setLastname( $dataset['lastname'] );
145
			$orderAddr->setAddress1( $dataset['address1'] );
146
			$orderAddr->setAddress2( $dataset['address2'] );
147
			$orderAddr->setAddress3( $dataset['address3'] );
148
			$orderAddr->setPostal( $dataset['postal'] );
149
			$orderAddr->setCity( $dataset['city'] );
150
			$orderAddr->setState( $dataset['state'] );
151
			$orderAddr->setCountryId( $dataset['countryid'] );
152
			$orderAddr->setTelephone( $dataset['telephone'] );
153
			$orderAddr->setEmail( $dataset['email'] );
154
			$orderAddr->setTelefax( $dataset['telefax'] );
155
			$orderAddr->setWebsite( $dataset['website'] );
156
			$orderAddr->setLanguageId( $dataset['langid'] );
157
			$orderAddr->setLatitude( $dataset['latitude'] );
158
			$orderAddr->setLongitude( $dataset['longitude'] );
159
			$orderAddr->setBirthday( $dataset['birthday'] ?? null );
160
161
			$manager->save( $orderAddr, false );
162
		}
163
	}
164
165
166
	/**
167
	 * Adds the order coupon test data.
168
	 *
169
	 * @param array $testdata Associative list of key/list pairs
170
	 * @throws \Aimeos\MW\Setup\Exception If a required ID is not available
171
	 */
172
	private function addOrderBaseCouponData( array $testdata )
173
	{
174
		$order = \Aimeos\MShop\Order\Manager\Factory::create( $this->context(), 'Standard' );
175
		$orderBase = $order->getSubManager( 'base', 'Standard' );
176
		$orderBaseProd = $orderBase->getSubManager( 'product', 'Standard' );
177
		$orderBaseCoupon = $orderBase->getSubManager( 'coupon', 'Standard' );
178
179
		$orderBaseIds = [];
180
		$orderBasePrices = [];
181
		$ordProdIds = [];
182
		$prodcode = $quantity = $pos = [];
183
		foreach( $testdata['order/base/coupon'] as $key => $dataset ) {
184
			$exp = explode( '/', $dataset['ordprodid'] );
185
186
			if( count( $exp ) != 3 ) {
187
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'Some keys for ordprod are set wrong "%1$s"', $dataset ) );
188
			}
189
190
			$prodcode[$exp[0]] = $exp[0];
191
			$quantity[$exp[1]] = $exp[1];
192
			$pos[$exp[2]] = $exp[2];
193
194
			$orderBasePrices[$dataset['baseid']] = $dataset['baseid'];
195
		}
196
197
		$search = $orderBase->filter();
198
		$search->setConditions( $search->compare( '==', 'order.base.price', $orderBasePrices ) );
199
200
		foreach( $orderBase->search( $search ) as $orderBaseItem ) {
201
			$orderBaseIds[$orderBaseItem->getPrice()->getValue()] = $orderBaseItem->getId();
202
		}
203
204
205
		$search = $orderBaseProd->filter();
206
		$expr = array(
207
			$search->compare( '==', 'order.base.product.prodcode', $prodcode ),
208
			$search->compare( '==', 'order.base.product.quantity', $quantity ),
209
			$search->compare( '==', 'order.base.product.position', $pos ),
210
		);
211
		$search->setConditions( $search->and( $expr ) );
212
213
		foreach( $orderBaseProd->search( $search ) as $ordProd ) {
214
			$ordProdIds[$ordProd->getProductCode() . '/' . $ordProd->getQuantity() . '/' . $ordProd->getPosition()] = $ordProd->getId();
215
		}
216
217
		$orderCoupon = $orderBaseCoupon->create();
218
		foreach( $testdata['order/base/coupon'] as $key => $dataset )
219
		{
220
			if( !isset( $orderBaseIds[$dataset['baseid']] ) ) {
221
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No oder base ID found for "%1$s"', $dataset['baseid'] ) );
222
			}
223
224
			if( !isset( $ordProdIds[$dataset['ordprodid']] ) ) {
225
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No order base product ID found for "%1$s"', $dataset['ordprodid'] ) );
226
			}
227
228
			$orderCoupon->setId( null );
229
			$orderCoupon->setBaseId( $orderBaseIds[$dataset['baseid']] );
230
			$orderCoupon->setProductId( $ordProdIds[$dataset['ordprodid']] );
231
			$orderCoupon->setCode( $dataset['code'] );
232
233
			$orderBaseCoupon->save( $orderCoupon, false );
234
		}
235
	}
236
237
238
	/**
239
	 * Adds the required order base service data.
240
	 *
241
	 * @param \Aimeos\MShop\Common\Manager\Iface $orderBaseManager Order base manager
242
	 * @param array $bases Associative list of key/list pairs
243
	 * @param array $testdata Associative list of key/list pairs
244
	 * @return array Associative list of enhanced order base items
245
	 * @throws \Aimeos\MW\Setup\Exception If no type ID is found
246
	 */
247
	protected function addOrderBaseServiceData( \Aimeos\MShop\Common\Manager\Iface $orderBaseManager,
248
		array $bases, array $testdata )
249
	{
250
		$ordServices = [];
251
		$servIds = $this->getServiceIds( $testdata );
252
		$orderBaseServiceManager = $orderBaseManager->getSubManager( 'service', 'Standard' );
253
		$orderBaseServiceAttrManager = $orderBaseServiceManager->getSubManager( 'attribute', 'Standard' );
254
		$priceManager = \Aimeos\MShop::create( $this->context(), 'price' );
255
		$ordServ = $orderBaseServiceManager->create();
256
257
		$orderBaseManager->begin();
258
259
		foreach( $testdata['order/base/service'] as $key => $dataset )
260
		{
261
			if( !isset( $bases['ids'][$dataset['baseid']] ) ) {
262
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No base ID found for "%1$s" in order base serive data', $dataset['baseid'] ) );
263
			}
264
265
			if( !isset( $bases['items'][$dataset['baseid']] ) ) {
266
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No base Item found for "%1$s" in order base service data', $dataset['baseid'] ) );
267
			}
268
269
			$ordServ->setId( null );
270
			$ordServ->setBaseId( $bases['ids'][$dataset['baseid']] );
271
			$ordServ->setType( $dataset['type'] );
272
			$ordServ->setCode( $dataset['code'] );
273
			$ordServ->setName( $dataset['name'] );
274
			$ordServ->setMediaUrl( $dataset['mediaurl'] );
275
276
			if( isset( $dataset['servid'] ) ) {
277
				$ordServ->setServiceId( $servIds[$dataset['servid']] );
278
			}
279
280
			$priceItem = $priceManager->create();
281
			$priceItem->setCurrencyId( $dataset['currencyid'] );
282
			$priceItem->setValue( $dataset['price'] );
283
			$priceItem->setCosts( $dataset['shipping'] );
284
			$priceItem->setRebate( $dataset['rebate'] );
285
			$priceItem->setTaxRates( $dataset['taxrates'] );
286
			$ordServ->setPrice( $priceItem );
287
288
			$orderBaseServiceManager->save( $ordServ );
289
290
			$ordServices[$key] = $ordServ->getId();
291
			$bases['items'][$dataset['baseid']]->addService( $ordServ, $dataset['type'] ); //adds Services to orderbase
292
		}
293
294
		$this->addOrderBaseServiceAttributeData( $orderBaseServiceAttrManager, $testdata, $ordServices );
295
296
		$orderBaseManager->commit();
297
298
		return $bases['items'];
299
	}
300
301
302
	/**
303
	 * Adds the required order base product data.
304
	 *
305
	 * @param \Aimeos\MShop\Common\Manager\Iface $orderBaseManager Order Base Manager
306
	 * @param array $bases Associative list of key/list pairs
307
	 * @param array $testdata Associative list of key/list pairs
308
	 * @return array Enhanced list of order base items
309
	 * @throws \Aimeos\MW\Setup\Exception If no type ID is found
310
	 */
311
	protected function addOrderBaseProductData( \Aimeos\MShop\Common\Manager\Iface $orderBaseManager,
312
		array $bases, array $testdata )
313
	{
314
		$ordProds = [];
315
		$products = $this->getProductItems( $testdata );
316
		$orderBaseProductManager = $orderBaseManager->getSubManager( 'product', 'Standard' );
317
		$orderBaseProductAttrManager = $orderBaseProductManager->getSubManager( 'attribute', 'Standard' );
318
		$priceManager = \Aimeos\MShop::create( $this->context(), 'price' );
319
320
		$orderBaseManager->begin();
321
322
		foreach( $testdata['order/base/product'] as $key => $dataset )
323
		{
324
			if( !isset( $bases['ids'][$dataset['baseid']] ) ) {
325
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No base ID found for "%1$s" in order base product data', $dataset['baseid'] ) );
326
			}
327
328
			if( !isset( $bases['items'][$dataset['baseid']] ) ) {
329
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No base Item found for "%1$s" in order base product data', $dataset['baseid'] ) );
330
			}
331
332
			$ordProdItem = $orderBaseProductManager->create();
333
334
			$ordProdItem->setId( null );
335
			$ordProdItem->setBaseId( $bases['ids'][$dataset['baseid']] );
336
			$ordProdItem->setType( $dataset['type'] );
337
			$ordProdItem->setSupplierId( $dataset['supplierid'] );
338
			$ordProdItem->setSupplierName( $dataset['suppliername'] );
339
			$ordProdItem->setProductCode( $dataset['prodcode'] );
340
			$ordProdItem->setName( $dataset['name'] );
341
			$ordProdItem->setMediaUrl( $dataset['mediaurl'] );
342
			$ordProdItem->setQuantity( $dataset['amount'] );
343
			$ordProdItem->setFlags( $dataset['flags'] );
344
			$ordProdItem->setStatusPayment( $dataset['statuspayment'] ?? null );
345
			$ordProdItem->setStatus( $dataset['status'] ?? null );
346
			$ordProdItem->setPosition( $dataset['pos'] );
347
			$ordProdItem->setQuantityOpen( $dataset['qtyopen'] ?? 0 );
348
			$ordProdItem->setNotes( $dataset['notes'] ?? '' );
349
			$ordProdItem->setStockType( $dataset['stocktype'] ?? '' );
350
			$ordProdItem->setTimeFrame( $dataset['timeframe'] ?? '' );
351
352
			if( isset( $dataset['prodid'] ) ) {
353
				$ordProdItem->setProductId( $products[$dataset['prodid']]->getId() );
354
			}
355
356
			// product bundle related fields
357
			if( isset( $dataset['ordprodid'] ) ) {
358
				$ordProdItem->setOrderProductId( $ordProds[$dataset['ordprodid']] );
359
			}
360
361
			$priceItem = $priceManager->create();
362
			$priceItem->setCurrencyId( $dataset['currencyid'] );
363
			$priceItem->setValue( $dataset['price'] );
364
			$priceItem->setCosts( $dataset['shipping'] );
365
			$priceItem->setRebate( $dataset['rebate'] );
366
			$priceItem->setTaxRates( $dataset['taxrates'] );
367
			$ordProdItem->setPrice( $priceItem );
368
369
			$bases['items'][$dataset['baseid']]->addProduct( $ordProdItem, $dataset['pos'] ); //adds Products to orderbase
370
			$ordProds[$key] = $orderBaseProductManager->save( $ordProdItem )->getId();
371
		}
372
373
		$this->addOrderBaseProductAttributeData( $orderBaseProductAttrManager, $testdata, $ordProds, $products );
374
375
		$orderBaseManager->commit();
376
377
		return $bases['items'];
378
	}
379
380
381
	/**
382
	 * Adds the order product attribute test data.
383
	 *
384
	 * @param \Aimeos\MShop\Common\Manager\Iface $manager
385
	 * @param array $testdata
386
	 * @param array $ordProds
387
	 * @param \Aimeos\MShop\Product\Item\Iface[] $products
388
	 * @throws \Aimeos\MW\Setup\Exception
389
	 */
390
	protected function addOrderBaseProductAttributeData( \Aimeos\MShop\Common\Manager\Iface $manager,
391
		array $testdata, array $ordProds, array $products )
392
	{
393
		$attrCodes = [];
394
		$attributeManager = \Aimeos\MShop::create( $this->context(), 'attribute' );
395
		$attributes = $attributeManager->search( $attributeManager->filter() );
396
397
		foreach( $attributes as $attrItem ) {
398
			$attrCodes[$attrItem->getType()][] = $attrItem;
399
		}
400
401
		$ordProdAttr = $manager->create();
402
403
		foreach( $testdata['order/base/product/attr'] as $dataset )
404
		{
405
			if( !isset( $ordProds[$dataset['ordprodid']] ) ) {
406
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No order product ID found for "%1$s"', $dataset['ordprodid'] ) );
407
			}
408
409
			$ordProdAttr->setId( null );
410
			$ordProdAttr->setParentId( $ordProds[$dataset['ordprodid']] );
411
			$ordProdAttr->setCode( $dataset['code'] );
412
			$ordProdAttr->setValue( $dataset['value'] );
413
			$ordProdAttr->setName( $dataset['name'] );
414
			$ordProdAttr->setQuantity( $dataset['quantity'] );
415
416
			if( isset( $attrCodes[$dataset['code']] ) )
417
			{
418
				foreach( (array) $attrCodes[$dataset['code']] as $attrItem )
419
				{
420
					if( $attrItem->getCode() == $dataset['value'] ) {
421
						$ordProdAttr->setAttributeId( $attrItem->getId() );
422
					}
423
				}
424
			}
425
426
			if( isset( $dataset['type'] ) ) {
427
				$ordProdAttr->setType( $dataset['type'] );
428
			}
429
430
			$manager->save( $ordProdAttr, false );
431
		}
432
	}
433
434
435
	/**
436
	 * Adds the order service attributes.
437
	 *
438
	 * @param \Aimeos\MShop\Common\Manager\Iface $manager
439
	 * @param array $testdata
440
	 * @param array $ordServices
441
	 * @throws \Aimeos\MW\Setup\Exception
442
	 */
443
	protected function addOrderBaseServiceAttributeData( \Aimeos\MShop\Common\Manager\Iface $manager,
444
		array $testdata, array $ordServices )
445
	{
446
		$ordServAttr = $manager->create();
447
448
		foreach( $testdata['order/base/service/attr'] as $dataset )
449
		{
450
			if( !isset( $ordServices[$dataset['ordservid']] ) ) {
451
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No order service ID found for "%1$s"', $dataset['ordservid'] ) );
452
			}
453
454
			$ordServAttr->setId( null );
455
			$ordServAttr->setParentId( $ordServices[$dataset['ordservid']] );
456
			$ordServAttr->setCode( $dataset['code'] );
457
			$ordServAttr->setValue( $dataset['value'] );
458
			$ordServAttr->setName( $dataset['name'] );
459
			$ordServAttr->setType( $dataset['type'] );
460
			$ordServAttr->setQuantity( $dataset['quantity'] );
461
462
			if( isset( $dataset['attrid'] ) ) {
463
				$ordServAttr->setAttributeId( $dataset['attrid'] );
464
			}
465
466
			$manager->save( $ordServAttr, false );
467
		}
468
	}
469
470
471
	/**
472
	 * Adds the order test data.
473
	 *
474
	 * @param \Aimeos\MShop\Common\Manager\Iface $orderManager Order manager
475
	 * @param array $baseIds List of ids
476
	 * @param array $testdata Associative list of key/list pairs
477
	 * @throws \Aimeos\MW\Setup\Exception If no type ID is found
478
	 */
479
	protected function addOrderData( \Aimeos\MShop\Common\Manager\Iface $orderManager, array $baseIds, array $testdata )
480
	{
481
		$orderStatusManager = $orderManager->getSubManager( 'status', 'Standard' );
482
483
		$ords = [];
484
		$ordItem = $orderManager->create();
485
486
		$orderManager->begin();
487
488
		foreach( $testdata['order'] as $key => $dataset )
489
		{
490
			if( !isset( $baseIds[$dataset['baseid']] ) ) {
491
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No base ID found for "%1$s"', $dataset['baseid'] ) );
492
			}
493
494
			$ordItem->setId( null );
495
			$ordItem->setType( $dataset['type'] );
496
			$ordItem->setBaseId( $baseIds[$dataset['baseid']] );
497
			$ordItem->setStatusDelivery( $dataset['statusdelivery'] );
498
			$ordItem->setStatusPayment( $dataset['statuspayment'] );
499
			$ordItem->setDateDelivery( $dataset['datedelivery'] );
500
			$ordItem->setDatePayment( $dataset['datepayment'] );
501
			$ordItem->setRelatedId( $dataset['relatedid'] );
502
503
			$orderManager->save( $ordItem );
504
			$ords[$key] = $ordItem->getId();
505
		}
506
507
		$ordStat = $orderStatusManager->create();
508
		foreach( $testdata['order/status'] as $dataset )
509
		{
510
			if( !isset( $ords[$dataset['parentid']] ) ) {
511
				throw new \Aimeos\MW\Setup\Exception( sprintf( 'No order ID found for "%1$s"', $dataset['parentid'] ) );
512
			}
513
514
			$ordStat->setId( null );
515
			$ordStat->setParentId( $ords[$dataset['parentid']] );
516
			$ordStat->setType( $dataset['type'] );
517
			$ordStat->setValue( $dataset['value'] );
518
519
			$orderStatusManager->save( $ordStat, false );
520
		}
521
522
		$orderManager->commit();
523
	}
524
525
526
	/**
527
	 * Returns the customer IDs for the given test data.
528
	 *
529
	 * @param array $testdata Test data
530
	 * @return array Customer Ids
531
	 */
532
	protected function getCustomerIds( array $testdata )
533
	{
534
		$customercodes = $customerIds = [];
535
536
		foreach( $testdata['order/base'] as $key => $dataset ) {
537
			$customercodes[] = $dataset['customerid'];
538
		}
539
540
		$customerManager = \Aimeos\MShop::create( $this->context(), 'customer' );
541
		$search = $customerManager->filter();
542
		$search->setConditions( $search->compare( '==', 'customer.code', $customercodes ) );
543
544
		foreach( $customerManager->search( $search ) as $id => $customerItem ) {
545
			$customerIds[$customerItem->getCode()] = $id;
546
		}
547
548
		return $customerIds;
549
	}
550
551
552
	/**
553
	 * Returns the product items for the given test data.
554
	 *
555
	 * @param array $testdata Test data
556
	 * @return \Aimeos\MShop\Product\Item\Iface[] Product Items
557
	 */
558
	protected function getProductItems( array $testdata )
559
	{
560
		$codes = $items = [];
561
		$productManager = \Aimeos\MShop::create( $this->context(), 'product' );
562
563
		foreach( $testdata['order/base/product'] as $key => $dataset )
564
		{
565
			if( isset( $dataset['prodid'] ) ) {
566
				$codes[$key] = $dataset['prodid'];
567
			}
568
		}
569
570
		$search = $productManager->filter();
571
		$search->setConditions( $search->compare( '==', 'product.code', $codes ) );
572
		$result = $productManager->search( $search );
573
574
		foreach( $result as $item ) {
575
			$items[$item->getCode()] = $item;
576
		}
577
578
		return $items;
579
	}
580
581
582
	/**
583
	 * Returns the service item IDs for the given test data.
584
	 *
585
	 * @param array $testdata Test data
586
	 * @return array List of service IDs
587
	 */
588
	protected function getServiceIds( array $testdata )
589
	{
590
		$services = $servIds = [];
591
		$serviceManager = \Aimeos\MShop::create( $this->context(), 'service' );
592
593
		foreach( $testdata['order/base/service'] as $key => $dataset )
594
		{
595
			if( isset( $dataset['servid'] ) ) {
596
				$services[$key] = $dataset['servid'];
597
			}
598
		}
599
600
		$search = $serviceManager->filter();
601
		$search->setConditions( $search->compare( '==', 'service.code', $services ) );
602
		$servicesResult = $serviceManager->search( $search );
603
604
		foreach( $servicesResult as $id => $service ) {
605
			$servIds[$service->getCode()] = $id;
606
		}
607
608
		return $servIds;
609
	}
610
}
611