<?php
//include_once("c_esmo_gateway_upload.php");
include_once("c_ot.php");
//include_once(_DIR_TO_ENGINE.'/admin/i_admin_system.php') ;
class c_page_cab_ot_db extends c_page_cab_ot
{
 public $h1='Охрана труда - БД' ;
 public $objPHPExcel ;
 public $aSheet ;
 public $csv_headers ;
 public $db_headers ;
 public $setting ;
 public $table_name ;
 public $setting_name ;

 function block_main()
 {

  if (!$_POST['cmd'])
  {  $tables=array(   'list_vpf'=>'Список ВПФ',
                           'list_workings'=>'Список должностей',
                           'list_workings_fvp'=>'Список ВПФ для должностей',
                           'list_rm_fvp'=>'Список ВПФ для РМ',
                           'list_ot_sout'=>'Параметры СОУТ',
                           'view_list_orgs'=>'Вьювер view_list_orgs',
                           'view_list_otdels'=>'Вьювер view_list_otdels',
                        ) ;
          include_once(_DIR_EXT.'/aspmo_debug/c_debug_info.php')  ;
          $page=new c_page_cab_debug_info() ;
          $page->panel_info_db_small($tables) ;

     ?><button class="v1" cmd="set_inrm_to_personals">Задать ИНРМ сотрудникам</button>&nbsp;
       <button class="v1" cmd="clear_all_vpf_to_inrm">Удалить все ВПФ для ИНРМ</button>&nbsp;
       <br><h2>ВПФ по 302 приказу</h2>
       <button class="v1" cmd="import_vpf_302_from_JSON_def">Загрузить стандартный ВПФ 302 приказ</button>&nbsp;
       <button class="v1" cmd="export_vpf_to_json">Выгрузить ВПФ в JSON</button>&nbsp;
       <button class="v1" cmd="import_from_JSON">Загрузить ВПФ из JSON</button>&nbsp;

       <br><h2>Переход на ВПФ по 29 приказу</h2>
       <button class="v1" cmd="download_diff_302_29">Скачать стандартный файл соответствий</button>&nbsp;
       <button class="v1" cmd="upload_diff_302_29">Загрузить стандартный файл соответствий</button>&nbsp;
       <button class="v1" cmd="upload_local_diff_302_29">Загрузить собственный файл соответствий</button>&nbsp;
       <button class="v1" cmd="show_diff_302_29_to_inrm">Показать соответствия для ИНРМ</button>&nbsp;
       <button class="v1" cmd="show_diff_302_29_to_inrm_error">Показать отсутствующие в соответствии пункты</button>&nbsp;

       <br><h2>ВПФ по 29 приказу</h2>
       <button class="v1" cmd="import_vpf_29_from_JSON_def">Загрузить стандартный ВПФ 29 приказ</button>&nbsp;
       <button class="v1" cmd="upload_local_vpf_29">Загрузить собственный ВПФ 29 приказ</button>&nbsp;
       <button class="v1" cmd="export_vpf_29_to_json">Выгрузить ВПФ в JSON</button>&nbsp;
       <button class="v1" cmd="import_from_JSON">Загрузить ВПФ из JSON</button>&nbsp;

       <br><h2>ВПФ ОПО</h2>
       <button class="v1" cmd="import_vpf_opo_from_JSON_def">Загрузить стандартный ВПФ ОПО приказ</button>&nbsp;
       <button class="v1" cmd="export_vpf_opo_to_json">Выгрузить ВПФ  ОПО в JSON</button>&nbsp;
       <button class="v1" cmd="import_vpf_opo_from_JSON">Загрузить ВПФ ОПО из JSON</button>&nbsp;
     <?
  }

 }

 function CMD_clear_all_vpf_to_inrm()
 {
    ?><h2>Очистка таблицы ВПФ для ИНРМ</h2>
      <strong>Будут сброшены все ранее заданные ВПФ для рабочих мест.</strong><br>
     <button class="v1" cmd="clear_all_vpf_to_inrm_exec">Удалить все ВПФ для ИНРМ</button>&nbsp;
    <?
 }

 function CMD_clear_all_vpf_to_inrm_exex()
 {
   execSQL_update('delete from list_rm_fvp',['debug'=>2]) ;
 }

 function CMD_download_diff_302_29()
 {
   ?><a href="<?echo _PATH_TO_EXT?>/ot/source/diff_302_29.xlsx" target="_blank">Скачать файл соответствий</a><?
 }

