93 lines
3.4 KiB
PHP
93 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace Lts\Taxjar\Setup\Patch\Data;
|
|
|
|
use Magento\Directory\Model\ResourceModel\Region;
|
|
use Magento\Framework\Api\FilterBuilder;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
use Magento\Framework\Setup\Patch\DataPatchInterface;
|
|
use Olegnax\LayeredNavigation\Model\ResourceModel\Search\FilterGroupBuilder;
|
|
use Psr\Log\LoggerInterface;
|
|
use Magento\Framework\Api\Search\SearchCriteriaBuilder;
|
|
|
|
class AddUSStatesToNexusAddress implements DataPatchInterface
|
|
{
|
|
private Region $regionResourceModel;
|
|
private \Taxjar\SalesTax\Api\Data\Tax\NexusInterfaceFactory $nexusDataObjectFactory;
|
|
private \Taxjar\SalesTax\Api\Tax\NexusRepositoryInterface $nexusRepository;
|
|
private LoggerInterface $logger;
|
|
private FilterGroupBuilder $filterGroupBuilder;
|
|
private FilterBuilder $filterBuilder;
|
|
private SearchCriteriaBuilder $searchCriteriaBuilder;
|
|
|
|
public function __construct(
|
|
Region $regionResourceModel,
|
|
\Taxjar\SalesTax\Api\Data\Tax\NexusInterfaceFactory $nexusDataObjectFactory,
|
|
\Taxjar\SalesTax\Api\Tax\NexusRepositoryInterface $nexusRepository,
|
|
LoggerInterface $logger,
|
|
FilterGroupBuilder $filterGroupBuilder,
|
|
FilterBuilder $filterBuilder,
|
|
SearchCriteriaBuilder $searchCriteriaBuilder
|
|
) {
|
|
$this->regionResourceModel = $regionResourceModel;
|
|
$this->nexusDataObjectFactory = $nexusDataObjectFactory;
|
|
$this->nexusRepository = $nexusRepository;
|
|
$this->logger = $logger;
|
|
$this->filterGroupBuilder = $filterGroupBuilder;
|
|
$this->filterBuilder = $filterBuilder;
|
|
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
|
|
}
|
|
|
|
public static function getDependencies()
|
|
{
|
|
return [];
|
|
}
|
|
|
|
public function getAliases()
|
|
{
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* @param string $country
|
|
* @param int $regionId
|
|
* @return \Magento\Framework\Api\Search\SearchCriteria
|
|
*/
|
|
protected function searchCriteriaBuilder(string $country, int $regionId)
|
|
{
|
|
return $this->searchCriteriaBuilder
|
|
->addFilter($this->filterBuilder->setField('country_id')->setValue($country)->create())
|
|
->addFilter($this->filterBuilder->setField('region_id')->setValue($regionId)->create())
|
|
->addSortOrder('id', 'asc')
|
|
->create();
|
|
}
|
|
/**
|
|
* @throws LocalizedException
|
|
*/
|
|
public function apply(): void
|
|
{
|
|
$connection = $this->regionResourceModel->getConnection();
|
|
$select = $connection->select()
|
|
->from($this->regionResourceModel->getMainTable())->where('country_id = ?', 'US');
|
|
|
|
foreach ($connection->fetchAll($select) as $region) {
|
|
|
|
/* @var $result \Magento\Framework\Api\SearchResults */
|
|
$result = $this->nexusRepository->getList($this->searchCriteriaBuilder($region['country_id'], (int)$region['region_id']));
|
|
if ($result->getTotalCount()){
|
|
continue;
|
|
}
|
|
$nexus = $this->nexusDataObjectFactory->create();
|
|
$nexus->setRegionCode($region['code'])
|
|
->setRegionId($region['region_id'])
|
|
->setCountryId($region['country_id'])
|
|
->setRegion($region['default_name']);
|
|
try {
|
|
$id = $this->nexusRepository->save($nexus);
|
|
// echo $id."\r\n\r\n";
|
|
} catch (LocalizedException $e) {
|
|
$this->logger->debug($e->getMessage());
|
|
}
|
|
}
|
|
}
|
|
} |