Skip to content

Commit 30b9a6e

Browse files
committed
v1.0.51
1 parent bfe06b9 commit 30b9a6e

4 files changed

Lines changed: 70 additions & 45 deletions

File tree

Model/Service/Logic/Shipment.php

Lines changed: 64 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,18 @@ class Shipment
4242
protected $capabilityService;
4343

4444
public function __construct(
45-
Connector $connector,
46-
PieceFactory $pieceFactory,
47-
UUIDFactory $uuidFactory,
48-
ShipmentRequestFactory $shipmentRequestFactory,
49-
AddresseeFactory $addresseeFactory,
50-
OptionFactory $optionFactory,
51-
ShipmentResponseFactory $shipmentResponseFactory,
52-
PieceResource $pieceResource,
45+
Connector $connector,
46+
PieceFactory $pieceFactory,
47+
UUIDFactory $uuidFactory,
48+
ShipmentRequestFactory $shipmentRequestFactory,
49+
AddresseeFactory $addresseeFactory,
50+
OptionFactory $optionFactory,
51+
ShipmentResponseFactory $shipmentResponseFactory,
52+
PieceResource $pieceResource,
5353
OrderRepositoryInterface $orderRepository,
54-
TrackFactory $trackFactory,
55-
Data $helper,
56-
Capability $capabilityService
54+
TrackFactory $trackFactory,
55+
Data $helper,
56+
Capability $capabilityService
5757
) {
5858
$this->connector = $connector;
5959
$this->pieceFactory = $pieceFactory;
@@ -142,7 +142,7 @@ public function getReturnRequestData($storeId, ShipmentRequest $shipmentRequest)
142142
);
143143

144144
// Return labels are at least DOOR
145-
$options = [ $this->optionFactory->create(['automap' => ['key' => 'DOOR']])];
145+
$options = [$this->optionFactory->create(['automap' => ['key' => 'DOOR']])];
146146
$copyOptions = ['REFERENCE', 'REFERENCE2'];
147147