 function CMD_upload_diff_302_29()
 { $fdir=_DIR_EXT.'/ot/source/diff_302_29.xlsx' ;
   if (file_exists($fdir)) $this->upload_diff_302_29_from_file($fdir) ;
   else echo 'Файл не найден: '.hide_server_dir($fdir).'<br>' ;
 }

 function CMD_upload_local_vpf_29()
 {
   ?><form action="" method="POST" enctype="multipart/form-data"><?
     include(_DIR_EXT.'/upload_files/panel_upload_files.php')  ;
     panel_upload_files(array('text'=>'Перетяните и отпустите сюда<br>файл XLS','extFilter'=>'xlsx','SendFormOnUploadSuccess'=>1)) ;
     ?><input type="hidden" name="cmd" value="upload_file">
       <input type="submit" class="v1" style="display:none;" cmd="upload_local_vpf_29_exec" value="Импортировать">
     </form><?
 }

 function CMD_upload_local_diff_302_29()
 {
   ?><form action="" method="POST" enctype="multipart/form-data"><?
     include(_DIR_EXT.'/upload_files/panel_upload_files.php')  ;
     panel_upload_files(array('text'=>'Перетяните и отпустите сюда<br>файл XLS','extFilter'=>'xlsx','SendFormOnUploadSuccess'=>1)) ;
     ?><input type="hidden" name="cmd" value="upload_file">
       <input type="submit" class="v1" style="display:none;" cmd="upload_local_diff_302_29_exec" value="Импортировать">
     </form><?
 }

