<?
// EVENT_INSTR - на удаление, прямого обащения к классу не будет
function EVENT_MEETING(){ if (!is_object($GLOBALS['EVENT_MEETING'])) $GLOBALS['EVENT_MEETING']=new i_event_meeting();return($GLOBALS['EVENT_MEETING']);}
class i_event_meeting
{
   var $events_mode ;
   var $name='Собрание' ;
   var $url_page_event_create='/cab/events_meeting/' ;
   var $url_page_event_card='/window/events_meeting/card/' ;
   var $report_lessions_jurnal='doc_meeting_lession_registr' ;   // стандартный журнал по собранию
   //var $arr_reports=array(1=>array('title'=>'Журнал регистрации сезонного инструктажа по БДД','code'=>'esmo_magnit_instruction/report_lessions_jurnal1')) ;
   var $arr_reports=array(1=>array('title'=>'Журнал собрания','code'=>'events_meeting/doc_meeting_lession_registr')) ;
   var $rec_event ;
   var $rec_lession ;
   var $card_theme_title='Темы собрания' ;
   var $allow_send_invite=0 ; // разрешить отправлять сообщение о мероприятии

    var $default_settings=array('mode'=>1, //  ежегодный
                                'sanction'=>array('block_mo'=>0),
                                'message1'=>'Вы приглашены на собрание',

                               ) ;

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

    var $arr_meeting_status=array(0=>'Запланировано',
                              1=>'Запланировано',
                              2=>'Регистрация на собрание',
                              3=>'Идет собрание',
                              4=>'Собрание завершено'
                              ) ;

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

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

   function get_url_event_card($id)
   {
     return('/window/events_meeting/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'],array('only_active'=>1)) ;
        $arr_personals_status_fired=EVENTS()->get_event_personals_status($this->rec_event['pkey'],array('only_fired'=>1)) ;
        //damp_array($arr_personals_status) ;
        $personals_count=array_sum($arr_personals_status) ;
        $personals_fired_count=array_sum($arr_personals_status_fired) ;
        $lession_personals_count=execSQL_value('select count(pkey) from obj_site_lession_persons where event_id='.$this->rec_event['pkey']) ;

        ?><table class="basic auto fz_small setting">
             <tr><th>Наименование:</th><td><?echo $this->rec_event['obj_name']?></td></tr>
             <tr><th>Дата/время собрания:</th><td><?echo date('d.m.Y',$this->rec_event['date_from'])?></td></tr>
             <?if ($this->allow_send_invite){?><tr><th>Приглашение на собрание:</th><td><?echo ($this->rec_event['_ext_info']['auto_status_2']==1)? 'Вручную':'Автоматически'?> (нет, вручную, автоматически)</td></tr><?}?>
             <?if ($this->allow_send_invite){?><tr><th>Дата начала уведомлений о собрании:</th><td><?echo ($this->rec_event['alert_from'])? date('d.m.Y',$this->rec_event['alert_from']):''?></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 ; if ($personals_fired_count) echo '<div class="comment small">и еще '.$personals_fired_count.' в отложенном увольнении</div>'?></td></tr>
             <tr><th>Присутствующие на собрании:</th><td><?echo nl2br($this->rec_event['_ext_info']['message2'])?></td></tr>
             <tr><th><strong>ФАКТИЧЕСКИЕ ДАННЫЕ:</strong></th><td></td></tr>
             <tr><th>Статус собрания:</th><td><?echo $this->arr_status_lession[$this->rec_lession['status']]?></td></tr>
             <tr><th>Дата/время начала собрания:</th><td><?if ($this->rec_lession['time_from']) echo date('d.m.Y H:i',$this->rec_lession['time_from'])?></td></tr>
             <tr><th>Дата/время окончания собрания:</th><td><?if ($this->rec_lession['time_to']) echo date('d.m.Y H:i',$this->rec_lession['time_to'])?></td></tr>
             <tr><th>Число участников собрания:</th><td><?echo $lession_personals_count?></td></tr>
             <tr><th>Место проведения собрания:</th><td><?echo ACCOUNTS()->get_group_name($this->rec_lession['group_id'])?></td></tr>
         </table><br>
         <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($this->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>


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


                           </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)
    {  FILE_LOG()->append('update_personal_status_1') ;

       ob_start() ;
       $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) ;}


       $result=EVENTS()->update_event_personals($event_id,array('remove_outer'=>1)) ;

         // если в мероприятии автоперевод в "направлен на инструктаж" - направляем
         if ($rec_event['_ext_info']['auto_status_2']==2) $this->set_personal_to_status_2($event_id,'') ;

       $text=ob_get_clean() ; echo $text ;

       LOGS()->reg_log('update_personal_status_1','',array('data'=>$result,'save_to_file'=>$text,'reffer'=>$rec_event['_reffer'])) ;

       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' ;
         if ($personal_ids)  $_usl[]='personal_id in ('.$personal_ids.')' ;
         $usl=implode(' and ',$_usl) ;
         $recs=execSQL('select pkey,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)
         {   // отправляем ему сообщение
             $mess_rec=$this->prepare_message($rec_event,$rec_event_pass,$rec_event['_ext_info']['message1'])  ;
             $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) ;

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


      }

    function prepare_message($rec_event,$rec_event_pass,$mess_text)
    { if ($rec_event['block_from']) $mess_text.=', срок до '.date('d.m.Y',$rec_event['block_from']) ;

      $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'=>$rec_event['alert_from'],
            'view_to'=>$rec_event['alert_to'],
            //'max_day'=>$rec_event['_ext_info']['period_to_status_7'],
            'block_from'=>$rec_event['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'] // объект, которые будет использоваться в эвентах
            ) ;
      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 on_event_save_doc_signature($options=array())
    {  ob_start() ;
       $rec_doc=(_sizeof($options['rec_doc']))? $options['rec_doc']:array() ;
       echo 'pkey='.$rec_doc['pkey'].'<br>' ;
       echo 'doc_report_code='.$rec_doc['report_code'].'<br>' ;
       echo 'report_lessions_jurnal='.$this->report_lessions_jurnal.'<br>' ;
       // если документ - ведомость собрания, завершаем собрание
       if ($rec_doc['pkey'] and 'doc_'.$rec_doc['report_code']==$this->report_lessions_jurnal)
       {  //$event_id=$rec_doc['source_pkey'] ;
          //update_rec_in_table('obj_site_events_schedule',array('status'=>4),'pkey='.$event_id,array('debug'=>2)) ;  // 4 - Собрание завершено
          update_rec_in_table('obj_site_lession',array('status'=>5),'pkey='.$rec_doc['lession_id'],array('debug'=>2)) ;      // 5 - Занятие завершено
       }
       $text=ob_get_clean() ;
       LOGS()->reg_log('on_event_save_doc_signature',$text) ;
    }

}

?>
