<?php
include_once(_DIR_EXT."/aspmo_personal/c_personal.php");
class c_page_cab_esmo_alrosa_personal_upload extends c_page_cab_personal
{


 public $h1='Загрузка списка сотрудников' ;

 function block_main()
 { $this->page_title() ;
   if (!$this->cmd_exec_result['no_default_panel']) $this->panel_upload_promt() ;
 }

 function panel_upload_promt()
 { ?><div id="panel_upload_promt"><form action="" method="POST" enctype="multipart/form-data"><input type="hidden" name="cmd" value="upload_file">
      <p>Загрузите список сотрудников, используя заранее подготовленный файл CSV Excel. <a href="<?echo _PATH_TO_EXT?>/aspmo_alrosa/demo/members.xls">Образец файла</a><p>
      <p><strong>Внимание!</strong><p>
      <ul class="info"><li>Записи из файла будут добавлены к существующим записям базы</li>
          <li>При совпадении ФИО сотрудника записи в базе будут затерты.</li>
      </ul>
      <div class=comment>Размер файла не более 1М, формат файла - Excel CSV.</div>

      <div class=buttons><input name="upload_file[]" type="file" size="50"><input type="submit" value="Загрузить файл" class=button_green>&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name=read_only value="1"> Не добавлять записи в базу, только показать</div>
     </form></div><?
 }