 function CMD_show_diff_302_29_to_inrm()
 {

   $arr_str=OT()->get_arr_302_29() ;
   $recs=execSQL('select t1.inrm,t1.vpf_id,t2.number
                  from list_rm_fvp t1
                  left join list_vpf t2 on t2.pkey=t1.vpf_id
                 ',0,1) ;

   echo 'Получено '.sizeof($recs).' записей соответствий ВПФ для ИНРМ<br>' ;
   $arr_errors=[] ;
   ?><table class="basic fz_small"><tr><th>ИНРМ</th><th>vpf_id</th><th>Старый номер</th><th>Новый номер</th></tr><?
   if (sizeof($recs)) foreach($recs as $rec)
   {  $old_num=OT()->remove_last_point($rec['number']) ;
      $new_num=$arr_str[$old_num] ;
      ?><tr>
           <td><?echo $rec['inrm']?></td>
           <td><?echo $rec['vpf_id']?></td>
           <td><?echo $rec['number']?></td>
           <td><? echo ($new_num)? $new_num:'<span class=red>Соответствие не определено</span>'; ?></td>
       </tr><?
      if (!$new_num) $arr_errors[$old_num]+=1 ;

   }
   ?></table><?
   if (sizeof($arr_errors)) damp_array($arr_errors,1,-1);

 }

 function CMD_show_diff_302_29_to_inrm_error()
 {

   $arr_str=OT()->get_arr_302_29() ;
   $recs=execSQL('select t1.inrm,t1.vpf_id,t2.number
                  from list_rm_fvp t1
                  left join list_vpf t2 on t2.pkey=t1.vpf_id
                 ',0,1) ;

   echo 'Получено '.sizeof($recs).' записей соответствий ВПФ для ИНРМ<br>' ;
   $arr_errors=[] ;
   if (sizeof($recs)) foreach($recs as $rec)
   {  $old_num=OT()->remove_last_point($rec['number']) ;
      $new_num=$arr_str[$old_num] ;
      if (!$new_num) $arr_errors[$old_num]+=1 ;

   }
   ?><table class="basic fz_small"><tr><th>Пункт 302 приказа</th><th>Число ИНРМ, которые используют новый номер</th></tr><?
   if (sizeof($arr_errors)) foreach($arr_errors as $id=>$cnt)
   {  ?><tr>
           <td><?echo $id?></td>
           <td><?echo $cnt?></td>
       </tr><?
   }
   ?></table><?
 }

 function CMD_upload_local_diff_302_29_exec()
 {
   if (sizeof($_POST['upload_files'])) foreach($_POST['upload_files'] as $fname)
   {
     if (file_exists(_TEMP_DIR.'/'.$fname)) $this->upload_diff_302_29_from_file(_TEMP_DIR.$fname) ;
     else echo 'Файл не найден: '.$fname.'<br>' ;
   }
 }

 function CMD_upload_local_vpf_29_exec()
 {   include_once(_DIR_EXT.'/esmo_gateway/i_xls_to_db_import.php') ;
     $XLS_to_DB = new i_xls_to_db_import() ;
     $XLS_to_DB->XLS_fname=hide_server_dir((_TEMP_DIR.$_POST['upload_files'][0])) ;  // /temp/0_a34d0deb97e04aa9409668dddf7666f6.xlsx
     $XLS_to_DB->row_header=1;  // заголовки - строка 1
     $XLS_to_DB->use_only_column_letter=0 ; //  в таблице использовать в качестве названий столбцов буквы A B C D
     $res=$XLS_to_DB->import() ;
     //damp_array($res) ;
     if ($res['success'])
     {  echo 'Файл загружен в таблицу: <strong>'.$XLS_to_DB->table.'</strong><br>' ;
        ?><strong>Прочитанный файл XLS, первые 10 строк с данными</strong><?
        $recs=execSQL('select * from '.$XLS_to_DB->table) ;
        print_2x_arr($recs) ;

        execSQL_update('truncate table list_vpf',2) ;
        execSQL_update('insert into list_vpf (clss,obj_name,parent,level) values (233,"ВПФ",0,1)') ;
        execSQL_update('insert into list_vpf (clss,number,comment,obj_name,period) 
                        select 230,B_1,C_2,D_3,G_4 from '.$XLS_to_DB->table.' where D_3!=""',0) ;
        execSQL_update('update list_vpf set clss=233 where period=0 or period is null',0) ;
        $recs_sections=execSQL('select * from list_vpf where clss=233',2) ;
        if (_sizeof($recs_sections)) foreach($recs_sections as $rec)
          execSQL_update('update list_vpf set parent='.$rec['pkey'].' where number like "'.trim($rec['number']).'%" and pkey!='.$rec['pkey'],0) ;

        $options['debug'] =1 ;
        TREE('list_vpf')->update_levels_parents('',$options) ;
       execSQL_update('update list_vpf set number=comment',0) ;
     }
 }

function upload_diff_302_29_from_file($fdir)
 {
     include_once(_DIR_EXT.'/esmo_gateway/i_xls_to_db_import.php') ;
     $XLS_to_DB = new i_xls_to_db_import(['use_table_name'=>'ot_diff_302_29']) ;
     $XLS_to_DB->XLS_fname=hide_server_dir($fdir) ;  // /temp/0_a34d0deb97e04aa9409668dddf7666f6.xlsx
     $XLS_to_DB->row_header=1;  // заголовки - строка 1
     $XLS_to_DB->use_only_column_letter=0 ; //  в таблице использовать в качестве названий столбцов буквы A B C D
     $res=$XLS_to_DB->import() ;
     //damp_array($res) ;
     if ($res['success'])
     {  echo 'Файл загружен в таблицу: <strong>'.$XLS_to_DB->table.'</strong><br>' ;
        ?><strong>Прочитанный файл XLS, первые 10 строк с данными</strong><?
        $recs=execSQL('select * from '.$XLS_to_DB->table) ;
        print_2x_arr($recs) ;
     }
 }


 function CMD_set_inrm_to_personals()
 {
    OT()->set_inrm_to_personals() ;

 }

 function CMD_export_vpf_to_json()
 {
     $recs=execSQL('select * from list_vpf',0,1) ;
     $json=json_encode($recs,JSON_UNESCAPED_UNICODE) ;
     file_put_contents(_TEMP_DIR.'list_vpf_302.json',$json) ;
     ?><a href="/services/get_file/?temp_fname=list_vpf_302.json">Скачать файл</a><?

 }
 function CMD_export_vpf_29_to_json()
 {
     $recs=execSQL('select * from list_vpf',0,1) ;
     $json=json_encode($recs,JSON_UNESCAPED_UNICODE) ;
     file_put_contents(_TEMP_DIR.'list_vpf_29.json',$json) ;
     ?><a href="/services/get_file/?temp_fname=list_vpf_29.json">Скачать файл</a><?

 }

 function CMD_import_from_JSON()
 {?><form action="" method="POST" enctype="multipart/form-data"><?
     include_once(_DIR_EXT.'/upload_files/panel_upload_files.php') ;
     panel_upload_files(array('extFilter'=>'json','SendFormOnUploadSuccess'=>1)) ;



      ?><input type="hidden" name="cmd" value="upload_file">
       <input type="submit" class="v1" style="display:none;" cmd="import_from_JSON_exec" value="Импортировать данные в базу"></form><?
 }

 function CMD_import_from_JSON_exec()
 {
     if ($_POST['upload_files'][0] and file_exists(_TEMP_DIR.$_POST['upload_files'][0]))
     {
         $this->import_from_JSON_from_file(_TEMP_DIR.$_POST['upload_files'][0],'list_vpf') ;
         echo 'Удаление временного файла '.$_POST['upload_files'][0].' - ok<br>' ;
         unlink(_TEMP_DIR.$_POST['upload_files'][0]) ;
     }
 }

 function CMD_import_vpf_302_from_JSON_def()
 {
     $this->import_from_JSON_from_file(_DIR_EXT.'/ot/source/list_vpf_302.json','list_vpf') ;
     update_site_setting('LS_ot_prikaz_number','302 приказ');
 }

 function CMD_import_vpf_29_from_JSON_def()
 {
     $this->import_from_JSON_from_file(_DIR_EXT.'/ot/source/list_vpf_29.json','list_vpf') ;
     update_site_setting('LS_ot_prikaz_number','29 приказ');
 }

function CMD_import_from_JSON_def2()
 {
     $recs=execSQL('select t1.pkey,t1.parent,concat(number," ",obj_name) as obj_name,
                    (select count(t2.pkey) from list_vpf t2 where t2.parent=t1.pkey) as cnt_child
                    from list_vpf t1
                    having cnt_child>0
                    order by indx
                    ',2) ;
     //convert_list_to_tree2($recs,$arr) ;
     //$arr[1]['name']='ВПФ' ;

     $recs2=$recs ;
     TREE('list_vpf')->convert_recs_to_tree($recs,$arr_tree);
     damp_array($arr_tree);
     TREE('list_vpf')->convert_tree_to_select_options_arr($arr_tree,$recs2,$options_list);
     damp_array($options_list);
     TREE('list_vpf')->convert_tree_to_list($arr_tree,$recs2,$options_list);
     damp_array($options_list);


 }



 function import_from_JSON_from_file($fdir,$table_name)
 {
     $json_cont=file_get_contents($fdir);
     $data=json_decode($json_cont,true) ;
     echo 'Будет импортировано <strong>'._sizeof($data).'</strong> записей ВПФ<br>' ;
     if (_sizeof($data))
     {   //print_2x_arr($data);
         echo 'Очистка таблицы '.$table_name.' - ok<br>' ;
         execSQL_update('truncate table '.$table_name) ;
         echo '<strong>Импорт данных из файла</strong><br>' ;
         foreach($data as $rec)
         { unset($rec['tkey'],$rec['_reffer']) ;
           multiSQL_insert($table_name)->append($rec) ;
         }
         multiSQL_insert($table_name)->flush() ;
     }
 }


  function CMD_import_vpf_opo_from_JSON_def()
  {
      $this->import_from_JSON_from_file(_DIR_EXT.'/ot/source/list_vpf_opo.json','opo_list_vpf') ;
}


  function CMD_export_vpf_opo_to_json()
   {
       $recs=execSQL('select * from opo_list_vpf',0,1) ;
       $json=json_encode($recs,JSON_UNESCAPED_UNICODE) ;
       file_put_contents(_TEMP_DIR.'list_vpf_opo.json',$json) ;
       ?><a href="/services/get_file/?temp_fname=list_vpf_opo.json">Скачать файл</a><?
   }

 function CMD_import_vpf_opo_from_JSON()
 {?><form action="" method="POST" enctype="multipart/form-data"><?
     include_once(_DIR_EXT.'/upload_files/panel_upload_files.php') ;
     panel_upload_files(array('extFilter'=>'json','SendFormOnUploadSuccess'=>1)) ;



      ?><input type="hidden" name="cmd" value="upload_file">
       <input type="submit" class="v1" style="display:none;" cmd="import_vpf_opo_from_JSON_exec" value="Импортировать данные в базу"></form><?
 }

 function CMD_import_vpf_opo_from_JSON_exec()
 {
     if ($_POST['upload_files'][0] and file_exists(_TEMP_DIR.$_POST['upload_files'][0]))
     {
         $this->import_from_JSON_from_file(_TEMP_DIR.$_POST['upload_files'][0],'opo_list_vpf') ;
         echo 'Удаление временного файла '.$_POST['upload_files'][0].' - ok<br>' ;
         unlink(_TEMP_DIR.$_POST['upload_files'][0]) ;
     }
 }

}



?>
