<?
include_once(_DIR_EXT.'/HTML/c_page_XML_AJAX.php') ;
//include_once('messages.php') ;
class c_page_ajax extends c_page_XML_AJAX
{


    // будим все терминалы
    function all_term_start()
    {   LOGS()->reg_log('Команда с интерфейса','Перевод всех терминалов в активный режим',array()) ;
        $recs=DEVICE()->get_list_terminals(MEMBER()->cur_group_id,'kt') ;
        if (_sizeof($recs)) foreach($recs as $terminal_rec) DEVICE()->send_terminal_command($terminal_rec['pkey'],'check_status',array('async'=>0,'no_check_cur_status'=>1)) ;
        $this->add_element('show_notife','Отправлены команды на перевод терминалов в активный режим') ;
    }


    // будим все терминалы
     function all_term_sleep()
    {   LOGS()->reg_log('Команда с интерфейса','Перевод всех терминалов в режим сна',array()) ;
        $recs=DEVICE()->get_list_terminals(MEMBER()->cur_group_id,'kt') ;
        if (_sizeof($recs)) foreach($recs as $terminal_rec) DEVICE()->send_terminal_command($terminal_rec['pkey'],'set_sleep',array('async'=>0)) ;
         $this->add_element('show_notife','Отправлены команды на перевод терминалов в сон') ;
     }

     // будим все терминалы
     function all_term_reboot()
     {   LOGS()->reg_log('Команда с интерфейса','Перезагрузка всех терминалов',array()) ;
         $recs=DEVICE()->get_list_terminals(MEMBER()->cur_group_id,'kt') ;
         if (_sizeof($recs)) foreach($recs as $terminal_rec) DEVICE()->send_terminal_command($terminal_rec['pkey'],'reboot',array('async'=>0)) ;
         $this->add_element('show_notife','Отправлены команды на перезагрузку терминалов') ;
     }

    // старт ручного МО со РМВ - надо перевести врача на нужную страницу в новой вкладке
    // внимание!!! пне проверяется, был ли у человека ранее МО и его статус
    function start_hand_mo()
     { $denited_info='' ;
       // проверяем, что пропуск активен - поулчаем ифнорамцию по работнику
       //$rec_member=PERSONAL()->get_personal_by_propusk($_POST['propusk_id']) ;
       $rec_member=PERSONAL()->get_personal(array('propusk'=>$_POST['propusk_id'])) ;
       if ($rec_member['pkey'])
       { /*ob_start() ;
         ?><script type="text/javascript">window.open("/window/kt/hand/<?echo $rec_member['pkey']?>/",'status=1,dependent=0,width=400,height=700,left=0,top=0, resizable=1, scrollbars=yes');</script> <?
         $this->add_element('JSCODE',ob_get_clean()) ;
         */
         $this->add_element('go_url','/cab/kt/hand/'.$rec_member['pkey'].'/') ;

       } else $denited_info='Пропуск "'.$_POST['propusk_id'].'" не найден' ;

       if ($denited_info)
        { // сообщение для оператора
          $this->add_element('show_notife',$denited_info,array('type'=>'error')) ;
          // сохраняем в логе
          LOGS()->reg_log('Начало ручного контроля трезвости',$denited_info,array()) ;
        }
     }

