<?php
include_once(_DIR_TO_CLASS.'/c_page.php') ;
class c_page_cab_pl extends c_page
{
    public $h1='Путевой лист' ;
    var $use_enlighterjs=1 ;

    function second_menu_config()
    {
        $this->second_menu['/cab/pl/']=array('title'=>'Путевой лист') ;
        $this->second_menu['/cab/pl/med_orgs/']=array('title'=>'Медицинская оранизация') ;
        //$this->second_menu['/cab/pl/clients/']=array('title'=>'Клиенты ПЛ') ;
        $this->second_menu['/cab/pl/put_list/']=array('title'=>'Путевые листы') ;
        $this->second_menu['/cab/pl/packets/']=array('title'=>'Лог пакетов') ;
        $this->second_menu['/cab/pl/sign_stats/']=array('title'=>'Статистика ожидания подписи') ;
        $this->second_menu['/cab/pl/docs/']=array('title'=>'Документация шлюза') ;
        $this->second_menu['/cab/pl/db/']=array('title'=>'БД') ;
    }

 function block_main()
 {  $this->page_title() ;

    ob_start() ;
    if (method_exists($this, $_POST['cmd'])) $this->{$_POST['cmd']}() ;
    $text_cmd_exec=ob_get_clean() ;

     ?><h2>Статус пакетов</h2><?
     $this->panel_packet_status() ;


     ?><br><h2>Задания планировщика:</h2><?
		 
		 include_once(_DIR_EXT.'/aspmo_setting/i_crontab_task_view.php') ;
		 i_crontab_task_view::panel_tasks(['cmd'=>'PL/%']);
				 
     //$this->panel_crontab_status('PL/titul1_parsing','Обработка входящих XML титул 1') ;
     /*?><button class="button left v1" cmd="titul_check_mo">Запустить вручную</button><?
     $this->panel_crontab_status('PL/titul_check_mo','Проверка МО') ;

     ?><button class="button left v1" cmd="titul_check_sign">Запустить вручную</button><?
     $this->panel_crontab_status('PL/titul_check_sign','Проверка ЭЦП') ;

     /*echo 'Отправлять тестовые МО: ' ;
     $cur_status=($GLOBALS['LS_mo_generator_send_mo'])? '<span class="green">Включено</span>':'<span class="red">Выключено</span>' ;
     echo '<span id="span_LS_mo_generator_send_mo_status"><strong>'.$cur_status.'</strong></span>' ;
     ?><label class="ios7-switch" style="font-size: 15px;"><input type="checkbox" class="v2" cmd="setting/save_setting" no_update_page="1" <?if ($GLOBALS['LS_mo_generator_send_mo']) echo 'checked'?> name="LS_mo_generator_send_mo" setting_type="LS" element_id="span_LS_mo_generator_send_mo_status"><span class="switch"></span></label><br><?

     echo 'Включить автоматическое подтверждение МО у ДД: ' ;
     $cur_status=($GLOBALS['LS_mo_generator_dd_auto_allow'])? '<span class="green">Включено</span>':'<span class="red">Выключено</span>' ;
     echo '<span id="span_LS_mo_generator_dd_auto_allow_status"><strong>'.$cur_status.'</strong></span>' ;
     ?><label class="ios7-switch" style="font-size: 15px;"><input type="checkbox" class="v2" cmd="setting/save_setting" no_update_page="1" <?if ($GLOBALS['LS_mo_generator_dd_auto_allow']) echo 'checked'?> name="LS_mo_generator_dd_auto_allow" setting_type="LS" element_id="span_LS_mo_generator_dd_auto_allow_status"><span class="switch"></span></label><br><?
     */


     ?><br><?
     ?><h2>Проверки</h2><?
     ?><button class="button left v1" cmd="check_services_titul_1">Отправить в ЭСМО 1-й титул (корректный)</button><?
     ?><button class="button left v1" cmd="check_services_titul_1_2day_2pers">Отправить в ЭСМО 1-й титул (корректный,несколько дней, два водителя)</button><?
     ?><button class="button left v1" cmd="check_services_titul_1_err">Отправить в ЭСМО 1-й титул (неиз.вод.)</button><?
     ?><button class="button left v1" cmd="check_services_titul_5">Отправить в ЭСМО 5-й титул (корректный)</button><?
     ?><button class="button left v1" cmd="check_services_titul_5_2pers">Отправить в ЭСМО 5-й титул (корректный,два водителя)</button><?
     ?><br><br>
     <p>При получении титула 1 или 5 производиться проверка корректности структуры XML и актуальности содержания полей титула.<p>
     <p>Если все данные титула корректны, титул будет переведен в статус "<strong>Принято</strong>".</p>
     <p>Если часть данных титула корректна, титул будет переведен в статус "<strong>Отклонено</strong>".</p>
     <p>Работа с титулом 1 и 5 на этом будет завершена.</p>
     <p>Титул 2 или 6 формируется автоматически, при переводе титула 1 или 5 в статус "<strong>Принято</strong>", начальный статус титулов 2 и 6 - "<strong>Ожидает МО"</strong>.</p>
     <p>На данном этапе в титуле 2 или 6 будет отсутствовать секция о проведенном МО.</p>
     <p>Проверка наличия МО выполняется заданием планировщика "<strong>Проверка МО для ПЛ</strong>", по умолчанию - раз в минуту.</p>
     <p>Как только появиться нужное титулу МО, титул будет полностью сформрован и отправлен на подпись медику (ЭЦП).</p>
     <p>Поскольку подпись пакета выполняется в отдельном интерфейсе медика, данный процесс является асинхронным от процесса отправки на подпись и как следствие, требуется отдельное задание планировщика на наличие  сфорированной подписи титула - "<strong>Проверка ЭЦП"</strong></p>
     <p>При наличии сформированной ЭЦП титула, титул будет переведен в статус "<strong>Ожидает вручения</strong>"</p>
     <p>C этого момента ссылки на титул и его подпись будут доступны по запросу к ЭСМО "Получить список подготовленных титулов 2 и 6"</p>
     <p>Как только по указанным ссылкам будут скачаны пакет и подпись, титул будет переведен в статус "<strong>Вручено</strong>", а сам титул будет удален из списка подговленных ппакетов.</p>
     <p>Для повторого получения ссылок, по титулу в статусе "<strong>Вручен</strong>", необходо выполнить запрос к ЭСМО "Получить список подготовленных титулов 2 и 6" с указанием UID ПЛ титула.</p>

     <?

     /*?><button class="button left v1" cmd="titul1_parsing">Обработка входящих XML титул 1</button><?*/


     ?><br><?
     ?><button class="button left v1" cmd="check_services_titul_2">Получить список подготовленных титулов 2 и 6</button><?
     ?><button class="button left v1" cmd="clear_list_titul_2_6">Очистить список подготовленных титулов 2 и 6</button><?
     /*?><button class="button left v1" cmd="check_services_titul_2_put">Вручение титул 2</button><?*/
     ?><button class="button left v1" cmd="check_services_titul_2_error">Сообщение по ошибке titul2</button><?

     ?><div class="clear"></div><br><?

     echo $text_cmd_exec ;





 }

