/// <summary>
        /// Actualiza un TareaPreventa a partir del id
        /// </summary>
        internal int Update(Models.TareaPreventa oTarea, DataTable listaParticipantes, Int32 t001_idficepi_ultmodificador)
        {
            try
            {
                SqlParameter[] dbparams = new SqlParameter[10] {
                    Param(enumDBFields.ta207_idtareapreventa, oTarea.ta207_idtareapreventa),
                    Param(enumDBFields.ta207_estado, oTarea.ta207_estado),
                    Param(enumDBFields.ta207_denominacion, oTarea.ta207_denominacion),
                    Param(enumDBFields.ta219_idtipotareapreventa, oTarea.ta219_idtipotareapreventa),
                    Param(enumDBFields.ta207_fechaprevista, oTarea.ta207_fechaprevista),
                    Param(enumDBFields.ta207_descripcion, oTarea.ta207_descripcion),
                    Param(enumDBFields.ta207_observaciones, oTarea.ta207_observaciones),
                    Param(enumDBFields.ta207_motivoanulacion, oTarea.ta207_motivoanulacion),
                    Param(enumDBFields.datatable, listaParticipantes),
                    Param(enumDBFields.t001_idficepi_ultmodificador, t001_idficepi_ultmodificador)
                };
                int r = (int)cDblib.ExecuteScalar("SIC_TAREAPREVENTA_U", dbparams);

                if (r == 0)
                {
                    throw new Exception("No se ha actualizado la tarea");
                }
                return(r);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        internal List <Models.TareaPreventa> Catalogo(Models.TareaPreventa oTareaPreventaFilter)
        {
            OpenDbConn();

            DAL.TareaPreventa cTareaPreventa = new DAL.TareaPreventa(cDblib);
            return(cTareaPreventa.Catalogo(oTareaPreventaFilter));
        }
        /// <summary>
        /// Obtiene todos los TareaPreventa
        /// </summary>
        internal List <Models.TareaPreventa> Catalogo(Models.TareaPreventa oTareaPreventaFilter)
        {
            Models.TareaPreventa        oTareaPreventa = null;
            List <Models.TareaPreventa> lst            = new List <Models.TareaPreventa>();
            IDataReader dr = null;

            try
            {
                SqlParameter[] dbparams = new SqlParameter[6] {
                    Param(enumDBFields.ta204_idaccionpreventa, oTareaPreventaFilter.ta204_idaccionpreventa),
                    Param(enumDBFields.t001_idficepi_promotor, oTareaPreventaFilter.t001_idficepi_promotor),
                    Param(enumDBFields.ta207_descripcion, oTareaPreventaFilter.ta207_descripcion),
                    Param(enumDBFields.ta207_fechaprevista, oTareaPreventaFilter.ta207_fechaprevista),
                    Param(enumDBFields.ta207_estado, oTareaPreventaFilter.ta207_estado),
                    Param(enumDBFields.ta207_motivoanulacion, oTareaPreventaFilter.ta207_motivoanulacion)
                };

                dr = cDblib.DataReader("SUPER.SIC_TareaPreventa_CAT", dbparams);
                while (dr.Read())
                {
                    oTareaPreventa = new Models.TareaPreventa();
                    oTareaPreventa.ta207_idtareapreventa  = Convert.ToInt32(dr["ta207_idtareapreventa"]);
                    oTareaPreventa.ta204_idaccionpreventa = Convert.ToInt32(dr["ta204_idaccionpreventa"]);
                    oTareaPreventa.t001_idficepi_promotor = Convert.ToInt32(dr["t001_idficepi_promotor"]);
                    oTareaPreventa.ta207_descripcion      = Convert.ToString(dr["ta207_descripcion"]);
                    oTareaPreventa.ta207_fechaprevista    = Convert.ToDateTime(dr["ta207_fechaprevista"]);
                    oTareaPreventa.ta207_estado           = Convert.ToString(dr["ta207_estado"]);
                    if (!Convert.IsDBNull(dr["ta207_motivoanulacion"]))
                    {
                        oTareaPreventa.ta207_motivoanulacion = Convert.ToString(dr["ta207_motivoanulacion"]);
                    }

                    lst.Add(oTareaPreventa);
                }
                return(lst);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (dr != null)
                {
                    if (!dr.IsClosed)
                    {
                        dr.Close();
                    }
                    dr.Dispose();
                }
            }
        }
        //internal int UpdateEstadoTarea(int ta207_idtarea, string ta207_estado)
        //{
        //    try
        //    {
        //        SqlParameter[] dbparams = new SqlParameter[2] {
        //            Param(enumDBFields.ta207_idtareapreventa, ta207_idtarea),
        //            Param(enumDBFields.ta207_estado, ta207_estado),
        //        };

        //        return (int)cDblib.Execute("SIC_TAREAPREVENTA_ESTADO_U", dbparams);
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}


        internal int UpdateParticipante(Models.TareaPreventa oTareaPreventa)
        {
            try
            {
                SqlParameter[] dbparams = new SqlParameter[2] {
                    Param(enumDBFields.ta207_idtareapreventa, oTareaPreventa.ta207_idtareapreventa),
                    Param(enumDBFields.ta207_comentario, oTareaPreventa.ta207_comentario)
                };

                return((int)cDblib.ExecuteScalar("SIC_TAREAPREVENTA_PARTICIPANTE_U", dbparams));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Obtiene un TareaPreventa a partir del id
        /// </summary>
        internal Models.TareaPreventa Select(Int32 ta207_idtareapreventa)
        {
            Models.TareaPreventa oTareaPreventa = null;
            IDataReader          dr             = null;

            try
            {
                SqlParameter[] dbparams = new SqlParameter[1] {
                    Param(enumDBFields.ta207_idtareapreventa, ta207_idtareapreventa)
                };

                dr = cDblib.DataReader("SUPER.SIC_TareaPreventa_SEL", dbparams);
                if (dr.Read())
                {
                    oTareaPreventa = new Models.TareaPreventa();
                    oTareaPreventa.ta207_idtareapreventa  = Convert.ToInt32(dr["ta207_idtareapreventa"]);
                    oTareaPreventa.ta204_idaccionpreventa = Convert.ToInt32(dr["ta204_idaccionpreventa"]);
                    oTareaPreventa.t001_idficepi_promotor = Convert.ToInt32(dr["t001_idficepi_promotor"]);
                    oTareaPreventa.ta207_descripcion      = Convert.ToString(dr["ta207_descripcion"]);
                    oTareaPreventa.ta207_fechaprevista    = Convert.ToDateTime(dr["ta207_fechaprevista"]);
                    oTareaPreventa.ta207_estado           = Convert.ToString(dr["ta207_estado"]);
                    if (!Convert.IsDBNull(dr["ta207_motivoanulacion"]))
                    {
                        oTareaPreventa.ta207_motivoanulacion = Convert.ToString(dr["ta207_motivoanulacion"]);
                    }
                }
                return(oTareaPreventa);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (dr != null)
                {
                    if (!dr.IsClosed)
                    {
                        dr.Close();
                    }
                    dr.Dispose();
                }
            }
        }
        public List <Models.TareaPreventa> lstDenominacionesTarea()
        {
            Models.TareaPreventa        oDenominacion = null;
            List <Models.TareaPreventa> lst           = new List <Models.TareaPreventa>();
            IDataReader dr = null;

            try
            {
                SqlParameter[] dbparams = new SqlParameter[0] {
                };

                dr = cDblib.DataReader("SIC_TIPOTAREAPREVENTA_C", dbparams);
                while (dr.Read())
                {
                    oDenominacion = new Models.TareaPreventa();
                    oDenominacion.ta219_idtipotareapreventa = Convert.ToInt32(dr["ta219_idtipotareapreventa"]);
                    oDenominacion.ta219_denominacion        = Convert.ToString(dr["ta219_denominacion"]);

                    lst.Add(oDenominacion);
                }

                return(lst);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (dr != null)
                {
                    if (!dr.IsClosed)
                    {
                        dr.Close();
                    }
                    dr.Dispose();
                }
            }
        }
        /// <summary>
        /// Inserta un registro en la tabla TA207_TAREAPREVENTA
        /// </summary>
        /// <param name="oTareaPreventa"></param>
        /// <returns></returns>
        internal int Insert(Models.TareaPreventa oTareaPreventa, DataTable listaParticipantes)
        {
            try
            {
                SqlParameter[] dbparams = new SqlParameter[9] {
                    Param(enumDBFields.ta204_idaccionpreventa, oTareaPreventa.ta204_idaccionpreventa),
                    Param(enumDBFields.t001_idficepi_promotor, oTareaPreventa.t001_idficepi_promotor),
                    Param(enumDBFields.ta207_descripcion, oTareaPreventa.ta207_descripcion),
                    Param(enumDBFields.ta219_idtipotareapreventa, oTareaPreventa.ta219_idtipotareapreventa),
                    Param(enumDBFields.ta207_denominacion, oTareaPreventa.ta207_denominacion),
                    Param(enumDBFields.ta207_observaciones, oTareaPreventa.ta207_observaciones),
                    Param(enumDBFields.ta207_fechaprevista, oTareaPreventa.ta207_fechaprevista),
                    Param(enumDBFields.guidprovisional, oTareaPreventa.uidDocumento),
                    Param(enumDBFields.datatable, listaParticipantes)
                };

                return((int)cDblib.ExecuteScalar("SIC_TAREAPREVENTA_I", dbparams));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public int Insert(Models.TareaPreventa oTareaPreventa, List <Models.ParticipanteTareaPreventa> listaParticipantes)
        {
            Guid methodOwnerID = new Guid("3280e0c3-8064-42a1-a55b-8f73dfac701c");

            OpenDbConn();

            if (cDblib.Transaction.ownerID.Equals(new Guid()))
            {
                cDblib.beginTransaction(methodOwnerID);
            }

            try
            {
                DAL.TareaPreventa cTareaPreventa = new DAL.TareaPreventa(cDblib);

                //int idTareaPreventa = cTareaPreventa.Insert(oTareaPreventa, listaParticipantes);

                //Finalizar transacción
                if (cDblib.Transaction.ownerID.Equals(methodOwnerID))
                {
                    cDblib.commitTransaction(methodOwnerID);
                }

                //return idTareaPreventa;
                return(0);
            }
            catch (Exception ex)
            {
                //rollback
                if (cDblib.Transaction.ownerID.Equals(methodOwnerID))
                {
                    cDblib.rollbackTransaction(methodOwnerID);
                }

                throw ex;
            }
        }
        /// <summary>
        /// Grabar la tarea.
        /// </summary>
        /// <param name="oTareaPreventa"></param>
        /// <returns></returns>
        public int grabarTarea(Models.TareaPreventa oTareaPreventa, List <Models.ParticipanteTareaPreventa> listaParticipantes, string modoPantalla, string estadoParticipacion, Models.PerfilesEdicion oPerfilesEdicion)
        {
            Guid methodOwnerID = new Guid("5691cbfc-453f-465f-ad89-153b1e278a81");
            int  t001_idficepi_ultmodificador = int.Parse(HttpContext.Current.Session["IDFICEPI_PC_ACTUAL"].ToString());

            OpenDbConn();

            if (cDblib.Transaction.ownerID.Equals(new Guid()))
            {
                cDblib.beginTransaction(methodOwnerID);
            }

            try
            {
                DAL.TareaPreventa cTareaPreventa = new DAL.TareaPreventa(cDblib);

                DataTable dtParticipantes = new DataTable();
                dtParticipantes.Columns.Add(new DataColumn("col_1", typeof(int)));
                dtParticipantes.Columns.Add(new DataColumn("col_2", typeof(char)));


                //Recorremos la lista
                foreach (Models.ParticipanteTareaPreventa oParticipante in listaParticipantes)
                {
                    DataRow row = dtParticipantes.NewRow();
                    row["col_1"] = oParticipante.t001_idficepi_participante;
                    row["col_2"] = oParticipante.ta214_estado;

                    dtParticipantes.Rows.Add(row);
                }

                int idTareaPreventa = 0;


                //Casuísticas de perfiles edición
                if (modoPantalla == "A")//modo alta
                {
                    if (oPerfilesEdicion.soyFiguraSubarea || oPerfilesEdicion.soyAdministrador || oPerfilesEdicion.soyLider)
                    {
                        oTareaPreventa.t001_idficepi_promotor = t001_idficepi_ultmodificador;
                        idTareaPreventa = cTareaPreventa.Insert(oTareaPreventa, dtParticipantes);
                    }
                }
                else //Modo edición
                {
                    if (estadoParticipacion == "A")
                    {
                        //Update del participante (modelo reducido)
                        idTareaPreventa = cTareaPreventa.UpdateParticipante(oTareaPreventa);
                    }
                    if (oPerfilesEdicion.soyFiguraSubarea || oPerfilesEdicion.soyAdministrador || oPerfilesEdicion.soyLider)
                    {
                        //Hacer update del modelo completo
                        idTareaPreventa = cTareaPreventa.Update(oTareaPreventa, dtParticipantes, t001_idficepi_ultmodificador);
                    }
                }

                //Finalizar transacción
                if (cDblib.Transaction.ownerID.Equals(methodOwnerID))
                {
                    cDblib.commitTransaction(methodOwnerID);
                }

                return(idTareaPreventa);
            }
            catch (Exception ex)
            {
                //rollback
                if (cDblib.Transaction.ownerID.Equals(methodOwnerID))
                {
                    cDblib.rollbackTransaction(methodOwnerID);
                }

                throw ex;
            }
        }