Skip to content
This repository was archived by the owner on Oct 24, 2023. It is now read-only.

Commit 6f35c31

Browse files
author
Jens Schulze
committed
feat(Order): support parcel delivery items
Closes #357
1 parent e9b95f1 commit 6f35c31

File tree

5 files changed

+127
-2
lines changed

5 files changed

+127
-2
lines changed

src/Core/Model/Order/Parcel.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
* @method Parcel setMeasurements(ParcelMeasurements $measurements = null)
2121
* @method TrackingData getTrackingData()
2222
* @method Parcel setTrackingData(TrackingData $trackingData = null)
23+
* @method DeliveryItemCollection getItems()
24+
* @method Parcel setItems(DeliveryItemCollection $items = null)
2325
*/
2426
class Parcel extends JsonObject
2527
{
@@ -33,6 +35,7 @@ public function fieldDefinitions()
3335
],
3436
'measurements' => [static::TYPE => ParcelMeasurements::class],
3537
'trackingData' => [static::TYPE => TrackingData::class],
38+
'items' => [static::TYPE => DeliveryItemCollection::class],
3639
];
3740
}
3841
}

src/Core/Request/Orders/Command/OrderAddParcelToDeliveryAction.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Commercetools\Core\Request\Orders\Command;
77

88
use Commercetools\Core\Model\Common\Context;
9+
use Commercetools\Core\Model\Order\DeliveryItemCollection;
910
use Commercetools\Core\Model\Order\ParcelMeasurements;
1011
use Commercetools\Core\Model\Order\TrackingData;
1112
use Commercetools\Core\Request\AbstractAction;
@@ -21,6 +22,8 @@
2122
* @method OrderAddParcelToDeliveryAction setMeasurements(ParcelMeasurements $measurements = null)
2223
* @method TrackingData getTrackingData()
2324
* @method OrderAddParcelToDeliveryAction setTrackingData(TrackingData $trackingData = null)
25+
* @method DeliveryItemCollection getItems()
26+
* @method OrderAddParcelToDeliveryAction setItems(DeliveryItemCollection $items = null)
2427
*/
2528
class OrderAddParcelToDeliveryAction extends AbstractAction
2629
{
@@ -30,7 +33,8 @@ public function fieldDefinitions()
3033
'action' => [static::TYPE => 'string'],
3134
'deliveryId' => [static::TYPE => 'string'],
3235
'measurements' => [static::TYPE => ParcelMeasurements::class],
33-
'trackingData' => [static::TYPE => TrackingData::class]
36+
'trackingData' => [static::TYPE => TrackingData::class],
37+
'items' => [static::TYPE => DeliveryItemCollection::class],
3438
];
3539
}
3640

tests/fixtures/models.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ parcel:
429429
- createdAt
430430
- measurements
431431
- trackingData
432+
- items
432433

433434
parcelMeasurements:
434435
domain: order

tests/integration/Order/OrderUpdateRequestTest.php

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,22 @@
77

88
use Commercetools\Core\ApiTestCase;
99
use Commercetools\Core\Model\Cart\CartDraft;
10+
use Commercetools\Core\Model\Cart\CustomLineItemDraft;
11+
use Commercetools\Core\Model\Cart\CustomLineItemDraftCollection;
1012
use Commercetools\Core\Model\Cart\LineItemDraft;
1113
use Commercetools\Core\Model\Cart\LineItemDraftCollection;
1214
use Commercetools\Core\Model\Common\Address;
15+
use Commercetools\Core\Model\Common\LocalizedString;
16+
use Commercetools\Core\Model\Common\Money;
17+
use Commercetools\Core\Model\Common\PriceDraft;
18+
use Commercetools\Core\Model\Common\PriceDraftCollection;
1319
use Commercetools\Core\Model\Customer\Customer;
1420
use Commercetools\Core\Model\Order\DeliveryItem;
1521
use Commercetools\Core\Model\Order\DeliveryItemCollection;
1622
use Commercetools\Core\Model\Order\Order;
1723
use Commercetools\Core\Model\Order\OrderState;
24+
use Commercetools\Core\Model\Order\Parcel;
25+
use Commercetools\Core\Model\Order\ParcelCollection;
1826
use Commercetools\Core\Model\Order\ParcelMeasurements;
1927
use Commercetools\Core\Model\Order\PaymentState;
2028
use Commercetools\Core\Model\Order\ReturnItem;
@@ -23,6 +31,8 @@
2331
use Commercetools\Core\Model\Order\ReturnShipmentState;
2432
use Commercetools\Core\Model\Order\ShipmentState;
2533
use Commercetools\Core\Model\Order\TrackingData;
34+
use Commercetools\Core\Model\Product\ProductDraft;
35+
use Commercetools\Core\Model\Product\ProductVariantDraft;
2636
use Commercetools\Core\Request\Carts\CartByIdGetRequest;
2737
use Commercetools\Core\Request\Carts\CartCreateRequest;
2838
use Commercetools\Core\Request\Carts\CartDeleteRequest;
@@ -45,6 +55,11 @@
4555
use Commercetools\Core\Request\Orders\OrderCreateFromCartRequest;
4656
use Commercetools\Core\Request\Orders\OrderDeleteRequest;
4757
use Commercetools\Core\Request\Orders\OrderUpdateRequest;
58+
use Commercetools\Core\Request\Products\Command\ProductPublishAction;
59+
use Commercetools\Core\Request\Products\Command\ProductUnpublishAction;
60+
use Commercetools\Core\Request\Products\ProductCreateRequest;
61+
use Commercetools\Core\Request\Products\ProductDeleteRequest;
62+
use Commercetools\Core\Request\Products\ProductUpdateRequest;
4863