 function CMD_upload_file()
  { //$GLOBALS['debug_db']=2 ;$GLOBALS['debug_trace_level']=5 ;
    ?><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')
          { ?><h2>Загружаем данные из файла "<?echo $recs_files[0]['name']?>"</h2><?

              $result=$this->upload_personal_from_excel_csv($recs_files[0]['tmp_name']) ;
              $res['Загружено из файла CSV']=$result['rows'] ;
              $res['Обновлено записей в базе']=$result['update'] ;
              $res['Добавлено записей в базу']=$result['insert'] ;
              echo 'Загрузка завершена<br>'  ;
              damp_array($res,1,-1) ;
              reboot_engine() ;
              PERSONAL()->update_levels_parents() ;

            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'=>'Не был выбран файл')) ;
  }

 //==========================================================================================================================================================================
   // ЗАГРУЗКА СОТРУДНИКОВ ИЗ EXCEL
   //==========================================================================================================================================================================
   var $personal_ids ;
   var $arr_org_names ;
   var $arr_work_names ;
   var $_arr_otdel_names ;
   var $arr_otdel_names ;

   function upload_personal_from_excel_csv($tmp_file_name)
   { $file_name=_DIR_TO_ROOT.'/tmp/members.csv' ;  $members = array();
     move_uploaded_file($tmp_file_name,$file_name) ;
     //damp_array(_IL('IL_works')) ;
     $row=0 ;
     $this->personal_ids=execSQL_row('select tab_number,pkey from '.PERSONAL()->table_name.' where tab_number!="" and not tab_number is null')  ;
     $this->arr_org_names=execSQL_row('select pkey,obj_name from '.PERSONAL()->table_name.' where clss=207 and parent=1') ;
     $this->arr_work_names=_IL('IL_works')->recs_names ;
     $this->_arr_otdel_names=execSQL('select pkey,parent,obj_name from '.PERSONAL()->table_name.' where clss=208 and parent!=1 and pkey!=1') ;
     $this->arr_otdel_names=group_by_field('parent',$this->_arr_otdel_names,'pkey','obj_name') ;
     $cnt_update=0 ; $cnt_adding=0 ;

     if (($handle = fopen($file_name, "r")) !== FALSE)
     {  while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
        {   $rec=array() ;
            if (_sizeof($data)) foreach($data as $col=>$value)
            {  $value=trim(iconv('windows-1251','utf-8',$value)) ;
               switch($col)
                 { case 0:          if ($value) $rec['name1']=$value ;  break ;
                   case 1:          if ($value) $rec['name2']=$value ;  break ;
                   case 2:          if ($value) $rec['name3']=$value ;  break ;
                   case 3:          if ($value) $rec['tab_number']=$value ;  break ;
                   case 4:          if ($value) $rec['_working_name']=$value ;  break ;
                   case 5:          if ($value)
                                            {  $arr=explode('$',$value) ;
                                               if (_sizeof($arr)) foreach($arr as $i=>$value2)
                                               {  $value2=trim($value2) ;
                                                  if (!$i) $rec['_org_name']=$value2 ;
                                                  else if ($i==1) $rec['_otdel_name']=$value2 ;
                                                  //else     $rec['_otdels_names'][]=$value2 ;
                                               }
                                            }
                                            break ;
                   case 6:            $rec['pol']=($value=='М' or $value=='Мужской')? 0:1 ;break ;
                   case 7:            list($rec['dr'],$rec['age'])=$this->get_dr_age($value) ;break ;
                   //defau

                }
            }
            if (!$rec['obj_name'] and $rec['name1']) $rec['obj_name']=trim($rec['name1'].' '.$rec['name2'].' '.$rec['name3']) ;
            $row++ ;
            $result='' ;
            if (!$_POST['read_only'] and $rec['obj_name']) $result=$this->adding_personal_from_rec($rec) ;
            if ($result=='update') $cnt_update++ ; else if ($result=='insert') $cnt_adding++ ;
            //echo 'Прочитана строка '.$row.'<br>' ;
            //if ($row>90) break ;
        }
        fclose($handle);
     }
     return(array('rows'=>$row,'update'=>$cnt_update,'insert'=>$cnt_adding)) ;
   }

  //==========================================================================================================================================================================
   // ДОБАВЛЕНИЕ СОТРУДНИКОВ В БД
   //==========================================================================================================================================================================

   function adding_personal_from_rec($rec)
   {
      //damp_array($arr_org_names,1,-1) ; damp_array($arr_otdel_names,1,-1) ; damp_array($arr_work_names,1,-1) ;
      //if (_sizeof($recs)) foreach($recs as $indx=>$rec)
       { $org_id=0 ; $otdel_id=0 ; $work_id=0 ;
         // проверяем организацию
         if ($rec['_org_name'])
         {   if (_sizeof($this->arr_org_names) and in_array($rec['_org_name'],$this->arr_org_names)) $org_id=array_search($rec['_org_name'],$this->arr_org_names) ;
             else
             { echo 'Добавляем новую организацию - "<strong>'.$rec['_org_name'].'</strong>"<br>' ;
               $org_id=adding_rec_to_table(PERSONAL()->table_name,array('clss'=>207,'parent'=>1,'obj_name'=>$rec['_org_name']),array('no_auto_indx'=>1)) ;
               $this->arr_org_names[$org_id]=$rec['_org_name'] ;
               //LOGS()->reg_log('Изменение структуры каталога сотрудников','Добавление новой организации - "'.$rec['_org_name'].'", id='.$org_id) ;
             }
         }
         //echo '$org_id='.$org_id.'<br>';
         // проверяем отдел
         if ($rec['_otdel_name'])
         {   if (_sizeof($this->arr_otdel_names[$org_id]) and in_array($rec['_otdel_name'],$this->arr_otdel_names[$org_id])) $otdel_id=array_search($rec['_otdel_name'],$this->arr_otdel_names[$org_id]) ;
             else
               {
                 $otdel_id=adding_rec_to_table(PERSONAL()->table_name,array('clss'=>208,'parent'=>$org_id,'obj_name'=>$rec['_otdel_name']),array('no_auto_indx'=>1)) ;
                 $this->arr_otdel_names[$org_id][$otdel_id]=$rec['_otdel_name'] ;
                 echo 'Добавляем новый отдел - "<strong>'.$rec['_otdel_name'].'</strong>" ['.$otdel_id.']<br>' ;

                 //LOGS()->reg_log('Изменение структуры каталога сотрудников','Добавление нового отдела - "'.$rec['_otdel_name'].'", id='.$otdel_id) ;
               }
         }
         if (_sizeof($rec['_otdels_names']))
         {   $parent_otdel=$org_id ; //damp_array($rec['_otdels_names']) ;
             foreach($rec['_otdels_names'] as $i=>$otdel_name) if ($otdel_name)
             {
                if (_sizeof($this->arr_otdel_names[$org_id]) and in_array($otdel_name,$this->arr_otdel_names[$org_id]))
                {   $otdel_id=array_search($otdel_name,$this->arr_otdel_names[$org_id]) ;
                    //echo 'Отдел "<strong>'.$otdel_name.'</strong>" уже добавлен<br>' ;
                }
                else
                { //$otdel_id=adding_rec_to_table(PERSONAL()->table_name,array('clss'=>208,'parent'=>$parent_otdel,'obj_name'=>$otdel_name),array('no_auto_indx'=>1)) ;
                  $this->arr_otdel_names[$org_id][$otdel_id]=$otdel_name ;
                  echo 'Добавляем новый отдел - "<strong>'.$otdel_name.'</strong>" ['.$otdel_id.']<br>' ;
                  $parent_otdel=$otdel_id ;
                  print_r($rec) ; echo '<br>' ;
                }
             }
             unset($rec['_otdels_names']) ;
         }

         //echo '$otdel_id='.$otdel_id.'<br>';
         // проверяем должность
         // проверяем организацию
         if (_sizeof(_IL('IL_works')->recs_names) and in_array($rec['_working_name'],_IL('IL_works')->recs_names)) $work_id=array_search($rec['_working_name'],_IL('IL_works')->recs_names) ;
         else
         { echo 'Добавляем новую должность - "<strong>'.$rec['_working_name'].'</strong>"<br>' ;
             $work_id=_IL('IL_works')->get_rec_id_by_name($rec['_working_name']);
              //     _CLSS(20)->obj_create(array('tkey'=>_DOT(TM_LIST)->pkey,'clss'=>20,'parent'=>32,'obj_name'=>$rec['_working_name']),array('no_save_to_session'=>1,'no_auto_indx'=>1)) ;
           //_IL('IL_works')->recs_names[$work_id]=$work_rec['obj_name'] ;
           //$work_id=$work_rec['id'] ;
           ///LOGS()->reg_log('Изменение структуры каталога сотрудников','Добавление новой должности - "'.$rec['_working_name'].'", id='.$work_id) ;
         }
         //echo '$work_id='.$work_id.'<br>';
         unset($rec['_working_name'],$rec['_otdel_name'],$rec['_org_name']) ;
         $rec['working']=$work_id ;
         $id_exsist=$this->personal_ids[$rec['tab_number']]  ;
         if ($id_exsist) { $rec['parent']=($otdel_id)? $otdel_id:$org_id ;
                           $res=update_rec_in_table(PERSONAL()->table_name,$rec,'pkey='.$id_exsist) ; //$cnt_update++ ;
                           //$recs[$indx]['id']=$id_exsist ;
                           $result='update' ;
                         }
         else            { $rec['clss']=211 ;
                           $rec['parent']=($otdel_id)? $otdel_id:$org_id ;
                           //$recs[$indx]['id']=
                                   adding_rec_to_table(PERSONAL()->table_name,$rec,array('no_return_id'=>1,'no_auto_indx'=>1)) ;
                           echo 'Добавляем нового сотрудника - "<strong>'.$rec['obj_name'].'</strong>"<br>' ;
                           //$cnt_adding++ ;
                           $result='insert' ;
                         }
       }
       return($result) ;
   }

   // дата идет в формате 01/01/10, переводим в формат обычной даты
   function get_dr_age($str_data)
   {  $str_data=str_replace(array('/','-'),'.',$str_data) ;
      list($date,$time)=explode(' ',$str_data) ;
      $arr=explode('.',$date) ;
      $dr='' ; $age=0 ;
      if (_sizeof($arr)==3)
       { $now_year=(int)date('y') ;
         $_y=(int)$arr[2] ;
         if (strlen($arr[2])==4)  $yaer=$_y ;
         else if ($now_year>$_y)  $yaer=(int)'20'.$arr[2] ;
         else                     $yaer=(int)'19'.$arr[2] ;
         // измнено для выгрузки из лукойла
         $month=(int)$arr[1] ;
         $day=(int)$arr[0] ;
         $dr=sprintf("%02d.%02d.%04d", $day, $month, $yaer);
         $tt = mktime(0,0,0,$month,$day,date('Y'));   // дата день рождения в этом году
         $now_year=(int)date('Y') ;
         $age=$now_year-$yaer ;
         if (time()<$tt) $age=$age-1 ;
       }
      return(array($dr,$age)) ;
   }


}



?>
