<?php

/**
 * Descripción del Controlador ActividadesPreconfiguradas
 *
 * ActividadPreconfigurada
 *
 * 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    Constructor\Controlador
 * @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    201711070913
 * @link       http://sicam.ccsm.org.co/docs/planeador/ActividadesPreconfiguradas
 */
 
class ActividadesPreconfiguradasControlador extends Controladores { 
    
    public static $CONSECUTIVOACT= 'TIPOSACTIVIDADES';
    public static $PREFIJO= 'TACT';
    
    /**
     * Vista que se encarga de mostrar todos los detalles/datos asociados a 
     * los registros de PlanesTiposActividades.
     * @return HTML Datos e información de PlanesTiposActividades.
     */
    function verDetalles() {
        $ActividadPreconfigurada = PlanesTiposActividades::datos($this->tipoActividadID);
        $OperacionesActividades=PlanesTiposActividadesPredefinidas::porActividadID($this->tipoActividadID);
        Vistas::mostrar('planeador', 
                        'actividadespreconfiguradas/ver-detalles', 
                        array('ActividadPreconfigurada' => $ActividadPreconfigurada,
                                'objOperacionesAct' => $OperacionesActividades));
    }
    /**
     * Vista que se encarga de organizar la forma de presentar 
     * los registros de PlanesTiposActividades al usuario.
     * @return HTML Listado de PlanesTiposActividades.
     */
    function mostrarTodos() {
        Vistas::mostrar('planeador', 'actividadespreconfiguradas/lst-todos');
    }
    /**
     * Permite mostrar en forma de tabla los registros de ActividadesPreconfiguradas.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListado() {
        $ActividadesPreconfiguradas = PlanesTiposActividades::todos();
        Vistas::mostrar('planeador', 'actividadespreconfiguradas/tbl-todos', 
            array( 'ActividadesPreconfiguradas' => $ActividadesPreconfiguradas)
        );
    }
    /**
     * Responde con el formulario de ActividadesPreconfiguradas vacio, solo datos necesarios.
     * LLama a la función que devuleve el formulario pero 
     * sin enviarle los datos de ActividadesPreconfiguradas.  
     * Esta función se crea para poder gestionar el permiso de NUEVO ActividadesPreconfiguradas
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function mostrarFormularioNuevo() {
        $this->mostrarFormulario();
    }
    
     /**
     * Permite mostrar en forma de tabla los registros de .  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListadoTareas() {        
        $operacionesPredefinidas = array();
        if( !empty($this->actividadPreconfiguradaID) ){
            $operacionesPredefinidas = PlanesTiposActividades::datosCompletos($this->actividadPreconfiguradaID)->OperacionesPredefinidas;
        }
        Vistas::mostrar('planeador', 'operacionespredefinidas/tbl-tareas-actividadespredefinidas', 
            array( 'operacionesPredefinidas' => $operacionesPredefinidas)
        );
    }
     /**
     * Permite mostrar en forma de tabla los registros de .  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListadoAdquisiciones() {        
        $operacionesPredefinidas = array();
        if( !empty($this->actividadPreconfiguradaID) ){
            $operacionesPredefinidas = PlanesTiposActividades::datosCompletos($this->actividadPreconfiguradaID)->OperacionesPredefinidas;
        }
        Vistas::mostrar('planeador', 'operacionespredefinidas/tbl-adquisiciones-actividadespredefinidas', 
            array( 'operacionesPredefinidas' => $operacionesPredefinidas)
        );
    }
    
    
    /**
     * 
     */
    function tablaListadoOperaciones() {
        $operacionesPredefinidas = array();
        if( !empty($this->actividadPreconfiguradaID) ){
            $operacionesPredefinidas = PlanesTiposActividades::datosCompletos($this->actividadPreconfiguradaID)->OperacionesPredefinidas;
        }
        Vistas::mostrar('planeador', 'operacionespredefinidas/tbl-operaciones-actividadpreconfigurada', 
            array( 'operacionesPredefinidas' => $operacionesPredefinidas)
        );
    }
    
