PluginProbe
Packeta / 1.5.3
Packeta v1.5.3
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 / PacketCanceller.php

PacketCanceller.php in Packeta 1.5.3, at src/Packetery/Module/Order/PacketCanceller.php

244 lines 6.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class PacketCanceller
4 *
5 * @package Packetery\Module\Order
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Order;
11
12 use Packetery\Core\Api\Soap;
13 use Packetery\Core\Entity;
14 use Packetery\Core\Log;
15 use Packetery\Module\MessageManager;
16 use Packetery\Module\Options;
17 use PacketeryNette\Http\Request;
18
19 /**
20 * Class PacketCanceller
21 *
22 * @package Packetery\Module\Order
23 */
24 class PacketCanceller {
25
26 /**
27 * SOAP API Client.
28 *
29 * @var Soap\Client SOAP API Client.
30 */
31 private $soapApiClient;
32
33 /**
34 * Order repository.
35 *
36 * @var Repository
37 */
38 private $orderRepository;
39
40 /**
41 * ILogger.
42 *
43 * @var Log\ILogger
44 */
45 private $logger;
46
47 /**
48 * Request.
49 *
50 * @var Request
51 */
52 private $request;
53
54 /**
55 * Options provider.
56 *
57 * @var Options\Provider
58 */
59 private $optionsProvider;
60
61 /**
62 * Message manager.
63 *
64 * @var MessageManager
65 */
66 private $messageManager;
67
68 /**
69 * Common logic.
70 *
71 * @var PacketActionsCommonLogic
72 */
73 private $commonLogic;
74
75 /**
76 * Constructor.
77 *
78 * @param Soap\Client $soapApiClient Soap client API.
79 * @param Log\ILogger $logger Logger.
80 * @param Repository $orderRepository Order repository.
81 * @param Request $request Request.
82 * @param Options\Provider $optionsProvider Options provider.
83 * @param MessageManager $messageManager Message manager.
84 * @param PacketActionsCommonLogic $commonLogic Common logic.
85 */
86 public function __construct(
87 Soap\Client $soapApiClient,
88 Log\ILogger $logger,
89 Repository $orderRepository,
90 Request $request,
91 Options\Provider $optionsProvider,
92 MessageManager $messageManager,
93 PacketActionsCommonLogic $commonLogic
94 ) {
95 $this->soapApiClient = $soapApiClient;
96 $this->logger = $logger;
97 $this->orderRepository = $orderRepository;
98 $this->request = $request;
99 $this->optionsProvider = $optionsProvider;
100 $this->messageManager = $messageManager;
101 $this->commonLogic = $commonLogic;
102 }
103
104 /**
105 * Process action.
106 *
107 * @return void
108 */
109 public function processAction(): void {
110 $order = $this->commonLogic->getOrder();
111 $redirectTo = $this->request->getQuery( PacketActionsCommonLogic::PARAM_REDIRECT_TO );
112
113 if ( null === $order ) {
114 $record = new Log\Record();
115 $record->action = Log\Record::ACTION_PACKET_CANCEL;
116 $record->status = Log\Record::STATUS_ERROR;
117 $record->orderId = null;
118 $record->title = __( 'Packet cancel error', 'packeta' );
119 $record->params = [
120 'referer' => (string) $this->request->getReferer(),
121 'errorMessage' => 'Order not found',
122 ];
123
124 $this->logger->add( $record );
125
126 $this->messageManager->flash_message( __( 'Order not found', 'packeta' ), MessageManager::TYPE_ERROR );
127 $this->commonLogic->redirectTo( $redirectTo, $order );
128 return;
129 }
130
131 $this->commonLogic->checkAction( PacketActionsCommonLogic::ACTION_CANCEL_PACKET, $order );
132
133 $this->cancelPacket( $order );
134 $this->commonLogic->redirectTo( $redirectTo, $order );
135 }
136
137 /**
138 * Cancels single packet.
139 *
140 * @param Entity\Order $order Order ID.
141 *
142 * @return void
143 */
144 public function cancelPacket( Entity\Order $order ): void {
145 if ( null === $order->getPacketId() ) {
146 $record = new Log\Record();
147 $record->action = Log\Record::ACTION_PACKET_CANCEL;
148 $record->status = Log\Record::STATUS_ERROR;
149 $record->orderId = $order->getNumber();
150 $record->title = __( 'Packet cancel error', 'packeta' );
151 $record->params = [
152 'orderId' => $order->getNumber(),
153 'packetId' => $order->getPacketId(),
154 'referer' => (string) $this->request->getReferer(),
155 'errorMessage' => 'Packet could not be cancelled',
156 ];
157
158 $this->logger->add( $record );
159
160 $this->messageManager->flash_message( __( 'Packet could not be cancelled', 'packeta' ), MessageManager::TYPE_ERROR );
161 return;
162 }
163
164 $request = new Soap\Request\CancelPacket( $order->getPacketId() );
165 $result = $this->soapApiClient->cancelPacket( $request );
166
167 if ( ! $result->hasFault() ) {
168 $record = new Log\Record();
169 $record->action = Log\Record::ACTION_PACKET_CANCEL;
170 $record->status = Log\Record::STATUS_SUCCESS;
171 $record->orderId = $order->getNumber();
172 $record->title = __( 'Packet cancel success', 'packeta' );
173 $record->params = [
174 'orderId' => $order->getNumber(),
175 'packetId' => $order->getPacketId(),
176 ];
177
178 $this->logger->add( $record );
179 $errorMessage = null;
180 }
181
182 if ( $result->hasFault() ) {
183 $record = new Log\Record();
184 $record->action = Log\Record::ACTION_PACKET_CANCEL;
185 $record->status = Log\Record::STATUS_ERROR;
186 $record->orderId = $order->getNumber();
187 $record->title = __( 'Packet cancel error', 'packeta' );
188 $record->params = [
189 'orderId' => $order->getNumber(),
190 'packetId' => $order->getPacketId(),
191 'errorMessage' => $result->getFaultString(),
192 ];
193
194 $this->logger->add( $record );
195 $errorMessage = $result->getFaultString();
196 }
197
198 $order->updateApiErrorMessage( $errorMessage );
199
200 if ( $this->shouldRevertSubmission( $result ) ) {
201 $order->setIsExported( false );
202 $order->setIsLabelPrinted( false );
203 $order->setCarrierNumber( null );
204 $order->setPacketStatus( null );
205 $order->setPacketId( null );
206
207 if ( $result->hasFault() ) {
208 $this->messageManager->flash_message( __( 'Packet could not be canceled in the Packeta system, packet was canceled only in the order list.', 'packeta' ), MessageManager::TYPE_SUCCESS );
209 }
210
211 if ( ! $result->hasFault() ) {
212 $this->messageManager->flash_message( __( 'Packet has been successfully canceled both in the order list and the Packeta system.', 'packeta' ), MessageManager::TYPE_SUCCESS );
213 }
214 }
215
216 if ( ! $this->shouldRevertSubmission( $result ) ) {
217 $this->messageManager->flash_message( __( 'Failed to cancel packet. See Packeta log for more details.', 'packeta' ), MessageManager::TYPE_ERROR );
218 }
219
220 $this->orderRepository->save( $order );
221 }
222
223 /**
224 * Should revert local order submission to Packeta.
225 *
226 * @param Soap\Response\CancelPacket|null $result Packeta API result.
227 *
228 * @return bool
229 */
230 public function shouldRevertSubmission( ?Soap\Response\CancelPacket $result ): bool {
231 if ( null === $result ) {
232 return false;
233 }
234
235 $revertSubmission = ! $result->hasFault();
236
237 if ( $result->hasCancelNotAllowedFault() && $this->optionsProvider->isPacketCancellationForced() ) {
238 $revertSubmission = true;
239 }
240
241 return $revertSubmission;
242 }
243 }
244