<?php

/**
 * Descripción del Modelo de Datos PlanesOperaciones
 *
 * %%DESC_MODELO%%
 *
 * 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    Modelos\Datos\PlanesOperaciones
 * @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/modelos/datos/PlanesOperaciones
 */
 
class RevisionTecnicaOperaciones extends ModeloDatos {

    const PENDIENTE     = 'PENDIENTE';
    const NEGOCIACION  = 'NEGOCIACION';
    const APROBADO = 'APROBADO';
    const TECNICA     = 'TECNICA';
    const FINANCIERA     = 'FINANCIERA';
    
    
    /**
     * Recibe el Identificador del registro de RevisionTecnicaOperacion y 
     * devuelve un objeto con sus datos.
     * @param int $planOperacionID
     * @return Objeto RevisionTecnicaOperacion
     */
    public static function datos($planOperacionID, $tipoRevision) {
        $sqlQuery = RevisionTecnicaOperacionesSQL::DATOS_COMPLETOS . " WHERE PlanesOperacionesComentariosRevisiones.planOperacionID =  ? AND comentarioRevisionTIPO = ? ; ";
        return SicamDB::selectVariasFilas($sqlQuery, array($planOperacionID, $tipoRevision));
    }
    /**
     * Recibe el Identificador del registro de RevisionTecnicaOperacion y 
     * devuelve un objeto con sus datos completos con todas sus relacion.
     * @param int $planOperacionID
     * @return Objeto RevisionTecnicaOperacion
     */
    public static function datosCompletos($planOperacionID) {
        $sqlQuery = PlanesOperacionesSQL::DATOS_COMPLETOS . " WHERE planOperacionID =  ? ; ";
        $RevisionTecnicaOperacion = SicamDB::selectUnaFila($sqlQuery, array($planOperacionID));
        $RevisionTecnicaOperacion->Items = Items::delRevisionTecnicaOperacion($planOperacionID);
        $RevisionTecnicaOperacion->Usuario = Usuarios::datos($RevisionTecnicaOperacion->planOperacionUSRCREO);
        return $RevisionTecnicaOperacion;
    }
    
    /**
     * Devuelve todos los registros de RevisionTecnicaOperaciones Pendientes 
     * para un colaborador, según el estado.
     * Si no se envia el estado devuelve todos los registros 
     * sin importar su estado.
     * @param Int $colaboradorID
     * @param String $estadoOperacionID
     * @return Array de Objetos RevisionTecnicaOperaciones
     */
    public static function pendientesColaborador($colaboradorID, $estadoOperacionID = null) {
        $datos    = array();
        $sqlQuery = RevisionTecnicaOperacionesSQL::DATOS_BASICOS;
        $sqlQuery .= " WHERE CamaraColaboradores.colaboradorID = ? ";
        array_push($datos, $colaboradorID);
        if (!is_null($estadoOperacionID)) {
            $sqlQuery .= " AND PlanesOperaciones.estadoOperacionID = ? ";
            array_push($datos, $estadoOperacionID);
        }
        return SicamDB::selectVariasFilas($sqlQuery, $datos);
    }
    
