コード例 #1
0
ファイル: ControlesController.php プロジェクト: pipehs/erm
 public function calcControlledRisk($control_id)
 {
     //primero que todo, obtenemos todos los riesgos a los que apunta este control (vemos si apunta a riesgos de proceso o de entidad)
     $risks = \Ermtool\Risk::getRiskSubprocessFromControl($control_id);
     $kind = 1;
     //para facilitar la manipulación posterior del riesgo
     if (empty($risks)) {
         $kind = 2;
         //para facilitar la manipulación posterior del riesgo
         $risks = \Ermtool\Risk::getObjectiveRiskFromControl($control_id);
     }
     //ahora recorremos cada uno de esos riesgos, y obtenemos los controles que tiene asociado y cuáles de estos controles posee una evaluación en la tabla control_eval_risk_temp
     foreach ($risks as $risk) {
         //obtenemos todos los controles de este riesgo
         if ($kind == 1) {
             $controls = \Ermtool\Control::getControlsFromRiskSubprocess($risk->id);
         } else {
             $controls = \Ermtool\Control::getControlsFromObjectiveRisk($risk->id);
         }
         //ahora para cada uno de estos controles, verificamos su ÚLTIMO resultado en la tabla control_eval_risk_temp
         $efectivos = 0;
         $inefectivos = 0;
         foreach ($controls as $control) {
             //obtenemos ÚLTIMA fecha de creación
             $max_date = DB::table('control_eval_risk_temp')->where('control_id', '=', $control->id)->max('created_at');
             //obtenemos resultado del control
             $eval = DB::table('control_eval_risk_temp')->where('control_id', '=', $control->id)->where('created_at', '=', $max_date)->select('result')->first();
             if (isset($eval) && $eval != NULL) {
                 if ($eval->result == 1) {
                     $efectivos += 1;
                 } else {
                     $inefectivos += 1;
                 }
             }
         }
         //ahora hacemos una división de todos los efectivos con la suma de efectivos más inefectivos, y si esta división es mayor o igual a 0.5, entonces el riesgo es guardado como efectivo, sino será guardado como inefectivo
         $res = $efectivos / ($efectivos + $inefectivos);
         if ($res >= 0.5) {
             //el riesgo es efectivo
             if ($kind == 1) {
                 \Ermtool\Control_evaluation::insertControlledRisk($risk->id, 1, 1);
             } else {
                 \Ermtool\Control_evaluation::insertControlledRisk($risk->id, 1, 2);
             }
         } else {
             if ($kind == 1) {
                 \Ermtool\Control_evaluation::insertControlledRisk($risk->id, 2, 1);
             } else {
                 \Ermtool\Control_evaluation::insertControlledRisk($risk->id, 2, 2);
             }
         }
     }
     return 0;
 }