<?php

/**
 * Descripción del Controlador OperacionesPredefinidas
 *
 * OperacionPredefinida
 *
 * 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    201711140213
 * @link       http://sicam.ccsm.org.co/docs/planeador/OperacionesPredefinidas
 */
 
class OperacionesPredefinidasControlador extends Controladores { 
    /**
     * Vista que se encarga de mostrar todos los detalles/datos asociados a 
     * los registros de PlanesOperacionesPredefinidas.
     * @return HTML Datos e información de PlanesOperacionesPredefinidas.
     */
    function verDetalles() {
        $OperacionPredefinida = PlanesOperacionesPredefinidas::datos($this->operacionPredefinidaID);
        Vistas::mostrar('planeador', 'operacionespredefinidas/ver-detalles', array('OperacionPredefinida' => $OperacionPredefinida));
    }
    /**
     * Vista que se mostrar una lista con las operacion y que cuando 
     * se haga clic se ejecute una accion     * 
     * @return HTML Datos e información de PlanesOperacionesPredefinidas.
     */
    function listadoOperacionesSeleccionable() {
        Vistas::mostrar('planeador', 'operacionespredefinidas/lst-sel-operaciones',
            array("operacionesPredefinidas" =>  PlanesOperacionesPredefinidas::paraListas(),)
        );
    }
    /**
     * Vista que se encarga de organizar la forma de presentar 
     * los registros de PlanesOperacionesPredefinidas al usuario.
     * @return HTML Listado de PlanesOperacionesPredefinidas.
     */
    function mostrarTodos() {
        Vistas::mostrar('planeador', 'operacionespredefinidas/lst-todos');
    }
    /**
     * Permite mostrar en forma de tabla los registros de OperacionesPredefinidas.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListado() {
        $OperacionesPredefinidas = PlanesOperacionesPredefinidas::todas();
        Vistas::mostrar('planeador', 'operacionespredefinidas/tbl-todos', 
            array( 'operacionesPredefinidas' => $OperacionesPredefinidas)
        );
    }
    
    function tablaListadoOperaciones() {
        $operacionesPredefinidas = PlanesOperacionesPredefinidas::porActividadPreconfigurada($this->actividadPreconfiguradaID);
        Vistas::mostrar('planeador', 'operacionespredefinidas/tbl-operaciones-actividadpreconfigurada', 
            array( 'operacionesPredefinidas' => $operacionesPredefinidas)
        );
    }
    
    function tablaListadoAdquisiciones(){
        $operacionesPredefinidas = PlanesOperacionesPredefinidas::porTipoOperacion(PlanesOperacionesTipos::ADQUISICION);
        Vistas::mostrar('planeador', 'operacionespredefinidas/tbl-adquisiciones', 
            array( 'operacionesPredefinidas' => $operacionesPredefinidas)
        );
    }
    
    function tablaListadoTareas(){
        $operacionesPredefinidas = PlanesOperacionesPredefinidas::porTipoOperacion(PlanesOperacionesTipos::TAREA);
        Vistas::mostrar('planeador', 'operacionespredefinidas/tbl-tareas', 
            array( 'operacionesPredefinidas' => $operacionesPredefinidas)
        );
    }
    
    
    /**
     * Permite mostrar en forma de tabla los registros de OperacionesPredefinidas sencilla.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaTodasSencilla(){
        $operacionesPredefinidas = PlanesOperacionesPredefinidas::todas();
        Vistas::mostrar("planeador", "operacionespredefinidas/tbl-operacionesSencilla",array('operacionesPredefinidas' => $operacionesPredefinidas));
    }
    /**
     * Responde con el formulario de OperacionesPredefinidas vacio, solo datos necesarios.
     * LLama a la función que devuleve el formulario pero 
     * sin enviarle los datos de OperacionesPredefinidas.  
     * Esta función se crea para poder gestionar el permiso de NUEVO OperacionesPredefinidas
     * @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() {
        SicamDB::iniciarTransaccion();
        $creadoID = PlanesOperacionesPredefinidas::guardar(
            ( empty($this->rubro) ? null : $this->rubro ) ,
            ( empty($this->centrocostos) ? null : $this->centrocostos ),
            $this->tipoOperacionID,
            ( empty($this->claseoperacion) ? null : $this->claseoperacion ),
            Consecutivos::usar('OPERACIONESPREDEFINIDAS', 'OPR'),
            $this->titulo,
            $this->descripcion
        );
        if ($creadoID) {
            SicamDB::grabarTransaccion();
            return RespuestasSistema::exito("Se realizó la OPERACION [GUARDAR] exitosamente!");
        } else {
            SicamDB::cancelarTransaccion();
            return RespuestasSistema::fallo("No se pudo CREAR el nuevo OperacionesPredefinidas. Si vuelve a suceder, contacte con el Centro TICS.");
        }
    }
    /**
     * Recibe el ID del OperacionesPredefinidas 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 OperacionesPredefinidas
     * @return HTML Formulario con los datos del OperacionesPredefinidas a editar.
     */
    function mostrarFormularioEditar() {
        $OperacionPredefinida = PlanesOperacionesPredefinidas::datosCompletos($this->OperacionPredefinidaID);
        $this->mostrarFormulario($OperacionPredefinida);
    }
    /**
     * Función que toma los datos enviados y actualiza el registro
     * @return RespuestasSistema 
     */
    private function guardarCambios() {
        $OperacionesPredefinidas = PlanesOperacionesPredefinidas::datos($this->OperacionPredefinidaID);
        $actualizado = PlanesOperacionesPredefinidas::actualizar(
                $this->OperacionPredefinidaID,
                ( empty($this->rubro) ? null : $this->rubro ) ,
                ( empty($this->centrocostos) ? null : $this->centrocostos ),
                $this->tipoOperacionID,
                ( empty($this->claseoperacion) ? null : $this->claseoperacion ),
                $this->codigo,
                $this->titulo,
                $this->descripcion
        );
        if ($actualizado) {
            return RespuestasSistema::exito("Se realizó la OPERACION [ACTUALIZAR] exitosamente!");
        } else {
            return RespuestasSistema::fallo("No se actualizó el OperacionesPredefinidas. 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 OperacionesPredefinidas cuando se esta editando.
     * @return HTML Vista del Formulario de OperacionesPredefinidas
     */
    private function mostrarFormulario($OperacionPredefinida = null) {
        Vistas::mostrar('planeador', 'operacionespredefinidas/form-OperacionesPredefinidas', array(
          'Rubros' => Rubros::todos(),
          'CentrosCostos'     => CentroCostos::todos(),
          'TiposOperaciones'   => PlanesOperacionesTipos::todos(),
          'ClaseOperaciones' => ClaseOperaciones::todos(),
          'objOperPredef' =>$OperacionPredefinida
        ));
    }
    /**
     * 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->OperacionPredefinidaID)) {
            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() {
        $OperacionesPredefinidasParaEliminar = $this->checkb;
        if (count($OperacionesPredefinidasParaEliminar)) {
            $n = 0;
            foreach ($OperacionesPredefinidasParaEliminar as $operacionPredefinidaELIMINAR):
                $Asociado = PlanesTiposActividadesPredefinidas::porOperacionPredefinida($operacionPredefinidaELIMINAR);
                if($Asociado==null){
                    if (PlanesOperacionesPredefinidas::eliminar($operacionPredefinidaELIMINAR)) {
                        $n++;
                    }
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible ELIMINAR. Contacte al centro TICS.');
            } else if ($n == count($OperacionesPredefinidasParaEliminar)) {
                echo RespuestasSistema::exito('Se realizó la OPERACION [ELIMINAR] exitosamente!');
            } else {
                echo RespuestasSistema::error('Hubo un error al  [ELIMINAR] alguno de los registros. verifique que la/las Operaciones No estés asociadas a Una Actividad Preconfigurada, 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() {
       $OperacionesPredefinidasParaActivar  = $this->operacionPredefinidaSELECCIONADOS;
        if (count($OperacionesPredefinidasParaActivar)) {
            $n = 0;
            foreach ($OperacionesPredefinidasParaActivar as $operacionPredefinidaACTIVAR):
                if (PlanesOperacionesPredefinidas::activar($operacionPredefinidaACTIVAR)) {
                    $n++;
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible REACTIVAR. Contacte al centro TICS.');
            } else if ($n == count($OperacionesPredefinidasParaActivar)) {
                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() {
        $OperacionesPredefinidasParaDesactivar = $this->operacionPredefinidaSELECCIONADOS;
        if (count($OperacionesPredefinidasParaDesactivar)) {
            $n = 0;
            foreach ($OperacionesPredefinidasParaDesactivar as $operacionPredefinidaDESACTIVAR):
                if (PlanesOperacionesPredefinidas::desactivar($operacionPredefinidaDESACTIVAR)) {
                    $n++;
                }
            endforeach;
            if ($n == 0) {
                echo RespuestasSistema::error('No fue posible DESACTIVAR. Contacte al centro TICS.');
            } else if ($n == count($OperacionesPredefinidasParaDesactivar)) {
                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 = PlanesOperacionesPredefinidas::datos($this->operacionPredefinidaID);
        echo RespuestasSistema::exito('', $operacion);
    }
}
// Generado el 2017-11-14 02:13:22:000000
