<?php

/**
 * Descripción del Controlador PlanesOperaciones
 *
 * PlanOperacion
 *
 * Licenciado bajo la Licencia Apache, Versión 2.0;
 * Usted no puede usar este archivo excepto en conformidad con la Licencia.
 * Usted puede obtener una copia de la Licencia en:
 *      http://www.php.net/license/3_01.txt. 
 * A menos que sea requerido por la ley aplicable o acordado por escrito, el software
 * Distribuido bajo la licencia se distribuye en una "AS IS" o  "COMO ESTA" BASE,
 * SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, expresas o implícitas.
 * Consulte la Licencia para los permisos y Limitaciones bajo la Licencia.
 *
 * @package    Planeador\Controladores
 * @author     RONALD ANDRES FABRA JIMENEZ <rfabra@ccsm.org.co>
 * @author     SICAM 20171025 <sicam32@ccsm.org.co>
 * @copyright  2017 Cámara de Comercio de Santa Marta para el Magdalena
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01
 * @version    201711111205
 * @link       http://sicam.ccsm.org.co/docs/planeador/PlanesOperaciones
 */
 
class PlanesOperacionesControlador extends Controladores { 
    /**
     * Vista que se encarga de mostrar todos los detalles/datos asociados a 
     * los registros de PlanesOperaciones.
     * @return HTML Datos e información de PlanesOperaciones.
     */
    function verDetalles() {
        $PlanOperacion = PlanesOperaciones::datos($this->planOperacionID);
        Vistas::mostrar('planeador', 'planesoperaciones/ver-detalles', array('PlanesOperaciones' => $PlanOperacion));
    }
    /**
     * Vista que se encarga de organizar la forma de presentar 
     * los registros de PlanesOperaciones al usuario.
     * @return HTML Listado de PlanesOperaciones.
     */
    function mostrarTodos() {
        Vistas::mostrar('planeador', 'planesoperaciones/lst-todos');
    }
    
    /**
     * Vista que se encarga de organizar la forma de presentar 
     * los registros de PlanesOperaciones al usuario.
     * @return HTML Listado de PlanesOperaciones.
     */
    function mostrarOperacionesColaborador() {
        Vistas::mostrar('planeador', 'planesoperaciones/lst-misOperaciones');
    }
    
