<?php
$__functions['init'][]='_magnit_site_vars' ;
$__functions['boot_site'][]='_magnit_site_boot' ;

function magnit() {return($_SESSION['magnit_system']);$_SESSION['magnit_system']=new c_magnit_system();return($_SESSION['magnit_system']);} ;


function _magnit_site_vars()
{
	$_SESSION['ARR_mo_tk_type']=array(0=>'предрейсовый',
                                      1=>'послерейсовый'
                                     ) ;
}

function _magnit_site_boot($options)
{
  create_system_modul_obj('magnit',$options) ;

}


class c_magnit_system
{

    function __construct($create_options=array())
    {   $this->system_name='magnit' ;
        ENGINE()->reg_ext('demo_sign','Проверка подписей');

    }

    function declare_menu_items_4($page)
    {
        $page->menu['/cab/setting/']['items']['/cab/magnit/setting/']='Магнит' ;
        $page->menu['/cab/demo_sign/']='Проверка подписей' ;

    }

 function  import_persons_from_SOAP_update($options=array())
 {   include_once(_DIR_TO_MODULES_LOCAL.'/magnit/i_SOAP_import.php') ;
     //ob_start() ; $t1=fixed_time() ;
     $GLOBALS['LS_debug_mode']=1 ;
     ob_start() ;

     SOAP_import()->SOAP_node=$GLOBALS['LS_magnit_import_personal_from_SOAP_node_update'] ;  //'ESMOCHG' ; // только изменения

     SOAP_import()->connect_SOURCE($options['local_fname']) ;

     if (strlen(SOAP_import()->SOAP_XML_content)  and !$options['only_upload_source'])
     {
         SOAP_import()->parse_source_headers() ;

         SOAP_import()->create_temp_tables() ;

         SOAP_import()->parse_SOURCE_to_DB() ;

         SOAP_import()->sync_TEMP_DB_ESMO() ;

         SOAP_import()->sync_workings_persons() ;

         OT()->set_inrm_to_personals();

         execSQL_update('update obj_site_workers set job_data=c_data where job_data is null') ;

     } else echo 'Данные не получены' ;

     $text=ob_get_clean() ;
     echo $text ;
     $log_fname=LOGS()->reg_file_log('check_import_persons_from_SOAP_update',$text) ;
     $action=($options['local_fname'])? 'Загрузка XML из файла '.basename($options['local_fname']):'Загрузка данных XML c узла '.SOAP_import()->SOAP_node ;
     LOGS()->reg_log('Импорт сотрудников из 1С ЗУП изменения',$action.'<br><a href="/logs/'.str_replace(array('[fname=',']'),'',basename($log_fname)).'" target=_blank>Отчет</a><br>');
 }

 function  import_persons_from_SOAP_full($options=array())
      {   include_once(_DIR_TO_MODULES_LOCAL.'/magnit/i_SOAP_import.php') ;
          $GLOBALS['LS_debug_mode']=1 ;
          ob_start() ;

          SOAP_import()->SOAP_node=$GLOBALS['LS_magnit_import_personal_from_SOAP_node_full'] ; //'ESMOCHG' ; // только изменения
          SOAP_import()->full_update=1 ;

          SOAP_import()->connect_SOURCE($options['local_fname']) ;

          if (strlen(SOAP_import()->SOAP_XML_content) and !$options['only_upload_source'])
          {   FILE_LOG()->append('parse_source_headers: start') ;
              SOAP_import()->parse_source_headers() ;
              FILE_LOG()->append('parse_source_headers: end') ;

              FILE_LOG()->append('create_temp_tables: start') ;
              SOAP_import()->create_temp_tables() ;
              FILE_LOG()->append('create_temp_tables: end') ;

              FILE_LOG()->append('parse_SOURCE_to_DB: start') ;
              SOAP_import()->parse_SOURCE_to_DB() ;
              FILE_LOG()->append('parse_SOURCE_to_DB: end') ;

              FILE_LOG()->append('update_levels_parents PERSONAL: start') ;
              PERSONAL()->update_levels_parents() ;
              FILE_LOG()->append('update_levels_parents PERSONAL: start') ;

              FILE_LOG()->append('update_levels_parents WORKERS: start') ;
              PERSONAL()->update_levels_parents(array('table_name'=>'obj_site_workers')) ;
              FILE_LOG()->append('update_levels_parents WORKERS: start') ;

              FILE_LOG()->append('sync_TEMP_DB_ESMO: start') ;
              SOAP_import()->sync_TEMP_DB_ESMO() ;
              FILE_LOG()->append('sync_TEMP_DB_ESMO: end') ;

              FILE_LOG()->append('sync_workings_persons: start') ;
              SOAP_import()->sync_workings_persons() ;
              FILE_LOG()->append('sync_workings_persons: end') ;

              FILE_LOG()->append('set_inrm_to_personals: start') ;
              OT()->set_inrm_to_personals();
              FILE_LOG()->append('set_inrm_to_personals: end') ;

              execSQL_update('update obj_site_workers set job_data=c_data where job_data is null') ;
          }
          else echo 'Данные не получены' ;
          $text=ob_get_clean() ;
          echo $text ;
          $log_fname=LOGS()->reg_file_log('check_import_persons_from_SOAP_update',$text) ;
          LOGS()->reg_log('Импорт сотрудников из 1С ЗУП срез','Загрузка данных XML c узла '.SOAP_import()->SOAP_node.'<br><a href="/logs/'.str_replace(array('[fname=',']'),'',basename($log_fname)).'" target=_blank>Отчет</a><br>') ;

      }

  // сотрудники даты приема на работу которых были ранее даты по организациям в инструктаже
  // они не были направлены на инструктаж, фактически, они его прошли до начала работы ЭСМО
  // этим сотрудникам меняют должность - обновляется значение поля job_data
  // и они автоматически попадают на инструктаж, так как в ЭСМО нет отметки что инструктаж пройден
  // а дата приема на работу больше чем дата по организации в инструктаже
  //
  // варианты решения проблемы
  // 1. Загрузить списком XLS этих сотрудников и поставить им статус "инструктаж пройден". Но в этом варианте у сотрудника не будет записей по пройденным занятиям
  //    и утилита проверки корректности мероприятия сбросит им статусы "пройден" так как занятий у него не было
  //    эмулировать занятия  - слишком замороченно
  //    добавить флаг - инструктаж проведен внешней системой - тогда доработать утилиту, чтобы не трогала данных сотрудников

