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

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

193 lines 5.0 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\Api\Soap\Request\CreatePacket;
15 use Packetery\Core\Entity;
16 use Packetery\Core\Log;
17 use Packetery\Core\Validator;
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 * OrderApi constructor.
58 *
59 * @param Client $soapApiClient SOAP API Client.
60 * @param Validator\Order $orderValidator Order validator.
61 * @param Log\ILogger $logger Logger.
62 * @param Repository $orderRepository Order repository.
63 */
64 public function __construct(
65 Client $soapApiClient,
66 Validator\Order $orderValidator,
67 Log\ILogger $logger,
68 Repository $orderRepository
69 ) {
70 $this->soapApiClient = $soapApiClient;
71 $this->orderValidator = $orderValidator;
72 $this->logger = $logger;
73 $this->orderRepository = $orderRepository;
74 }
75
76 /**
77 * Submits packet data to Packeta API.
78 *
79 * @param WC_Order $order WC order.
80 * @param array $resultsCounter Array with results.
81 */
82 public function submitPacket( WC_Order $order, array &$resultsCounter ): void {
83 $commonEntity = $this->orderRepository->getByWcOrder( $order );
84 if ( null === $commonEntity ) {
85 $resultsCounter['ignored'] ++;
86
87 return;
88 }
89
90 $orderData = $order->get_data();
91 $shippingMethods = $order->get_shipping_methods();
92 $shippingMethod = reset( $shippingMethods );
93
94 $shippingMethodData = $shippingMethod->get_data();
95 $shippingMethodId = $shippingMethodData['method_id'];
96 if ( ShippingMethod::PACKETERY_METHOD_ID === $shippingMethodId && ! $commonEntity->isExported() ) {
97 try {
98 $createPacketRequest = $this->preparePacketRequest( $commonEntity );
99 } catch ( InvalidRequestException $e ) {
100 $record = new Log\Record();
101 $record->action = Log\Record::ACTION_PACKET_SENDING;
102 $record->status = Log\Record::STATUS_ERROR;
103 $record->title = __( 'Packet could not be created.', 'packeta' );
104 $record->params = [
105 'orderId' => $orderData['id'],
106 'errorMessage' => $e->getMessage(),
107 ];
108 $record->orderId = $commonEntity->getNumber();
109 $this->logger->add( $record );
110
111 $resultsCounter['logs'] ++;
112 $resultsCounter['errors'] ++;
113
114 return;
115 }
116
117 $response = $this->soapApiClient->createPacket( $createPacketRequest );
118 if ( $response->hasFault() ) {
119 $record = new Log\Record();
120 $record->action = Log\Record::ACTION_PACKET_SENDING;
121 $record->status = Log\Record::STATUS_ERROR;
122 $record->title = __( 'Packet could not be created.', 'packeta' );
123 $record->params = [
124 'request' => $createPacketRequest->getSubmittableData(),
125 'errorMessage' => $response->getErrorsAsString(),
126 ];
127 $record->orderId = $commonEntity->getNumber();
128 $this->logger->add( $record );
129
130 $resultsCounter['logs'] ++;
131 $resultsCounter['errors'] ++;
132 } else {
133 $commonEntity->setIsExported( true );
134 $commonEntity->setPacketId( (string) $response->getId() );
135 $this->orderRepository->save( $commonEntity );
136
137 $resultsCounter['success'] ++;
138
139 $record = new Log\Record();
140 $record->action = Log\Record::ACTION_PACKET_SENDING;
141 $record->status = Log\Record::STATUS_SUCCESS;
142 $record->title = __( 'Packet was sucessfully created.', 'packeta' );
143 $record->params = [
144 'request' => $createPacketRequest->getSubmittableData(),
145 'packetId' => $response->getId(),
146 ];
147 $record->orderId = $commonEntity->getNumber();
148 $this->logger->add( $record );
149
150 $resultsCounter['logs'] ++;
151 }
152 } else {
153 $resultsCounter['ignored'] ++;
154 }
155 }
156
157 /**
158 * Prepares packet attributes.
159 *
160 * @param Entity\Order $order Order entity.
161 *
162 * @return CreatePacket
163 * @throws InvalidRequestException For the case request is not eligible to be sent to API.
164 */
165 private function preparePacketRequest( Entity\Order $order ): CreatePacket {
166 /*
167 TODO: extend validator to return specific errors.
168 if ( ! $this->orderValidator->validate( $commonEntity ) ) {
169 throw new InvalidRequestException( 'All required order attributes are not set.' );
170 }
171 */
172
173 return new CreatePacket(
174 /**
175 * Filters the input order for CreatePacket request.
176 *
177 * @since 1.4
178 *
179 * @param Entity\Order $order Packeta core order. DO NOT USE THIS STRICT TYPE IN YOUR METHOD SIGNATURE!
180 */
181 apply_filters(
182 'packeta_create_packet',
183 // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_unserialize
184 unserialize(
185 // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize
186 serialize( $order )
187 )
188 )
189 );
190 }
191
192 }
193