- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/activity/provider/calltracker.php
- Класс: Bitrix\Crm\Activity\Provider\CallTracker
- Вызов: CallTracker::onAfterUpdate
static function onAfterUpdate( int $id, array $changedFields, array $oldActivityFields, array $newActivityFields, array $params = null ) { // counter should be updated only if deadline, completed flag or responsible was changed // also we try to guess, was the activity counted in counter before or not $prevDeadline = $oldActivityFields['DEADLINE'] ?? null; $curDeadline = $newActivityFields['DEADLINE'] ?? null; $deadlineChanged = ($prevDeadline !== $curDeadline); $prevDeadline = $prevDeadline ? new \Bitrix\Main\Type\DateTime($prevDeadline) : null; $curDeadline = $curDeadline ? new \Bitrix\Main\Type\DateTime($curDeadline) : null; $prevCompleted = ($oldActivityFields['COMPLETED'] ?? '') == 'Y'; $curCompleted = ($newActivityFields['COMPLETED'] ?? '') == 'Y'; $completedChanged = ($prevCompleted !== $curCompleted); $prevResponsibleId = (int)($oldActivityFields['RESPONSIBLE_ID'] ?? 0); $curResponsibleId = (int)($newActivityFields['RESPONSIBLE_ID'] ?? 0); $responsibleIdChanged = ($prevResponsibleId !== $curResponsibleId); if (!$completedChanged && !$deadlineChanged && !$responsibleIdChanged) { // nothing important was changed return; } $wasCounterUpdatedEarlier = self::needUpdateCounter($prevCompleted, $prevDeadline); $needUpdateCounterNow = self::needUpdateCounter($curCompleted, $curDeadline); $needIncrease = ($completedChanged || $deadlineChanged) && !$wasCounterUpdatedEarlier && $needUpdateCounterNow ; $needDecrease = ($completedChanged || $deadlineChanged) && $wasCounterUpdatedEarlier && !$needUpdateCounterNow ; if ($responsibleIdChanged) { $needIncrease = false; $needDecrease = $wasCounterUpdatedEarlier; } if ($curResponsibleId > 0) { $counter = \Bitrix\Crm\Counter\EntityCounterFactory::createCallTrackerCounter($curResponsibleId); if ($needIncrease) { $counter->increase(); } if ($needDecrease) { $counter->decrease(); } } if ($responsibleIdChanged && $prevResponsibleId > 0 && $needUpdateCounterNow) { $prevUserCounter = \Bitrix\Crm\Counter\EntityCounterFactory::createCallTrackerCounter($prevResponsibleId); $prevUserCounter->increase(); } }