Your IP : 216.73.216.170


Current Path : /home/bitrix/ext_www/remote.office.yacl.site/about/
Upload File :
Current File : /home/bitrix/ext_www/remote.office.yacl.site/about/index-v1.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());
    $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()];
}

$tasks['expired'] = $taskList = CTasks::GetList([], [
    'CREATED_BY' => $userIds,
    '>=CREATED_DATE' => $minDate,
    '<=CREATED_DATE' => $maxDate,
    'ZOMBIE' => 'N',
    'STATUS' => CTasks::METASTATE_EXPIRED
])->SelectedRowsCount();
$tasks['completed'] = $taskList = CTasks::GetList([], [
    'CREATED_BY' => $userIds,
    '>=CLOSED_DATE' => $minDate,
    '<=CLOSED_DATE' => $maxDate,
    'ZOMBIE' => 'N',
    'STATUS' => CTasks::STATE_COMPLETED
])->SelectedRowsCount();
$tasks['progress'] = $taskList = CTasks::GetList([], [
    'CREATED_BY' => $userIds,
    '>=CREATED_DATE' => $minDate,
    '<=CREATED_DATE' => $maxDate,
    'ZOMBIE' => 'N',
    'STATUS' => CTasks::STATE_IN_PROGRESS
])->SelectedRowsCount();
$tasks['total'] = $tasks['expired'] + $tasks['completed'] + $tasks['progress'];

$timeFilter = [
    '>=DATE_START' => $minDate,
    '<=DATE_START' => $maxDate,
];
if (!empty($userIds)) {
    $timeFilter['@USER_ID'] = $userIds;
}
$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(DATE_START)")
    ],
    '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)) {
    $taskList = \Bitrix\Tasks\Internals\TaskTable::getList([
        'filter' => [
            '@RESPONSIBLE_ID' => $topUserIds,
            '!ZOMBIE' => 'Y',
            '!STATUS' => CTasks::STATE_COMPLETED
        ],
        'select' => ['RESPONSIBLE_ID', 'CNT'],
        'runtime' => [
            new Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
        ],
        'group' => ['RESPONSIBLE_ID'],
        'order' => ['RESPONSIBLE_ID' => 'ASC']
    ]);

    foreach ($taskList as $task) {
        $topUserList[$task['RESPONSIBLE_ID']]['tasks'] = $task['CNT'];
    }
}


?>
<?$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>
                            </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")
            ];

            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'])?>
                }
            ];

            /* 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");?>