Skip to content

Commit bfe06b9

Browse files
committed
v1.0.50
1 parent d929411 commit bfe06b9

10 files changed

Lines changed: 181 additions & 11 deletions

File tree

Model/Carrier.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Carrier extends \Magento\Shipping\Model\Carrier\AbstractCarrierOnline impl
3636
protected $rateManager;
3737
protected $servicePointService;
3838
protected $storeManager;
39-
protected $trackingUrl = 'https://my.dhlparcel.nl/home/tracktrace/{{trackerCode}}?lang={{locale}}';
39+
protected $trackingUrl = 'https://my.dhlecommerce.nl/home/tracktrace/{{trackerCode}}?lang={{locale}}';
4040
protected $alternateUrls = [
4141
'BE' => 'https://www.dhlparcel.be/en/consumer/track-your-shipment?tc={{trackerCode}}&pc={{postalCode}}&lc={{locale}}'
4242
];
@@ -229,7 +229,7 @@ protected function getShippingMethod(
229229
$method->setPrice($this->getConfigData('shipping_methods/' . $methodKey . '/price') + $serviceCost);
230230
}
231231

232-
if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->cartService->getFreeBoxesCount($request)) {
232+
if ($request->getFreeShipping() || $request->getPackageQty() == $this->cartService->getFreeBoxesCount($request)) {
233233
if (boolval($this->getConfigData('usability/discount_after_coupon/always_charge_servicecosts'))) {
234234
$method->setPrice($serviceCost);
235235
} else {

Model/Service/Capability.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ public function getOptions($storeId, $toCountry = '', $toPostalCode = '', $toBus
7171
$option->exclusions[] = $exclusion->key;
7272
}
7373
}
74+
// Manually add LQ vs PS exclusion
75+
if ($option->key === 'PS' && !in_array('LQ', $option->exclusions)) {
76+
$option->exclusions[] = 'LQ';
77+
}
78+
if ($option->key === 'LQ' && !in_array('PS', $option->exclusions)) {
79+
$option->exclusions[] = 'PS';
80+
}
7481
$options[$responseOption->key] = $option;
7582
} else {
7683
/** @var \DHLParcel\Shipping\Model\Data\Capability\Option $option */

Model/Service/Shipment.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,20 @@ protected function validateShipmentRequest($shipmentRequest, $hideShipper = fals
110110
throw new LabelCreationException(__('Failed to create label, missing shipper street'));
111111
}
112112

113-
if (empty($shipmentRequest->shipper->address->number)) {
113+
$disableHousenumberValidationCountries = explode(',', strval($this->helper->getConfigData('usability/disable_housenumber_validation/countries')));
114+
$validateShipperHousenumber = (bool) !in_array($shipmentRequest->shipper->address->countryCode, $disableHousenumberValidationCountries);
115+
116+
117+
if ($validateShipperHousenumber && empty($shipmentRequest->shipper->address->number)) {
114118
throw new LabelCreationException(__('Failed to create label, missing shipper street number'));
115119
}
116120

117121
if (empty($shipmentRequest->receiver->address->street)) {
118122
throw new LabelCreationException(__('Failed to create label, missing receiver street'));
119123
}
120124

121-
$disableHousenumberValidationCountries = explode(',', strval($this->helper->getConfigData('usability/disable_housenumber_validation/countries')));
122-
$validateHousenumber = (bool) !in_array($shipmentRequest->receiver->address->countryCode, $disableHousenumberValidationCountries);
123-
if ($validateHousenumber && empty($shipmentRequest->receiver->address->number)) {
125+
$validateReceiverHousenumber = (bool) !in_array($shipmentRequest->receiver->address->countryCode, $disableHousenumberValidationCountries);
126+
if ($validateReceiverHousenumber && empty($shipmentRequest->receiver->address->number)) {
124127
throw new LabelCreationException(__('Failed to create label, missing receiver street number'));
125128
}
126129

Observer/Shipment.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,12 @@ protected function processGrid($order)
114114
$defaultOptions = $this->presetService->getDefaultOptions($order);
115115
$defaultOptions = $this->checkMailboxOverride($defaultOptions);
116116
$defaultOptions = $this->additionalServices($defaultOptions);
117-
117+
// Get all available sizes with all services selected
118118
$sizes = $this->capabilityService->getSizes($storeId, $toCountry, $toPostalCode, $toBusiness, array_keys($defaultOptions));
119119
$sizes = $this->overwriteMailboxType($sizes);
120+
$sizes = $this->overwriteSizes($sizes);
120121

122+
// If no sizes are available, try to search capability again with optional services removed from the filter, then re-add whatever is allowed
121123
if (empty($sizes) || !is_array($sizes)) {
122124
$skippableOptions = $this->presetService->filterSkippableDefaults($defaultOptions, $storeId);
123125
$requiredOptions = $this->presetService->getDefaultOptions($order, true);
@@ -136,6 +138,7 @@ protected function processGrid($order)
136138
$defaultOptions = array_merge($requiredOptions, $allowedOptions);
137139
$sizes = $this->capabilityService->getSizes($storeId, $toCountry, $toPostalCode, $toBusiness, array_keys($defaultOptions));
138140
$sizes = $this->overwriteMailboxType($sizes);
141+
$sizes = $this->overwriteSizes($sizes);
139142

140143
if (empty($sizes) || !is_array($sizes)) {
141144
$translations = $this->presetService->getTranslations();
@@ -146,7 +149,7 @@ protected function processGrid($order)
146149

147150
$packageKey = '';
148151
$packageWeight = 1000000;
149-
152+
// Select the biggest available size available that matches the weight
150153
foreach ($sizes as $key => $package) {
151154
if ($this->shouldSkipSize($key, $sizes)) {
152155
continue;
@@ -270,6 +273,27 @@ protected function overwriteMailboxType($sizes)
270273
return true;
271274
});
272275
}
276+
277+
/**
278+
* @param $sizes
279+
*
280+
* @return array
281+
*/
282+
protected function overwriteSizes($sizes)
283+
{
284+
if (!$this->request->getParam('size_override')) {
285+
return $sizes;
286+
}
287+
288+
foreach ($sizes as $key => $size) {
289+
if ($key !== $this->request->getParam('size_override')) {
290+
unset($sizes[$key]);
291+
}
292+
}
293+
294+
return $sizes;
295+
}
296+
273297
protected function checkMailboxOverride($options)
274298
{
275299
if ($this->request->getParam('method_override') == 'mailbox' && array_key_exists('DOOR', $options)) {

Ui/Bulk/Actions.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,39 @@ public function jsonSerialize()
6767
);
6868
}
6969

70+
$enabled = $this->helper->getConfigData('usability/bulk/create_small');
71+
if ($enabled && !$skipCreate) {
72+
$this->addOptionStack(
73+
$options,
74+
'create_small',
75+
__('Create small labels (max 10 kg)'),
76+
$this->urlPath . 'create',
77+
['size_override' => 'SMALL']
78+
);
79+
}
80+
81+
$enabled = $this->helper->getConfigData('usability/bulk/create_small_medium');
82+
if ($enabled && !$skipCreate) {
83+
$this->addOptionStack(
84+
$options,
85+
'create_small_medium',
86+
__('Create small-medium labels (max 20 kg)'),
87+
$this->urlPath . 'create',
88+
['size_override' => 'SMALL_MEDIUM']
89+
);
90+
}
91+
92+
$enabled = $this->helper->getConfigData('usability/bulk/create_medium');
93+
if ($enabled && !$skipCreate) {
94+
$this->addOptionStack(
95+
$options,
96+
'create_medium',
97+
__('Create medium labels (max 31 kg)'),
98+
$this->urlPath . 'create',
99+
['size_override' => 'MEDIUM']
100+
);
101+
}
102+
70103
$enabled = $this->helper->getConfigData('usability/bulk/create_dhl_only');
71104
if ($enabled && !$skipCreate) {
72105
$this->addOptionStack(
@@ -100,6 +133,39 @@ public function jsonSerialize()
100133
);
101134
}
102135

136+
$enabled = $this->helper->getConfigData('usability/bulk/create_small_dhl_only');
137+
if ($enabled && !$skipCreate) {
138+
$this->addOptionStack(
139+
$options,
140+
'create_small_dhl_only',
141+
__('Create small labels (max 10 kg, only for DHL shipping methods)'),
142+
$this->urlPath . 'create',
143+
['size_override' => 'SMALL', 'dhlparcel_only' => 'true']
144+
);
145+
}
146+
147+
$enabled = $this->helper->getConfigData('usability/bulk/create_small_medium_dhl_only');
148+
if ($enabled && !$skipCreate) {
149+
$this->addOptionStack(
150+
$options,
151+
'create_small_medium_dhl_only',
152+
__('Create small-medium labels (max 20 kg, only for DHL shipping methods)'),
153+
$this->urlPath . 'create',
154+
['size_override' => 'SMALL_MEDIUM', 'dhlparcel_only' => 'true']
155+
);
156+
}
157+
158+
$enabled = $this->helper->getConfigData('usability/bulk/create_medium_dhl_only');
159+
if ($enabled && !$skipCreate) {
160+
$this->addOptionStack(
161+
$options,
162+
'create_medium_dhl_only',
163+
__('Create medium labels (max 31 kg, only for DHL shipping methods)'),
164+
$this->urlPath . 'create',
165+
['size_override' => 'MEDIUM', 'dhlparcel_only' => 'true']
166+
);
167+
}
168+
103169
$enabled = $this->helper->getConfigData('usability/bulk/download');
104170
if ($enabled) {
105171
$options[] = $this->createOption(

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.49",
5+
"version": "1.0.50",
66
"license": [
77
"OSL-3.0"
88
],

etc/adminhtml/system.xml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@
190190
</field>
191191
<field id="price" translate="label" type="text" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
192192
<label>Price</label>
193+
<validate>validate-number validate-zero-or-greater</validate>
193194
</field>
194195
</group>
195196
<group id="door" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
@@ -208,6 +209,7 @@
208209
</field>
209210
<field id="price" translate="label" type="text" sortOrder="400" showInDefault="1" showInWebsite="1" showInStore="1">
210211
<label>Flat price</label>
212+
<validate>validate-number validate-zero-or-greater</validate>
211213
<depends>
212214
<field id="rate_method">0</field>
213215
</depends>
@@ -325,6 +327,7 @@
325327
</field>
326328
<field id="price" translate="label" type="text" sortOrder="400" showInDefault="1" showInWebsite="1" showInStore="1">
327329
<label>Flat price</label>
330+
<validate>validate-number validate-zero-or-greater</validate>
328331
<depends>
329332
<field id="rate_method">0</field>
330333
</depends>
@@ -366,6 +369,7 @@
366369
</field>
367370
<field id="price" translate="label" type="text" sortOrder="400" showInDefault="1" showInWebsite="1" showInStore="1">
368371
<label>Flat price</label>
372+
<validate>validate-number validate-zero-or-greater</validate>
369373
<depends>
370374
<field id="rate_method">0</field>
371375
</depends>
@@ -407,6 +411,7 @@
407411
</field>
408412
<field id="price" translate="label" type="text" sortOrder="400" showInDefault="1" showInWebsite="1" showInStore="1">
409413
<label>Flat price</label>
414+
<validate>validate-number validate-zero-or-greater</validate>
410415
<depends>
411416
<field id="rate_method">0</field>
412417
</depends>
@@ -448,6 +453,7 @@
448453
</field>
449454
<field id="price" translate="label" type="text" sortOrder="400" showInDefault="1" showInWebsite="1" showInStore="1">
450455
<label>Flat price</label>
456+
<validate>validate-number validate-zero-or-greater</validate>
451457
<depends>
452458
<field id="rate_method">0</field>
453459
</depends>
@@ -491,6 +497,7 @@
491497
</field>
492498
<field id="price" translate="label" type="text" sortOrder="400" showInDefault="1" showInWebsite="1" showInStore="1">
493499
<label>Flat price</label>
500+
<validate>validate-number validate-zero-or-greater</validate>
494501
<depends>
495502
<field id="rate_method">0</field>
496503
</depends>
@@ -545,6 +552,7 @@
545552
</field>
546553
<field id="price" translate="label" type="text" sortOrder="400" showInDefault="1" showInWebsite="1" showInStore="1">
547554
<label>Flat price</label>
555+
<validate>validate-number validate-zero-or-greater</validate>
548556
<depends>
549557
<field id="rate_method">0</field>
550558
</depends>
@@ -607,6 +615,7 @@
607615
</field>
608616
<field id="price" translate="label" type="text" sortOrder="400" showInDefault="1" showInWebsite="1" showInStore="1">
609617
<label>Flat price</label>
618+
<validate>validate-number validate-zero-or-greater</validate>
610619
<depends>
611620
<field id="rate_method">0</field>
612621
</depends>
@@ -856,6 +865,18 @@
856865
<label>Create envelope labels (50-500g)</label>
857866
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
858867
</field>
868+
<field id="create_small" translate="label" sortOrder="220" type="select" showInDefault="1" showInWebsite="1" showInStore="1">
869+
<label>Create small labels (max 10 kg)</label>
870+
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
871+
</field>
872+
<field id="create_small_medium" translate="label" sortOrder="230" type="select" showInDefault="1" showInWebsite="1" showInStore="1">
873+
<label>Create small-medium labels (max 20 kg)</label>
874+
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
875+
</field>
876+
<field id="create_medium" translate="label" sortOrder="240" type="select" showInDefault="1" showInWebsite="1" showInStore="1">
877+
<label>Create medium labels (max 31 kg)</label>
878+
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
879+
</field>
859880
<field id="create_dhl_only" translate="label" sortOrder="300" type="select" showInDefault="1" showInWebsite="1" showInStore="1">
860881
<label>Create labels (only for DHL shipping methods, excluding mailbox and envelope)</label>
861882
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
@@ -868,6 +889,18 @@
868889
<label>Create envelope labels (50-500g, only for DHL shipping methods)</label>
869890
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
870891
</field>
892+
<field id="create_small_dhl_only" translate="label" sortOrder="420" type="select" showInDefault="1" showInWebsite="1" showInStore="1">
893+
<label>Create small labels (max 10 kg, only for DHL shipping methods)</label>
894+
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
895+
</field>
896+
<field id="create_small_medium_dhl_only" translate="label" sortOrder="430" type="select" showInDefault="1" showInWebsite="1" showInStore="1">
897+
<label>Create small-medium labels (max 20 kg, only for DHL shipping methods)</label>
898+
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
899+
</field>
900+
<field id="create_medium_dhl_only" translate="label" sortOrder="440" type="select" showInDefault="1" showInWebsite="1" showInStore="1">
901+
<label>Create medium labels (max 31 kg, only for DHL shipping methods)</label>
902+
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
903+
</field>
871904
<field id="create_service_saturday" translate="label" sortOrder="500" type="select" showInDefault="1" showInWebsite="1" showInStore="1">
872905
<label>Show service: Saturday</label>
873906
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>

etc/config.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
<default_hide_shipper>0</default_hide_shipper>
3636
<alternative_tracking>
3737
<enabled>0</enabled>
38-
<url><![CDATA[https://www.dhlparcel.nl/nl/volg-uw-zending?tc={{trackerCode}}&pc={{postalCode}}]]></url>
38+
<url><![CDATA[https://www.dhlecommerce.nl/nl/volg-uw-zending?tc={{trackerCode}}&pc={{postalCode}}]]></url>
3939
</alternative_tracking>
4040
<ignored_sizes>ENVELOPE,XSMALL</ignored_sizes>
4141
</label>

etc/csp_whitelist.xml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0"?>
2+
<csp_whitelist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Csp:etc/csp_whitelist.xsd">
3+
<policies>
4+
<policy id="script-src">
5+
<values>
6+
<value id="dhlecommercenl-servicepoint-locator" type="host">https://static.dhlecommerce.nl</value>
7+
<value id="dhlecommercenl-servicepoint-locator-gmaps" type="host">https://maps.googleapis.com</value>
8+
</values>
9+
</policy>
10+
<policy id="style-src">
11+
<values>
12+
<value id="dhlecommercenl-servicepoint-locator" type="host">https://static.dhlecommerce.nl</value>
13+
<value id="dhlecommercenl-servicepoint-locator-gmaps" type="host">https://maps.googleapis.com</value>
14+
<value id="dhlecommercenl-servicepoint-locator-gmaps-fonts" type="host">https://fonts.googleapis.com</value>
15+
</values>
16+
</policy>
17+
<policy id="font-src">
18+
<values>
19+
<value id="dhlecommercenl-servicepoint-locator" type="host">https://static.dhlecommerce.nl</value>
20+
<value id="dhlecommercenl-servicepoint-locator-gmaps-fonts-static" type="host">https://fonts.gstatic.com</value>
21+
</values>
22+
</policy>
23+
<policy id="connect-src">
24+
<values>
25+
<value id="dhlecommercenl-api" type="host">https://api-gw.dhlparcel.nl</value>
26+
<value id="dhlecommercenl-servicepoint-locator" type="host">https://static.dhlecommerce.nl</value>
27+
<value id="dhlecommercenl-servicepoint-locator-gmaps" type="host">https://maps.googleapis.com</value>
28+
</values>
29+
</policy>
30+
<policy id="img-src">
31+
<values>
32+
<value id="dhlecommercenl-servicepoint-locator-gmaps" type="host">https://maps.googleapis.com</value>
33+
<value id="dhlecommercenl-servicepoint-locator-gmaps-static" type="host">https://maps.gstatic.com</value>
34+
</values>
35+
</policy>
36+
</policies>
37+
</csp_whitelist>

0 commit comments

Comments
 (0)