PluginProbe
Packeta / 1.6.4
Packeta v1.6.4
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 1.6.4, at src/Packetery/Core/Validator/Order.php

177 lines 4.4 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
14 /**
15 * Class Order
16 *
17 * @package Packetery\Validator
18 */
19 class Order {
20
21 public const ERROR_TRANSLATION_KEY_NUMBER = 'validation_error_number';
22 public const ERROR_TRANSLATION_KEY_NAME = 'validation_error_name';
23 public const ERROR_TRANSLATION_KEY_VALUE = 'validation_error_value';
24 public const ERROR_TRANSLATION_KEY_PICKUP_POINT_OR_CARRIER_ID = 'validation_error_pickup_point_or_carrier_id';
25 public const ERROR_TRANSLATION_KEY_ESHOP = 'validation_error_eshop';
26 public const ERROR_TRANSLATION_KEY_WEIGHT = 'validation_error_weight';
27 public const ERROR_TRANSLATION_KEY_ADDRESS = 'validation_error_address';
28 public const ERROR_TRANSLATION_KEY_SIZE = 'validation_error_size';
29 public const ERROR_TRANSLATION_KEY_CUSTOMS_DECLARATION = 'validation_error_customs_declaration';
30
31 /**
32 * Address validator.
33 *
34 * @var Address
35 */
36 private $addressValidator;
37
38 /**
39 * Size validator.
40 *
41 * @var Size
42 */
43 private $sizeValidator;
44
45 /**
46 * Validation errors translations.
47 *
48 * @var array $translations
49 */
50 private $translations;
51
52 /**
53 * Order constructor.
54 *
55 * @param Address $addressValidator Address validator.
56 * @param Size $sizeValidator Size validator.
57 * @param array $translations Translations with specified keys.
58 */
59 public function __construct( Address $addressValidator, Size $sizeValidator, array $translations ) {
60 $this->addressValidator = $addressValidator;
61 $this->sizeValidator = $sizeValidator;
62 $this->translations = $translations;
63 }
64
65 /**
66 * Validates data needed to submit packet.
67 *
68 * @param Entity\Order $order Order entity.
69 *
70 * @return bool
71 */
72 public function isValid( Entity\Order $order ): bool {
73 return empty( $this->validate( $order ) );
74 }
75
76 /**
77 * Validates data needed to submit packet and returns array of errors.
78 *
79 * @param Entity\Order $order Order entity.
80 *
81 * @return string[]
82 */
83 public function validate( Entity\Order $order ): array {
84 $errors = [
85 self::ERROR_TRANSLATION_KEY_NUMBER => ! $order->getNumber(),
86 self::ERROR_TRANSLATION_KEY_NAME => ! $order->getName(),
87 self::ERROR_TRANSLATION_KEY_VALUE => ! $order->getValue(),
88 self::ERROR_TRANSLATION_KEY_PICKUP_POINT_OR_CARRIER_ID => ! $order->getPickupPointOrCarrierId(),
89 self::ERROR_TRANSLATION_KEY_ESHOP => ! $order->getEshop(),
90 self::ERROR_TRANSLATION_KEY_WEIGHT => ! $this->validateFinalWeight( $order ),
91 self::ERROR_TRANSLATION_KEY_ADDRESS => ! $this->validateAddress( $order ),
92 self::ERROR_TRANSLATION_KEY_SIZE => ! $this->validateSize( $order ),
93 self::ERROR_TRANSLATION_KEY_CUSTOMS_DECLARATION => $order->hasToFillCustomsDeclaration(),
94 ];
95
96 $errors = array_keys(
97 array_filter(
98 $errors,
99 static function( $value ) {
100 return false !== $value;
101 }
102 )
103 );
104
105 foreach ( $errors as &$error ) {
106 $error = $this->getTranslation( $error );
107 }
108
109 return $errors;
110 }
111
112 /**
113 * Return the key if translation is not set.
114 *
115 * @param string $key Translation key.
116 * @return string
117 */
118 private function getTranslation( string $key ): string {
119 if ( empty( $this->translations[ $key ] ) ) {
120 return $key;
121 }
122 return $this->translations[ $key ];
123 }
124
125 /**
126 * Validates delivery address if needed.
127 *
128 * @param Entity\Order $order Order entity.
129 *
130 * @return bool
131 */
132 private function validateAddress( Entity\Order $order ): bool {
133 if ( $order->isHomeDelivery() ) {
134 $address = $order->getDeliveryAddress();
135 if ( null === $address ) {
136 return false;
137 }
138
139 return $this->addressValidator->validate( $address );
140 }
141
142 return true;
143 }
144
145 /**
146 * Validate weight.
147 *
148 * @param Entity\Order $order Order.
149 *
150 * @return bool
151 */
152 private function validateFinalWeight( Entity\Order $order ): bool {
153 return null !== $order->getFinalWeight() && $order->getFinalWeight() > 0;
154 }
155
156 /**
157 * Validates size if needed.
158 *
159 * @param Entity\Order $order Order entity.
160 *
161 * @return bool
162 */
163 private function validateSize( Entity\Order $order ): bool {
164 if ( $order->getCarrier()->requiresSize() ) {
165 $size = $order->getSize();
166 if ( null === $size ) {
167 return false;
168 }
169
170 return $this->sizeValidator->validate( $size );
171 }
172
173 return true;
174 }
175
176 }
177