/// <summary>
        /// Método que permite insertar 
        /// un nuevo registro en la tabla PaqueteActividad
        /// </summary>
        /// <param name="po_paqueteActividad">PaqueteActividad a insertar</param>
        /// <returns>Int valor del resultado de la ejecución de la sentencia</returns>
        public static int insertPaqueteActividad(cls_paqueteActividad po_paqueteActividad)
        {
            int vi_resultado;

            try
            {
                String vs_comando = "PA_cont_paquete_actividadInsert";
                cls_parameter[] vu_parametros =
                {
                    new cls_parameter("@paramPK_actividad", po_paqueteActividad.pActividad.pPK_Actividad),
                    new cls_parameter("@paramPK_paquete", po_paqueteActividad.pPaquete.pPK_Paquete),
                    new cls_parameter("@paramPK_componente", po_paqueteActividad.pComponente.pPK_componente),
                    new cls_parameter("@paramPK_entregable", po_paqueteActividad.pEntregable.pPK_entregable),
                    new cls_parameter("@paramPK_proyecto", po_paqueteActividad.pProyecto.pPK_proyecto)
                };

                cls_sqlDatabase.beginTransaction();

                vi_resultado = cls_sqlDatabase.executeNonQuery(vs_comando, true, vu_parametros);

                cls_interface.insertarTransacccionBitacora(cls_constantes.INSERTAR, cls_constantes.COMPONENTE_PAQUETE, po_paqueteActividad.pProyecto.pPK_proyecto + "/" + po_paqueteActividad.pEntregable.pPK_entregable + "/" + po_paqueteActividad.pComponente.pPK_componente + "/" + po_paqueteActividad.pPaquete.pPK_Paquete,po_paqueteActividad.pUsuarioTransaccion);

                cls_sqlDatabase.commitTransaction();

                return vi_resultado;

            }
            catch (Exception po_exception)
            {
                cls_sqlDatabase.rollbackTransaction();
                throw new Exception("Ocurrió un error al insertar el componente del paquete.", po_exception);
            }
        }
        /// <summary>
        /// Constructor de la clase cls_componente_paquete.
        /// </summary>
        public cls_componentePaquete()
        {
            this.proyecto = new cls_proyecto();
            this.entregable = new cls_entregable();
            this.componente = new cls_componente();
            this.paquete = new cls_paquete();
            this.paqueteActividad = new cls_paqueteActividad();

            this.paqueteList = new List<cls_paquete>();
            this.paqueteActividadList = new List<cls_paqueteActividad>();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="poProyecto"></param>
        /// <returns></returns>
        public static DataSet selectPaqueteActividad(cls_paqueteActividad po_paqueteActividad)
        {
            try
               {
               String vs_comando = "PA_cont_paqueteActividadSelect";
               cls_parameter[] vu_parametros = { new cls_parameter("@paramPK_proyecto", po_paqueteActividad.pProyecto.pPK_proyecto),
                                                 new cls_parameter("@paramPK_paquete", po_paqueteActividad.pPaquete.pPK_Paquete) };

               DataSet vu_dataSet = cls_sqlDatabase.executeDataset(vs_comando, true, vu_parametros);

               return vu_dataSet;
               }
               catch (Exception po_exception)
               {
               throw new Exception("Ocurrió un error al obtener el listado de las actividades asociadas a los paquetes.", po_exception);
               }
        }
        /// <summary>
        /// Evento para la eliminación de una actividad
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btn_removerActividad_Click(object sender, EventArgs e)
        {
            int paqueteSeleccionado;
            paqueteSeleccionado = Convert.ToInt32(lbx_paquetesasociados.SelectedValue.ToString());

            cls_paquete vo_paquete = new cls_paquete();
            vo_paquete.pPK_Paquete = paqueteSeleccionado;
            try
            {
                //Se recorre la lista de actividades asociadas
                for (int i = lbx_actasociadas.Items.Count - 1; i >= 0; i--)
                {
                    if (lbx_actasociadas.Items[i].Selected == true)
                    {
                        cls_actividad vo_actividad = new cls_actividad();
                        vo_actividad.pPK_Actividad = Convert.ToInt32(lbx_actasociadas.Items[i].Value.ToString());
                        vo_actividad.pNombre = lbx_actasociadas.Items[i].Text;

                        cls_paqueteActividad vo_paqueteActividad = new cls_paqueteActividad();

                        vo_paqueteActividad.pPaquete = vo_paquete;
                        vo_paqueteActividad.pActividad = vo_actividad;

                        //Se recorren los elementos de la lista de memoria
                        foreach (cls_componentePaquete compPaq in cls_variablesSistema.vs_proyecto.pComponentePaqueteListaMemoria)
                        {
                            if (cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Where(searchLinQ => searchLinQ.pPK_Entregable == compPaq.pPK_Entregable &&
                                                                                                             searchLinQ.pPK_Componente == compPaq.pPK_Componente &&
                                                                                                             searchLinQ.pPK_Paquete == vo_paquete.pPK_Paquete &&
                                                                                                             searchLinQ.pPK_Actividad == vo_actividad.pPK_Actividad).Count() > 0)
                            {
                                cls_variablesSistema.vs_proyecto.pActividadLista.RemoveAll(searchLinQ => searchLinQ.pPK_Actividad == vo_actividad.pPK_Actividad);
                                cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.RemoveAll(searchLinQ => searchLinQ.pPK_Paquete == vo_paquete.pPK_Paquete &&
                                                                                                                       searchLinQ.pPK_Actividad == vo_actividad.pPK_Actividad);
                            }
                        }

                        lbx_actividades.Items.Add(lbx_actasociadas.Items[i]);
                        ListItem li = lbx_actasociadas.Items[i];
                        lbx_actasociadas.Items.Remove(li);

                    }
                }

                //Si no se encuentra al menos un elemento, no se habilita el botón de siguiente
                if (lbx_actasociadas.Items.Count == 0 && cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Count == 0 && cls_variablesSistema.vs_proyecto.pPaqueteActividadListaBaseDatos.Count == 0)
                {
                    btnNxt.Enabled = false;
                }
                else
                {
                    btnNxt.Enabled = true;
                }
            }
            catch (Exception po_exception)
            {
                String vs_error_usuario = "Ocurrió un error al remover la actividad del proyecto.";
                this.lanzarExcepcion(po_exception, vs_error_usuario);
            }
        }
        /// <summary>
        /// Método que inicializa las actividades asignadas a un paquete específico
        /// </summary>
        /// <param name="po_paquete"></param>
        private void inicializarActividadesPorPaquete(cls_paquete po_paquete)
        {
            try
            {
                cls_paqueteActividad vo_paqueteActividad = new cls_paqueteActividad();

                vo_paqueteActividad.pProyecto = cls_variablesSistema.vs_proyecto;
                vo_paqueteActividad.pPaquete = po_paquete;

                //Se envía a cargas las actividaes por paquete
                cargarActividadesPorPaquete(vo_paqueteActividad);
                //Se carga la totalidad de las actividades que aún pueden ser escogidas
                cargarListaActividades();
            }
            catch (Exception po_exception)
            {
                throw new Exception("Ocurrió un error al ontener las actividades asociadas a proyecto.", po_exception);
            }
        }
        /// <summary>
        /// Evento encargado de asignar la actividad a uno o varios paquetes
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btn_asignarActividad_Click(object sender, EventArgs e)
        {
            int paqueteSeleccionado;
            paqueteSeleccionado = Convert.ToInt32(lbx_paquetesasociados.SelectedValue.ToString());

            cls_paquete vo_paquete = new cls_paquete();
            vo_paquete.pPK_Paquete = paqueteSeleccionado;
            try
            {
                //Se recorre la lista de actividades
                for (int i = lbx_actividades.Items.Count - 1; i >= 0; i--)
                {
                    if (lbx_actividades.Items[i].Selected == true)
                    {
                        cls_actividad vo_actividad = new cls_actividad();
                        vo_actividad.pPK_Actividad = Convert.ToInt32(lbx_actividades.Items[i].Value.ToString());
                        vo_actividad.pNombre = lbx_actividades.Items[i].Text;

                        cls_paqueteActividad vo_paqueteActividad = new cls_paqueteActividad();

                        vo_paqueteActividad.pPaquete = vo_paquete;
                        vo_paqueteActividad.pActividad = vo_actividad;

                        //Se recorre los elementos de la lista de memoria
                        foreach (cls_componentePaquete compPaq in cls_variablesSistema.vs_proyecto.pComponentePaqueteListaMemoria)
                        {
                            if (compPaq.pPK_Paquete == vo_paquete.pPK_Paquete)
                            {
                                //Si la actividad no se encuentra asignada para ese paquete, se agrega
                                if (cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Where(searchLinQ => searchLinQ.pPK_Entregable == compPaq.pPK_Entregable &&
                                                                                                                 searchLinQ.pPK_Componente == compPaq.pPK_Componente &&
                                                                                                                 searchLinQ.pPK_Paquete == vo_paquete.pPK_Paquete &&
                                                                                                                 searchLinQ.pPK_Actividad == vo_actividad.pPK_Actividad).Count() == 0)
                                {
                                    //Se agregam el entregable y componente al que pertenece el paqueteActividad, puesto que se necesita al guardar el registro
                                    vo_paqueteActividad.pEntregable = compPaq.pEntregable;
                                    vo_paqueteActividad.pComponente = compPaq.pComponente;

                                    cls_variablesSistema.vs_proyecto.pActividadLista.Add(vo_actividad);
                                    cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Add(vo_paqueteActividad);
                                }
                            }
                        }

                        lbx_actasociadas.Items.Add(lbx_actividades.Items[i]);
                        ListItem li = lbx_actividades.Items[i];
                        lbx_actividades.Items.Remove(li);

                    }
                }

                //Si al menos se encuetra un elemento asociado, se puede habilitar el botón de siguiente
                if (lbx_actasociadas.Items.Count > 0)
                {
                    btnNxt.Enabled = true;
                }
            }
            catch (Exception po_exception)
            {
                String vs_error_usuario = "Ocurrió un error al asignar la actividad al proyecto.";
                this.lanzarExcepcion(po_exception, vs_error_usuario);
            }
        }
        /// <summary>
        /// Método que obtiene las actividades asociadas a un paquete específico
        /// </summary>
        private void cargarActividadesPorPaquete()
        {
            DataSet vo_dataSet = new DataSet();
            int cantidadActAsociadas;
            int cantidadActividades;
            bool validacionMemoria = false;

            try
            {
                //Se limpia el listbox que mantiene la asociación de actividades
                if (lbx_actasociadas.Items.Count > 0)
                {
                    cantidadActAsociadas = lbx_actasociadas.Items.Count;

                    for (int i = 0; i < cantidadActAsociadas; i++)
                    {
                        lbx_actasociadas.Items.RemoveAt(0);
                    }
                }
                //Se limpia el listbox que obtiene la totalidad de actividades
                if (lbx_actividades.Items.Count > 0)
                {
                    cantidadActividades = lbx_actividades.Items.Count;

                    for (int i = 0; i < cantidadActividades; i++)
                    {
                        lbx_actividades.Items.RemoveAt(0);
                    }
                }

                //Se realiza la consulta en base de datos para obtener las actividades asociadas a los paquetes del proyecto
                vo_dataSet = cls_gestorPaqueteActividad.selectPaqueteActividad(cls_variablesSistema.vs_proyecto);

                foreach (DataRow row in vo_dataSet.Tables[0].Rows)
                {

                    cls_entregable vo_entregable = new cls_entregable();
                    cls_componente vo_componente = new cls_componente();
                    cls_paquete vo_paquete = new cls_paquete();
                    cls_actividad vo_actividad = new cls_actividad();
                    cls_paqueteActividad vo_paqueteActividad = new cls_paqueteActividad();

                    vo_entregable.pPK_entregable = Convert.ToInt32(row["PK_entregable"]);
                    vo_componente.pPK_componente = Convert.ToInt32(row["PK_componente"]);
                    vo_paquete.pPK_Paquete = Convert.ToInt32(row["PK_paquete"]);
                    vo_actividad.pPK_Actividad = Convert.ToInt32(row["PK_actividad"]);
                    vo_actividad.pNombre = Convert.ToString(row["nombre"]);

                    vo_paqueteActividad.pEntregable = vo_entregable;
                    vo_paqueteActividad.pComponente = vo_componente;
                    vo_paqueteActividad.pPaquete = vo_paquete;
                    vo_paqueteActividad.pActividad = vo_actividad;

                    //El filtro aquí se realiza con el paquete y la actividad, esto debido a que una actividad si puede encontrarse ya asignada a varios paquetes
                    if (cls_variablesSistema.vs_proyecto.pPaqueteActividadListaBaseDatos.Where(searchLinQ => searchLinQ.pPK_Paquete == vo_paqueteActividad.pPK_Paquete &&
                                                                                                             searchLinQ.pPK_Actividad == vo_paqueteActividad.pPK_Actividad).Count() == 0)
                    {
                        cls_variablesSistema.vs_proyecto.pPaqueteActividadListaBaseDatos.Add(vo_paqueteActividad);
                    }
                    //Si el componente-paquete que se va a asignar ya existe en memoria
                    if (cls_variablesSistema.vs_proyecto.pComponentePaqueteListaMemoria.Where(searchLinQ => searchLinQ.pPK_Paquete == vo_paqueteActividad.pPK_Paquete).Count() == 1)
                    {
                        validacionMemoria = true;

                        cls_componentePaquete vo_componentePaquete = new cls_componentePaquete();
                        vo_componentePaquete = (cls_componentePaquete)cls_variablesSistema.vs_proyecto.pComponentePaqueteListaMemoria.Find(searchLinQ => searchLinQ.pPK_Paquete == vo_paqueteActividad.pPK_Paquete);

                        //Si se está asignando sobre uno que ya existe en memoria, se tiene que corroborar con toda la llave primaria
                        if (vo_paqueteActividad.pPK_Entregable == vo_componentePaquete.pPK_Entregable && vo_paqueteActividad.pPK_Componente == vo_componentePaquete.pPK_Componente && vo_paqueteActividad.pPK_Paquete == vo_componentePaquete.pPK_Paquete)
                        {
                            //Si la actividad no ha sido insertado en memoria, se agrega
                            if (cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Where(searchLinQ => searchLinQ.pPK_Paquete == vo_paqueteActividad.pPK_Paquete &&
                                                                                                                   searchLinQ.pPK_Actividad == vo_paqueteActividad.pPK_Actividad).Count() == 0)
                            {
                                cls_variablesSistema.vs_proyecto.pActividadLista.Add(vo_actividad);
                                cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Add(vo_paqueteActividad);
                            }
                        }

                    }
                }

                //Si la validación devuelve un True, se ha asignado almenos un elemento, por lo cual se puede habilitar el botón de siguiente
                if (validacionMemoria)
                {
                    if (lbx_actasociadas.Items.Count == 0 && btnNxt != null && cls_variablesSistema.vs_proyecto.pPaqueteActividadListaBaseDatos.Count == 0)
                    {
                        btnNxt.Enabled = false;
                    }
                    else
                    {
                        btnNxt.Enabled = true;
                    }
                }
                else
                {
                    btnNxt.Enabled = false;
                }

            }
            catch (Exception po_exception)
            {
                throw new Exception("Ocurrió un error al cargar los actividades asociadas al proyecto.", po_exception);
            }
        }
        /// <summary>
        /// Método que carga las actividades para un paquete en específico
        /// </summary>
        /// <param name="po_paqueteActividad"></param>
        private void cargarActividadesPorPaquete(cls_paqueteActividad po_paqueteActividad)
        {
            DataSet vo_dataSet = new DataSet();

            try
            {
                //Si se encuentran elementos en la lista de memoria, se verifica en estos
                if (cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Count == 0)
                {
                    vo_dataSet = cls_gestorPaqueteActividad.selectPaqueteActividad(cls_variablesSistema.vs_proyecto);

                    foreach (DataRow row in vo_dataSet.Tables[0].Rows)
                    {

                        cls_entregable vo_entregable = new cls_entregable();
                        cls_componente vo_componente = new cls_componente();
                        cls_paquete vo_paquete = new cls_paquete();
                        cls_actividad vo_actividad = new cls_actividad();
                        cls_paqueteActividad vo_paqueteActividad = new cls_paqueteActividad();

                        vo_entregable.pPK_entregable = Convert.ToInt32(row["PK_entregable"]);
                        vo_componente.pPK_componente = Convert.ToInt32(row["PK_componente"]);
                        vo_paquete.pPK_Paquete = Convert.ToInt32(row["PK_paquete"]);
                        vo_actividad.pPK_Actividad = Convert.ToInt32(row["PK_actividad"]);
                        vo_actividad.pNombre = Convert.ToString(row["nombre"]);

                        vo_paqueteActividad.pEntregable = vo_entregable;
                        vo_paqueteActividad.pComponente = vo_componente;
                        vo_paqueteActividad.pPaquete = vo_paquete;
                        vo_paqueteActividad.pActividad = vo_actividad;

                        //Si en la lista de memoria que mantiene los objetos leídos a nivel de base de datos, no se encuentra el elemente, se agrega
                        if (cls_variablesSistema.vs_proyecto.pPaqueteActividadListaBaseDatos.Where(searchLinQ => searchLinQ.pPK_Actividad == vo_paqueteActividad.pPK_Actividad).Count() == 0)
                        {
                            cls_variablesSistema.vs_proyecto.pPaqueteActividadListaBaseDatos.Add(vo_paqueteActividad);
                        }
                        //Si en la lista de memoria no se encuentra el elemento, se agrega
                        if (cls_variablesSistema.vs_proyecto.pComponentePaqueteListaMemoria.Where(searchLinQ => searchLinQ.pPK_Entregable == vo_paqueteActividad.pPK_Entregable &&
                                                                                                                searchLinQ.pPK_Componente == vo_paqueteActividad.pPK_Componente &&
                                                                                                                searchLinQ.pPK_Paquete == vo_paqueteActividad.pPK_Paquete).Count() > 0)
                        {
                            cls_variablesSistema.vs_proyecto.pActividadLista.Add(vo_actividad);
                            cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Add(vo_paqueteActividad);
                        }
                    }

                }

                //Si el elemento se encuentra en la lista de memoria, se respeta para la asignación
                if (cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Where(searchLinQ => searchLinQ.pPK_Paquete == po_paqueteActividad.pPK_Paquete).Count() > 0)
                {
                    lbx_actasociadas.DataSource = cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Where(searchLinQ => searchLinQ.pPK_Paquete == po_paqueteActividad.pPK_Paquete);
                    lbx_actasociadas.DataTextField = "pNombreActividad";
                    lbx_actasociadas.DataValueField = "pPK_Actividad";

                    //Se realiza el Binding luego de saber de donde se tomarán los datos
                    lbx_actasociadas.DataBind();

                    if (lbx_actasociadas.Items.Count > 0)
                    {
                        //Si se leyeron datos asociados, se activa el botón de siguiente
                        btnNxt.Enabled = true;
                    }
                }
                else
                {
                    vo_dataSet = cls_gestorPaqueteActividad.selectPaqueteActividad(po_paqueteActividad);
                    lbx_actasociadas.DataSource = vo_dataSet;
                    lbx_actasociadas.DataTextField = "Nombre";
                    lbx_actasociadas.DataValueField = "PK_Actividad";

                    //Se realiza el Binding luego de saber de donde se tomarán los datos
                    lbx_actasociadas.DataBind();

                    //Si se encuentran elementos asociados
                    if (lbx_actasociadas.Items.Count > 0)
                    {
                        ListBox lbx_pivot = new ListBox();

                        lbx_pivot.DataSource = vo_dataSet;
                        lbx_pivot.DataTextField = "Nombre";
                        lbx_pivot.DataValueField = "PK_Actividad";
                        lbx_pivot.DataBind();

                        //Si la actividad ya se encuentra asociada, se elimina del listbox de asociación
                        foreach (ListItem item in lbx_pivot.Items)
                        {
                            if (cls_variablesSistema.vs_proyecto.pPaqueteActividadListaMemoria.Where(searchLinQ => searchLinQ.pPK_Entregable == po_paqueteActividad.pPK_Entregable &&
                                                                                                                   searchLinQ.pPK_Componente == po_paqueteActividad.pPK_Componente &&
                                                                                                                   searchLinQ.pPK_Paquete == po_paqueteActividad.pPK_Paquete &&
                                                                                                                   searchLinQ.pPK_Actividad == Convert.ToInt32(item.Value)).Count() == 0)
                            {
                                lbx_actasociadas.Items.Remove(item);
                            }
                        }
                    }

                    //Si se leyeron datos asociados, se activa el botón de siguiente
                    btnNxt.Enabled = true;
                }

            }
            catch (Exception po_exception)
            {
                throw new Exception("Ocurrió un error al cargar los actividades asociadas al proyecto.", po_exception);
            }
        }
        /// <summary>
        /// Método para cargar una actividad asignada de manera específica, enviando el proyecto, paquete y actividad 
        /// </summary>
        /// <param name="pi_paquete"></param>
        private void cargarAsignacionActividad(cls_paqueteActividad po_paqueteActividad)
        {
            try
            {
                //Se crean 2 variables para evitar que la asignación de una única presente inconcistencia de punteros a la hora de comparar y eliminar
                //registro  de memoria con registros de la lista de base de datos (en el evento para remover usuarios del listbox se presenta la inconsistencia de puntero)
                cls_asignacionActividad vo_asignacionActividadMemoria = new cls_asignacionActividad();
                cls_asignacionActividad vo_asignacionActividadBaseDatos = new cls_asignacionActividad();

                //La variables se cargan con el registro de base de datos
                vo_asignacionActividadMemoria = cls_gestorAsignacionActividad.seleccionarAsignacionActividad(po_paqueteActividad);
                vo_asignacionActividadBaseDatos = cls_gestorAsignacionActividad.seleccionarAsignacionActividad(po_paqueteActividad);

                //Se verifica si la consulta de base de datos devolvió algún registro válido, de lo contrario no se debe registrar ni en la lista de memoria
                //ni en la de base de datos
                if (vo_asignacionActividadMemoria.pPK_Proyecto == cls_variablesSistema.vs_proyecto.pPK_proyecto)
                {
                    //De no encontrarse ya en la lista de base de datos, se agrega
                    if (cls_variablesSistema.vs_proyecto.pAsignacionActividadListaBaseDatos.Where(searchLinQ => searchLinQ.pPK_Actividad == vo_asignacionActividadBaseDatos.pPK_Actividad &&
                                                                                                          searchLinQ.pPK_Paquete == vo_asignacionActividadBaseDatos.pPK_Paquete).Count() == 0)
                    {
                        cls_variablesSistema.vs_proyecto.pAsignacionActividadListaBaseDatos.Add(vo_asignacionActividadBaseDatos);
                    }
                    //Se verifica si existe en la lista de memoria para agregarlo en la variable objeto local y en la misma lista
                    if (cls_variablesSistema.vs_proyecto.pAsignacionActividadListaMemoria.Where(searchLinQ => searchLinQ.pPK_Actividad == vo_asignacionActividadMemoria.pPK_Actividad &&
                                                                                                        searchLinQ.pPK_Paquete == vo_asignacionActividadMemoria.pPK_Paquete).Count() == 0)
                    {
                        cls_variablesSistema.obj = vo_asignacionActividadMemoria;
                        cls_variablesSistema.vs_proyecto.pAsignacionActividadListaMemoria.Add(vo_asignacionActividadMemoria);
                    }
                    else
                    {
                        //Si la asigancion ya ha sido leída, se carga la variable objeto con la que se encuentra en memoria
                        vo_asignacionActividadMemoria = (cls_asignacionActividad)cls_variablesSistema.vs_proyecto.pAsignacionActividadListaMemoria.Find(searchLinQ => searchLinQ.pPK_Actividad == vo_asignacionActividadMemoria.pPK_Actividad &&
                                                                                                                                                        searchLinQ.pPK_Paquete == vo_asignacionActividadMemoria.pPK_Paquete);
                        cls_variablesSistema.obj = vo_asignacionActividadMemoria;
                    }

                    //Se encuentre la asignació ya en memoria, o no, se envía a cargar la información del registro para cargar los campos de la ventana
                    cargarObjeto();

                }

                //Si la actividad ya se encuentra en memoria, se procede a asignar a los usuarios asignados
                if (cls_variablesSistema.vs_proyecto.pAsignacionActividadListaMemoria.Where(searchLinQ => searchLinQ.pPK_Actividad == po_paqueteActividad.pPK_Actividad &&
                                                                                                    searchLinQ.pPK_Paquete == po_paqueteActividad.pPK_Paquete).Count() > 0)
                {
                    vo_asignacionActividadMemoria = (cls_asignacionActividad)cls_variablesSistema.vs_proyecto.pAsignacionActividadListaMemoria.Find(searchLinQ => searchLinQ.pPK_Actividad == po_paqueteActividad.pPK_Actividad &&
                                                                                                                                                   searchLinQ.pPK_Paquete == po_paqueteActividad.pPK_Paquete);
                    cls_variablesSistema.obj = vo_asignacionActividadMemoria;

                    cargarObjeto();

                    lbx_usuariosAsociados.DataSource = vo_asignacionActividadMemoria.pUsuarioLista;
                    lbx_usuariosAsociados.DataTextField = "pNombre";
                    lbx_usuariosAsociados.DataValueField = "pPK_usuario";
                    lbx_usuariosAsociados.DataBind();
                }
                //Si no se encuentra en memoria es porque esa actividad aún no se encuentra asignada, por lo que sólo se procede a cargar la llave primaria de la actividad
                //por si se va a realizar la asignación en ese momento
                else
                {
                    vo_asignacionActividadMemoria = cls_gestorAsignacionActividad.listarActividadesPorPaquete(po_paqueteActividad.pPK_Proyecto, po_paqueteActividad.pPK_Paquete, po_paqueteActividad.pPK_Actividad);

                    cls_variablesSistema.obj = vo_asignacionActividadMemoria;

                    lbx_usuariosAsociados.DataSource = vo_asignacionActividadMemoria.pUsuarioLista;
                    lbx_usuariosAsociados.DataTextField = "pNombre";
                    lbx_usuariosAsociados.DataValueField = "pPK_usuario";
                    lbx_usuariosAsociados.DataBind();

                }
            }
            catch (Exception po_exception)
            {
                throw new Exception("Ocurrió un error cargando la información para la actividad seleccionada.", po_exception);
            }
        }
        /// <summary>
        /// Evento para el cambio de índice en las actividades
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lbx_actividades_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                int proyectoSeleccionado;
                int paqueteSeleccionado;
                int actividadSeleccionada;

                //Se asignan las 3 llaves para la búsqueda
                proyectoSeleccionado = cls_variablesSistema.vs_proyecto.pPK_proyecto;
                paqueteSeleccionado = Convert.ToInt32(ddl_paquete.SelectedValue.ToString());
                actividadSeleccionada = Convert.ToInt32(lbx_actividades.SelectedValue.ToString());

                //Se arma el objeto que envía las 3 llaves para la búsqueda
                cls_paqueteActividad vo_paqueteActividad = new cls_paqueteActividad();
                vo_paqueteActividad.pPK_Proyecto = proyectoSeleccionado;
                vo_paqueteActividad.pPK_Paquete = paqueteSeleccionado;
                vo_paqueteActividad.pPK_Actividad = actividadSeleccionada;

                limpiarCamposTexto();

                //Se limpia el listbox antes de su asignación
                limpiarListBoxUsuariosAsignados();

                //Se limpia el listbox antes de su asignación
                limpiarListBoxUsuarios();

                //Se envía a cargar, de existir, la información relacionada a la actividad
                cargarAsignacionActividad(vo_paqueteActividad);

                //Se cargan los usuarios restantes que pueden ser asignados a la actividad seleccionada
                cargarUsuarios();

                //ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "FocusOnState","document.getElementById('" + lbx_actividades.ClientID + "').focus(); ", true);

                //ScriptManager manager = ScriptManager.GetCurrent(this);
                //manager.SetFocus("lbx_actividades");

                lbx_actividades.Focus();

            }
            catch (Exception po_exception)
            {
                String vs_error_usuario = "Ocurrió un error mientras se asignada la información del registro para las actividades.";
                this.lanzarExcepcion(po_exception, vs_error_usuario);
            }
        }
        /// <summary>
        /// Método que permite seleccionar  
        /// un único registro en la tabla estado
        /// </summary>
        /// <returns>poActividad valor del resultado de la ejecución de la sentencia</returns>
        public static cls_asignacionActividad seleccionarAsignacionActividad(cls_paqueteActividad po_paqueteActividad)
        {
            cls_asignacionActividad vo_asignacionActividad = null;
               cls_usuario vo_usuario = null;
               List<cls_usuario> vo_listaUsuarios = null;

               try
               {
               String vs_comando = "PA_cont_actividadAsignadaSelectOne";
               cls_parameter[] vu_parametros = {
                                                   new cls_parameter("@paramPK_proyecto", po_paqueteActividad.pPK_Proyecto),
                                                   new cls_parameter("@paramPK_paquete", po_paqueteActividad.pPK_Paquete),
                                                   new cls_parameter("@paramPK_actividad", po_paqueteActividad.pPK_Actividad)
                                               };

               DataSet vu_dataSet = cls_sqlDatabase.executeDataset(vs_comando, true, vu_parametros);

               vo_asignacionActividad = new cls_asignacionActividad();

               vo_listaUsuarios = new List<cls_usuario>();

               if (vu_dataSet.Tables[0].Rows.Count > 0)
               {
                    vo_asignacionActividad.pPK_Actividad = Convert.ToInt32(vu_dataSet.Tables[0].Rows[0]["PK_actividad"]);

                    vo_asignacionActividad.pPK_Paquete = Convert.ToInt32(vu_dataSet.Tables[0].Rows[0]["PK_paquete"]);

                    vo_asignacionActividad.pPK_Componente = Convert.ToInt32(vu_dataSet.Tables[0].Rows[0]["PK_componente"]);

                    vo_asignacionActividad.pPK_Entregable = Convert.ToInt32(vu_dataSet.Tables[0].Rows[0]["PK_entregable"]);

                    vo_asignacionActividad.pPK_Proyecto = Convert.ToInt32(vu_dataSet.Tables[0].Rows[0]["PK_proyecto"]);

                    vo_asignacionActividad.pPK_Usuario = vu_dataSet.Tables[0].Rows[0]["PK_usuario"].ToString();

                    vo_asignacionActividad.pFK_Estado = Convert.ToInt32(vu_dataSet.Tables[0].Rows[0]["FK_estado"]);

                    vo_asignacionActividad.pDescripcion = vu_dataSet.Tables[0].Rows[0]["descripcion"].ToString();

                    vo_asignacionActividad.pFechaInicio = Convert.ToDateTime(vu_dataSet.Tables[0].Rows[0]["fechaInicio"]);

                    vo_asignacionActividad.pFechaFin = Convert.ToDateTime(vu_dataSet.Tables[0].Rows[0]["fechaFin"]);

                    vo_asignacionActividad.pHorasAsignadas = Convert.ToDecimal(vu_dataSet.Tables[0].Rows[0]["horasAsignadas"]);

                    vo_asignacionActividad.pHorasReales = Convert.ToDecimal(vu_dataSet.Tables[0].Rows[0]["horasReales"]);

                    for (int i = 0; i < vu_dataSet.Tables[0].Rows.Count; i++)
                    {
                        vo_usuario = new cls_usuario();

                        vo_usuario.pPK_usuario = vu_dataSet.Tables[0].Rows[i]["PK_usuario"].ToString();

                        vo_usuario.pNombre = vu_dataSet.Tables[0].Rows[i]["nombreUsuario"].ToString();

                        vo_listaUsuarios.Add(vo_usuario);
                    }

                    vo_asignacionActividad.pUsuarioLista = vo_listaUsuarios;
               }

               return vo_asignacionActividad;

               }
               catch (Exception po_exception)
               {
               throw new Exception("Ocurrió un error al seleccionar la actividad específica.", po_exception);
               }
        }
        /// <summary>
        /// Carga la instancia del
        /// registro de la asignación
        /// </summary>
        /// <param name="ps_actividad">String código actividad.</param>
        /// <param name="ps_paquete">String código paquete.</param>
        /// <param name="ps_componente">String código componente.</param>
        /// <param name="ps_entregable">String código entregable.</param>
        /// <param name="ps_proyecto">String código proyecto.</param>
        /// <param name="ps_registro">String código de registro.</param>
        /// <param name="ps_fecha">DateTime Fecha.</param>
        private void cargarActividad(string ps_actividad,
                                     string ps_paquete,
                                     string ps_componente,
                                     string ps_entregable,
                                     string ps_proyecto,
                                     string ps_registro,
                                     string ps_fecha)
        {
            cls_registroActividad vo_registro;
            cls_actividad vo_actividad;
            cls_asignacionActividad vo_asignacion;
            cls_paqueteActividad vo_paquete = null;
            try
            {
                vo_registro = new cls_registroActividad();

                vo_actividad = new cls_actividad();
                vo_actividad.pPK_Actividad = Convert.ToInt32(ps_actividad);
                vo_actividad = cls_gestorActividad.seleccionarActividad(vo_actividad);

                vo_paquete = new cls_paqueteActividad();
                vo_paquete.pPK_Actividad = vo_actividad.pPK_Actividad;
                vo_paquete.pPK_Componente = Convert.ToInt32(ps_componente);
                vo_paquete.pPK_Entregable = Convert.ToInt32(ps_entregable);
                vo_paquete.pPK_Paquete = Convert.ToInt32(ps_paquete);
                vo_paquete.pPK_Proyecto = Convert.ToInt32(ps_proyecto);

                vo_asignacion = new cls_asignacionActividad();
                vo_asignacion = cls_gestorAsignacionActividad.seleccionarAsignacionActividad(vo_paquete);
                vo_asignacion.pActividad = vo_actividad;
                vo_asignacion.pPK_Componente = Convert.ToInt32(ps_componente);
                vo_asignacion.pPK_Entregable = Convert.ToInt32(ps_entregable);
                vo_asignacion.pPK_Paquete = Convert.ToInt32(ps_paquete);
                vo_asignacion.pPK_Actividad = vo_actividad.pPK_Actividad;
                vo_asignacion.pPK_Proyecto = Convert.ToInt32(ps_proyecto);
                vo_asignacion.pPK_Usuario = ((COSEVI.CSLA.lib.accesoDatos.App_InterfaceComunes.cls_interface)this.Session[CSLA.web.App_Constantes.cls_constantes.INTERFACES]).vs_usuarioActual;

                vo_registro = new cls_registroActividad();
                vo_registro.pAsignacion = vo_asignacion;
                vo_registro.pFecha = Convert.ToDateTime(ps_fecha);

                if (String.IsNullOrEmpty(ps_registro))
                {
                    vo_registro.pHoras = 0;
                    vo_registro.pComentario = String.Empty;
                }
                else
                {
                    vo_registro.pRegistro = Convert.ToDecimal(ps_registro);
                    cls_gestorRegistroActividad.seleccionarRegistroActividad(vo_registro);
                }

                ((CSLA.web.App_Variables.cls_variablesSistema)this.Session[CSLA.web.App_Constantes.cls_constantes.VARIABLES]).obj = vo_registro;

            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Evento para el cambio de índice en las actividades
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lbx_actividades_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                int proyectoSeleccionado;
                int paqueteSeleccionado;
                int actividadSeleccionada;

                //Se asignan las 3 llaves para la búsqueda
                proyectoSeleccionado = cls_variablesSistema.vs_proyecto.pPK_proyecto;
                paqueteSeleccionado = Convert.ToInt32(ddl_paquete.SelectedValue.ToString());
                actividadSeleccionada = Convert.ToInt32(lbx_actividades.SelectedValue.ToString());

                //Se arma el objeto que envía las 3 llaves para la búsqueda
                cls_paqueteActividad vo_paqueteActividad = new cls_paqueteActividad();
                vo_paqueteActividad.pPK_Proyecto = proyectoSeleccionado;
                vo_paqueteActividad.pPK_Paquete = paqueteSeleccionado;
                vo_paqueteActividad.pPK_Actividad = actividadSeleccionada;

                limpiarCamposTexto();

                //Se limpia el listbox antes de su asignación
                limpiarListBoxUsuariosAsignados();

                //Se limpia el listbox antes de su asignación
                limpiarListBoxUsuarios();

                //Se envía a cargar, de existir, la información relacionada a la actividad
                cargarAsignacionActividad(vo_paqueteActividad);

                //Se cargan los usuarios restantes que pueden ser asignados a la actividad seleccionada
                cargarUsuarios();
            }
            catch (Exception po_exception)
            {
                String vs_error_usuario = "Ocurrió un error mientras se asignada la información del registro para las actividades.";
                this.lanzarExcepcion(po_exception, vs_error_usuario);
            }
        }