![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-tax/Model/Calculation/ |
<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Tax\Model\Calculation; use Magento\Directory\Model\CountryFactory; use Magento\Directory\Model\RegionFactory; use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface; use Magento\Framework\Api\Search\FilterGroup; use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface; use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Framework\App\ObjectManager; use Magento\Framework\Exception\InputException; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Validator\NotEmpty; use Magento\Framework\Validator\ValidateException; use Magento\Framework\Validator\ValidatorChain; use Magento\Tax\Api\Data\TaxRateInterface; use Magento\Tax\Api\Data\TaxRuleSearchResultsInterfaceFactory; use Magento\Tax\Api\TaxRateRepositoryInterface; use Magento\Tax\Model\Api\SearchCriteria\TaxRateCollectionProcessor; use Magento\Tax\Model\Calculation\Rate\Converter; use Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class RateRepository implements TaxRateRepositoryInterface { public const MESSAGE_TAX_RATE_ID_IS_NOT_ALLOWED = 'id is not expected for this request.'; /** * Tax rate model and tax rate data object converter * * @var Converter */ protected $converter; /** * Tax rate registry * * @var RateRegistry */ protected $rateRegistry; /** * @var TaxRuleSearchResultsInterfaceFactory */ private $taxRateSearchResultsFactory; /** * @var RateFactory */ private $rateFactory; /** * @var \Magento\Directory\Model\CountryFactory */ protected $countryFactory; /** * @var \Magento\Directory\Model\RegionFactory */ protected $regionFactory; /** * @var \Magento\Tax\Model\ResourceModel\Calculation\Rate */ protected $resourceModel; /** * @var JoinProcessorInterface */ protected $joinProcessor; /** * @var \Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface */ private $collectionProcessor; /** * @param Converter $converter * @param RateRegistry $rateRegistry * @param TaxRuleSearchResultsInterfaceFactory $taxRateSearchResultsFactory * @param RateFactory $rateFactory * @param CountryFactory $countryFactory * @param RegionFactory $regionFactory * @param \Magento\Tax\Model\ResourceModel\Calculation\Rate $rateResource * @param JoinProcessorInterface $joinProcessor * @param CollectionProcessorInterface|null $collectionProcessor */ public function __construct( Converter $converter, RateRegistry $rateRegistry, TaxRuleSearchResultsInterfaceFactory $taxRateSearchResultsFactory, RateFactory $rateFactory, CountryFactory $countryFactory, RegionFactory $regionFactory, \Magento\Tax\Model\ResourceModel\Calculation\Rate $rateResource, JoinProcessorInterface $joinProcessor, CollectionProcessorInterface $collectionProcessor = null ) { $this->converter = $converter; $this->rateRegistry = $rateRegistry; $this->taxRateSearchResultsFactory = $taxRateSearchResultsFactory; $this->rateFactory = $rateFactory; $this->countryFactory = $countryFactory; $this->regionFactory = $regionFactory; $this->resourceModel = $rateResource; $this->joinProcessor = $joinProcessor; $this->collectionProcessor = $collectionProcessor ?? ObjectManager::getInstance()->get( // phpcs:ignore Magento2.PHP.LiteralNamespaces 'Magento\Tax\Model\Api\SearchCriteria\TaxRateCollectionProcessor' ); } /** * @inheritdoc */ public function save(TaxRateInterface $taxRate) { if ($taxRate->getId()) { $this->rateRegistry->retrieveTaxRate($taxRate->getId()); } $this->validate($taxRate); $taxRateTitles = $this->converter->createTitleArrayFromServiceObject($taxRate); try { $this->resourceModel->save($taxRate); $taxRate->saveTitles($taxRateTitles); } catch (LocalizedException $e) { throw $e; } $this->rateRegistry->registerTaxRate($taxRate); return $taxRate; } /** * @inheritdoc */ public function get($rateId) { return $this->rateRegistry->retrieveTaxRate($rateId); } /** * @inheritdoc */ public function delete(TaxRateInterface $taxRate) { return $this->resourceModel->delete($taxRate); } /** * @inheritdoc */ public function deleteById($rateId) { $rateModel = $this->rateRegistry->retrieveTaxRate($rateId); $this->delete($rateModel); $this->rateRegistry->removeTaxRate($rateId); return true; } /** * @inheritdoc */ public function getList(SearchCriteriaInterface $searchCriteria) { /** @var \Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection $collection */ $collection = $this->rateFactory->create()->getCollection(); $this->joinProcessor->process($collection); $collection->joinRegionTable(); $this->collectionProcessor->process($searchCriteria, $collection); $taxRate = []; /** @var \Magento\Tax\Model\Calculation\Rate $taxRateModel */ foreach ($collection as $taxRateModel) { $taxRate[] = $taxRateModel; } return $this->taxRateSearchResultsFactory->create() ->setItems($taxRate) ->setTotalCount($collection->getSize()) ->setSearchCriteria($searchCriteria); } /** * Helper function that adds a FilterGroup to the collection. * * @param FilterGroup $filterGroup * @param Collection $collection * @return void * @deprecated 100.2.0 * @see we don't recommend this approach anymore */ protected function addFilterGroupToCollection(FilterGroup $filterGroup, Collection $collection) { $fields = []; $conditions = []; foreach ($filterGroup->getFilters() as $filter) { $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq'; $fields[] = $this->translateField($filter->getField()); $conditions[] = [$condition => $filter->getValue()]; } if ($fields) { $collection->addFieldToFilter($fields, $conditions); } } /** * Translates a field name to a DB column name for use in collection queries. * * @deprecated 100.2.0 * @see we don't recommend this approach anymore * @param string $field a field name that should be translated to a DB column name. * @return string */ protected function translateField($field) { switch ($field) { case Rate::KEY_REGION_NAME: return 'region_table.code'; default: return "main_table." . $field; } } /** * Validate tax rate * * @param TaxRateInterface $taxRate * @return void * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @throws InputException|ValidateException */ private function validate(TaxRateInterface $taxRate) { $exception = new InputException(); $countryCode = $taxRate->getTaxCountryId(); if (!ValidatorChain::is($countryCode, NotEmpty::class)) { $exception->addError(__('"%fieldName" is required. Enter and try again.', ['fieldName' => 'country_id'])); } elseif (!ValidatorChain::is( $this->countryFactory->create()->loadByCode($countryCode)->getId(), NotEmpty::class )) { $exception->addError(__( 'Invalid value of "%value" provided for the %fieldName field.', [ 'fieldName' => 'country_id', 'value' => $countryCode ] )); } $regionCode = $taxRate->getTaxRegionId(); // if regionCode eq 0 (all regions *), do not validate with existing region list if (ValidatorChain::is($regionCode, NotEmpty::class) && $regionCode != "0" && !ValidatorChain::is($this->regionFactory->create()->load($regionCode)->getId(), NotEmpty::class) ) { $exception->addError(__( 'Invalid value of "%value" provided for the %fieldName field.', [ 'fieldName' => 'region_id', 'value' => $regionCode ] )); } if (!is_numeric($taxRate->getRate()) || $taxRate->getRate() < 0) { $exception->addError( __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'percentage_rate']) ); } if ($taxRate->getCode() === null || !ValidatorChain::is(trim($taxRate->getCode() ?? ''), NotEmpty::class) ) { $exception->addError(__('"%fieldName" is required. Enter and try again.', ['fieldName' => 'code'])); } if ($taxRate->getZipIsRange()) { $zipRangeFromTo = [ 'zip_from' => $taxRate->getZipFrom(), 'zip_to' => $taxRate->getZipTo(), ]; foreach ($zipRangeFromTo as $key => $value) { if (!is_numeric($value) || $value < 0) { $exception->addError( __( 'Invalid value of "%value" provided for the %fieldName field.', ['fieldName' => $key, 'value' => $value] ) ); } } if ($zipRangeFromTo['zip_from'] > $zipRangeFromTo['zip_to']) { $exception->addError(__('Range To should be equal or greater than Range From.')); } } else { if ($taxRate->getTaxPostcode() === null || !ValidatorChain::is(trim($taxRate->getTaxPostcode() ?? ''), NotEmpty::class) ) { $exception->addError( __('"%fieldName" is required. Enter and try again.', ['fieldName' => 'postcode']) ); } } if ($exception->wasErrorAdded()) { throw $exception; } } }