<?php

/**
 * Descripción del Modelo TMPLControladores
 * 
 * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. 
 * Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. 
 * 
 * @package Constructor\Modelo
 * @license GPL
 * @author Diseñado por jpllinas@ccsm.org.co; Generado por SICAM.
 * 
 */
class TMPLControlador {
    
    const ENCABEZADO = <<<php
<?php

/**
 * Descripción del Controlador %%CONTROLADOR%%
 *
 * %%DESC_CONTROL%%
 *
 * 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    Componentes\%%COMPONENTE%%\Controladores
 * @author     %%NOMBRE_COLABORADOR%% <%%CORREO_COLABORADOR%%>
 * @author     SICAM %%VERSION_SICAM%% <%%CORREO_SICAM%%>
 * @copyright  %%ANIO_CREACION%% Cámara de Comercio de Santa Marta para el Magdalena
 * @license    http://www.php.net/license/3_01.txt  PHP License 3.01
 * @version    %%VERSION_ARCHIVO%%
 * @link       componentes/%%COMPONENTE_DIR%%/%%CONTROLADOR%%/
 */
 
class %%CONTROLADOR%%Controlador extends Controladores { 

php;

    const VER_DETALLES = <<<php
    /**
     * Vista que se encarga de mostrar todos los detalles/datos asociados a 
     * los registros de %%TABLADATOS%%.
     * @return HTML Datos e información de %%TABLADATOS%%.
     */
    function verDetalles() {
        $%%ENTIDAD%% = %%MODELO%%::datos(\$this->%%PREFIJODATOS%%ID);
        Vistas::mostrar('%%COMPONENTE_DIR%%', '%%VISTAS%%/ver-detalles', array('%%ENTIDAD%%' => $%%ENTIDAD%%));
    }

php;

    const MOSTRAR_TODOS = <<<php
    /**
     * Vista que se encarga de organizar la forma de presentar 
     * los registros de %%TABLADATOS%% al usuario.
     * @return HTML Listado de %%TABLADATOS%%.
     */
    function mostrarTodos%%SUFIJO_VISTA%%() {
        Vistas::mostrar('%%COMPONENTE_DIR%%', '%%VISTAS%%/lst-todos%%SUFIJO_VISTA%%');
    }

php;

    const CARGAR_TABLA = <<<php
    /**
     * Permite mostrar en forma de tabla los registros de %%CONTROLADOR%%.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListado%%SUFIJO_VISTA%%() {
        $%%ENTIDADES%% = %%MODELO%%::todos();
        Vistas::mostrar('%%COMPONENTE_DIR%%', '%%VISTAS%%/tbl-todos%%SUFIJO_VISTA%%', 
            array( '%%ENTIDADES%%' => $%%ENTIDADES%%)
        );
    }

php;

    const MOSTRAR_FORMULARIO_NUEVO = <<<php
    /**
     * Responde con el formulario de %%CONTROLADOR%% vacio, solo datos necesarios.
     * LLama a la función que devuleve el formulario pero 
     * sin enviarle los datos de %%CONTROLADOR%%.  
     * Esta función se crea para poder gestionar el permiso de NUEVO %%CONTROLADOR%%
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function mostrarFormularioNuevo() {
        \$this->mostrarFormulario();
    }

php;

    const MOSTRAR_FORMULARIO_EDITAR = <<<php
    /**
     * Recibe el ID del %%CONTROLADOR%% 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 %%CONTROLADOR%%
     * @return HTML Formulario con los datos del %%CONTROLADOR%% a editar.
     */
    function mostrarFormularioEditar() {
        $%%ENTIDADES%% = %%MODELO%%::datos(\$this->%%CONTROLADOR%%ID);
        \$this->mostrarFormulario($%%ENTIDADES%%);
    }

php;
    const MOSTRAR_FORMULARIO = <<<php
    /**
     * 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 %%CONTROLADOR%% cuando se esta editando.
     * @return HTML Vista del Formulario de %%CONTROLADOR%%
     */
    private function mostrarFormulario($%%CONTROLADOR%% = null) {
        Vistas::mostrar('%%COMPONENTE_DIR%%', '%%VISTAS%%/form-%%CONTROLADOR%%', array(
          'versionSICAM' => Parametros::valor('VERSIONSICAM'),
          'Vigencia'     => Vigencias::actual(),
          'Categorias'   => Categorias::todas(),
          '%%CONTROLADOR%%' => $%%CONTROLADOR%%
        ));
    }

php;


