<?php
include_once(_DIR_TO_CLASS.'/c_page.php');
include_once(_DIR_TO_MODULES.'/m_skd.php');

include_once('c_post_shift_poll.php');

class c_page_cab_post_shift_poll_positions extends c_page_cab_post_shift_poll{

    function set_head_tags(){
        parent::set_head_tags();
        $this->HEAD['css'][] = _PATH_TO_EXT . '/post_shift_poll/lib/style.css';

        $this->HEAD['js'][] = '/AddOns/google/charts/gstatic/charts/loader.js';
        $this->HEAD['css'][] = '/AddOns/google/charts/fonts/Roboto_medium.css';



        $this->HEAD['css'][] = _PATH_TO_EXT . '/post_shift_poll/lib/global_styles_v1.0.css';

        $this->HEAD['js'][]=_PATH_TO_EXT.'/post_shift_poll/lib/jqtable/jquery-3.6.0.min.js';
        $this->HEAD['js'][]=_PATH_TO_EXT.'/post_shift_poll/lib/jqtable/jquery.tablesorter.combined.js';
        $this->HEAD['js'][]=_PATH_TO_EXT.'/post_shift_poll/lib/jqtable/jquery.tablesorter.js';
        $this->HEAD['js'][]=_PATH_TO_EXT.'/post_shift_poll/lib/jqtable/jquery.tablesorter.widgets.js';
    }


    public $h1 = 'Должности';