4964
class OrderUpdateRequestTest extends ApiTestCase
5065
{
@@ -304,6 +319,11 @@ public function testAddDelivery()
304319
->setProviderTransaction('abcdef')
305320
->setIsReturn(false)
306321
)
322+
->setItems(
323+
DeliveryItemCollection::of()->add(
324+
DeliveryItem::of()->setId($lineItem->getId())->setQuantity(3)
325+
)
326+
)
307327
)
308328
;
309329
$response = $request->executeWithClient($this->getClient());
@@ -468,4 +488,101 @@ public function testSetBillingAddress()
468488
$this->assertInstanceOf(Order::class, $order);
469489
$this->assertNotSame($draft->getBillingAddress()->getFirstName(), $order->getBillingAddress()->getFirstName());
470490
}
491+
492+
public function testAddDeliveryWithParcel()
493+
{
494+
$taxCategory = $this->getTaxCategory();
495+
$cartDraft = $this->getCartDraft();
496+
497+
$product2 = ProductDraft::ofTypeNameAndSlug(
498+
$this->getProductType()->getReference(),
499+
LocalizedString::ofLangAndText('en', 'test-' . $this->getTestRun() . '-product2'),
500+
LocalizedString::ofLangAndText('en', 'test-' . $this->getTestRun() . '-product2')
501+
)
502+
->setMasterVariant(
503+
ProductVariantDraft::of()->setSku('test-' . $this->getTestRun() . '-sku2')
504+
->setPrices(
505+
PriceDraftCollection::of()->add(
506+
PriceDraft::ofMoney(Money::ofCurrencyAndAmount('EUR', 100))
507+
->setCountry('DE')
508+
)
509+
)
510+
)
511+
->setTaxCategory($this->getTaxCategory()->getReference())
512+
->setPublish(true)
513+
;
514+
515+
$request = ProductCreateRequest::ofDraft($product2);
516+
$response = $request->executeWithClient($this->getClient());
517+
$product2 = $request->mapResponse($response);
518+
519+
$cartDraft->getLineItems()->add(LineItemDraft::ofSku($product2->getMasterData()->getCurrent()->getMasterVariant()->getSku())->setQuantity(1));
520+
521+
$cartDraft->setCustomLineItems(
522+
CustomLineItemDraftCollection::of()->add(
523+
CustomLineItemDraft::of()
524+
->setName(LocalizedString::ofLangAndText('en', 'test'))
525+
->setSlug('test')
526+
->setQuantity(1)
527+
->setMoney(Money::ofCurrencyAndAmount('EUR', 100))
528+
->setTaxCategory($taxCategory->getReference())
529+
)
530+
);
531+
$order = $this->createOrder($cartDraft);
532+
533+
$lineItem = $order->getLineItems()->getAt(0);
534+
$lineItem2 = $order->getLineItems()->getAt(1);
535+
$customLineItem = $order->getCustomLineItems()->current();
536+
$request = OrderUpdateRequest::ofIdAndVersion($order->getId(), $order->getVersion())
537+
->addAction(
538+
OrderAddDeliveryAction::ofDeliveryItems(
539+
DeliveryItemCollection::of()->add(
540+
DeliveryItem::of()
541+
->setQuantity(2)
542+
->setId($lineItem->getId())
543+
)
544+
)
545+
->setParcels(
546+
ParcelCollection::of()->add(
547+
Parcel::of()->setItems(
548+
DeliveryItemCollection::of()->add(
549+
DeliveryItem::of()
550+
->setId($lineItem->getId())
551+
->setQuantity(2)
552+
)->add(
553+
DeliveryItem::of()
554+
->setId($customLineItem->getId())
555+
->setQuantity(1)
556+
)->add(
557+
DeliveryItem::of()
558+
->setId($lineItem2->getId())
559+
->setQuantity(10)
560+
)
561+
)
562+
)
563+
)
564+
)
565+
;
566+
$response = $request->executeWithClient($this->getClient());
567+
$order = $request->mapFromResponse($response);
568+
$this->deleteRequest->setVersion($order->getVersion());
569+
570+
$this->assertCount(
571+
3,
572+
$order->getShippingInfo()->getDeliveries()->current()->getParcels()->current()->getItems()
573+
);
574+
575+
576+
$request = ProductUpdateRequest::ofIdAndVersion($product2->getId(), $product2->getVersion())
577+
->addAction(ProductUnpublishAction::of());
578+
$response = $request->executeWithClient($this->getClient());
579+
$product2 = $request->mapResponse($response);
580+
581+
$request = ProductDeleteRequest::ofIdAndVersion(
582+
$product2->getId(),
583+
$product2->getVersion()
584+
);
585+
$request->executeWithClient($this->getClient());
586+
587+
}
471588
}

tests/unit/Request/GenericActionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ public function actionFieldProvider()
438438
],
439439
[
440440
OrderAddParcelToDeliveryAction::class,
441-
['action', 'deliveryId', 'measurements', 'trackingData']
441+
['action', 'deliveryId', 'measurements', 'trackingData', 'items']
442442
],
443443
[
444444
OrderAddReturnInfoAction::class,

0 commit comments

Comments
 (0)