 function panel_packet_status()
 {
    $cnt_all_packets=execSQL_row('select packet_type,count(pkey) from pl_packets group by packet_type') ;
    $recs=execSQL('select packet_type,status,count(pkey) as cnt from pl_packets where packet_type>0  and status>0 group by packet_type,status',0,1) ; // пакеты титул 1, ожидает обработки
    $stats_packets_status=[] ;
    if (sizeof($recs)) foreach ($recs as $rec) $stats_packets_status[$rec['packet_type']][$rec['status']]=$rec['cnt'] ;

    ?><table class="basic fz_small full auto">
        <tr>
            <th colspan="3">Титул 1<div class="comment">Обстоятельства рейса</div></th>
            <th colspan="5">Титул 2<div class="comment">Предрейсовый МО</div></th>
            <!--<th colspan="4">Титул 3<div class="comment">Предрейсовый ТК</div></th>-->
            <!--<th colspan="4">Титул 4<div class="comment">Предрейсовый одометр</div></th>-->
            <th colspan="3">Титул 5<div class="comment">Послерейсовый одометр</div></th>
            <th colspan="5">Титул 6<div class="comment">Послерейсовый МО</div></th>
        </tr>
        <tr>
            <th>Получено пакетов</th>
            <th>Принято</th>
            <th>Отклонено</th>

            <!--<th>Ожидают МО</th>
            <th>Ожидают ЭЦП</th>
            <th>Ожидают вручения</th>
            <th>Вручено</th>

            <th>Ожидают ТК</th>
            <th>Ожидают ЭЦП</th>
            <th>Ожидают вручения</th>
            <th>Вручено</th>-->

            <th>Ожидают МО</th>
            <th>Ожидают ЭЦП</th>
            <th>Ожидают вручения</th>
            <th>Вручено</th>
            <th>Просрочен</th>

            <th>Получено пакетов</th>
            <th>Принято</th>
            <th>Отклонено</th>

            <th>Ожидают МО</th>
            <th>Ожидают ЭЦП</th>
            <th>Ожидают вручения</th>
            <th>Вручено</th>
            <th>Просрочен</th>
        </tr>
        <tr>
            <td><?echo $cnt_all_packets[1]?></td>
            <td><a href="/cab/pl/packets/[type=1,status=2]/" target="_blank"><?echo ($stats_packets_status[1][2])?:'-'?></a></td>
            <td><a href="/cab/pl/packets/[type=1,status=6]/" target="_blank"><?echo ($stats_packets_status[1][6])?:'-'?></a></td>

            <td><a href="/cab/pl/packets/[type=2,status=1]/" target="_blank"><?echo ($stats_packets_status[2][1])?:'-'?></a></td>
            <td><a href="/cab/pl/packets/[type=2,status=2]/" target="_blank"><?echo ($stats_packets_status[2][2])?:'-'?></a></td>
            <td><a href="/cab/pl/packets/[type=2,status=3]/" target="_blank"><?echo ($stats_packets_status[2][3])?:'-'?></a></td>
            <td><a href="/cab/pl/packets/[type=2,status=4]/" target="_blank"><?echo ($stats_packets_status[2][4])?:'-'?></a></td>
            <td><a href="/cab/pl/packets/[type=2,status=4]/" target="_blank"><?echo ($stats_packets_status[2][7])?:'-'?></a></td>

            <!--<td><?echo ($stats_packets_status[3][1])?:'-'?></td>
            <td><?echo ($stats_packets_status[3][2])?:'-'?></td>
            <td><?echo ($stats_packets_status[3][3])?:'-'?></td>
            <td><?echo ($stats_packets_status[3][4])?:'-'?></td>

            <td><?echo ($stats_packets_status[4][1])?:'-'?></td>
            <td><?echo ($stats_packets_status[4][2])?:'-'?></td>
            <td><?echo ($stats_packets_status[4][3])?:'-'?></td>
            <td><?echo ($stats_packets_status[4][4])?:'-'?></td>-->

            <td><?echo $cnt_all_packets[5]?></td>
            <td><a href="/cab/pl/packets/[type=5,status=2]/" target="_blank"><?echo ($stats_packets_status[5][2])?:'-'?></a></td>
            <td><a href="/cab/pl/packets/[type=5,status=6]/" target="_blank"><?echo ($stats_packets_status[5][6])?:'-'?></a></td>


            <td><?echo ($stats_packets_status[6][1])?:'-'?></td>
            <td><?echo ($stats_packets_status[6][2])?:'-'?></td>
            <td><?echo ($stats_packets_status[6][3])?:'-'?></td>
            <td><?echo ($stats_packets_status[6][4])?:'-'?></td>
            <td><?echo ($stats_packets_status[6][7])?:'-'?></td>

        </tr>
      </table>
    <?
 }

