userContext = $userContextInterface; $this->statusMapper = $statusMapper; $this->calculatedStatusSql = $calculatedStatusSql; parent::__construct( $entityFactory, $logger, $fetchStrategy, $eventManager, $mainTable, $resourceModel, $identifierName ); } /** * {@inheritdoc} */ protected function _initSelect() { $this->getSelect()->from( ['main_table' => $this->getMainTable()], [ '*', 'status' => $this->calculatedStatusSql->get($this->getTable('magento_operation')) ] )->where( 'user_id=?', $this->userContext->getUserId() ); return $this; } /** * {@inheritdoc} */ protected function _afterLoad() { /** @var BulkSummaryInterface $item */ foreach ($this->getItems() as $item) { $item->setStatus($this->statusMapper->operationStatusToBulkSummaryStatus($item->getStatus())); } return parent::_afterLoad(); } /** * {@inheritdoc} */ public function addFieldToFilter($field, $condition = null) { if ($field == 'status') { if (is_array($condition)) { foreach ($condition as $value) { $this->operationStatus = $this->statusMapper->bulkSummaryStatusToOperationStatus($value); if (is_array($this->operationStatus)) { foreach ($this->operationStatus as $statusValue) { $this->getSelect()->orHaving('status = ?', $statusValue); } continue; } $this->getSelect()->having('status = ?', $this->operationStatus); } } return $this; } return parent::addFieldToFilter($field, $condition); } /** * {@inheritdoc} */ public function getSelectCountSql() { $select = parent::getSelectCountSql(); $select->columns(['status' => $this->calculatedStatusSql->get($this->getTable('magento_operation'))]); //add grouping by status if filtering by status was executed if (isset($this->operationStatus)) { $select->group('status'); } return $select; } }