Exemplo n.º 1
0
function calc_controlled_risk($control_id, $efectividad)
{
    global $id;
    $id = $control_id;
    global $eval;
    $eval = $efectividad;
    DB::transaction(function () {
        //primero que todo guardamos evaluación y obtenemos id de la misma
        $evaluation = \Ermtool\Evaluation::create(['name' => 'Riesgos controlados', 'type' => 2, 'consolidation' => 1]);
        //ahora obtenemos todos los riesgos a los que este control está afectando
        //primero probaremos si el control es de proceso
        $risks = DB::table('control_risk_subprocess')->join('risk_subprocess', 'risk_subprocess.id', '=', 'control_risk_subprocess.risk_subprocess_id')->join('risks', 'risks.id', '=', 'risk_subprocess.risk_id')->where('control_risk_subprocess.control_id', '=', $GLOBALS['id'])->select('risk_subprocess.id')->get();
        $type = 0;
        //identifica que es un riesgo de proceso
        if (empty($risks)) {
            $risks = DB::table('control_objective_risk')->join('objective_risk', 'objective_risk.id', '=', 'control_objective_risk.objective_risk_id')->join('risks', 'risks.id', '=', 'objective_risk.risk_id')->where('control_objective_risk.control_id', '=', $GLOBALS['id'])->select('objective_risk.id')->get();
            $type = 1;
            //identifica que es un riesgo de negocio
            if (empty($risks)) {
                return 1;
            }
        }
        foreach ($risks as $risk) {
            if ($type == 0) {
                //vemos si el riesgo tiene evaluacion de riesgo inherente; si es así continuamos, de lo contrario la función termina
                //primero obtenemos la última fecha de evaluación consolidada para este riesgo
                $max_fecha = DB::table('evaluation_risk')->join('evaluations', 'evaluations.id', '=', 'evaluation_risk.evaluation_id')->where('evaluations.type', '=', 1)->where('risk_subprocess_id', '=', $risk->id)->max('evaluations.updated_at');
            } else {
                if ($type == 1) {
                    $max_fecha = DB::table('evaluation_risk')->join('evaluations', 'evaluations.id', '=', 'evaluation_risk.evaluation_id')->where('evaluations.type', '=', 1)->where('objective_risk_id', '=', $risk->id)->max('evaluations.updated_at');
                }
            }
            if ($max_fecha) {
                if ($type == 0) {
                    //obtenemos evaluación inherente
                    $evals = DB::table('evaluation_risk')->join('evaluations', 'evaluations.id', '=', 'evaluation_risk.evaluation_id')->where('evaluation_risk.risk_subprocess_id', '=', $risk->id)->where('evaluations.updated_at', '=', $max_fecha)->select('evaluation_risk.avg_probability', 'evaluation_risk.avg_impact')->first();
                } else {
                    if ($type == 1) {
                        $evals = DB::table('evaluation_risk')->join('evaluations', 'evaluations.id', '=', 'evaluation_risk.evaluation_id')->where('evaluation_risk.objective_risk_id', '=', $risk->id)->where('evaluations.updated_at', '=', $max_fecha)->select('evaluation_risk.avg_probability', 'evaluation_risk.avg_impact')->first();
                    }
                }
                if (!empty($evals)) {
                    //debemos buscar en la tabla controlled_risk_criteria el valor del riesgo controlado según el resultado de efectividad
                    //OBS: Por ahora, el impacto se mantendrá igual en caso de que la evaluación sea efectiva o negativa, por lo que solo veremos probabilidad
                    $val = DB::table('controlled_risk_criteria')->where('eval_in_risk', '=', (int) $evals->avg_probability)->where('control_evaluation', '=', $GLOBALS['eval'])->where('dim_eval', '=', 1)->select('eval_ctrl_risk')->first();
                    if ($type == 0) {
                        //agregamos a evaluation_risk
                        $id = DB::table('evaluation_risk')->insertGetId(['evaluation_id' => $evaluation->id, 'risk_subprocess_id' => $risk->id, 'avg_probability' => $val->eval_ctrl_risk, 'avg_impact' => $evals->avg_impact]);
                    } else {
                        if ($type == 1) {
                            $id = DB::table('evaluation_risk')->insertGetId(['evaluation_id' => $evaluation->id, 'objective_risk_id' => $risk->id, 'avg_probability' => $val->eval_ctrl_risk, 'avg_impact' => $evals->avg_impact]);
                        }
                    }
                } else {
                    return 1;
                }
            } else {
                return 1;
            }
        }
        return 0;
        //fin correcto
    });
}
Exemplo n.º 2
0
 public function verRespuestas($eval_id, $rut)
 {
     if (Auth::guest()) {
         return view('login');
     } else {
         $encuesta = \Ermtool\Evaluation::find($eval_id)->value('name');
         $user = DB::table('stakeholders')->where('id', $rut)->select('name', 'surnames')->first();
         $res = array();
         $res = $this->getEvalRisks($eval_id, $rut);
         if (Session::get('languaje') == 'en') {
             $tipos_impacto = ['Despicable', 'Less', 'Moderate', 'Severe', 'Catastrophic'];
             $tipos_proba = ['Very improbable', 'Unlikely', 'Possible', 'Likely', 'Very likely'];
             return view('en.evaluacion.respuestas', ['riesgos' => $res['riesgos'], 'user_answers' => $res['user_answers'], 'eval_id' => $eval_id, 'rut' => $rut, 'encuesta' => $encuesta, 'user' => $user, 'tipos_impacto' => $tipos_impacto, 'tipos_proba' => $tipos_proba]);
         } else {
             $tipos_impacto = ['Despreciable', 'Menor', 'Moderado', 'Severo', 'Catastrófico'];
             $tipos_proba = ['Muy poco probable', 'Poco probable', 'Posible', 'Probable', 'Muy probable'];
             return view('evaluacion.respuestas', ['riesgos' => $res['riesgos'], 'user_answers' => $res['user_answers'], 'eval_id' => $eval_id, 'rut' => $rut, 'encuesta' => $encuesta, 'user' => $user, 'tipos_impacto' => $tipos_impacto, 'tipos_proba' => $tipos_proba]);
         }
     }
 }