<?php
include_once("c_esmo_magnit_instruction_card_db.php");
class c_page_cab_esmo_magnit_instruction_card_db_actions extends c_page_cab_esmo_magnit_instruction_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()
  {
      include_once('i_instruktios_utils.php') ;
      i_instruktios_utils::check_events_personal_status($this->rec_event,1) ;
  }
  function cmd_check_event_end_exec()
  {
      include_once('i_instruktios_utils.php') ;
      i_instruktios_utils::check_events_personal_status($this->rec_event) ;
  }



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



  // далее проверки не используется, достаточно информации по статусам на основании данных по участию сотрдника в занятиях
/*
  function cmd_check_status_info()
  {
      $this->check_status(1) ;
  }

  function cmd_check_status_exec()
  {
      $this->check_status(0) ;
  }


  // проверка статусов участников мероприятий
  // независимо от соответствия текущего статуса истории, проверяем, провильность истории
  // если сотрудник прошел обучение - все последнующие записи на удаление + закрытие сообщения
  // если  сотрудник не прошел обучение - проверить наличие активного сообщения


  function check_status($read_only=0)
  {   ob_start() ;
      $arr_stats=array() ;
      $rec_event=EVENTS()->get_event_by_id($this->rec_event['pkey']) ;
      ///damp_array($rec_event,1,-1);
      $obj_event=EVENTS()->get_event_obj_by_id($this->rec_event['pkey']) ;
      // участие сотрудника в мероприятия
      $recs_pass=execSQL('select t1.pkey,t1.tkey,t1.c_data,t1.personal_id,t1.status,t1.mess_id,t2.status as mess_status
                          from obj_site_events_pass t1
                          left join obj_site_personal_mess t2 on t2.pkey=t1.mess_id
                          where t1.event_id='.$this->rec_event['pkey']) ;
      echo 'В мероприятии участвуют <strong>'._sizeof($recs_pass).'</strong> участников<br>' ;
      // присутствие сотрудника на занятиях
      $recs_lessions_persons=execSQL('select pkey as id,c_data,personal_id,status,sign_fname from obj_site_lession_persons where event_id='.$this->rec_event['pkey']) ;
      echo 'Присутствие сотрудника на занятиях <strong>'._sizeof($recs_lessions_persons).'</strong> записей<br>' ;
      // присутствие сотрудника на занятиях
      $recs_lessions=execSQL('select pkey as id,c_data,obj_name from obj_site_lession where event_id='.$this->rec_event['pkey']) ;
      echo 'Список тем занятий <strong>'._sizeof($recs_lessions).'</strong> записей<br>' ;
      // история изменения статусов
      $recs_status=execSQL('select pkey as id,c_data,obj_name,personal_id,status_old,status_new,person_org,person_otdel,person_working from obj_site_events_pass_status where event_id='.$this->rec_event['pkey'].' order by pkey') ;
      echo 'История изменения статусов <strong>'._sizeof($recs_status).'</strong> записей<br>' ;
      $recs_status_pers=group_by_field('personal_id',$recs_status) ;
      //damp_array($recs_status_pers);

      $cnt_problem=0 ;
      $result_mess=[] ; $result_pass=[] ;
      $ids_to_remove=[] ;

      if (_sizeof($recs_pass)) foreach($recs_pass as $rec_pass)
      {   ob_start() ;
          echo '<hr>' ;
          echo 'Pass ID: '.$rec_pass['pkey'].' Personal_id:'.$rec_pass['personal_id'].'<br>' ;
          $arr222=[$rec_pass] ;
          print_2x_arr($arr222);


          $status_pers=$recs_status_pers[$rec_pass['personal_id']] ;
          $mess_id=$rec_pass['mess_id'] ;

          // проверям наличие в списке статусов 7 - прошел мероприятия
          $is_end=0 ;
          $is_problem=0 ;
          $max_status=0 ;
          if (_sizeof($status_pers)) foreach($status_pers as $i=>$rec_status)
          { if ($rec_status['status_new']==7 and !$is_end) $is_end=1 ;
            if ($rec_status['status_new']>$max_status) $max_status=$rec_status['status_new'] ;
            if ($is_end and $rec_status['status_new']!=7)
            { $status_pers[$i]['action']='remove' ;
              $ids_to_remove[]=$rec_status['id'] ;
              $is_problem=1 ;
              $cnt_problem++ ;
            }
          }

          echo 'is_end=<strong>'.$is_end.'</strong> max_status=<strong>'.$max_status.'</strong><br>' ;

          // проверяем соответствие статуса в pass максимальному статусу в истории
          if ($max_status!=$rec_pass['status'])
          { $cnt_problem++ ;
            $is_problem=1 ;
            echo 'Несооветствие статуса в PASS истории прохождения  <strong>'.$rec_pass['status'].'</strong> <=> <strong>'.$max_status.'</strong><br>' ;
            // если провшел мероприятие - закрываем сообщение, ставим в pass статус 7
            if ($max_status==7)
            { if ($mess_id and $rec_pass['mess_status']!=4) if (!$read_only) PERSONAL()->message_personal_close($mess_id) ;
              echo '<div class="green">Закрыто сообщение ID '.$mess_id.'</div>' ;
              $result_mess['close_message']++;
              if (!$read_only) update_rec_in_table('obj_site_events_pass',array('status'=>7,'mess_id'=>0),'pkey='.$rec_pass['pkey']) ;
              echo '<div class="green">Исправлена запись по участию в мероприятии: status=<strong>7</strong>, mess_id=0<br>' ;
              $result_pass['set_status_7']++ ;
            }
            // если не провшел мероприятие - открываем сообщение, ставим в pass статус $max_status
            else
            {   // сообщение не существует - нет ID или нет есть ID но нет статуса
                if (!$mess_id or !$rec_pass['mess_status'])
                { // участие в мероприятии преждевременно закрыто
                  $mess_rec=$obj_event->prepare_message($rec_event,$rec_pass,$rec_event['_ext_info']['message1'])  ;
                  if (!$read_only) $mess_reffer=PERSONAL()->message_personal_create($mess_rec) ;
                  list($mess_id,$mess_tkey)=explode('.',$mess_reffer) ;
                  echo 'Отправлено сообщение ID:'.$mess_id.'<br>' ;
                  damp_array($mess_rec,1,-1);
                  $result_mess['send_message']++;
                }
                // сообщение существует, но закрыто
                else if ($mess_id and $rec_pass['mess_status']==4)
                {  if (!$read_only)  update_rec_in_table('obj_site_personal_mess',array('status'=>3),'pkey='.$mess_id) ;
                   echo 'Активировано сообщение ID <strong>'.$rec_pass['mess_id'].'</strong><br>' ;
                   $result_mess['activate_message']++;
                }

                 // фиксируем в записи по человеку в событии ID отправленого ему сообщения
                 if (!$read_only) update_rec_in_table('obj_site_events_pass',array('status'=>$max_status,'mess_id'=>$mess_id),'pkey='.$rec_pass['pkey']) ;
                 echo 'Исправлен статус  <strong>'.$rec_pass['status'].'</strong> ==> <strong>'.$max_status.'</strong><br>' ;
                 $result_pass['set_status_'.$max_status]++ ;
            }



          }

          if ($is_problem and _sizeof($status_pers)) print_2x_arr($status_pers);
          $text=ob_get_clean() ;
          if ($is_problem) echo $text ;
          }

      if (_sizeof($ids_to_remove))
      {
          if (!$read_only) execSQL_update('delete from obj_site_events_pass_status where pkey in ('.implode(',',$ids_to_remove).')') ;
          echo 'Удалено  <strong>'._sizeof($ids_to_remove).'</strong> неверных записей по истории участия<br>' ;
      }


      if (!$cnt_problem) echo 'Не найдено сотрудников с неверным статусом<br>' ;
      else
      { damp_array($result_pass,1,-1);
        damp_array($result_mess,1,-1);
      }



      $text=ob_get_clean() ;
      $fname=LOGS()->reg_file_log('cmd_repair_status_7',$text) ;
      LOGS()->reg_log('check_event_personal_status','<a target=_blank href="'.$fname.'">Отчет</a>') ;
      echo $text ;

  }
  */
}



?>
