<?php
include_once("c_events_opo_card_db.php");
class c_page_cab_events_opo_card_db_actions extends c_page_cab_events_opo_card_db
{
  public $h1='Проверка мероприятия' ;
  function block_main()
  { $this->page_title() ;
    //damp_array($this->rec_event,1,-1) ;
	?><button class="v1" cmd="update_personal_status_1">Обновить список подлежащих мероприятию</button><?
    ?><button class="v1" cmd="check_personal_status_1">Отладка отбора сотрудников в мероприятие</button><?
	/*?><button class="v1" cmd="check_status_info">Проверить статусы участников (инфо)</button><?
	?><button class="v1" cmd="check_status_exec">Проверить статусы участников (исправить)</button><?
      ?><br><?
	*/
      ?><br><h3>Проверка статусов участников мероприятия</h3>
      Будет выполнена проверка соответствия статуса участия в мероприятии на основании данных по участию в занятиях.<br>
      Будет выполнена проверка сообщений по мероприятию в соответствии с текущим статусом сотрудника.<br><?

      ?><button class="v1" cmd="check_event_end_info">Выполнить (только чтение)</button>&nbsp;&nbsp;<?
      ?><button class="v1" cmd="check_event_end_exec">Выполнить (исправить)</button><?

  }

  function cmd_check_personal_status_1()
  {
     $result=$this->obj_event->update_personal_status_1($this->rec_event['pkey'],array('debug_db'=>2,'read_only'=>1)) ;
     damp_array($result,1,-1) ;
  }

  function cmd_update_personal_status_1()
  {
	  $result=$this->obj_event->update_personal_status_1($this->rec_event['pkey'],array('debug_db'=>2)) ;
	  damp_array($result,1,-1) ;
  }

  function cmd_check_event_end_info()
  {
      $this->check_event_end(1) ;
  }
  function cmd_check_event_end_exec()
  {
      $this->check_event_end() ;
  }