    /**
     * Función que toma los datos enviados y crea un nuevo registro
     * @return RespuestasSistema 
     */
    private function guardarNuevo() {
        $consecutivoTAct=Consecutivos::usar(self::$CONSECUTIVOACT,self::$PREFIJO);
        $creadoID = PlanesTiposActividades::guardar($consecutivoTAct,$this->titulo,$this->descripcion);
        /**Insertar las Operaciones preconficugradas*/
        if ($creadoID) {
            if(isset($this->actividadOperacionPredefinidaID) and is_array($this->actividadOperacionPredefinidaID) ){
                foreach( $this->actividadOperacionPredefinidaID as $OperacionID ){
                    PlanesTiposActividadesPredefinidas::guardar($OperacionID, $creadoID);
                }
            }
        }
        if ($creadoID) {
            return RespuestasSistema::exito("Se realizó la OPERACION [GUARDAR] exitosamente!", array($creadoID));
        } else {
            return RespuestasSistema::fallo("No se pudo CREAR el nuevo ActividadesPreconfiguradas. Si vuelve a suceder, contacte con el Centro TICS.");
        }
    } 
    /**
     * Recibe el ID del ActividadesPreconfiguradas 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 ActividadesPreconfiguradas
     * @return HTML Formulario con los datos del ActividadesPreconfiguradas a editar.
     */
    function mostrarFormularioEditar() {
        $ActividadPreconfiguradas = PlanesTiposActividades::datosCompletos($this->tipoActividadID);
        $this->mostrarFormulario($ActividadPreconfiguradas);
    }
    /**
     * Función que toma los datos enviados y actualiza el registro
     * @return RespuestasSistema 
     */
    private function guardarCambios() {
        $actualizado = PlanesTiposActividades::actualizar($this->actividadPreconfiguradaID,$this->titulo,$this->descripcion);
        $Actividad = PlanesTiposActividades::datosCompletos($this->actividadPreconfiguradaID);
        if(isset($this->actividadOperacionPredefinidaID) and is_array($this->actividadOperacionPredefinidaID) ){
            foreach($Actividad->OperacionesPredefinidas as $OperPredef ){
                $indexOperacion = array_search( $OperPredef->operacionPredefinidaID, $this->actividadOperacionPredefinidaID);
                if ( $indexOperacion === FALSE ) {
                    PlanesTiposActividadesPredefinidas::eliminarPorID($OperPredef->actividadOperacionPredefinidaID);
                }else{
                    unset($this->actividadOperacionPredefinidaID[$indexOperacion]);
                }
            }
            foreach( $this->actividadOperacionPredefinidaID as $OperacionID ){
                PlanesTiposActividadesPredefinidas::guardar($OperacionID, $this->actividadPreconfiguradaID);
            }
            $Actividad = PlanesTiposActividades::datosCompletos($this->actividadPreconfiguradaID);
        }
        
        if (!is_null($actualizado)) {
            return RespuestasSistema::exito("Se realizó la OPERACION [ACTUALIZAR] exitosamente!", array($this->actividadPreconfiguradaID));
        } else {
            return RespuestasSistema::fallo("No se actualizó el ActividadesPreconfiguradas. Verifique los datos, o contacte al Centro TICS.");
        }
    }
    