    function check_hand_result()
    {  // независимо от reason присланного терминалом, надо оценить результаты измерений
       $arr_result=array() ;
       if ($_POST['a'])   $arr_result['a']=$_POST['a'] ;
       if ($_POST['q'])   $arr_result['q']=$_POST['q'] ;
       $rec_personal=PERSONAL()->get_personal_by_id($_POST['personal_id']) ;
       $rules_info=ESMO_RULES()->get_mo_rules_to_personal($rec_personal) ;
       $mo_result=KT()->get_mo_result_to_personal($rules_info['_rules'],$arr_result)  ;
       ob_start() ;
       //damp_array($mo_result) ;
       if ($mo_result['status']==2) {?><button class="v2 button_green" cmd="kt/hand_check_dopusk_allow">Допустить</button>&nbsp;&nbsp;&nbsp;&nbsp;<button class="v2 button_red" cmd="kt/hand_check_dopusk_denited">Запретить</button><?}
       if ($mo_result['status']==3) {?><button class="v2 button_red" cmd="kt/hand_check_dopusk_denited">Запретить</button><?}
       if ($mo_result['comment']) echo '<div id="result_comment"><strong>Причины отказа:</strong><br><br>'.$mo_result['comment'].'</div>' ;

       $text=ob_get_clean() ;
       $this->add_element('buttons.HTML',$text) ;

    }

    function hand_check_dopusk_allow()
      { if (!$_POST['a2']) unset($_POST['simptoms']) ;
        //damp_array($_POST,1,-1) ;
        $this->add_element('success','modal_window') ;
        list($mo_id,$mo_url)=KT()->fixed_hand_check($_POST,1) ;
        if ($mo_url) $this->add_element('go_url',$mo_url) ;
        //$this->add_element('close_mBox_window') ;
        //$this->add_element('update_page',1) ;
      }

      function hand_check_dopusk_denited()
      { if (!$_POST['a2']) unset($_POST['simptoms']) ;
        //$this->add_element('success','modal_window') ;
        list($mo_id,$mo_url)=KT()->fixed_hand_check($_POST,0) ;
        if ($mo_url) $this->add_element('go_url',$mo_url) ;
      }

    function update_panel_rmv_stats()
    {  ob_start() ;
       if (!MEMBER()->id) $this->add_element('update_page',1) ;
       else if (MEMBER()->rol==1) {include_once('panel_stats_admin.php') ; panel_stats_admin() ;}
       else                  { include_once('panel_rmv_stats.php') ; panel_rmv_stats() ;   }

       $this->add_element('panel_rmv_stats.HTML',ob_get_clean()) ;
    }

