PluginProbe
Packeta / 1.4.2
Packeta v1.4.2
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.2, at src/Packetery/Module/Order/PacketSynchronizer.php

180 lines 4.3 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 __( 'Awaiting consignment', 'packeta' );
131 case 'arrived':
132 return __( 'Accepted at depot', 'packeta' );
133 case 'prepared for departure':
134 return __( 'On the way', 'packeta' );
135 case 'departed':
136 return __( 'Departed from depot', 'packeta' );
137 case 'collected':
138 return __( 'Parcel has been collected', 'packeta' );
139 case 'ready for pickup':
140 return __( 'Ready for pick-up', 'packeta' );
141 case 'handed to carrier':
142 return __( 'Handed over to carrier company', 'packeta' );
143 case 'delivered':
144 return __( 'Delivered', 'packeta' );
145 case 'posted back':
146 return __( 'Return (on the way back)', 'packeta' );
147 case 'returned':
148 return __( 'Returned to sender', 'packeta' );
149 case 'cancelled':
150 return __( 'Cancelled', 'packeta' );
151 case 'unknown':
152 return __( 'Unknown parcel status', 'packeta' );
153 }
154
155 return (string) $packetStatus;
156 }
157
158 /**
159 * Gets packet statuses and default values.
160 *
161 * @return string[]
162 */
163 public static function getPacketStatuses(): array {
164 return [
165 'received data' => true,
166 'arrived' => true,
167 'prepared for departure' => true,
168 'departed' => true,
169 'ready for pickup' => true,
170 'handed to carrier' => true,
171 'delivered' => false,
172 'posted back' => true,
173 'returned' => false,
174 'cancelled' => false,
175 'collected' => true,
176 'unknown' => false,
177 ];
178 }
179 }
180