148148
foreach ($shipmentRequest->options as $option) {
@@ -189,19 +189,19 @@ public function sendRequest(ShipmentRequest $shipmentRequest)
189189
public function fakeRequest($shipmentRequest)
190190
{
191191
$response = [
192-
'shipmentId' => $shipmentRequest->shipmentId,
193-
'product' => 'DFY-B2C',
194-
'pieces' => array(array(
195-
'labelId' => uniqid('TEST-LABEL-ID-'),
196-
'trackerCode' => 'JVGL0' . rand(100000000000000000, 999999999999999999),
197-
'parcelType' => 'SMALL',
198-
'pieceNumber' => 1,
199-
'labelType' => 'B2X_Generic_A4_Third'
200-
)),
192+
'shipmentId' => $shipmentRequest->shipmentId,
193+
'product' => 'DFY-B2C',
194+
'pieces' => array(array(
195+
'labelId' => uniqid('TEST-LABEL-ID-'),
196+
'trackerCode' => 'JVGL0' . rand(100000000000000000, 999999999999999999),
197+
'parcelType' => 'SMALL',
198+
'pieceNumber' => 1,
199+
'labelType' => 'B2X_Generic_A4_Third'
200+
)),
201201
'orderReference' => $shipmentRequest->orderReference,
202-
'deliveryArea' => [
202+
'deliveryArea' => [
203203
'remote' => false,
204-
'type' => 'NonRemote'
204+
'type' => 'NonRemote'
205205
]
206206
];
207207

@@ -233,16 +233,16 @@ public function createTracks($pieceResponses, $isReturn = false)
233233
/** @var Piece $piece */
234234
$piece = $this->pieceFactory->create();
235235
$piece->addData([
236-
'label_id' => $pieceResponse->labelId,
237-
'tracker_code' => $pieceResponse->trackerCode,
238-
'postal_code' => $pieceResponse->postalCode,
239-
'parcel_type' => $pieceResponse->parcelType,
240-
'piece_number' => $pieceResponse->pieceNumber,
241-
'label_type' => $pieceResponse->labelType,
242-
'is_return' => $isReturn,
243-
'shipment_request' => $pieceResponse->shipmentRequest,
244-
'service_options' => $pieceResponse->serviceOptions,
245-
'country_code' => $pieceResponse->countryCode
236+
'label_id' => $pieceResponse->labelId,
237+
'tracker_code' => $pieceResponse->trackerCode,
238+
'postal_code' => $pieceResponse->postalCode,
239+
'parcel_type' => $pieceResponse->parcelType,
240+
'piece_number' => $pieceResponse->pieceNumber,
241+
'label_type' => $pieceResponse->labelType,
242+
'is_return' => $isReturn,
243+
'shipment_request' => $pieceResponse->shipmentRequest,
244+
'service_options' => $pieceResponse->serviceOptions,
245+
'country_code' => $pieceResponse->countryCode
246246
]);
247247

248248
$this->pieceResource->save($piece);
@@ -276,6 +276,25 @@ public function addReference($shipmentRequest, $reference)
276276
return $shipmentRequest;
277277
}
278278

279+
/**
280+
* Check if an address string array, when joined, should be split into street, houseNumber and addition.
281+
* It should only be split if it starts or ends (but not both) with a digit. And only if the array contains only one number.
282+
*
283+
* @param array $strings
284+
* @return bool
285+
*/
286+
public function shouldSplitAddress(array $strings): bool
287+
{
288+
$joined = trim(implode(' ', $strings));
289+
preg_match_all('/\d+/', $joined, $numberMatches);
290+
291+
$hasExactlyOneNumber = count($numberMatches[0]) === 1;
292+
$hasNumberAtStart = preg_match('/^(\d+)\s+(.+)$/', $joined) === 1;
293+
$hasNumberAtEnd = preg_match('/^(.+?)\s+(\d+)$/', $joined) === 1;
294+
295+
return $hasExactlyOneNumber && ($hasNumberAtStart xor $hasNumberAtEnd);
296+
}
297+
279298
protected function tagShipmentRequest(ShipmentResponse $shipmentResponse, $shipmentRequest)
280299
{
281300
if ($this->helper->getConfigData('debug/enabled')
@@ -419,10 +438,16 @@ protected function updateAddressStreet(Address $address, array $street)
419438
{
420439
$fullStreet = implode(' ', $street);
421440

422-
$data = $this->parseStreetData($fullStreet);
423-
$address->street = $data['street'];
424-
$address->number = $data['number'];
425-
$address->addition = $data['addition'];
441+
if ($this->shouldSplitAddress($street)) {
442+
$data = $this->parseStreetData($fullStreet);
443+
$address->street = $data['street'];
444+
$address->number = $data['number'];
445+
$address->addition = $data['addition'];
446+
} else {
447+
$address->street = $fullStreet;
448+
$address->number = '';
449+
$address->addition = '';
450+
}
426451

427452
return $address;
428453
}
@@ -474,8 +499,8 @@ protected function parseStreetData($raw)
474499

475500
preg_match('/([^0-9]*)\s*(.*)/', trim($parsableStreet), $streetParts);
476501
$address = [
477-
'street' => isset($streetParts[1]) ? trim($streetParts[1]) : '',
478-
'number' => isset($streetParts[2]) ? trim($streetParts[2]) : '',
502+
'street' => isset($streetParts[1]) ? trim($streetParts[1]) : '',
503+
'number' => isset($streetParts[2]) ? trim($streetParts[2]) : '',
479504
'addition' => '',
480505
];
481506

Model/Service/Shipment.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class Shipment
2525

2626
public function __construct(
2727
\Magento\Sales\Api\ShipmentRepositoryInterface $shipmentRepository,
28-
ShipmentLogic $shipmentLogic,
29-
Data $helper
28+
ShipmentLogic $shipmentLogic,
29+
Data $helper
3030
) {
3131
$this->shipmentLogic = $shipmentLogic;
3232
$this->shipmentRepository = $shipmentRepository;
@@ -82,7 +82,6 @@ public function create($order, $options = [], $pieces = [], $isBusiness = false)
8282

8383
if ($returnEnabled) {
8484
$returnShipmentRequest = $this->shipmentLogic->getReturnRequestData($storeId, $shipmentRequest);
85-
$this->validateShipmentRequest($shipmentRequest);
8685
if ($this->helper->getConfigData('active') != YesNoTest::OPTION_TEST) {
8786
$returnShipmentResponse = $this->shipmentLogic->sendRequest($returnShipmentRequest);
8887
} else {
@@ -122,8 +121,9 @@ protected function validateShipmentRequest($shipmentRequest, $hideShipper = fals
122121
throw new LabelCreationException(__('Failed to create label, missing receiver street'));
123122
}
124123

124+
$shouldSplitAddress = $this->shipmentLogic->shouldSplitAddress([$shipmentRequest->receiver->address->street, $shipmentRequest->receiver->address->number, $shipmentRequest->receiver->address->addition]);
125125
$validateReceiverHousenumber = (bool) !in_array($shipmentRequest->receiver->address->countryCode, $disableHousenumberValidationCountries);
126-
if ($validateReceiverHousenumber && empty($shipmentRequest->receiver->address->number)) {
126+
if ($validateReceiverHousenumber && empty($shipmentRequest->receiver->address->number) && $shouldSplitAddress) {
127127
throw new LabelCreationException(__('Failed to create label, missing receiver street number'));
128128
}
129129

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "dhlparcel/magento2-plugin",
33
"description": "DHL Parcel plugin for Magento 2",
44
"type": "magento2-module",
5-
"version": "1.0.50",
5+
"version": "1.0.51",
66
"license": [
77
"OSL-3.0"
88
],

etc/module.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2020
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
21-
<module name="DHLParcel_Shipping" setup_version="1.0.50">
21+
<module name="DHLParcel_Shipping" setup_version="1.0.51">
2222
<sequence>
2323
<module name="Magento_Shipping"/>
2424
<module name="Magento_Checkout"/>

0 commit comments

Comments
 (0)