<?php
// ВНИМАНИЕ! ЕСЛИ ИМПОРТ НЕ РАБОТАЕТ - НАЙТИ ПЕРЕМЕННУЮ "Настройки импорта персонала для ......" И ВКЛЮЧИТЬ ЕЁ!
include_once("c_esmo_gateway_upload.php");
include_once(_DIR_TO_ENGINE.'/admin/i_admin_system.php') ;
class c_page_cab_esmo_gateway_upload_personals_excel extends c_page_cab_esmo_gateway_upload
{
 public $h1='Загрузка списка сотрудников из файла XLS' ;
 public $setting ;
 public $ini_setting_fname ;

 public $db_fields=array( 'uid'=>'UID ФЛ',
                          'uid_so'=>'UID CO',
                          'name1'=>'Фамилия',
                          'name2'=>'Имя',
                          'name3'=>'Отчество',
                          'obj_name'=>'ФИО',
                          'dr'=>'Дата рождения',
                          'pol'=>'Пол',
                          'tab_number'=>'Табельный номер',
                          'snils'=>'СНИЛС',
                          'propusk'=>'Пропуск',
                          'driving'=>'Водительское удостоверение',
                          '_working_name'=>'Должность',
                          'inrm'=>'ИНРМ',
                          'working_status'=>'Вид занятости',
                          '_org_name'=>'Организация',
                          '_otdels_names'=>'Подразделение',
                          '_otdels_names1'=>'Подразделение1',
                          '_otdels_names2'=>'Подразделение2',
                          '_otdels_names3'=>'Подразделение3',
                          '_otdels_names4'=>'Подразделение4',
                          '_otdels_names5'=>'Подразделение5',
  ) ;

 function save_setting($tag='',$value='')
 { if ($tag) $this->setting[$tag]=$value ;
   $this->ini_setting_fname='import_XLS_setting_'.MEMBER()->id.'.yaml' ;
   SETUP()->save_ini_setting('/ini/'.$this->ini_setting_fname,$this->setting)  ;
 }

 function read_setting()
 {   $this->ini_setting_fname='import_XLS_setting_'.MEMBER()->id.'.yaml' ;
   $this->setting=SETUP()->load_ini_setting('/ini/'.$this->ini_setting_fname)  ;
   if (!isset($this->setting['set'])) $this->setting['set']=array() ;
     if ($this->setting['temp_table'])
     { $check_table=execSQL('show tables like "'.$this->setting['temp_table'].'"')  ;
       if (!_sizeof($check_table)) $this->save_setting('temp_table','') ;
     }
 }

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

   //echo 'Прочитаны настройки импорта: <br>' ;
   //damp_array($this->setting,1,-1) ;

   $this->panel_upload_promt() ;
   //damp_array($_POST) ;
   switch($_POST['cmd'])
   { //case 'upload_img': $this->upload_img() ; break ;
     case 'show_temp_table': $this->show_temp_table() ; break ;
     case 'show_setting': $this->show_setting() ; break ;
   }
   //$this->cmd_exec_result['no_default_panel'] ;