 function panel_crontab_status($crontab_cmd,$title)
 {   $cron_rec=execSQL_van('select * from '.TM_CRONTAB.' where cmd="'.$crontab_cmd.'" limit 1') ;
     $cron_enabled=($cron_rec['enabled'])? 1:0 ;
     echo $title.': ' ;
     $cur_status=($cron_enabled)? '<span class="green">Включено</span>, '.$cron_rec['intr']:'<span class="red">Выключено</span>';
     echo '<span id="cron_status_'.$cron_rec['pkey'].'"><strong>'.$cur_status.'</strong></span>' ;
     ?><label class="ios7-switch" style="font-size: 15px;"><input type="checkbox" class="v2" cmd="setting/change_cron_work_status" id="<?echo $cron_rec['pkey'];?>" <?if ($cron_enabled) echo 'checked'?>><span class="switch"></span></label><br><?
 }


   function check_services_titul_1()
   {
       $this->check_services_titul_exec(_PATH_TO_SITE.'/services/pl/put_titul_1/',
                                        _DIR_EXT.'/pl/demo_xml/1.xml',
                                        _DIR_EXT.'/pl/demo_xml/1.sign');
   }

   function check_services_titul_1_2day_2pers()
   {
       $this->check_services_titul_exec(_PATH_TO_SITE.'/services/pl/put_titul_1/',
                                        _DIR_EXT.'/pl/demo_xml/1_2day_2pers.xml',
                                        _DIR_EXT.'/pl/demo_xml/1_2day_2pers.sign');
   }

