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
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 |