98 lines
3.7 KiB
PHP
98 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace Lts\Taxjar\Helper;
|
|
|
|
use JR\NetSuite\Lib\Restful\NetSuiteAPI;
|
|
use JR\NetSuite\Logger\Logger as NetSuiteLogger;
|
|
use Magento\Customer\Model\Data\Customer;
|
|
use Magento\Framework\App\Helper\AbstractHelper;
|
|
use Magento\Framework\App\Helper\Context;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
use Magento\Framework\Exception\NoSuchEntityException;
|
|
use Magento\Quote\Api\Data\AddressInterface;
|
|
|
|
class ResaleCertificate extends AbstractHelper
|
|
{
|
|
public function __construct(
|
|
Context $context,
|
|
protected \Magento\Checkout\Model\Session $checkoutSession,
|
|
protected NetSuiteLogger $netSuiteLogger,
|
|
protected NetSuiteAPI $netSuiteAPI
|
|
) {
|
|
parent::__construct($context);
|
|
}
|
|
|
|
public function isResaleCertificate()
|
|
{
|
|
try {
|
|
$quote = $this->checkoutSession->getQuote();
|
|
$isResaleCertificate = $this->checkoutSession->getData('is_resale_certificate' . $quote->getId());
|
|
$this->netSuiteLogger->critical(
|
|
sprintf('resale certificate in checkout %d session: '.var_export($isResaleCertificate, true), $quote->getId())
|
|
);
|
|
if ($isResaleCertificate === null) {
|
|
$isResaleCertificate = $this->getResaleCertificate($quote->getCustomer(), $quote->getShippingAddress());
|
|
$this->netSuiteLogger->critical(
|
|
'resale certificate from api: '.var_export($isResaleCertificate, true),
|
|
);
|
|
$this->checkoutSession->setData('is_resale_certificate' . $quote->getId(), $isResaleCertificate);
|
|
}
|
|
return $isResaleCertificate;
|
|
} catch (\Exception $e) {
|
|
$this->netSuiteLogger->critical(
|
|
sprintf('get resale certificate exception: %s', $e->getMessage()),
|
|
);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
protected function getResaleCertificate(Customer $dataCustomer, AddressInterface $address) {
|
|
|
|
$netsuiteId = $dataCustomer->getCustomAttribute('netsuite_id')?->getValue();
|
|
// $this->netSuiteLogger->debug(
|
|
// 'isResaleCertificate $netsuiteId: ',
|
|
// [
|
|
// '$netsuiteId' => $netsuiteId,
|
|
// ]
|
|
// );
|
|
|
|
$state = $address->getRegion();
|
|
if (!$netsuiteId) {
|
|
$this->netSuiteLogger->critical(
|
|
sprintf('resale certificate request exception: customer %d netsuite_id not set', $dataCustomer->getId()),
|
|
);
|
|
return false;
|
|
}
|
|
|
|
if (!$state) {
|
|
$this->netSuiteLogger->critical(
|
|
sprintf('resale certificate request exception: customer %d address %d state is not set ', $dataCustomer->getId(), $address->getId()),
|
|
);
|
|
return false;
|
|
}
|
|
$query = sprintf(
|
|
'custrecord_customer ANY_OF [%d] AND '.
|
|
'custrecord_valid IS true AND custrecord_rcert_address_specific IS false AND custrecord_rc_state_full IS "%s"', $netsuiteId, $state
|
|
);
|
|
$service = 'record/v1/customrecord_resale_certificates';
|
|
try {
|
|
$response = $this->netSuiteAPI->get($service, ['q' => $query]);
|
|
// $response = ['response'=>['count'=>1]];
|
|
$this->netSuiteLogger->critical(
|
|
'resale certificate request exception: ',
|
|
[
|
|
'$response' => $response,
|
|
'$netsuiteId' => $netsuiteId,
|
|
'$state' => $state,
|
|
]
|
|
);
|
|
return isset($response['response']['count']) && $response['response']['count'] != 0;
|
|
} catch (\Exception $e) {
|
|
$this->netSuiteLogger->error(
|
|
'resale certificate request exception: '.$e->getMessage());
|
|
}
|
|
|
|
return false;
|
|
}
|
|
} |