<?
class esmo_rules_kt
{
 // назначаем критерии МО для сотрудника
   function get_mo_rules_to_personal(&$rec,$options=array())
   { // проверяем все правила, ставим отдельные балл за каждое НЕ соответствие и каждое соотвествие
     // суммируем баллыы
     //$options['debug']=1 ;
     //print_2x_arr(_IL('IL_dg')->recs) ;
     $result=0 ;   $rules_ball=array() ; $rec_dg=array() ;
     ob_start() ;
     if (_sizeof(_IL('IL_dg')->recs)) foreach(_IL('IL_dg')->recs as $rec_rule) if ($rec_rule['enabled'])
     { $ball_m=0 ; $ball_p=0 ; $comment=array()  ;
       if ($options['debug']) echo '<strong>Проверяем правило</strong> '._IL('IL_dg')->recs[$rec_rule['id']]['obj_name'].' ['.$rec_rule['id'].']<br>'  ;
       if ($rec_rule['group_id'])
       { $rec_group=_IL('IL_groups')->recs[$rec_rule['group_id']] ;
         // проверяем вхождение человека в группу
         //if (isset($rec['_groups_personal'][$rec_rule['group_id']]))  { $ball_p=$ball_p+2 ;  $comment[]='+ Сотрудник в группе "'.$rec_group['obj_name'].'"'; }
         //else                                                         { $ball_m=$ball_m+2 ;  $comment[]='- Сотрудник не в группе "'.$rec_group['obj_name'].'"' ; }
         if (isset($rec['_groups_personal'][$rec_rule['group_id']]))      { $ball_p=$ball_p+2 ;  $comment[]='+ Сотрудник в группе "'.$rec_group['obj_name'].'"'; }
         else                                                { $ball_m=$ball_m+2 ;  $comment[]='- Сотрудник не в группе "'.$rec_group['obj_name'].'"' ; }

       }

       //if (!$rec_rule['age_min']) $rec_rule['age_min']=0 ;
       //if (!$rec_rule['age_max']) $rec_rule['age_max']=1000 ;
       //if (!$rec['age'] and $rec['dr']) $rec['age']=ENGINE()->get_age_by_dr($rec['dr']) ;

       if ($rec_rule['age_min'] and !$rec_rule['age_max'] and $rec['age']<$rec_rule['age_min'])  { $ball_m++ ;  $comment[]='- Возраст от '.$rec_rule['age_min'] ; }
       if ($rec_rule['age_min'] and !$rec_rule['age_max'] and $rec['age']>=$rec_rule['age_min'])  { $ball_p++ ;  $comment[]='+ Возраст от '.$rec_rule['age_min'] ; }
       if (!$rec_rule['age_min'] and $rec_rule['age_max'] and $rec['age']>$rec_rule['age_max'])  { $ball_m++ ;  $comment[]='- Возраст до '.$rec_rule['age_max'] ; }
       if (!$rec_rule['age_min'] and $rec_rule['age_max'] and $rec['age']<=$rec_rule['age_max'])  { $ball_p++ ;  $comment[]='+Возраст до '.$rec_rule['age_max'] ; }
       if ($rec_rule['age_min'] and $rec_rule['age_max'] and ($rec['age']<$rec_rule['age_min'] or $rec['age']>$rec_rule['age_max']))  { $ball_m++ ;  $comment[]='- Возраст от '.$rec_rule['age_min'].' до '.$rec_rule['age_max'] ; }
       if ($rec_rule['age_min'] and $rec_rule['age_max'] and ($rec['age']>=$rec_rule['age_min'] and $rec['age']<=$rec_rule['age_max']))  { $ball_p++ ;  $comment[]='+ Возраст от '.$rec_rule['age_min'].' до '.$rec_rule['age_max'] ; }
       //if (!$rec_rule['age_min'] and !$rec_rule['age_max'])  { $ball_m++ ;  $comment[]='Любой возраст' ;  }
       //if (!$rec_rule['working'])  { $ball_m++ ;  $comment[]='Любая должность' ;  }
       //if ($rec_rule['working'] and $rec['working']!=$rec_rule['working']) { $ball_m++ ;  $comment[]='- Должность ' ; }
       //if ($rec['working']==$rec_rule['working']) { $ball_p++ ;  $comment[]='+ Должность ' ; }
       //if ($rec_rule['time_from'] and !$rec_rule['time_to'] and $rec_rule['time_from']>time())     { $ball_m++ ;  $comment[]='- Время от ' ; }
       //if ($rec_rule['time_from'] and !$rec_rule['time_to'] and $rec_rule['time_from']<=time())     { $ball_p++ ;  $comment[]='+ Время от ' ; }
       //if (!$rec_rule['time_from'] and $rec_rule['time_to']>0 and time()>$rec_rule['time_to'])       { $ball_m++ ;  $comment[]='- Время до '.date('d.m.Y H:i:s',$rec_rule['time_to']) ; damp_array($rec_rule,1,-1) ; }
       //if (!$rec_rule['time_from'] and $rec_rule['time_to']>0 and time()<=$rec_rule['time_to'])       { $ball_p++ ;  $comment[]='+ Время до '.date('d.m.Y H:i:s',$rec_rule['time_to']) ; damp_array($rec_rule,1,-1) ; }
       //if ($rec_rule['time_from'] and $rec_rule['time_to'] and ($rec_rule['time_from']>time() or time()>$rec_rule['time_to'])) { $ball_m++ ; $comment[]= '- Интервал времени' ; }
       //if ($rec_rule['time_from'] and $rec_rule['time_to'] and ($rec_rule['time_from']<=time() and time()<=$rec_rule['time_to'])) { $ball_p++ ; $comment[]= '+ Интервал времени' ; }
       if (!$ball_p and !$ball_m)  $ball_p=1 ;
       $rules_ball[$rec_rule['id']]=$ball_p-$ball_m ;
       if ($options['debug']) damp_array($comment,1,-1) ;
     }
     // теперь из выбранных записей необходимо оставить ту, что наиболле полно описывает сотрудника
     // будем ставить балл за каждое соотвествие
     if ($options['debug']) { echo '<strong>Начисленные баллы</strong>'  ; damp_array($rules_ball,1,-1) ;  }

     $max_ball=-100 ; $rule_id=0 ;
     if (_sizeof($rules_ball)) foreach($rules_ball as $id=>$ball_p) if ($ball_p>$max_ball) { $rule_id=$id ; $max_ball=$ball_p ; }

     // вписываем в запись по первсона критерии на основании которых были назначены проверки
     $rec['_rules_main']['LS_check_sd']=$GLOBALS['LS_check_sd'] ;
     $rec['_rules_main']['LS_check_p']=$GLOBALS['LS_check_p'] ;
     $rec['_rules_main']['LS_check_t']=$GLOBALS['LS_check_t'] ;
     $rec['_rules_main']['LS_check_a']=$GLOBALS['LS_check_a'] ;
     $rec['_rules_main']['LS_check_n']=$GLOBALS['LS_check_n'] ;
     $rec['_rules_main']['LS_check_v']=$GLOBALS['LS_check_v'] ;

     $rec['_rules_krit']=$rec_dg ;
     //ob_start() ;
     //echo 'IL_dg:' ; damp_array(_IL('IL_dg')->recs[$rule_id],1,-1) ;

     if ($options['debug']) { echo '<strong>Выбранное правило:</strong> '._IL('IL_dg')->recs[$rule_id]['obj_name'].' ['.$rule_id.']<br>' ; /* $demo[]=_IL('IL_dg')->recs[$rule_id] ; print_2x_arr($demo) ; ; */}
     if ($rule_id)
     {  $rec['__check']['rule']=$rule_id ;
        $rec_dg=_IL('IL_dg')->recs[$rule_id]  ; // запись из базы по правилам для дисп.группы
        $dg_sessing=unserialize($rec_dg['settings']) ;
        //ob_start() ;
       //echo '$rec_dg:'  ; damp_array($rec_dg,1,-1) ;


        //damp_array($rec_dg,1,-1) ;
        //damp_array($rec_dg2,1,-1) ;
        //$text=ob_get_clean() ;
        //LOGS()->reg_log('compare_rules',$text) ;
        unset($rec_dg['clss'],$rec_dg['enabled'],$rec_dg['indx'],$rec_dg['parent'],$rec_dg['c_data'],$rec_dg['r_data'],$rec_dg['temp'],$rec_dg['arr_name'],$rec_dg['_enabled'],$rec_dg['url_name'],$rec_dg['hidden'],$rec_dg['code'],$rec_dg['template_name'],$rec_dg['_reffer'],$rec_dg['_parent_reffer']) ;
        unset($rec_dg['tonometer'],$rec_dg['thermometer'],$rec_dg['alcotester'],$rec_dg['pupilometer'],$rec_dg['video']) ;
        $rec['_rules_krit']=$rec_dg ;
        $rec['_rules']=array() ;
        $rec['_rules']['id']=$rule_id ;
        $rec['_rules']['name']=$rec_dg['obj_name'] ;
        if ($rec_dg['s']) { $rec['_rules']['s_min']=(int)$rec_dg['s_min'] ; $rec['_rules']['s_max']=(int)$rec_dg['s_max'] ; $rec['_rules']['s']=1 ; }
        if ($rec_dg['d']) { $rec['_rules']['d_min']=(int)$rec_dg['d_min'] ; $rec['_rules']['d_max']=(int)$rec_dg['d_max'] ; $rec['_rules']['d']=1 ;}
        if ($rec_dg['p']) { $rec['_rules']['p_min']=(int)$rec_dg['p_min'] ; $rec['_rules']['p_max']=(int)$rec_dg['p_max'] ; $rec['_rules']['p']=1 ;}
        if ($rec_dg['t']) { $rec['_rules']['t_min']=(float)$rec_dg['t_min'] ; $rec['_rules']['t_max']=(float)$rec_dg['t_max'] ; $rec['_rules']['t']=1 ;}
        if ($rec_dg['a'])   $rec['_rules']['a']=1 ;
        if ($rec_dg['n'])   $rec['_rules']['n']=1 ;
        if ($rec_dg['v'])   $rec['_rules']['v']=$dg_sessing['v'] ;

         // коррекция выбранного правила в соответствии с группой по болезни
       if ($options['debug']) { echo '<strong>Коррекция показателей правила в соответствии с группой по болезни:</strong><br>' ; }
       if (_sizeof($rec['_groups_medic']))
       { foreach($rec['_groups_medic'] as $group_medic_id=>$group_medic_name)
         { if ($options['debug']) { echo $group_medic_name.'<br>' ; }
           $rec_rule_medic=_IL('IL_group_medic')->recs[$group_medic_id] ;
           if ($rec_rule_medic['s'] and $rec_rule_medic['s_min']) { $rec['_rules']['s_min']=$rec_rule_medic['s_min'] ;  if ($options['debug']) echo 's_min => '.$rec_rule_medic['s_min'].'<br>' ;}
           if ($rec_rule_medic['s'] and $rec_rule_medic['s_max']) { $rec['_rules']['s_max']=$rec_rule_medic['s_max'] ;  if ($options['debug']) echo 's_max => '.$rec_rule_medic['s_max'].'<br>' ;}
           if ($rec_rule_medic['d'] and $rec_rule_medic['d_min']) { $rec['_rules']['d_min']=$rec_rule_medic['d_min'] ;  if ($options['debug']) echo 'd_min => '.$rec_rule_medic['d_min'].'<br>' ;}
           if ($rec_rule_medic['d'] and $rec_rule_medic['d_max']) { $rec['_rules']['d_max']=$rec_rule_medic['d_max'] ;  if ($options['debug']) echo 'd_max => '.$rec_rule_medic['d_max'].'<br>' ;}
           if ($rec_rule_medic['p'] and $rec_rule_medic['p_min']) { $rec['_rules']['p_min']=$rec_rule_medic['p_min'] ;  if ($options['debug']) echo 'p_min => '.$rec_rule_medic['p_min'].'<br>' ;}
           if ($rec_rule_medic['p'] and $rec_rule_medic['p_max']) { $rec['_rules']['p_max']=$rec_rule_medic['p_max'] ;  if ($options['debug']) echo 'p_max => '.$rec_rule_medic['p_max'].'<br>' ;}
         }
       } else if ($options['debug']) echo 'не заданы<br>' ;

     }
     else
     {  $rec['__check']['rule']=0 ;
        $rec['__check_comment'][]='Не удалось определить критерии для оценки сотрудника' ;
        $rec['__reason']='nonRule' ;
        $rec['__go_doctor']=1 ;
        $rec['_rules']=array() ;
     }
     //echo 'rules:'  ; damp_array($rec['_rules'],1,-1) ;

     //$text=ob_get_clean() ;
     //LOGS()->reg_log('damp_IL_dg',$text) ;

     // очищаем от нулей нулевые значеня
     if (!$rec['s_min']) $rec['s_min']='' ;
     if (!$rec['s_max']) $rec['s_max']='' ;
     if (!$rec['d_min']) $rec['d_min']='' ;
     if (!$rec['d_max']) $rec['d_max']='' ;
     if (!$rec['p_min']) $rec['p_min']='' ;
     if (!$rec['p_max']) $rec['p_max']='' ;
     if (!$rec['t_min'])  $rec['t_min']='' ;
     if (!$rec['t_max'])  $rec['t_max']='' ;

     // вписываем в правила назначение сотруднику критерии
     if ($rec['s_min'])         { $rec['_rules']['s_min']=$rec['s_min'] ; $rec['_rules']['s']=1 ; }
     if ($rec['s_max'])         { $rec['_rules']['s_max']=$rec['s_max'] ; $rec['_rules']['s']=1 ; }
     if ($rec['d_min'])         { $rec['_rules']['d_min']=$rec['d_min'] ; $rec['_rules']['d']=1 ; }
     if ($rec['d_max'])         { $rec['_rules']['d_max']=$rec['d_max'] ; $rec['_rules']['d']=1 ; }
     if ($rec['p_min'])         { $rec['_rules']['p_min']=$rec['p_min'] ; $rec['_rules']['p']=1 ; }
     if ($rec['p_max'])         { $rec['_rules']['p_max']=$rec['p_max'] ; $rec['_rules']['p']=1 ; }
     if ($rec['t_min']>0)         { $rec['_rules']['t_min']=$rec['t_min'] ; $rec['_rules']['t']=1 ; }
     if ($rec['t_max']>0)         { $rec['_rules']['t_max']=$rec['t_max'] ; $rec['_rules']['t']=1 ; }
     if ($rec['a']==1)          $rec['_rules']['a']=0 ;
     if ($rec['a']==2)          $rec['_rules']['a']=1 ;
     if ($rec['n']==1)          $rec['_rules']['n']=0 ;
     if ($rec['n']==2)          $rec['_rules']['n']=1 ;

     // удялем измерения, которые не проводяться в системе
     if (!$GLOBALS['LS_check_sd']) unset($rec['_rules']['s'],$rec['_rules']['s_min'],$rec['_rules']['s_max'],$rec['_rules']['d'],$rec['_rules']['d_min'],$rec['_rules']['d_max']) ;
     if (!$GLOBALS['LS_check_p'])  unset($rec['_rules']['p'],$rec['_rules']['p_min'],$rec['_rules']['p_max']) ;
     if (!$GLOBALS['LS_check_t'])  unset($rec['_rules']['t'],$rec['_rules']['t_min'],$rec['_rules']['t_max']) ;
     if (!$GLOBALS['LS_check_a'])  unset($rec['_rules']['a']) ;
     if (!$GLOBALS['LS_check_n'])  unset($rec['_rules']['n']) ;
     if (!$GLOBALS['LS_check_v'])  unset($rec['_rules']['v']) ;

     $text=ob_get_flush()  ;
       $rec['_rules']['debug']=$text ;
   }




}

?>