    /**
     * Permite mostrar en forma de tabla los registros de PlanesOperaciones.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListado() {
        $PlanOperaciones = PlanesOperaciones::todos();
        var_dump($PlanOperaciones);
        Vistas::mostrar('planeador', 'planesoperaciones/tbl-todos', 
            array( 'PlanesOperaciones' => $PlanOperaciones)
        );
    }
    /**
     * Permite mostrar en forma de tabla los registros de PlanesOperaciones segun el colaborador.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListadoPorColaborador() {
        $PlanOperaciones = PlanesOperaciones::delColaborador( Cliente::colaboradorID() );
        Vistas::mostrar('planeador', 'planesoperaciones/tbl-todos', 
            array( 'PlanesOperaciones' => $PlanOperaciones)
        );
    }
    
    /**
     * Permite mostrar en forma de tabla los registros de PlanesOperaciones.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListadoDeLaActividad() {
        $PlanOperaciones = array();
        if(!empty($this->actividadID) and isset($this->actividadID)):
            $PlanOperaciones = PlanesOperaciones::delaActividad($this->actividadID);
        endif;
        Vistas::mostrar('planeador', 'planesoperaciones/tbl-todos-sencillo', 
            array(  'PlanesOperaciones' => $PlanOperaciones,
                    "hash_form"=> $this->hash_form
            )
        );
    }
    
    /**
     * Permite mostrar en forma de tabla los registros de PlanesOperaciones.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListadoDeLaActividadPorTipoOperacion() {
        $PlanOperaciones = array();
        $tipoOperacionID = $this->tipoOperacionID;
        if(!empty($this->actividadID) and isset($this->actividadID) and !empty($tipoOperacionID)):
            $PlanOperaciones = PlanesOperaciones::delaActividadPorTipo($this->actividadID, $tipoOperacionID);
        endif; 
        Vistas::mostrar('planeador', 'planesoperaciones/tbl-todos-sencillo', 
            array(  'PlanesOperaciones' => $PlanOperaciones,
                    "hash_form"=> $this->hash_form
            )
        );
    }
    
    /**
     * Permite mostrar en forma de tabla los registros de PlanesOperaciones.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListadoDeLaActividadCreada() {
        if(@$this->tipoPlanID){
            $PlanOperaciones = PlanesOperaciones::delaActividadYPlan($this->actividadID,@$this->tipoPlanID);
        }else{
            $PlanOperaciones = PlanesOperaciones::delaActividad($this->actividadID);
        }
        Vistas::mostrar('planeador', 'planesoperaciones/tbl-operaciones-actividad', 
            array( 'PlanesOperaciones' => $PlanOperaciones)
        );
    }
    
    /**
     * Permite mostrar en forma de tabla los registros de PlanesOperaciones por Plan.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function listadoPorPlan() {
        $PlanOperaciones = PlanesOperaciones::delPlan($this->tipoPlanID);
        Vistas::mostrar('planeador', 'planesoperaciones/lst-todos-plan', 
            array( 'PlanesOperaciones' => $PlanOperaciones)
        );
    }
    
    
    /**
     * Permite mostrar en forma de formulario los campos obligatorios de PlanesOperaciones.  
     * @return HTML Formulario con los campos requeridos.
     */
    function TodosCampos($PlanesOperaciones = null) {
        Vistas::mostrar('planeador', 'planesoperaciones/campos-todos',array(
          'PlanesActividades' => PlanesActividades::todas(),
          'PlanesOperacionesTipos'     => PlanesOperacionesTipos::todos(),
          'PlanesOperacionesPredefinidas'   => PlanesOperacionesPredefinidas::todas(),
          'PlanesOperacionesEstados'   => PlanesOperacionesEstados::todos(),
          'CamaraFuncionesLey'   => CamaraFuncionesLey::todos(),
          'TiposPlanes'   => TiposPlanes::todos(),
          'TiposGastos'   => TiposGastos::todos(),
          'Rubros'   => Rubros::todos(),
          'CentrosCostos'   => CentroCostos::todos(),
          'PlanesOperacionesClases'   => PlanesOperacionesClases::todos(),
          'PlanesOperaciones' => $PlanesOperaciones
        ));
        
    }
    /**
     * Responde con el formulario de PlanesOperaciones vacio, solo datos necesarios.
     * LLama a la función que devuleve el formulario pero 
     * sin enviarle los datos de PlanesOperaciones.  
     * Esta función se crea para poder gestionar el permiso de NUEVO PlanesOperaciones
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function mostrarFormularioNuevo() {
        $this->mostrarFormulario();
    }
    /**
     * Función que toma los datos enviados y crea un nuevo registro
     * @return RespuestasSistema 
     */
    private function guardarNuevo() {
        $creadoID = PlanesOperaciones::guardar($this->actividadID, 
                $this->tipoOperacionID, $this->operacionPredefinidaID, 
                $this->planOperacionDESCRIPCION, 
                $this->planOperacionFCHINICIO,$this->planOperacionFCHFINAL,
                $this->planOperacionPRESUPUESTADO,$this->estadoOperacionID,
                $this->camaraFuncionID,$this->tipoPlanID,
                $this->tipoGastoID,$this->rubroID,
                $this->centroCostosID,$this->claseOperacionID);
        if ($creadoID) {
            return RespuestasSistema::exito("Nuevo Registro CREADO con EXITO");
        } else {
            return RespuestasSistema::fallo("No se pudo CREAR el nuevo PlanesOperaciones. Si vuelve a suceder, contacte con el Centro TICS.");
        }
    }
    /**
     * Recibe el ID del PlanesOperaciones y obtiene sus datos para ser enviados 
     * al formulario, y asi cargar los datos en los inputs.
     * Esta función se crea para poder gestionar el permiso de EDITAR PlanesOperaciones
     * @return HTML Formulario con los datos del PlanesOperaciones a editar.
     */
    function mostrarFormularioEditar() {
        $PlanOperaciones = PlanesOperaciones::datos($this->PlanesOperacionesID);
        $this->mostrarFormulario();
        $this->TodosCampos($PlanOperaciones);
    }
    /**
     * Función que toma los datos enviados y actualiza el registro
     * @return RespuestasSistema 
     */
    private function guardarCambios() {
        $PlanesOperaciones = PlanesOperaciones::datos($this->PlanesOperacionesID);
        $actualizado = PlanesOperaciones::actualizar(
                $this->PlanesOperacionesID, $this->PlanesOperacionesCATEGORIA, 
                $this->PlanesOperacionesCODIGO, $this->PlanesOperacionesTITULO, 
                $this->PlanesOperacionesDESCRIPCION, 
                $this->PlanesOperacionesESTADO
        );
        if ($actualizado) {
            return RespuestasSistema::exito("Registro ACTUALIZADO con EXITO.");
        } else {
            return RespuestasSistema::fallo("No se actualizó el PlanesOperaciones. Verifique los datos, o contacte al Centro TICS.");
        }
    }
    /**
     * Muestra el Formulario procesado para ser mostrado al usuario.
     * Se le envian unos datos inciales para la carga de la vista, y
     * se envia los datos del PlanesOperaciones cuando se esta editando.
     * @return HTML Vista del Formulario de PlanesOperaciones
     */
    private function mostrarFormulario() {
        Vistas::mostrar('planeador', 'planesoperaciones/form-PlanesOperaciones');
    }
    /**
     * Guardar Datos Recibidos, bien sea como un registro nuevo, o como una actualización.
     * Despues imprime las Respuesta del Sistema a la ejecución de la operacion
     */
    function guardarDatos() {
        if (empty($this->PlanesOperacionesID)) {
            echo $this->guardarNuevo();
        } else {
            echo $this->guardarCambios();
        }
    }
    /**
     * Eliminar un registro de la base de datos.
     * Esta operación es irreversible.
     * Si se tiene la referencia integral activada, la base de datos no va 
     * dejar eliminar si tiene otros registros asociados.
     * @return RespuestasSistema Resultado de la Operacion que se envia al cliente
     */
    function eliminar() {
        $PlanesOperacionesParaEliminar = $this->planOperacionSELECCIONADOS;
        if (count($PlanesOperacionesParaEliminar)) {
            $n = 0;
            foreach ($PlanesOperacionesParaEliminar as $planOperacionELIMINAR):
                if (PlanesOperaciones::eliminar($planOperacionELIMINAR)) {
                    $n++;
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible ELIMINAR. Contacte al centro TICS.');
            } else if ($n == count($PlanesOperacionesParaEliminar)) {
                echo RespuestasSistema::exito('Se realizó la OPERACION [ELIMINAR] exitosamente!');
            } else {
                echo RespuestasSistema::error('Hubo un error al  [ELIMINAR] alguno de los registros. Verifica los datos, o contacta al centro TICS.');
            }
        } else {
            echo RespuestasSistema::error('No llegarón los datos para  [ELIMINAR]. Contacta al centro TICS');
        }
    }
    /**
     * Cambiar el estado de un registro de la base de datos.
     * Esta operacion cambia a estado ACTIVO el registro.     
     * @return RespuestasSistema Resultado de la Operacion
     */
    function reactivar() {
       $PlanesOperacionesParaActivar  = $this->planOperacionSELECCIONADOS;
        if (count($PlanesOperacionesParaActivar)) {
            $n = 0;
            foreach ($PlanesOperacionesParaActivar as $planOperacionACTIVAR):
                if (PlanesOperaciones::activar($planOperacionACTIVAR)) {
                    $n++;
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible REACTIVAR. Contacte al centro TICS.');
            } else if ($n == count($PlanesOperacionesParaActivar)) {
                echo RespuestasSistema::exito('Se realizó la OPERACION [REACTIVAR] exitosamente!');
            } else {
                echo RespuestasSistema::error('Hubo un error al  [REACTIVAR] alguno de los registros. Verifica los datos, o contacta al centro TICS.');
            }
        } else {
            echo RespuestasSistema::error('No llegarón los datos para  [REACTIVAR]. Contacta al centro TICS');
        }
    }
    /**
     * Cambiar el estado de un registro de la base de datos.
     * Esta operacion cambia a estado DESACTIVO / SUSPENDIDO / CANCELADO el registro.     
     * @return RespuestasSistema Resultado de la Operacion
     */
    function desactivar() {
        $PlanesOperacionesParaDesactivar = $this->planOperacionSELECCIONADOS;
        if (count($PlanesOperacionesParaDesactivar)) {
            $n = 0;
            foreach ($PlanesOperacionesParaDesactivar as $planOperacionDESACTIVAR):
                if (PlanesOperaciones::desactivar($planOperacionDESACTIVAR)) {
                    $n++;
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible DESACTIVAR. Contacte al centro TICS.');
            } else if ($n == count($PlanesOperacionesParaDesactivar)) {
                echo RespuestasSistema::exito('Se realizó la OPERACION [DESACTIVAR] exitosamente!');
            } else {
                echo RespuestasSistema::error('Hubo un error al  [DESACTIVAR] alguno de los registros. Verifica los datos, o contacta al centro TICS.');
            }
        } else {
            echo RespuestasSistema::error('No llegarón los datos para  [DESACTIVAR]. Contacta al centro TICS');
        }
    }
    
