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