<?
function TESTING() {if (is_object($GLOBALS['testing_plugin'])) return($GLOBALS['testing_plugin']);$GLOBALS['testing_plugin']=new i_testing();return($GLOBALS['testing_plugin']);} ;

class i_testing
{


 function __construct()
 {
 }

 function declare_menu($page)
 {
	$page->menu['/cab/setting/']['items']['/cab/testing/settings/']=array('title'=>'Тестирование ЭСМО') ;
 }

 function install()
 {
	$id_sect=SETUP_add_section_to_site_setting('Тестирование ЭСМО') ;
	//SETUP_add_rec_to_site_setting($id_sect,"Автоматические закрытие смены фельдшера",0,'LS_testing_smena_auto_close',array('el'=>'checkbox','descr'=>'При выявлении на терминале повышенной температуры терминал будет переведен в режим СанОбработки')) ;
	//SETUP_add_rec_to_site_setting($id_sect,"Порог температуры",38,'LS_testing_temp',array('descr'=>'Температура, выше которой терминал будет переведен в режим СанОбработки')) ;

	//SETUP()->reg_event_lister('examination_result_data_read','testing','on_event_examination_result_data_read') ;         //
	//SETUP()->reg_event_lister('server_power_on_before_save_status','testing','on_event_server_power_on_before_save_status') ;         //
	//SETUP()->reg_event_lister('server_operation_exec','testing','on_event_server_operation_exec') ;         //
	//SETUP()->reg_event_lister('rmv_main_panel_view','testing','on_event_rmv_main_panel_view') ;         //

  SETUP()->reg_report('Служебные отчеты','aspmo_reports/report_terminal_testing.php') ;         //




	// добавить возможность регистрации во вложенных меню!!!
	SETUP()->reg_menu_item('main','Тестирование ЭСМО','/cab/testing/') ;

	SETUP()->reg_ext('testing','Тестирование ЭСМО') ;

  ENGINE()->reg_cron('Закрытие смены фельдшеров (Нагрузочное тестирование)','TESTING/smena_auto_close','0 */1 * * *') ;

 }

 function smena_auto_close()
 {   include_once(_DIR_EXT.'/aspmo_reports/report_mo_smena.php') ;
     // получаем спискок всех фельдшеров, смена которых в данный момент активна
     $recs_accounts=execSQL('select * from obj_site_account where clss=210 and enabled=1 and rol=2 and smena_in>0 and smena_out=0') ;
     if (_sizeof($recs_accounts)) foreach($recs_accounts as $rec)
     {   echo 'Закрываем смену фельдшера <strong>'.$rec['obj_name'].'</strong><br>' ;
         $rec['_ext_info']=unserialize($rec['ext_info']) ;
         //damp_array($rec['_ext_info']['certificate']);

         // журнал формируем не более чем за час работы - из-за очень большого числа МО при нагрузочном тестировании
         $now=getdate() ;
         $min=mktime($now['hours']-1,$now['minutes'],$now['seconds'],$now['mon'],$now['mday'],$now['year']);
         $from=($min>$rec['smena_in'])? $min:$rec['smena_in'] ;
         $filter=[] ;
         $filter['doctor_id'] = $rec['pkey'];
         $filter['data_from'] = date('d.m.Y H:i:s',$from);
         $filter['data_to'] = date('d.m.Y H:i:s',time());
         $filter['dopusk'][1]=1;
         $filter['dopusk'][2]=1;
         $filter['dont_use_member_personal_filter']=1;

         echo 'Дата/время начала смены : <strong>'.date('d.m.Y H:i:s',$rec['smena_in']).'</strong><br>' ;
         echo 'Дата/время начала журнала : <strong>'.$filter['data_from'].'</strong><br>' ;

         //damp_array($_POST) ;
         $options=array() ;
         $options['pdf_options']='-O Landscape' ;
         $options['dont_use_member_personal_filter']=1;
         $res=DOCS()->doc_create('report_mo_smena',$filter,$options) ;
         if ($res['result_convert']['outputfile'])
         {   //damp_array($res);
             // ждем пока завершиться формирование PDF
             $this->waiting_pdf_generate($res['result_convert']['outputfile']);

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

             echo 'Число МО в журнале за смену: '.$res['report_count_rows_all'].'<br>' ;
             echo 'Сформирован отчет за смену: '.$res['result_convert']['PDF_file_name_link'].'<br>' ;
             echo 'Создан документ ID: '.$res['doc_id'].'<br>' ;
             $rec_doc=DOCS()->get_doc_by_id($res['doc_id']) ;
             //damp_array($rec_doc);
             $cont=file_get_contents($rec_doc['__doc_dir']) ;
             $str=base64_encode($cont) ;
             $data_to_sign['doc_id']=$res['doc_id'] ;
             $data_to_sign['sign']=md5($str) ;
             $data_to_sign['cert']=$rec['_ext_info']['certificate'] ;
             $data_to_sign['cert']['IssuerName']='Эмуляция ЭЦП';
             ECP()->save_signature($data_to_sign,['show_trace'=>0]) ;

             $rec_doc=DOCS()->get_doc_by_id($res['doc_id']) ;
             if ($rec_doc['sign'])
             { echo 'Документ подписан '.date('d.m.Y H:i:s',$rec_doc['sign_data']).'<br>' ;
               //damp_array(unserialize($rec_doc['sign']),1,-1);
               // закрываем смену сотрудника
               echo 'Закрываем смену сотрудника<br>' ;
               ACCOUNTS()->account_smena_out($rec['pkey']) ;
             }
             else echo '<div class="red">Закрытие смены возможно только после подписи журнала</div><br>' ;

         }
     } else echo 'Активных смен фельдшеров не найдено<br>' ;


 }

    function waiting_pdf_generate($log_name)
   {
       $t1 = fixed_time();
       do
       {
           $text = file_get_contents($log_name);
           sleep(1);
       } while(strpos($text,'Done')===false and strpos($text,'100%')===false);
       $t2 = fixed_time();
       echo 'Генерация отчета - ' . round($t2-$t1,2) . ' сек.<br>';
       sleep(10);
   }



}

?>