    function get_mo_by_filter()
    {   ob_start() ;
        //damp_array($_POST,1,-1) ;


        //$this->add_element('success','modal_window') ; damp_array($member,1,-1) ;
         $options=array() ;
        //damp_array(MEMBER()) ;
        $options['group_id']=MEMBER()->cur_group_id ; // только с терминалов своей группы
        if (MEMBER()->info['rol']>1)  $options['doctor_id']=MEMBER()->id ; // для доктора показываем МО только его, для администратора - всех
        //if (MEMBER()->info['rol']>1)  $options['doctor_id_or_any']=MEMBER()->pkey ; // только с терминалов своей группы



        // если опция - показывать текущуюю смену
        $now=getdate(time()) ;
        if ($_POST['cur_smena'])
        {   // для администратора - последние 24 часа
            if (MEMBER()->info['rol']==1) { $options['time_from']=mktime($now['hours']-24,$now['minutes'],0,$now['mon'],$now['mday'],$now['year']); echo '<strong>Режим администратора:</strong> показаны МО  за последние 24 часа<br>' ; }
            // для остальных - с начала смены
            elseif (MEMBER()->info['smena_in']) { $options['time_from']=MEMBER()->info['smena_in'] ; echo '<strong>Режим дежурного врача:</strong> показаны МО с начала смены<br>' ; }
            // если смена не начала - с момента авторизации
            else                            { $options['time_from']=MEMBER()->login_time ; echo '<strong>Режим врача:</strong> показаны МО  с момента авторизации<br>' ; }

        }
        // иначе - последние трое суток
        else  { $options['time_from']=mktime($now['hours']-24*3,$now['minutes'],0,$now['mon'],$now['mday'],$now['year']);
                echo 'Показаны МО  за последние трое суток<br>' ;
              }

        //echo date('d.m.Y H:i',$options['time_from']).'<br>' ;
        //echo date('d.m.Y H:i',time()).'<br>' ;
        //echo date('d.m.Y H:i',mktime($now['hours']-24,$now['minutes'],0,$now['mon'],$now['mday'],$now['year'])).'<br>' ;


        $options['text_info']=$_POST['name'] ;
        $options['only_model']=$_POST['model'] ;
        $options['otkaz_mo']=$_POST['otkaz_mo'] ;
        $options['skoro']=$_POST['skoro'] ;  // оджидаемые на проврку врачем
        if ($options['skoro'])
        {
            // начало смены или авторизация пользователя
            $now=getdate(time()) ;
            // для администратора - последние 24 часа
            if (MEMBER()->info['rol']==1) { $options['smena_from']=mktime($now['hours']-24,$now['minutes'],0,$now['mon'],$now['mday'],$now['year']); echo '<strong>Режим администратора:</strong> показаны МО  за последние 24 часа<br>' ; }
            // для остальных - с начала смены
            elseif (MEMBER()->info['smena_in']) { $options['smena_from']=MEMBER()->info['smena_in'] ; echo '<strong>Режим дежурного врача:</strong> показаны МО с начала смены<br>' ; }
            // если смена не начала - с момента авторизации
            else  { $options['smena_from']=MEMBER()->login_time ; echo '<strong>Режим врача:</strong> показаны МО  с момента авторизации<br>' ; }


        }


        //$options['denited_auto']=($_POST['denited_auto'])? 1:0 ; // только записи с алкоголем
        //$options['denited_hand']=($_POST['denited_hand'])? 1:0 ; // только записи с алкоголем

        $options['res_stat']['a']=($_POST['alco'])? 1:0 ; // только записи с алкоголем
        $options['res_stat']['q']=($_POST['question'])? 1:0 ; // только записи с вопросами
        $options['res_stat']['e_dev']=($_POST['otkaz_dev'])? 1:0 ; // только записи с отказами оборудования


        //$options['handmade']=($_POST['handmade'])? 1:0 ; // прошедшие ручную проверку


        //$options['debug']=1 ; // только с терминалов своей группы
        //$options['only_model']='all' ;
        if ($_POST['skoro']) $options['order']='pkey asc' ;

        //damp_array($options,1,-1) ;
        list($recs,$stats)=ESMO()->get_mo_recs($options) ;
        //damp_array($stats) ;

        echo 'Найдено <strong>'.$stats['cnt'].'</strong> МО' ;
        if ($stats['cnt']>0)  echo ' c <strong>'.date('d.m.Y H:i',$stats['time_from']).'</strong> по <strong>'.date('d.m.Y H:i',$stats['time_to']).'</strong>' ;
        echo '<br>' ;

        //print_template($recs,'aspmo/list_mo_sessions',array('id'=>'panel_last_mo','base_dir'=>'','no_reverse_indx'=>$_POST['skoro'])) ;

        $this->add_element('panel_filter_result.HTML',ob_get_clean()) ;

    }

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    //
    // управление зоной доступа и терминалами контроля трезвости
    //
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



    function zone_create()
    {  $result=SKD()->zone_create($_POST['filter']) ;
        reboot_engine() ;
        ACCOUNTS()->update_member_info(MEMBER()) ;
     if ($result['error']) {?><div class="alert"><?echo $result['error']?></div><?}
     else                  {?><div class="info"><?echo $result['info']?></div><?}
     ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
     $this->add_element('show_modal_window','HTML',array('title'=>'Добавление новой зоны доступа','after_close_update_page'=>1)) ;
    }

    function terminal_create()
    {  $result=DEVICE()->terminal_create($_POST['filter']) ;
        reboot_engine() ;
        ACCOUNTS()->update_member_info(MEMBER()) ;
     if ($result['error']) {?><div class="alert"><?echo $result['error']?></div><?}
     else                  {?><div class="info"><?echo $result['info']?></div><?}
     ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
     $this->add_element('show_modal_window','HTML',array('title'=>'Добавление нового терминала КТ','after_close_update_page'=>1)) ;
    }

