* @link https://www.oxidmodule.com */ declare(strict_types=1); namespace D3\Ordermanager\Application\Controller\Admin; use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_main; use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; use D3\ModCfg\Application\Model\Exception\d3ParameterNotFoundException; use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; use D3\Ordermanager\Application\Model\Actions\d3ordermanager_actionlist as ActionListModel; use D3\Ordermanager\Application\Model\d3ordermanager as Manager; use D3\Ordermanager\Application\Model\d3ordermanager_configurationcheck; use D3\Ordermanager\Application\Model\d3ordermanager_vars as VariablesTrait; use D3\Ordermanager\Application\Model\Exceptions\d3ActionRequirementInterface; use D3\Ordermanager\Application\Model\Requirements\d3ordermanager_requirementlist as RequirementListModel; use D3\Ordermanager\Application\Controller\Admin\d3_cfg_ordermanageritem_action as ItemActionController; use D3\Ordermanager\Application\Controller\Admin\d3_cfg_ordermanageritem_requ as ItemRequirementController; use Doctrine\DBAL\DBALException; use OxidEsales\Eshop\Application\Model\Order as ItemModel; use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; use OxidEsales\Eshop\Core\Exception\StandardException; use OxidEsales\Eshop\Core\Language; use OxidEsales\Eshop\Core\Request; use OxidEsales\Eshop\Core\UtilsView; use ReflectionException; class d3_cfg_ordermanageritem_overview extends d3_cfg_mod_main { use VariablesTrait; protected $_sSetModId = 'd3_ordermanager'; protected $_sModId = 'd3_ordermanager'; protected $_sThisTemplate = "d3_cfg_ordermanageritem_overview.tpl"; protected $_sMenuItemTitle = 'd3mxordermanager'; protected $_sMenuSubItemTitle = 'd3mxordermanager_items'; protected $_blUseOwnOxid = true; protected $_aNaviItems = [ 'new' => [ 'sScript' => 'top.oxid.admin.editThis( -1 );return false;', 'sTranslationId' => 'D3_TOOLTIPS_NEWORDERMANAGER', ], ]; protected $_sD3ObjectClass = Manager::class; protected $_sRequestData; /** * @return string * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws StandardException */ public function render(): string { try { d3GetModCfgDIC()->set( d3ordermanager_configurationcheck::class.'.args.ordermanager', $this->getManager() ); /** @var d3ordermanager_configurationcheck $confCheck */ $confCheck = d3GetModCfgDIC()->get(d3ordermanager_configurationcheck::class); $confCheck->checkThrowingExceptions(d3ordermanager_configurationcheck::REQUIREMENTS_AND_ACTIONS); } catch (d3ActionRequirementInterface $e) { /** @var UtilsView $utilsView */ $utilsView = d3GetModCfgDIC()->get('d3ox.ordermanager.'.UtilsView::class); $utilsView->addErrorToDisplay($e); } return parent::render(); } /** * @return ItemActionController */ public function getActionAdminController(): d3_cfg_ordermanageritem_action { /** @var ItemActionController $action */ $action = d3GetModCfgDIC()->get(ItemActionController::class); return $action; } /** * @return ItemRequirementController */ public function getRequirementAdminController(): d3_cfg_ordermanageritem_requ { /** @var ItemRequirementController $requ */ $requ = d3GetModCfgDIC()->get(ItemRequirementController::class); return $requ; } /** * @param $method * @param $arguments * * @return mixed */ public function __call($method, $arguments) { $oActionView = $this->getActionAdminController(); if (method_exists($oActionView, $method)) { return call_user_func_array([ $oActionView, $method], $arguments); } $oRequView = $this->getRequirementAdminController(); if (method_exists($oRequView, $method)) { return call_user_func_array([ $oRequView, $method], $arguments); } return parent::__call($method, $arguments); } /** * @param Manager $oManager * @return RequirementListModel */ public function getRequirementListObject(Manager $oManager): RequirementListModel { d3GetModCfgDIC()->set( RequirementListModel::class.'.args.ordermanager', $oManager ); /** @var RequirementListModel $requList */ $requList = d3GetModCfgDIC()->get(RequirementListModel::class); return $requList; } /** * @return array */ public function getRequirementList(): array { /** @var Manager $oManager */ $oManager = $this->getProfile(); $oRequList = $this->getRequirementListObject($oManager); $oRequList->setRequirements($oManager->getConfiguration()->getRequirementIdList()); return $oRequList->getRequirementList(); } /** * @param Manager $oManager * @return ActionListModel */ public function getActionListObject(Manager $oManager): ActionListModel { d3GetModCfgDIC()->set( ActionListModel::class.'.args.ordermanager', $oManager ); d3GetModCfgDIC()->set( ActionListModel::class.'.args.order', d3GetModCfgDIC()->get('d3ox.ordermanager.'.ItemModel::class) ); /** @var ActionListModel $actionlist */ $actionlist = d3GetModCfgDIC()->get(ActionListModel::class); return $actionlist; } /** * @return array */ public function getActionList(): array { /** @var Manager $oManager */ $oManager = $this->getProfile(); $oActionList = $this->getActionListObject($oManager); $oActionList->setActions($oManager->getConfiguration()->getActionIdList()); return $oActionList->getActionList(); } /** * @return bool */ public function isEditMode(): bool { return false; } public function setRequestData() { /** @var Request $request */ $request = d3GetModCfgDIC()->get('d3ox.ordermanager.'.Request::class); $this->_sRequestData = $request->getRequestEscapedParameter('sRequestData'); } /** * @return string */ protected function _getRequestData(): string { return $this->_sRequestData; } /** * @return int * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws d3ParameterNotFoundException */ public function getToFinishedCount(): int { /** @var Request $request */ $request = d3GetModCfgDIC()->get('d3ox.ordermanager.'.Request::class); $requestCount = $request->getRequestEscapedParameter('toFinishedCount'); if ($this->canRequestData(__FUNCTION__)) { /** @var Manager $oProfile */ $oProfile = $this->getProfile(); return $oProfile->getListGenerator()->getConcernedItemCount(); } elseif ($this->canUseRequestData($requestCount)) { return (int) $requestCount; } return 0; } /** * @return int * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws ReflectionException * @throws d3ParameterNotFoundException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ public function getFinishedCount(): int { /** @var Request $request */ $request = d3GetModCfgDIC()->get('d3ox.ordermanager.'.Request::class); $requestCount = $request->getRequestEscapedParameter('finishedCount'); if ($this->canRequestData(__FUNCTION__)) { /** @var Manager $oProfile */ $oProfile = $this->getProfile(); return $oProfile->getListGenerator()->getFinishedItemCount(); } elseif ($this->canUseRequestData($requestCount)) { return (int) $requestCount; } return 0; } /** * @return int * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws d3ParameterNotFoundException */ public function getFinishedMonthCount(): int { /** @var Request $request */ $request = d3GetModCfgDIC()->get('d3ox.ordermanager.'.Request::class); $requestCount = $request->getRequestEscapedParameter('finishedMonthCount'); if ($this->canRequestData(__FUNCTION__)) { /** @var Manager $oProfile */ $oProfile = $this->getProfile(); return $oProfile->getListGenerator()->getFinishedMonthItemCount(); } elseif ($this->canUseRequestData($requestCount)) { return (int) $requestCount; } return 0; } /** * @return int * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws d3ParameterNotFoundException */ public function getNotFinishedCount(): int { /** @var Request $request */ $request = d3GetModCfgDIC()->get('d3ox.ordermanager.'.Request::class); $requestCount = $request->getRequestEscapedParameter('notFinishedCount'); if ($this->canRequestData(__FUNCTION__)) { /** @var Manager $oProfile */ $oProfile = $this->getProfile(); return $oProfile->getListGenerator()->getNotFinishedItemCount(); } elseif ($this->canUseRequestData($requestCount)) { return (int) $requestCount; } return 0; } /** * @param $sFunctionName * * @return bool * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function canRequestData($sFunctionName): bool { return !$this->getDataOnDemand() || $this->_getRequestData() == $sFunctionName; } /** * @param $requestCount * * @return bool * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException */ public function canUseRequestData($requestCount): bool { return $this->getDataOnDemand() && isset($requestCount) && false !== $requestCount; } /** * @return bool * @throws DatabaseConnectionException * @throws DBALException * @throws DatabaseErrorException */ public function getDataOnDemand(): bool { return (bool) $this->d3GetSet()->getValue('blCalcStatOnDemand'); } /** * @param $sRequestName * @param $sFunctionName * * @return bool */ public function hasRequestedData($sRequestName, $sFunctionName): bool { /** @var Request $request */ $request = d3GetModCfgDIC()->get('d3ox.ordermanager.'.Request::class); $iRequestCount = (string) $request->getRequestEscapedParameter($sRequestName); if ((bool) strlen($iRequestCount) || $this->_getRequestData() == $sFunctionName) { return true; } return false; } /** * @return Manager */ public function getManager(): Manager { /** @var Manager $manager */ $manager = d3GetModCfgDIC()->get(Manager::class); $manager->load($this->getEditObjectId()); return $manager; } /** * @return Language */ public function getLang(): Language { /** @var Language $lang */ $lang = d3GetModCfgDIC()->get('d3ox.ordermanager.'.Language::class); return $lang; } /** * @param $sManagerId * @return string */ public function getManagerTitle($sManagerId): string { $oManager = $this->getManager(); if ($oManager->load($sManagerId)) { return $oManager->getFieldData('oxtitle'); } return $this->getLang()->translateString('D3_ORDERMANAGER_REQU_OTHERJOB_UNKNOWNJOBID').' "'.$sManagerId.'"'; } }