<?php

/**
 * Descripción del Controlador %%TMPL_CONTROL%%
 * 
 * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. 
 * Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. 
 * 
 * @package Constructor\Controlador
 * @license GPL
 * @author Generado por SICAM
 */
class GestionAdquisicionesControlador extends Controladores {

    /**
     * Función para ser consumida desde la API
     * @api
     * @return JSON Datos de todos los %%TMPL_CONTROL%%
     */
    function todos($request, $response, $args = array()) {
        Api::ejecutarGet($request, GestionAdquisiciones::todos());
    }

    /**
     * Vista que se encarga de organizar la forma de presentar 
     * los registros de GestionAdquisiciones al usuario.
     * @return HTML Listado de GestionAdquisiciones.
     */
    function mostrarTodos() {
        Vistas::mostrar('planeador', 'gestionadquisiciones/listado');
    }

    /**
     * Permite mostrar en forma de tabla los registros de %%TMPL_CONTROL%%.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListado() {
        $GestionAdquisiciones = GestionAdquisiciones::todos();
        Vistas::mostrar('planeador', 'gestionadquisiciones/tbl-GestionAdquisiciones', array(
          'GestionAdquisiciones' => $GestionAdquisiciones));
    }

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

    /**
     * Recibe el ID del %%TMPL_CONTROL%% 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 %%TMPL_CONTROL%%
     * @return HTML Formulario con los datos del %%TMPL_CONTROL%% a editar.
     */
    function mostrarFormularioEditar() {
        $GestionAdquisiciones = GestionAdquisiciones::datos($this->GestionAdquisicionesID);
        $this->mostrarFormulario($GestionAdquisiciones);
    }

    /**
     * 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 %%TMPL_CONTROL%% cuando se esta editando.
     * @return HTML Vista del Formulario de %%TMPL_CONTROL%%
     */
    private function mostrarFormulario($GestionAdquisiciones = null) {
        Vistas::mostrar('planedor', 'gestionadquisiciones/form-GestionAdquisiciones', array(
          'GestionAdquisiciones' => $GestionAdquisiciones
        ));
    }

    /**
     * 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() {
        $carpeta%%TMPL_CONTROL%% = '%%TMPL_COMPONENTE%%/%%TMPL_CONTROL%%s/';
        $this->urlARCHIVO    = $this->recibirArchivos(
            $this->archivoENVIADO, DIR_ARCHIVOS . $carpeta%%TMPL_CONTROL%%, uniqid('%%TMPL_CONTROL%%-') . "." . Archivos::extension($this->archivoENVIADO)
        );
        if (empty($this->%%TMPL_CONTROL%%ID)) {
            echo $this->guardarNuevo();
        } else {
            echo $this->guardarCambios();
        }
    }

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

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

    /**
     * Toma el archivo enviado y lo mueve a la ubicacion y con el nombre enviado.
     * @param String $archivoRECIBIDO archivo enviado por POST
     * @param String $carpetaMOVIDO Carpeta donde se debe guardar el archivo
     * @param String $nuevoNOMBRE   Nombre con el que se va ha lamacenar el archivo
     * @return String Ruta WEB o URL de donde fue guardado el archivo recibido.
     * 
     * @author [Juan Pablo Llinás Ramírez] [jpllinas@ccsm.org.co]
     */
    private function recibirArchivos($archivoRECIBIDO, $carpetaMOVIDO, $nuevoNOMBRE) {
        if (!empty($archivoRECIBIDO)) {
            $archivoMovido = Archivos::moverArchivoRecibido($archivoRECIBIDO, $carpetaMOVIDO, $nuevoNOMBRE);
            if ($archivoMovido) {
                return URL_ARCHIVOS . $carpetaMOVIDO . $nuevoNOMBRE;
            }
        }
        return null;
    }

    /**
     * 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() {
        $this->operacionConSoloID('eliminar');
    }

    /**
     * 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() {
        $this->operacionConSoloID('reactivar');
    }

    /**
     * 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() {
        $this->operacionConSoloID('desactivar');
    }

    /**
     * Se identificó que la forma de tratar las operaciones que solo necesitan 
     * un id para ejecutar se pueden todas tratar como en esta funcion
     * @return RespuestasSistema Resultado de la Operacion que se envia al cliente
     */
    private function operacionConSoloID($operacionMODELO) {
        $%%TMPL_CONTROL%%ParaEliminar = $this->checks_%%TMPL_CONTROL%%;
        if (count($%%TMPL_CONTROL%%ParaEliminar)) {
            $n = 0;
            foreach ($%%TMPL_CONTROL%%ParaEliminar as $%%TMPL_CONTROL%%ELIMINAR):
                if (%%TMPL_MODELO%%::$operacionMODELO($%%TMPL_CONTROL%%ELIMINAR)) {
                    $n++;
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible realizar la OPERACION [' . strtoupper($operacionMODELO) . ']. Contacte al centro TICS.');
            } else if ($n == count($%%TMPL_CONTROL%%ParaEliminar)) {
                echo RespuestasSistema::exito('Se realizó la OPERACION [' . strtoupper($operacionMODELO) . '] exitosamente!');
            } else {
                echo RespuestasSistema::error('Hubo un error al  [' . strtoupper($operacionMODELO) . '] alguno de los registros. Verifica los datos, o contacta al centro TICS.');
            }
        } else {
            echo RespuestasSistema::error('No llegarón los datos para  [' . strtoupper($operacionMODELO) . ']. Contacta al centro TICS');
        }
    }

    /**
     * Vista que se encarga de mostrar todos los detalles/datos asociados a 
     * los registros de %%TMPL_CONTROL%%.
     * @return HTML Datos e información de %%TMPL_CONTROL%%.
     */
    function verDetalles() {
        $%%TMPL_CONTROL%% = %%TMPL_MODELO%%::datos($this->%%TMPL_CONTROL%%ID);
        Vistas::mostrar('%%TMPL_COMPONENTE%%', '%%TMPL_CONTROL%%s/ver-%%TMPL_CONTROL%%', array(
          '%%TMPL_CONTROL%%' => $%%TMPL_CONTROL%%));
    }

}