    function zone_edit()
    {
        $result=SKD()->zone_edit($_POST['filter']) ;
        reboot_engine() ;
        ACCOUNTS()->update_member_info(MEMBER()) ;
        if ($result['error']) {?><div class="alert"><?echo $result['error']?></div><?}
        else                  {?><div class="info"><?echo $result['info']?></div><?}
        ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
        $this->add_element('show_modal_window','HTML',array('title'=>'Изменение зоны доступа','after_close_update_page'=>1)) ;
    }

    function terminal_edit()
    {
        $result=DEVICE()->terminal_edit($_POST['filter']) ;
        reboot_engine() ;
        ACCOUNTS()->update_member_info(MEMBER()) ;
        if ($result['error']) {?><div class="alert"><?echo $result['error']?></div><?}
        else                  {?><div class="info"><?echo $result['info']?></div><?}
        ?><br><br><div class="center"><button class="cancel">Закрыть</button></div><?
        $this->add_element('show_modal_window','HTML',array('title'=>'Изменение терминала','after_close_update_page'=>1)) ;
    }

    function confirmation_zone_delete()
    {
        $child_zone = execSQL_value('select count(pkey) from '.SKD()->table_name.' where parent='.$_POST['filter']['id']); //проверить что нет дочерних зон и терминалов МТ
        $child_device = execSQL_value('select count(pkey) from '.KT()->table_account.' where parent='.$_POST['filter']['id']); //проверить что нет терминалов КТ
        if ($child_zone) $alerts[] = 'В зоне доступа присутствуют дочерние зоны доступа.';
        if ($child_device) $alerts[] = 'В зоне доступа присутствуют терминалы.';
        if (!$child_zone and !$child_device) {
            ?><div class="center">
            <p>Вы уверены, что хотите удалить зону доступа <?echo $_POST['filter']['name']?>?</p><br>
            <button class="cancel">Отмена</button>&nbsp;&nbsp;&nbsp;<button class="v2" cmd="kt/zone_delete" zone_pkey="<?echo $_POST['filter']['id']?>">Удалить</button>
            </div><?
            $this->add_element('show_modal_window','HTML',array('title'=>'Удаление зоны доступа')) ;
        } else {
            ?><strong>Удаление зоны доступа заблокировано по причине:</strong><?
            ?><ul><?
            foreach($alerts as $alert) echo '<li>'.$alert.'</li>' ;
            ?></ul><?
            ?><div class="red">Для удаления зона доступа должна быть пуста</div>
            <div class="buttons"><button class="cancel">Отмена</button></div>
            <?
            $this->add_element('show_modal_window','HTML',array('title'=>'Удаление группы','after_close_update_page'=>1)) ;
        }
    }

    function zone_delete()
    {
        SKD()->zone_delete($_POST['zone_pkey']);
        $this->update_page=1;
    }

    function confirmation_terminal_delete()
    {
        ?><div class="center">
        <p>Вы уверены, что хотите удалить терминал <?echo $_POST['filter']['name']?>?</p><br>
        <button class="cancel">Отмена</button>&nbsp;&nbsp;&nbsp;<button class="v2" cmd="kt/terminal_delete" terminal_pkey="<?echo $_POST['filter']['terminal_id']?>">Удалить</button>
        </div><?
        $this->add_element('show_modal_window','HTML',array('title'=>'Удаление терминала')) ;
    }

    // добавить подтверждение операции
    function terminal_delete()
    {  DEVICE()->terminal_delete($_POST['terminal_pkey']) ;
       $this->update_page=1 ;
    }

