*/ namespace Magento\Tax\Model\ResourceModel\Report; class Collection extends \Magento\Sales\Model\ResourceModel\Report\Collection\AbstractCollection { /** * @var \Zend_Db_Expr */ protected $_periodFormat; /** * Aggregated Data Table * * @var string */ protected $_aggregationTable = 'tax_order_aggregated_created'; /** * @var array */ protected $_selectedColumns = []; /** * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Sales\Model\ResourceModel\Report $resource * @param mixed $connection */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Sales\Model\ResourceModel\Report $resource, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null ) { $resource->init($this->_aggregationTable); parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $resource, $connection); } /** * @return array */ protected function _getSelectedColumns() { if ('month' == $this->_period) { $this->_periodFormat = $this->getConnection()->getDateFormatSql('period', '%Y-%m'); } elseif ('year' == $this->_period) { $this->_periodFormat = $this->getConnection()->getDateFormatSql('period', '%Y'); } else { $this->_periodFormat = $this->getConnection()->getDateFormatSql('period', '%Y-%m-%d'); } if (!$this->isTotals() && !$this->isSubTotals()) { $this->_selectedColumns = [ 'period' => $this->_periodFormat, 'code' => 'code', 'percent' => 'percent', 'orders_count' => 'SUM(orders_count)', 'tax_base_amount_sum' => 'SUM(tax_base_amount_sum)', ]; } if ($this->isTotals()) { $this->_selectedColumns = $this->getAggregatedColumns(); } if ($this->isSubTotals()) { $this->_selectedColumns = $this->getAggregatedColumns() + ['period' => $this->_periodFormat]; } return $this->_selectedColumns; } /** * Apply custom columns before load * * @return $this */ protected function _beforeLoad() { $this->getSelect()->from($this->getResource()->getMainTable(), $this->_getSelectedColumns()); if (!$this->isTotals() && !$this->isSubTotals()) { $this->getSelect()->group([$this->_periodFormat, 'code', 'percent']); } if ($this->isSubTotals()) { $this->getSelect()->group([$this->_periodFormat]); } return parent::_beforeLoad(); } }