   function check_services_titul_1_err()
   {
       $this->check_services_titul_exec(_PATH_TO_SITE.'/services/pl/put_titul_1/',
                                        _DIR_EXT.'/pl/demo_xml/titul_1_error.xml',
                                        _DIR_EXT.'/pl/demo_xml/titul_1_error.sign'
                                        );
   }

    function check_services_titul_5()
    {
        $this->check_services_titul_exec(_PATH_TO_SITE.'/services/pl/put_titul_5/',
                                         //_DIR_EXT.'/pl/demo_xml/ON_PTLSODPARK_2AEB6D0E0C2_C456_49D7_AE7E_06B745CC9485_2AEB6D0E0C2.xml',
                                         _DIR_EXT.'/pl/demo_xml/5.xml',
                                         _DIR_EXT.'/pl/demo_xml/5.sign');
    }

    function check_services_titul_5_2pers()
    {
        $this->check_services_titul_exec(_PATH_TO_SITE.'/services/pl/put_titul_5/',
                                         //_DIR_EXT.'/pl/demo_xml/ON_PTLSODPARK_2AEB6D0E0C2_C456_49D7_AE7E_06B745CC9485_2AEB6D0E0C2.xml',
                                         _DIR_EXT.'/pl/demo_xml/5_2pers.xml',
                                         _DIR_EXT.'/pl/demo_xml/5_2pers.sign');
    }


   function check_services_titul_exec($url,$xml_file_name,$sign_file_name)
   {   $xml_cont=file_get_contents($xml_file_name) ;

       $from=time() ;
       $t=getdate($from) ;
       $to=mktime(0,0,0,$t['mon'],$t['mday']+3,$t['year']);
       $xml_cont=str_replace('from_dd.mm.yyyy', date('d.m.Y',$from), $xml_cont) ;
       $xml_cont=str_replace('to_dd.mm.yyyy', date('d.m.Y',$to), $xml_cont) ;
       $xml_cont=str_replace('dd.mm.yyyy', date('d.m.Y',$from), $xml_cont) ;


       $temp_fname=_TEMP_DIR.'/'.ENGINE()->generate_UID().'.xml' ;
       file_put_contents($temp_fname,$xml_cont) ;
       $result = IO()->doPut_v3($url, ['files' => ['document'=>$temp_fname,'signature'=>$sign_file_name]], ['timeout' => 12, 'debug' => 1, 'return_logfname' => 1, 'api_key' => 'b73fc83d08eceffd872643c533685515']);
       //damp_array($result);
       if ($result['log_fname'])
       {
           $log_content = file_get_contents(_DIR_TO_ROOT . $result['log_fname']);
           echo $log_content ;
       }

       //echo $result['content'] ;

       $data = json_decode(json_encode((array)simplexml_load_string($result['content'])), true);
       //damp_array($data);
       //damp_array($result);
       if (sizeof($data))
       { //damp_array($data);
           echo 'Получены XML данные:<br>';
           ?><pre data-enlighter-language="less"><? echo ENGINE()->htmlentities_open_tag($result['content']) ?></pre><?
           if ($data['debug']) echo $data['debug'] ;
           //echo $result['content'] ;
       }
   }

    function clear_list_titul_2_6()
    {
        execSQL_update('update pl_packets set status=4 where packet_type in (2,6) and status=3') ;

    }


   function check_services_titul_2()
   {
       $url=_PATH_TO_SITE.'/services/pl/get_titul/' ;
       $result = IO()->doPut_v3($url,[],['timeout' => 12, 'debug' => 1, 'return_logfname' => 1, 'api_key' => 'b73fc83d08eceffd872643c533685515']);
       if ($result['log_fname'])
       {
          $log_content = file_get_contents(_DIR_TO_ROOT . $result['log_fname']);
          echo $log_content;
       }
       $data = json_decode(json_encode((array)simplexml_load_string($result['content'])), true);
       if (sizeof($data))
       { //damp_array($data);
          echo 'Получены XML данные:<br>';
          ?><pre data-enlighter-language="less"><? echo ENGINE()->htmlentities_open_tag($result['content']) ?></pre><?
          if ($data['debug']) echo $data['debug'] ;
          //echo $result['content'] ;
       }


   }