    const GUARDAR_DATOS = <<<php
    /**
     * 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->%%CONTROLADOR%%ID)) {
            echo \$this->guardarNuevo();
        } else {
            echo \$this->guardarCambios();
        }
    }

php;

    const GUARDAR_DATOS_NUEVO = <<<php
    /**
     * Función que toma los datos enviados y crea un nuevo registro
     * @return RespuestasSistema 
     */
    private function guardarNuevo() {
        \$creadoID = %%MODELO%%::guardar(\$this->%%CONTROLADOR%%CATEGORIA, 
                \$this->%%CONTROLADOR%%CODIGO, \$this->%%CONTROLADOR%%TITULO, 
                \$this->%%CONTROLADOR%%DESCRIPCION, 
                \$this->%%CONTROLADOR%%ESTADO);
        if (\$creadoID) {
            return RespuestasSistema::exito("Nuevo Registro CREADO con EXITO");
        } else {
            return RespuestasSistema::fallo("No se pudo CREAR el nuevo %%CONTROLADOR%%. Si vuelve a suceder, contacte con el Centro TICS.");
        }
    }

php;

    const GUARDAR_DATOS_CAMBIOS = <<<php
    /**
     * Función que toma los datos enviados y actualiza el registro
     * @return RespuestasSistema 
     */
    private function guardarCambios() {
        $%%CONTROLADOR%% = %%MODELO%%::datos(\$this->%%CONTROLADOR%%ID);
        \$actualizado = %%MODELO%%::actualizar(
                \$this->%%CONTROLADOR%%ID, \$this->%%CONTROLADOR%%CATEGORIA, 
                \$this->%%CONTROLADOR%%CODIGO, \$this->%%CONTROLADOR%%TITULO, 
                \$this->%%CONTROLADOR%%DESCRIPCION, 
                \$this->%%CONTROLADOR%%ESTADO
        );
        if (\$actualizado) {
            return RespuestasSistema::exito("Registro ACTUALIZADO con EXITO.");
        } else {
            return RespuestasSistema::fallo("No se actualizó el %%CONTROLADOR%%. Verifique los datos, o contacte al Centro TICS.");
        }
    }

php;

    const ELIMINAR_DATOS = <<<php
    /**
     * 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() {
        $%%CONTROLADOR%%ParaEliminar = \$this->%%PREFIJODATOS%%SELECCIONADOS;
        if (count($%%CONTROLADOR%%ParaEliminar)) {
            \$n = 0;
            foreach ($%%CONTROLADOR%%ParaEliminar as $%%PREFIJODATOS%%ELIMINAR):
                if (%%MODELO%%::eliminar($%%PREFIJODATOS%%ELIMINAR)) {
                    \$n++;
                }
            endforeach;
            if (\$n == 0) {
                echo RespuestasSistema::error('No fue posible ELIMINAR. Contacte al centro TICS.');
            } else if (\$n == count($%%CONTROLADOR%%ParaEliminar)) {
                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');
        }
    }

php;

    const REACTIVAR = <<<php
    /**
     * 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() {
       $%%CONTROLADOR%%ParaActivar  = \$this->%%PREFIJODATOS%%SELECCIONADOS;
        if (count($%%CONTROLADOR%%ParaActivar)) {
            \$n = 0;
            foreach ($%%CONTROLADOR%%ParaActivar as $%%PREFIJODATOS%%ACTIVAR):
                if (%%MODELO%%::activar($%%PREFIJODATOS%%ACTIVAR)) {
                    \$n++;
                }
            endforeach;
            if (\$n == 0) {
                echo RespuestasSistema::error('No fue posible REACTIVAR. Contacte al centro TICS.');
            } else if (\$n == count($%%CONTROLADOR%%ParaActivar)) {
                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');
        }
    }

php;

    const DESACTIVAR = <<<php
    /**
     * 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() {
        $%%CONTROLADOR%%ParaDesactivar = \$this->%%PREFIJODATOS%%SELECCIONADOS;
        if (count($%%CONTROLADOR%%ParaDesactivar)) {
            \$n = 0;
            foreach ($%%CONTROLADOR%%ParaDesactivar as $%%PREFIJODATOS%%DESACTIVAR):
                if (%%MODELO%%::desactivar($%%PREFIJODATOS%%DESACTIVAR)) {
                    \$n++;
                }
            endforeach;
            if (\$n == 0) {
                echo RespuestasSistema::error('No fue posible DESACTIVAR. Contacte al centro TICS.');
            } else if (\$n == count($%%CONTROLADOR%%ParaDesactivar)) {
                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');
        }
    }

php;



    const PIECERA = <<<php
    
}
// Generado el %%FECHA_CREACION%%
php;



}

