PluginProbe
Packeta / 1.3.1
Packeta v1.3.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.3.1, at src/Packetery/Module/Order/PacketSubmitter.php

170 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 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 $this->logger->add( $record );
109
110 $resultsCounter['errors'] ++;
111
112 return;
113 }
114
115 $response = $this->soapApiClient->createPacket( $createPacketRequest );
116 if ( $response->hasFault() ) {
117 $record = new Log\Record();
118 $record->action = Log\Record::ACTION_PACKET_SENDING;
119 $record->status = Log\Record::STATUS_ERROR;
120 $record->title = __( 'Packet could not be created.', 'packeta' );
121 $record->params = [
122 'request' => $createPacketRequest->getSubmittableData(),
123 'errorMessage' => $response->getErrorsAsString(),
124 ];
125 $this->logger->add( $record );
126
127 $resultsCounter['errors'] ++;
128 } else {
129 $commonEntity->setIsExported( true );
130 $commonEntity->setPacketId( (string) $response->getId() );
131 $this->orderRepository->save( $commonEntity );
132
133 $resultsCounter['success'] ++;
134
135 $record = new Log\Record();
136 $record->action = Log\Record::ACTION_PACKET_SENDING;
137 $record->status = Log\Record::STATUS_SUCCESS;
138 $record->title = __( 'Packet was sucessfully created.', 'packeta' );
139 $record->params = [
140 'request' => $createPacketRequest->getSubmittableData(),
141 'packetId' => $response->getId(),
142 ];
143 $this->logger->add( $record );
144 }
145 } else {
146 $resultsCounter['ignored'] ++;
147 }
148 }
149
150 /**
151 * Prepares packet attributes.
152 *
153 * @param Entity\Order $commonEntity Order entity.
154 *
155 * @return CreatePacket
156 * @throws InvalidRequestException For the case request is not eligible to be sent to API.
157 */
158 private function preparePacketRequest( Entity\Order $commonEntity ): CreatePacket {
159 /*
160 TODO: extend validator to return specific errors.
161 if ( ! $this->orderValidator->validate( $commonEntity ) ) {
162 throw new InvalidRequestException( 'All required order attributes are not set.' );
163 }
164 */
165
166 return new CreatePacket( $commonEntity );
167 }
168
169 }
170