    // отправляем информацию о пропуске c виртуального терминала
    function VT_check_access()
    {  ob_start() ;
      // проверяем, что пропуск активен - поулчаем ифнорамцию по работнику
      $rec_member=PERSONAL()->get_personal_by_propusk($_POST['user']) ;
      $term_rec=DEVICE()->get_terminal_by_id($_POST['terminal_id']) ;
      $photo_string=($rec_member['_image_name'] and  file_exists($rec_member['_image_dir']))? base64_encode(file_get_contents($rec_member['_image_dir'])):base64_encode(file_get_contents(_DIR_TO_ROOT.'/images/user.jpg')) ;

       // готовим строку запроса
       $var = array();
       $var['date'] = date('Y-m-d H:i:s');
       $var['args'] = array('terminal_type'=>$term_rec['terminal_type'],
                            'id'=>array('terminal'=>$_POST['terminal_id'],
                                        'user'    =>$_POST['user']),
                            'photo'=>array('auth'=>$photo_string)
                            );

       $result=DEVICE()->terminal_send_data($term_rec,'check_access',$var,array('debug'=>1)) ;
       echo $result['debug'] ;

       $this->add_element('panel_debug.HTML',ob_get_clean()) ;

       $res=$result['response'] ;
       if ($res['args']['message']=='success')
       { ob_start() ;
         echo '<h2>Ув. '.$res['args']['data']['user_name'].'!</strong></h2>' ;
         include_once('panel_tk_seans.php') ;
         panel_tk_seans($res['args']) ;
         //damp_array($rec_member,1,-1) ;

         // если терминалв в режиме автопилота, через 5 сек нажимаем кнопку "отправить результаты менеджеру"
         if ($term_rec['virt_status'])
           { update_rec_in_table('obj_site_device',array('virt_status'=>2),'pkey='.$term_rec['pkey']) ; // переводим терминал в статус - эмуляция измерений
             ?><script type="text/javascript">$j(document).ready(function()
             {
               $j('body').oneTime(20000,'timer_submit',function(){$j('input#submit').trigger('click') ;})
             }) ;
             </script><?
           }

         $this->add_element('panel_message.HTML',ob_get_clean()) ;



       }
       else
       { ob_start() ;
         ?><div id=panel_exec_result class=error><?
         if ($res['args']['data']['user_name']) echo 'Ув. '.$res['args']['data']['user_name'].'!<br><br>' ;
         echo  $res['args']['data']['reason'].'<br>' ;
         if ($res['args']['data']['period']) echo 'Повторную проверку Вы сможете пройти через '.$res['args']['data']['period'].' мин.<br>' ;
         //else echo 'Повторная проверка в текущую смену не предусмотрена.<br>' ;

         // если режим автопилота - через 5 сек обновляем страницу virt_status остается =1
         if ($term_rec['virt_status'])
             { ?><script type="text/javascript">$j(document).ready(function()
               { $j('body').oneTime(5000,'timer_submit',function(){ document.location=document.location;})}) ;
               </script><?
             }


         ?></div><?
         $this->add_element('panel_message.HTML',ob_get_clean()) ;
       }
       return(1) ;
    }


