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 / PacketSynchronizer.php

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

180 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class Synchronizer
4 *
5 * @package Packetery\Module\Order
6 */
7
8 declare( strict_types=1 );
9
10
11 namespace Packetery\Module\Order;
12
13 use Packetery\Core\Api;
14 use Packetery\Core\Log;
15 use Packetery\Module\Options;
16
17 /**
18 * Class Synchronizer
19 *
20 * @package Packetery\Module\Order
21 */
22 class PacketSynchronizer {
23
24 /**
25 * API soap client.
26 *
27 * @var Api\Soap\Client
28 */
29 private $apiSoapClient;
30
31 /**
32 * Options provider.
33 *
34 * @var Options\Provider
35 */
36 private $optionsProvider;
37
38 /**
39 * Logger.
40 *
41 * @var Log\ILogger
42 */
43 private $logger;
44
45 /**
46 * Order repository.
47 *
48 * @var Repository
49 */
50 private $orderRepository;
51
52 /**
53 * Constructor.
54 *
55 * @param Api\Soap\Client $apiSoapClient API soap client.
56 * @param Log\ILogger $logger Logger.
57 * @param Options\Provider $optionsProvider Options provider.
58 * @param Repository $orderRepository Order repository.
59 */
60 public function __construct(
61 Api\Soap\Client $apiSoapClient,
62 Log\ILogger $logger,
63 Options\Provider $optionsProvider,
64 Repository $orderRepository
65 ) {
66 $this->apiSoapClient = $apiSoapClient;
67 $this->logger = $logger;
68 $this->optionsProvider = $optionsProvider;
69 $this->orderRepository = $orderRepository;
70 }
71
72 /**
73 * Synchronizes packets.
74 *
75 * @return void
76 */
77 public function syncStatuses(): void {
78 $results = $this->orderRepository->findStatusSyncingOrders(
79 $this->optionsProvider->getStatusSyncingPacketStatuses(),
80 $this->optionsProvider->getExistingStatusSyncingOrderStatuses(),
81 $this->optionsProvider->getMaxDaysOfPacketStatusSyncing(),
82 $this->optionsProvider->getMaxStatusSyncingPackets()
83 );
84
85 foreach ( $results as $order ) {
86 $packetId = $order->getPacketId();
87
88 $request = new Api\Soap\Request\PacketStatus( (int) $packetId );
89 $response = $this->apiSoapClient->packetStatus( $request );
90
91 if ( $response->hasFault() ) {
92 $record = new Log\Record();
93 $record->action = Log\Record::ACTION_PACKET_STATUS_SYNC;
94 $record->status = Log\Record::STATUS_ERROR;
95 $record->title = __( 'Packet status could not be synchronized.', 'packeta' );
96 $record->params = [
97 'orderId' => $order->getNumber(),
98 'packetId' => $request->getPacketId(),
99 'errorMessage' => $response->getFaultString(),
100 ];
101 $record->orderId = $order->getNumber();
102 $this->logger->add( $record );
103
104 if ( $response->hasWrongPassword() ) {
105 break;
106 }
107
108 continue;
109 }
110
111 if ( $response->getCodeText() === $order->getPacketStatus() ) {
112 continue;
113 }
114
115 $order->setPacketStatus( $response->getCodeText() );
116 $this->orderRepository->save( $order );
117 }
118 }
119
120 /**
121 * Gets code text translated.
122 *
123 * @param string|null $packetStatus Packet status.
124 *
125 * @return string|null
126 */
127 public function getPacketStatusTranslated( ?string $packetStatus ): string {
128 switch ( $packetStatus ) {
129 case 'received data':
130 return __( 'Data received', 'packeta' );
131 case 'arrived':
132 return __( 'Submitted', 'packeta' );
133 case 'prepared for departure':
134 return __( 'Prepared for departure', 'packeta' );
135 case 'departed':
136 return __( 'Departed', 'packeta' );
137 case 'ready for pickup':
138 return __( 'Ready for pickup', 'packeta' );
139 case 'handed to carrier':
140 return __( 'Handed to carrier', 'packeta' );
141 case 'delivered':
142 return __( 'Delivered', 'packeta' );
143 case 'posted back':
144 return __( 'Posted back', 'packeta' );
145 case 'returned':
146 return __( 'Returned', 'packeta' );
147 case 'cancelled':
148 return __( 'Cancelled', 'packeta' );
149 case 'collected':
150 return __( 'Collected', 'packeta' );
151 case 'unknown':
152 return __( 'Unknown', 'packeta' );
153 }
154
155 return (string) $packetStatus;
156 }
157
158 /**
159 * Gets packet statuses.
160 *
161 * @return string[]
162 */
163 public function getPacketStatuses(): array {
164 return [
165 'received data',
166 'arrived',
167 'prepared for departure',
168 'departed',
169 'ready for pickup',
170 'handed to carrier',
171 'delivered',
172 'posted back',
173 'returned',
174 'cancelled',
175 'collected',
176 'unknown',
177 ];
178 }
179 }
180