Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
VatValidator.php
Go to the documentation of this file.
1 <?php
7 
9 {
15  protected $customerAddress;
16 
22  protected $customerVat;
23 
28  public function __construct(
29  \Magento\Customer\Helper\Address $customerAddress,
30  \Magento\Customer\Model\Vat $customerVat
31  ) {
32  $this->customerVat = $customerVat;
33  $this->customerAddress = $customerAddress;
34  }
35 
43  public function validate(\Magento\Quote\Model\Quote\Address $quoteAddress, $store)
44  {
45  $customerCountryCode = $quoteAddress->getCountryId();
46  $customerVatNumber = $quoteAddress->getVatId();
47 
48  $merchantCountryCode = $this->customerVat->getMerchantCountryCode();
49  $merchantVatNumber = $this->customerVat->getMerchantVatNumber();
50 
51  $validationResult = null;
52  if ($this->customerAddress->hasValidateOnEachTransaction(
53  $store
54  ) ||
55  $customerCountryCode != $quoteAddress->getValidatedCountryCode() ||
56  $customerVatNumber != $quoteAddress->getValidatedVatNumber()
57  ) {
58  // Send request to gateway
59  $validationResult = $this->customerVat->checkVatNumber(
60  $customerCountryCode,
61  $customerVatNumber,
62  $merchantVatNumber !== '' ? $merchantCountryCode : '',
63  $merchantVatNumber
64  );
65 
66  // Store validation results in corresponding quote address
67  $quoteAddress->setVatIsValid((int)$validationResult->getIsValid());
68  $quoteAddress->setVatRequestId($validationResult->getRequestIdentifier());
69  $quoteAddress->setVatRequestDate($validationResult->getRequestDate());
70  $quoteAddress->setVatRequestSuccess($validationResult->getRequestSuccess());
71  $quoteAddress->setValidatedVatNumber($customerVatNumber);
72  $quoteAddress->setValidatedCountryCode($customerCountryCode);
73  $quoteAddress->save();
74  } else {
75  // Restore validation results from corresponding quote address
76  $validationResult = new \Magento\Framework\DataObject(
77  [
78  'is_valid' => (int)$quoteAddress->getVatIsValid(),
79  'request_identifier' => (string)$quoteAddress->getVatRequestId(),
80  'request_date' => (string)$quoteAddress->getVatRequestDate(),
81  'request_success' => (bool)$quoteAddress->getVatRequestSuccess(),
82  ]
83  );
84  }
85 
86  return $validationResult;
87  }
88 
96  public function isEnabled(\Magento\Quote\Model\Quote\Address $quoteAddress, $store)
97  {
98  $configAddressType = $this->customerAddress->getTaxCalculationAddressType($store);
99 
100  // When VAT is based on billing address then Magento have to handle only billing addresses
101  $additionalBillingAddressCondition = $configAddressType ==
102  \Magento\Customer\Model\Address\AbstractAddress::TYPE_BILLING ? $configAddressType !=
103  $quoteAddress->getAddressType() : false;
104 
105  // Handle only addresses that corresponds to VAT configuration
106  if (!$this->customerAddress->isVatValidationEnabled($store) || $additionalBillingAddressCondition) {
107  return false;
108  }
109 
110  return true;
111  }
112 }
__construct(\Magento\Customer\Helper\Address $customerAddress, \Magento\Customer\Model\Vat $customerVat)
isEnabled(\Magento\Quote\Model\Quote\Address $quoteAddress, $store)
validate(\Magento\Quote\Model\Quote\Address $quoteAddress, $store)