- Модуль: bizproc
- Путь к файлу: ~/bitrix/modules/bizproc/lib/automation/engine/conditiongroup.php
- Класс: BitrixBizprocAutomationEngineConditionGroup
- Вызов: ConditionGroup::evaluateByDocument
public function evaluateByDocument(array $documentType, array $documentId, array $document = null): bool
{
if (empty($this->items))
{
return true;
}
if ($this->getType() === static::TYPE_MIXED)
{
throw new NotSupportedException('Mixed conditions can`t be evaluated by document only');
}
$documentService = CBPRuntime::getRuntime(true)->getDocumentService();
if ($document === null)
{
$document = $documentService->getDocument($documentId, $documentType);
}
$result = [0 => true];
$i = 0;
$joiner = static::JOINER_AND;
$this->evaluateResults = [];
foreach ($this->items as $item)
{
/** @var Condition $condition */
$condition = $item[0];
$conditionField = $condition->getField();
$conditionResult = true;
$fld = $document[$conditionField] ?? null;
$fieldType = $this->getFieldTypeObject($documentService, $documentType, $conditionField);
if (!$condition->checkValue($fld, $fieldType, $documentId))
{
$conditionResult = false;
}
if ($joiner == static::JOINER_OR)
{
++$i;
$result[$i] = $conditionResult;
}
elseif (!$conditionResult)
{
$result[$i] = false;
}
$this->evaluateResults[] = [
'condition' => $condition->toArray(),
'joiner' => $joiner,
'fieldValue' => $fld ? $fieldType->formatValue($fld) : null,
'result' => $conditionResult ? 'Y' : 'N',
];
$joiner = ($item[1] === static::JOINER_OR) ? static::JOINER_OR : static::JOINER_AND;
}
return (count(array_filter($result)) > 0);
}