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