<?
// EVENT_INSTR - на удаление, прямого обащения к классу не будет
function EVENT_INSTR(){ if (!is_object($GLOBALS['EVENT_INSTR'])) $GLOBALS['EVENT_INSTR']=new i_event_instruction();return($GLOBALS['EVENT_INSTR']);}
class i_event_instruction
{
   var $events_mode ; // переодичность инструктажа
   var $name='Инструктаж' ; // переодичность инструктажа
   var $url_page_event_create='/cab/esmo_magnit_instruction/' ;
   var $url_page_event_card='/window/esmo_magnit_instruction/card/' ;
   var $report_lessions_jurnal='report_lessions_jurnal' ;   // стандартный журнал по инструктажу
   var $rec_event ;
   var $card_theme_title='Темы инструктажа' ;

    var $default_settings=array('mode'=>5, //  ежегодный
                               'type'=>2, // Инструктаж - потом удалить
                               'sanction'=>array('block_mo'=>1),
                               'message1'=>'Вам необходимо пройти сезонный инструктаж',
                               'message2'=>'Вам необходимо завершить прохождение сезонного инструктажа'
                               ) ;

    var $arr_status=array(0=>'',
                          1=>'Подлежит инструктажу',
                          2=>'Направлен на инструктаж (отправлено уведомление)',
                          3=>'Уведомлен',
                          4=>'Прибыл на инструктаж',
                          5=>'Проходит инструктаж',
                          6=>'Инструктаж пройден частично',
                          7=>'Инструктаж пройден'
                          ) ;

    var $arr_status_lession_person=array(0=>'',
                          1=>'Зарегистрирован в занятии',
                          2=>'Учавствует в занятии',
                          3=>'Убыл с занятия',
                          4=>'Расписался за занятие',
                          6=>'Занятие отменено'
                          ) ;

    var $arr_status_lession=array(0=>'',
                          1=>'Идет регистрация',
                          2=>'Занятие начато',
                          3=>'Идет занятие',
                          4=>'Темы прочитаны',
                          5=>'Занятие завершено',
                          6=>'Занятие отменено'
                          ) ;

   function get_url_event_card($id)
   {
     return('/window/esmo_magnit_instruction/card/'.$id.'/') ;
   }

    function panel_event_info() {$this->panel_params_info();}
    function panel_params_info()
    {   // данные по участникам мероприятия с учетом группы текущего аккаунта
        $arr_personals_status=EVENTS()->get_event_personals_status($this->rec_event['pkey']) ;
        $personals_count=array_sum($arr_personals_status) ;
        ?><table class="basic auto fz_small setting">
             <tr><th>Наименование:</th><td><?echo $this->rec_event['obj_name']?></td></tr>
             <tr><th>Переодичность:</th><td><?echo $_SESSION['ARR_events_mode'][$this->rec_event['mode']]?></td></tr>
             <tr><th>Направление на инструктаж:</th><td><?echo ($this->rec_event['_ext_info']['auto_status_2']==1)? 'Вручную':'Автоматически'?></td></tr>
             <tr><th>Дата начала уведомлений:</th><td><?echo date('d.m.Y',$this->rec_event['alert_from'])?></td></tr>
             <tr><th>Дата начала мероприятия:</th><td><?echo date('d.m.Y',$this->rec_event['date_from'])?></td></tr>
             <tr><th>Дата окончания мероприятия:</th><td><?echo date('d.m.Y',$this->rec_event['date_to'])?></td></tr>
             <tr class="block_mo"><th>Блокировка МО при непрохождении инструктажа:</th><td><?echo ($this->rec_event['_ext_info']['block_mo'])? 'Да':'Нет'?></td></tr>
             <tr><th>Дата начала блокировки:</th><td><?echo date('d.m.Y',$this->rec_event['block_from'])?></td></tr>
             <tr><th>Дата окончания блокировки:</th><td><?echo ($this->rec_event['block_to'])? date('d.m.Y',$this->rec_event['block_to']):'-'?></td></tr>
             <tr><th>Место мероприятия (АТП приписки участников):</th><td><?echo ($this->rec_event['_ext_info']['_group_ids'])? implode(',',$this->rec_event['_ext_info']['_group_ids']):(($this->rec_event['group_id'])? ACCOUNTS()->get_group_name($this->rec_event['group_id']):'Все АТП')?></td></tr>
             <tr><th>Условие отбора участников:</th><td><?PERSONALS_FILTER()->get_personals_filter_info_to_item($this->rec_event['_reffer'])?></td></tr>
             <tr><th>Подлежат инструктажу:</th><td><?echo $personals_count.' '.get_case_by_count_1_2_5($personals_count,'сотрудник,сотрудника,сотрудников')?></td></tr>
         </table>
         <style type="text/css">
             table.basic.setting{}
             table.basic.setting th{text-align:left;font-weight:normal;}
             table.basic.setting td{text-align:left;font-weight:bold;font-size:15px;color:black;}
             table.basic.setting td p{text-align:left;font-weight:normal;}
         </style>
        <?
    }

