PluginProbe
Packeta / 2.1
Packeta v2.1
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / src / Packetery / Core / Validator / Order.php

Order.php in Packeta 2.1, at src/Packetery/Core/Validator/Order.php

191 lines 5.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class Order
4 *
5 * @package Packetery\Validator
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Core\Validator;
11
12 use Packetery\Core\Entity;
13 use Packetery\Core\Interfaces\ValidatorTranslationsInterface;
14
15 /**
16 * Class Order
17 *
18 * @package Packetery\Validator
19 */
20 class Order {
21
22 public const ERROR_TRANSLATION_KEY_NUMBER = 'validation_error_number';
23 public const ERROR_TRANSLATION_KEY_NAME = 'validation_error_name';
24 public const ERROR_TRANSLATION_KEY_VALUE = 'validation_error_value';
25 public const ERROR_TRANSLATION_KEY_PICKUP_POINT_OR_CARRIER_ID = 'validation_error_pickup_point_or_carrier_id';
26 public const ERROR_TRANSLATION_KEY_ESHOP = 'validation_error_eshop';
27 public const ERROR_TRANSLATION_KEY_WEIGHT = 'validation_error_weight';
28 public const ERROR_TRANSLATION_KEY_ADDRESS = 'validation_error_address';
29 public const ERROR_TRANSLATION_KEY_HEIGHT = 'validation_error_height';
30 public const ERROR_TRANSLATION_KEY_WIDTH = 'validation_error_width';
31 public const ERROR_TRANSLATION_KEY_LENGTH = 'validation_error_length';
32 public const ERROR_TRANSLATION_KEY_CUSTOMS_DECLARATION = 'validation_error_customs_declaration';
33
34 /**
35 * Address validator.
36 *
37 * @var Address
38 */
39 private $addressValidator;
40
41 /**
42 * Size validator.
43 *
44 * @var Size
45 */
46 private $sizeValidator;
47
48 /**
49 * Validation errors translations.
50 *
51 * @var array<string, string>|null $translations
52 */
53 private $translations = null;
54
55 /**
56 * Translations.
57 *
58 * @var ValidatorTranslationsInterface
59 */
60 private $validatorTranslations;
61
62 /**
63 * Order constructor.
64 *
65 * @param Address $addressValidator Address validator.
66 * @param Size $sizeValidator Size validator.
67 * @param ValidatorTranslationsInterface $validatorTranslations Translations.
68 */
69 public function __construct(
70 Address $addressValidator,
71 Size $sizeValidator,
72 ValidatorTranslationsInterface $validatorTranslations
73 ) {
74 $this->addressValidator = $addressValidator;
75 $this->sizeValidator = $sizeValidator;
76 $this->validatorTranslations = $validatorTranslations;
77 }
78
79 /**
80 * Validates data needed to submit packet.
81 *
82 * @param Entity\Order $order Order entity.
83 *
84 * @return bool
85 */
86 public function isValid( Entity\Order $order ): bool {
87 return count( $this->validate( $order ) ) === 0;
88 }
89
90 /**
91 * Validates data needed to submit packet and returns array of errors.
92 *
93 * @param Entity\Order $order Order entity.
94 *
95 * @return string[]
96 */
97 public function validate( Entity\Order $order ): array {
98 $sizeReport = $this->validateSize( $order );
99 $errors = [
100 self::ERROR_TRANSLATION_KEY_NUMBER => ! $order->hasNumber(),
101 self::ERROR_TRANSLATION_KEY_NAME => ! $order->hasName(),
102 self::ERROR_TRANSLATION_KEY_VALUE => ! $order->hasFinalValue(),
103 self::ERROR_TRANSLATION_KEY_PICKUP_POINT_OR_CARRIER_ID => ! $order->hasPickupPointOrCarrierId(),
104 self::ERROR_TRANSLATION_KEY_ESHOP => ! $order->hasEshop(),
105 self::ERROR_TRANSLATION_KEY_WEIGHT => ! $this->validateFinalWeight( $order ),
106 self::ERROR_TRANSLATION_KEY_ADDRESS => ! $this->validateAddress( $order ),
107 self::ERROR_TRANSLATION_KEY_HEIGHT => ! $sizeReport->isHeightValid(),
108 self::ERROR_TRANSLATION_KEY_WIDTH => ! $sizeReport->isWidthValid(),
109 self::ERROR_TRANSLATION_KEY_LENGTH => ! $sizeReport->isLengthValid(),
110 self::ERROR_TRANSLATION_KEY_CUSTOMS_DECLARATION => $order->hasToFillCustomsDeclaration(),
111 ];
112
113 $result = [];
114 foreach ( $errors as $key => $hasError ) {
115 if ( ! $hasError ) {
116 continue;
117 }
118
119 $result[ $key ] = $this->getTranslation( $key );
120 }
121
122 return $result;
123 }
124
125 /**
126 * Return the key if translation is not set.
127 *
128 * @param string $key Translation key.
129 *
130 * @return string
131 */
132 private function getTranslation( string $key ): string {
133 if ( $this->translations === null ) {
134 $this->translations = $this->validatorTranslations->get();
135 }
136
137 return $this->translations[ $key ] ?? $key;
138 }
139
140 /**
141 * Validates delivery address if needed.
142 *
143 * @param Entity\Order $order Order entity.
144 *
145 * @return bool
146 */
147 private function validateAddress( Entity\Order $order ): bool {
148 if ( $order->isHomeDelivery() ) {
149 $address = $order->getDeliveryAddress();
150 if ( $address === null ) {
151 return false;
152 }
153
154 return $this->addressValidator->validate( $address );
155 }
156
157 return true;
158 }
159
160 /**
161 * Validate weight.
162 *
163 * @param Entity\Order $order Order.
164 *
165 * @return bool
166 */
167 private function validateFinalWeight( Entity\Order $order ): bool {
168 return $order->getFinalWeight() !== null && $order->getFinalWeight() > 0;
169 }
170
171 /**
172 * Validates size if needed.
173 *
174 * @param Entity\Order $order Order entity.
175 *
176 * @return SizeReport
177 */
178 private function validateSize( Entity\Order $order ): SizeReport {
179 if ( $order->getCarrier()->requiresSize() ) {
180 $size = $order->getSize();
181 if ( $size === null ) {
182 return new SizeReport( false, false, false );
183 }
184
185 return $this->sizeValidator->validate( $size );
186 }
187
188 return new SizeReport( true, true, true );
189 }
190 }
191