Issues (3877)

Shipment/ShipmentHash/ShipmentHashGenerator.php (1 issue)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace Spryker\Service\Shipment\ShipmentHash;
9
10
use Generated\Shared\Transfer\ShipmentMethodTransfer;
11
use Generated\Shared\Transfer\ShipmentTransfer;
12
use Spryker\Service\Shipment\Dependency\Service\ShipmentToCustomerServiceInterface;
13
use Spryker\Service\Shipment\Dependency\Service\ShipmentToUtilEncodingServiceInterface;
14
use Spryker\Service\Shipment\ShipmentConfig;
15
16
class ShipmentHashGenerator implements ShipmentHashGeneratorInterface
17
{
18
    /**
19
     * @var string
20
     */
21
    protected const SHIPMENT_TRANSFER_KEY_PATTERN = '%s-%s-%s-%s';
22
23
    /**
24
     * @var \Spryker\Service\Shipment\Dependency\Service\ShipmentToCustomerServiceInterface
25
     */
26
    protected $customerService;
27
28
    /**
29
     * @var \Spryker\Service\Shipment\ShipmentConfig
30
     */
31
    protected $shipmentConfig;
32
33
    /**
34
     * @var \Spryker\Service\Shipment\Dependency\Service\ShipmentToUtilEncodingServiceInterface
35
     */
36
    protected $utilEncodingService;
37
38
    /**
39
     * @param \Spryker\Service\Shipment\Dependency\Service\ShipmentToCustomerServiceInterface $customerService
40
     * @param \Spryker\Service\Shipment\ShipmentConfig $shipmentConfig
41
     * @param \Spryker\Service\Shipment\Dependency\Service\ShipmentToUtilEncodingServiceInterface $utilEncodingService
42
     */
43
    public function __construct(
44
        ShipmentToCustomerServiceInterface $customerService,
45
        ShipmentConfig $shipmentConfig,
46
        ShipmentToUtilEncodingServiceInterface $utilEncodingService
47
    ) {
48
        $this->customerService = $customerService;
49
        $this->shipmentConfig = $shipmentConfig;
50
        $this->utilEncodingService = $utilEncodingService;
51
    }
52
53
    /**
54
     * @param \Generated\Shared\Transfer\ShipmentTransfer $shipmentTransfer
55
     *
56
     * @return string
57
     */
58
    public function getShipmentHashKey(ShipmentTransfer $shipmentTransfer): string
59
    {
60
        return md5(sprintf(
61
            static::SHIPMENT_TRANSFER_KEY_PATTERN,
62
            $this->prepareShipmentMethodKey($shipmentTransfer),
63
            $this->prepareShippingAddressKey($shipmentTransfer),
64
            $shipmentTransfer->getRequestedDeliveryDate(),
65
            $this->getShipmentAdditionalKeyData($shipmentTransfer),
66
        ));
67
    }
68
69
    /**
70
     * @param \Generated\Shared\Transfer\ShipmentTransfer $shipmentTransfer
71
     *
72
     * @return string
73
     */
74
    protected function prepareShippingAddressKey(ShipmentTransfer $shipmentTransfer): string
75
    {
76
        $shipmentAddressTransfer = $shipmentTransfer->getShippingAddress();
77
        if ($shipmentAddressTransfer === null) {
78
            return '';
79
        }
80
81
        return $this->customerService->getUniqueAddressKey($shipmentTransfer->getShippingAddress());
82
    }
83
84
    /**
85
     * @param \Generated\Shared\Transfer\ShipmentTransfer $shipmentTransfer
86
     *
87
     * @return string
88
     */
89
    protected function prepareShipmentMethodKey(ShipmentTransfer $shipmentTransfer): string
90
    {
91
        $shipmentMethodTransfer = $shipmentTransfer->getMethod();
92
93
        if ($shipmentMethodTransfer === null) {
94
            return '';
95
        }
96
97
        return $this->getShipmentMethodKeyEncodedData($shipmentMethodTransfer);
98
    }
99
100
    /**
101
     * @param \Generated\Shared\Transfer\ShipmentMethodTransfer $shipmentMethodTransfer
102
     *
103
     * @return string
104
     */
105
    protected function getShipmentMethodKeyEncodedData(ShipmentMethodTransfer $shipmentMethodTransfer): string
106
    {
107
        $shipmentMethodKeyData = [];
108
        $shipmentMethodData = $shipmentMethodTransfer->toArray(false, true);
109
110
        foreach ($this->shipmentConfig->getShipmentMethodHashFields() as $fieldName) {
111
            if (empty($shipmentMethodData[$fieldName])) {
112
                continue;
113
            }
114
115
            $shipmentMethodKeyData[$fieldName] = $shipmentMethodData[$fieldName];
116
        }
117
118
        return $this->utilEncodingService->encodeJson($shipmentMethodKeyData);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->utilEncodi...$shipmentMethodKeyData) could return the type null which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
119
    }
120
121
    /**
122
     * @param \Generated\Shared\Transfer\ShipmentTransfer $shipmentTransfer
123
     *
124
     * @return string
125
     */
126
    public function getShipmentAdditionalKeyData(ShipmentTransfer $shipmentTransfer): string
127
    {
128
        $shipmentAdditionalKeyData = [];
129
        $shipmentData = $shipmentTransfer->toArray(false, true);
130
131
        foreach ($this->shipmentConfig->getShipmentHashFields() as $fieldName) {
132
            if (empty($shipmentData[$fieldName])) {
133
                continue;
134
            }
135
136
            $shipmentAdditionalKeyData[$fieldName] = $shipmentData[$fieldName];
137
        }
138
139
        return $this->utilEncodingService->encodeJson($shipmentAdditionalKeyData);
140
    }
141
}
142