Current Path : /home/bitrix/ext_www/community.yacl.site/about/ |
Current File : /home/bitrix/ext_www/community.yacl.site/about/index_bug.php |
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle(""); if (in_array(20, CUser::GetUserGroupArray())) { LocalRedirect('/projects/'); } $APPLICATION->SetTitle(false); $APPLICATION->SetPageProperty('template_body_class', 'body_main_page'); $APPLICATION->SetPageProperty('title', 'Главная'); $APPLICATION->SetPageProperty('browser_title', 'Главная'); $entity = \Bitrix\Iblock\Model\Section::compileEntityByIblock(IBLOCK_DEPARTMENT); $headedDepartment = $entity::getList([ 'filter' => ['ACTIVE' => 'Y', 'IBLOCK_ID' => IBLOCK_DEPARTMENT, 'UF_HEAD' => $USER->GetID()], 'select' => ['NAME', 'ID'] ])->fetch(); $isHead = false; $currentDepartment = 0; if ($headedDepartment) { $isHead = true; $currentDepartment = $headedDepartment['ID']; } $commonUser = !$isHead && !$USER->IsAdmin() && !in_array(33, CUser::GetUserGroupArray()); $notifies = []; if ($commonUser) { \Bitrix\Main\Loader::includeModule('im'); $notify = new CIMNotify; $notifies = array_chunk($notify->GetNotifyList(), 3)[0]; } if ($commonUser) { $reportLink = '/company/personal/report_time/'; } else { $reportLink = '/company/personal/report_time_all/'; } $selectedDepartments = $_GET['departments']; if (!$selectedDepartments && $isHead && !in_array(33, CUser::GetUserGroupArray())) { $selectedDepartments = [$currentDepartment]; } $selectedDate = $_GET['date-range']; if (strpos($selectedDate, '—') !== false) { $dates = explode(' — ', $selectedDate); $minDate = $dates[0]; $maxDate = $dates[1]; } elseif (!$selectedDate) { $minDate = date('01.m.Y', time()); if (date('d') < 7) { $minDate = date('d.m.Y', time() - 86400 * 7); } $maxDate = date('d.m.Y', time()); $selectedDate = "$minDate — $maxDate"; } else { $minDate = $maxDate = htmlspecialchars($selectedDate); } $userIds = []; if ($selectedDepartments) { $userList = \Bitrix\Main\UserTable::getList([ 'filter' => ['@UF_DEPARTMENT' => $selectedDepartments, 'ACTIVE' => 'Y'], 'select' => ['ID'] ]); while ($user = $userList->fetch()) { $userIds[] = $user['ID']; } } elseif (!$USER->IsAdmin()) { $userIds = [$USER->GetID()]; } $timeFilter = [ '>=CREATED_DATE' => new \Bitrix\Main\Type\DateTime($minDate), '<=CREATED_DATE' => \Bitrix\Main\Type\DateTime::createFromTimestamp(strtotime($maxDate) + 86399), ]; if (!empty($userIds)) { $timeFilter['@USER_ID'] = $userIds; } $times = \Bitrix\Tasks\Internals\Task\ElapsedTimeTable::getList([ 'filter' => $timeFilter, 'select' => ['TASK_ID'], 'group' => ['TASK_ID'] ])->fetchAll(); $timedTaskIds = []; foreach ($times as $item) { $timedTaskIds[] = $item['TASK_ID']; } if (!empty($timedTaskIds)) { $tasks['expired'] = \Bitrix\Tasks\Internals\TaskTable::getList([ 'filter' => [ '@ID' => $timedTaskIds, 'ZOMBIE' => 'N', '!STATUS' => CTasks::STATE_COMPLETED, '<=DEADLINE' => new \Bitrix\Main\Type\Datetime() ], 'select' => ['ID'] ])->getSelectedRowsCount(); $tasks['completed'] = $taskList = \Bitrix\Tasks\Internals\TaskTable::getList([ 'filter' => [ '@ID' => $timedTaskIds, 'ZOMBIE' => 'N', 'STATUS' => CTasks::STATE_COMPLETED, ], 'select' => ['ID', 'DEADLINE'] ])->getSelectedRowsCount(); $tasks['progress'] = \Bitrix\Tasks\Internals\TaskTable::getList([ 'filter' => [ '@ID' => $timedTaskIds, 'ZOMBIE' => 'N', 'STATUS' => CTasks::STATE_IN_PROGRESS, [ '>DEADLINE' => new \Bitrix\Main\Type\Datetime(), 'LOGIC' => 'OR', 'DEADLINE' => false ] ], 'select' => ['ID'] ])->getSelectedRowsCount(); $tasks['other'] = \Bitrix\Tasks\Internals\TaskTable::getList([ 'filter' => [ '@ID' => $timedTaskIds, 'ZOMBIE' => 'N', '!STATUS' => [CTasks::STATE_COMPLETED, CTasks::STATE_IN_PROGRESS], [ '>DEADLINE' => new \Bitrix\Main\Type\Datetime(), 'LOGIC' => 'OR', 'DEADLINE' => false ] ], 'select' => ['ID'] ])->getSelectedRowsCount(); } else { $tasks['expired'] = $tasks['completed'] = $tasks['progress'] = $tasks['other'] = 0; } $tasks['total'] = $tasks['expired'] + $tasks['completed'] + $tasks['progress'] + $tasks['other']; $timeList = \Bitrix\Tasks\Internals\Task\ElapsedTimeTable::getList([ 'select' => ['SUM', 'DAY'], 'runtime' => [ new Bitrix\Main\Entity\ExpressionField('SUM', 'SUM(SECONDS)'), new Bitrix\Main\Entity\ExpressionField('DAY', "DATE(CREATED_DATE)") ], 'order' => ['DAY' => 'ASC'], 'filter' => $timeFilter, 'group' => ['DAY'] ])->fetchAll(); $chartData = []; foreach ($timeList as $time) { if ($time['DAY'] instanceof Bitrix\Main\Type\Date) $chartData[] = [ 'date' => $time['DAY']->format('Y-m-d'), 'value' => round ($time['SUM'] / 3600), ]; }; $timeList = \Bitrix\Tasks\Internals\Task\ElapsedTimeTable::getList([ 'select' => ['SUM', 'USER_ID'], 'runtime' => [ new Bitrix\Main\Entity\ExpressionField('SUM', 'SUM(SECONDS)'), // new Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(TASK_ID)'), ], 'order' => ['SUM' => 'DESC'], 'filter' => $timeFilter, 'group' => ['USER_ID'], 'limit' => 10, ])->fetchAll(); $topUserList = []; $topUserIds = []; foreach ($timeList as $time) { $topUserIds[] = $time['USER_ID']; $topUserList[$time['USER_ID']] = [ 'id' => $time['USER_ID'], // 'tasks' => $time['CNT'], 'time' => $time['SUM'], ]; } if (!empty($topUserIds)) { $newTimeFilter = $timeFilter; $newTimeFilter['@USER_ID'] = $topUserIds; $times = \Bitrix\Tasks\Internals\Task\ElapsedTimeTable::getList([ 'filter' => $newTimeFilter, 'select' => ['TASK_ID', 'USER_ID'], 'group' => ['USER_ID'] ])->fetchAll(); foreach ($times as $item) { $topUserList[$item['USER_ID']]['tasks'][$item['TASK_ID']] = $item['TASK_ID']; } foreach ($topUserList as $userId => &$userInfo) { $userInfo['tasks'] = count($userInfo['tasks']); } } ?> <?$APPLICATION->IncludeComponent( "dgtl:main.filters", "main", Array( 'SHOW_ALL' => 'N', 'SHOW_DEPARTMENTS_FILTER' => 'Y', 'CACHE_TYPE' => 'N', 'CACHE_TIME' => 0, 'SELECTED_DEPARTMENTS' => $selectedDepartments, ) );?> <div class="custom-main-page"> <div class="hero-grid"> <div class="hero-grid-item hero-grid-item--middle"> <div class="hero-grid-holder"> <a href="/about/news/"><h3 class="hero-grid-title" title="Новости компании">Новости компании</h3></a> <?$APPLICATION->IncludeComponent( "bitrix:news.list", "main_news", Array( "ACTIVE_DATE_FORMAT" => "d.m.Y", "ADD_SECTIONS_CHAIN" => "N", "AJAX_MODE" => "N", "AJAX_OPTION_ADDITIONAL" => "", "AJAX_OPTION_HISTORY" => "N", "AJAX_OPTION_JUMP" => "N", "AJAX_OPTION_STYLE" => "N", "CACHE_FILTER" => "N", "CACHE_GROUPS" => "N", "CACHE_TIME" => "36000000", "CACHE_TYPE" => "A", "CHECK_DATES" => "Y", "DETAIL_URL" => "/about/news/official.php?ID=#ELEMENT_ID#", "DISPLAY_BOTTOM_PAGER" => "N", "DISPLAY_TOP_PAGER" => "N", "FIELD_CODE" => array("NAME","PREVIEW_PICTURE","DETAIL_PICTURE",""), "FILTER_NAME" => "", "HIDE_LINK_WHEN_NO_DETAIL" => "N", "IBLOCK_ID" => "2", "IBLOCK_TYPE" => "news", "INCLUDE_IBLOCK_INTO_CHAIN" => "N", "INCLUDE_SUBSECTIONS" => "N", "MESSAGE_404" => "", "NEWS_COUNT" => "3", "PAGER_BASE_LINK_ENABLE" => "N", "PAGER_DESC_NUMBERING" => "N", "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", "PAGER_SHOW_ALL" => "N", "PAGER_SHOW_ALWAYS" => "N", "PAGER_TEMPLATE" => "", "PAGER_TITLE" => GetMessage('VEB_SHOW_MORE'), "PARENT_SECTION" => "", "PARENT_SECTION_CODE" => "", "PREVIEW_TRUNCATE_LEN" => 70, "PROPERTY_CODE" => array("",""), "SET_BROWSER_TITLE" => "N", "SET_LAST_MODIFIED" => "N", "SET_META_DESCRIPTION" => "N", "SET_META_KEYWORDS" => "N", "SET_STATUS_404" => "N", "SET_TITLE" => "N", "SHOW_404" => "N", "SORT_BY1" => "ACTIVE_FROM", "SORT_BY2" => $arParams["SORT_BY2"], "SORT_ORDER1" => "DESC", "SORT_ORDER2" => $arParams["SORT_ORDER2"], "STRICT_SECTION_CHECK" => "N" ), $component, Array( 'HIDE_ICONS' => 'Y', 'ACTIVE_COMPONENT' => 'Y' ) );?> </div> </div> <div class="hero-grid-item hero-grid-item--middle"> <div class="hero-grid-holder"> <h3 class="hero-grid-title" title="Отчёт по задачам">Отчёт по задачам</h3> <div class="report-tasks"> <div class="report-tasks-chart"> <div class="chart-holder"> <div id="chart-tasks"> </div> <div class="chart-holder-total"> <div class="chart-holder-label"> Всего задач </div> <div class="chart-holder-value" data-number="<?=$tasks['total'];?>"></div> </div> </div> </div> <div class="report-tasks-legend"> <ul class="list"> <li class="list-item"> <div class="list-item-label -blue"> <a href="<?=$reportLink . '?' . http_build_query(['status' => CTasks::STATE_COMPLETED, 'departments' => $selectedDepartments, 'date-range' => $selectedDate])?>"> Выполненные </a> </div> <span class="list-item-value"><?=$tasks['completed'];?></span> </li> <li class="list-item"> <div class="list-item-label -red"> <a href="<?=$reportLink . '?' . http_build_query(['status' => CTasks::METASTATE_EXPIRED, 'departments' => $selectedDepartments, 'date-range' => $selectedDate]);?>"> Просроченные </a> </div> <span class="list-item-value"><?=$tasks['expired'];?></span> </li> <li class="list-item"> <div class="list-item-label -orange"> <a href="<?=$reportLink . '?' . http_build_query(['status' => CTasks::STATE_IN_PROGRESS, 'departments' => $selectedDepartments, 'date-range' => $selectedDate]);?>"> В работе </a> </div> <span class="list-item-value"><?=$tasks['progress'];?></span> </li> <li class="list-item"> <div class="list-item-label -gray"> <a href="<?=$reportLink . '?' . http_build_query(['status' => 'other', 'departments' => $selectedDepartments, 'date-range' => $selectedDate])?>"> Остальные </a> </div> <span class="list-item-value"><?=$tasks['other'];?></span> </li> </ul> </div> </div> </div> </div> <div class="hero-grid-item hero-grid-item--small"> <div class="hero-grid-holder"> <a href="/about/news/br.php"><h3 class="hero-grid-title" title="Бизнес-ритм. Информация с ОС ГД">Бизнес-ритм. Информация с ОС ГД</h3></a> <?$APPLICATION->IncludeComponent( "bitrix:news.list", "main_br", Array( "ACTIVE_DATE_FORMAT" => "d.m.Y", "ADD_SECTIONS_CHAIN" => "Y", "AJAX_MODE" => "N", "AJAX_OPTION_ADDITIONAL" => "", "AJAX_OPTION_HISTORY" => "N", "AJAX_OPTION_JUMP" => "N", "AJAX_OPTION_STYLE" => "N", "CACHE_FILTER" => "N", "CACHE_GROUPS" => "N", "CACHE_TIME" => "36000000", "CACHE_TYPE" => "A", "CHECK_DATES" => "Y", "DETAIL_URL" => "/about/news/br.php?ELEMENT_ID=#ELEMENT_ID#", "DISPLAY_BOTTOM_PAGER" => "N", "DISPLAY_TOP_PAGER" => "N", "FIELD_CODE" => array("NAME","PREVIEW_PICTURE","DETAIL_PICTURE","PREVIEW_TEXT"), "FILTER_NAME" => "", "HIDE_LINK_WHEN_NO_DETAIL" => "N", "IBLOCK_ID" => "1", "IBLOCK_TYPE" => "news", "INCLUDE_IBLOCK_INTO_CHAIN" => "N", "INCLUDE_SUBSECTIONS" => "Y", "MESSAGE_404" => "", "NEWS_COUNT" => "3", "PAGER_BASE_LINK_ENABLE" => "N", "PAGER_DESC_NUMBERING" => "N", "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", "PAGER_SHOW_ALL" => "N", "PAGER_SHOW_ALWAYS" => "N", "PAGER_TEMPLATE" => "", "PAGER_TITLE" => GetMessage('VEB_SHOW_MORE'), "PARENT_SECTION" => "", "PARENT_SECTION_CODE" => "", "PREVIEW_TRUNCATE_LEN" => '70', "PROPERTY_CODE" => array("",""), "SET_BROWSER_TITLE" => "N", "SET_LAST_MODIFIED" => "N", "SET_META_DESCRIPTION" => "N", "SET_META_KEYWORDS" => "N", "SET_STATUS_404" => "N", "SET_TITLE" => "N", "SHOW_404" => "N", "SORT_BY1" => "ACTIVE_FROM", "SORT_BY2" => $arParams["SORT_BY2"], "SORT_ORDER1" => "DESC", "SORT_ORDER2" => $arParams["SORT_ORDER2"], "STRICT_SECTION_CHECK" => "N" ), $component, Array( 'HIDE_ICONS' => 'Y', 'ACTIVE_COMPONENT' => 'Y' ) );?> </div> </div> <div class="hero-grid-item hero-grid-item--small"> <div class="hero-grid-holder"> <h3 class="hero-grid-title" title="График затраченного времени">График затраченного времени</h3> <div class="tasks-time"> <div class="tasks-time-label"> Часы </div> <div id="chart-time"> </div> </div> </div> </div> <div class="hero-grid-item hero-grid-item--large"> <?if (!$commonUser) {?> <div class="hero-grid-holder"> <h3 class="hero-grid-title" title="Загрузка сотрудников">Загрузка сотрудников</h3> <div class="main-staff"> <?foreach ($topUserList as $user) {?> <a class="main-staff-item" href="/company/personal/user/<?=$user['id']?>/"> <? // $photoId = getUserInfoById($user['id'], ['PERSONAL_PHOTO'])['PERSONAL_PHOTO']; ?> <div class="main-staff-image"> <?=getUserPhoto($user['id'], true);?> </div> <div class="main-staff-title"> <div> <?=getUserLinkById($user['id'], true)?> </div> Задач: <?=intval($user['tasks']);?> </div> <div class="main-staff-time"> <?=formatSecondsToHoursWithMinutes($user['time']);?> </div> </a> <?}?> </div> </div> <?} else {?> <div class="hero-grid-holder"> <h3 class="hero-grid-title" title="Загрузка сотрудников">Последние уведомления</h3> <div class="main-staff"> <?foreach ($notifies as $item) {?> <div class="main-staff-item" href="/company/personal/user/<?=$item['userId']?>/"> <? // $photoId = getUserInfoById($user['id'], ['PERSONAL_PHOTO'])['PERSONAL_PHOTO']; ?> <div class="main-staff-image"> <img src="<?=getUserPhoto($item['userId']);?>" alt=""> </div> <div class="main-staff-title"> <div> <?=getUserLinkById($item['userId'], true)?> </div> <?=($item['text']);?> </div> <div class="main-staff-time"> <?=$item['date']->format("d.m.y");?><br> <?=$item['date']->format("H:i:s");?> </div> </div> <?}?> </div> </div> <?}?> </div> </div> </div> <? //CJSCore::Init(['amcharts']); \Bitrix\Main\Page\Asset::getInstance()->addJs('/bitrix/js/main/amcharts/4.8.5/core.js'); \Bitrix\Main\Page\Asset::getInstance()->addJs('/bitrix/js/main/amcharts/4.8.5/charts.js'); \Bitrix\Main\Page\Asset::getInstance()->addJs('/bitrix/js/main/amcharts/4.8.5/themes/animated.js'); ?> <script> am4core.ready(function () { am4core.addLicense("CH49955073"); am4core.useTheme(am4themes_animated); /* Chart 1 */ var chart = am4core.create("chart-tasks", am4charts.PieChart); var pieSeries = chart.series.push(new am4charts.PieSeries()); pieSeries.dataFields.value = "value"; chart.innerRadius = am4core.percent(58); pieSeries.slices.template.strokeWidth = 0; pieSeries.labels.template.disabled = true; pieSeries.tooltip.disabled = true; pieSeries.ticks.template.disabled = true; pieSeries.scale = 1.25; pieSeries.colors.list = [ am4core.color("#3e4ea6"), am4core.color("#ff559a"), am4core.color("#ffa25d"), am4core.color("rgb(238, 242, 244)") ]; var slice = pieSeries.slices.template; slice.states.getKey("hover").properties.scale = 1; slice.states.getKey("active").properties.shiftRadius = 0; chart.data = [{ "value": <?=intval($tasks['completed'])?> }, { "value": <?=intval($tasks['expired'])?> }, { "value": <?=intval($tasks['progress'])?> }, { "value": <?=intval($tasks['other'])?> } ]; /* Chart 2 */ var chart2 = am4core.create("chart-time", am4charts.XYChart); chart2.colors.currentColor.rgb.r = 59; chart2.colors.currentColor.rgb.g = 112; chart2.colors.currentColor.rgb.b = 235; var chartData = <?=CUtil::PhpToJSObject($chartData);?>; chart2.data = chartData; var categoryAxis = chart2.xAxes.push(new am4charts.DateAxis()); categoryAxis.dataFields.category = "date"; categoryAxis.renderer.minGridDistance = 37; categoryAxis.fontSize = 15; categoryAxis.paddingTop = 16; categoryAxis.renderer.grid.template.strokeWidth = 1; categoryAxis.renderer.grid.template.strokeOpacity = 1; categoryAxis.renderer.grid.template.strokeDasharray = 2; categoryAxis.renderer.grid.template.stroke = '#012345'; categoryAxis.dateFormats.setKey("day", "dd.MM"); categoryAxis.periodChangeDateFormats.setKey("day", "dd.MM"); categoryAxis.dateFormats.setKey("week", "dd.MM"); categoryAxis.periodChangeDateFormats.setKey("week", "dd.MM"); categoryAxis.dateFormats.setKey("month", "dd.MM"); categoryAxis.periodChangeDateFormats.setKey("month", "dd.MM"); var valueAxis = chart2.yAxes.push(new am4charts.ValueAxis()); valueAxis.baseValue = 0; valueAxis.min = 0; valueAxis.fontSize = 18; valueAxis.paddingRight = 30; valueAxis.renderer.baseGrid.disabled = true; valueAxis.renderer.grid.template.strokeWidth = 1; valueAxis.renderer.grid.template.strokeOpacity = 1; valueAxis.renderer.grid.template.strokeDasharray = 2; valueAxis.renderer.grid.template.stroke = '#012345'; var series = chart2.series.push(new am4charts.LineSeries()); series.dataFields.valueY = "value"; series.dataFields.dateX = "date"; series.stroke = '#3b70eb' series.fillOpacity = 1; series.strokeWidth = 7; series.tensionX = 0.9; series.tensionY = 0.9; series.defaultState.transitionDuration = 2000; var bullet = series.bullets.push(new am4charts.Bullet()); bullet.tooltipText = "{valueY}"; chart2.cursor = new am4charts.XYCursor(); var gradient = new am4core.LinearGradientModifier(); gradient.opacities = [0.5, 0.3, 0, 0]; gradient.offsets = [0, 0.1, 0.9, 1]; gradient.gradient.rotation = 90; series.segments.template.fillModifier = gradient; }); $(function () { function numbersAnimate($elem) { var number = parseInt($elem.data('number')); var start = 0; var speed = 8; var step = 10; if ($(window).height() < 768) { speed = 4; step = 100; } if (number > 0 && $elem.html() === '') { var interval = setInterval(function () { if (start < number) { var count = Math.max(Math.pow(step, String(start).length - 2), Math.round(step / 10)); start += count; // console.log(start, count, String(start).length); $elem.html(start); } else { $elem.html($elem.data('number')); clearInterval(interval); } }, speed); } } numbersAnimate($('.chart-holder-value')); }); </script> <style> .pagetitle-wrap { display: none !important; } </style> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>