167 lines
4.6 KiB
PHP
Executable File
167 lines
4.6 KiB
PHP
Executable File
<?php
|
|
|
|
namespace JR\NetSuite\Queue;
|
|
|
|
use JR\NetSuite\Lib\NetSuiteAPI;
|
|
use Magento\Framework\Serialize\SerializerInterface;
|
|
|
|
use \JR\NetSuite\Model\ResourceModel\OrderQueue\CollectionFactory as OrderQueueCollectionFactory;
|
|
use \JR\NetSuite\Service\OrdersSyncService;
|
|
use \JR\NetSuite\Mapper\OrderMapper;
|
|
|
|
class OrderQueueManager extends AbstractQueueManager {
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $name = 'Order';
|
|
|
|
/**
|
|
* @var int
|
|
*/
|
|
protected $pageSize = 200;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $lastSyncRecordDate;
|
|
|
|
/**
|
|
* @var OrderQueueCollectionFactory
|
|
*/
|
|
protected $orderQueueCollectionFactory;
|
|
|
|
/**
|
|
* @var OrdersSyncService
|
|
*/
|
|
protected $orderSync;
|
|
|
|
/**
|
|
* @var OrderMapper
|
|
*/
|
|
protected $orderMapper;
|
|
|
|
/**
|
|
* OrderQueueManager constructor.
|
|
*
|
|
* @param \JR\NetSuite\Helper\Data $helper
|
|
* @param \JR\NetSuite\Logger\Logger $logger
|
|
* @param SerializerInterface $serializer
|
|
* @param NetSuiteAPI $netSuiteAPI
|
|
* @param OrderQueueCollectionFactory $orderQueueCollectionFactory
|
|
* @param OrdersSyncService $orderSync
|
|
* @param OrderMapper $orderMapper
|
|
* @return void
|
|
*/
|
|
public function __construct(
|
|
\JR\NetSuite\Helper\Data $helper,
|
|
\JR\NetSuite\Logger\Logger $logger,
|
|
SerializerInterface $serializer,
|
|
NetSuiteAPI $netSuiteAPI,
|
|
OrderQueueCollectionFactory $orderQueueCollectionFactory,
|
|
OrdersSyncService $orderSync,
|
|
OrderMapper $orderMapper
|
|
) {
|
|
parent::__construct($helper, $logger, $serializer, $netSuiteAPI);
|
|
$this->orderQueueCollectionFactory = $orderQueueCollectionFactory;
|
|
$this->orderSync = $orderSync;
|
|
$this->orderMapper = $orderMapper;
|
|
|
|
$queue = $this->orderQueueCollectionFactory->create();
|
|
$lastSyncRecordDate = $queue->getLastSyncRecordDate();
|
|
if ($lastSyncRecordDate) {
|
|
$this->lastSyncRecordDate = $this->helper->convertUtcToLocalTime($lastSyncRecordDate, 'm/d/Y g:i a', '-1 minute');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fetch data from NetSuite
|
|
*
|
|
* @param int $pageSize
|
|
* @param int $page
|
|
* @return array
|
|
*/
|
|
public function fetch($pageSize = 50, $page = 1) {
|
|
// $queue = $this->orderQueueCollectionFactory->create();
|
|
// $lastSyncRecordDate = $queue->getLastSyncRecordDate();
|
|
// if ($lastSyncRecordDate) {
|
|
// $lastSyncRecordDate = $this->helper->convertUtcToLocalTime($lastSyncRecordDate, 'm/d/Y g:i a', '-1 minute');
|
|
// }
|
|
|
|
// $filter = (bool)$lastSyncRecordDate ? ['filter' => ['datecreated', 'after', $lastSyncRecordDate]] : [];
|
|
// $filter = (bool)$lastSyncRecordDate ? ['filter' => ['lastmodifieddate', 'after', $lastSyncRecordDate]] : [];
|
|
// $filter = (bool)$lastSyncRecordDate ? ['filter' => ['lastmodifieddate', 'after', '03/05/2026 11:17 am']] : [];
|
|
|
|
// $filter = ['filter' => ['lastmodifieddate', 'after', '08/01/2026 12:00 am']];
|
|
$filter = (bool)$this->lastSyncRecordDate ? ['filter' => ['lastmodifieddate', 'after', $this->lastSyncRecordDate]] : [];
|
|
|
|
$this->logger->info("[$this->name" . "QueueManager] fetch: " . json_encode([
|
|
"page" => $page,
|
|
"page size" => $pageSize,
|
|
"filter" => $filter,
|
|
"last sync date" => $this->lastSyncRecordDate,
|
|
], JSON_PRETTY_PRINT));
|
|
$results = $this->netSuiteAPI->fetchOrders($pageSize, $page, $filter);
|
|
$this->logger->info("[$this->name" . "QueueManager] fetch: " . json_encode([
|
|
"result size" => $results['size'],
|
|
"total pages" => $results['totalPages'],
|
|
"total size" => $results['totalSize'],
|
|
], JSON_PRETTY_PRINT));
|
|
return $results;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getPageSize() {
|
|
return $this->pageSize;
|
|
}
|
|
|
|
/**
|
|
* Convert NetSuite data to Magento format
|
|
*
|
|
* @param array $data
|
|
* @return array
|
|
*/
|
|
public function convertToMagentoFormat($data) {
|
|
return $this->orderMapper->convertToMagentoFormat($data);
|
|
}
|
|
|
|
/**
|
|
* adds data to the queue.
|
|
*
|
|
* @param array $data
|
|
* @return void
|
|
*/
|
|
public function enqueue($data) {
|
|
$queue = $this->orderQueueCollectionFactory->create();
|
|
foreach ($data as $item) {
|
|
$queue->insertOrUpdate($item);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get next queue items to process
|
|
*
|
|
* @param int $batchSize
|
|
* @return array
|
|
*/
|
|
public function dequeue($batchSize = 50) {
|
|
return $this->orderQueueCollectionFactory->create()->getNext($batchSize);
|
|
}
|
|
|
|
/**
|
|
* Process queue item
|
|
*
|
|
* @param $queueItem
|
|
* @return array
|
|
*/
|
|
public function processQueueItem($queueItem) {
|
|
$data = $this->serializer->unserialize($queueItem->getData('data'));
|
|
//return $this->orderSync->createOrSkip($data);
|
|
return $this->orderSync->createOrUpdate($data);
|
|
}
|
|
|
|
}
|
|
|