 // обработка события изменения данных по СО
 // проверяет, есть ли изменение организации
 // если есть, проверяет есть ли пройденный инструктаж
 // если есть - меняет статус сотрудника на непройдено, сотрудник должен заново пройти инструктаж
 function on_event_workers_changed_records($options)
	         {   ob_start() ;
                 //print_2x_arr($options['recs']) ;
	             echo '<br><strong>ОБРАБОТКА СОБЫТИЯ ИЗМЕНЕНИЯ ДАННЫХ СОТРУДНИКОВ</strong><br><br>' ;
	             $arr_personal_ids=array() ;$arr_personal_ids_change_org=array() ;
	             $result=array() ;
	             $result['Поступило записей']=sizeof($options['recs']) ;
	             $result['Источник записей']=$options['from'] ;

	             // отбираем только тех сотрудников, у кого сменилось АТП. Записи по основной и совмещаемой должности будут идти разными строками
	             if (sizeof($options['recs'])) foreach($options['recs'] as $rec) $arr_personal_ids[]=$rec['personal_id'] ;
	             if (sizeof($options['recs'])) foreach($options['recs'] as $rec) if ($rec['org_id']!=$rec['old_org_id'])
                 {  // временный костыль для сотрудника с двумя совмещениями
                 	if ($rec['personal_id']!=53361)
                    {    $arr_personal_ids_change_org[]=$rec['personal_id'] ;

                        //3. При смене подразделения (с АТП на АТП) - добавлять на мероприятия:
                        // -Проверка практических навыков вождения ТС
                        $this->personal_goto_instruktion(819,$rec['personal_id'],$result,['comment'=>'смена подразделения (с АТП на АТП)']) ;
                    }
                 }

                 if (sizeof($options['recs'])) foreach($options['recs'] as $rec)
                 {
                     //При смене должности – (с водителя экспедитора категории «С» ID 75 на водителя экспедитора ID 5) добавлять на мероприятия:
                     // -Практическое занятие для водителей-новичков; ID 685
                     // -Проверка практических навыков вождения ТС; ID 819
                     if ($rec['old_work_id']==75 and $rec['work_id']==5)
                     { $this->personal_goto_instruktion(685,$rec['personal_id'],$result,['comment'=>'смена должности: водитель-экспедитор категории «С» => водитель-экспедитор']) ;
                       $this->personal_goto_instruktion(819,$rec['personal_id'],$result,['comment'=>'смена должности: водитель-экспедитор категории «С» => водитель-экспедитор']) ;
                     }

                     //При повторном трудоустройстве (вне зависимости от времени разрыва) - добавлять на мероприятия:
                     // -Теоретический курс «БДД для водителей-новичков»  ; ID 679
                     // -Практическое занятие для водителей-новичков; ID 685
                     // -Проверка практических навыков вождения ТС ID 819
                     if ($rec['fired_data']>0 and $rec['fired_data']<=time() and !$rec['fired_data_pause'] and $rec['enabled'])
                     {
                         $this->personal_goto_instruktion(679,$rec['personal_id'],$result,['comment'=>'повторное трудоустройство']) ;
                         $this->personal_goto_instruktion(685,$rec['personal_id'],$result,['comment'=>'повторное трудоустройство']) ;
                         $this->personal_goto_instruktion(819,$rec['personal_id'],$result,['comment'=>'повторное трудоустройство']) ;
                     }


                 }


	             $result['ID сотрудников, все']=implode(',',$arr_personal_ids) ;
	             $result['ID сотрудников, изменение организации']=implode(',',$arr_personal_ids_change_org) ;
	             if (sizeof($arr_personal_ids_change_org))
	             {   // проверяем попадает ли сотрудник под вводный инструктаж
	                 // получаем список ввобных инструктажей
	                 $events_ids=execSQL_line('select pkey from obj_site_events_schedule where ext="esmo_magnit_instruction/i_event_instruction2"') ;
	                 $result['Число вводных инструктажей']=sizeof($events_ids) ;
	                 if (sizeof($events_ids)) foreach($events_ids as $event_id)
	                 { $rec_event=EVENTS()->get_event_by_id($event_id) ;
	                   $obj_event=EVENTS()->get_event_obj_by_id($rec_event['pkey']) ;
	                   //damp_array($obj_event,1,-1) ;
	                   //damp_array($rec_event,1,-1) ;

	                   $usl=($rec_event['_ext_info']['usl_select'])?:'clss=211 and enabled=1' ;
	                   $usl.=' and pkey in ('.implode(',',$arr_personal_ids_change_org).')' ;
	                   //echo '$usl='.$usl.'<br>' ;

	                   // если у человека статус "инструктаж пройден" и сменилось  АТП - направляем повторно на инструктаж
	                   $exist_pass_recs=execSQL('select * from view_event_personals where event_id='.$rec_event['pkey'].' and '.$usl) ;
	                   if (sizeof($exist_pass_recs)) foreach($exist_pass_recs as $rec_personals_pass)
	                   {   $result['Найдено участие во вводном инструктаже']++ ;
	                       echo 'Сотрудник <strong>'.$rec_personals_pass['obj_name'].'</strong> (ID <strong>'.$rec_personals_pass['pkey'].'</strong>), инструктаж <strong>'.$rec_event['obj_name'].'</strong> (ID '.$rec_event['pkey'].'), участие в мероприятии ID <strong>'.$rec_personals_pass['event_pass_id'].'</strong>, статус участия <strong>'.$obj_event->arr_status[$rec_personals_pass['event_pass_status']].'</strong> ['.$rec_personals_pass['event_pass_status'].']<br>' ;
	                       echo 'Сотрудник ID <strong>'.$rec_personals_pass['pkey'].'</strong> будет отправлен на повторное прохождение<br>' ;

	                      // необходимо закрыть все сообщения, которые были отправлены ранее по этому инструктажу
	                      $message_ids=execSQL_line('select pkey from obj_site_personal_mess where personal_id='.$rec_personals_pass['pkey'].' and source_pkey='.$rec_personals_pass['event_pass_id'].' and source_tkey='.$rec_personals_pass['event_pass_tkey'].' and status!=4') ;
	                      if (sizeof($message_ids))
	                      {   echo 'Необходимо закрыть <strong>'.sizeof($message_ids).'</strong> незакрытых сообщений сотруднику ID <strong>'.$rec_personals_pass['pkey'].'</strong> по event_pass ID <strong>'.$rec_personals_pass['event_pass_id'].'</strong><br>' ;
	                          foreach($message_ids as $mess_id)
	                          { PERSONAL()->message_personal_close($mess_id,array('comment'=>'Сообщение закрыто в связи с повторным направление на инструктаж при смене АТП')) ;
	                            echo 'Закрыто сообщение <strong>'.$mess_id.'</strong><br>' ;
	                            $result['Закрыто сообщений']++ ;
	                          }
	                      }

	                      echo 'Переводим event_pass <strong>'.$rec_personals_pass['event_pass_id'].'</strong> сотрудника ID <strong>'.$rec_personals_pass['pkey'].'</strong> в статус <strong>подлежит инструктажу</strong> [1]<br>' ;
	                      EVENTS()->set_event_personal_data($rec_event['pkey'],$rec_personals_pass['pkey'],array('status'=>1,'fname'=>'','time_print'=>0,'mess_id'=>0,'result'=>0,'doc_id'=>0,'group_id'=>0,'close_data'=>0,'scan_id'=>0,'block_data'=>0),'Подлежит повторному прохождению в связи со сменой АТП') ;
	                      $result['Перевод в подлежат инструтажу']++ ;

	                     // если в мероприятии автоперевод в "направлен на инструктаж" - направляем
	                     // направляем на повторное прохождение по одному, так как таких товарищей будет немного
	                     if ($rec_event['_ext_info']['auto_status_2']==2)
	                     { echo 'Переводим event_pass <strong>'.$rec_personals_pass['event_pass_id'].'</strong> сотрудника ID <strong>'.$rec_personals_pass['pkey'].'</strong> в статус <strong>направлен на инструктаж</strong> [2]<br>' ;
	                       $obj_event->set_personal_to_status_2($rec_event['pkey'],$rec_personals_pass['pkey']) ;
	                       $result['Перевод в направлены на инструктаж']++ ;
	                     }
	                     echo '<br>' ;
	                   }
	                 }
	             } else echo 'Сотрудников, с измененной АТП, не найдено<br>' ;
	             damp_array($result,1,-1) ;

	             $text=ob_get_clean() ;
	             LOGS()->reg_log('on_event_workers_changed_records','',array('save_to_file'=>$text)) ;
	             echo $text ;
	         }

