@dipohog

Подсчитать количество задач у пользователя по фильтрам на битриксе?

Всех приветствую. Такая проблема, надо подсчитать количество задач у пользователя в битриксе по каждому фильтру, которые есть в массиве. Но это работает не так как надо. Массив после выполнения кода должен выглядеть так:
array(1) {
  [0]=>
  array(2) {
    ["FIO"]=>
    string(6) "Имя"
    ["count"]=>
    array(2) {
      [0]=>
      int(10),  // количество задач с первого фильтра
      [1]=>
      int(15), // количество задач со второго фильтра
      [2]=>
      int(5), // количество задач с третьего фильтра
    }
  }
}

Сам код:
Loader::includeModule('tasks');

    $arrayReportCount = array();
 
    // сам массив с фильтрами
    $filters = array(
        array(
            "STATUS" => array(3), // Задача выполняется
        ),
        array(
            "STATUS" => array(5), // Задача завершена
        ),
        array(
            "STATUS" => array(4), // Условно завершена (ждет контроля постановщиком).
        ),
    );

    foreach ($filters as $filter) {
        $taskCount = 0; // Устанавливаем начальное значение количества задач в 0
        $rsTasks = CTasks::GetList([], $filter);
        while ($arTasks = $rsTasks->Fetch()) {
            $taskCount++;
            $name = $arTasks["RESPONSIBLE_NAME"];

            // Проверяем, существует ли уже элемент с таким именем в массиве $arrayReportCount
            $exist = false;
            foreach ($arrayReportCount as $key => $report) {
                if ($report["FIO"] == $name) {
                    $arrayReportCount[$key]["count"][] = $taskCount; // Используем ссылку на элемент массива для изменения "count"
                    $exist = true;
                    break;
                }
            }
            if (!$exist) {
                $arrayReportCount[] = array(
                    "FIO" => $name,
                    "count" => array($taskCount)
                );
            }
        }
        
        // Проверяем, есть ли задачи в данном фильтре, иначе добавляем "count" = 0
        if ($taskCount === 0) {
            foreach ($arrayReportCount as $key => $report) {
                if (!isset($arrayReportCount[$key]["count"])) {
                    $arrayReportCount[$key]["count"] = array(0);
                    break;
                }
            }
        }
    }
    
    var_dump ($arrayReportCount);
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы