%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/lib/integration/numerator/ |
| Current File : //home/bitrix/www/bitrix/modules/sale/lib/integration/numerator/orderuserordersnumbergenerator.php |
<?php
namespace Bitrix\Sale\Integration\Numerator;
use Bitrix\Main\Entity\ExpressionField;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Numerator\Generator\Contract\DynamicConfigurable;
use Bitrix\Main\Numerator\Generator\NumberGenerator;
use Bitrix\Sale\Internals\OrderTable;
use Bitrix\Sale\Registry;
/**
* Class OrderUserOrdersNumberGenerator
* @package Bitrix\Sale\Integration\Numerator
*/
class OrderUserOrdersNumberGenerator extends NumberGenerator implements DynamicConfigurable
{
protected $orderId;
const TEMPLATE_WORD_USER_ID_ORDERS_COUNT = "USER_ID_ORDERS_COUNT";
/** @inheritdoc */
public static function getTemplateWordsForParse()
{
return [
static::getPatternFor(static::TEMPLATE_WORD_USER_ID_ORDERS_COUNT),
];
}
/** @inheritdoc */
public static function getTemplateWordsSettings()
{
return [
static::getPatternFor(static::TEMPLATE_WORD_USER_ID_ORDERS_COUNT)
=> Loc::getMessage('BITRIX_SALE_INTEGRATION_NUMERATOR_ORDERUSERORDERSNUMBERGENERATOR_WORD_USER_ID_ORDERS_COUNT'),
];
}
/**
* @return string
*/
public static function getAvailableForType()
{
return Registry::REGISTRY_TYPE_ORDER;
}
/**
* @return string
*/
protected function getTableName()
{
return OrderTable::class;
}
/** @inheritdoc */
public function parseTemplate($template)
{
$tableName = $this->getTableName();
/** @var \Bitrix\Main\Entity\DataManager $tableName */
$userIdOfOrder = $tableName::query()
->addSelect('USER_ID')
->where('ID', $this->orderId)
->exec()
->fetch();
if ($userIdOfOrder)
{
$userIdOfOrder = intval($userIdOfOrder['USER_ID']);
$countOrderOfUser = $tableName::query()
->addSelect('ORDERS_COUNT')
->registerRuntimeField(
new ExpressionField(
'ORDERS_COUNT',
'COUNT(ID)'
)
)
->where('USER_ID', $userIdOfOrder)
->addGroup('USER_ID')
->exec()
->fetch();
if ($countOrderOfUser)
{
$numID = (intval($countOrderOfUser["ORDERS_COUNT"]) > 0) ? $countOrderOfUser["ORDERS_COUNT"] : 1;
$value = $userIdOfOrder . "_" . $numID;
}
else
{
$value = $userIdOfOrder . "_1";
}
}
else
{
$value = '';
}
return str_replace($this->getWordToReplace(), $value, $template);
}
/**
* @param array $config
*/
public function setDynamicConfig($config)
{
if (is_array($config) && array_key_exists('ORDER_ID', $config))
{
$this->orderId = $config['ORDER_ID'];
}
}
/**
* @return string
*/
protected function getWordToReplace()
{
return self::getPatternFor(self::TEMPLATE_WORD_USER_ID_ORDERS_COUNT);
}
}