    private function agregarNuevaOperacion($OperacionesNuevas, $actividadPreconfiguradaID){
        var_dump($OperacionesNuevas);
        foreach ($OperacionesNuevas as $value) {  
            PlanesTiposActividadesPredefinidas::guardar($value,$actividadPreconfiguradaID);
        }
    }
    
    
    /**
     * 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 ActividadesPreconfiguradas cuando se esta editando.
     * @return HTML Vista del Formulario de ActividadesPreconfiguradas
     */
    private function mostrarFormulario($ActividadesPreconfiguradas = null, $OperacionesActividades = null) {
        $objOperaciones= PlanesOperacionesPredefinidas::todas();
        Vistas::mostrar('planeador', 'actividadespreconfiguradas/form-ActividadesPreconfiguradas', array(
                        "objActividadPred" => $ActividadesPreconfiguradas,
                        "operacionesPredefinidas"=> $objOperaciones
        ));
    }
    /**
     * 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->actividadPreconfiguradaID)) {
            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() {
        $ActividadesPreconfiguradasParaEliminar = $this->checkb;
        if (count($ActividadesPreconfiguradasParaEliminar)) {
            $n = 0;
            foreach ($ActividadesPreconfiguradasParaEliminar as $tipoActividadELIMINAR):
                if (PlanesTiposActividadesPredefinidas::eliminarPoractividadID($tipoActividadELIMINAR)) {
                    if (PlanesTiposActividades::eliminar($tipoActividadELIMINAR)) {
                        $n++;
                    }
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible ELIMINAR. Contacte al centro TICS.');
            } else if ($n == count($ActividadesPreconfiguradasParaEliminar)) {
                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');
        }
    }
    
    /**
     * Eliminar una operación asociada a la actividad preconfigurada 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 eliminarOperacionPreconfigurada() {
        foreach ($this->checkb as $actividadOperacionPredefinidaID){
            $ObjActividadOperacionPredefinida = PlanesTiposActividadesPredefinidas::datosPorOperacionYActividad($actividadOperacionPredefinidaID,$this->actividadPreconfiguradaID);
            PlanesTiposActividadesPredefinidas::eliminarPorID($ObjActividadOperacionPredefinida->actividadOperacionPredefinidaID);
        }
        echo RespuestasSistema::exito('Se realizó la OPERACION [ELIMINAR] exitosamente!');
    }
    
    /**
     * Agregar una operación asociada a la actividad preconfigurada de la base de datos.
     * Esta operación es irreversible.
     * @return RespuestasSistema Resultado de la Operacion que se envia al cliente
     */
     
    function agregarOperacionPreconfigurada() {
            //$ObjOperacionPredefinida = OperacionesPredefinidas::getIdOperacionPredefinida($this->operacionPredefinidaID);
            $Agregado = PlanesTiposActividadesPredefinidas::guardar($this->operacionPredefinidaID,$this->actividadPreconfiguradaID);
        if($Agregado){
            echo RespuestasSistema::exito('Se realizó la OPERACION [AGREGAR] exitosamente!');
        }
    }
    
    
    /**
     * 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() {
       $ActividadesPreconfiguradasParaActivar  = $this->tipoActividadSELECCIONADOS;
        if (count($ActividadesPreconfiguradasParaActivar)) {
            $n = 0;
            foreach ($ActividadesPreconfiguradasParaActivar as $tipoActividadACTIVAR):
                if (PlanesTiposActividades::activar($tipoActividadACTIVAR)) {
                    $n++;
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible REACTIVAR. Contacte al centro TICS.');
            } else if ($n == count($ActividadesPreconfiguradasParaActivar)) {
                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() {
        $ActividadesPreconfiguradasParaDesactivar = $this->tipoActividadSELECCIONADOS;
        if (count($ActividadesPreconfiguradasParaDesactivar)) {
            $n = 0;
            foreach ($ActividadesPreconfiguradasParaDesactivar as $tipoActividadDESACTIVAR):
                if (PlanesTiposActividades::desactivar($tipoActividadDESACTIVAR)) {
                    $n++;
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible DESACTIVAR. Contacte al centro TICS.');
            } else if ($n == count($ActividadesPreconfiguradasParaDesactivar)) {
                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 mostrarBoxActividades(){
        $ActividadesPreconfiguradas = PlanesTiposActividades::todos();
        Vistas::mostrar('planeador', 'actividadespreconfiguradas/box-actividadesPreconfiguradas', 
            array( 'ActividadesPreconfiguradas' => $ActividadesPreconfiguradas)
        );
    }
    
    function obtenerDatos(){
        $ActividadPreconfiguradas = PlanesTiposActividades::datos($this->ActividadPredefinidasID);
        $ActividadPreconfiguradas->OperacionesActividades=PlanesTiposActividadesPredefinidas::porActividadID($this->ActividadPredefinidasID);
        echo RespuestasSistema::exito(null , $ActividadPreconfiguradas);
    }
    
}
// Generado el 2017-11-07 09:13:36:000000
