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

    var $default_settings=array('mode'=>6, //  постоянное
                               'type'=>6, // Направления по АГ
                               'sanction'=>array('block_mo'=>1),
                               'message1'=>'Вам необходимо сдать направление по АГ'
                               ) ;

    var $arr_status=array(0=>'',
                          2=>'Документ выдан',
                          3=>'Уведомлен',
                          4=>'Сдача просрочена',
                          5=>'Документ сдан'
                          ) ;

   function get_url_event_card($id)
   {
     return('/window/events_docs/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) ;
           //damp_array($this->rec_event) ;

           ?><table class="basic auto fz_small setting">
                <tr><th>Тип документа:</th><td><?echo ENGINE()->docs_list[$this->rec_event['doc_code']]['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']['period_to_status_2']?> дней</td></tr>
                <tr><th>Срок начала уведомлений:</th><td> за <?echo $this->rec_event['_ext_info']['period_to_status_3']?> дней до срока сдачи документа</td></tr>
                <tr><th>Блокировка МО при несдаче документа:</th><td><?echo ($this->rec_event['_ext_info']['block_mo'])? 'Да':'Нет'?></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_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>
                                   <?if ($this->rec_event['doc_code']) {
                                       ?>
                                       <!--<input type="hidden" name="filter[doc_code]" value="<?echo $this->rec_event['doc_code']?>">-->
                                       <strong><?echo ENGINE()->docs_list[$this->rec_event['doc_code']]['name']?></strong>
                                       <?
                                   } else {
                                       ?>
                                   <label class="select">
                                        <select class=filter name="filter[doc_code]">
                                            <?
                                            $exists_docs_types=execSQL_line('select doc_code from obj_site_events_schedule where clss=222 and enabled=1 and doc_code!=""') ;
                                            if (_sizeof(ENGINE()->docs_list)) foreach(ENGINE()->docs_list as $code=>$rec_doc)  if (!in_array($code,$exists_docs_types))
                                            {?><option value="<?echo $code?>" <?if ($this->rec_event['doc_code']==$code) echo 'selected'?>><?echo $rec_doc['name']?></option><?}
                                            ?>
                                        </select>
                                       </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">Число дней на сдачу документа</label>
                               <label class="input"><input type="text" name="filter[period_to_status_2]" data-required value="<?echo $this->rec_event['_ext_info']['period_to_status_2']?>"></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">Срок начала уведомлений:</label>
                            <label class="input"><input type="text" name="filter[period_to_status_3]"  data-required value="<?echo $this->rec_event['_ext_info']['period_to_status_3']?>"></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-4">
                                <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>

                         </div>
                     </fieldset> <input type="hidden" name="filter[enabled]" value="1">
                    <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,$count=100)
    {  // получаем все сообщения за все время, кторые еще не добвлены в мероприятие
       $result=array();
       set_time_limit(0) ;
       // берем все подписанные направления
        // второй проход - задаем для направлени ID мероприя, которое создано в течении его действия
       /* return ;
       $recs=execSQL('select t1.*
                      from obj_site_personal_mess t1
                      left join  obj_site_events_pass t2 on t2.event_id='.$event_id.' and t2.personal_id=t1.personal_id and t2.mess_id=t1.pkey
                      where t1.clss=217 and (not (t1.source_obj  like "esmo_magnit_pmo%" or t1.source_obj  like "esmo_magnit_instruction%" or t1.source_obj  like "events_docs%") or t1.source_obj is null)
                      and t2.pkey is null and t1.obj_name like "%направление%"

                      order by t1.pkey
                      limit 1000') ;*/
        // первый проход - добавляем в мероприятия направления, по которым есть уведомление
        //$_SESSION['ARR_mess_status']=array(1=>'Новое',
        //                                   2=>'Уведомлен',
        //                                   3=>'Уведомления завершены',
        //                                   4=>'Закрыто'
        //                                   ) ;
        //
        //    var $arr_status=array(0=>'',
        //                          2=>'Документ выдан',
        //                          3=>'Уведомлен',
        //                          4=>'Сдача просрочена',
        //                          5=>'Документ сдан'
        //                          ) ;
        // ВНИМАНИЕ! При добавлении новых статусов откр
        //  $_SESSION['ARR_status_scan']=array(0=>'',
        //                                     1=>'Новый',
        //                                     2=>'В работе',
        //                                     3=>'Принят',
        //                                     4=>'Отклонен',
        //                                     5=>'Не удалось распознать',
        //                                     6=>'Распознается',
         //                                    7=>'Загружен ошибочно'
         //                                   ) ;


        // $rec['max_data'], $rec['block_from']  - дата начала блокировки МО при несдаче документа
        //

       // берем все подписанные направления
       // на тесте имеет место ситуация, когда для одного документа отправлено несколько сообщений
       // но в данном варианте mess_id используется только как флаг - отправлять уведомление при добавлении event_pass или нет
       /*$recs=execSQL('select t1.pkey as doc_id,t1.personal_id,t1.c_data,t1.member_id as account_id,t1.group_id,
                      t3.pkey as mess_id,t3.status as mess_status,t3.max_data as mess_max_data,t3.block_from as mess_block_from,
                      t2.status as scan_status,t2.data_set as scan_data_set
                      from obj_site_docs t1
                      left join obj_site_scan t2 on t2.doc_id=t1.pkey
                      left join obj_site_personal_mess t3 on t3.personal_id=t1.personal_id and t3.c_data>=t1.sign_data and t3.c_data<(t1.sign_data+5)
                      left join obj_site_events_pass t4 on t4.doc_id=t1.pkey
                      where t1.report_code="napravlenie" and t1.sign_data>0 and not t3.pkey is null and t4.pkey is null
                      order by doc_id limit '.$count,2) ;



       if (_sizeof($recs))
       { ?><h2>Первый этап - обрабатываем направления c сообщениями</h2><?
         $result['обрабатано направлений с сообщениями, без мероприятий']=0 ;
         foreach($recs as $rec)
           {   $status=0 ;
               switch($rec['mess_status'])
               { case 1: $status=2 ; break ;
                 case 2: $status=3 ; break ;
                 case 3: $status=4 ; break ;
                 case 4: $status=5 ; break ;
               }

               $options=array('account_id'=>$rec['account_id'],
                              'group_id'=>$rec['group_id'],
                              'mess_id'=>$rec['mess_id'],
                              'c_data'=>$rec['c_data']
                       ) ;

               // закрываем выдачу направлений, по которым были созданы сообщения и по котором были сданы сканы
               if ($rec['scan_status']==3) $options['close_data']=$rec['scan_data_set'] ;
               if ($rec['mess_max_data'])  $options['block_data']=$rec['mess_max_data'] ;
               if ($rec['mess_block_from'] and $rec['mess_block_from']>$rec['mess_max_data'])  $options['block_data']=$rec['mess_block_from'] ;
               // но еще есть выданные направления, по которым не было сообщений, но были сданы сканы. Они будут закрыты позже
               $this->add_personal_to_event($event_id,$rec['personal_id'],$rec['doc_id'],$status,$options) ;
               // ставим признак используемого алгоритма
               update_rec_in_table('obj_site_docs',array('event_pass_type'=>2),'pkey='.$rec['doc_id']) ;
               $result['обрабатано направлений с сообщениями, без мероприятий']++ ;
           }

           $cnt_step1=execSQL_value('select count(t1.pkey) as cnt
                                     from obj_site_docs t1
                                     left join obj_site_personal_mess t3 on t3.personal_id=t1.personal_id and t3.c_data>=t1.sign_data and t3.c_data<(t1.sign_data+5)
                                     left join obj_site_events_pass t4 on t4.doc_id=t1.pkey
                                     where t1.report_code="napravlenie" and t1.sign_data>0 and not t3.pkey is null and t4.pkey is null
                                    ') ;
           echo 'Осталось обработать <strong>'.$cnt_step1.'</strong> документов, по которым были отправлены сообщения и по которым нет участий в событиях<br>' ;


           // итак, все связки - направление-сообщение-скан обработаны, теперь необходимо обработать доккументы, по которым не были отправлены уведомления
       }
       else */
       for ($i=0;$i<=100;$i++)
       {  ?><h2>Обрабатываем направления без сообщений c мероприятиями в дату подписи документа</h2><?
          // получаем подписанные направления, которые не попали в первый список (с сообщениями)
           $rec_event=EVENTS()->get_event_by_id($event_id) ;

           $recs=execSQL('select t1.pkey as doc_id,t1.personal_id,t1.c_data,
                          t3.pkey as event_pass_id,t3.tkey as event_pass_tkey,
                          t2.pkey as scan_id,t2.status as scan_status,t2.data_set as scan_data_set
                          from obj_site_docs t1
                          left join obj_site_scan t2 on t2.doc_id=t1.pkey
                          left join obj_site_events_pass t3 on t3.event_id='.$event_id.' and t3.personal_id=t1.personal_id and t1.sign_data>t3.c_data and t1.sign_data<t3.block_data
                          where t1.report_code="napravlenie" and t1.sign_data>0 and t1.source_pkey=0 and not t3.pkey is null 
                          order by doc_id limit '.$count) ;

           $result['обрабатано направлений без сообщений c мероприятиями в дату подписи документа']=0 ;
           if (_sizeof($recs)) foreach($recs as $rec)
           { // проставляем в документах мероприятие, в мероприятии уже ничего не меняем, оно связано с первым выданным документом
             DOCS()->update_doc($rec['doc_id'],array('source_obj'=>$rec_event['ext'],'source_pkey'=>$rec['event_pass_id'],'source_tkey'=>$rec['event_pass_tkey'])) ;
             echo 'Обновлен источник документа '.$rec['doc_id'].'<br>' ;
             // если по данному направлению статус скана - принят - изменяем статус участия в мероприятии
             if ($rec['scan_status']==3)
             {   EVENTS()->set_event_personal_data_by_id($rec['event_pass_id'],array('status'=>5,'close_data'=>$rec['scan_data_set'],'scan_id'=>$rec['scan_id']),'Прием скана документа') ;
                 //update_rec_in_table('obj_site_events_pass',array('close_data'=>$rec['scan_data_set'],'status'=>5),'pkey='.$rec['event_pass_id']) ;
                 $rec_event_pass=EVENTS()->get_event_pass_by_id($rec['event_pass_id']) ;
                 if ($rec_event_pass['mess_id'])
                 {  // закрываем сообщение
                     PERSONAL()->message_personal_close($rec_event_pass['mess_id']) ;
                 }
                 echo 'Изменен статус мероприятия <strong>'.$rec['event_pass_id'].'</strong><br>' ;
             }
             // ставим признак используемого алгоритма
             update_rec_in_table('obj_site_docs',array('event_pass_type'=>3),'pkey='.$rec['doc_id']) ;
             $result['обрабатано направлений без сообщений c мероприятиями в дату подписи документа']++ ;
           }

           $cnt_step2=execSQL_value('select count(t1.pkey) as cnt
                                     from obj_site_docs t1
                                     left join obj_site_events_pass t3 on t3.event_id='.$event_id.' and t3.personal_id=t1.personal_id and t1.sign_data>t3.c_data and t1.sign_data<t3.block_data
                                     where t1.report_code="napravlenie" and t1.sign_data>0 and t1.source_pkey=0 and not t3.pkey is null 
                                    ') ;
           if ($cnt_step2) echo 'Осталось обработать <strong>'.$cnt_step2.'</strong> документов, по которым не были отправлены сообщения<br>' ;

           if (!$cnt_step2)
           { ?><h2>Обрабатываем направления без сообщений и без мероприятий в дату подписи документа</h2><?
             $recs=execSQL('select t1.pkey as doc_id,t1.personal_id,t1.c_data,t1.member_id as account_id,t1.group_id,
                            t2.status as scan_status,t2.data_set as scan_data_set
                            from obj_site_docs t1
                            left join obj_site_scan t2 on t2.doc_id=t1.pkey
                            left join obj_site_events_pass t3 on t3.event_id='.$event_id.' and t3.personal_id=t1.personal_id and t1.sign_data>t3.c_data and t1.sign_data<t3.block_data
                            where t1.report_code="napravlenie" and t1.sign_data>0 and t1.source_pkey=0 and t3.pkey is null 
                            order by doc_id limit 1') ;

             // делаем по одному документу за проход - так как после добавления участия в событии следующие документы могут оказаться клонами этого участия, и создавать для
             // них мероприятия не нужно, при повторном вызове будет отработан 2-й алгоритм
             $result['обрабатано направлений без сообщений и без мероприятий в дату подписи документа']=0 ;
             if (_sizeof($recs)) foreach($recs as $rec)
             { //  добавляем участие в мероприятие по этим документам
               $options=array('account_id'=>$rec['account_id'],
                            'group_id'=>$rec['group_id'],
                            'c_data'=>$rec['c_data'],
                            'time_now'=>$rec['c_data']
                       ) ;

               // закрываем выдачу направлений, по которым были созданы сообщения и по котором были сданы сканы
               if ($rec['scan_status']==3) $options['close_data']=$rec['scan_data_set'] ;
               // добавляем запись - будет отправлено сообщение о необходимости сдачи документа
               $this->add_personal_to_event($event_id,$rec['personal_id'],$rec['doc_id'],2,$options) ;
               // ставим признак используемого алгоритма
               update_rec_in_table('obj_site_docs',array('event_pass_type'=>4),'pkey='.$rec['doc_id']) ;
               $result['обрабатано направлений без сообщений и без мероприятий в дату подписи документа']++ ;
             }

               $cnt_step3=execSQL_value('select count(t1.pkey) as cnt
                                         from obj_site_docs t1
                                         left join obj_site_events_pass t3 on t3.event_id='.$event_id.' and t3.personal_id=t1.personal_id and t1.sign_data>t3.c_data and t1.sign_data<t3.block_data
                                         where t1.report_code="napravlenie" and t1.sign_data>0 and t1.source_pkey=0 and t3.pkey is null 
                                          ') ;
               echo 'Осталось обработать <strong>'.$cnt_step3.'</strong> документов, по которым не были отправлены сообщения и у которых нет участия в событии<br>' ;


               if (!$cnt_step3) break ;
           }


       }


       $result['doc_events_type']=execSQL_row('select event_pass_type,count(pkey) from obj_site_docs where report_code="napravlenie" and sign_data>0 group by event_pass_type order by event_pass_type') ;

       return($result) ;
    }

    //
    function check_allow_append_personal($event_id,$personal_id)
    {  $cnt=execSQL_value('select count(pkey) from obj_site_events_pass where event_id='.$event_id.' and personal_id='.$personal_id.' and status!=5') ;
       return (($cnt)? 0:1) ;
    }

    // ищем последнее участие в мероприяии в персоны
    // если учпстии в мероприятии открыто - документ будет зарегистрирован в нем
    // если участие в мероротяии закрыто - будет возвращен 0, что создаст новое участие в мероприятии
    function get_last_event_pass_to_personal($event_id,$personal_id)
    {  $last_event_rec=execSQL_van('select pkey,status,mess_id from obj_site_events_pass where event_id='.$event_id.' and personal_id='.$personal_id.' order by pkey desc limit 1') ;
       // если последнее мероприятие закрыто - будет создаваться новое
       if ($last_event_rec['status']==5) $last_event_rec['pkey']=0;
       return ($last_event_rec) ;
    }

    function add_personal_to_event($event_id,$personal_id,$doc_id,$status=2,$options=array())
    {   ob_start() ;
        echo 'add_personal_to_event: event_id='.$event_id.' $personal_id='.$personal_id.' doc_id='.$doc_id.' status='.$status.'<br>' ;
        echo 'options=: '.print_r($options,true).'<br>' ;
        $rec_event=EVENTS()->get_event_by_id($event_id) ;
        $rec_personal_pass=array('clss'=>223,
                                 'event_id'=>$event_id,
                                 'personal_id'=>$personal_id,
                                 'account_id'=>MEMBER()->id,
                                 'group_id'=>MEMBER()->cur_group_id,
                                 'doc_id'=>$doc_id,
                                 'status'=>$status) ;


        if ($options['account_id'])  $rec_personal_pass['account_id']=$options['account_id'] ;
        if ($options['group_id'])    $rec_personal_pass['group_id']=$options['group_id'] ;
        if ($options['c_data'])      $rec_personal_pass['c_data']=$options['c_data'] ;
        if ($options['close_data'])  $rec_personal_pass['close_data']=$options['close_data'] ;
        if ($options['mess_id'])     $rec_personal_pass['mess_id']=$options['mess_id'] ;
        if ($options['block_data'])  $rec_personal_pass['block_data']=$options['block_data'] ;
        //damp_array($rec_personal_pass,1,-1) ;
        // проверяем, есть ли запись по данному сотруднику в мероприятии в незакрытом (5) статусе
        $exists_event_rec=$this->get_last_event_pass_to_personal($event_id,$personal_id) ;
        if (!$exists_event_rec['pkey']) $event_pass_reffer=adding_rec_to_table('obj_site_events_pass',$rec_personal_pass,array('return_reffer'=>1)) ;
        else
        {  update_rec_in_table('obj_site_events_pass',$rec_personal_pass,'pkey='.$exists_event_rec['pkey']) ;
            $event_pass_reffer=$exists_event_rec['pkey'].'.'._DOT('obj_site_events_pass')->pkey ;
            echo '$event_pass_reffer='.$event_pass_reffer.'<br>' ;
            $options['mess_id']=$exists_event_rec['mess_id'] ;
        }
        echo 'Добавлено участие в мероприятии для <strong>'.$personal_id.'</strong> - <strong>'.$event_pass_reffer.'</strong><br>' ;
        list($event_pass_id,$event_pass_tkey)=explode('.',$event_pass_reffer) ;

        list($pkey,$tkey)=explode('.',$event_pass_reffer) ;
        DOCS()->update_doc($doc_id,array('source_obj'=>$rec_event['ext'],'source_pkey'=>$pkey,'source_tkey'=>$tkey,'event_pass_type'=>1)) ;

        // отправляем сообщение о необходимости сдать документ, если мероприятие еще не закрыто
        if (!$options['mess_id'] and !$options['close_data'])
        {   echo 'отправляем сообщение о необходимости сдать документ, если мероприятие еще не закрыто<br>' ;
            $now=($options['time_now'])?  getdate($options['time_now']):getdate() ;
            $block_from=mktime(23,59,59,$now['mon'],$now['mday']+$rec_event['_ext_info']['period_to_status_2'],$now['year']);
            $view_from=mktime(23,59,59,$now['mon'],$now['mday']+$rec_event['_ext_info']['period_to_status_2']-$rec_event['_ext_info']['period_to_status_3'],$now['year']);
            $mess_text= $rec_event['_ext_info']['message1'] ;
            $mess_text.=', срок до '.date('d.m.Y',$block_from) ;
            // отправляем ему сообщение
            $mess_reffer=PERSONAL()->message_personal_create(
                     array('mess_text'=>$mess_text,
                           'group_id'=>($options['group_id'])? $options['group_id']:MEMBER()->cur_group_id,
                           'account_id'=>($options['account_id'])? $options['account_id']:MEMBER()->id,
                           'personal_id'=>$personal_id,
                           'view_from'=>($options['view_from'])? $options['view_from']:$view_from,
                           'block_from'=>($options['block_from'])? $options['block_from']:$block_from,
                           'auto_close'=>0,
                           //'view_mode'=>1, // показывать при прохождении МО
                           //'block_mo'=>$rec_event['_ext_info']['block_mo'], // блокировать прохождение МО если сообщение не будет закрыто
                           'c_data'=>($options['time_now'])?  $options['time_now']:0,

                           'source_pkey'=>$event_pass_id, // ID персоны в мероприяии
                           'source_tkey'=>$event_pass_tkey, // ID персоны в мероприяии
                           'source_obj'=>$rec_event['ext'] // объект, которые будет использоваться в эвентах
                           )) ;

            list($mess_id,$mess_pkey)=explode('.',$mess_reffer) ;

            update_rec_in_table('obj_site_events_pass',array('mess_id'=>$mess_id,'block_data'=>$block_from),'pkey='.$event_pass_id) ;
        }
        else if ($options['mess_id'])
        {  echo 'В данном участии уже отправлено уведомление, mess_id='.$options['mess_id'].'<br>' ;
           $mess_data=array('source_pkey'=>$event_pass_id, // ID персоны в мероприяии
                            'source_tkey'=>$event_pass_tkey, // ID персоны в мероприяии
                            'source_obj'=>$rec_event['ext'] // объект, которые будет использоваться в эвентах
                            ) ;
           update_rec_in_table('obj_site_personal_mess',$mess_data,'pkey='.$options['mess_id']) ;
        }

        $text=ob_get_clean() ;
        LOGS()->reg_log('add_personal_to_event',$text,array('personal_id'=>$personal_id,'reffer'=>$rec_event['_reffer'])) ;
        return($event_pass_reffer) ;

    }


function on_scan_doc_OCR($rec_doc,$params=array())
{  //damp_array($params);
  $rec_personal=[] ;
   if ($params['personal_id']) $rec_personal=PERSONAL()->get_personal_by_id($params['personal_id']) ;
   //damp_array($rec_personal);
   $gb=0 ; $ag=0 ; $p=0 ;
   if (sizeof($rec_personal['_groups_medic'])) foreach($rec_personal['_groups_medic'] as $id=>$group_name)
   { switch($id)
     { case 1: $gb=1 ; $ag=1 ; break ;
       case 2: $gb=1 ; $ag=2 ; break ;
       case 3: $gb=1 ; $ag=3 ; break ;
       case 4: $gb=2 ; $ag=1 ; break ;
       case 5: $gb=2 ; $ag=2 ; break ;
       case 6: $gb=2 ; $ag=3 ; break ;
       case 7: $gb=3 ; $ag=1 ; break ;
       case 8: $gb=3 ; $ag=2 ; break ;
       case 9: $gb=3 ; $ag=3 ; break ;
       case 10: $p=1 ; break ;
       case 11: $p=2 ; break ;
     }
   }
   ?><div id="panel_set_diagnoz"><div id="panel_filter">
    <h2>Диагноз</h2>
                <form id="sky-form" class="sky-form">
                     <fieldset>
                         <div>
                             <section class="col col-4">
                                 <label class="label">Гипертоническая болезнь:</label>
                                 <label class="radio"><input type="radio" name="gb" value="0" checked ><i></i> нет</label>
                                 <label class="radio"><input type="radio" name="gb" value="1" <?if ($gb==1) echo 'checked'?>><i></i> ГБ 1</label>
                                 <label class="radio"><input type="radio" name="gb" value="2" <?if ($gb==2) echo 'checked'?>><i></i> ГБ 2</label>
                                 <label class="radio"><input type="radio" name="gb" value="3" <?if ($gb==3) echo 'checked'?>><i></i> ГБ 3</label>
                                 <label class="radio"><input type="radio" name="gb" value="4" ><i></i> гипотония</label>
                             </section>
                             <section class="col col-4 <?if (!$ag) echo 'hidden'?>" id="section_ag">
                                 <label class="label">Артериальная гипертензия:</label>
                                 <label>&nbsp;</label>
                                 <label class="radio"><input type="radio" name="ag" value="1" <?if ($ag==1) echo 'checked'?>><i></i> АГ 1</label>
                                 <label class="radio"><input type="radio" name="ag" value="2" <?if ($ag==2) echo 'checked'?>><i></i> АГ 2</label>
                                 <label class="radio"><input type="radio" name="ag" value="3" <?if ($ag==3) echo 'checked'?>><i></i> АГ 3</label>
                             </section>
                             <section class="col col-4">
                                 <label class="label">ЧСС:</label>
                                 <label class="radio"><input type="radio" name="p" value="0" checked><i></i> нет</label>
                                 <label class="radio"><input type="radio" name="p" value="1" <?if ($p==1) echo 'checked'?>><i></i> тахикардия</label>
                                 <label class="radio"><input type="radio" name="p" value="2" <?if ($p==2) echo 'checked'?>><i></i> брадикардия</label>
                             </section>
                         </div>
                         <? if (_sizeof(_IL('IL_group_medic')->recs)>12)
                         {   ?><section class="col col-10">
                                     <label class="label">Другие болезни</label>
                                     <label class="select">
                                         <select class=filter multiple="multiple" name="other[]">
                                             <? if (_sizeof(_IL('IL_group_medic')->recs)) foreach(_IL('IL_group_medic')->recs as $id=>$value) if ($id>12)
                                             {  ?><option value="<?echo $id?>" <?if (isset($rec_personal['_groups_medic'][$id])) echo 'selected'?>><?echo $value['obj_name']?></option><?
                                             }?>
                                         </select>
                                 </section>
                                <?
                         }
                         ?>
                         <div class="clear">
                             <section>
                                 <label class="label">Ваш комментарий к документу:</label>
                                 <label class="textarea" style="width:100%;"><textarea name="comment"></textarea></label>
                             </section>
						 </div>
                         <h3>После обработки документа:</h3><br>
                         <div>
                             <section class="col col-6">
                                 <label class="radio"><input type="radio" name="action_after" value="1" checked ><i></i> Снять ограничение на прохождение МО</label>
                             </section>
                             <section class="col col-6">
                                 <label class="radio"><input type="radio" name="action_after" value="2"><i></i> Заблокировать дальнейшее прохождение МО</label>
                             </section>
                         </div>
                     </fieldset>
					<div id="panel_buttons">
						<button class="button v2" cmd="esmo_magnit/ScanCaptureApply" personal_id=<?echo $params['personal_id']?> scan_id="<?echo $params['scan_id']?>">Принять</button>&nbsp;&nbsp;<??>
                        <button class="button v2" cmd="esmo_magnit/ScanCaptureCancel" scan_id="<?echo $params['scan_id']?>">Отклонить</button>&nbsp;&nbsp;
                        <button class="button v2" cmd="esmo_magnit/ScanPersonClear"  scan_id="<?echo $params['scan_id']?>" url_page="<?echo _CUR_REPORT_DIR?>">Сбросить сотрудника</button>&nbsp;&nbsp;

                    </div>
                 </form>
         </div>
    </div>
    <script type="text/javascript">
       $j('#panel_set_diagnoz input[name=gb]').click(function()
        {  var cur_val=$j(this).val() ;
           //alert(cur_val) ;
           if (cur_val==0) $j('#panel_set_diagnoz #section_ag').hide() ;
           else if (cur_val==4) $j('#panel_set_diagnoz #section_ag').hide() ;
           else            $j('#panel_set_diagnoz #section_ag').show() ;


        }) ;
    </script>
  <?
}

 function set_group_by_diagnoz()
 { //ob_start() ;
   $rec_personal=PERSONAL()->get_personal_by_id($_POST['personal_id']) ;
   // 1. получаем списко текущих групп сотрудника
   $groups_medic_current=$rec_personal['_groups_medic'] ;
   ?><h2>Текущие группы</h2><?
   damp_array($groups_medic_current,1,-1) ;

   // 2. формируем массив из новых групп
   $set_groups=array() ;
   if ($_POST['gb']==1 and $_POST['ag']==1) $set_groups[1]=_IL('IL_group_medic')->recs[1] ;
   if ($_POST['gb']==1 and $_POST['ag']==2) $set_groups[2]=_IL('IL_group_medic')->recs[2] ;
   if ($_POST['gb']==1 and $_POST['ag']==3) $set_groups[3]=_IL('IL_group_medic')->recs[3] ;
   if ($_POST['gb']==2 and $_POST['ag']==1) $set_groups[4]=_IL('IL_group_medic')->recs[4] ;
   if ($_POST['gb']==2 and $_POST['ag']==2) $set_groups[5]=_IL('IL_group_medic')->recs[5] ;
   if ($_POST['gb']==2 and $_POST['ag']==3) $set_groups[6]=_IL('IL_group_medic')->recs[6] ;
   if ($_POST['gb']==3 and $_POST['ag']==1) $set_groups[7]=_IL('IL_group_medic')->recs[7] ;
   if ($_POST['gb']==3 and $_POST['ag']==2) $set_groups[8]=_IL('IL_group_medic')->recs[8] ;
   if ($_POST['gb']==3 and $_POST['ag']==3) $set_groups[9]=_IL('IL_group_medic')->recs[9] ;
   if ($_POST['p']==1) $set_groups[10]=_IL('IL_group_medic')->recs[10] ;
   if ($_POST['p']==2) $set_groups[11]=_IL('IL_group_medic')->recs[11] ;
   if ($_POST['gb']==4) $set_groups[12]=_IL('IL_group_medic')->recs[12] ;
   if (_sizeof($_POST['other'])) foreach($_POST['other'] as $id) $set_groups[$id]=_IL('IL_group_medic')->recs[$id] ;
   ?><h2>Новые группы</h2><?
   print_r(array_keys($set_groups)) ;

   $is_group_change=0 ;
   // 3. Добавляем новые группы в таблицу линков
   if (_sizeof($set_groups)) foreach($set_groups as $rec_group)
   { create_link($rec_personal['_reffer'],$rec_group['_reffer']) ;
     unset($groups_medic_current[$rec_group['id']]) ;
     $is_group_change=1 ;
   }
   ?><h2>Группы на удаление</h2><?
   damp_array($groups_medic_current,1,-1)  ;

   // 4. Удяляем неиспользованные группы
   if (_sizeof($groups_medic_current)) foreach($groups_medic_current as $id=>$name)
   {  delete_link($rec_personal['_reffer'],_IL('IL_group_medic')->recs[$id]['_reffer']) ;
      echo 'Удалена группа '.$name.' ['.$id.']<br>' ;
     $is_group_change=1 ;
   }

   // отправляем событие что у сотрудника изменились группы по болезни
   if ($is_group_change) ENGINE()->on_event('personal_medic_group_change',['personal_id'=>$rec_personal['pkey']]) ;
 }


    function get_diagnoz()
     { $diagnoz=array()  ;
       if ($_POST['gb']>0 and $_POST['gb']<4 and $_POST['ag']) $diagnoz[]='ГБ'.$_POST['gb'].' '.'АГ'.$_POST['ag'] ;
       if ($_POST['p']==1) $diagnoz[]='тахикардия' ;
       if ($_POST['p']==2) $diagnoz[]='брадикардия' ;
       if ($_POST['gb']==4) $diagnoz[]='гипотония' ;
       if (_sizeof($_POST['other'])) foreach($_POST['other'] as $id) $diagnoz[]=_IL('IL_group_medic')->recs[$id]['obj_name'] ;
       $_diagnoz=(_sizeof($diagnoz))? implode(', ',$diagnoz):'Здоров' ;
       return($_diagnoz) ;
     }

   // дейсвия после принятия заключения
   function on_scan_doc_apply($rec_doc,$params=array())
   { // пока не проверяем   $rec_doc['source_tkey']
     // выставляем сотруднику группу по его диагнозу
     echo 'func: on_scan_doc_apply<br>' ;
     $this->set_group_by_diagnoz() ;

     // пишем в скан диагноз
     DOCS()->scan_update($_POST['scan_id'],array('account_work'=>MEMBER()->id,'data_set'=>time(),'status'=>3,'diagnoz'=>$this->get_diagnoz(),'comment'=>$_POST['comment'])) ;
     echo 'doc source pkey='.$rec_doc['source_pkey'].'<br>' ;
     // ищем участие в мероприятии по выдаче документов
     if ($rec_doc['source_pkey'])
     {   $rec_event_personal=EVENTS()->get_event_pass_by_id($rec_doc['source_pkey']) ;

         //$all_event_pass=execSQL('select * from obj_site_events_pass where event_id='.$rec_event_personal['pkey'].' and ')

         if ($rec_event_personal['pkey'])
         {
            // закрываем сообщение, связанное с данным участием в мероприятии
            $this->message_status_change($_POST['personal_id'],$rec_event_personal['pkey']) ;

            // обновляем данные в участнике мероприятия - статус уже 5, прописываем scan_id
            EVENTS()->set_event_personal_data_by_id($rec_event_personal['pkey'],array('status'=>5,'close_data'=>time(),'scan_id'=>$_POST['scan_id']),'Прием скана документа') ;

            // закрываем старое сообщение о необходимости сдать документы
            // после закрытия будет вызван метод on_message_change
            // !!! не нужно, так как сообщения уже закрыты через вызванный ранее  message_status_change
            //if ($rec_event_personal['mess_id']) PERSONAL()->message_personal_close($rec_event_personal['mess_id']) ;
         }
     }
     else
     {  //ob_start() ; $GLOBALS['debug_db']=2 ;
         // если нет документа, по которому закрывается мероприятие
        // просто закрываем все сообщения о выдаче документа
         $this->message_status_change($_POST['personal_id']) ;
         //$GLOBALS['debug_db']=1 ;
         //$text=ob_get_clean() ;
         //LOGS()->reg_log('on_scan_doc_apply',$text) ;
     }

     // $_POST['action_after'] = 1 - разрешить прохождение МО
     // $_POST['action_after'] = 2 - заблокировать прохождение МО
     if ($_POST['action_after']==2)  update_rec_in_table('obj_site_personals',array('mo_block'=>1,'mo_block_comment'=>'Запрет прохождения МО после сдачи направления по АГ'),'pkey='.$_POST['personal_id']) ;

     $result=array('current_window'=>'close','opener_window'=>'reload') ;
     return($result) ;
   }

    // $action_after = 1 - разрешить прохождение МО
    // $action_after = 2 - заблокировать прохождение МО
    function message_status_change($personal_id,$event_pass_id=0)
    {   // получаем все активные сообщения, связанные с участием в мероприятии
        $options=array() ;
        $options['view_blocked']=1 ;
        $options['view_unactive']=1 ;
        //!! ПЕРЕСТРАХОВКА
        // необходимо закрыть все документы, что сейчас есть у сотрудника на руках
        // так как по логике у сотрудника может быть одно активное участие в мероприятии
        // будет работаеть только если по events_docs/i_event_docs проходит один тип документа - направление по АГ
        //if ($event_pass_id) $options['source_pkey']=$event_pass_id ;
        $options['source_obj']='events_docs/i_event_docs' ;
        $recs_mess_ids=PERSONAL()->get_active_mess_ids_to_personal($personal_id,$options) ;
        // закрывам все найденные сообщения
        // после закрытия сообщения будет вызвана i_event_docs::on_message_change($rec_mess)
        // которая изменит статус участия в мероприятии
        if (_sizeof($recs_mess_ids)) foreach($recs_mess_ids as $mess_id) PERSONAL()->message_personal_close($mess_id) ;

    }


    // показ сообщение на ПМО
    // вызывется из PERSONALS()->message_personal_set_view() ;
    function on_message_change($rec_mess,$params=array())
      {  if (!function_exists('EVENTS')) { echo 'Требуется модуль EVENTS<br>' ; return ; }

          // пока не проверяем   $rec_mess['source_tkey']
        //ob_start() ;
        //$GLOBALS['debug_db']=2 ;
        $rec_event_personal=execSQL_van('select pkey,event_status from view_event_personals where event_pass_id='.$rec_mess['source_pkey'].' and mess_id='.$rec_mess['pkey']) ;
        if ($rec_event_personal['pkey'])
        {  switch($rec_mess['status'])
           {  case 1:  EVENTS()->set_event_personal_data_by_id($rec_mess['source_pkey'],array('status'=>2,'close_data'=>0),'Новое сообщение') ; break ;
              case 2:  EVENTS()->set_event_personal_data_by_id($rec_mess['source_pkey'],array('status'=>3,'close_data'=>0),'Сотрудник уведомлен') ; break ;
              case 3:  EVENTS()->set_event_personal_data_by_id($rec_mess['source_pkey'],array('status'=>4,'close_data'=>0),'Сдача просрочена') ; break ;
              case 4:  EVENTS()->set_event_personal_data_by_id($rec_mess['source_pkey'],array('status'=>5,'close_data'=>time()),'Документ сдан') ; break ;
           }
        }
        //$GLOBALS['debug_db']=0 ;
        //$text=ob_get_clean() ;
        //LOGS()->reg_log('on_message_change',$text,array('data'=>$rec_mess)) ;
      }

   // нет необходимости, так как event_pass_status автоматисески изменятся при измении статусов связанных сообщений
   // а в самом event_pass не хранятся данные по срокам сдачи документа - они  есть только в связанном сообщении
   function update_personal_event_status()
   {   //$event_ids=execSQL_line('select pkey from obj_site_events_schedule where clss=222 and ext="events_docs/i_event_docs"') ;
       //if ($event_ids) execSQL_update('update obj_site_events_pass set status=4 where event_id in ('.implode(',',$event_ids).') and status in (1,2) and close_data<'.time(),2) ;
   }


}

?>
