<?php

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

    const ACTIVO     = 'ACTIVO';
    const DESACTIVO  = 'DESACTIVO';
    const SUSPENDIDO = 'SUSPENDIDO';
    /**
     * Recibe el Identificador del registro de Actividad y 
     * devuelve un objeto con sus datos.
     * @param int $actividadID
     * @return Objeto Actividad
     */
    public static function datos($actividadID) {
        $sqlQuery = PlanesActividadesSQL::DATOS_BASICOS . " WHERE PlanesActividades.actividadID =  ? ; ";
        return SicamDB::selectUnaFila($sqlQuery, array($actividadID));
    }
    /**
     *  Recibe el Identificador del registro de Actividad y 
     * devuelve un objeto con sus datos completos con todas sus relacion.
     * @param int $actividadID
     * @return Objeto Actividad
     */
    public static function datosCompletos($actividadID, $tipoPlanID = null) {
        $Actividad = self::datos($actividadID);
        $Actividad->solicitudesPersonal = self::solicitudPersonal($actividadID);
        if (!is_null($tipoPlanID)) {
            //$Actividad->Operaciones =  PlanesOperaciones::delaActividadYTipoPlan($actividadID,$tipoPlanID);
            /*$Actividad->OperacionesAdquisicion =  PlanesOperaciones::delaActividadYTipoPlanYTipoOperacion($actividadID,$tipoPlanID,PlanesOperacionesTipos::ADQUISICION);
            foreach($Actividad->OperacionesAdquisicion as $adquisicion):
                $adquisicion->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorOperacion($actividadID,$adquisicion->planOperacionID, $tipoPlanID);
            endforeach;
            $Actividad->OperacionesTarea =  PlanesOperaciones::delaActividadYTipoPlanYTipoOperacion($actividadID,$tipoPlanID,PlanesOperacionesTipos::TAREA);
            if ($Actividad->OperacionesTarea) {
                foreach($Actividad->OperacionesTarea as $tarea):
                    $tarea->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorOperacion($actividadID,$tarea->planOperacionID, $tipoPlanID);
                endforeach;
            }*/
            $Actividad->Total = PlanesOperaciones::presupuestoTotalPorActividadyTipoPlan($actividadID, $tipoPlanID);
            $Actividad->TotalGastado = PlanesOperaciones::GastadoTotalPorActividad($actividadID, $tipoPlanID);
            $Actividad->FechaInicio = PlanesOperaciones::fechaTempranaPorActividad($actividadID, $tipoPlanID);
            $Actividad->FechaFinal = PlanesOperaciones::fechaTardiaPorActividad($actividadID, $tipoPlanID);
        }else{
            $Actividad->operaciones = self::operaciones($actividadID);
            /*$Actividad->OperacionesAdquisicion =  PlanesOperaciones::delaActividadPorTipo($actividadID,PlanesOperacionesTipos::ADQUISICION);
            foreach($Actividad->OperacionesAdquisicion as $adquisicion):
                $adquisicion->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorOperacion($actividadID, $adquisicion->planOperacionID);
            endforeach;
            $Actividad->OperacionesTarea =  PlanesOperaciones::delaActividadPorTipo($actividadID,PlanesOperacionesTipos::TAREA);
            if ($Actividad->OperacionesTarea) {
                foreach($Actividad->OperacionesTarea as $tarea):
                    $tarea->TotalGastado = PlanesOperacionesAvances::GastadoTotalPorOperacion($actividadID, $tarea->planOperacionID);
                endforeach;
            }*/
            $Actividad->Total = PlanesOperaciones::presupuestoTotalPorActividad($actividadID);
            $Actividad->TotalGastado = PlanesOperaciones::GastadoTotalPorActividad($actividadID);
            $Actividad->FechaInicio = PlanesOperaciones::fechaTempranaPorActividad($actividadID);
            $Actividad->FechaFinal = PlanesOperaciones::fechaTardiaPorActividad($actividadID);
            
        }
        //$Actividad->PlanesIngresos = PlanesIngresos::porActividad($actividadID);
        return $Actividad;
    }
    /**
     * Devuelve todos los registros de Actividades, según el estado.
     * Si no se envia el estado devuelve todos los registros 
     * sin importar su estado.
     * @param String $actividadESTADO
     * @return Array de Objetos Actividades
     */
    public static function todas($actividadESTADO = null) {
        $datos    = array();
        $sqlQuery = PlanesActividadesSQL::DATOS_BASICOS;
        if (!is_null($actividadESTADO)) {
            $sqlQuery .= " WHERE PlanesActividades.actividadESTADO = ? ";
            array_push($datos, $actividadESTADO);
        }
        return SicamDB::selectVariasFilas($sqlQuery, $datos);
        
    }
    /**
     * Devuelve los registros de Actividades en estado ACTIVO.
     * @return Array de Objetos Actividades
     */
    public static function activos() {
        return self::todos(self::ACTIVO);
    }  
    /**
     * Recibe Todos los datos de necesarios para la creación de un nuevo 
     * registro de Actividades.
     * @param int $categoriaID Identificador de la Categoria
     * @param String $actividadCODIGO Código de Actividades 
     * @param String $actividadTITULO Titulo de Actividades 
     * @param Texto $actividadDESCRIPCION Descripción de Actividades
     * @param Url $actividadURL Url del archivo asociado al Actividades
     * @param String $actividadESTADO Estado del registro de Actividades
     * @return int con el Identificador del Registro Actividades 
     */
    public static function guardar($accionID, $planID, $tipoActividadID, $actividadCODIGO, $actividadTITULO, $actividadDESCRIPCION, $actividadJUSTIFICACION, $actividadLOGROSESPERADOS, $actividadLUGAR, $actividadFCHINICIAL, $actividadFCHFINAL, $actividadINGRESOESPERADO, $actividadENCARGADO, $actividadMETA) {
        $sqlQuery = PlanesActividadesSQL::CREAR_REGISTRO;
        return SicamDB::insertFila($sqlQuery, array($accionID, $planID, $tipoActividadID, $actividadCODIGO, $actividadTITULO, $actividadDESCRIPCION, $actividadJUSTIFICACION, $actividadLOGROSESPERADOS, $actividadLUGAR, $actividadFCHINICIAL, $actividadFCHFINAL, $actividadINGRESOESPERADO, $actividadENCARGADO, $actividadMETA, 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 $actividadID Identificador del Registro de Actividades
     * @param int $categoriaID Identificador de la Categoria
     * @param String $actividadCODIGO Código de Actividades 
     * @param String $actividadTITULO Titulo de Actividades 
     * @param Texto $actividadDESCRIPCION Descripción de Actividades
     * @param Url $actividadURL Url del archivo asociado al Actividades
     * @param String $actividadESTADO Estado del registro de Actividades
     * @return int cantidad de registros actualziados en la operacion
     */
     
    public static function actualizar( $accionID, $planID, $actividadTITULO, $actividadDESCRIPCION, $actividadJUSTIFICACION , $actividadLOGROSESPERADOS,
      $actividadLUGAR , $actividadFCHINICIAL , $actividadFCHFINAL , $actividadINGRESOESPERADO , $actividadENCARGADO , $actividadMETA, $actividadID) {
        $sqlQuery = PlanesActividadesSQL::ACTUALIZAR_REGISTRO;
        return SicamDB::actualizarFila($sqlQuery, array(
                $accionID, $planID, $actividadTITULO, $actividadDESCRIPCION, $actividadJUSTIFICACION , $actividadLOGROSESPERADOS,
                $actividadLUGAR , $actividadFCHINICIAL , $actividadFCHFINAL , $actividadINGRESOESPERADO , 
                $actividadENCARGADO , $actividadMETA, Cliente::usuarioID() ,$actividadID)
        );
    }
        /**
     * Recibe un identificador de Actividades y elimina el registro.
     * @param int $actividadID Identificador del registro
     * ha eliminar.
     * @return int Cantidad de registros eliminados
     */
    public static function eliminar($actividadID) {
        $sqlQuery = PlanesActividadesSQL::ELIMINAR_REGISTRO;
        return SicamDB::actualizarFila($sqlQuery, array($actividadID));
    }
    /**
     * Recibe un identificador de Actividades y reactiva el registro.
     * @param int $actividadID Identificador del registro
     * @return int Cantidad de registros reactivados
     */
    public static function reactivar($actividadID) {
        return self::cambiarEstado(self::ACTIVO, $actividadID);
    }
    
    /**
     * Recibe un identificador y el Estado y actualiza el estado del registro
     * @param String $actividadESTADO Nuevo estado del registro.
     * @param int $actividadID Identificador del registro
     * @return int Cantidad de registros desactivados
     */
    public static function cambiarEstado($actividadESTADO, $actividadID) {
        $sqlQuery = PlanesActividadesSQL::ACUALIZAR_ESTADO;
        return SicamDB::actualizarFila($sqlQuery, array($actividadESTADO, $actividadID));
    }
    /**
     * Recibe un identificador de Actividades y desactiva el registro.
     * @param int $actividadID Identificador del registro
     * @return int Cantidad de registros desactivados
     */
    public static function desactivar($actividadID) {
        return self::cambiarEstado(self::DESACTIVO, $actividadID);
    }
    
    
    public static function solicitudPersonal($actividadID) {
        return SolicitudPersonal::delaActividad($actividadID);
    }
    
    public static function operaciones($actividadID) {
        return PlanesOperaciones::delaActividad($actividadID);
    }
    
    /**
     * Recibe el Identificador del registro de plan y 
     * devuelve un objeto con sus datos completos con todas sus relacion.
     * @param int $planID
     * @return Objeto Actividad
     */
    public static function porPlan($planID) {
        $sqlQuery = PlanesActividadesSQL::DATOS_POR_PLAN . " WHERE PlanesActividades.planID =  ? ; ";
        return  SicamDB::selectVariasFilas($sqlQuery, array($planID));
    }
    /**
     * Recibe el Identificador del registro de plan y de el tipo de Plan y
     * devuelve un objeto con sus datos completos con todas sus relacion.
     * @param int $planID
     * @return Objeto Actividad
     */
    public static function porPlanYTipo($planID, $tipoPlanID) {
        $sqlQuery = PlanesActividadesSQL::DATOS_POR_PLAN_Y_TIPOPLAN . " WHERE PlanesActividades.planID =  ? ; ";
        return  SicamDB::selectVariasFilas($sqlQuery, array($planID));
    }
    
    public static function delaAccion($accionID, $tipoPlanID = null) {
        if (!is_null($tipoPlanID)) {
            $sqlQuery = PlanesActividadesSQL::DATOS_POR_ACCION_Y_TIPOPLAN. "WHERE PlanesAcciones.accionID = ? AND PlanesOperaciones.tipoPlanID = ? GROUP BY PlanesActividades.actividadCODIGO ; ";
            return  SicamDB::selectVariasFilas($sqlQuery, array($accionID, $tipoPlanID));
        }else{
            $sqlQuery = PlanesActividadesSQL::DATOS_POR_ACCION. " WHERE PlanesActividades.accionID =  ? ; ";
            return  SicamDB::selectVariasFilas($sqlQuery, array($accionID));
        }
    }
    
     public static function porOperacionYPlan($actividadID, $planID) {
        $sqlQuery = PlanesActividadesSQL::DATOS_POR_OPERACION_Y_PLAN . " WHERE PlanesActividades.actividadID = ? AMD PlanesActividades.planID =  ? ; ";
        return  SicamDB::selectVariasFilas($sqlQuery, array($actividadID,$planID));
    }
    
    public static function registrarCambio($actividadID, $actividadCambioANTES) {
        $sqlQuery = PlanesActividadesSQL::CREAR_REGISTRO_CAMBIO;
        return SicamDB::insertFila($sqlQuery, array($actividadID, $actividadCambioANTES,  Cliente::usuarioID()));
    }
}
// Generado el 2017-11-12 09:44:22:000000
