Neuer schlanker DHL-Info-Button (getDhlShippingButton) in den Order- und Shop-Sales-Datatables, oeffnet ein Read-only-Modal (modal_dhl_shipping_info) mit den Tracking-Daten; dhlShipments wird dafuer eager geladen. Absenderadresse in config/dhl.php aktualisiert, plus kleinere Fixes in DhlShipmentController/Service/DataHelper und CreateReturnLabelJob. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
111 lines
3.1 KiB
PHP
111 lines
3.1 KiB
PHP
<?php
|
|
|
|
use App\Models\ShoppingOrder;
|
|
use App\Services\DhlDataHelper;
|
|
|
|
function dhlReferenceOrder(): ShoppingOrder
|
|
{
|
|
$order = new ShoppingOrder;
|
|
$order->id = 98765;
|
|
|
|
return $order;
|
|
}
|
|
|
|
function dhlReferenceOptions(array $overrides = []): array
|
|
{
|
|
return array_merge([
|
|
'product_code' => 'V01PAK',
|
|
'shipping_address' => [
|
|
'firstname' => 'Max',
|
|
'lastname' => 'Mustermann',
|
|
'company' => '',
|
|
'address' => 'Hauptstrasse',
|
|
'houseNumber' => '5',
|
|
'zipcode' => '10115',
|
|
'city' => 'Berlin',
|
|
'country' => (object) ['code' => 'DE'],
|
|
'email' => 'max@example.com',
|
|
'phone' => '+4930123456',
|
|
'postnumber' => null,
|
|
],
|
|
], $overrides);
|
|
}
|
|
|
|
function dhlReferenceConfig(): array
|
|
{
|
|
return [
|
|
'default_product' => 'V01PAK',
|
|
'label_format' => 'PDF',
|
|
'dimensions' => [
|
|
'V01PAK' => ['length' => 30, 'width' => 20, 'height' => 10],
|
|
'default' => ['length' => 30, 'width' => 20, 'height' => 10],
|
|
],
|
|
'sender' => [
|
|
'company' => 'mivita care gmbh',
|
|
'name' => '',
|
|
'street' => 'Waldstr.',
|
|
'houseNumber' => '3e',
|
|
'postalCode' => '86498',
|
|
'city' => 'Kettershausen',
|
|
'country' => 'DE',
|
|
'email' => 'versand@example.com',
|
|
'phone' => '+4987654321',
|
|
],
|
|
];
|
|
}
|
|
|
|
it('uses the admin shipment reference for DHL order data', function () {
|
|
$orderData = DhlDataHelper::prepareOrderData(
|
|
dhlReferenceOrder(),
|
|
1.2,
|
|
dhlReferenceOptions(['reference' => 'Nachlieferung Mai']),
|
|
dhlReferenceConfig()
|
|
);
|
|
|
|
expect($orderData['reference'])->toBe('Nachlieferung Mai');
|
|
});
|
|
|
|
it('falls back to the order reference when no admin reference is given', function () {
|
|
$orderData = DhlDataHelper::prepareOrderData(
|
|
dhlReferenceOrder(),
|
|
1.2,
|
|
dhlReferenceOptions(['reference' => '']),
|
|
dhlReferenceConfig()
|
|
);
|
|
|
|
expect($orderData['reference'])->toBe('Order-98765');
|
|
});
|
|
|
|
it('normalizes the DHL reference to the API length limit', function () {
|
|
$orderData = DhlDataHelper::prepareOrderData(
|
|
dhlReferenceOrder(),
|
|
1.2,
|
|
dhlReferenceOptions(['reference' => 'Sehr lange interne Referenz fuer DHL Label Nachlieferung']),
|
|
dhlReferenceConfig()
|
|
);
|
|
|
|
expect(strlen($orderData['reference']))->toBe(35)
|
|
->and($orderData['reference'])->toBe('Sehr lange interne Referenz fuer DH');
|
|
});
|
|
|
|
it('uses the sender house number from DHL config', function () {
|
|
$orderData = DhlDataHelper::prepareOrderData(
|
|
dhlReferenceOrder(),
|
|
1.2,
|
|
dhlReferenceOptions(),
|
|
dhlReferenceConfig()
|
|
);
|
|
|
|
expect($orderData['shipper']['houseNumber'])->toBe('3e');
|
|
});
|
|
|
|
it('passes the DHL mustEncode option into order data', function () {
|
|
$orderData = DhlDataHelper::prepareOrderData(
|
|
dhlReferenceOrder(),
|
|
1.2,
|
|
dhlReferenceOptions(['print_only_if_codeable' => false]),
|
|
dhlReferenceConfig()
|
|
);
|
|
|
|
expect($orderData['print_only_if_codeable'])->toBeFalse();
|
|
});
|