123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Tax\Model;
- use Magento\Framework\Api\Search\FilterGroup;
- use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Framework\Exception\CouldNotSaveException;
- use Magento\Framework\Exception\NoSuchEntityException;
- use Magento\Framework\Exception\AlreadyExistsException;
- use Magento\Tax\Api\Data\TaxRuleInterface;
- use Magento\Tax\Api\TaxRuleRepositoryInterface;
- use Magento\Tax\Api\Data\TaxRuleSearchResultsInterfaceFactory;
- use Magento\Tax\Model\Calculation\RuleFactory;
- use Magento\Tax\Model\Calculation\TaxRuleRegistry;
- use Magento\Tax\Model\ResourceModel\Calculation\Rule as ResourceRule;
- use Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection;
- use Magento\Tax\Model\ResourceModel\Calculation\Rule\CollectionFactory;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class TaxRuleRepository implements TaxRuleRepositoryInterface
- {
- /**
- * @var TaxRuleRegistry
- */
- protected $taxRuleRegistry;
- /**
- * @var TaxRuleSearchResultsInterfaceFactory
- */
- protected $taxRuleSearchResultsFactory;
- /**
- * @var RuleFactory
- */
- protected $taxRuleModelFactory;
- /**
- * @var CollectionFactory
- */
- protected $collectionFactory;
- /**
- * @var ResourceRule
- */
- protected $resource;
- /**
- * @var \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface
- */
- protected $joinProcessor;
- /**
- * @var CollectionProcessorInterface
- */
- private $collectionProcessor;
- /**
- * @param TaxRuleRegistry $taxRuleRegistry
- * @param TaxRuleSearchResultsInterfaceFactory $searchResultsFactory
- * @param RuleFactory $ruleFactory
- * @param CollectionFactory $collectionFactory
- * @param ResourceRule $resource
- * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
- * @param CollectionProcessorInterface | null $collectionProcessor
- */
- public function __construct(
- TaxRuleRegistry $taxRuleRegistry,
- TaxRuleSearchResultsInterfaceFactory $searchResultsFactory,
- RuleFactory $ruleFactory,
- CollectionFactory $collectionFactory,
- ResourceRule $resource,
- \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor,
- CollectionProcessorInterface $collectionProcessor = null
- ) {
- $this->taxRuleRegistry = $taxRuleRegistry;
- $this->taxRuleSearchResultsFactory = $searchResultsFactory;
- $this->taxRuleModelFactory = $ruleFactory;
- $this->collectionFactory = $collectionFactory;
- $this->resource = $resource;
- $this->joinProcessor = $joinProcessor;
- $this->collectionProcessor = $collectionProcessor ?: $this->getCollectionProcessor();
- }
- /**
- * {@inheritdoc}
- */
- public function get($ruleId)
- {
- return $this->taxRuleRegistry->retrieveTaxRule($ruleId);
- }
- /**
- * {@inheritdoc}
- */
- public function save(TaxRuleInterface $rule)
- {
- try {
- $ruleId = $rule->getId();
- if ($ruleId) {
- $this->taxRuleRegistry->retrieveTaxRule($ruleId);
- }
- $this->resource->save($rule);
- } catch (AlreadyExistsException $e) {
- throw $e;
- } catch (NoSuchEntityException $e) {
- throw $e;
- } catch (LocalizedException $e) {
- throw new CouldNotSaveException(__($e->getMessage()));
- }
- $this->taxRuleRegistry->registerTaxRule($rule);
- return $rule;
- }
- /**
- * {@inheritdoc}
- */
- public function delete(TaxRuleInterface $rule)
- {
- $ruleId = $rule->getId();
- $this->resource->delete($rule);
- $this->taxRuleRegistry->removeTaxRule($ruleId);
- return true;
- }
- /**
- * {@inheritdoc}
- */
- public function deleteById($ruleId)
- {
- $rule = $this->taxRuleRegistry->retrieveTaxRule($ruleId);
- return $this->delete($rule);
- }
- /**
- * {@inheritdoc}
- */
- public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria)
- {
- $searchResults = $this->taxRuleSearchResultsFactory->create();
- $searchResults->setSearchCriteria($searchCriteria);
- $collection = $this->collectionFactory->create();
- $this->joinProcessor->process($collection);
- $this->collectionProcessor->process($searchCriteria, $collection);
- $searchResults->setTotalCount($collection->getSize());
- $searchResults->setItems($collection->getItems());
- return $searchResults;
- }
- /**
- * Helper function that adds a FilterGroup to the collection.
- *
- * @param FilterGroup $filterGroup
- * @param Collection $collection
- * @return void
- * @deprecated 100.2.0
- * @throws \Magento\Framework\Exception\InputException
- */
- protected function addFilterGroupToCollection(FilterGroup $filterGroup, Collection $collection)
- {
- $fields = [];
- $conditions = [];
- foreach ($filterGroup->getFilters() as $filter) {
- $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
- $field = $this->translateField($filter->getField());
- $fields[] = $field;
- $conditions[] = [$condition => $filter->getValue()];
- switch ($field) {
- case 'rate.tax_calculation_rate_id':
- $collection->joinCalculationData('rate');
- break;
- case 'ctc.customer_tax_class_id':
- $collection->joinCalculationData('ctc');
- break;
- case 'ptc.product_tax_class_id':
- $collection->joinCalculationData('ptc');
- break;
- }
- }
- if ($fields) {
- $collection->addFieldToFilter($fields, $conditions);
- }
- }
- /**
- * Translates a field name to a DB column name for use in collection queries.
- *
- * @param string $field a field name that should be translated to a DB column name.
- * @deprecated 100.2.0
- * @return string
- */
- protected function translateField($field)
- {
- switch ($field) {
- case "id":
- return 'tax_calculation_rule_id';
- case 'tax_rate_ids':
- return 'tax_calculation_rate_id';
- case 'customer_tax_class_ids':
- return 'cd.customer_tax_class_id';
- case 'product_tax_class_ids':
- return 'cd.product_tax_class_id';
- case 'sort_order':
- return 'position';
- default:
- return $field;
- }
- }
- /**
- * Retrieve collection processor
- *
- * @deprecated 100.2.0
- * @return CollectionProcessorInterface
- */
- private function getCollectionProcessor()
- {
- if (!$this->collectionProcessor) {
- $this->collectionProcessor = \Magento\Framework\App\ObjectManager::getInstance()->get(
- 'Magento\Tax\Model\Api\SearchCriteria\TaxRuleCollectionProcessor'
- );
- }
- return $this->collectionProcessor;
- }
- }
|