   //echo 'Сохранены настройки импорта: <br>' ;
   //damp_array($this->setting,1,-1) ;
 }

 function show_temp_table()
 {   if ($this->setting['temp_table'])
     { ?><br><strong>Содержимое временной таблицы, созданной на основе загруженного файла</strong><?
       $recs=execSQL('select * from '.$this->setting['temp_table'],0,1) ;
       print_2x_arr($recs) ;
     }
 }

 function show_setting()
 {
     damp_array($this->setting,1,-1) ;
 }

 function panel_upload_promt()
 {  if ($this->setting['temp_table']) $cnt_uploads=execSQL_value('select count(*) from '.$this->setting['temp_table']) ;  else $cnt_uploads=0 ;

    ?><div class="sky-form no_box_shadow">
      <form action="" method="POST" enctype="multipart/form-data"><input type="hidden" name="cmd" value="upload_file">
      <p><span class="fz_18">1.</span> Загрузите на сервер файл со списком сотрудников, используя заранее подготовленный файл Excel. <a href="<?echo _PATH_TO_EXT?>/aspmo_personal/demo/members.xls">Образец файла</a></p>
      <?    if ($cnt_uploads) echo '<p>Во временной таблице сейчас загружено <strong>'.$cnt_uploads.'</strong> строк</p>' ;
            if ($_POST['cmd']=='show_panel_upload_file') $this->panel_upload_file();
            else if ($_POST['cmd']=='upload_file') { $this->upload_file(); }
            else {?><button class="button v1" style="float:none;display:inline;" cmd="show_panel_upload_file">Перейти к загрузке файла</button><? }
            if ($this->setting['temp_table']) $cnt_uploads=execSQL_value('select count(*) from '.$this->setting['temp_table']) ;  else $cnt_uploads=0 ;
            if ($cnt_uploads) {?><button class="button v1" style="float:none;display:inline;" cmd="show_temp_table">Посмотреть загруженные данные</button><?}
            ?><button class="button v2" style="float:none;display:inline;" cmd="esmo_gateway/clear_ini_XLS_ESMO">Сброс</button><?
         ?>
      <br><br></form>
      <?if ($cnt_uploads){?>
      <p><span class="fz_18">2.</span> Произведите сопоставление полей файла XLS и БД ЭСМО</p>
      <?  $this->panel_set_fields() ; ?>
      <br>
      <p><span class="fz_18">3.</span> Импортируйте данные по сотрудникам в БД ЭСМО</p>
      <div id="panel_step3">
      <?if (_sizeof($this->setting['set']) and array_search('uid',$this->setting['set'])!==false and $cnt_uploads)
      {?> <form>
            <button class="button v1" style="float:none;display:inline;" cmd="import_from_temp_XLS">Импортировать данные в базу</button>
                &nbsp;&nbsp;&nbsp;&nbsp;
                <input type="checkbox" name=full_update value="1"> Полная выгрузка
                <input type="checkbox" name=background value="1"> Фоновый режим
          </form>
      <?}
        else
        { ?><div class="alert">Для импорта данных необходимо сопоставить поля UID и Фамилия</div><?}

        if ($_POST['cmd']=='import_from_temp_XLS') $this->import_from_temp_XLS() ;

      ?>
      </div>
      <!--  пока отключенго, надо тестить и добавить отдельную форму загрузки файла
      <p><span class="fz_18">4.</span> Импортируйте фото сотрудников</p>
          <input type="submit" class="button v1" cmd="upload_img" style="float:none;display:inline;" value="Загрузить архив фото">&nbsp;&nbsp;&nbsp;
          <? if ($_POST['cmd']=='upload_img') $this->upload_img() ;


          ?>
      -->
          <!--<input type="submit" class="button v1" cmd="show_setting" value="Показать конфигурацию импорта">&nbsp;&nbsp;&nbsp;-->

      <?}?>
     </div>
     <style type="text/css">
      span.fz_18{font-size:18px;color:black;}
     </style>
     <?
 }

 function panel_upload_file()
 { //$this->setting=

   unset($this->setting['temp_xls_file']) ;
   unset($this->setting['temp_table']) ;
   unset($this->setting['session_uid']) ;
   $this->save_setting()  ;
   //damp_array($this->setting) ;

   ?><div id="panel_upload_promt"><form action="" method="POST" enctype="multipart/form-data"><input type="hidden" name="cmd" value="upload_file">
          <input name="upload_file[]" type="file" size="50">
          <input type="submit" class="button v1" cmd="upload_file" style="float:none;display:inline;" value="Загрузить файл"><br><br>
          <p>На этом этапе данные из файла XLS будут загружены по временную таблицу, в действующую таблицу персонала ничего загружено не будет</p><p><strong>Внимание!</strong><p>
          <div class=comment>Размер файла не более 1М, формат файла - Excel XLS.</div>
   <?

 }