   function panel_personal_info($rec_event)
   {   // данные по участникам мероприятия с учетом группы текущего аккаунта
       $arr_personals_status=EVENTS()->get_event_personals_status($rec_event['pkey']) ;
       $personals_count=array_sum($arr_personals_status) ;

       ?><div class="row event_info">
           <section class="col col-3">
                  <label class="label">Условие отбора участников</label>
                  <?PERSONALS_FILTER()->get_personals_filter_info_to_item($rec_event['_reffer'])?>
           </section>
           <section class="col col-3">
                  <label class="label">Сотрудники</label>
                  <strong><?echo $personals_count.' '.get_case_by_count_1_2_5($personals_count,'сотрудник,сотрудника,сотрудников')?></strong>
           </section>
	  </div><?
   }

    function panel_params_edit($options=array())
      {    ?><div id="panel_filter">
                <form id="sky-form" class="sky-form">
                     <fieldset>
                         <h2>Информация по мероприятию</h2><br>
                         <div class="row event_info">

                               <section class="col col-4">
                                 <label class="label">Наименование:</label>
                                 <label class="input">
                                     <input type="text" name="filter[name]" placeholder="" value="<?echo addslashes($this->rec_event['obj_name'])?>" data-required>
                                 </label>
                                </section>

                                <section class="col col-4">
                                  <label class="label">Переодичность проведения инструктажа:</label>
                                  <input type="hidden" name="filter[mode]" value="5">
                                  <strong><?echo $_SESSION['ARR_events_mode'][$this->rec_event['mode']]?></strong>
                                </section>

                                <section class="col col-4">
                                  <label class="label">Санкции:</label>
                                  <input type="hidden" name="filter[sanction][block_mo]" value="1">
                                  <strong>Запрет прохождения МО</strong>
                                </section>

                                <input type="hidden" name="filter[type]" value="2">
                                <input type="hidden" name="filter[mode]" value="6">
                                <input type="hidden" name="filter[group_id]" value="<?echo MEMBER()->cur_group_id?>">


                           </div>
                         <div class="row event_info">
                          <!--
                          <section class="col col-2">
                             <label class="label">Переодичность<br>проведения инстуктажа:</label>
                             <label class="select">
                                 <select name="filter[mode]"  data-required id="select_event_mode">
                                       <? $this->filter['mode']=6 ;
                                          if (_sizeof($this->events_mode)) foreach($this->events_mode as $id=>$name) {?><option value="<?echo $id?>" <?if($this->filter['mode']==$id) echo 'selected'?>><?echo $name?></option><?}?>
                                 </select>
                             </label>
                            </section>
                           -->
                          <section class="col col-4">
                            <label class="label">Дата начала<br>уведомлений:</label>
                            <label class="input"><input type="text" name="filter[alert_from]" class="datepicker" data-required value="<?echo ($this->rec_event['alert_from'])? date('d.m.Y',$this->rec_event['alert_from']):''?>"></label>
                            <label class="label info"><i class="fa fa-info-circle" aria-hidden="true"></i> Укажите дату начала уведомлений о необходимости пройти инструктаж</label>
                          </section>
                          <!--
                          <section class="col col-2">
                            <label class="label">Дата окончания<br>уведомлений:</label>
                            <label class="input"><input type="text" name="filter[alert_to]" class="datepicker" data-required value="<?echo ($this->rec_event['alert_to'])? date('d.m.Y',$this->rec_event['alert_to']):''?>"></label>
                              <label class="label info"><i class="fa fa-info-circle" aria-hidden="true"></i> Укажите дату окончания уведомлений о необхомости пройти инструктаж</label>
                          </section>-->

                          <section class="col col-4">
                            <label class="label">Дата начала<br>блокировки МО:</label>
                            <label class="input"><input type="text" name="filter[block_from]" class="datepicker" data-required value="<?echo ($this->rec_event['block_from'])? date('d.m.Y',$this->rec_event['block_from']):''?>"></label>
                            <label class="label info"><i class="fa fa-info-circle" aria-hidden="true"></i> Укажите дату, начиная с которой, сотрудники, не прошедшие инструктаж, не будут допущены к МО</label>
                          </section>

                          <section class="col col-4">
                            <label class="label">Дата окончания<br>блокировки МО:</label>
                            <label class="input"><input type="text" name="filter[block_to]" class="datepicker" data-required value="<?echo ($this->rec_event['block_to'])? date('d.m.Y',$this->rec_event['block_to']):''?>"></label>
                            <label class="label info"><i class="fa fa-info-circle" aria-hidden="true"></i> Укажите дату, начиная с которой, сотрудники, не прошедшие инструктаж, будут вновь допущены к МО</label>
                          </section>


                         </div>

                         <div class="row event_info">
                             <section class="col col-2">
                               <label class="label">Направление на инструктаж</label>
                               <label class="radio">
                                   <input type="radio" name="filter[auto_status_2]" value="1" <?if ($this->rec_event['_ext_info']['auto_status_2']==1) echo 'checked'?>><i></i> Вручную
                               </label>
                               <label class="radio">
                                   <input type="radio" name="filter[auto_status_2]" value="2" <?if ($this->rec_event['_ext_info']['auto_status_2']==2) echo 'checked'?>><i></i> Автоматически
                               </label>
                            </section>
                         </div>

                         <div class="row event_info">

                             <section class="col col-6">
                                <label class="label">Уведомление до начала прохождения инструктажа</label>
                                <label class="textarea">
                                    <textarea type="text" name="filter[message1]"><?echo $this->rec_event['_ext_info']['message1']?></textarea><i></i>
                                </label>
                             </section>

                             <section class="col col-6">
                                <label class="label">Уведомление после начала прохождения инструктажа</label>
                                <label class="textarea">
                                    <textarea type="text" name="filter[message2]"><?echo $this->rec_event['_ext_info']['message2']?></textarea><i></i>
                                </label>
                             </section>

                         </div>
                     </fieldset>
                    <div id="panel_buttons"><input type="submit" class="button v1" cmd="save_event" value="Сохранить" validate="form"></div>
                 </form>
          </div><br>
        <style>
              div.event_info strong{font-size:18px;font-weight:normal;}
              label.label.info{color:#4CAF50;font-size:12px;line-height:1.2em;margin-top:10px;}
        </style>

        <?
      }

    function update_personal_status_1($event_id,$options=array())
    {  //if (!$options['debug_db']) return(array()) ;
       FILE_LOG()->append('update_personal_status_1') ;
       ob_start() ; $alerts=array() ;  $result=array() ; // $GLOBALS['debug_db']=2  ; if ($options['debug_db']) $GLOBALS['debug_db']=$options['debug_db'] ;
       $rec_event=EVENTS()->get_event_by_id($event_id) ;
       echo '<h3>Мероприятие "'.$rec_event['obj_name'].'", ID '.$rec_event['pkey'].'</h3><br>' ;

       // проверка существования таблицы $rec_event['viewer_name']
       $result=EVENTS()->event_check_existst_table($rec_event) ;
       if ($result['error']){?><div class="red"><? echo $result['error'] ?></div><?  return($result) ;}

       $ids=execSQL_Line('select distinct(pkey) from '.$rec_event['viewer_name']) ;
       if (!sizeof($ids)){?><div class="red">Пустой массив участников мероприятия</div><?  return(['error'=>'no_found_event_personals']) ;}

       FILE_LOG()->append('Подлежат участию в мероприятии: '._sizeof($ids).' сотрудников') ;
       if (!$rec_event['date_to'] or ($rec_event['date_to']>0 and $rec_event['date_to']>=time()))
       {   $result=EVENTS()->add_personals_to_event($event_id,$ids,array('remove_outer'=>1)) ;
       }
       else
       { $alerts[]='Добавление/удаление сотрудников в мероприятие заблокировано - наступила дата окончания мероприятия ('.date('d.m.Y H:i',$rec_event['date_to']).')' ;
         FILE_LOG()->append('Добавление/удаление сотрудников в мероприятие заблокировано - наступила дата окончания мероприятия ('.date('d.m.Y H:i',$rec_event['date_to']).')') ;
       }
       // если в мероприятии автоперевод в "направлен на инструктаж" - направляем
       if ($rec_event['_ext_info']['auto_status_2']==2)
       {   FILE_LOG()->append('Задано автоматическое направление на инструктаж') ;
           $this->set_personal_to_status_2($event_id,'') ;
       }
       // если в меропрятии есть добавленные после окончания мероприятия - они будут удалены
       if ($rec_event['date_to']>0)
       {  $ids=execSQL_line('select personal_id from obj_site_events_pass where event_id='.$event_id.' and c_data>'.$rec_event['date_to']) ;
          if (_sizeof($ids))
          { $alerts[]='Подлежат удалению из мероприятия <strong>'._sizeof($ids).'</strong> сотрудников, добавленных в мероприятие после окончания срока действия мероприятия' ;
            FILE_LOG()->append('Подлежат удалению из мероприятия '._sizeof($ids).' сотрудников, добавленных в мероприятие после окончания срока действия мероприятия') ;
            $i=1 ;
            if (_sizeof($ids)) foreach($ids as $perosonal_id)
            {
                EVENTS()->delete_personal_from_event($event_id,$perosonal_id,array('cnt_all'=>_sizeof($ids),'cur_pos'=>$i)) ;
                $i++ ;
            }
            $result['Удалено из мероприятия (вне срока действия)']=_sizeof($ids) ;
          }
       }
       $GLOBALS['debug_db']=0  ; $text=ob_get_clean() ;
       $fname=LOGS()->reg_file_log('update_personal_status_1_'.$event_id,$text) ;
       LOGS()->reg_log('update_personal_status_1','<a target=_blank href="'.$fname.'">Отчет</a> [i_event_instruction.php]',array('data'=>$result,'reffer'=>$rec_event['_reffer'])) ;
       if (_sizeof($alerts)) echo implode('<br>',$alerts).'<br>' ;
       echo $text ;
       return($result) ;
    }

    function set_personal_to_status_2($event_id,$personal_ids='')
      {  $rec_event=EVENTS()->get_event_by_id($event_id) ;

         $_usl=array() ;
         $_usl[]='event_id='.$event_id ;
         $_usl[]='status=1' ;
         $_usl[]='enabled=1' ;
         if ($personal_ids)  $_usl[]='personal_id in ('.$personal_ids.')' ;
         $usl=implode(' and ',$_usl) ;
         $recs=execSQL('select pkey,tkey,personal_id from obj_site_events_pass where '.$usl) ;
         FILE_LOG()->append('Будут направлены на инструктаж: '._sizeof($recs).' сотрудников') ;
         $i=1 ;
         if (_sizeof($recs)) foreach($recs as $rec_event_pass)
         {   // закрываем все сообщения сотрудника, связанные с этим мероприятием
             PERSONAL()->messages_personal_close($rec_event_pass['personal_id'],$rec_event['ext'],['event_id'=>$rec_event['pkey'],'comment'=>'Повторно направлен на инструктаж']) ;

             // отправляем ему сообщение
             $mess_rec=$this->prepare_message($rec_event,$rec_event_pass,$rec_event['_ext_info']['message1'],['time_status2'=>time()])  ;
             $mess_reffer=PERSONAL()->message_personal_create($mess_rec) ;

             // фиксируем в записи по человеку в событии ID отправленого ему сообщения
             list($mess_id,$mess_tkey)=explode('.',$mess_reffer) ;
             $data=array('status'=>2,'mess_id'=>$mess_id) ;
             $options=array('old_status'=>1) ;
             EVENTS()->set_event_personal_data($rec_event['pkey'],$rec_event_pass['personal_id'],$data,'Отправлено сообшение о необходимости пройти инструктаж',$options) ;

             $count_stats='('.$i.' из '._sizeof($recs).')' ;
             FILE_LOG()->append('Направление на инструктаж, сотрудник ID '.$rec_event_pass['personal_id'].' '.$count_stats) ;
             $i++ ;
         }


      }

    function prepare_message($rec_event,$rec_event_pass,$mess_text,$options=[])
    { // если указан четкий срок на прохождение мероприятия - то смотрим дату направления на инструктаж, и добавляем к ней дни
      $block_from=0 ;
      ob_start() ;

      if ($rec_event['block_from']) $block_from=$rec_event['block_from'] ;

      //trace() ;
      damp_array($rec_event['_ext_info'],1,-1);
      damp_array($rec_event_pass,1,-1);
      damp_array($options,1,-1);

      execSQL('select * from obj_site_events_pass_status where event_id='.$rec_event['pkey'].' and personal_id='.$rec_event_pass['personal_id'].' order by pkey desc',2) ;

      // при персональной настройке строков надо знать дату отправки на мероприятие
      $time_status2=0 ;
      if ($rec_event['_ext_info']['deadline_day'] or $rec_event['_ext_info']['view_from_day'])
      {
        if ($options['time_status2']) $time_status2=$options['time_status2'] ;
        else
        { $rec_pass_status2=execSQL_van('select * from obj_site_events_pass_status where event_id='.$rec_event['pkey'].' and personal_id='.$rec_event_pass['personal_id'].' and status_new=2 order by pkey desc limit 1',2) ;
          if ($rec_pass_status2['pkey']) $time_status2=$rec_pass_status2['c_data'] ;
        }
		}

      if ($rec_event['_ext_info']['deadline_day'] and $time_status2)
      {
        echo 'Направлен на мероприятие '.date('d.m.Y',$time_status2).'<br>' ;
          $now=getdate($time_status2) ;
          $block_from=mktime(23,59,59,$now['mon'],$now['mday']+$rec_event['_ext_info']['deadline_day'],$now['year']);
          echo 'Блокировка с '.date('d.m.Y',$block_from).'<br>' ;
		}

      if ($block_from) $mess_text.=', срок до '.date('d.m.Y',$block_from) ;

      $view_from=$rec_event['alert_from'] ;
      if ($rec_event['_ext_info']['view_from_day'] and $time_status2)
      { $now=getdate($time_status2) ;
        $view_from=mktime(23,59,59,$now['mon'],$now['mday']+$rec_event['_ext_info']['view_from_day'],$now['year']);
        echo 'Показ с '.date('d.m.Y',$view_from).'<br>' ;
	  }


      $mess=array('mess_text'=>$mess_text,
            'group_id'=>MEMBER()->cur_group_id,
            //'account_id'=>MEMBER()->id,  не отправлять сообщение от имени техника, чтобы не было возможности у техника его закрыть
            'personal_id'=>$rec_event_pass['personal_id'],
            'view_from'=>$view_from,
            'view_to'=>$rec_event['alert_to'],
            //'max_day'=>$rec_event['_ext_info']['period_to_status_7'],
            'block_from'=>$block_from,
            'block_to'=>$rec_event['block_to'],
            'auto_close'=>$rec_event['block_to'],
            //'view_mode'=>1, // показывать при прохождении МО
            //'block_mo'=>$rec_event['_ext_info']['block_mo'], // блокировать прохождение МО если сообщение не будет закрыто
            'source_pkey'=>$rec_event_pass['pkey'], // ID персоны в мероприяии
            'source_tkey'=>$rec_event_pass['tkey'], // ID персоны в мероприяии
            'source_obj'=>$rec_event['ext'] // объект, которые будет использоваться в эвентах
            ) ;
      //damp_array($mess,1,-1);
      $text=ob_get_clean() ;
      //LOGS()->reg_log('prepare_message',$text) ;
      //echo $text ;
      return($mess) ;
    }


   // вызывется из PERSONALS()->message_personal_set_view() ;
   function on_message_change($rec_mess,$params=array())
   { // пока не проверяем   $rec_mess['source_tkey']
     $rec_event_personal=execSQL_van('select * from view_event_personals where event_person_id='.$rec_mess['source_pkey']) ;
     if (_sizeof($rec_event_personal))
     {  switch($rec_event_personal['event_status'])
        {  // направлен на инструктаж => уведомлен
           case 2:  EVENTS()->set_event_personal_data($rec_event_personal['event_id'],$rec_event_personal['personal_id'],array('status'=>3),'Сотрудник уведомлен') ; break ;
        }
     }
   }

    function get_status_by_ids($ids,$options=array())
    { if (is_int($ids)) $ids=array($ids) ;
      if ($options['ids_in_keys']) $ids=array_keys($ids) ;
      $arr=array() ;
      if (_sizeof($ids)) foreach($ids as $id) $arr[]=$this->arr_status[$id] ;
      return(implode(',',$arr)) ;

    }

    function mo_check_personal_access($rec_event,$rec_pass,$rec_personal,&$result)
    {
        echo '<strong>'.$rec_event['obj_name'].'</strong>: mo_check_personal_access<br>' ;

    }

}

?>
