<?php

/**
 * Descripción del Modelo de Datos Planes
 *
 * %%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\Planes
 * @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    201711200924
 * @link       http://sicam.ccsm.org.co/docs/modelos/datos/Planes
 */
 
class Planes extends ModeloDatos {

    const PENDIENTE = 'PENDIENTE';
    const PLANEACION  = 'EN PLANEACION';
    const APROBADO = 'APROBADO';
    const EJECUCION = 'EN EJECUCION';
    const TERMINADO  = 'TERMINADO';
    /**
     * Recibe el Identificador del registro de plan y 
     * devuelve un objeto con sus datos.
     * @param int $planID
     * @return Objeto plan
     */
    public static function datos($planID) {
        $sqlQuery = PlanesSQL::DATOS_BASICOS . " WHERE planID =  ? ; ";
        return SicamDB::selectUnaFila($sqlQuery, array($planID));
    }
    /**
     * Recibe el Identificador del registro de plan y 
     * devuelve un objeto con sus datos completos con todas sus relacion.
     * @param int $planID
     * @return Objeto plan
     */
    public static function datosCompletos($planID){
        
        $sqlQuery = PlanesSQL::DATOS . " WHERE CamaraPlanes.planID = ? ; ";
        $Plan = SicamDB::selectUnaFila($sqlQuery, array($planID));
        $Plan->Actividades = PlanesActividades::porPlan($planID);
        $Plan->Ingresos = PlanesIngresos::porPlan($planID);
        $Plan->Metas = Metas::porPlan($planID);
        $Plan->Total = PlanesOperaciones::presupuestoTotalPorPlan($planID);
        $Plan->TotalGastado = PlanesOperaciones::GastadoTotalPorPlan($planID);
        return $Plan;
    }
    /**
     * Devuelve todos los registros de planes, según el estado.
     * Si no se envia el estado devuelve todos los registros 
     * sin importar su estado.
     * @param String $planESTADO
     * @return Array de Objetos planes
     */
    public static function todos($planesESTADOS=null){
        $sqlQuery = PlanesSQL::DATOS_BASICOS;
        $datos = array();
        if(!is_null($planesESTADOS)){
            $sqlQuery .= ' WHERE PlanesEstados.planEstadoCODIGO = ?';
            array_push($datos, $planesESTADOS); 
        }
        return SicamDB::selectVariasFilas($sqlQuery, $datos);
    }
    /**
     * Devuelve los registros de planes en estado ACTIVO.
     * @return Array de Objetos planes
     */
    public static function activos() {
        return self::todos(self::ACTIVO);
    }  
    /**
     * Recibe Todos los datos de necesarios para la creación de un nuevo 
     * registro de planes.
     * @param int $categoriaID Identificador de la Categoria
     * @param String $planCODIGO Código de planes 
     * @param String $planTITULO Titulo de planes 
     * @param Texto $planDESCRIPCION Descripción de planes
     * @param Url $planURL Url del archivo asociado al planes
     * @param String $planESTADO Estado del registro de planes
     * @return int con el Identificador del Registro planes 
     */
    public static function guardar($vigenciaID, $planCODIGO, $planDESCRIPCION, $planEstadoID) {
        $sqlQuery = PlanesSQL::CREAR_REGISTRO;
        return SicamDB::insertFila($sqlQuery, array(
              $vigenciaID, $planCODIGO, $planDESCRIPCION,
              $planEstadoID, 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 $planID Identificador del Registro de planes
     * @param int $categoriaID Identificador de la Categoria
     * @param String $planCODIGO Código de planes 
     * @param String $planTITULO Titulo de planes 
     * @param Texto $planDESCRIPCION Descripción de planes
     * @param Url $planURL Url del archivo asociado al planes
     * @param String $planESTADO Estado del registro de planes
     * @return int cantidad de registros actualziados en la operacion
     */
    public static function actualizar($planID, $vigenciaID, $planCODIGO, $planDESCRIPCION, $planEstadoID) {
        $sqlQuery = PlanesSQL::ACTUALIZAR_REGISTRO;
        return SicamDB::actualizarFila($sqlQuery, array(
              $vigenciaID, $planCODIGO,
              $planDESCRIPCION, $planEstadoID,
              Cliente::usuarioID(), $planID
                )
        );
    }
        /**
     * Recibe un identificador de planes y elimina el registro.
     * @param int $planID Identificador del registro
     * ha eliminar.
     * @return int Cantidad de registros eliminados
     */
    public static function eliminar($planID) {
        $sqlQuery = planesSQL::ELIMINAR_REGISTRO;
        return SicamDB::actualizarFila($sqlQuery, array($planID));
    }
    /**
     * Recibe un identificador de planes y reactiva el registro.
     * @param int $planID Identificador del registro
     * @return int Cantidad de registros reactivados
     */
    public static function reactivar($planID) {
        return self::cambiarEstado(self::ACTIVO, $planID);
    }
    /**
     * Recibe un identificador y el Estado y actualiza el estado del registro
     * @param String $planESTADO Nuevo estado del registro.
     * @param int $planID Identificador del registro
     * @return int Cantidad de registros desactivados
     */
    public static function cambiarEstado($planESTADO, $planID) {
        $sqlQuery = PlanesSQL::ACUALIZAR_ESTADO;
        return SicamDB::actualizarFila($sqlQuery, array($planESTADO, $planID));
    }
    /**
     * Recibe un identificador de planes y desactiva el registro.
     * @param int $planID Identificador del registro
     * @return int Cantidad de registros desactivados
     */
    public static function desactivar($planID) {
        return self::cambiarEstado(self::DESACTIVO, $planID);
    }
    
    /**
     * Recibe el Identificador del registro de plan y 
     * devuelve un objeto con sus datos completos con todas sus relaciones.
     * @param int $planID
     * @return Objeto plan
     */
    public static function datosCompletosTodos($planID){
        $Plan = self::datos($planID);
        $Plan->Total = PlanesOperaciones::presupuestoTotalPorPlan($planID);
        $Plan->PlanesTipos = TiposPlanes::todos();
        foreach ($Plan->PlanesTipos as $tipoPlan):
            $tipoPlan->Programas = PlanesProgramas::delPlanYTipoPlan($planID,$tipoPlan->tipoPlanID);
            $tipoPlan->Total = PlanesOperaciones::presupuestoTotalPorPlanyTipoPlan($planID, $tipoPlan->tipoPlanID);
            foreach($tipoPlan->Programas as $programa):
                $programa->Acciones = Acciones::delPrograma($programa->programaID, $tipoPlan->tipoPlanID);
                $programa->Total = PlanesOperaciones::presupuestoTotalPorPrograma($programa->programaID, $tipoPlan->tipoPlanID);
                foreach($programa->Acciones as $accion):
                    $accion->Actividades = PlanesActividades::delaAccion($accion->accionID, $tipoPlan->tipoPlanID);
                    $accion->Total = PlanesOperaciones::presupuestoTotalPorAccion($accion->accionID, $tipoPlan->tipoPlanID);
                    foreach($accion->Actividades as $actividad):
                        $actividad->Total = PlanesOperaciones::presupuestoTotalPorActividadyTipoPlan($actividad->actividadID, $tipoPlan->tipoPlanID);
                    endforeach;
                endforeach;
            endforeach;
        endforeach;
        return $Plan;
    }
    
    
}
// Generado el 2017-11-20 09:24:08:000000
