73 lines
2.4 KiB
PHP
73 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace Lts\Taxjar\Observer;
|
|
|
|
use JR\NetSuite\Lib\Restful\NetSuiteAPI;
|
|
use JR\NetSuite\Logger\Logger as NetSuiteLogger;
|
|
use Magento\Customer\Model\Data\Customer;
|
|
use Magento\Framework\Event\Observer;
|
|
use Magento\Framework\Event\ObserverInterface;
|
|
use Magento\Quote\Api\Data\AddressInterface;
|
|
use Magento\Quote\Model\Quote;
|
|
|
|
class ResaleCertificateObserver implements ObserverInterface
|
|
{
|
|
private NetSuiteAPI $netSuiteAPI;
|
|
private NetSuiteLogger $netSuiteLogger;
|
|
|
|
public function __construct(
|
|
NetSuiteAPI $netSuiteAPI,
|
|
NetSuiteLogger $netSuiteLogger,
|
|
) {
|
|
$this->netSuiteAPI = $netSuiteAPI;
|
|
$this->netSuiteLogger = $netSuiteLogger;
|
|
}
|
|
|
|
/**
|
|
* @param Customer $dataCustomer
|
|
* @param AddressInterface $address
|
|
* @return bool
|
|
*/
|
|
protected function isResaleCertificate(Customer $dataCustomer, AddressInterface $address){
|
|
$netsuiteId = $dataCustomer->getCustomAttribute('netsuite_id')?->getValue();
|
|
$state = $address->getRegion();
|
|
if (!$netsuiteId) {
|
|
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]);
|
|
|
|
return isset($response['response']['count']) && $response['response']['count'] != 0;
|
|
} catch (\Exception $e) {
|
|
$this->netSuiteLogger->error(
|
|
'resale certificate request exception: '.$e->getMessage());
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function execute(Observer $observer)
|
|
{
|
|
/* @var $quote Quote */
|
|
$quote = $observer->getData('quote');
|
|
|
|
$address = $quote->getShippingAddress();
|
|
$isResaleCertificate = $this->isResaleCertificate($quote->getCustomer(), $address);
|
|
if ($isResaleCertificate) {
|
|
foreach ($quote->getAllItems() as $item) {
|
|
/* @var $item Quote\Item */
|
|
$item->setTaxAmount(0)
|
|
->setTaxPercent(0)
|
|
->setBaseTaxAmount(0);
|
|
}
|
|
$address->setTaxAmount(0)->setBaseTaxAmount(0)->setShippingTaxAmount(0)->setBaseShippingTaxAmount(0);
|
|
}
|
|
}
|
|
} |