public function calcControlValue($id) { //obtenemos la última evaluación de cada una de las pruebas (independientes de si están abiertas o cerradas) //primero obtenemos la fecha $last_diseno_updated = DB::table('control_evaluation')->where('control_id', '=', $id)->where('kind', '=', 0)->max('updated_at'); if (isset($last_diseno_updated) && !empty($last_diseno_updated)) { //ahora obtenemos la evaluación en esa fecha $last_diseno = DB::table('control_evaluation')->where('control_id', '=', $id)->where('kind', '=', 0)->where('updated_at', '=', $last_diseno_updated)->select('results', 'status')->first(); } else { $last_diseno = NULL; } //hacemos lo mismo con cada una de las pruebas $last_efectividad_updated = DB::table('control_evaluation')->where('control_id', '=', $id)->where('kind', '=', 1)->max('updated_at'); if (isset($last_efectividad_updated) && !empty($last_efectividad_updated)) { //ahora obtenemos la evaluación en esa fecha $last_efectividad = DB::table('control_evaluation')->where('control_id', '=', $id)->where('kind', '=', 1)->where('updated_at', '=', $last_efectividad_updated)->select('results', 'status')->first(); } else { $last_efectividad = NULL; } $last_sustantiva_updated = DB::table('control_evaluation')->where('control_id', '=', $id)->where('kind', '=', 2)->max('updated_at'); if (isset($last_sustantiva_updated) && !empty($last_sustantiva_updated)) { //ahora obtenemos la evaluación en esa fecha $last_sustantiva = DB::table('control_evaluation')->where('control_id', '=', $id)->where('kind', '=', 2)->where('updated_at', '=', $last_sustantiva_updated)->select('results', 'status')->first(); } else { $last_sustantiva = NULL; } $last_cumplimiento_updated = DB::table('control_evaluation')->where('control_id', '=', $id)->where('kind', '=', 3)->max('updated_at'); if (isset($last_cumplimiento_updated) && !empty($last_cumplimiento_updated)) { //ahora obtenemos la evaluación en esa fecha $last_cumplimiento = DB::table('control_evaluation')->where('control_id', '=', $id)->where('kind', '=', 3)->where('updated_at', '=', $last_diseno_updated)->select('results', 'status')->first(); } else { $last_cumplimiento = NULL; } //Actualización 05-12-16: Se debe ver también la última prueba de auditoría que se encuentre cerrada y que corresponda a dicho control //primero obtenemos la última prueba $max_date = \Ermtool\Audit_test::getMaxDate($id); //ahora obtenemos la prueba $test = \Ermtool\Audit_test::getTestFromDate($max_date, $id); //vemos cada una de las pruebas (que estén cerradas, y sumamos en variable de efectivo en el caso de que lo sean; además guardamos el total de pruebas) $efectivas = 0; $total = 0; if ($last_diseno != NULL && isset($last_diseno->status) && $last_diseno->status == 2) { $total += 1; if ($last_diseno->results == 1) { $efectivas += 1; } } if ($last_efectividad != NULL && isset($last_efectividad->status) && $last_efectividad->status == 2) { $total += 1; if ($last_efectividad->results == 1) { $efectivas += 1; } } if ($last_sustantiva != NULL && isset($last_sustantiva->status) && $last_sustantiva->status == 2) { $total += 1; if ($last_sustantiva->results == 1) { $efectivas += 1; } } if ($last_cumplimiento != NULL && isset($last_cumplimiento->status) && $last_cumplimiento->status == 2) { $total += 1; if ($last_cumplimiento->results == 1) { $efectivas += 1; } } if ($test != NULL) { $total += 1; if ($test->results == 1) { $efectivas += 1; } } //ahora vemos si el total de pruebas realizadas y cerradas es igual a la cantidad de pruebas efectivas if ($total == $efectivas) { //guardamos en control_eval_risk_temp como control efectivo DB::table('control_eval_risk_temp')->insert(['result' => 1, 'control_id' => $id, 'created_at' => date('Y-m-d H:i:s')]); } else { //guardamos como inefectivo DB::table('control_eval_risk_temp')->insert(['result' => 2, 'control_id' => $id, 'created_at' => date('Y-m-d H:i:s')]); } return 0; }