Files

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());
}
}
}
}