Files
ltsecurityinc/app/code/Lts/Taxjar/Observer/ResaleCertificateObserver.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);
}
}
}