<?php

/**
 * Descripción del Modelo de Datos PlanesProgramas
 *
 * %%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\PlanesProgramas
 * @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    201711081137
 * @link       http://sicam.ccsm.org.co/docs/modelos/datos/PlanesProgramas
 */
 
class PlanesProgramas extends ModeloDatos {
    
    const CONSTRUCCION     = 'CONSTRUCCION';
    const INICIADO     = 'INICIADO';
    const TERMINADO     = 'TERMINADO';
    const CANCELADO  = 'CANCELADO';
    const SUSPENDIDO = 'SUSPENDIDO';
    /**
     * Recibe el Identificador del registro de Programa y 
     * devuelve un objeto con sus datos.
     * @param int $programaID
     * @return Objeto Programa
     */
    public static function datos($programaID) {
        $sqlQuery = PlanesProgramasSQL::DATOS_BASICOS . " WHERE programaID =  ? ; ";
        return SicamDB::selectUnaFila($sqlQuery, array($programaID));
    }
    /**
     * Recibe el Identificador del registro de Programa y 
     * devuelve un objeto con sus datos completos con todas sus relacion.
     * @param int $programaID
     * @return Objeto Programa
     */
    public static function datosCompletos($programaID, $tipoPlanID = null) {
        $sqlQuery = PlanesProgramasSQL::DATOS_COMPLETOS . " WHERE PlanesProgramas.programaID =  ? ; ";
        $Programa = SicamDB::selectUnaFila($sqlQuery, array($programaID));
        if (!is_null($tipoPlanID)) {
            /*$Programa->Acciones = Acciones::delProgramaYTipoPlan($programaID, $tipoPlanID);
            foreach($Programa->Acciones as $accion):
                $accion->Metas = AccionesMetas::PorAccion($accion->accionID);
                $accion->Total = PlanesOperaciones::presupuestoTotalPorAccionyTipoPlan($accion->accionID, $tipoPlanID);
                $accion->TotalGastado =  PlanesOperacionesAvances::GastadoTotalPorAccion($accion->accionID, $tipoPlanID);
                $accion->FechaInicio = PlanesOperaciones::fechaTempranaPorAccion($accion->accionID, $tipoPlanID);
                $accion->FechaFinal = PlanesOperaciones::fechaTardiaPorAccion($accion->accionID, $tipoPlanID);
            endforeach;*/
            $Programa->Total = PlanesOperaciones::presupuestoTotalPorPrograma($programaID, $tipoPlanID);
            $Programa->TotalGastado = PlanesOperaciones::GastadoTotalPorPrograma($programaID, $tipoPlanID);
            $Programa->FechaInicio = PlanesOperaciones::fechaTempranaPorPrograma($programaID, $tipoPlanID);
            $Programa->FechaFinal = PlanesOperaciones::fechaTardiaPorPrograma($programaID, $tipoPlanID);
        }else{ 
            /*$Programa->Acciones = Acciones::delPrograma($programaID);
            foreach($Programa->Acciones as $accion):
                $accion->Metas = AccionesMetas::PorAccion($accion->accionID);
                $accion->Total = PlanesOperaciones::presupuestoTotalPorAccion($accion->accionID);
                $accion->TotalGastado =  PlanesOperacionesAvances::GastadoTotalPorAccion($accion->accionID);
                $accion->FechaInicio = PlanesOperaciones::fechaTempranaPorAccion($accion->accionID);
                $accion->FechaFinal = PlanesOperaciones::fechaTardiaPorAccion($accion->accionID);
            endforeach;*/
            $Programa->Total = PlanesOperaciones::presupuestoTotalPorPrograma($programaID);
            $Programa->TotalGastado = PlanesOperaciones::GastadoTotalPorPrograma($programaID);
            $Programa->FechaInicio = PlanesOperaciones::fechaTempranaPorPrograma($programaID);
            $Programa->FechaFinal = PlanesOperaciones::fechaTardiaPorPrograma($programaID);
        }
        /*$Programa->Objetivos = PlanesProgramasObjetivos::delPrograma($programaID);
        $Programa->Usuario = Usuarios::datos($Programa->programaUSRCREO);*/
        return $Programa;
    }
    /**
     * Devuelve todos los registros de Programas, según el estado.
     * Si no se envia el estado devuelve todos los registros 
     * sin importar su estado.
     * @param String $programaESTADO
     * @return Array de Objetos Programas
     */
    public static function todos($programaESTADO = null) {
        $datos    = array();
        $sqlQuery = PlanesProgramasSQL::DATOS_BASICOS;
        if (!is_null($programaESTADO)) {
            $sqlQuery .= " WHERE PlanesProgramas.estadoProgramaID = ? ORDER BY PlanesProgramas.estadoProgramaID";
            array_push($datos, $programaESTADO);
        }
        return SicamDB::selectVariasFilas($sqlQuery, $datos);
    }
    /**
     * Devuelve los registros de Programas en estado ACTIVO.
     * @return Array de Objetos Programas
     */
    public static function activos() {
        return self::todos(self::ACTIVO);
    }  
    /**
     * Recibe Todos los datos de necesarios para la creación de un nuevo 
     * registro de Programas.
     * @param int $categoriaID Identificador de la Categoria
     * @param String $programaCODIGO Código de Programas 
     * @param String $programaTITULO Titulo de Programas 
     * @param Texto $programaDESCRIPCION Descripción de Programas
     * @param Url $programaURL Url del archivo asociado al Programas
     * @param String $programaESTADO Estado del registro de Programas
     * @return int con el Identificador del Registro Programas 
     */
    public static function guardar($programaCODIGO, $programaTITULO, $programaDESCRIPCION, $programaJUSTIFICACION, $programaFCHINICIO, $programaFCHFINAL, $programaESTADO) {
        $sqlQuery = PlanesProgramasSQL::CREAR_REGISTRO;
        return SicamDB::insertFila($sqlQuery, array(
              $programaCODIGO, $programaTITULO, $programaDESCRIPCION, $programaJUSTIFICACION, $programaFCHINICIO, 
              $programaFCHFINAL, $programaESTADO,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 $programaID Identificador del Registro de Programas
     * @param int $categoriaID Identificador de la Categoria
     * @param String $programaCODIGO Código de Programas 
     * @param String $programaTITULO Titulo de Programas 
     * @param Texto $programaDESCRIPCION Descripción de Programas
     * @param Url $programaURL Url del archivo asociado al Programas
     * @param String $programaESTADO Estado del registro de Programas
     * @return int cantidad de registros actualziados en la operacion
     */
    public static function actualizar($programaID, $programaTITULO, $programaDESCRIPCION, $programaJUSTIFICACION, $programaFCHINICIO, $programaFCHFINAL, $programaESTADO) {
        $sqlQuery = PlanesProgramasSQL::ACTUALIZAR_REGISTRO;
        return SicamDB::actualizarFila($sqlQuery, array(
              $programaTITULO, $programaDESCRIPCION, $programaJUSTIFICACION, $programaFCHINICIO, 
              $programaFCHFINAL, $programaESTADO, Cliente::usuarioID(), $programaID
                )
        );
    }
        /**
     * Recibe un identificador de Programas y elimina el registro.
     * @param int $programaID Identificador del registro
     * ha eliminar.
     * @return int Cantidad de registros eliminados
     */
    public static function eliminar($programaID) {
        $sqlQuery = PlanesProgramasSQL::ELIMINAR_REGISTRO;
        return SicamDB::actualizarFila($sqlQuery, array($programaID));
    }
    /**
     * Recibe un identificador de Programas y reactiva el registro.
     * @param int $programaID Identificador del registro
     * @return int Cantidad de registros reactivados
     */
    public static function reactivar($programaID) {
        return self::cambiarEstado(self::ACTIVO, $programaID);
    }
    /**
     * Recibe un identificador y el Estado y actualiza el estado del registro
     * @param String $programaESTADO Nuevo estado del registro.
     * @param int $programaID Identificador del registro
     * @return int Cantidad de registros desactivados
     */
    public static function cambiarEstado($programaESTADO, $programaID) {
        $sqlQuery = PlanesProgramasSQL::ACUALIZAR_ESTADO;
        return SicamDB::actualizarFila($sqlQuery, array($programaESTADO, $programaID));
    }
    /**
     * Recibe un identificador de Programas y desactiva el registro.
     * @param int $programaID Identificador del registro
     * @return int Cantidad de registros desactivados
     */
    public static function desactivar($programaID) {
        return self::cambiarEstado(self::DESACTIVO, $programaID);
    }
    
    /**
     * Recibe los identificadores del plan y del tipo de plan.
     * @param int $planID Identificador del plan
     * @param int $tipoPlan Identificador del tipo del plan
     * @return int Cantidad de registros de programas
     */
    public static function delPlanYTipoPlan($planID,$tipoPlan) {
        $sqlQuery = PlanesProgramasSQL::LISTADO_PORPLAN_Y_TIPOPLAN 
        . " WHERE PlanesOperaciones.tipoPlanID = ? AND PlanesActividades.planID = ? GROUP BY PlanesProgramas.programaCODIGO; ";
        return SicamDB::selectVariasFilas($sqlQuery, array($tipoPlan, $planID));
    }
    
}
// Generado el 2017-11-08 11:37:25:000000