    function send_proverka_result()
      {$rec_member=PERSONAL()->get_personal_by_propusk($_POST['user']) ;
       $photo_string=($rec_member['_image_name'] and file_exists($rec_member['_image_dir']))? base64_encode(file_get_contents($rec_member['_image_dir'])):base64_encode(file_get_contents(_DIR_TO_ROOT.'/images/user.jpg')) ;
       $rec_terminal=DEVICE()->get_terminal_by_id($_POST['terminal_id']) ;
       ob_start() ;
        // готовим строку запроса
        $var = array();
        $var['date'] = date('Y-m-d H:i:s');
        $var['args'] = array('terminal_type'=>$rec_terminal['terminal_type'],
                             'id'=>array('terminal'=>$_POST['terminal_id'],
                                         'user'    =>$_POST['user'],
                                         'medexam' =>$_POST['medexam']),
                             'photo'=>array('alco'=>$photo_string,'video'=>'vid_'.rand(1,1000000).'.avi'),
                             'message'=>(!$_POST['q'] and !$_POST['reason'])? 'success':'failure',
                             'exam_type'=>$_POST['tk'],  // 0/1
                             'data'=>array('alcotester_value'=>$_POST['alko_value'],  // 0/1
                                           'reason'=>($_POST['q'])? 'negativeResponse':$_POST['reason'],
                                           'equipment'=>$_POST['equipment']
                                          )
                            );

        if ($_POST['alcotester_calibration']) $var['args']['data']['alcotester_calibration']=1 ;
        if ($_POST['alko']) $var['args']['data']['alcotester']=$_POST['alko'] ;
        if ($_POST['alko']) $var['args']['data']['alcotester_value']=$_POST['alko_value'] ;

        $result=DEVICE()->terminal_send_data($rec_terminal,'examination_result',$var,array('debug'=>1)) ;
        echo $result['debug'] ;

        $this->add_element('panel_debug.HTML',ob_get_clean()) ;

        $res=$result['response'] ;
        ob_start() ;
        if ($res['args']['message']=='success') {?><h2>Сеанс завершен</strong></h2><div id=terminal_result class=success><? echo $res['args']['data']['reason']?></div><?}
        else                                    {?><h2>Сеанс завершен</strong></h2><div id=terminal_result class=denided><strong>Тест не пройден.</strong><br><br>Причина:<br><? echo $res['args']['data']['reason']?></div><?}

        // если терминалв в режиме автопилота, через 5 сек обновляем страницу
        $term_rec=DEVICE()->get_terminal_by_id($_POST['terminal_id']) ;
        if ($term_rec['virt_status'])
         { update_rec_in_table('obj_site_account',array('virt_status'=>1),'pkey='.$term_rec['pkey']) ; // переводим терминал в статус - эмуляция измерений
           ?><script type="text/javascript">$j(document).ready(function()
           { $j('body').oneTime(5000,'timer_submit',function(){ document.location=document.location;})
           }) ;
           </script><?
         }

        $this->add_element('panel_message.HTML',ob_get_clean()) ;

      }

    function exec_terminal_cmd()
    {
        $terminal_rec=DEVICE()->get_terminal_by_pkey($_POST['terminal_id']) ;
        $result=array() ;
        if ($terminal_rec['pkey']) {
            switch ($_POST['terminal_action']) {
                case 'check_status':
                    $result = DEVICE()->send_terminal_command($terminal_rec['pkey'],'check_status',array('debug'=>1,'async'=>0,'no_check_cur_status'=>1));
                    break;
                case 'set_sleep':
                    $result = DEVICE()->send_terminal_command($terminal_rec['pkey'],'set_sleep',array('debug'=>1,'async'=>0));
                    break;
                case 'reboot':
                    $result = DEVICE()->send_terminal_command($terminal_rec['pkey'],'reboot',array('debug'=>1,'async'=>0));
                    break;
            }

            echo $result['debug'] ;

            if (!$_POST['no_view_req'])
            {   ?><div class="center"><button class="cancel">Закрыть</button></div><?
                $this->add_element('show_modal_window','HTML',array('title'=>'Отправка команды на терминал','width'=>'800px')) ; //damp_array($res) ;
            }
            else $this->add_element('show_notife','Команда отправлена на терминал '.$terminal_rec['id'],array('type'=>'info')) ;

            // обновляем таблицу терминалов
            ob_start() ;
            include_once(_DIR_EXT.'/kt/panel_terminals.php')  ;
            $recs[]=DEVICE()->get_terminal_by_pkey($terminal_rec['pkey']) ;
            panel_terminals($recs,array('only_tr_terminal'=>1)) ;
            $text=ob_get_clean() ;
            $this->add_element('term_'.$terminal_rec['pkey'],$text) ;
        }
    }

}
