Ordermanager/src/Application/Model/d3ordermanagerlist.php

288 lines
10 KiB
PHP
Raw Normal View History

2017-12-20 13:44:53 +01:00
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
*
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
*
2020-12-21 12:11:34 +01:00
* https://www.d3data.de
2017-12-20 13:44:53 +01:00
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
2020-12-21 12:11:34 +01:00
* @link https://www.oxidmodule.com
2017-12-20 13:44:53 +01:00
*/
2022-09-01 14:14:13 +02:00
declare(strict_types=1);
2021-03-15 15:18:38 +01:00
2017-12-20 13:44:53 +01:00
namespace D3\Ordermanager\Application\Model;
2020-12-21 12:11:34 +01:00
use D3\Ordermanager\Application\Model\d3ordermanager as Manager;
use D3\Ordermanager\Application\Model\d3ordermanagerlist as ManagerList;
2019-10-22 08:46:10 +02:00
use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod;
2017-12-20 13:44:53 +01:00
use D3\ModCfg\Application\Model\Configuration\d3modprofilelist;
2018-02-20 09:37:52 +01:00
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use Doctrine\DBAL\DBALException;
2020-05-14 16:48:16 +02:00
use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Query\QueryBuilder;
2019-05-15 11:31:56 +02:00
use Exception;
2018-02-20 09:37:52 +01:00
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\StandardException;
2020-05-14 16:48:16 +02:00
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Database\QueryBuilderFactoryInterface;
use Psr\Container\ContainerInterface;
2017-12-20 13:44:53 +01:00
class d3ordermanagerlist extends d3modprofilelist
{
/**
* List Object class name
*
* @var string
*/
2020-12-21 12:11:34 +01:00
protected $_sObjectsInListName = Manager::class;
2017-12-20 13:44:53 +01:00
/**
* @param $sFolderId
2020-12-21 12:11:34 +01:00
* @return ManagerList
2018-02-20 09:37:52 +01:00
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
2019-05-15 11:31:56 +02:00
* @throws Exception
2017-12-20 13:44:53 +01:00
*/
2021-03-15 15:18:38 +01:00
public function d3GetManuallyManagerJobsByFolder($sFolderId): d3ordermanagerlist
2017-12-20 13:44:53 +01:00
{
2020-12-21 12:11:34 +01:00
/** @var Manager $oListObject */
2017-12-20 13:44:53 +01:00
$oListObject = $this->getBaseObject();
2020-05-14 16:48:16 +02:00
$fieldList = array_map('trim', explode(',', $oListObject->getSelectFields()));
2017-12-20 13:44:53 +01:00
2020-05-14 16:48:16 +02:00
/** @var QueryBuilder $queryBuilder */
$queryBuilder = $this->getDIContainer()->get(QueryBuilderFactoryInterface::class)->create();
$queryBuilder->select($fieldList)
->from($oListObject->getViewName())
->orderBy($oListObject->getViewName().".oxsort", "ASC")
->addOrderBy($oListObject->getViewName().".oxfolder", "ASC");
2017-12-20 13:44:53 +01:00
2020-05-14 16:48:16 +02:00
$queryBuilder = $this->d3AddActiveSnippet($oListObject, $queryBuilder, true, false);
$queryBuilder = $this->d3AddFolderSelection($sFolderId, $oListObject, $queryBuilder);
$this->selectString($queryBuilder->getSQL(), $queryBuilder->getParameters());
2017-12-20 13:44:53 +01:00
2020-12-21 12:11:34 +01:00
/** @var $oManager Manager */
2017-12-20 13:44:53 +01:00
foreach ($this->getArray() as $sKey => $oManager) {
if (false == $this->canExecutedManually($oManager)) {
$this->offsetUnset($sKey);
}
}
return $this;
}
2019-07-09 10:28:15 +02:00
/**
2020-12-21 12:11:34 +01:00
* @return ManagerList
2019-07-09 10:28:15 +02:00
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws Exception
*/
2021-03-15 15:18:38 +01:00
public function d3GetOrderSaveTriggeredManagerTasks(): d3ordermanagerlist
2019-07-09 10:28:15 +02:00
{
2019-10-22 08:46:10 +02:00
if ($this->d3GetSet()->isDemo() ||
in_array(
true,
2022-09-01 14:14:13 +02:00
array_map([$this->d3GetSet(),'getLicenseConfigData'], [d3ordermanager_conf::SERIAL_BIT_STANDARD_EDITION])
2019-10-22 08:46:10 +02:00
)
) {
2020-12-21 12:11:34 +01:00
/** @var Manager $oListObject */
2019-10-22 08:46:10 +02:00
$oListObject = $this->getBaseObject();
2020-05-14 16:48:16 +02:00
$fieldList = array_map('trim', explode(',', $oListObject->getSelectFields()));
/** @var QueryBuilder $queryBuilder */
$queryBuilder = $this->getDIContainer()->get(QueryBuilderFactoryInterface::class)->create();
$queryBuilder->select($fieldList)
->from($oListObject->getViewName())
->where(
$queryBuilder->expr()->eq(
$oListObject->getViewName() . '.D3_OM_ORDERSAVETRIGGERED',
$queryBuilder->createNamedParameter(1)
)
)
->orderBy($oListObject->getViewName() . ".oxsort", 'ASC')
->addOrderBy($oListObject->getViewName() . ".oxfolder", "ASC");
2019-10-22 08:46:10 +02:00
2021-03-15 15:18:38 +01:00
$queryBuilder = $this->d3AddActiveSnippet($oListObject, $queryBuilder, false, false);
2020-05-14 16:48:16 +02:00
$this->selectString($queryBuilder->getSQL(), $queryBuilder->getParameters());
2019-10-22 08:46:10 +02:00
2020-12-21 12:11:34 +01:00
/** @var $oManager Manager */
2019-10-22 08:46:10 +02:00
foreach ($this->getArray() as $sKey => $oManager) {
if (false == $oManager->getLicenseActive()) {
$this->offsetUnset($sKey);
}
2019-07-09 10:28:15 +02:00
}
}
return $this;
}
/**
2020-12-21 12:11:34 +01:00
* @return ManagerList
2019-07-09 10:28:15 +02:00
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
2019-10-22 08:46:10 +02:00
* @throws Exception
2019-07-09 10:28:15 +02:00
*/
2021-03-15 15:18:38 +01:00
public function d3GetOrderFinishTriggeredManagerTasks(): d3ordermanagerlist
2019-07-09 10:28:15 +02:00
{
2019-10-22 08:46:10 +02:00
if ($this->d3GetSet()->isDemo() ||
in_array(
true,
2022-09-01 14:14:13 +02:00
array_map([$this->d3GetSet(),'getLicenseConfigData'], [d3ordermanager_conf::SERIAL_BIT_STANDARD_EDITION])
2019-10-22 08:46:10 +02:00
)
) {
2020-12-21 12:11:34 +01:00
/** @var Manager $oListObject */
2019-10-22 08:46:10 +02:00
$oListObject = $this->getBaseObject();
2020-05-14 16:48:16 +02:00
$fieldList = array_map('trim', explode(',', $oListObject->getSelectFields()));
/** @var QueryBuilder $queryBuilder */
$queryBuilder = $this->getDIContainer()->get(QueryBuilderFactoryInterface::class)->create();
$queryBuilder->select($fieldList)
->from($oListObject->getViewName())
->where(
$queryBuilder->expr()->eq(
$oListObject->getViewName() . '.D3_OM_ORDERFINISHTRIGGERED',
$queryBuilder->createNamedParameter(1)
)
)
->orderBy($oListObject->getViewName() . ".oxsort", 'ASC')
->addOrderBy($oListObject->getViewName() . ".oxfolder", 'ASC');
2019-10-22 08:46:10 +02:00
2021-03-15 15:18:38 +01:00
$queryBuilder = $this->d3AddActiveSnippet($oListObject, $queryBuilder, false, false);
2020-05-14 16:48:16 +02:00
$this->selectString($queryBuilder->getSQL(), $queryBuilder->getParameters());
2019-10-22 08:46:10 +02:00
2020-12-21 12:11:34 +01:00
/** @var $oManager Manager */
2019-10-22 08:46:10 +02:00
foreach ($this->getArray() as $sKey => $oManager) {
if (false == $oManager->getLicenseActive()) {
$this->offsetUnset($sKey);
}
2019-07-09 10:28:15 +02:00
}
}
return $this;
}
2017-12-20 13:44:53 +01:00
/**
2020-12-21 12:11:34 +01:00
* @param Manager $oManager
2017-12-20 13:44:53 +01:00
*
* @return bool
2018-02-20 09:37:52 +01:00
* @throws DatabaseConnectionException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws DBALException
* @throws DatabaseErrorException
* @throws StandardException
2017-12-20 13:44:53 +01:00
*/
2021-03-15 15:18:38 +01:00
public function canExecutedManually(Manager $oManager): bool
2017-12-20 13:44:53 +01:00
{
return $oManager->getFieldData('D3_OM_EXECMANUALLY') &&
$oManager->getLicenseActive();
}
/**
2020-12-21 12:11:34 +01:00
* @param Manager $oListObject
2020-05-14 16:48:16 +02:00
* @param QueryBuilder $queryBuilder
* @param bool $blManually
2020-12-21 12:11:34 +01:00
* @param bool $blUseCommonActiveCheck (oxactive field)
2017-12-20 13:44:53 +01:00
*
2020-05-14 16:48:16 +02:00
* @return QueryBuilder
2018-02-20 09:37:52 +01:00
* @throws DatabaseConnectionException
2019-05-15 11:31:56 +02:00
* @throws Exception
2017-12-20 13:44:53 +01:00
*/
2021-03-15 15:18:38 +01:00
public function d3AddActiveSnippet(Manager $oListObject, QueryBuilder $queryBuilder, $blManually = false, $blUseCommonActiveCheck = true): QueryBuilder
2017-12-20 13:44:53 +01:00
{
$sActiveSnippet = $oListObject->getSqlActiveSnippet();
2019-05-15 11:31:56 +02:00
if ($blUseCommonActiveCheck && $sActiveSnippet) {
2020-05-14 16:48:16 +02:00
$queryBuilder->andWhere($sActiveSnippet);
2017-12-20 13:44:53 +01:00
}
if ($blManually) {
2020-12-21 12:11:34 +01:00
$sFieldName = "D3_OM_EXECMANUALLY";
2017-12-20 13:44:53 +01:00
} else {
2020-12-21 12:11:34 +01:00
$sFieldName = "oxactive";
2017-12-20 13:44:53 +01:00
}
2020-05-14 16:48:16 +02:00
$queryBuilder->andWhere(
$queryBuilder->expr()->eq(
$oListObject->getViewName() . "." . $sFieldName,
2022-09-01 14:14:13 +02:00
$queryBuilder->createNamedParameter(1, ParameterType::INTEGER)
2020-05-14 16:48:16 +02:00
)
);
2017-12-20 13:44:53 +01:00
2020-05-14 16:48:16 +02:00
return $queryBuilder;
2017-12-20 13:44:53 +01:00
}
/**
2020-05-14 16:48:16 +02:00
* @param $sFolderId
2020-12-21 12:11:34 +01:00
* @param Manager $oListObject
2020-05-14 16:48:16 +02:00
* @param QueryBuilder $queryBuilder
2017-12-20 13:44:53 +01:00
*
2020-05-14 16:48:16 +02:00
* @return QueryBuilder
2017-12-20 13:44:53 +01:00
*/
2021-03-15 15:18:38 +01:00
public function d3AddFolderSelection($sFolderId, Manager $oListObject, QueryBuilder $queryBuilder): QueryBuilder
2017-12-20 13:44:53 +01:00
{
if ($sFolderId && $sFolderId != '-1') {
2020-05-14 16:48:16 +02:00
$queryBuilder->andWhere(
$queryBuilder->expr()->eq(
$oListObject->getViewName() . ".oxfolder",
$queryBuilder->createNamedParameter($sFolderId)
)
);
2017-12-20 13:44:53 +01:00
}
2020-05-14 16:48:16 +02:00
return $queryBuilder;
2017-12-20 13:44:53 +01:00
}
/**
* @param bool|string $iCronJobId
*/
public function setCronJobId($iCronJobId)
{
2020-12-21 12:11:34 +01:00
/** @var Manager $oBaseObject */
2017-12-20 13:44:53 +01:00
$oBaseObject = $this->getBaseObject();
$oBaseObject->setCronJobIdFilter($iCronJobId);
}
2019-10-22 08:46:10 +02:00
/**
2021-03-15 15:18:38 +01:00
* return type can't defined, because of unmockable d3_cfg_mod class, use stdClass in test
2019-10-22 08:46:10 +02:00
* @return d3_cfg_mod
*/
public function d3GetSet()
{
2020-12-21 12:11:34 +01:00
/** @var d3_cfg_mod $set */
$set = d3GetModCfgDIC()->get('d3.ordermanager.modcfg');
return $set;
2019-10-22 08:46:10 +02:00
}
2020-05-14 16:48:16 +02:00
/**
* @return ContainerInterface
*/
2021-03-15 15:18:38 +01:00
public function getDIContainer(): ContainerInterface
2020-05-14 16:48:16 +02:00
{
return ContainerFactory::getInstance()->getContainer();
}
2017-12-20 13:44:53 +01:00
}