Ejemplo n.º 1
0
function guardarReporteACPM($fechaAccion, $idModulo, $tipoAccion, $descripcionAccion)
{
    $reporteACPM = DB::select("Select MAX(idReporteACPM) as idReporteACPM\n      From reporteacpm \n      where Compania_idCompania = " . \Session::get("idCompania"));
    $reporte = get_object_vars($reporteACPM[0])["idReporteACPM"];
    if ($reporte != "") {
        $indice = array('ReporteACPM_idReporteACPM' => $reporte, 'Modulo_idModulo' => $idModulo, 'tipoReporteACPMDetalle' => $tipoAccion, 'descripcionReporteACPMDetalle' => $descripcionAccion);
        $data = array('ReporteACPM_idReporteACPM' => $reporte, 'ordenReporteACPMDetalle' => 0, 'fechaReporteACPMDetalle' => $fechaAccion, 'Proceso_idProceso' => NULL, 'Modulo_idModulo' => $idModulo, 'tipoReporteACPMDetalle' => $tipoAccion, 'descripcionReporteACPMDetalle' => $descripcionAccion, 'analisisReporteACPMDetalle' => '', 'correccionReporteACPMDetalle' => '', 'Tercero_idResponsableCorrecion' => NULL, 'planAccionReporteACPMDetalle' => '', 'Tercero_idResponsablePlanAccion' => NULL, 'fechaEstimadaCierreReporteACPMDetalle' => '0000-00-00', 'estadoActualReporteACPMDetalle' => '', 'fechaCierreReporteACPMDetalle' => '0000-00-00', 'eficazReporteACPMDetalle' => 0);
    } else {
        DB::statement('INSERT into reporteacpm (idReporteACPM, numeroReporteACPM, fechaElaboracionReporteACPM, descripcionReporteACPM, Compania_idCompania) values (0, 1, "0000-00-00", "Acciones correctivas, preventivas y de mejora", ' . \Session::get("idCompania") . ')');
        $reporteACPM = DB::select("Select MAX(idReporteACPM) as idReporteACPM\n          From reporteacpm \n          where Compania_idCompania = " . \Session::get("idCompania"));
        $reporte = get_object_vars($reporteACPM[0])["idReporteACPM"];
        $indice = array('ReporteACPM_idReporteACPM' => $reporte, 'Modulo_idModulo' => $idModulo, 'tipoReporteACPMDetalle' => $tipoAccion, 'descripcionReporteACPMDetalle' => $descripcionAccion);
        $data = array('ReporteACPM_idReporteACPM' => $reporte, 'ordenReporteACPMDetalle' => 0, 'Proceso_idProceso' => NULL, 'Modulo_idModulo' => $idModulo, 'tipoReporteACPMDetalle' => $tipoAccion, 'descripcionReporteACPMDetalle' => $descripcionAccion, 'analisisReporteACPMDetalle' => '', 'correccionReporteACPMDetalle' => '', 'Tercero_idResponsableCorrecion' => NULL, 'planAccionReporteACPMDetalle' => '', 'Tercero_idResponsablePlanAccion' => NULL, 'fechaEstimadaCierreReporteACPMDetalle' => '0000-00-00', 'estadoActualReporteACPMDetalle' => '', 'fechaCierreReporteACPMDetalle' => '0000-00-00', 'eficazReporteACPMDetalle' => 0);
    }
    $respuesta = \App\ReporteACPMDetalle::updateOrCreate($indice, $data);
}
Ejemplo n.º 2
0
 public function guardarReporteACPM($fechaAccion, $idModulo, $tipoAccion, $descripcionAccion)
 {
     $reporteACPM = \App\ReporteACPM::All()->last();
     \App\ReporteACPMDetalle::create(['ReporteACPM_idReporteACPM' => $reporteACPM->idReporteACPM, 'ordenReporteACPMDetalle' => 0, 'fechaReporteACPMDetalle' => $fechaAccion, 'Proceso_idProceso' => NULL, 'Modulo_idModulo' => $idModulo, 'tipoReporteACPMDetalle' => $tipoAccion, 'descripcionReporteACPMDetalle' => $descripcionAccion, 'analisisReporteACPMDetalle' => '', 'correccionReporteACPMDetalle' => '', 'Tercero_idResponsableCorrecion' => NULL, 'planAccionReporteACPMDetalle' => '', 'Tercero_idResponsablePlanAccion' => NULL, 'fechaEstimadaCierreReporteACPMDetalle' => '0000-00-00', 'estadoActualReporteACPMDetalle' => '', 'fechaCierreReporteACPMDetalle' => '0000-00-00', 'eficazReporteACPMDetalle' => 0]);
 }
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
 /**
  * Update the specified resource in storage.
  *
  * @param  Request  $request
  * @param  int  $id
  * @return Response
  */
 public function update(ReporteACPMRequest $request, $id)
 {
     if ($request['respuesta'] != 'falso') {
         $reporteACPM = \App\ReporteACPM::find($id);
         $reporteACPM->fill($request->all());
         $reporteACPM->save();
         $idsEliminar = explode(',', $request['eliminarReporteACPMDetalle']);
         \App\ReporteACPMDetalle::whereIn('idReporteACPMDetalle', $idsEliminar)->delete();
         $contadorDetalle = count($request['ordenReporteACPMDetalle']);
         for ($i = 0; $i < $contadorDetalle; $i++) {
             $indice = array('idReporteACPMDetalle' => $request['idReporteACPMDetalle'][$i]);
             $datos = array('ReporteACPM_idReporteACPM' => $id, 'ordenReporteACPMDetalle' => $request['ordenReporteACPMDetalle'][$i], 'fechaReporteACPMDetalle' => $request['fechaReporteACPMDetalle'][$i], 'Proceso_idProceso' => $request['Proceso_idProceso'][$i] == '' ? NULL : $request['Proceso_idProceso'][$i], 'Modulo_idModulo' => $request['Modulo_idModulo'][$i], 'tipoReporteACPMDetalle' => $request['tipoReporteACPMDetalle'][$i], 'descripcionReporteACPMDetalle' => $request['descripcionReporteACPMDetalle'][$i], 'analisisReporteACPMDetalle' => $request['analisisReporteACPMDetalle'][$i], 'correccionReporteACPMDetalle' => $request['correccionReporteACPMDetalle'][$i], 'Tercero_idResponsableCorrecion' => $request['Tercero_idResponsableCorrecion'][$i] == '' ? NULL : $request['Tercero_idResponsableCorrecion'][$i], 'planAccionReporteACPMDetalle' => $request['planAccionReporteACPMDetalle'][$i], 'Tercero_idResponsablePlanAccion' => $request['Tercero_idResponsablePlanAccion'][$i] == '' ? NULL : $request['Tercero_idResponsablePlanAccion'][$i], 'fechaEstimadaCierreReporteACPMDetalle' => $request['fechaEstimadaCierreReporteACPMDetalle'][$i], 'estadoActualReporteACPMDetalle' => $request['estadoActualReporteACPMDetalle'][$i], 'fechaCierreReporteACPMDetalle' => $request['fechaCierreReporteACPMDetalle'][$i], 'eficazReporteACPMDetalle' => $request['eficazReporteACPMDetalle'][$i]);
             $guardar = \App\ReporteACPMDetalle::updateOrCreate($indice, $datos);
         }
         return redirect('/reporteacpm');
     }
 }