/** * Show the form for editing the specified resource. * * @param IndicadorValor $indicador * @return \Illuminate\Http\Response * @internal param int $id */ public function edit(IndicadorValor $indicador) { $indicadores = Indicador::all()->lists('nome', 'id'); $fontes = Fonte::all()->lists('nome', 'id'); $referencias = Referencia::all()->lists('tabela', 'id'); return view('indicador-valor.edit', compact('indicadores', 'fontes', 'referencias', 'indicador')); }
/** * Run the database seeds. * * @return void */ public function run() { DB::table('indicadores')->delete(); $indicadores = array(['indicador' => '1002000001', 'nombre' => 'Poblacion Total', 'created_at' => \Carbon\Carbon::now()], ['indicador' => '1001000001', 'nombre' => 'Superficie Continental ', 'created_at' => \Carbon\Carbon::now()]); foreach ($indicadores as $indicador) { \App\Indicador::create($indicador); } }
public function get_indicador() { $indicador = Indicador::where('nome', '=', 'ISO14000')->first(); echo $indicador->id; }
function calcularIndicadores($fecha) { //----------------------------------------------------- // CALCULO DE INDICADORES DEL CUADRO DE MANDO // los indicadores se deben calcular según la formula // creada en el cuadro de mando, adicionalmente, los vamos a // calcular con este proceso diariamente, lo que quiere // decir que se insertarán en la tabla con el valor acumulado // hasta la fecha y solo se insertara un nuevo valor despues // de que haya pasado su fecha de corte //----------------------------------------------------- // FRECUENCIA DE MEDICION // cada indicador tiene asociada una frecuencia, a pesar // de que se calcula cada dia, vamos a tener en cuanta la frecuencia // para saber hasta que dia calculamos el indicador con el acumulado // y apenas llegue a su corte, el siguiente dia creara un nuevo registro // para empezar a acumular de nuevo // TIPOS DE FRECUENCIAS // Semanal. Cortar los dias domingo // Quincenal. Corta cada 2 Domingos // Mensual. corta el ultimo dia del mes // los demas cortan cada X meses el ultimo dia del mes $fecha = strtotime($fecha); // guardamos la fecha de hoy para los indicadores Diarios $dia = date("Y-m-d", $fecha); // consultamos la fecha del proximo domingo //la semana tiene 7 dias, si tomamos 7 - dia actual tendremos los dias que faltan para domingo // luego sumamos a la fecha de hoy esos dias $dias = 7 - date("w", $fecha); $semanaFin = date('Y-m-d', strtotime("+ {$dias} day", $fecha)); $semanaIni = date('Y-m-d', strtotime("- 6 day", strtotime($semanaFin))); // consultamos la fecha de la proxima Quincena // por lo tanto asumimos que sera los dias 15 o el ultimo dia del mes // miramos cual es el mas cerca y tomamos ese // verificamos si la fecha actual es menor a 15, entonces tomamos 15, sino buscamos ultimo dia del mes $quincenaFin = date('Y-m', $fecha) . '-' . (date('d', $fecha) <= 15 ? '15' : date("t", strtotime(date("Y-m", $fecha)))); $quincenaIni = date('Y-m', strtotime($quincenaFin)) . '-' . (date('d', strtotime($quincenaFin)) <= 15 ? '01' : date("t", strtotime(date("Y-m", strtotime($quincenaFin))))); // Consultamos la fecha del ultimo dia del mes $mesFin = date('Y-m', $fecha) . '-' . date("t", strtotime(date("Y-m", $fecha))); $mesIni = date('Y-m', strtotime($mesFin)) . '-01'; // Para el bimestreFin verificamos si el mes actual es PAR, sino entonces le sumamos 1 al mes para obtenerlo if (intval(date('m', $fecha)) % 2 == 0) { $bimestreFin = date('Y-m', $fecha) . '-' . date("t", strtotime(date("Y-m", $fecha))); } else { $proximoMes = date('Y-m', strtotime("+ 1 month", $fecha)); $bimestreFin = date('Y-m', $fecha) . '-' . date("t", strtotime($proximoMes)); } $bimestreIni = date('Y-m', strtotime("- 2 months", strtotime($bimestreFin))) . '-01'; // Para el trimestreFin verificamos si el mes actual es multiplo de 3, sino entonces debemos llegar hasta el multiplo de 3 if (intval(date('m', $fecha)) % 3 == 0) { $trimestreFin = date('Y-m', $fecha) . '-' . date("t", strtotime(date("Y-m", $fecha))); } else { $numeroMes = date('m', $fecha); while (intval($numeroMes) % 3 != 0) { $numeroMes++; } $proximoMes = date('Y-' . $numeroMes, $fecha); $trimestreFin = date('Y-', $fecha) . str_pad($numeroMes, 2, '0', STR_PAD_LEFT) . '-' . date("t", strtotime($proximoMes)); } $trimestreIni = date('Y-m', strtotime("- 3 months", strtotime($trimestreFin))) . '-01'; // consultamos la fecha del proximo semestreFin // por lo tanto asumimos que sera en junio o Diciembre, miramos cual es el mas cerca y tomamos ese // verificamos si la fecha actual es menor a JUNIO, entonces tomamos ese, sino Tomamos Diciembre $semestreFin = date('Y-', $fecha) . (date('m', $fecha) <= 6 ? str_pad('6', 2, '0', STR_PAD_LEFT) . '-30' : str_pad('12', 2, '0', STR_PAD_LEFT) . '-31'); $semestreIni = date('Y-m', strtotime("- 6 months", strtotime($semestreFin))) . '-01'; // por ultimo la fecha del ultimo dia del año, que siempre sera fija $anioFin = date('Y-12-31', $fecha); $anioIni = date('Y-01-01', $fecha); // echo $dia.'<br>'; // echo $semanaIni.' - '.$semanaFin.'<br>'; // echo $quincenaIni.' - '.$quincenaFin.'<br>'; // echo $mesIni.' - '.$mesFin.'<br>'; // echo $bimestreIni.' - '.$bimestreFin.'<br>'; // echo $trimestreIni.' - '.$trimestreFin.'<br>'; // echo $semestreIni.' - '.$semestreFin.'<br>'; // echo $anioIni.' - '.$anioFin.'<br>'; $cuadroMandoObjeto = DB::table('cuadromando as CM')->leftJoin('frecuenciamedicion as FM', 'CM.FrecuenciaMedicion_idFrecuenciaMedicion', '=', 'FM.idFrecuenciaMedicion')->select(DB::raw('idCuadroMando, indicadorCuadroMando, formulaCuadroMando, valorFrecuenciaMedicion, unidadFrecuenciaMedicion, operadorMetaCuadroMando, valorMetaCuadroMando, tipoMetaCuadroMando, Proceso_idProceso'))->where('CM.Compania_idCompania', '=', \Session::get('idCompania'))->orderby('idCuadroMando')->get(); // por facilidad de manejo convierto el stdclass a tipo array con un cast (array) $CuadroMando = array(); foreach ($cuadroMandoObjeto as $key => $value) { $CuadroMando[] = (array) $value; } // recorremos cada indicador para calcularlo y almacenar su resultado en la tabla de indicadores for ($i = 0; $i < count($CuadroMando); $i++) { // echo $CuadroMando[$i]["idCuadroMando"].'<br>'; // verificamos la periodicidad del indicador para tomar la fecha de corte // este dato depende del valor y la unidad de frecuencia switch ($CuadroMando[$i]["unidadFrecuenciaMedicion"]) { case 'Dias': $fechaIni = $dia; $fechaCorte = $dia; break; case 'Semanas': switch ($CuadroMando[$i]["valorFrecuenciaMedicion"]) { case 1: $fechaIni = $semanaIni; $fechaCorte = $semanaFin; break; case 2: $fechaIni = $quincenaIni; $fechaCorte = $quincenaFin; break; default: $fechaIni = $semanaIni; $fechaCorte = $semanaFin; break; } break; case 'Meses': switch ($CuadroMando[$i]["valorFrecuenciaMedicion"]) { case 1: $fechaIni = $mesIni; $fechaCorte = $mesFin; break; case 2: $fechaIni = $bimestreIni; $fechaCorte = $bimestreFin; break; case 3: $fechaIni = $trimestreIni; $fechaCorte = $trimestreFin; break; case 6: $fechaIni = $semestreIni; $fechaCorte = $semestreFin; break; default: $fechaIni = $mesIni; $fechaCorte = $mesFin; break; } break; case 'Años': $fechaIni = $anioIni; $fechaCorte = $anioFin; break; default: $fechaIni = $dia; $fechaCorte = $dia; break; } $resultado = calcularFormula($CuadroMando[$i]["idCuadroMando"], $fechaIni, $fechaCorte); // Evaluamos si el resultado cumple con la meta del indicador siempre y cuando ya sea la fecha de su corte // si no cumple con la meta, insertamos un registro en el ACPM (Accion Correctiva) // Armamos una comparacion concatenada para luego ejecutarla con el evalecho $resp = ''; eval('$resp = (' . $resultado . ' ' . $CuadroMando[$i]["operadorMetaCuadroMando"] . ' ' . $CuadroMando[$i]["valorMetaCuadroMando"] . ' ? "Si" : "No");'); // echo $resp; if ($resp == 'No') { $reporteACPM = \App\ReporteACPM::All()->last(); \App\ReporteACPMDetalle::create(['ReporteACPM_idReporteACPM' => $reporteACPM->idReporteACPM, 'ordenReporteACPMDetalle' => 0, 'fechaReporteACPMDetalle' => date("Y-m-d"), 'Proceso_idProceso' => $CuadroMando[$i]['Proceso_idProceso'], 'Modulo_idModulo' => 1, 'tipoReporteACPMDetalle' => 'Correctiva', 'descripcionReporteACPMDetalle' => 'El indicador ' . $CuadroMando[$i]['indicadorCuadroMando'] . ' no cumple la meta (Valor ' . $resultado . ' Meta ' . $CuadroMando[$i]["operadorMetaCuadroMando"] . ' ' . $CuadroMando[$i]["valorMetaCuadroMando"] . ' ' . $CuadroMando[$i]["tipoMetaCuadroMando"] . ')', 'analisisReporteACPMDetalle' => '', 'correccionReporteACPMDetalle' => '', 'Tercero_idResponsableCorrecion' => NULL, 'planAccionReporteACPMDetalle' => '', 'Tercero_idResponsablePlanAccion' => NULL, 'fechaEstimadaCierreReporteACPMDetalle' => '0000-00-00', 'estadoActualReporteACPMDetalle' => '', 'fechaCierreReporteACPMDetalle' => '0000-00-00', 'eficazReporteACPMDetalle' => 0]); } // verificamos si el resultado hay que insertarlo o actualizarlo en la tabla de indicadores // esto depende de su periodicidad, por lo tanto la verificamos y tomamos la fecha del corte // siya existe en la tabla el idCuadroMando con la fecha de corte, y esta es igual tambien a // la fecha de calculao, entonces debemos Insertar uno nuevo, sino actulaizamos el existente $indice = array('CuadroMando_idCuadroMando' => $CuadroMando[$i]["idCuadroMando"], 'fechaCorteIndicador' => $fechaCorte); $data = array('fechaCalculoIndicador' => date("Y-m-d", $fecha), 'valorIndicador' => $resultado); $indicador = \App\Indicador::updateOrCreate($indice, $data); } return; }
/** * Remove the specified resource from storage. * * @param Indicador $indicador * @return \Illuminate\Http\Response * @throws \Exception * @internal param int $id */ public function destroy(Indicador $indicador) { $indicador->delete(); session()->flash('flash_message', 'Indicador Excluído!'); return redirect('indicador'); }
/** * Remove the specified resource from storage. * * @param int $id * @return Response */ public function destroy($id) { try { $indicador = Indicador::find($id); $indicador->delete(); return JsonResponse::create(array('message' => "Indicador Eliminado Correctamente", "request" => json_encode($id)), 200); } catch (Exception $ex) { return JsonResponse::create(array('message' => "No se pudo Eliminar la marca", "exception" => $ex->getMessage(), "request" => json_encode($id)), 401); } }