/*
 function upload_img()
 {   ?><h2>Загрузка архива с фото сотрудников</h2><?
     if (_sizeof($_FILES))
     { $recs_files=conver_FILES_to_recs($_FILES['upload_file']) ;

       if (_sizeof($recs_files[0]))
         { //if ($recs_files[0]['type']=='application/vnd.ms-excel')
           { ?><p>Загружаем архив "<strong><?echo $recs_files[0]['name']?></strong>"</p><?
              $file_name=_DIR_TO_ROOT.'/temp/arh.zip' ;
              move_uploaded_file($recs_files[0]['tmp_name'],$file_name) ;
              $this->unzip_arhive($file_name,_DIR_TO_ROOT.'/temp/images/') ;
              $list_images=get_files_list(_DIR_TO_ROOT.'/temp/images/') ;
              damp_array($list_images,1,-1) ;
              foreach($list_images as $fname)
              {  $uid=execSQL_value('select uid from '.$this->setting['temp_table'].' where G_PhotoFile like "'.basename($fname).'"') ;
                 if ($uid)
                 { // загружаем фото
                   $rec_personal=execSQL_van('select pkey,obj_name from obj_site_personals where uid="'.$uid.'"') ;
                   // удаляем старое фото
                   execSQL_update('delete from obj_site_personals_image where parent='.$rec_personal['pkey']) ;
                   // добавляем новое фото
                   $cur_file_info=array('name'=>basename($fname),'upl_name'=>$fname) ;
                   $img_reffer=obj_upload_image($rec_personal['_reffer'],$cur_file_info,array('view_upload'=>1,'debug'=>0,'no_clone'=>0)) ;

                   $img_name=execSQL_value('select file_name from obj_site_personals_image where parent='.$rec_personal['pkey'].' order by indx limit 1',0) ;
                   execSQL_update('update obj_site_personals set _image_name="'.$img_name.'" where pkey='.$rec_personal['pkey'],0) ;
                   echo 'Фото загружено в карточку "'.$rec_personal['obj_name'].'"<br><br>' ;

                 }
              }
           }
         }
     }
 }

 function unzip_arhive($arh_name,$desct_dir)
 {
     $zip = new ZipArchive;
      if ($zip->open($arh_name) === TRUE)
      {   $zip->extractTo($desct_dir);
          $zip->close();
          echo 'Архив '.basename($arh_name).' успешно распакован<br>';
      }
      else { echo 'Ошибка извлечения архива '.basename($arh_name).'<br>'; return ; }

 }
 */
 function upload_file()
  {
    ?><strong>Загрузка файла со списком сотрудников во временную таблицу</strong><?
    if (_sizeof($_FILES))
    { $recs_files=conver_FILES_to_recs($_FILES['upload_file']) ;
      if (_sizeof($recs_files[0]))
        { //if ($recs_files[0]['type']=='application/vnd.ms-excel')
          { ?><p>Загружаем данные из файла "<strong><?echo $recs_files[0]['name']?></strong>" во временную таблицу</p><?

             include_once('c_services_esmo_gateway_upload_persons_XLS.php') ;
             $XLS_import=new c_services_esmo_gateway_upload_persons_XLS(array('upload_info'=>$recs_files[0],'uid'=>MEMBER()->id)) ;
             $XLS_import->XLS_row_header=1 ; // заголовки в первой строке
             $XLS_import->setting['upload_fname']=$XLS_import->connect_SOURCE() ;
             $XLS_to_DB=$XLS_import->upload_source_file_to_db() ;
             //damp_array($XLS_to_DB) ;
             $this->setting['temp_xls_file']=$XLS_to_DB->XLS_fname ;
             $this->setting['temp_table']=$XLS_to_DB->table ;
             $this->setting['session_uid']=$XLS_to_DB->session_uid ;
             $this->setting['row_import']=$XLS_to_DB->row_import ;
             $this->setting['csv_headers']=$XLS_to_DB->arr_XLS_cols_names ;
             $this->setting['db_headers']=$XLS_to_DB->arr_XLS_cols_DB ;
             $this->save_setting()  ;

             return(array('type'=>'success','no_default_panel'=>1)) ;
          }
          //else return(array('type'=>'error','code'=>'failed_type','text'=>'Неверный тип файла. Загрузите файл в формате Excel.')) ;
        }
      else return(array('type'=>'error','code'=>'not_uploaded_file','text'=>'Не был выбран файл')) ;
    }
    else return(array('type'=>'error','code'=>'not_uploaded_file','text'=>'Не был выбран файл')) ;
  }

  function panel_set_fields()
  { $this->read_setting() ;
    $recs=execSQL('select * from '.$this->setting['temp_table'].' order by rand() limit 10') ;
    $data=array() ;
    foreach($recs as $rec) foreach($rec as $fname=>$fvalue) if ($fvalue) $data[$fname][$fvalue]=$fvalue ;
    //damp_array($data) ;
    ?><form><?
    ?><table class="basic fz_small" id="panel_set_fields"><tr><th>Столбец Excel</th><th>Столбец Excel (код)</th><th>Поле ЭСМО</th><th>Пример данных</th></tr>
       <?if (_sizeof($this->setting['csv_headers'])) foreach($this->setting['csv_headers'] as $col=>$fname)
       {   $table_fname=$this->setting['db_headers'][$col] ;
           ?><tr><td class="left"><?echo $fname?></td>
              <td class="left"><?echo $table_fname?></td>
              <td><select name="<?echo $col?>"><option value=""></option>
              <?
                  if (_sizeof($this->db_fields)) foreach($this->db_fields as $fname=>$ftitle) {?><option value="<?echo $fname?>" <?if ($this->setting['set'][$col]==$fname) echo 'selected'?>><?echo $ftitle?></option><?}
              ?>
                </select>
              </td>
              <td><? if (_sizeof($data[$table_fname])) echo implode(', ',$data[$table_fname])?></td>
          </tr><?}?>
       </table>
      </form>
      <script type="text/javascript">
         $j('table#panel_set_fields select').change(function(){send_ajax_request({cmd:'esmo_gateway/set_fields_XLS_ESMO',account_id:<?echo MEMBER()->id?>,el_name:$j(this).attr('name'),el_value:$j(this).val()});})
       </script>
    <?
  }

  function import_from_temp_XLS()
  { ?><br><h2>Импортируем данные из временной таблицы XLS в таблицу персонала ЭСМО</h2><?
    $arr=array_flip($this->setting['set']) ;
    $sets=array() ;
    if (_sizeof($arr)) foreach($arr as $db_fname=>$db_col) $sets[$db_fname]=$this->setting['db_headers'][$db_col] ;
    //damp_array($_POST) ; full_update

    $setting=array('source_temp_file'=>$this->setting['temp_xls_file'],
                   'field_mappings'=>$sets,
                   'full_update'=>($_POST['full_update'])? 1:0
                  ) ;

    if ($_POST['background'])
    {
      include(_DIR_TO_MODULES.'/engine/i_backgroup_process.php') ;
      $back_process=new i_backgroup_process('/services/esmo_gateway/upload_persons_XLS/',$setting) ;
      $back_process->panel_background_process() ;
    }
    else
    {
      include_once('c_services_esmo_gateway_upload_persons_XLS.php') ;
      $XLS_import=new c_services_esmo_gateway_upload_persons_XLS($setting) ;
      $result=$XLS_import->exec() ;
      damp_array($result,1,-1) ;
    }


  }

}
?>
