Files

128 lines
3.0 KiB
PHP
Executable File

<?php
namespace JR\NetSuite\Queue;
use JR\NetSuite\Lib\NetSuiteAPI;
use Magento\Framework\Serialize\SerializerInterface;
use \JR\NetSuite\Model\ResourceModel\CustomerQueue\CollectionFactory as CustomerQueueCollectionFactory;
use \JR\NetSuite\Service\CustomersSyncService;
use \JR\NetSuite\Mapper\CustomerMapper;
class CustomerQueueManager extends AbstractQueueManager
{
/**
* @var string
*/
protected $name = 'Customer';
/**
* @var int
*/
protected $pageSize = 200;
/**
* @var CustomerQueueCollectionFactory
*/
protected $customerQueueCollectionFactory;
/**
* @var CustomersSyncService
*/
protected $customerSync;
/**
* @var CustomerMapper
*/
protected $customerMapper;
/**
* CustomerQueueManager constructor.
*
* @param \JR\NetSuite\Helper\Data $helper
* @param \JR\NetSuite\Logger\Logger $logger
* @param SerializerInterface $serializer
* @param NetSuiteAPI $netSuiteAPI
* @param CustomerQueueCollectionFactory $customerQueueCollectionFactory
* @param CustomersSyncService $customerSync
* @param CustomerMapper $customerMapper
* @return void
*/
public function __construct(
\JR\NetSuite\Helper\Data $helper,
\JR\NetSuite\Logger\Logger $logger,
SerializerInterface $serializer,
NetSuiteAPI $netSuiteAPI,
CustomerQueueCollectionFactory $customerQueueCollectionFactory,
CustomersSyncService $customerSync,
CustomerMapper $customerMapper
) {
parent::__construct($helper, $logger, $serializer, $netSuiteAPI);
$this->customerQueueCollectionFactory = $customerQueueCollectionFactory;
$this->customerSync = $customerSync;
$this->customerMapper = $customerMapper;
}
/**
* Fetch data from NetSuite
*
* @param int $pageSize
* @param int $page
* @return array
*/
public function fetch($pageSize = 50, $page = 1, $additionalParams = []){
return $this->netSuiteAPI->fetchCustomers($pageSize, $page, $additionalParams);
}
/**
* {@inheritdoc}
*/
public function getPageSize() {
return $this->pageSize;
}
/**
* Convert NetSuite data to Magento format
*
* @param array $data
* @return array
*/
public function convertToMagentoFormat($data){
return $this->customerMapper->convertToMagentoFormat($data);
}
/**
* adds data to the queue.
*
* @param array $data
* @return void
*/
public function enqueue($data){
$queue = $this->customerQueueCollectionFactory->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->customerQueueCollectionFactory->create()->getNext($batchSize);
}
/**
* Process queue item
*
* @param $queueItem
* @return array
*/
public function processQueueItem($queueItem){
$data = $this->serializer->unserialize($queueItem->getData('data'));
return $this->customerSync->createOrSkip($data);
}
}