/** * Initiate tax classes. * * @return $this */ protected function initTaxClasses() { if (empty($this->taxClasses)) { $collection = $this->collectionFactory->create(); $collection->addFieldToFilter('class_type', ClassModel::TAX_CLASS_TYPE_PRODUCT); /* @var $collection \Magento\Tax\Model\Resource\TaxClass\Collection */ foreach ($collection as $taxClass) { $this->taxClasses[$taxClass->getClassName()] = $taxClass->getId(); } } return $this; }
/** * Retrieve tax classes which match a specific criteria. * * @param \Magento\Framework\Service\V1\Data\SearchCriteria $searchCriteria * @return \Magento\Tax\Service\V1\Data\TaxClassSearchResults containing Data\TaxClass * @throws \Magento\Framework\Exception\InputException */ public function searchTaxClass(\Magento\Framework\Service\V1\Data\SearchCriteria $searchCriteria) { $this->searchResultsBuilder->setSearchCriteria($searchCriteria); /** @var TaxClassCollection $collection */ $collection = $this->taxClassCollectionFactory->create(); /** TODO: This method duplicates functionality of search methods in other services and should be refactored. */ foreach ($searchCriteria->getFilterGroups() as $group) { $this->addFilterGroupToCollection($group, $collection); } $this->searchResultsBuilder->setTotalCount($collection->getSize()); $sortOrders = $searchCriteria->getSortOrders(); if ($sortOrders) { foreach ($searchCriteria->getSortOrders() as $field => $direction) { $collection->addOrder($field, $direction == SearchCriteria::SORT_ASC ? 'ASC' : 'DESC'); } } $collection->setCurPage($searchCriteria->getCurrentPage()); $collection->setPageSize($searchCriteria->getPageSize()); $taxClasses = []; /** @var \Magento\Tax\Model\ClassModel $taxClassModel */ foreach ($collection->getItems() as $taxClassModel) { $taxClasses[] = $this->converter->createTaxClassData($taxClassModel); } $this->searchResultsBuilder->setItems($taxClasses); return $this->searchResultsBuilder->create(); }
/** * {@inheritdoc} */ public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria) { $searchResults = $this->searchResultsFactory->create(); $searchResults->setSearchCriteria($searchCriteria); /** @var TaxClassCollection $collection */ $collection = $this->taxClassCollectionFactory->create(); foreach ($searchCriteria->getFilterGroups() as $group) { $this->addFilterGroupToCollection($group, $collection); } $searchResults->setTotalCount($collection->getSize()); $sortOrders = $searchCriteria->getSortOrders(); /** @var SortOrder $sortOrder */ if ($sortOrders) { foreach ($searchCriteria->getSortOrders() as $sortOrder) { $collection->addOrder($sortOrder->getField(), $sortOrder->getDirection() == SearchCriteria::SORT_ASC ? 'ASC' : 'DESC'); } } $collection->setCurPage($searchCriteria->getCurrentPage()); $collection->setPageSize($searchCriteria->getPageSize()); $searchResults->setItems($collection->getItems()); return $searchResults; }
/** * Gets the tax rates by type * * @param \Magento\Framework\Object $request * @param string|array $fieldName * @param string|array $type * @return array */ protected function _getRates($request, $fieldName, $type) { $result = array(); /** @var $classes \Magento\Tax\Model\Resource\TaxClass\Collection */ $classes = $this->_classesFactory->create(); $classes->addFieldToFilter('class_type', $type)->load(); foreach ($classes as $class) { $request->setData($fieldName, $class->getId()); $result[$class->getId()] = $this->getRate($request); } return $result; }