  function personal_goto_instruktion($event_id,$personal_id,&$result,$options=[])
  {
       $rec_event=EVENTS()->get_event_by_id($event_id) ;
       if (!$rec_event['pkey'])
       {
           $result['Мероприятие ID '.$event_id.' не найдено']++ ;
           return ;
       }
       $obj_event=EVENTS()->get_event_obj_by_id($rec_event['pkey']) ;
       //damp_array($obj_event,1,-1) ;
       //damp_array($rec_event,1,-1) ;

       $_usl=[] ;
       $_usl[]='event_id='.$rec_event['pkey'] ;
       $_usl[]=($rec_event['_ext_info']['usl_select'])?:'clss=211 and enabled=1' ;
       $_usl[]='pkey='.$personal_id ;
       $usl_select=implode(' and ',$_usl) ;
       //echo '$usl='.$usl.'<br>' ;

       // если у человека статус "инструктаж пройден" и сменилось  АТП - направляем повторно на инструктаж
       $exist_pass_recs=execSQL('select * from view_event_personals where '.$usl_select) ;
       if (sizeof($exist_pass_recs)) foreach($exist_pass_recs as $rec_personals_pass)
       {   $result['Найдено участие во вводном инструктаже']++ ;
           echo 'Сотрудник <strong>'.$rec_personals_pass['obj_name'].'</strong> (ID <strong>'.$rec_personals_pass['pkey'].'</strong>), инструктаж <strong>'.$rec_event['obj_name'].'</strong> (ID '.$rec_event['pkey'].'), участие в мероприятии ID <strong>'.$rec_personals_pass['event_pass_id'].'</strong>, статус участия <strong>'.$obj_event->arr_status[$rec_personals_pass['event_pass_status']].'</strong> ['.$rec_personals_pass['event_pass_status'].']<br>' ;
           echo 'Сотрудник ID <strong>'.$rec_personals_pass['pkey'].'</strong> будет отправлен на повторное прохождение<br>' ;

          // необходимо закрыть все сообщения, которые были отправлены ранее по этому инструктажу
          $message_ids=execSQL_line('select pkey from obj_site_personal_mess where personal_id='.$rec_personals_pass['pkey'].' and source_pkey='.$rec_personals_pass['event_pass_id'].' and source_tkey='.$rec_personals_pass['event_pass_tkey'].' and status!=4') ;
          if (sizeof($message_ids))
          {   echo 'Необходимо закрыть <strong>'.sizeof($message_ids).'</strong> незакрытых сообщений сотруднику ID <strong>'.$rec_personals_pass['pkey'].'</strong> по event_pass ID <strong>'.$rec_personals_pass['event_pass_id'].'</strong><br>' ;
              foreach($message_ids as $mess_id)
              { PERSONAL()->message_personal_close($mess_id,array('comment'=>'Сообщение закрыто в связи с направление на инструктаж при: '.$options['comment'])) ;
                echo 'Закрыто сообщение <strong>'.$mess_id.'</strong><br>' ;
                $result['Закрыто сообщений']++ ;
              }
          }

          echo 'Переводим event_pass <strong>'.$rec_personals_pass['event_pass_id'].'</strong> сотрудника ID <strong>'.$rec_personals_pass['pkey'].'</strong> в статус <strong>подлежит инструктажу</strong> [1]<br>' ;
          EVENTS()->set_event_personal_data($rec_event['pkey'],$rec_personals_pass['pkey'],array('status'=>1,'fname'=>'','time_print'=>0,'mess_id'=>0,'result'=>0,'doc_id'=>0,'group_id'=>0,'close_data'=>0,'scan_id'=>0,'block_data'=>0),'Подлежит повторному прохождению в связи c:'.$options['comment']) ;
          $result['Перевод в подлежат инструтажу']++ ;

         // если в мероприятии автоперевод в "направлен на инструктаж" - направляем
         // направляем на повторное прохождение по одному, так как таких товарищей будет немного
         if ($rec_event['_ext_info']['auto_status_2']==2)
         { echo 'Переводим event_pass <strong>'.$rec_personals_pass['event_pass_id'].'</strong> сотрудника ID <strong>'.$rec_personals_pass['pkey'].'</strong> в статус <strong>направлен на инструктаж</strong> [2]<br>' ;
           $obj_event->set_personal_to_status_2($rec_event['pkey'],$rec_personals_pass['pkey']) ;
           $result['Перевод в направлены на инструктаж']++ ;
         }
         echo '<br>' ;
       }
  }

  function on_event_get_mo_rules_to_personal($rec_personal,$options,&$rule_id)
  {
     ob_start() ;
     if ($GLOBALS['LS_magnit_mo_rule_atp'] and !$options['only_value_for_group'])
     {  $terminal_group_id=$options['esmo_group'] ; echo 'terminal_group_id='.$terminal_group_id.'<br>' ;
        if (isset(ACCOUNTS()->tree[$terminal_group_id]))
        { $str_parents_terminal_groups=ACCOUNTS()->tree[$terminal_group_id]->get_list_parent() ;
          $arr_parents_terminal_groups=array_flip(explode(',',$str_parents_terminal_groups)) ;
		}
        else
        { echo $terminal_group_id.' отсутствует в ACCOUNTS()->tree<br>' ;
          $arr_parents_terminal_groups[$terminal_group_id]=1 ;
		}

        echo 'terminal parents groups: ';
        damp_array($arr_parents_terminal_groups,1,-1);

        $personal_group_id=$rec_personal['org_group_id'] ; echo 'personal_group_id='.$personal_group_id.'<br>' ;
        // если сотрудник не в домашней группе - ставим упрощенный МО
          if (!isset($arr_parents_terminal_groups[$personal_group_id]))
          {
            // проверка что его последнее МО не было МО аннулированно
            // отменяем проверку на аннулирование МО
            /*$rec_last_mo=execSQL_van('select * from obj_site_mo_session_now where member_id='.$rec_personal['pkey'].' and status>1 order by pkey desc limit 1') ;
            if ($rec_last_mo['error']!=5 and $rec_last_mo['status']!=4)
			{ echo 'Коррекция ID правила МО для гостевых АТП: '.$rule_id.' => '.$GLOBALS['LS_magnit_mo_rule_atp'].'<br>' ;
              $rule_id=$GLOBALS['LS_magnit_mo_rule_atp'] ;
            }
            else echo 'Последнее МО было аннулировано, переход на упрощенное МО отклонен' ;
            */
            $rule_id=$GLOBALS['LS_magnit_mo_rule_atp'] ;

          }
          else echo 'МО на АТП приписки, коррекция ID правила МО для гостевых АТП не требуется<br>' ;
	 }
     else echo 'Коррекция ID правила МО для гостевых АТП выключена' ;
	 $text=ob_get_clean() ;
     LOG_JSON('mo_session')->reg('on_event_get_mo_rules_to_personal',$text) ;
  }


