- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/cashbox/checkmanager.php
- Класс: BitrixSaleCashboxCheckManager
- Вызов: CheckManager::getPrintableChecks
static function getPrintableChecks(array $cashboxIds, array $orderIds = array())
{
$result = array();
$con = MainApplication::getConnection();
$dbLocRes = $con->query("SELECT GET_LOCK('get_check_list', 0) as L");
$locResult = $dbLocRes->fetch();
if ($locResult["L"] == "0")
{
return $result;
}
$filter = array(
'LINK_PARAMS' => '',
'CHECK2CASHBOX.CASHBOX_ID' => $cashboxIds,
array(
'LOGIC' => 'OR',
array(
'=STATUS' => 'N',
'DATE_PRINT_START' => ''
),
array(
'=STATUS' => 'P',
' new TypeDateTime()
)
)
);
if ($orderIds)
{
$filter['ORDER_ID'] = $orderIds;
}
$limit = count($cashboxIds)*self::CHECK_LIMIT_RECORDS;
$dbRes = self::getList(
array(
'select' => array('*', 'AVAILABLE_CASHBOX_ID' => 'CHECK2CASHBOX.CASHBOX_ID'),
'filter' => $filter,
'limit' => $limit,
'runtime' => array(
new MainEntityExpressionField(
'MAX_DT_REPEAT_CHECK',
'DATE_ADD(DATE_PRINT_START, INTERVAL '.self::CHECK_RESENDING_TIME.' MINUTE)',
null,
array(
'data_type' => 'datetime'
)
)
)
)
);
if ($data = $dbRes->fetch())
{
$i = 0;
do
{
if (!isset($result[$data['ID']]))
{
$i++;
if ($i > self::CHECK_LIMIT_RECORDS)
break;
$result[$data['ID']] = $data;
$result[$data['ID']]['CASHBOX_LIST'] = array();
}
$result[$data['ID']]['CASHBOX_LIST'][] = $data['AVAILABLE_CASHBOX_ID'];
}
while ($data = $dbRes->fetch());
foreach ($result as $checkId => $item)
{
if ($item['STATUS'] === 'P')
{
$now = new TypeDateTime();
$nowTs = $now->getTimestamp();
/** @var TypeDateTime $dateStartPrint */
$dateStartPrint = $item['DATE_PRINT_START'];
$dateStartPrintTs = $dateStartPrint->getTimestamp();
if ($nowTs - $dateStartPrintTs > self::MIN_TIME_FOR_SWITCH_CASHBOX)
{
$availableCashboxIds = array_diff($item['CASHBOX_LIST'], array($item['CASHBOX_ID']));
if ($availableCashboxIds)
{
$result[$checkId]['CASHBOX_ID'] = Manager::chooseCashbox($availableCashboxIds);
CashboxCheckTable::update($checkId, array('CASHBOX_ID' => $result[$checkId]['CASHBOX_ID']));
}
}
else
{
if ($item['CASHBOX_ID'] > 0 && !in_array($item['CASHBOX_ID'], $cashboxIds))
unset($result[$checkId]);
}
continue;
}
$result[$checkId]['CASHBOX_ID'] = Manager::chooseCashbox($item['CASHBOX_LIST']);
CashboxCheckTable::update($checkId, array('STATUS' => 'P', 'DATE_PRINT_START' => new TypeDateTime(), 'CASHBOX_ID' => $result[$checkId]['CASHBOX_ID']));
}
}
$con->query("SELECT RELEASE_LOCK('get_check_list')");
return $result;
}