PluginProbe
Packeta / 2.1
Packeta v2.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
← All changes | src/Packetery/Module/Order/LabelPrint.php +214 -213 1.42.1 View file →
@@ -1,10 +1,5 @@
1 1 <?php
2 -/**
3 - * Class LabelPrint.
4 - *
5 - * @package Packetery\Order
6 - */
7 2
8 3 declare( strict_types=1 );
9 4
10 5 namespace Packetery\Module\Order;
@@ -9,26 +4,26 @@
9 4
10 5 namespace Packetery\Module\Order;
11 6
12 7 use Packetery\Core\Api\Soap\Client;
8 +use Packetery\Core\Api\Soap\ILabelResponse;
13 9 use Packetery\Core\Api\Soap\Request;
14 10 use Packetery\Core\Api\Soap\Response;
15 11 use Packetery\Core\Log;
16 -use Packetery\Module\FormFactory;
12 +use Packetery\Latte\Engine;
13 +use Packetery\Module\Dashboard\DashboardPage;
14 +use Packetery\Module\Framework\WpAdapter;
15 +use Packetery\Module\Labels\CarrierLabelService;
16 +use Packetery\Module\Labels\LabelPrintParametersService;
17 17 use Packetery\Module\MessageManager;
18 -use Packetery\Module\Options\Provider;
18 +use Packetery\Module\ModuleHelper;
19 +use Packetery\Module\Options\OptionsProvider;
19 20 use Packetery\Module\Plugin;
20 -use PacketeryLatte\Engine;
21 -use PacketeryNette\Forms\Form;
22 -use PacketeryNette\Http;
23 -use Packetery\Module;
21 +use Packetery\Module\Transients;
22 +use Packetery\Nette\Http;
24 23
25 -/**
26 - * Class LabelPrint.
27 - *
28 - * @package Packetery\Order
29 - */
30 24 class LabelPrint {
25 +
31 26 public const ACTION_PACKETA_LABELS = 'print_packeta_labels';
32 27 public const ACTION_CARRIER_LABELS = 'print_carrier_labels';
33 28 public const LABEL_TYPE_PARAM = 'label_type';
34 29 public const MENU_SLUG = 'label-print';
@@ -33,103 +28,93 @@
33 28 public const LABEL_TYPE_PARAM = 'label_type';
34 29 public const MENU_SLUG = 'label-print';
35 30
36 31 /**
37 - * PacketeryLatte Engine.
38 - *
39 - * @var Engine PacketeryLatte engine.
32 + * @var Engine
40 33 */
41 34 private $latteEngine;
42 35
43 36 /**
44 - * Options Provider
45 - *
46 - * @var Provider
37 + * @var OptionsProvider
47 38 */
48 39 private $optionsProvider;
49 40
50 41 /**
51 - * Form factory.
52 - *
53 - * @var FormFactory Form factory.
54 - */
55 - private $formFactory;
56 -
57 - /**
58 - * Http Request.
59 - *
60 42 * @var Http\Request
61 43 */
62 44 private $httpRequest;
63 45
64 46 /**
65 - * SOAP API Client.
66 - *
67 - * @var Client SOAP API Client.
47 + * @var Client
68 48 */
69 49 private $soapApiClient;
70 50
71 51 /**
72 - * Message Manager.
73 - *
74 52 * @var MessageManager
75 53 */
76 54 private $messageManager;
77 55
78 56 /**
79 - * Logger.
80 - *
81 57 * @var Log\ILogger
82 58 */
83 59 private $logger;
84 60
85 61 /**
86 - * Order repository.
87 - *
88 62 * @var Repository
89 63 */
90 64 private $orderRepository;
91 65
92 66 /**
93 - * Log page.
94 - *
95 - * @var Module\Log\Page
67 + * @var PacketActionsCommonLogic
96 68 */
97 - private $logPage;
69 + private $packetActionsCommonLogic;
98 70
99 71 /**
100 - * LabelPrint constructor.
101 - *
102 - * @param Engine $latteEngine Latte Engine.
103 - * @param Provider $optionsProvider Options provider.
104 - * @param FormFactory $formFactory Form factory.
105 - * @param Http\Request $httpRequest Http Request.
106 - * @param Client $soapApiClient SOAP API Client.
107 - * @param MessageManager $messageManager Message Manager.
108 - * @param Log\ILogger $logger Logger.
109 - * @param Repository $orderRepository Order repository.
110 - * @param Module\Log\Page $logPage Log page.
72 + * @var ModuleHelper
111 73 */
74 + private $moduleHelper;
75 +
76 + /**
77 + * @var WpAdapter
78 + */
79 + private $wpAdapter;
80 +
81 + /**
82 + * @var CarrierLabelService
83 + */
84 + private $carrierLabelService;
85 +
86 + /**
87 + * @var LabelPrintParametersService
88 + */
89 + private $labelPrintParametersService;
90 +
112 91 public function __construct(
113 92 Engine $latteEngine,
114 - Provider $optionsProvider,
115 - FormFactory $formFactory,
93 + OptionsProvider $optionsProvider,
116 94 Http\Request $httpRequest,
117 95 Client $soapApiClient,
118 96 MessageManager $messageManager,
119 97 Log\ILogger $logger,
120 98 Repository $orderRepository,
121 - Module\Log\Page $logPage
99 + PacketActionsCommonLogic $packetActionsCommonLogic,
100 + ModuleHelper $moduleHelper,
101 + WpAdapter $wpAdapter,
102 + CarrierLabelService $carrierLabelService,
103 + LabelPrintParametersService $labelPrintParametersService
122 104 ) {
123 - $this->latteEngine = $latteEngine;
124 - $this->optionsProvider = $optionsProvider;
125 - $this->formFactory = $formFactory;
126 - $this->httpRequest = $httpRequest;
127 - $this->soapApiClient = $soapApiClient;
128 - $this->messageManager = $messageManager;
129 - $this->logger = $logger;
130 - $this->orderRepository = $orderRepository;
131 - $this->logPage = $logPage;
105 + $this->latteEngine = $latteEngine;
106 + $this->optionsProvider = $optionsProvider;
107 + $this->httpRequest = $httpRequest;
108 + $this->soapApiClient = $soapApiClient;
109 + $this->messageManager = $messageManager;
110 + $this->logger = $logger;
111 + $this->orderRepository = $orderRepository;
112 + $this->packetActionsCommonLogic = $packetActionsCommonLogic;
113 + $this->moduleHelper = $moduleHelper;
114 + $this->wpAdapter = $wpAdapter;
115 + $this->carrierLabelService = $carrierLabelService;
116 + $this->labelPrintParametersService = $labelPrintParametersService;
132 117 }
133 118
134 119 /**
135 120 * Generates id of transient to store order ids.
@@ -136,9 +121,9 @@
136 121 *
137 122 * @return string
138 123 */
139 124 public static function getOrderIdsTransientName(): string {
140 - return 'packetery_label_print_order_ids_' . wp_get_session_token();
125 + return Transients::LABEL_PRINT_ORDER_IDS_PREFIX . wp_get_session_token();
141 126 }
142 127
143 128 /**
144 129 * Generates id of transient to store back link.
@@ -152,15 +137,15 @@
152 137 /**
153 138 * Prepares form and renders template.
154 139 */
155 140 public function render(): void {
156 - $form = $this->createForm( $this->optionsProvider->getLabelMaxOffset( $this->getLabelFormat() ) );
141 + $form = $this->labelPrintParametersService->createForm( $this->optionsProvider->getLabelMaxOffset( $this->labelPrintParametersService->getLabelFormat() ) );
157 142
158 143 $count = 0;
159 144 $isCarrierLabels = ( $this->httpRequest->getQuery( self::LABEL_TYPE_PARAM ) === self::ACTION_CARRIER_LABELS );
160 145
161 146 $orderIdsTransient = $this->getOrderIdsTransient();
162 - if ( $orderIdsTransient ) {
147 + if ( $orderIdsTransient !== null ) {
163 148 $orderIds = $this->getPacketIdsFromTransient( $orderIdsTransient, $isCarrierLabels );
164 149 $count = count( $orderIds );
165 150 } else {
166 151 $this->messageManager->flash_message( __( 'No orders were selected', 'packeta' ), MessageManager::TYPE_INFO, MessageManager::RENDERER_PACKETERY, self::MENU_SLUG );
@@ -177,8 +162,9 @@
177 162 'packeta' => __( 'Packeta', 'packeta' ),
178 163 'labelPrinting' => __( 'Print labels', 'packeta' ),
179 164 // translators: %s is count.
180 165 'numberOfLabelsToPrint' => __( 'Number of labels to print: %s', 'packeta' ),
166 +
181 167 'back' => __( 'Back', 'packeta' ),
182 168 'printLabels' => __( 'Print labels', 'packeta' ),
183 169 ],
184 170 ]
@@ -184,23 +170,8 @@
184 170 ]
185 171 );
186 172 }
187 173
188 - /**
189 - * Gets label format for current job.
190 - *
191 - * @return string
192 - */
193 - private function getLabelFormat(): string {
194 - $packetaLabelFormat = $this->optionsProvider->get_packeta_label_format();
195 - $carrierLabelFormat = $this->optionsProvider->get_carrier_label_format();
196 -
197 - return ( $this->httpRequest->getQuery( self::LABEL_TYPE_PARAM ) === self::ACTION_CARRIER_LABELS ? $carrierLabelFormat : $packetaLabelFormat );
198 - }
199 -
200 - /**
201 - * Outputs pdf.
202 - */
203 174 public function outputLabelsPdf(): void {
204 175 if ( $this->httpRequest->getQuery( 'page' ) !== self::MENU_SLUG ) {
205 176 return;
206 177 }
@@ -206,59 +177,79 @@
206 177 }
207 178
208 179 $fallbackToPacketaLabel = false;
209 180 $isCarrierLabels = ( $this->httpRequest->getQuery( self::LABEL_TYPE_PARAM ) === self::ACTION_CARRIER_LABELS );
210 - $idParam = $this->httpRequest->getQuery( 'id' );
181 + $orderIdParam = $this->httpRequest->getQuery( 'id' ) !== null ? (int) $this->httpRequest->getQuery( 'id' ) : null;
211 182 $packetIdParam = $this->httpRequest->getQuery( 'packet_id' );
212 - if ( null !== $idParam && null !== $packetIdParam ) {
183 + if ( $orderIdParam !== null && $packetIdParam !== null ) {
213 184 $fallbackToPacketaLabel = true;
214 - $packetIds = [ $idParam => $packetIdParam ];
185 + $packetIds = [ $orderIdParam => $packetIdParam ];
215 186 } else {
216 187 $orderIdsTransient = $this->getOrderIdsTransient();
217 - if ( ! $orderIdsTransient ) {
188 + if ( $orderIdsTransient === null ) {
218 189 return;
219 190 }
220 191
221 192 $packetIds = $this->getPacketIdsFromTransient( $orderIdsTransient, $isCarrierLabels );
222 193 }
223 - if ( ! $packetIds ) {
224 - $this->messageManager->flash_message( __( 'No suitable orders were selected', 'packeta' ), 'info' );
225 - if ( wp_safe_redirect( add_query_arg( [ 'post_type' => 'shop_order' ], admin_url( 'edit.php' ) ) ) ) {
226 - exit;
194 + $packetIds = $this->labelPrintParametersService->removeExternalCarrierPacketIds( $packetIds, $isCarrierLabels, $fallbackToPacketaLabel );
195 +
196 + if ( count( $packetIds ) === 0 ) {
197 + if ( $isCarrierLabels === true ) {
198 + $this->messageManager->flash_message(
199 + $this->wpAdapter->__( 'No orders have been selected for Packeta carriers', 'packeta' ),
200 + 'info'
201 + );
202 + } else {
203 + $this->messageManager->flash_message(
204 + $this->wpAdapter->__( 'No orders have been selected for Packeta pick-up points', 'packeta' ),
205 + 'info'
206 + );
227 207 }
208 +
209 + $this->packetActionsCommonLogic->redirectTo( PacketActionsCommonLogic::REDIRECT_TO_ORDER_GRID );
210 +
228 211 return;
229 212 }
230 213
231 - $maxOffset = $this->optionsProvider->getLabelMaxOffset( $this->getLabelFormat() );
232 - $form = $this->createForm( $maxOffset );
233 - $offsetParam = $this->httpRequest->getQuery( 'offset' );
234 - if ( 0 === $maxOffset ) {
235 - $offset = 0;
236 - } elseif ( null !== $offsetParam ) {
237 - $offset = (int) $offsetParam;
238 - } elseif ( $form->isSubmitted() ) {
239 - $data = $form->getValues( 'array' );
240 - $offset = $data['offset'];
241 - } else {
214 + $offset = $this->labelPrintParametersService->getOffset();
215 + if ( $offset === null ) {
242 216 return;
243 217 }
244 218
245 - if ( $isCarrierLabels ) {
246 - $response = $this->requestCarrierLabels( $offset, $packetIds );
247 - if ( $fallbackToPacketaLabel && $response->hasFault() ) {
248 - $response = $this->requestPacketaLabels( $offset, $packetIds );
219 + $response = $this->getResponse( $isCarrierLabels, $packetIds, $fallbackToPacketaLabel, $orderIdParam, $offset );
220 + if ( $response === null ) {
221 + return;
222 + }
223 +
224 + if ( $response->hasFault() ) {
225 + if ( $fallbackToPacketaLabel === true && count( $packetIds ) === 1 ) {
226 + $message = sprintf(
227 + // translators: %s represents shipment tracking number
228 + $this->wpAdapter->__( 'Label printing for shipment %s failed, you can find more information in the Packeta log.', 'packeta' ),
229 + array_shift( $packetIds )
230 + );
231 + } elseif ( $isCarrierLabels === true ) {
232 + $message = sprintf(
233 + // translators: %s represents error message
234 + $this->wpAdapter->__( 'Carrier label printing failed, you can find more information in the Packeta log. Error: %s', 'packeta' ),
235 + $response->getFaultString()
236 + );
237 + } else {
238 + $message = sprintf(
239 + // translators: %s represents error message
240 + $this->wpAdapter->__( 'Label printing failed, you can find more information in the Packeta log. Error: %s', 'packeta' ),
241 + $response->getFaultString()
242 + );
249 243 }
250 - } else {
251 - $response = $this->requestPacketaLabels( $offset, $packetIds );
244 +
245 + $this->flashMessageAndRedirect( $message, $orderIdParam );
246 +
247 + return;
252 248 }
253 - if ( ! $response || $response->hasFault() ) {
254 - $message = ( null !== $response && $response->hasFault() ) ?
255 - __( 'Label printing failed, you can find more information in the Packeta log.', 'packeta' ) :
256 - __( 'You selected orders that were not submitted yet', 'packeta' );
257 - $this->messageManager->flash_message( $message, MessageManager::TYPE_ERROR );
258 - if ( wp_safe_redirect( 'edit.php?post_type=shop_order' ) ) {
259 - exit;
260 - }
249 +
250 + foreach ( $packetIds as $orderId => $packetId ) {
251 + $this->addLabelCreationInfoToWcOrderNote( $orderId, $packetId, $response );
261 252 }
262 253
263 254 header( 'Content-Type: application/pdf' );
264 255 header( 'Content-Transfer-Encoding: Binary' );
@@ -270,40 +261,16 @@
270 261 exit;
271 262 }
272 263
273 264 /**
274 - * Creates offset setting form.
275 - *
276 - * @param int $maxOffset Maximal offset.
277 - *
278 - * @return Form
279 - */
280 - public function createForm( int $maxOffset ): Form {
281 - $form = $this->formFactory->create();
282 -
283 - $availableOffsets = [];
284 - for ( $i = 0; $i <= $maxOffset; $i ++ ) {
285 - // translators: %s is offset.
286 - $availableOffsets[ $i ] = ( 0 === $i ? __( "don't skip any field on a print sheet", 'packeta' ) : sprintf( __( 'skip %s fields on first sheet', 'packeta' ), $i ) );
287 - }
288 - $form->addSelect(
289 - 'offset',
290 - __( 'Skip fields', 'packeta' ),
291 - $availableOffsets
292 - )->checkDefaultValue( false );
293 -
294 - return $form;
295 - }
296 -
297 - /**
298 265 * Registers submenu item.
299 266 */
300 267 public function register(): void {
301 268 add_submenu_page(
302 - \Packetery\Module\Options\Page::SLUG,
269 + DashboardPage::SLUG,
303 270 __( 'Print labels', 'packeta' ),
304 271 __( 'Print labels', 'packeta' ),
305 - 'manage_options',
272 + 'manage_woocommerce',
306 273 self::MENU_SLUG,
307 274 array(
308 275 $this,
309 276 'render',
@@ -319,30 +286,24 @@
319 286 Plugin::hideSubmenuItem( self::MENU_SLUG );
320 287 }
321 288
322 289 /**
323 - * Prepares labels.
324 - *
325 - * @param int $offset Offset value.
326 - * @param array $packetIds Packet ids.
327 - *
328 - * @return Response\PacketsLabelsPdf|null
290 + * @param int $offset
291 + * @param string[] $packetIds
329 292 */
330 - private function requestPacketaLabels( int $offset, array $packetIds ): ?Response\PacketsLabelsPdf {
331 - $request = new Request\PacketsLabelsPdf( array_values( $packetIds ), $this->getLabelFormat(), $offset );
293 + private function requestPacketaLabels( int $offset, array $packetIds ): Response\PacketsLabelsPdf {
294 + $request = new Request\PacketsLabelsPdf( array_values( $packetIds ), $this->labelPrintParametersService->getLabelFormat(), $offset );
332 295 $response = $this->soapApiClient->packetsLabelsPdf( $request );
333 - // TODO: is possible to merge following part of requestPacketaLabels and requestCarrierLabels?
334 296
335 297 foreach ( $packetIds as $orderId => $packetId ) {
336 298 $record = new Log\Record();
337 299 $record->action = Log\Record::ACTION_LABEL_PRINT;
338 300 $record->orderId = $orderId;
301 + $order = $this->orderRepository->getByIdWithValidCarrier( $orderId );
339 302
340 303 if ( ! $response->hasFault() ) {
341 - $order = $this->orderRepository->getById( $orderId );
342 - if ( null !== $order ) {
304 + if ( $order !== null ) {
343 305 $order->setIsLabelPrinted( true );
344 - $this->orderRepository->save( $order );
345 306 }
346 307
347 308 $record->status = Log\Record::STATUS_SUCCESS;
348 309 $record->title = __( 'Label has been printed successfully.', 'packeta' );
@@ -361,8 +322,13 @@
361 322 ];
362 323 }
363 324
364 325 $this->logger->add( $record );
326 +
327 + if ( $order !== null ) {
328 + $order->updateApiErrorMessage( $response->getFaultString() );
329 + $this->orderRepository->save( $order );
330 + }
365 331 }
366 332
367 333 return $response;
368 334 }
@@ -367,31 +333,24 @@
367 333 return $response;
368 334 }
369 335
370 336 /**
371 - * Prepares carrier labels.
372 - *
373 - * @param int $offset Offset value.
374 - * @param array $packetIds Packet ids.
375 - *
376 - * @return Response\PacketsCourierLabelsPdf
337 + * @param int $offset
338 + * @param array[] $packetIdsWithCourierNumbers
377 339 */
378 - private function requestCarrierLabels( int $offset, array $packetIds ): Response\PacketsCourierLabelsPdf {
379 - $packetIdsWithCourierNumbers = $this->getPacketIdsWithCourierNumbers( $packetIds );
380 - $request = new Request\PacketsCourierLabelsPdf( array_values( $packetIdsWithCourierNumbers ), $this->getLabelFormat(), $offset );
381 - $response = $this->soapApiClient->packetsCarrierLabelsPdf( $request );
340 + private function requestCarrierLabels( int $offset, array $packetIdsWithCourierNumbers ): Response\PacketsCourierLabelsPdf {
341 + $request = new Request\PacketsCourierLabelsPdf( array_values( $packetIdsWithCourierNumbers ), $this->labelPrintParametersService->getLabelFormat(), $offset );
342 + $response = $this->soapApiClient->packetsCarrierLabelsPdf( $request );
382 343
383 344 foreach ( $packetIdsWithCourierNumbers as $orderId => $pairItem ) {
384 345 $record = new Log\Record();
385 346 $record->action = Log\Record::ACTION_CARRIER_LABEL_PRINT;
386 347 $record->orderId = $orderId;
348 + $order = $this->orderRepository->getByIdWithValidCarrier( $orderId );
387 349
388 350 if ( ! $response->hasFault() ) {
389 - $order = $this->orderRepository->getById( $orderId );
390 - if ( null !== $order ) {
351 + if ( $order !== null ) {
391 352 $order->setIsLabelPrinted( true );
392 - $order->setCarrierNumber( $pairItem['courierNumber'] );
393 - $this->orderRepository->save( $order );
394 353 }
395 354
396 355 $record->status = Log\Record::STATUS_SUCCESS;
397 356 $record->title = __( 'Carrier label has been printed successfully.', 'packeta' );
@@ -410,10 +369,14 @@
410 369 ],
411 370 'errorMessage' => $response->getFaultString(),
412 371 ];
413 372 }
373 + $this->logger->add( $record );
414 374
415 - $this->logger->add( $record );
375 + if ( $order !== null ) {
376 + $order->updateApiErrorMessage( $response->getFaultString() );
377 + $this->orderRepository->save( $order );
378 + }
416 379 }
417 380
418 381 return $response;
419 382 }
@@ -423,17 +386,13 @@
423 386 *
424 387 * @return string
425 388 */
426 389 private function getFilename(): string {
427 - return 'packeta_labels_' . strtolower( str_replace( ' ', '_', $this->getLabelFormat() ) ) . '.pdf';
390 + return 'packeta_labels_' . strtolower( str_replace( ' ', '_', $this->labelPrintParametersService->getLabelFormat() ) ) . '.pdf';
428 391 }
429 392
430 393 /**
431 - * Gets saved packet ids.
432 - *
433 - * @param array $orderIds Order IDs from transient.
434 - * @param bool $isCarrierLabels Are carrier labels requested?.
435 - *
394 + * @param string[] $orderIds Order IDs from transient.
436 395 * @return string[]
437 396 */
438 397 private function getPacketIdsFromTransient( array $orderIds, bool $isCarrierLabels ): array {
439 398 $orders = $this->orderRepository->getByIds( $orderIds );
@@ -438,9 +397,9 @@
438 397 private function getPacketIdsFromTransient( array $orderIds, bool $isCarrierLabels ): array {
439 398 $orders = $this->orderRepository->getByIds( $orderIds );
440 399 $packetIds = [];
441 400 foreach ( $orders as $order ) {
442 - if ( null === $order->getPacketId() ) {
401 + if ( $order->getPacketId() === null ) {
443 402 continue;
444 403 }
445 404 if ( ! $isCarrierLabels || $order->isExternalCarrier() ) {
446 405 $packetIds[ $order->getNumber() ] = $order->getPacketId();
@@ -450,11 +409,9 @@
450 409 return $packetIds;
451 410 }
452 411
453 412 /**
454 - * Gets order IDs transient.
455 - *
456 - * @return array|null
413 + * @return string[]|null
457 414 */
458 415 private function getOrderIdsTransient(): ?array {
459 416 $orderIds = get_transient( self::getOrderIdsTransientName() );
460 417 if ( is_array( $orderIds ) ) {
@@ -464,44 +421,88 @@
464 421 return null;
465 422 }
466 423
467 424 /**
468 - * Gets carrier packet numbers from API.
425 + * Saves information about the creation of the label in the order note.
426 + */
427 + private function addLabelCreationInfoToWcOrderNote( int $orderId, string $packetId, ?ILabelResponse $response ): void {
428 + $order = $this->orderRepository->findById( $orderId );
429 + $wcOrder = $this->orderRepository->getWcOrderById( $orderId );
430 + if ( $wcOrder === null || $order === null ) {
431 + return;
432 + }
433 +
434 + $linkText = $order->getPacketBarcode();
435 + $trackingUrl = $order->getPacketTrackingUrl();
436 + if ( $response instanceof Response\PacketsLabelsPdf ) {
437 + if ( $order->isPacketClaim( $packetId ) ) {
438 + // translators: %s represents a packet tracking link.
439 + $message = __( 'Packeta: Label for packet claim %s has been created', 'packeta' );
440 + $linkText = $order->getPacketClaimBarcode();
441 + $trackingUrl = $order->getPacketClaimTrackingUrl();
442 + } else {
443 + // translators: %s represents a packet tracking link.
444 + $message = __( 'Packeta: Label for packet %s has been created', 'packeta' );
445 + }
446 + } else {
447 + // Response is of type Response\PacketsCourierLabelsPdf or null.
448 + // translators: %s represents a packet tracking link.
449 + $message = __( 'Packeta: Carrier label for packet %s has been created', 'packeta' );
450 + }
451 +
452 + $wcOrder->add_order_note(
453 + sprintf(
454 + $message,
455 + $this->moduleHelper->createHtmlLink( $trackingUrl, $linkText )
456 + )
457 + );
458 + $wcOrder->save();
459 + }
460 +
461 + public function flashMessageAndRedirect( string $message, ?int $orderId ): void {
462 + $this->messageManager->flash_message( $message, MessageManager::TYPE_ERROR );
463 +
464 + $redirectTo = $this->httpRequest->getQuery( PacketActionsCommonLogic::PARAM_REDIRECT_TO );
465 + if ( $redirectTo === PacketActionsCommonLogic::REDIRECT_TO_ORDER_DETAIL && $orderId !== null ) {
466 + $this->packetActionsCommonLogic->redirectTo( $redirectTo, $this->orderRepository->findById( $orderId ) );
467 + }
468 + $this->packetActionsCommonLogic->redirectTo( PacketActionsCommonLogic::REDIRECT_TO_ORDER_GRID );
469 + }
470 +
471 + /**
472 + * @param bool $isCarrierLabels
473 + * @param array<string, string> $packetIds
474 + * @param bool $fallbackToPacketaLabel
475 + * @param int|null $orderId
476 + * @param int $offset
469 477 *
470 - * @param string[] $packetIds List of packet ids.
471 - *
472 - * @return array[]
478 + * @return Response\PacketsCourierLabelsPdf|Response\PacketsLabelsPdf|null
473 479 */
474 - private function getPacketIdsWithCourierNumbers( array $packetIds ): array {
475 - $pairs = [];
476 - foreach ( $packetIds as $orderId => $packetId ) {
477 - $request = new Request\PacketCourierNumber( $packetId );
478 - $response = $this->soapApiClient->packetCourierNumber( $request );
479 - if ( $response->hasFault() ) {
480 - if ( $response->hasWrongPassword() ) {
481 - $this->messageManager->flash_message( __( 'Please set a proper API password.', 'packeta' ), MessageManager::TYPE_ERROR );
480 + private function getResponse(
481 + bool $isCarrierLabels,
482 + array $packetIds,
483 + bool $fallbackToPacketaLabel,
484 + ?int $orderId,
485 + int $offset
486 + ) {
487 + if ( $isCarrierLabels === false ) {
488 + return $this->requestPacketaLabels( $offset, $packetIds );
489 + }
482 490
483 - return [];
484 - }
491 + $packetIdsWithCourierNumbers = $this->carrierLabelService->getPacketIdsWithCourierNumbers( $packetIds );
492 + if ( $fallbackToPacketaLabel === false && $packetIdsWithCourierNumbers === [] ) {
493 + $this->flashMessageAndRedirect(
494 + (string) $this->wpAdapter->__( 'Carrier label printing failed, you can find more information in the Packeta log.', 'packeta' ),
495 + $orderId
496 + );
485 497
486 - $record = new Log\Record();
487 - $record->action = Log\Record::ACTION_CARRIER_NUMBER_RETRIEVING;
488 - $record->status = Log\Record::STATUS_ERROR;
489 - $record->title = __( 'Carrier number could not be retrieved.', 'packeta' );
490 - $record->params = [
491 - 'packetId' => $request->getPacketId(),
492 - 'errorMessage' => $response->getFaultString(),
493 - ];
494 - $record->orderId = $orderId;
495 - $this->logger->add( $record );
496 - continue;
497 - }
498 - $pairs[ $orderId ] = [
499 - 'packetId' => $packetId,
500 - 'courierNumber' => $response->getNumber(),
501 - ];
498 + return null;
502 499 }
503 500
504 - return $pairs;
501 + $response = $this->requestCarrierLabels( $offset, $packetIdsWithCourierNumbers );
502 + if ( $fallbackToPacketaLabel === true && $response->hasFault() ) {
503 + return $this->requestPacketaLabels( $offset, $packetIds );
504 + }
505 +
506 + return $response;
505 507 }
506 -
507 508 }