Skip to content

Shipment API

To get shipments and manage them, use the Ibexa\Contracts\Shipping\ShipmentServiceInterface interface.

From the developer's perspective, shipments are referenced with a UUID identifier.

Get single shipment

Get single shipment by identifier

To access a single shipment by using its string identifier, use the ShipmentService::getShipmentByIdentifier method:

1
2
3
4
5
6
7
8
9
$identifier = '4ac4b8a0-eed8-496d-87d9-32a960a10629';
$shipment = $this->shipmentService->getShipmentByIdentifier($identifier);

$output->writeln(
    sprintf(
        'Your shipment has status %s',
        $shipment->getStatus()
    )
);

Get single shipment by id

To access a single shipment by using its numerical id, use the ShipmentService::getShipment method:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$id = 1;
$shipment = $this->shipmentService->getShipment($id);

$output->writeln(
    sprintf(
        'Shipment %d has status %s',
        $id,
        $shipment->getStatus()
    )
);

Get multiple shipments

To fetch multiple shipments, use the ShipmentService::findShipments method. It follows the same search query pattern as other APIs:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
$shipmentCriteria = [
    new ShippingMethod($this->shippingMethodService->getShippingMethod('free')),
    new CreatedAt(new \DateTime('2023-03-24 15:09:16')),
    new UpdatedAt(new \DateTime('2023-03-25 09:00:15')),
];

$shipmentQuery = new ShipmentQuery(new LogicalOr(...$shipmentCriteria));
$shipmentQuery->setLimit(20);

$shipmentsList = $this->shipmentService->findShipments($shipmentQuery);

$shipmentsList->getShipments();
$shipmentsList->getTotalCount();

foreach ($shipmentsList as $shipment) {
    $output->writeln(
        $shipment->getIdentifier() . ': ' . $shipment->getStatus()
    );
}

Create shipment

To create a shipment, use the ShipmentService::createShipment method and provide it with an Ibexa\Contracts\Shipping\Value\ShipmentCreateStruct object that takes two parameters, a shippingMethod string and a Money object.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$shipmentCreateStruct = new ShipmentCreateStruct(
    $this->shippingMethodService->getShippingMethod('free'),
    $this->orderService->getOrder(135),
    new Money\Money(100, new Money\Currency('EUR'))
);

$shipment = $this->shipmentService->createShipment($shipmentCreateStruct);

$output->writeln(
    sprintf(
        'Created shipment with identifier %s',
        $shipment->getIdentifier()
    )
);

Update shipment

You can update the shipment after it's created. You could do it to support a scenario when, for example, the shipment is processed offline and its status has to be updated in the system. To update shipment information, use the ShipmentService::updateShipment method:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$shipmentUpdateStruct = new ShipmentUpdateStruct();
$shipmentUpdateStruct->setTransition('send');

$this->shipmentService->updateShipment($shipment, $shipmentUpdateStruct);

$output->writeln(
    sprintf(
        'Changed shipment status to %s',
        $shipment->getStatus()
    )
);

Delete shipment

To delete a shipment from the system, use the ShipmentService::deleteShipment method:

1
$this->shipmentService->deleteShipment($shipment);