<?php

/**
 * Descripción del Controlador RevisionTecnicaOperaciones
 *
 * RevisionTecnicaOperacion
 *
 * 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     JUAN PABLO LLINAS RAMIREZ <jpllinas@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    201711170315
 * @link       http://sicam.ccsm.org.co/docs/planeador/RevisionTecnicaOperaciones
 */
 
class RevisionTecnicaOperacionesControlador 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() {
        $RevisionTecnicaOperacion = PlanesOperaciones::datos($this->planOperacionID);
        Vistas::mostrar('planeador', 'revisiontecnicaoperaciones/ver-detalles', array('RevisionTecnicaOperacion' => $RevisionTecnicaOperacion));
    }
    /**
     * Vista que se encarga de organizar la forma de presentar 
     * los registros de PlanesOperaciones al usuario.
     * @return HTML Listado de PlanesOperaciones.
     */
    function mostrarPendientesColaborador() {
        Vistas::mostrar('planeador', 'revisiontecnicaoperaciones/lst-mispendientes');
    }
    /**
     * Permite mostrar en forma de tabla los registros de RevisionTecnicaOperaciones.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaPendientesColaborador() {
        $RevisionTecnicaOperaciones = RevisionTecnicaOperaciones::pendientesCargo( Cliente::cargoID(), '2' );
        Vistas::mostrar('planeador', 'revisiontecnicaoperaciones/tbl-todos', 
            array( 'RevisionTecnicaOperacion' => $RevisionTecnicaOperaciones )
        );
    }    
    
    function mostrarActivos() {
        Vistas::mostrar('planeador', 'revisiontecnicaoperaciones/lst-pendientes');
    }
    /**
     * Permite mostrar en forma de tabla los registros de RevisionTecnicaOperaciones.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
     
    function tablaPendientes() {
        $RevisionTecnicaOperaciones = RevisionTecnicaOperaciones::todos( '2' );
        Vistas::mostrar('planeador', 'revisiontecnicaoperaciones/tbl-mispendientes', 
            array( 'RevisionTecnicaOperaciones' => $RevisionTecnicaOperaciones )
        );
    }  
    
    /**
     * Vista que se encarga de organizar la forma de presentar 
     * los registros de los comentarios de revisión Financiera de las Operaciones.
     * @return HTML Listado de Comentarios.
     */
    function verComentarios(){
        $ComentariosRevisionTecnica = RevisionTecnicaOperaciones::datos($this->planOperacionID, RevisionTecnicaOperaciones::TECNICA);
        Vistas::mostrar('planeador', 'revisiontecnicaoperaciones/verComentarios', array( 'ComentariosRevisionTecnica' => $ComentariosRevisionTecnica) );
    }
    
    /**
     * 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', 'revisiontecnicaoperaciones/lst-todos');
    }
    /**
     * Permite mostrar en forma de tabla los registros de RevisionTecnicaOperaciones.  
     * @return HTML Formulario solo con datos inciales o necesarios.
     */
    function tablaListado() {
        $RevisionTecnicaOperaciones = RevisionTecnicaOperaciones::todos();
        Vistas::mostrar('planeador', 'revisiontecnicaoperaciones/tbl-todos', 
            array( 'RevisionTecnicaOperaciones' => $RevisionTecnicaOperaciones)
        );
    }
    
    
    /**
     * Responde con el formulario de RevisionTecnicaOperaciones vacio, solo datos necesarios.
     * LLama a la función que devuleve el formulario pero 
     * sin enviarle los datos de RevisionTecnicaOperaciones.  
     * Esta función se crea para poder gestionar el permiso de NUEVO RevisionTecnicaOperaciones
     * @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->RevisionTecnicaOperacionesCATEGORIA, 
                $this->RevisionTecnicaOperacionesCODIGO, $this->RevisionTecnicaOperacionesTITULO, 
                $this->RevisionTecnicaOperacionesDESCRIPCION, 
                $this->RevisionTecnicaOperacionesESTADO);
        if ($creadoID) {
            return RespuestasSistema::exito("Nuevo Registro CREADO con EXITO");
        } else {
            return RespuestasSistema::fallo("No se pudo CREAR el nuevo RevisionTecnicaOperaciones. Si vuelve a suceder, contacte con el Centro TICS.");
        }
    }
    /**
     * Recibe el ID del RevisionTecnicaOperaciones 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 RevisionTecnicaOperaciones
     * @return HTML Formulario con los datos del RevisionTecnicaOperaciones a editar.
     */
    function mostrarFormularioEditar() {
        $RevisionTecnicaOperaciones = PlanesOperaciones::datos($this->RevisionTecnicaOperacionesID);
        $this->mostrarFormulario($RevisionTecnicaOperaciones);
    }
    /**
     * Función que toma los datos enviados y actualiza el registro
     * @return RespuestasSistema 
     */
    private function guardarCambios() {
        $RevisionTecnicaOperaciones = PlanesOperaciones::datos($this->RevisionTecnicaOperacionesID);
        $actualizado = PlanesOperaciones::actualizar(
                $this->RevisionTecnicaOperacionesID, $this->RevisionTecnicaOperacionesCATEGORIA, 
                $this->RevisionTecnicaOperacionesCODIGO, $this->RevisionTecnicaOperacionesTITULO, 
                $this->RevisionTecnicaOperacionesDESCRIPCION, 
                $this->RevisionTecnicaOperacionesESTADO
        );
        if ($actualizado) {
            return RespuestasSistema::exito("Registro ACTUALIZADO con EXITO.");
        } else {
            return RespuestasSistema::fallo("No se actualizó el RevisionTecnicaOperaciones. 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 RevisionTecnicaOperaciones cuando se esta editando.
     * @return HTML Vista del Formulario de RevisionTecnicaOperaciones
     */
    private function mostrarFormulario($RevisionTecnicaOperaciones = null) {
        Vistas::mostrar('planeador', 'revisiontecnicaoperaciones/form-RevisionTecnicaOperaciones', array(
          'versionSICAM' => Parametros::valor('VERSIONSICAM'),
          'Vigencia'     => Vigencias::actual(),
          'Categorias'   => Categorias::todas(),
          'RevisionTecnicaOperaciones' => $RevisionTecnicaOperaciones
        ));
    }
    
    public function mostrarFormularioNegociar() {
         $RevisionTecnicaOperaciones = PlanesOperaciones::datos($this->RevisionTecnicaOperacionesID);
        Vistas::mostrar('planeador', 'revisiontecnicaoperaciones/frm-negociar', array(
          'RevisionTecnicaOperacion' => $RevisionTecnicaOperaciones
        ));
    }
    /**
     * 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->RevisionTecnicaOperacionesID)) {
            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() {
        $RevisionTecnicaOperacionesParaEliminar = $this->planOperacionSELECCIONADOS;
        if (count($RevisionTecnicaOperacionesParaEliminar)) {
            $n = 0;
            foreach ($RevisionTecnicaOperacionesParaEliminar 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($RevisionTecnicaOperacionesParaEliminar)) {
                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() {
       $RevisionTecnicaOperacionesParaActivar  = $this->planOperacionSELECCIONADOS;
        if (count($RevisionTecnicaOperacionesParaActivar)) {
            $n = 0;
            foreach ($RevisionTecnicaOperacionesParaActivar 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($RevisionTecnicaOperacionesParaActivar)) {
                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 PENDIENTE / NEGOCIACION / APROBADO el registro.     
     * @return RespuestasSistema Resultado de la Operacion
     */
    function negociar(){
        $Operacion = PlanesOperaciones::datos($this->operacionID); 
        $RevisionTecnicaOperacionesParaNegociar  = $this->operacionID;
        if (!empty($RevisionTecnicaOperacionesParaNegociar)) {
            $operacion = RevisionTecnicaOperaciones::negociar(
                $RevisionTecnicaOperacionesParaNegociar, $this->revisionCOMENTARIO, RevisionTecnicaOperaciones::TECNICA
                ); 
            if(!empty($operacion)) {
                PlanesOperaciones::actualizarEstadoRevisionTecnica($this->operacionID, RevisionTecnicaOperaciones::NEGOCIACION);
                Notificaciones::paraColaborador(
                    $Operacion->colaboradorID, Notificaciones::OPERACION, 
                    "Nuevo Comentario para ".$Operacion->planOperacionCODIGO,
                    "El encargado de la revision tecnica de la operacion ".$Operacion->planOperacionCODIGO." ha agregado un nuevo comentario. Por favor, revisalo y realiza los ajustes correspondientes." ,
                    "mostrarTodosPlanesOperacionesColaboradorPlaneador"
                );
                echo RespuestasSistema::exito('Se realizó la OPERACION [NEGOCIACION] exitosamente!');
            } else {
                echo RespuestasSistema::error('Hubo un error al  [NEGOCIACION] alguno de los registros. Verifica los datos, o contacta al centro TICS.');
            }
        } else {
            echo RespuestasSistema::error('No llegarón los datos para  [NEGOCIACION]. Contacta al centro TICS');
        }
    } 
    
    /**
     * Cambiar el estado de un registro de la base de datos.
     * Esta operacion cambia a estado PENDIENTE / NEGOCIACION / APROBADO el registro.     
     * @return RespuestasSistema Resultado de la Operacion
     */
    function aprobar(){
        $RevisionTecnicaOperacionesParaAprobar  = $this->operacionID;
        if (!empty($RevisionTecnicaOperacionesParaAprobar)) {
            $operacion = RevisionTecnicaOperaciones::actualizar($this->revisionCOMENTARIO, RevisionTecnicaOperaciones::APROBADO , $RevisionTecnicaOperacionesParaAprobar); 
            if(!empty($operacion)) { 
                echo RespuestasSistema::exito('Se realizó la OPERACION [NEGOCIACION] exitosamente!');
            } else {
                echo RespuestasSistema::error('Hubo un error al  [NEGOCIACION] alguno de los registros. Verifica los datos, o contacta al centro TICS.');
            }
        } else {
            echo RespuestasSistema::error('No llegarón los datos para  [NEGOCIACION]. Contacta al centro TICS');
        }
    } 
    
    function desactivar() {
        $RevisionTecnicaOperacionesParaDesactivar = $this->planOperacionSELECCIONADOS;
        if (count($RevisionTecnicaOperacionesParaDesactivar)) {
            $n = 0;
            foreach ($RevisionTecnicaOperacionesParaDesactivar 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($RevisionTecnicaOperacionesParaDesactivar)) {
                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');
        }
    }
    
}
// Generado el 2017-11-17 03:15:22:000000

