PluginProbe
Packeta / 1.4.1
Packeta v1.4.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 / Module / Order / PacketSubmitter.php

PacketSubmitter.php in Packeta 1.4.1, at src/Packetery/Module/Order/PacketSubmitter.php

196 lines 5.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class PacketSubmitter
4 *
5 * @package Packetery\Api
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Order;
11
12 use Packetery\Core\Api\InvalidRequestException;
13 use Packetery\Core\Api\Soap\Client;
14 use Packetery\Core\Entity;
15 use Packetery\Core\Log;
16 use Packetery\Core\Validator;
17 use Packetery\Core\Api\Soap\CreatePacketMapper;
18 use Packetery\Module\ShippingMethod;
19 use WC_Order;
20
21 /**
22 * Class PacketSubmitter
23 *
24 * @package Packetery\Api
25 */
26 class PacketSubmitter {
27
28 /**
29 * SOAP API Client.
30 *
31 * @var Client SOAP API Client.
32 */
33 private $soapApiClient;
34
35 /**
36 * Order validator.
37 *
38 * @var Validator\Order
39 */
40 private $orderValidator;
41
42 /**
43 * ILogger.
44 *
45 * @var Log\ILogger
46 */
47 private $logger;
48
49 /**
50 * Order repository.
51 *
52 * @var Repository
53 */
54 private $orderRepository;
55
56 /**
57 * CreatePacketMapper.
58 *
59 * @var CreatePacketMapper
60 */
61 private $createPacketMapper;
62
63 /**
64 * OrderApi constructor.
65 *
66 * @param Client $soapApiClient SOAP API Client.
67 * @param Validator\Order $orderValidator Order validator.
68 * @param Log\ILogger $logger Logger.
69 * @param Repository $orderRepository Order repository.
70 * @param CreatePacketMapper $createPacketMapper CreatePacketMapper.
71 */
72 public function __construct(
73 Client $soapApiClient,
74 Validator\Order $orderValidator,
75 Log\ILogger $logger,
76 Repository $orderRepository,
77 CreatePacketMapper $createPacketMapper
78 ) {
79 $this->soapApiClient = $soapApiClient;
80 $this->orderValidator = $orderValidator;
81 $this->logger = $logger;
82 $this->orderRepository = $orderRepository;
83 $this->createPacketMapper = $createPacketMapper;
84 }
85
86 /**
87 * Submits packet data to Packeta API.
88 *
89 * @param WC_Order $order WC order.
90 * @param array $resultsCounter Array with results.
91 */
92 public function submitPacket( WC_Order $order, array &$resultsCounter ): void {
93 $commonEntity = $this->orderRepository->getByWcOrder( $order );
94 if ( null === $commonEntity ) {
95 $resultsCounter['ignored'] ++;
96
97 return;
98 }
99
100 $orderData = $order->get_data();
101 $shippingMethods = $order->get_shipping_methods();
102 $shippingMethod = reset( $shippingMethods );
103
104 $shippingMethodData = $shippingMethod->get_data();
105 $shippingMethodId = $shippingMethodData['method_id'];
106 if ( ShippingMethod::PACKETERY_METHOD_ID === $shippingMethodId && ! $commonEntity->isExported() ) {
107 try {
108 $createPacketData = $this->preparePacketData( $commonEntity );
109 } catch ( InvalidRequestException $e ) {
110 $record = new Log\Record();
111 $record->action = Log\Record::ACTION_PACKET_SENDING;
112 $record->status = Log\Record::STATUS_ERROR;
113 $record->title = __( 'Packet could not be created.', 'packeta' );
114 $record->params = [
115 'orderId' => $orderData['id'],
116 'errorMessage' => $e->getMessage(),
117 ];
118 $record->orderId = $commonEntity->getNumber();
119 $this->logger->add( $record );
120
121 $resultsCounter['logs'] ++;
122 $resultsCounter['errors'] ++;
123
124 return;
125 }
126
127 $response = $this->soapApiClient->createPacket( $createPacketData );
128 if ( $response->hasFault() ) {
129 $record = new Log\Record();
130 $record->action = Log\Record::ACTION_PACKET_SENDING;
131 $record->status = Log\Record::STATUS_ERROR;
132 $record->title = __( 'Packet could not be created.', 'packeta' );
133 $record->params = [
134 'request' => $createPacketData,
135 'errorMessage' => $response->getErrorsAsString(),
136 ];
137 $record->orderId = $commonEntity->getNumber();
138 $this->logger->add( $record );
139
140 $resultsCounter['logs'] ++;
141 $resultsCounter['errors'] ++;
142 } else {
143 $commonEntity->setIsExported( true );
144 $commonEntity->setPacketId( (string) $response->getId() );
145 $this->orderRepository->save( $commonEntity );
146
147 $resultsCounter['success'] ++;
148
149 $record = new Log\Record();
150 $record->action = Log\Record::ACTION_PACKET_SENDING;
151 $record->status = Log\Record::STATUS_SUCCESS;
152 $record->title = __( 'Packet was sucessfully created.', 'packeta' );
153 $record->params = [
154 'request' => $createPacketData,
155 'packetId' => $response->getId(),
156 ];
157 $record->orderId = $commonEntity->getNumber();
158 $this->logger->add( $record );
159
160 $resultsCounter['logs'] ++;
161 }
162 } else {
163 $resultsCounter['ignored'] ++;
164 }
165 }
166
167 /**
168 * Prepares packet attributes.
169 *
170 * @param Entity\Order $order Order entity.
171 *
172 * @return array
173 * @throws InvalidRequestException For the case request is not eligible to be sent to API.
174 */
175 private function preparePacketData( Entity\Order $order ): array {
176 /*
177 TODO: extend validator to return specific errors.
178 if ( ! $this->orderValidator->validate( $commonEntity ) ) {
179 throw new InvalidRequestException( 'All required order attributes are not set.' );
180 }
181 */
182
183 $createPacketData = $this->createPacketMapper->fromOrderToArray( $order );
184
185 /**
186 * Allows to update CreatePacket request data.
187 *
188 * @since 1.4
189 *
190 * @param array $createPacketData CreatePacket request data.
191 */
192 return apply_filters( 'packeta_create_packet', $createPacketData );
193 }
194
195 }
196