    /**
     * Devuelve todos los registros de RevisionTecnicaOperaciones Pendientes 
     * para un colaborador, según el estado.
     * Si no se envia el estado devuelve todos los registros 
     * sin importar su estado.
     * @param Int $colaboradorID
     * @param String $estadoOperacionID
     * @return Array de Objetos RevisionTecnicaOperaciones
     */
    public static function pendientesCargo($cargoID, $estadoOperacionID = null) {
        $datos    = array();
        $sqlQuery = RevisionTecnicaOperacionesSQL::DATOS_BASICOS;
        $sqlQuery .= " WHERE PlanesOperacionesClases.claseOperacionCARGOREVISION = ? AND PlanesOperaciones.planOperacionESTADOREVISIONTECNICA != 'APROBADO'";
        array_push($datos, $cargoID);
        if (!is_null($estadoOperacionID)) {
            $sqlQuery .= " AND PlanesOperaciones.estadoOperacionID = ? ";
            array_push($datos, $estadoOperacionID);
        }
        return SicamDB::selectVariasFilas($sqlQuery, $datos);
    }
    
    
    /**
     * Devuelve todos los registros de RevisionTecnicaOperaciones, según el estado.
     * Si no se envia el estado devuelve todos los registros 
     * sin importar su estado.
     * @param String $estadoOperacionID
     * @return Array de Objetos RevisionTecnicaOperaciones
     */
    public static function todos($estadoOperacionID = null) {
        $datos    = array();
        $sqlQuery = RevisionTecnicaOperacionesSQL::DATOS_BASICOS;
        if (!is_null($estadoOperacionID)) {
            $sqlQuery .= " WHERE PlanesOperaciones.estadoOperacionID = ? ";
            array_push($datos, $estadoOperacionID);
        }
        $sqlQuery .= " ORDER BY planOperacionFCHCREADA ASC ";
        return SicamDB::selectVariasFilas($sqlQuery, $datos);
    }
    /**
     * Devuelve los registros de RevisionTecnicaOperaciones en estado ACTIVO.
     * @return Array de Objetos RevisionTecnicaOperaciones
     */
    public static function activos() {
        return self::todos(self::ACTIVO);
    }  
    /**
     * Recibe Todos los datos de necesarios para la creación de un nuevo 
     * registro de RevisionTecnicaOperaciones.
     * @param int $categoriaID Identificador de la Categoria
     * @param String $planOperacionCODIGO Código de RevisionTecnicaOperaciones 
     * @param String $planOperacionTITULO Titulo de RevisionTecnicaOperaciones 
     * @param Texto $planOperacionDESCRIPCION Descripción de RevisionTecnicaOperaciones
     * @param Url $planOperacionURL Url del archivo asociado al RevisionTecnicaOperaciones
     * @param String $estadoOperacionID Estado del registro de RevisionTecnicaOperaciones
     * @return int con el Identificador del Registro RevisionTecnicaOperaciones 
     */
    public static function guardar($categoriaID, $planOperacionCODIGO, $planOperacionTITULO, $planOperacionDESCRIPCION, $planOperacionURL, $estadoOperacionID) {
        $sqlQuery = PlanesOperacionesSQL::CREAR_REGISTRO;
        return SicamDB::insertFila($sqlQuery, array(
              $categoriaID, $planOperacionCODIGO, $planOperacionTITULO, $planOperacionDESCRIPCION,
              $planOperacionURL, $estadoOperacionID, Cliente::usuarioID()
                )
        );
    }
    /**
     * Recibe los todos los datos del registro para ser actualizados, junto con
     * el identificador del registro que se va ha actualizar.
     * @param int $planOperacionID Identificador del Registro de RevisionTecnicaOperaciones
     * @param int $categoriaID Identificador de la Categoria
     * @param String $planOperacionCODIGO Código de RevisionTecnicaOperaciones 
     * @param String $planOperacionTITULO Titulo de RevisionTecnicaOperaciones 
     * @param Texto $planOperacionDESCRIPCION Descripción de RevisionTecnicaOperaciones
     * @param Url $planOperacionURL Url del archivo asociado al RevisionTecnicaOperaciones
     * @param String $estadoOperacionID Estado del registro de RevisionTecnicaOperaciones
     * @return int cantidad de registros actualziados en la operacion
     */
    public static function actualizar($planOperacionCOMENTARIOSREVISIONTECNICA, $planOperacionESTADOREVISIONTECNICA, $planOperacionID) {
        $sqlQuery = RevisionTecnicaOperacionesSQL::ACTUALIZAR_REGISTRO;
        return SicamDB::actualizarFila($sqlQuery, array( Cliente::usuarioID(), $planOperacionCOMENTARIOSREVISIONTECNICA, $planOperacionESTADOREVISIONTECNICA, Cliente::usuarioID() ,$planOperacionID));
    }
    
        /**
     * Recibe un identificador de RevisionTecnicaOperaciones y elimina el registro.
     * @param int $planOperacionID Identificador del registro
     * ha eliminar.
     * @return int Cantidad de registros eliminados
     */
    public static function eliminar($planOperacionID) {
        $sqlQuery = RevisionTecnicaOperacionesSQL::ELIMINAR_REGISTRO;
        return SicamDB::actualizarFila($sqlQuery, array($planOperacionID));
    }
    /**
     * Recibe un identificador de RevisionTecnicaOperaciones y reactiva el registro.
     * @param int $planOperacionID Identificador del registro
     * @return int Cantidad de registros reactivados
     */
    public static function reactivar($planOperacionID) {
        return self::cambiarEstado(self::ACTIVO, $planOperacionID);
    }
    /**
     * Recibe un identificador y el Estado y actualiza el estado del registro
     * @param String $estadoOperacionID Nuevo estado del registro.
     * @param int $planOperacionID Identificador del registro
     * @return int Cantidad de registros desactivados
     */
    public static function cambiarEstado($estadoOperacionID, $planOperacionID) {
        $sqlQuery = PlanesOperacionesSQL::ACUALIZAR_ESTADO;
        return SicamDB::actualizarFila($sqlQuery, array($estadoOperacionID, $planOperacionID));
    }
    /**
     * Recibe un identificador de RevisionTecnicaOperaciones y desactiva el registro.
     * @param int $planOperacionID Identificador del registro
     * @return int Cantidad de registros desactivados
     */
    public static function desactivar($planOperacionID) {
        return self::cambiarEstado(self::DESACTIVO, $planOperacionID);
    }
    
    public static function negociar($planOperacionID, $comentario, $tipoRevision) {
        $sqlQuery = RevisionTecnicaOperacionesSQL::CREAR_COMENTARIO;
        return SicamDB::insertFila($sqlQuery, array(
              $planOperacionID, $comentario, $tipoRevision, Cliente::usuarioID()
                )
        );
    }
    
}
// Generado el 2017-11-17 03:15:22:000000