 function import_propusk_from_skud($options=array())
 {   if (!$GLOBALS['LS_magnit_import_pass_from_oracle']) return ;
     ob_start() ;   $t1=fixed_time() ;   $oracle_row=0 ; $read_only=($options['mode']=='RO')? 1:0 ;  $cnt_clear=0 ;  $result=array() ;
     $cnt_import=0 ;
     ?><h2>Импорт из таблицы СКУД MSSQL</h2><?
     if ($read_only) echo '<div class="alert">РЕЖИМ "ТОЛЬКО ЧТЕНИЕ"</div>' ;
     //LOGS()->reg_log('import_pass_from_skud','Начинаем импорт пропусков из СКУД, база MSSQL<br>Запрашиваем квитанцию керберос для авторизации сеанса') ;
     echo 'Начинаем импорт пропусков из СКУД, база MSSQL<br>Запрашиваем квитанцию керберос для авторизации сеанса<br>' ;
     exec('kinit -k -t '.$GLOBALS['LS_magnit_svc_esmo_import_keytab'].' svc_esmo_import') ;
     //LOGS()->reg_log('import_pass_from_skud','Запрос квитанции выполнен, подключаемся к БД MSSQL') ;
     echo 'Запрос квитанции выполнен, подключаемся к БД MSSQL<br>' ;
     if (!function_exists('odbc_connect'))
     { echo 'Не установлен модуль odbc (функция odbc_connect не объявлена)<br>' ;
       $result['error']='Не установлен модуль odbc (функция odbc_connect не объявлена)' ;
     }
     else
     {   $conn=odbc_connect("mssql",'','') ;
         if (!is_resource($conn)) { //LOGS()->reg_log('import_pass_from_skud','Не удалось подкдючиться к БД MSSQL') ;
                                    echo 'Не удалось подкдючиться к БД MSSQL<br>' ;
                                    $result['error']='Не удалось подкдючиться к БД MSSQL' ;
                                  }
         else
         { echo 'Подключение к БД MSSQL выполнено успешно<br>' ;
           $res=odbc_exec($conn,'select * from reports.dbo.view_skud_esmo_utp') ;
           echo 'Получаем данные по пропускам из reports.dbo.view_skud_esmo_utp' ;

     echo 'Создаем буферную таблицы для хранения пропусков<br>' ;
     execSQL_update('DROP TABLE  IF EXISTS SKUD_pass') ;
     execSQL_update('CREATE TABLE  SKUD_pass 
                     (id int(11) NOT NULL AUTO_INCREMENT,
                     uid VARCHAR( 64 ) NOT NULL ,
                     propusk VARCHAR( 64 ) NOT NULL ,
                     PRIMARY KEY (id) ,
                     KEY uid (uid) ,
                     KEY  propusk (propusk)
                   ) ENGINE = InnoDB',array('debug'=>0)) ;

             //LOGS()->reg_log('import_pass_from_skud','Создана буферная таблица для хранения пропусков') ;
     $data=array() ;
     echo 'Заполняем буферную таблице данными по пропускам из MSSQL<br>' ;
     while(($rec=odbc_fetch_array($res))!==false)
     { $data[$rec['GUID']][]=$rec['IDENTIFIER'] ;
       multiSQL_insert('SKUD_pass')->append(array('uid'=>$rec['GUID'],
                                                  'propusk'=>$rec['IDENTIFIER']
                                                  )
                                           ) ;
       $oracle_row++ ;
     }
     multiSQL_insert('SKUD_pass')->flush() ;

     if (sizeof($data)) foreach($data as $id=>$recs) if (sizeof($recs)==1) unset($data[$id]) ;
             //LOGS()->reg_log('import_pass_from_skud','Заполнена буферная таблица для хранения пропусков') ;

     $cnt_import=execSQL_value('select count(*) from SKUD_pass') ;
     echo 'Загружено <strong>'.$cnt_import.'</strong> записей по пропускам<br>' ;

     echo 'Проверяем дубликаты UID<br>' ;
     $dubl=execSQL('select uid,count(*) as cnt from SKUD_pass group by uid having cnt>1') ;
     if (sizeof($dubl))print_2x_arr($dubl) ;
     else echo 'Дубликатов UID не обнаружено<br>' ;

     $cnt=execSQL_update('update obj_site_personals set propusk=concat("id",pkey) where clss=211 and (propusk is null or propusk="")') ;
     echo 'Заполнено <strong>'.$cnt.'</strong> пустых пропусков<br>' ;


           $recs_update=execSQL('select pers.pkey,pers.tkey,pers.obj_name,pers.dr,pers.enabled,SKUD_pass.uid,SKUD_pass.propusk as pass_new,pers.propusk as pass_old,pers.propusk_uptime 
                                 from SKUD_pass 
                                 left join obj_site_personals pers on pers.uid=SKUD_pass.uid  
                                 where pers.enabled=1 and pers.propusk!=SKUD_pass.propusk and SKUD_pass.propusk!=""') ;

           print_2x_arr($recs_update) ;
           if (sizeof($recs_update))
           { ?><h2>Обновляем данные пропусков по сотрудникам</h2><?
             foreach($recs_update as $rec)
               {  $text='' ; $block_change=0 ;
                  if ($GLOBALS['LS_magnit_import_pass_block_day'])
                  {   $check_date=time()-(60*60*24*$GLOBALS['LS_magnit_import_pass_block_day']) ; //3 суток
                      if ($rec['propusk_uptime']>$check_date and $GLOBALS['LS_magnit_import_pass_block'])
                      {   $text='Блокировка импорта номера пропуска '.$rec['pass_new'].', старый пропуск '.$rec['pass_old'].' был внесен вручную '.date('d.m.Y H:i',$rec['propusk_uptime']) ;
                          echo '<div class=alert>'.$text.'</div>' ;
                          //LOGS()->reg_log('Измение данных сотрудника',$text,array('reffers'=>array($id_exsist.'.'.PERSONAL()->tkey_personal),'personal_id'=>$id_exsist)) ;
                          $block_change=1 ;
                      }
                  }

                 if (!$block_change)
                 {

                   // сбрасываем пропуск у старого сотрудника
                   $old_ids=execSQL_row('select pkey,obj_name from obj_site_personals where propusk="'.$rec['pass_new'].'" and uid!=""') ;
                   if (sizeof($old_ids)) foreach($old_ids as $old_id=>$old_name) if ($old_id!=$rec['pkey'])
                   {   if (!$read_only)
                       { execSQL_update('update obj_site_personals set propusk=concat("id",pkey) where pkey='.$old_id) ;
                         LOGS()->reg_log('Измение данных сотрудника','Импорт из СКУД: сброшен пропуск '.$rec['pass_new'],array('personal_id'=>$old_id)) ;
                       }
                       echo '<span class=red>'.$old_name.'['.$old_id.'] - будет сброшен пропуск '.$rec['pass_new'].'</span> (пропуск назначен сотруднику ID '.$rec['pkey'].')<br>' ;
                       $cnt_clear++ ;
                   }

                   echo $rec['obj_name'].', '.$rec['dr'].' ['.$rec['uid'].'] : '.$rec['pass_old'].' => '.$rec['pass_new'].'<br>' ;
                   if (!$read_only) update_rec_in_table('obj_site_personals',array('propusk'=>$rec['pass_new']),'pkey='.$rec['pkey']) ;

                 }
                 LOGS()->reg_log('Измение данных сотрудника','Импорт из СКУД'.$text,array('data'=>array('Пропуск: '.$rec['pass_old'].' => '.$rec['pass_new']),'personal_id'=>$rec['pkey'],'reffers'=>array($rec['_reffer']))) ;
               }
           } else echo '<div class="green">Обновление пропусков не требуется</div>' ;


                  //LOGS()->reg_log('import_pass_from_skud','Сохранены изменившиеся пропуска') ;

           //print_2x_arr($recs_update) ;
           // проверяем базу на дубликаты пропусков
           $cnt_dubl_clear=0 ;
           ?><h2>Сбрасываем пропуска в дубликатах пропусков</h2><?
           $recs_dubl=execSQL('select t1.propusk,count(pkey) as cnt 
                                           from obj_site_personals t1
                                           where t1.propusk!="" and t1.clss=211
                                           group by  propusk
                                           having cnt>1
                                           ',0) ;

                 //LOGS()->reg_log('import_pass_from_skud','Выполнен  запрос на дубликаты пропусков, '.sizeof($recs_dubl).' записей') ;

         if (sizeof($recs_dubl)) foreach($recs_dubl as $pass_number=>$cnt)
         {  $recs2=execSQL('select t1.pkey,t1.propusk,t1.obj_name,t1.uid,t2.uid as SKUD_UID
                            from obj_site_personals t1
                            left join SKUD_pass t2 on t2.uid=t1.uid
                            where t1.propusk="'.$pass_number.'" and t1.clss=211
                            order by SKUD_UID desc
                           ',0,1) ;

           if (sizeof($recs2) and $recs2[0]['SKUD_UID']) foreach($recs2 as $i=>$rec2) if ($i)
           {
             if (!$read_only)
             { execSQL_update('update obj_site_personals set propusk=concat("id",pkey) where pkey='.$rec2['pkey']) ;
               LOGS()->reg_log('Измение данных сотрудника','Импорт из СКУД: сброшен пропуск '.$pass_number,array('personal_id'=>$rec2['pkey'])) ;
             }
             echo '<span class=red>'.$rec2['obj_name'].'['.$rec2['pkey'].'] - будет сброшен пропуск '.$pass_number.'</span><br>' ;
             $cnt_dubl_clear++ ;
           }

         }

           /*
           $recs_clear=execSQL('select pers.pkey,pers.tkey,pers.obj_name,pers.dr,pers.propusk as pass_old,pers.propusk_uptime
                                from obj_site_personals pers
                                left join SKUD_pass on SKUD_pass.uid=pers.uid
                                where pers.clss=211 and not pers.propusk like "id%" and pers.propusk!="" and SKUD_pass.propusk is null ') ;
           if (sizeof($recs_clear))
           { ?><h2>Сбрасываем пропуска сотрудников</h2><?
               foreach($recs_clear as $rec)
                 {   $text='' ; $block_change=0 ;
                     $check_date=time()-(60*60*24*$GLOBALS['LS_magnit_import_pass_block_day']) ; //3 суток
                      if ($rec['propusk_uptime']>$check_date and $GLOBALS['LS_magnit_import_pass_block'])
                      {   $text='Блокировка импорта номера пропуска '.$rec['pass_new'].', старый пропуск '.$rec['pass_old'].' был внесен вручную '.date('d.m.Y H:i',$rec['propusk_uptime']) ;
                          echo '<div class=alert>'.$text.'</div>' ;
                          //LOGS()->reg_log('Измение данных сотрудника',$text,array('reffers'=>array($id_exsist.'.'.PERSONAL()->tkey_personal),'personal_id'=>$id_exsist)) ;
                          $block_change=1 ;
                      }

                     if (!$block_change)
                     { echo $rec['obj_name'].', '.$rec['dr'].' ['.$rec['uid'].'] : '.$rec['pass_old'].' => <br>' ;
                       if (!$read_only) update_rec_in_table('obj_site_personals',array('propusk'=>'id'.$rec['pkey']),'pkey='.$rec['pkey']) ;
                       LOGS()->reg_log('Измение данных сотрудника','Импорт из СКУД'.$text,array('data'=>array('Пропуск: '.$rec['pass_old'].' => сброшен'),'personal_id'=>$rec['pkey'],'reffers'=>array($rec['_reffer']))) ;
                     }
                 }
           } else echo '<div class="green">Сброс пропусков не требуется</div>' ;  */



     /*  if (sizeof($data))
       { ?><h2>Дубликаты GUID [<?echo sizeof($data)?>]</h2><?
         print_2x_arr($data) ;
       }

       $recs_bad=execSQL('select * from SKUD_pass where LENGTH(uid)!=36 or LENGTH(propusk)!=14') ;
       if (sizeof($recs_bad))
        { ?><h2>Нестандартные размеры GUID и пропуска [<?echo sizeof($recs_bad)?>]</h2><?
          print_2x_arr($recs_bad) ;
        }
       */
         }
    }





    $result['Импортировано строк']=$cnt_import ;
    $result['Обновлено пропусков']=sizeof($recs_update) ;
    $result['Сброшено пропусков']=$cnt_clear ;
    $result['Сброшено пропусков в дубликатах']=$cnt_dubl_clear ;
    //$result['Дубликаты GUID']=sizeof($data) ;
    //$result['Некорректный GIUD/пропуск']=sizeof($recs_bad) ;

    $t2=fixed_time($t1) ;
    echo 'Время операции - '.$t2.' сек<br>' ;
    $text=ob_get_clean() ;
    echo $text ;
    $log_fname=LOGS()->reg_file_log('import_skud_pass',$text) ;
    LOGS()->reg_log('import_skud_pass','<a href="'.$log_fname.'" target=_blank>отчет</a>',array('data'=>$result,'time_exec'=>$t2)) ;
 }


 function import_photo_from_skud($options=array())
 {   if (!$GLOBALS['LS_magnit_import_pass_from_oracle']) return ;
     include_once(_DIR_TO_CLASS_LOCAL.'/engine_moduls/magnit/i_odbc.php') ;
     include_once(_DIR_TO_ENGINE.'/admin/i_admin_system.php') ;

     $log_name='import_photo_from_skud_'.ENGINE()->generate_UID() ;
     $result=array() ;
     LOG_JSON('import_photo_from_skud')->reg('start','LS_magnit_import_photo_from_skud_count='.$GLOBALS['LS_magnit_import_photo_from_skud_count']);
     $log_fname=LOG_JSON('import_photo_from_skud')->flush($log_name) ;
     LOGS()->reg_log('import_photo_from_skud','<a href="'.$log_fname.'" target="_blank">Лог</a>',array('account_id'=>MEMBER()->id)) ;

     ob_start() ;   $t1=fixed_time() ;   $oracle_row=0 ; $read_only=($options['mode']=='RO')? 1:0 ;  $cnt_clear=0 ;
     ?><h2>Импорт фото сотрудников из таблицы СКУД MSSQL</h2><?
     if ($read_only) echo '<div class="alert">РЕЖИМ "ТОЛЬКО ЧТЕНИЕ"</div>' ;

     echo 'Получаем данные по пропускам из reports.dbo.view_skud_esmo_utp_photo<br>' ;

     ini_set('odbc.defaultlrl','1500000') ;

     LOG_JSON('import_photo_from_skud')->reg('prepare SQL request');
     LOG_JSON('import_photo_from_skud')->flush($log_name) ;

    try
    {  if (_MAIN_DOMAIN=='magnit.kvzrm.ru') $recs=execSQL('select GUID,LENGTH(PHOTO) as fsize,PHOTO from mssql_SKUD_photo') ;
       else $recs=myODBC()->execSQL2('select GUID,PhotoSize as fsize  from reports.dbo.view_skud_esmo_utp_photo___DEVELOP where PhotoSize>0') ;
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }

     //ob_start() ;
     //var_dump($recs) ;
     //$text=ob_get_clean() ;

     //LOG_JSON('import_photo_from_skud')->reg('check_recs',$text);
     //LOG_JSON('import_photo_from_skud')->flush($log_name) ;


     echo 'Получено <strong>'.sizeof($recs).'</strong> строк<br>' ;


     LOG_JSON('import_photo_from_skud')->reg('SQL result','Получено <strong>'.sizeof($recs).'</strong> строк<br>');
     LOG_JSON('import_photo_from_skud')->flush($log_name) ;

     $result['Получено строк из mssql']=sizeof($recs) ;
     //print_2x_arr($recs) ;

     $max_size=0 ;

     echo 'Создаем буферную таблицы для хранения пропусков<br>' ;
     execSQL_update('DROP TABLE  IF EXISTS SKUD_photo') ;
     execSQL_update('CREATE TABLE  SKUD_photo 
                     (id int(11) NOT NULL AUTO_INCREMENT,
                     uid VARCHAR( 64 ) NOT NULL ,
                     size int(11),
                     PRIMARY KEY (id), 
                     KEY uid (uid) 
                   ) ENGINE = InnoDB',array('debug'=>0)) ;

     LOG_JSON('import_photo_from_skud')->reg('temp table','Создаем буферную таблицу SKUD_photo для хранения пропусков');
     LOG_JSON('import_photo_from_skud')->flush($log_name) ;

     //LOGS()->reg_log('import_pass_from_skud','Создана буферная таблица для хранения пропусков') ;
     echo 'Заполняем буферную таблице данными по фото из MSSQL<br>' ;
     if (sizeof($recs)) foreach($recs as $rec)
     {
       multiSQL_insert('SKUD_photo')->append(array('uid'=>$rec['GUID'],
                                                  'size'=>($rec['fsize'])? $rec['fsize']:0,
                                                 )
                                              ) ;
       if ($max_size<$rec['fsize']) $max_size=$rec['fsize'] ;
       $oracle_row++ ;

     }
     multiSQL_insert('SKUD_photo')->flush() ;

     echo 'Максимальный размер фото:'.$max_size.'<br>' ;

     $recs=execSQL('select * from SKUD_photo') ;
     LOG_JSON('import_photo_from_skud')->reg('temp table','Заполнили буферную таблицу SKUD_photo',array('data'=>$recs));
     LOG_JSON('import_photo_from_skud')->flush($log_name) ;



     //$recs=execSQL('select * from SKUD_photo',0,1) ;
     //print_2x_arr($recs) ;

     //LOGS()->reg_log('import_pass_from_skud','Заполнена буферная таблица для хранения фото') ;
     echo 'Проверяем дубликаты UID<br>' ;

     $dubl=execSQL('select uid,count(*) as cnt from SKUD_pass group by uid having cnt>1') ;
     if (sizeof($dubl))print_2x_arr($dubl) ;
     else echo 'Дубликатов UID не обнаружено<br>' ;

     LOG_JSON('import_photo_from_skud')->flush($log_name) ;
     // получаем данные по фото, которые были изменены
     LOG_JSON('import_photo_from_skud')->reg('check_recs','получаем данные по фото, которые были изменены');
     LOG_JSON('import_photo_from_skud')->flush($log_name) ;

     LOG_JSON('import_photo_from_skud')->reg('Проверка дубликатов UID','',array('data'=>$dubl));
     LOG_JSON('import_photo_from_skud')->flush($log_name) ;

     $cnt=execSQL_value('select count(*) from SKUD_photo') ;
     $recs=execSQL_value('select * from SKUD_photo') ;
     echo 'В буферную таблицу загружено <strong>'.$cnt.'</strong> записей по размерам фото<br>' ;
     $result['Cтрок в буферной таблице']=$cnt ;

     LOG_JSON('import_photo_from_skud')->reg('SKUD_photo','В буферную таблицу загружено <strong>'.$cnt.'</strong> записей<br>',array('data'=>$recs));
     LOG_JSON('import_photo_from_skud')->flush($log_name) ;

     // получаем данные по фото, которые были изменены
     LOG_JSON('import_photo_from_skud')->reg('check_recs','получаем данные по фото, которые были изменены');
     LOG_JSON('import_photo_from_skud')->flush($log_name) ;

     $recs=execSQL('select t1.pkey,t1.tkey,t1.uid,t1.obj_name,t3.size as size_new,t2.size as size_old,t2.pkey as img_id 
                    from obj_site_personals t1
                    left join obj_site_personals_image t2 on t2.parent=t1.pkey and t2.indx=1
                    left join SKUD_photo t3 on t3.uid=t1.uid
                    where not t3.size is null  and (t3.size!=t2.size or t2.size is null)
                    ') ;
     echo 'Найдено <strong>'.sizeof($recs).'</strong> записей с измененными размерами<br>' ;
     $result['Найдено записей с измененными размерами']=sizeof($recs) ;
     LOG_JSON('import_photo_from_skud')->reg('check_recs','Найдено <strong>'.sizeof($recs).'</strong> записей с измененными размерами',array('data'=>$recs));
     LOG_JSON('import_photo_from_skud')->flush($log_name) ;

     $i=0 ;
     if (sizeof($recs))
     {  foreach($recs as $rec)
         { echo 'Сотрудник <strong>'.$rec['obj_name'].'</strong><br>' ;
           LOG_JSON('import_photo_from_skud')->reg('check_recs','Сотрудник <strong>'.$rec['obj_name'].'</strong>');
           LOG_JSON('import_photo_from_skud')->flush($log_name) ;

           if (_MAIN_DOMAIN=='magnit.kvzrm.ru') $recs_photo=execSQL('select GUID,PHOTO from mssql_SKUD_photo where GUID="'.$rec['uid'].'"',0,1) ;
           else
           {   $sql="select GUID,PHOTO from reports.dbo.view_skud_esmo_utp_photo where GUID='".$rec['uid']."'" ;
               LOG_JSON('import_photo_from_skud')->reg('SQL',$sql);
               LOG_JSON('import_photo_from_skud')->flush($log_name) ;

               $recs_photo=myODBC()->execSQL($sql) ;
               ob_start() ;
               var_dump($recs_photo) ;
               $text=ob_get_clean() ;

               LOG_JSON('import_photo_from_skud')->reg('SQL result',$text);
               LOG_JSON('import_photo_from_skud')->flush($log_name) ;

           }


           LOG_JSON('import_photo_from_skud')->reg('get Photo','',array('data'=>$recs_photo));
           LOG_JSON('import_photo_from_skud')->flush($log_name) ;

           $rec_photo=$recs_photo[0] ;
           $temp_fname=ENGINE()->generate_UID().'.jpg' ;
           if ($rec_photo['PHOTO'])
           { LOG_JSON('import_photo_from_skud')->reg('save Photo',_TEMP_DIR.$temp_fname.',  размер фото '.strlen($rec_photo['PHOTO']));
             LOG_JSON('import_photo_from_skud')->flush($log_name) ;

             $res_put=file_put_contents(_TEMP_DIR.$temp_fname,$rec_photo['PHOTO']) ;
             if ($res_put)
             { echo 'Фото сохранено по временно файле <strong>'.$temp_fname.'</strong>,  размер фото '.strlen($rec_photo['PHOTO']).'<br>' ;
               if (!$read_only)
                 { echo 'Загружаем фото в карточку сотрудника<br>' ;

                   LOG_JSON('import_photo_from_skud')->reg('save Photo','Загружаем фото в карточку сотрудника');
                   LOG_JSON('import_photo_from_skud')->flush($log_name) ;

                   $result_upload=PERSONAL()->personal_upload_image($rec['pkey'],_TEMP_DIR.$temp_fname,array('source_action'=>'Фото из СКУД')) ;

                   LOG_JSON('import_photo_from_skud')->reg('save Photo','Загружено фото в карточку сотрудника',array('data'=>$result_upload));
                   LOG_JSON('import_photo_from_skud')->flush($log_name) ;

                   if ($result_upload['error']) damp_array($result,1,-1) ;
                   $result['Загружено фото в сотрудника']++ ;
                 }
                 else {?><img src="/temp/<?echo $temp_fname?>" width="100"><br><?}
             }
           }
           if ($result['Загружено фото в сотрудника']>=$GLOBALS['LS_magnit_import_photo_from_skud_count']) break ;
           $i++ ;
         }
     }

     LOG_JSON('import_photo_from_skud')->reg('result','',array('data'=>$result));
     $url=LOG_JSON('import_photo_from_skud')->flush($log_name) ;

    $t2=fixed_time() ;
    echo 'Время операции - '.round($t2-$t1,2).' сек<br>' ;
    $text=ob_get_clean() ;
    echo $text ;
    LOGS()->reg_log('import_photo_from_skud','<a href="'.$url.'" target=_blank>Лог выполнения</a>',array('save_to_file'=>$text,'data'=>$result,'time_exec'=>round($t2-$t1,2))) ;
    damp_array($result,1,-1) ;
 }

// отчет для автоматический рассылки
 function auto_report_1($options=array())
 {  ///http://magnit.kvzrm.ru/cab/reports/magnit_2/[atp_ids=(6524),data_from=01.01.2017,data_to=31.01.2017]/
     ob_start();
     $arr_apt_ids = array();
     $arr_rc_ids = array();
     $report_names = array();
     $recs_orgs = execSQL('select * from obj_site_personals where parent=1 and clss=207 order by obj_name');
     $arr_groups = execSQL_row('select pkey,obj_name,clss from obj_site_account where clss=206');
     if (sizeof($recs_orgs)) foreach($recs_orgs as $rec_org) if (preg_match_all('/ООО \"Сельта\"(.+?)/is',$rec_org['obj_name'],$matches,PREG_SET_ORDER)) $arr_apt_ids[$rec_org['pkey']] = 1;
     if (sizeof($recs_orgs)) foreach($recs_orgs as $rec_org) if (preg_match_all('/АО \"Тандер\"(.+?)РЦ/is',$rec_org['obj_name'],$matches,PREG_SET_ORDER)) $arr_rc_ids[$rec_org['pkey']] = 1;
     $now = getdate();
     $from_time = mktime(8,0,0,$now['mon'],$now['mday']-1,$now['year']);
     $to_time = mktime(7,59,59,$now['mon'],$now['mday'],$now['year']);
     include_once(_DIR_EXT . '/esmo_magnit/report_magnit_2.php');
     $mail_options = array('no_asyns_send_mail' => 1,'debug' => 1,'reg_events' => 1);
     $id = 0;
     //if (sizeof($arr_groups)) foreach($arr_groups as $id=>$name)
     {
         $report_obj = new report_magnit_2();
         //$report_obj->filter['group_id']=$id;
         $report_obj->filter['atp_ids'] = $arr_apt_ids;
         $report_obj->filter['data_from'] = date('d.m.Y H:i:s',$from_time);
         $report_obj->filter['data_to'] = date('d.m.Y H:i:s',$to_time);
         $result = $report_obj->save_as_PDF();
         $report_title = 'Отчет за сутки по предрейсовому мед. осмотру, информация по всем сотрудникам АТП';
         ?><h2><? echo $report_title ?></h2><?
         $this->waiting_pdf_generate($result['outputfile']);
         $report_names[] = '<li>' . $report_title . '</li>';
         $mail_options['files'][] = _DIR_TO_ROOT . '/temp/' . $result['PDF_file_name'];;
         damp_array($result,1,-1);
         $report_obj = new report_magnit_2();
         //$report_obj->filter['group_id']=$id;
         $report_obj->filter['rc_ids'] = $arr_rc_ids;
         $report_obj->filter['data_from'] = date('d.m.Y H:i:s',$from_time);
         $report_obj->filter['data_to'] = date('d.m.Y H:i:s',$to_time);
         $result = $report_obj->save_as_PDF();
         $report_title = 'Отчет за сутки по предрейсовому мед. осмотру, информация по всем сотрудникам РЦ';
         ?><h2><? echo $report_title ?></h2><?
         $this->waiting_pdf_generate($result['outputfile']);
         $report_names[] = '<li>' . $report_title . '</li>';
         $mail_options['files'][] = _DIR_TO_ROOT . '/temp/' . $result['PDF_file_name'];;
         damp_array($result,1,-1);
     }
     ob_start();
     ?><strong>Добрый день!</strong><br>
     В автоматическом режиме были подготовлены следующие отчеты:<br>
     <ul><? echo implode('',$report_names) ?></ul>
     <?
     $text = ob_get_clean();

     $arr_emails=explode(',',$GLOBALS['LS_magnit_report2_emails']) ;
     if (sizeof($arr_emails))
     { $email=trim($arr_emails[0]) ; unset($arr_emails[0]) ;
       $mail_options['cc']=array() ;
       if (sizeof($arr_emails)) foreach($arr_emails as $cc_email) if (trim($cc_email)) $mail_options['cc'][trim($cc_email)]=trim($cc_email) ;
       MAILS()->send_mail($email,'Автоматическая рассылка отчетов',$text,$mail_options);
     }

     $text = ob_get_clean();
     echo $text;
     $name = LOGS()->reg_file_log('send_reports_auto',$text);
     LOGS()->reg_log('Автоматическая отправка отчета','<a target=_blank href="' . $name . '">Отчет</a>');
 }

 function auto_report_2($options=array())
	{ // http://magnit.kvzrm.ru/cab/reports/report_mo_small/[data_from=01.02.2017%2000:00,data_to=08.02.2017%2000:00,org_ids=(6524)]/
		ob_start();
		$arr_apt_ids = array();
		$arr_rc_ids = array();
		$report_names = array();
		$recs_orgs = execSQL('select * from obj_site_personals where parent=1 and clss=207 order by obj_name');
		if (sizeof($recs_orgs)) foreach($recs_orgs as $rec_org)
		{ //echo $rec_org['obj_name'].'<br>' ;
		  if (preg_match_all('/АО(.+?)Краснодар(.+?)/is',$rec_org['obj_name'],$matches,PREG_SET_ORDER)) $arr_apt_ids[$rec_org['pkey']] = 1;
		  //damp_array($matches,1,-1) ;
		}
		//damp_array($arr_apt_ids,1,-1) ;
		$now = getdate();      //$arr_apt_ids=array() ;
		$from_time = mktime(0,0,0,$now['mon'],$now['mday'],$now['year']);
		$to_time = mktime(14,0,0,$now['mon'],$now['mday'],$now['year']);
		include_once(_DIR_EXT . '/aspmo_reports/report_mo_small.php');
		$mail_options = array('no_asyns_send_mail' => 1,'debug' => 1,'reg_events' => 1);

		$report_obj = new report_mo_small();
		$report_obj->filter['org_ids'] = $arr_apt_ids;
		$report_obj->filter['data_from'] = date('d.m.Y H:i:s',$from_time);
		$report_obj->filter['data_to'] = date('d.m.Y H:i:s',$to_time);
		//$result = $report_obj->save_as_PDF();
		$result = $report_obj->save_as_CSV();
		$report_title = 'Отчет по сотрудникам РЦ Краснодар';
		?><h2><? echo $report_title ?></h2><?
		//$this->waiting_pdf_generate($result['outputfile']);
		$report_names[] = '<li>' . $report_title . '</li>';
		//$mail_options['files'][] = _DIR_TO_ROOT . '/temp/' . $result['PDF_file_name'];;
		$mail_options['files'][] = $result['file_dir'];;

		ob_start();
		?><strong>Добрый день!</strong><br>
		В автоматическом режиме были подготовлены следующие отчеты:<br>
		<ul><? echo implode('',$report_names) ?></ul>
		<?
		$usl=array() ;
		$usl[]='c_data>='.$from_time ;
		$usl[]='c_data<='.$to_time ;
		$usl[]='model>0' ;
		$usl[]='dopusk>0' ;
		?><strong>Статистика допусков c <?echo date('d.m.Y H:i',$from_time)?> по <?echo date('d.m.Y H:i',$to_time)?></strong><br><?
		if (sizeof($arr_apt_ids)) $usl[]='personal_parent2 in ('.implode(',',array_keys($arr_apt_ids)).')' ;
		$stats=execSQL_row('select dopusk,count(pkey) from view_mo_session where '.implode(' and ',$usl).' group by dopusk order by dopusk') ;
		?><ul><?
		if (sizeof($stats)) foreach($stats as $dopusk=>$cnt) echo '<li>'.$_SESSION['ARR_status_dopusk'][$dopusk].': '.$cnt.'</li>' ;
		else {?><li>Нет данных</li><?}
		?></ul><?

		$text = ob_get_clean();
     $arr_emails=explode(',',$GLOBALS['LS_magnit_report2_emails']) ;
     if (sizeof($arr_emails))
     { $email=trim($arr_emails[0]) ; unset($arr_emails[0]) ;
       $mail_options['cc']=array() ;
       if (sizeof($arr_emails)) foreach($arr_emails as $cc_email) if (trim($cc_email)) $mail_options['cc'][trim($cc_email)]=trim($cc_email) ;
       MAILS()->send_mail($email,'Автоматическая рассылка отчетов',$text,$mail_options);
     }

		//$mail_options['cc']=array('info@12-24.ru'=>'Брежнев Роман') ;
		//MAILS()->send_mail('5207403@mail.ru','Автоматическая рассылка отчетов ['.date('d.m.Y H:i:s').']',$text,$mail_options);

		//$mail_options['cc']['alexeeva_ma@magnit.ru']='alexeeva_ma@magnit.ru' ;
		//$mail_options['cc']['lakomov_va@magnit.ru']='lakomov_va@magnit.ru' ;
		//MAILS()->send_mail('esmo237000@krasnodarrc.magnit.ru','Автоматическая рассылка отчетов',$text,$mail_options);
		$text = ob_get_clean();
		echo $text;
		$name = LOGS()->reg_file_log('send_reports_auto',$text);
		LOGS()->reg_log('Автоматическая отправка отчета','<a target=_blank href="' . $name . '">Отчет</a>'.$text);
	}

 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);
 }


 function check_job_data()
 {
        execSQL_update('update obj_site_workers set job_data=c_data where job_data is null',['debug'=>2]) ;
        execSQL_update('update obj_site_personals set job_data=c_data where clss=211 and job_data is null',['debug'=>2]) ;
 }





}



?>