    function block_main(){


        /////////////////////////////////////// ВСЁ ДЛЯ ФИЛЬТРАЦИИ ////////////////////////////////////////////
        // Организация по умолчанию
        if(!$_GET['_org_id']){
            $_GET['_org_id'] = '15057';
        }
        // Фильтрация по умолчанию
        if(!$_GET['sel_in']){
            $_GET['sel_in'] = '14';
        }



        $_org_name_orijin = execSQL('select _org_name, _org_id from view_personals  group by _org_name'); // Организации
        $_org_name = array_values($_org_name_orijin);

        if($_GET['_org_name']){
            $_work_names = execSQL('select _otdel_name, _otdel_id from view_personals WHERE _org_id="'.$_org_name_orijin[$_GET['_org_name']]['_org_id'].'"'); // Подразделения
            $wk_n = array_values($_work_names);
        }else{
            if($_GET['_org_id']){
                $_work_names = execSQL('select _otdel_name, _otdel_id from view_personals WHERE _org_id='.$_GET['_org_id'].''); // Подразделения
                $wk_n = array_values($_work_names);
            }
        }

        // Формируем id организации
        if($_GET['_org_id']){
            $_org_id = $_GET['_org_id'];
        }else{
            $_org_id = $_org_name_orijin[$_GET['_org_name']]['_org_id'];
        }

        // Формируем id подразделения
        if($_GET['otdel_id']){
            $otdel_id = $_GET['otdel_id'];
        }else{
            $otdel_id = $_work_names[$_GET['_pos']]['_otdel_id'];
        }

        $arrOrg = execSQL('select _org_id , _org_name from view_personals  group by _org_id'); // Организации

        if($_org_id){
            $_work_names_for_d = execSQL('select _otdel_id , _otdel_name from view_personals WHERE _org_id='.$_org_id.''); // Подразделения
            $ORGNAME_2 = $_work_names_for_d[$otdel_id]['_otdel_name'];
            $ORGNAME = $arrOrg[$_org_id]['_org_name'];
        }else{
            $ORGNAME = $arrOrg[$_org_id]['_org_name'];
        }




        if($_org_id){

            /////////////////////////////////////////////////////////////////// Формируем данные /////////////////////////////////////

            // Максимальное значение вывода
            if($_GET['sel_in']){
                $interval = $_GET['sel_in'];
            }

            $day = strtotime('-'.$interval.' days');

            if($otdel_id){
                // формируем по подразделению
                $_work_names = execSQL('select 
                                                t1.working,
                                                t1._work_name,
                                                t1._otdel_id,
                                                sum(t2.answer_ball) as sm,
                                                count(t2.answer_ball) as cnt
                                                from view_personals t1
                                                LEFT JOIN post_shift_poll t2 ON t2.personal_id = t1.pkey
                                                WHERE 
                                                t1._org_id='.$_org_id.' AND t1.clss=211 AND t1.enabled=1 AND t2.answer_ball > 0 AND t1._otdel_id='.$otdel_id.' AND t2.c_data >= '.$day.'
                                                group by t1.working
                                         '); // Должности их оценки ////////////////////////////////////////////////////////////////////////////////////////////////

            }else{
                // формируем по организации
                $_work_names = execSQL('select 
                                                t1.working,
                                                t1._work_name,
                                                t1._otdel_id,
                                                sum(t2.answer_ball) as sm,
                                                count(t2.answer_ball) as cnt
                                                from view_personals t1
                                                LEFT JOIN post_shift_poll t2 ON t2.personal_id = t1.pkey
                                                WHERE 
                                                t1._org_id='.$_org_id.' AND t1.clss=211 AND t1.enabled=1 AND t2.answer_ball > 0 AND t2.c_data >= '.$day.'
                                                group by t1.working
                                         '); // Должности их оценки ////////////////////////////////////////////////////////////////////////////////////////////////

            }



            // Библиотека получения веса тревоги
            include 'lib/page_fn/position_warn.php';



            function getAllB_work($_org_id, $otdel_id, $working, $day){

                if($otdel_id){
                    $workBall = execSQL('select 
                                                t2.answer_ball,
                                                count(t2.answer_ball) as cnt
                                                from view_personals t1
                                                LEFT JOIN post_shift_poll t2 ON t2.personal_id = t1.pkey
                                                WHERE  t1._org_id='.$_org_id.' AND t1.working='.$working.'  AND t1._otdel_id='.$otdel_id.' AND
                                                t1.clss=211 AND t2.enabled=1 
                                                AND t2.answer_ball > 0 AND t2.c_data >= '.$day.'
                                                group by t2.answer_ball
                                         '); // Должности их оценки
                }else{
                    $workBall = execSQL('select 
                                                t2.answer_ball,
                                                count(t2.answer_ball) as cnt
                                                from view_personals t1
                                                LEFT JOIN post_shift_poll t2 ON t2.personal_id = t1.pkey
                                                WHERE  t1._org_id='.$_org_id.' AND t1.working='.$working.'  AND
                                                t1.clss=211 AND t2.enabled=1 
                                                AND t2.answer_ball > 0 AND t2.c_data >= '.$day.'
                                                group by t2.answer_ball
                                         '); // Должности их оценки
                }

                return $workBall;
            }


            function countBallMinSR($sr, $arr_b){
                $cnt = 0;
                if (sizeof($arr_b)) foreach ($arr_b as $key => $value){
                    if($key < $sr){
                        $cnt = $cnt + $value['cnt'];
                    }
                }
                return $cnt;
            }// кол-во баллов ниже среднего значения


            function sumAllBallARR($arr_b){
                $cnt = 0;
                if (sizeof($arr_b)) foreach ($arr_b as $key => $value){
                    $cnt = $cnt + $value['cnt'];
                }
                return $cnt;
            }// Сумма всех баллов


            function inPercen($minB, $all){
                if($minB and $all){
                    $ret = $minB / ($all / 100);
                    if($ret){
                        $ret = round($ret, 1);
                    }else{
                        $ret = 0;
                    }
                }else{
                    $ret = 0;
                }
                return $ret;
            }


            function srForArr($arr){
                $cnt = 0;
                $sum = 0;
                if (sizeof($arr)) foreach ($arr as $key => $value){
                    $cnt = $cnt + $value['cnt'];
                    $sum = $sum + ($value['cnt'] * $key);
                }
                if($sum and $cnt){
                    $ret = round($sum / $cnt, 2);
                }else{
                    $ret = 0;
                }
                return $ret;
            }


            $getBallFor = getBallFor($interval);


            // Массив наполнения
            $tIner = [];
            if (sizeof($_work_names)) foreach ($_work_names as $key => $value){

                // Средний балл должности
                $workBall = getAllB_work($_org_id, $value['_otdel_id'], $value['working'], $day); // Получаем все баллы должности за период

                $srBwork = srForArr($workBall); // Средний балл за выбранный период

                $smB = sumAllBallARR($workBall);// Сумма всех баллов
                $minSR = countBallMinSR($srBwork, $workBall);// кол-во баллов ниже среднего значения
                $inPercent = inPercen($minSR, $smB); // % баллов ниже среднего значения
                // % баллов ниже среднего значения

                // Получаем значение тревоги
                $fall = getBallForFall($getBallFor, $value['working'], $srBwork, $inPercent, $interval); //// Получаем кол-во тревог в должности

                // end

                /// Выделение тревог от х дней
                if($_GET['d_warn']){
                    $d_warn = $_GET['d_warn'];
                }else{
                    $d_warn = 2;
                }

                // Данные таблицы
                $tr = [
                    'period' => '2', // Интервал данных, для этой выборки всегда 2 !!!! Не менять
                    'sel_in' => '1', // Диапазон отображаемых данных 1  !!!! Не менять
                    'sc_inter' => $srBwork, // Средний балл текущий
                    '_org_id' => $_org_id, // id организации
                    'pos' => $value['_otdel_id'], // id подразделения

                    'id' => $value['working'], // id должности
                    'name' => $value['_work_name'], // Название должности
                    'sr' => $srBwork, // Средний балл
                    'minB' => $inPercent, // Минимальный балл в процентах (Общая доля оценок < среднего за всё время)

                    'warn_2x' => '',  // сумма тревог от n подряд
                    'warn_2x_ncm' => '', // сумма тревог от n подряд без комментариев
                    'warn_2x_ncm_ot' => '', // кол-во тревог от n дней

                    'comment_in_2' => '', //
                    'sum_tec_warn' => '', //
                    'day_line_warn' => '', //
                ];

                $warnArr = [];
                if($interval){
                    $r = 0;
                    while ($r < $interval){
                        $date = date("d.m.y", mktime(0, 0, 0, date('m'), date('d') - $r, date('Y')));
                        // Вот здесь пишем балл веса проблеммы
                        array_push($tr, $fall[$r]);
                        array_push($warnArr, $fall[$r]);
                        $r++;
                    }
                }

                // дописываем данные

                $tr['warn_2x'] = amount_from($warnArr, $d_warn);  // сумма тревог от n подряд
                $tr['warn_2x_ncm'] = '-'; // сумма тревог от n подряд без комментариев
                $tr['warn_2x_ncm_ot'] = count_from($warnArr, $d_warn); // кол-во тревог от n дней

                $tr['comment_in_2'] = '-'; // Комментарии отсутствуют на периоды "Тревоги более 2х дней"
                $tr['sum_tec_warn'] = sumCurrent_alarm($warnArr); // Сумма текущей тревоги
                $tr['day_line_warn'] = current_alarm($warnArr); // Дней подряд текущей тревоги

                array_push($tIner, $tr);
            }
            ?>
            <h1>Показатели должностей</h1>
            <div class="card_container mb-0" style="margin-top: 45px;margin-bottom: 20px;max-width: 2620px;">
                <form>
                    <script>
                        var expanded = false;

                        function showCheckboxes() {
                            var checkboxes = document.getElementById("checkboxes");
                            if (!expanded) {
                                checkboxes.style.display = "block";
                                expanded = true;
                            } else {
                                checkboxes.style.display = "none";
                                expanded = false;
                            }
                        }
                    </script>
                    <div class="d-inter">
                        <div class="in_card_title">Интервал данных:</div>
                        <select id="interval_data" class="sel_in" name="sel_in">
                            <option <?if($_GET['sel_in'] == 7) echo'selected="selected"';?> value="7">7 дней</option>
                            <option <?if($_GET['sel_in'] == 14) echo'selected="selected"';?> value="14">14 дней</option>
                            <option <?if($_GET['sel_in'] == 30) echo'selected="selected"';?> value="30">30 дней</option>
                            <!--<option <?if($_GET['sel_in'] == 60) echo'selected="selected"';?> value="60">60 дней</option>-->
                        </select>
                    </div>

                    <div class="d-inter">
                        <div class="in_card_title">Сумма тревог от:</div>
                        <select id="interval_data" class="sel_in" name="d_warn">
                            <option <?if($d_warn == 1) echo'selected="selected"';?> value="1">1 день</option>
                            <option <?if($d_warn == 2) echo'selected="selected"';?> value="2">2х дней</option>
                            <option <?if($d_warn == 3) echo'selected="selected"';?> value="3">3х дней</option>
                            <option <?if($d_warn == 4) echo'selected="selected"';?> value="4">4х дней</option>
                            <option <?if($d_warn == 5) echo'selected="selected"';?> value="5">5-ти дней</option>
                            <option <?if($d_warn == 6) echo'selected="selected"';?> value="6">6-ти дней</option>
                        </select>
                    </div>


                    <div class="d-inter" <?=$st_1?>>
                        <div class="in_card_title">Организация:</div>
                        <input type="text" class="form-control autocomplete sel_in sel_in-c" autocomplete="off" list="_org_name" placeholder="Необходимо выбрать" name="_org_name" value='<?=$ORGNAME?>'>
                        <datalist id="_org_name">
                            <?
                            $t = 1;
                            if (sizeof($_org_name)) foreach ($_org_name as $key => $value){
                                echo '<option data-id="'.$t.'" value=\''.$value['_org_name'].'\'">';
                                $t++;
                            }
                            ?>
                        </datalist>
                    </div>
                    <?
                    if($wk_n){
                        ?>
                        <div class="d-inter">
                            <div class="in_card_title">Подразделение:</div>
                            <input type="text" class="form-control autocomplete sel_in sel_in-c" autocomplete="off" list="_pos" placeholder="Необходимо выбрать" name="_pos" value='<?=$ORGNAME_2?>'>
                            <datalist id="_pos">
                                <?
                                $t = 1;

                                if (sizeof($wk_n)) foreach ($wk_n as $key => $value){
                                    echo '<option data-id="'.$t.'" value=\''.$value['_otdel_name'].'\'>';
                                    $t++;
                                }
                                ?>
                            </datalist>
                        </div>
                        <?
                    }
                    ?>
                    <button class="bt_s_3">Сортировать</button>
                </form>
            </div>
            <style>
                p.vertical{
                    writing-mode: tb-rl;
                    filter: flipH flipV;
                    height: 411px;
                    text-align: right;

                }

                tr > td {
                    border: 1px !important;
                    border-bottom: 1px solid #eee !important;
                    border-left: 1px solid #eee !important;
                }

                td{
                    color: #000 !important;
                }

                tr:hover > td {
                    border: 1px !important;
                    border-bottom: 1px solid rgba(0,0,0,.1)  !important;
                    border-left: 1px solid rgba(0,0,0,.1) !important;
                }

            </style>




            <table id="myTable" class="tablesorter table_main" cellpadding="0" cellspacing="0">
                <thead>
                <tr class="title_tab_table">
                    <td valign="bottom" title="Номер"><b>№</b></td>
                    <td valign="bottom" title="Должность">Должность</td>
                    <td title="Ср. оценка за период"><p class="vertical">Ср. оценка за период</p></td>
                    <td title="% оценок ниже средней оценки за период"><p class="vertical">% оценок ниже средней оценки за период</p></td>
                    <td title="Сумма Тревог от <?=$d_warn?>х дней подряд"><p class="vertical">Сумма Тревог от <?=$d_warn?>х дней подряд</p></td>
                    <!--<td title="Сумма Тревог от <?=$d_warn?>х дней подряд без комментариев"><p class="vertical">Сумма Тревог от <?=$d_warn?>х дней подряд без комментариев</p></td>-->
                    <td title="Количество Тревог более <?=$d_warn?>х дней"><p class="vertical">Количество Тревог более <?=$d_warn?>х дней</p></td>
                    <!--<td title='Комментарии отсутствуют на периоды "Тревоги более <?=$d_warn?>х дней"'><p class="vertical">Комментарии отсутствуют на периоды "Тревоги более <?=$d_warn?>х дней"</p></td>-->
                    <td title="Сумма текущей тревоги"><p class="vertical">Сумма текущей тревоги</p></td>
                    <td title="Дней подряд текущей тревоги"><p class="vertical">Дней подряд текущей тревоги</p></td>
                    <?
                    if($interval){

                        $r = 0;
                        while ($r < $interval){
                            $date = date("d.m.y", mktime(0, 0, 0, date('m'), date('d') - $r, date('Y')));

                            ?><td title="<?=$date?>"><p class="vertical"><?=$date?></p></td><?
                            $r++;
                        }
                    }
                    ?>
                </tr>
                </thead>
                <tbody>


                <style>
                    .flatWhite{
                        border: 6px solid transparent;
                        border-top: 6px solid #f8f8f8;
                        border-right: 6px solid #f8f8f8;
                        float: right;
                        margin: -6px -15px;
                        box-shadow: -4px 5px 8px rgb(0 0 0 / 20%);
                    }
                </style>
                <?


                // Функция сравнения
                function cmp($a, $b) {
                    if ($a['warn_2x'] == $b['warn_2x']) {
                        return 0;
                    }
                    return ($a['warn_2x'] > $b['warn_2x']) ? -1 : 1;
                }

                uasort($tIner, 'cmp');


                // Получаем таблицу с маркерами
                $MARKER = execSQL('select pid, color FROM analytic_table_marker');

                $t = 1;
                if (sizeof($tIner)) foreach ($tIner as $key => $value){

                    if($value['name']){
                        $name = $value['name'];
                    }else{
                        $name = '<b style="color: red">Название отсутствует, id должности: '.$value['id'].'</b>';
                    }

                    ?>
                    <tr>
                        <td title="№"><b><?=$t?></b></td>
                        <td title="Навание должности">
                            <a class="v2" cmd="post_shift_poll/get_stats_2" period="<?=$value['period']?>" sel_in="<?=$value['sel_in']?>" sc_inter="<?=$value['sc_inter']?>" _org_id="<?=$value['_org_id']?>" pos="<?=$value['pos']?>" work_id="<?=$value['id']?>" style="color: #4e69a0;text-decoration: auto;font-weight: 600;">
                                Подробнее</a>  | <b><!--<?=$value['id']?>--> <?=$name?></b>
                        </td>
                        <td title="Ср. оценка за период"><?=$value['sr']?></td>
                        <td title="% оценок ниже средней оценки за период"><?=$value['minB']?>%</td>
                        <td title="Сумма Тревог от <?=$d_warn?>х дней подряд"><?=$value['warn_2x']?></td>
                        <!--<td><?=$value['warn_2x_ncm']?></td>-->
                        <td title="Количество Тревог более <?=$d_warn?>х дней"><?=$value['warn_2x_ncm_ot']?></td>
                        <!--<td><?=$value['comment_in_2']?></td>-->
                        <td title="Сумма текущей тревоги"><?=$value['sum_tec_warn']?></td>
                        <td title="Дней подряд текущей тревоги"><?=$value['day_line_warn']?></td>
                        <?
                        if($interval){
                            $r = 0;
                            while ($r < $interval){
                                $date = date("d.m.y", mktime(0, 0, 0, date('m'), date('d') - $r, date('Y')));

                                if($value[$r]){
                                    $arrBG = array('ffe5e5', 'ffcccc', 'ffb2b2', 'ff9999', 'ff7f7f', 'ff6666', 'ff4c4c', 'ff3333', 'ff1919', 'ff0000');
                                    $bg = $arrBG[$value[$r]];
                                    if($value[$r] > 9 ) $bg = 'ff0000';

                                    $bt = 'class="v2"  period="='.$value['period'].'" sel_in="'.$value['sel_in'].'" sc_inter="'.$value['sc_inter'].'"         date="'.$date.'" cmd="post_shift_poll/warn_data" _org_id="'.$value['_org_id'].'" pos="'.$value['pos'].'" work_id="'.$value['id'].'"';


                                    // $MARKER
                                    $pid = md5($date.''.$value['id']);

                                    if($MARKER[$pid]['color']){
                                        $styleSM_MAKER = 'display: block; border-top: 6px solid '.$MARKER[$pid]['color'].'; border-right: 6px solid '.$MARKER[$pid]['color'].';';
                                    }else{
                                        $styleSM_MAKER = 'display: none';
                                    }


                                    $flag = '<div class="flatWhite" id="'.md5($date.''.$value['id']).'" style="'.$styleSM_MAKER.'"></div>';
                                }else{
                                    $bg = 'f8f8f8';
                                    $bt = '';
                                    $flag = '';
                                }

                                $style = 'style="background: #'.$bg.' !important;"';

                                ?><td <?=$bt?> title="<?=$date?>"  <?=$style?>><b><?=$value[$r]?></b><?=$flag?></td><?
                                $r++;
                            }
                        }
                        ?>
                    </tr>
                    <?
                    $t++;
                }
                ?>
                </tbody>
            </table>


            <script>
                $(function() {
                    $("#myTable").tablesorter();
                });

                $(function() {
                    $("#myTable").tablesorter({ sortList: [[0,0], [1,0]] });
                });
            </script>


            <?
        }else{
            ?>
            <h1>Выбор организации для получения аналитики по должностям</h1>
            <div class="card_container mb-0" style="margin-top: 45px;margin-bottom: 20px;max-width: 2620px;">
                <form>
                    <script>
                        var expanded = false;
                        function showCheckboxes() {
                            var checkboxes = document.getElementById("checkboxes");
                            if (!expanded) {
                                checkboxes.style.display = "block";
                                expanded = true;
                            } else {
                                checkboxes.style.display = "none";
                                expanded = false;
                            }
                        }
                    </script>

                    <div class="d-inter">
                        <div class="in_card_title">Интервал данных:</div>
                        <select id="interval_data" class="sel_in" name="sel_in">
                            <option <?if($_GET['sel_in'] == 7) echo'selected="selected"';?> value="7">7 дней</option>
                            <option <?if($_GET['sel_in'] == 14) echo'selected="selected"';?> value="14">14 дней</option>
                            <option <?if($_GET['sel_in'] == 30) echo'selected="selected"';?> value="30">30 дней</option>
                            <option <?if($_GET['sel_in'] == 60) echo'selected="selected"';?> value="60">60 дней</option>
                        </select>
                    </div>

                    <div class="d-inter">
                        <div class="in_card_title">Организация:</div>
                        <input type="text" class="form-control autocomplete sel_in sel_in-c" autocomplete="off" list="_org_name" placeholder="Необходимо выбрать" name="_org_name" value='<?=$_GET['_org_name']?>'>
                        <input type="hidden" name="testId"/>
                        <datalist id="_org_name">
                            <?
                            $t = 1;
                            if (sizeof($_org_name)) foreach ($_org_name as $key => $value){
                                echo '<option data-id="'.$t.'" value=\''.$value['_org_name'].'\'">';
                                $t++;
                            }
                            ?>
                        </datalist>
                    </div>

                    <button class="bt_s_3">Сортировать</button>
                </form>
            </div>
            <div style="padding: 140px;background: #f3f3f3;text-align: center;margin-top: 50px;border-radius: 9px;font-size: 15px;font-weight: 600;">Необходимо выбрать организацию</div>
            <?php

        }
    }
}