   function check_services_titul_2_put()
   {
       $url=_PATH_TO_SITE.'/services/pl/get_titul/' ;
       $result = IO()->doPut_v3($url,[],['timeout' => 12, 'debug' => 0, 'return_logfname' => 1, 'api_key' => 'b73fc83d08eceffd872643c533685515']);

       if ($result['log_fname'])
       {
          $log_content = file_get_contents(_DIR_TO_ROOT . $result['log_fname']);
          echo $log_content;
       }
       $data = json_decode(json_encode((array)simplexml_load_string($result['content'])), true);
       if (sizeof($data))
       {  //damp_array($data,1,-1);
           echo 'Получены XML данные:<br>';
           ?><pre data-enlighter-language="less"><? echo ENGINE()->htmlentities_open_tag($result['content']) ?></pre><?

          if (sizeof($data['packet'])) foreach ($data['packet'] as $id=>$value)
              { //echo 'id='.$id.', value='.$value.'<br>' ;
                  if (is_array($value)) $this->upload_titul2($value['download_packet_url']) ;
                  else
                  {
                      if ($id==='download_packet_url') $this->upload_titul2($value) ;
                  }

              }

       }


   }

   function check_services_titul_2_error()
   {
     $url=_PATH_TO_SITE.'/services/pl/put_titul_status/' ;

       $recs_packet = execSQL('select t2.*,
 	  						 t1.file_uid as titul1_file_uid,
 	  						 t1.pl_uid as titul1_pl_uid
 	  						 from pl_packets t2
 	  						 left join pl_packets t1 on t1.pkey=t2.titul1_id
 	  						 where t2.packet_type=2 and t2.status in (3,4) limit 1');

      // header("Content-type: text/xml;windows-1251");
       	  $imp = new DOMImplementation; // Creates an instance of the DOMImplementation class
       	  $xml_doc = $imp->createDocument("", ""); // Creates a DOMDocument instance
       	  $xml_doc->encoding = 'windows-1251';
       	  $xml_doc->formatOutput = true;
       	  $xml = add_element($xml_doc, $xml_doc, 'titul_status', '', array('date' => date('Y-m-d H:i')));
       	  if (sizeof($recs_packet)) foreach ($recs_packet as $rec)
       	  { $xml_packet = add_element($xml_doc, $xml, 'titul');
       		 add_element($xml_doc, $xml_packet, 'КНД', '1110381');
       		 add_element($xml_doc, $xml_packet, 'УИД_ПЛ', $rec['titul1_pl_uid']);
       		 add_element($xml_doc, $xml_packet, 'ИдФайл', $rec['titul1_file_uid']);
       		 add_element($xml_doc, $xml_packet, 'КодОшибки', 'Signature Not Verified');
       		 add_element($xml_doc, $xml_packet, 'Комментарий', 'текстовой комментарий к коду ошибки');
       	  }

          $xml=$xml_doc->saveXML(); ;


     $result = IO()->doPut_v3($url, ['post' => $xml], ['debug' => 1, 'return_logfname' => 1, 'api_key' => 'b73fc83d08eceffd872643c533685515']);
     //damp_array($result);
     if ($result['log_fname'])
     {
         $log_content = file_get_contents(_DIR_TO_ROOT . $result['log_fname']);
         echo $log_content ;
     }

     //echo $result['content'] ;

     $data = json_decode(json_encode((array)simplexml_load_string($result['content'])), true);
     //damp_array($data);
     //damp_array($result);
     if (sizeof($data))
     { //damp_array($data);
         echo 'Получены XML данные:<br>';
         ?><pre data-enlighter-language="less"><? echo ENGINE()->htmlentities_open_tag($result['content']) ?></pre><?
         if ($data['debug']) echo $data['debug'] ;
         //echo $result['content'] ;
     }
   }

   function upload_titul2($url)
   {
       //echo $url.'<br>' ;
       //return ;
      $result = IO()->doPut_v3($url,[],['timeout' => 12, 'debug' => 1, 'return_logfname' => 1, 'api_key' => 'b73fc83d08eceffd872643c533685515']);
      //damp_array($result,1,-1);
      if ($result['status']==200)
      {  echo 'Получены XML данные:<br>';
         ?><div style="max-width:1000px;"><?
         ?><pre data-enlighter-language="less"><? echo ENGINE()->htmlentities_open_tag($result['content']) ?></pre><?
         ?></div><?
      }

   }



   function titul1_parsing()
   {
        PL()->tituls1_parsing() ;
   }

   function titul_check_mo()
   {
        PL()->titul_check_mo() ;
   }

   function titul_check_sign()
   {
        PL()->titul_check_sign() ;
   }


}

?>