  function check_event_end($read_only=0)
  {  ob_start() ;
     echo ($read_only)? 'РЕЖИМ ТОЛЬКО ЧТЕНИЕ':'РЕЖИМ ИСПРАВЛЕНИЯ' ;
     echo '<br>' ;
     $event_id=$this->rec_event['pkey'] ;
     $rec_event=EVENTS()->get_event_by_id($this->rec_event['pkey']) ;
     $obj_event=EVENTS()->get_event_obj_by_id($this->rec_event['pkey']) ;

     $result_pass=[] ;

     $recs_themes=EVENTS()->get_themes_of_events($this->rec_event['pkey']) ; $recs_lession=array() ;
     $cnt_event_themes=_sizeof($recs_themes) ;
     $recs_lession_themes=execSQL('select parent as lession_id,theme_id from obj_site_lession_themes where event_id='.$this->rec_event['pkey'],0,1);
     $recs_themes_by_lession=array() ;
     if (_sizeof($recs_lession_themes)) foreach($recs_lession_themes as $rec) $recs_themes_by_lession[$rec['lession_id']][$rec['theme_id']]=1 ;

     // проверка сотрудников по фактическому участию в занятиях
     $sql='select t1.parent as lession_id,t1.personal_id,t1.c_data,t1.account_id,t1.status,t1.sign_fname,
          t2.status as lession_status,
          t3.obj_name as lektor_name,
          t4.pkey as pass_id,t4.tkey as pass_tkey,t4.status as pass_status
          from obj_site_lession_persons t1
          left join obj_site_lession t2 on t2.pkey=t1.parent
          left join obj_site_account t3 on t3.pkey=t1.account_id
          left join obj_site_events_pass t4 on t4.personal_id=t1.personal_id and t4.event_id='.$this->rec_event['pkey'].'
          where t1.event_id='.$this->rec_event['pkey'].' and t1.sign_fname!="" and t4.status>0' ;

     $recs=execSQL($sql,0,1) ;
      ?>Найдено участий сотрудников в занятиях - <strong><?echo _sizeof($recs)?></strong><br><?
     // print_2x_arr($recs);
      $recs_by_pers=group_by_field('personal_id',$recs,'lession_id') ;
      //print_2x_arr($recs_by_pers);
      ?>Найдено уникальных сотрудников в занятиях - <strong><?echo _sizeof($recs_by_pers)?></strong><br><?

      $report=array() ;
      ?><strong>Выполняем проверку корректности статусов на основе данных по участию в занятиях</strong><?
      foreach($recs_by_pers as $personal_id=>$recs_personal)
      {   $arr_personal_themes=[] ; $pass_status=0 ;
          foreach($recs_personal as $lession_id=>$rec_lession) if ($rec_lession['sign_fname'])
          { if (isset($recs_themes_by_lession[$lession_id])) foreach($recs_themes_by_lession[$lession_id] as $theme_id=>$pass) if ($pass) $arr_personal_themes[$theme_id]=1 ;
            $pass_status=$rec_lession['pass_status'] ;
          }

          $report[$personal_id]['Число заняний']=_sizeof($recs_personal) ;
          $report[$personal_id]['Число прослушанных тем']=_sizeof($arr_personal_themes) ;
          $report[$personal_id]['Всего тем']=$cnt_event_themes ;
          $report[$personal_id]['Текущий статус']=$pass_status ;

          //damp_array($arr_personal_themes,1,-1);
          if (_sizeof($arr_personal_themes)==$cnt_event_themes and $pass_status<7)
          { if (!$read_only)
            { //EVENTS()->set_event_personal_data($event_id,$personal_id,array('status'=>7),'Утилита check_event_end, исправлен статус так как прослушаны все темы') ;
              execSQL_update('update obj_site_events_pass set status=7 where event_id='.$event_id.' and personal_id='.$personal_id) ;
            }
            $result_pass['set_status_7']++ ;
            $report[$personal_id]['Новый статус']=7 ;
            $report[$personal_id]['comment'][]='исправлен статус '.$pass_status.'=>7, так как прослушаны все темы' ;

          }
          // прочитаны не все темы но статус 7
          if (_sizeof($arr_personal_themes)<$cnt_event_themes and $pass_status==7)
          { if (!$read_only)
            { //EVENTS()->set_event_personal_data($rec_event['pkey'],$personal_id,array('status'=>6),'Утилита check_event_end, исправлен статус так как не прослушаны все темы') ;
              execSQL_update('update obj_site_events_pass set status=6 where event_id='.$event_id.' and personal_id='.$personal_id) ;
            }
            $result_pass['set_status_6']++ ;
            $report[$personal_id]['Новый статус']=6 ;
            $report[$personal_id]['comment'][]='исправлен статус '.$pass_status.'=>6, так как не прослушаны все темы' ;
          }
      }
      if (_sizeof($result_pass)) { ?><div class="red">Будет произведена корректция статусов</div><? }
      else { ?><div class="green">Все статусы участников корректны</div><? }

      echo '<br>' ;

      $report_show=[];
      echo 'Проверенео <strong>'._sizeof($report).'</strong> участников мероприятия<br>' ;
      if (_sizeof($report)) foreach($report as $id=>$data) if (_sizeof($data['comment']))
      { $report[$id]['comment']=implode('<br>',$data['comment']) ;
        $report_show[$id]=$report[$id] ;
      }

      if (_sizeof($report_show)) { ?><div class="red">Будет произведена корректция сообщений</div><? }
      else { ?><div class="green">Все сообщений участников мероприятия корректны</div><? }


      $text_to_event=ob_get_clean() ; //

      ob_start() ;
      echo $text_to_event ;
      if (_sizeof($result_pass)) { ?><div class="red">Будет произведена корректция статусов: </div><? damp_array($result_pass,1,-1);}
      if (_sizeof($report_show)) { ?><div class="red">Будет произведена корректция сообщений: </div><? print_2x_arr($report_show);}
      /*?><strong>Полная информация по участию в мероприятии:</strong><?
      print_2x_arr($report);*/
      $text_to_log=ob_get_clean() ;


      LOGS()->reg_log('check_event_end',$text_to_event,array('save_to_file'=>$text_to_log)) ;

      echo $text_to_event ;
      print_2x_arr($report_show);

      //$rec=execSQL_van('select * from obj_site_personal_mess where pkey=28179') ;
      //unset($rec['pkey'],$rec['_reffer'],$rec['_parent_reffer']) ;
      //adding_rec_to_table('obj_site_personal_mess',$rec) ;


  }

    function event_pass_close_messages($pass_id,$options=array())
    {   if (!isset($options['comment'])) $options['comment']='' ;
        if (!isset($options['read_only'])) $options['read_only']=0 ;
        // все сообщения в системе только от модуля "Мероприятия", поэтому ищем по полю source_pkey, так как поле source_tkey не индексировано
        update_rec_in_table('obj_site_personal_mess',array('status'=>4,'enabled'=>0,'close_data'=>time()),'source_pkey='.$pass_id) ;
    }

}



?>