    function obtenerDatos(){
        $operacion = PlanesOperaciones::datos($this->operacionID);
        echo RespuestasSistema::exito('', $operacion);
    }
    
    /**
     * Mostar formulario para registrar avance de una operacion.
     */
    function mostrarFormularioAvance() {
    $PlanOperaciones = PlanesOperaciones::datos($this->planOperacionID);
    $PlanesOperacionesEstados = PlanesOperacionesEstados::todos();
        Vistas::mostrar('planeador', 'planesoperaciones/form-avance', 
            array( 'PlanOperacion' => $PlanOperaciones, 'PlanesOperacionesEstados' => $PlanesOperacionesEstados, 'TipoPlanID' => $this->tipoPlanID, 'hash_padre'=>$this->hash_padre)
        );
    }
    
    /**
     * guardar avance de una operacion.
     */
    function guardarAvance() {
        $this->operacionAvanceCUMPLIMIENTO = NULL;
        $creadoID = PlanesOperacionesAvances::guardar(
                $this->planOperacionID, $this->estadoOperacionID, 
                $this->operacionAvanceFCHAVANCE, $this->operacionAvanceLOGRADO, 
                $this->operacionAvanceEJECUTADO, 
                $this->operacionAvanceCUMPLIMIENTO
        );
        if ($creadoID) {
            echo RespuestasSistema::exito("Registro GUARDADO con EXITO.");
        } else {
            echo RespuestasSistema::fallo("No se pudo registrar el avance. Verifique los datos, o contacte al Centro TICS.");
        }
    }
    
