![]() 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/ResourceModel/Calculation/Rule/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Tax\Model\ResourceModel\Calculation\Rule; /** * Tax rule collection * * @author Magento Core Team <[email protected]> */ class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization * * @return void */ protected function _construct() { $this->_init( \Magento\Tax\Model\Calculation\Rule::class, \Magento\Tax\Model\ResourceModel\Calculation\Rule::class ); } /** * Process loaded collection data * * @return $this */ protected function _afterLoadData() { parent::_afterLoadData(); $this->addCustomerTaxClassesToResult(); $this->addProductTaxClassesToResult(); $this->addRatesToResult(); return $this; } /** * Join calculation data to result * * @param string $alias table alias * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection */ public function joinCalculationData($alias) { $this->getSelect()->joinLeft( [$alias => $this->getTable('tax_calculation')], "main_table.tax_calculation_rule_id = {$alias}.tax_calculation_rule_id", [] ); $this->getSelect()->group('main_table.tax_calculation_rule_id'); return $this; } /** * Join tax data to collection * * @param string $itemTable * @param string $primaryJoinField * @param string $secondaryJoinField * @param string $titleField * @param string $dataField * @param string $dataTitleField * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection */ protected function _add( $itemTable, $primaryJoinField, $secondaryJoinField, $titleField, $dataField, $dataTitleField = '' ) { $children = []; foreach ($this as $rule) { $children[$rule->getId()] = []; } if (!empty($children)) { $joinCondition = sprintf('item.%s = calculation.%s', $secondaryJoinField, $primaryJoinField); $select = $this->getConnection()->select()->from( ['calculation' => $this->getTable('tax_calculation')], ['calculation.tax_calculation_rule_id'] )->join( ['item' => $this->getTable($itemTable)], $joinCondition, ["item.{$titleField}", "item.{$secondaryJoinField}"] )->where( 'calculation.tax_calculation_rule_id IN (?)', array_keys($children) )->distinct( true ); $data = $this->getConnection()->fetchAll($select); foreach ($data as $row) { $children[$row['tax_calculation_rule_id']][$row[$secondaryJoinField]] = $row[$titleField]; } } foreach ($this as $rule) { if (isset($children[$rule->getId()])) { $rule->setData($dataField, array_keys($children[$rule->getId()])); if (!empty($dataTitleField)) { $rule->setData($dataTitleField, $children[$rule->getId()]); } } } return $this; } /** * Add product tax classes to result * * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection */ public function addProductTaxClassesToResult() { return $this->_add('tax_class', 'product_tax_class_id', 'class_id', 'class_name', 'product_tax_classes'); } /** * Add customer tax classes to result * * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection */ public function addCustomerTaxClassesToResult() { return $this->_add('tax_class', 'customer_tax_class_id', 'class_id', 'class_name', 'customer_tax_classes'); } /** * Add rates to result * * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection */ public function addRatesToResult() { return $this->_add( 'tax_calculation_rate', 'tax_calculation_rate_id', 'tax_calculation_rate_id', 'code', 'tax_rates', 'tax_rates_codes' ); } /** * Add class type filter * * @param string $type * @param int $id * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection * @throws \Magento\Framework\Exception\LocalizedException */ public function setClassTypeFilter($type, $id) { switch ($type) { case \Magento\Tax\Model\ClassModel::TAX_CLASS_TYPE_PRODUCT: $field = 'cd.product_tax_class_id'; break; case \Magento\Tax\Model\ClassModel::TAX_CLASS_TYPE_CUSTOMER: $field = 'cd.customer_tax_class_id'; break; default: throw new \Magento\Framework\Exception\LocalizedException(__('Invalid type supplied')); break; } $this->joinCalculationData('cd'); $this->addFieldToFilter($field, $id); return $this; } }