     /**
     * verificar avance de una operacion.
     */
    function verificarAvance() {
        $PlanOperaciones = PlanesOperaciones::datos($this->planOperacionID);
        $avance = PlanesOperacionesAvances::GastadoTotalPorOperacion($this->actividadID,$this->planOperacionID,$this->tipoPlanID);
        if(@$this->operacionAvanceEJECUTADO){
            $avance->TOTAL = $avance->TOTAL + $this->operacionAvanceEJECUTADO;
        }
        if ($PlanOperaciones->planOperacionPRESUPUESTADO >= $avance->TOTAL) {
            echo RespuestasSistema::exito("");
        }else{
            echo RespuestasSistema::error("¡No se puede registrar un avance porque supera el límite de lo presupuestado!");
        }
    }
    
    function mostrarTablaCompletaPorActividad(){
        if(empty($this->tipoPlanID)){
            $OperacionesAdquisicion =  PlanesOperaciones::delaActividadYTipoPlan($this->actividadID,PlanesOperacionesTipos::ADQUISICION);
            foreach($OperacionesAdquisicion as $adquisicion):
                $adquisicion->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorOperacion($this->actividadID, $adquisicion->planOperacionID);
            endforeach;
            $OperacionesTarea =  PlanesOperaciones::delaActividadYTipoPlan($this->actividadID,PlanesOperacionesTipos::TAREA);
            if ($OperacionesTarea) {
                foreach($OperacionesTarea as $tarea):
                    $tarea->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorOperacion($this->actividadID, $tarea->planOperacionID);
                endforeach;
            }
             Vistas::mostrar("planeador", "planesoperaciones/tbl-completa", array("OperacionesAdquisicion"=>$OperacionesAdquisicion, "OperacionesTarea"=>$OperacionesTarea, 'hash_padre'=>$this->hash_padre));
        }else{
            $OperacionesAdquisicion =  PlanesOperaciones::delaActividadYTipoPlan($this->actividadID,PlanesOperacionesTipos::ADQUISICION,$this->tipoPlanID);
            foreach($OperacionesAdquisicion as $adquisicion):
                $adquisicion->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorOperacion($this->actividadID,$adquisicion->planOperacionID, $this->tipoPlanID);
            endforeach;
            $OperacionesTarea =  PlanesOperaciones::delaActividadYTipoPlan($this->actividadID,PlanesOperacionesTipos::TAREA,$this->tipoPlanID);
            if ($OperacionesTarea) {
                foreach($OperacionesTarea as $tarea):
                    $tarea->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorOperacion($this->actividadID,$tarea->planOperacionID, $this->tipoPlanID);
                endforeach;
            }
             Vistas::mostrar("planeador", "planesoperaciones/tbl-completa", array("OperacionesAdquisicion"=>$OperacionesAdquisicion, "OperacionesTarea"=>$OperacionesTarea,'TipoPlanID' => $this->tipoPlanID, 'hash_padre'=>$this->hash_padre));
        }
       
    }
}
// Generado el 2017-11-11 12:05:50:000000
