public List <Models.PromotoresAgendaCat> CatalogoPromotoresEvento(Models.PromotoresAgendaCat oPromotoresAgendaCat)
        {
            OpenDbConn();

            DAL.PromotoresAgendaCat cPromotoresAgendaCat = new DAL.PromotoresAgendaCat(cDblib);
            return(cPromotoresAgendaCat.Catalogo(oPromotoresAgendaCat));
        }
Beispiel #2
0
        ///// <summary>
        ///// Inserta un PromotoresAgendaCat
        ///// </summary>
        //internal int Insert(Models.PromotoresAgendaCat oPromotoresAgendaCat)
        //{
        //    try
        //    {
        //        SqlParameter[] dbparams = new SqlParameter[7] {
        //            Param(enumDBFields.t458_idPlanif, oPromotoresAgendaCat.t458_idPlanif),
        //            Param(enumDBFields.t001_idficepi_mod, oPromotoresAgendaCat.t001_idficepi_mod),
        //            Param(enumDBFields.Motivo, oPromotoresAgendaCat.Motivo),
        //            Param(enumDBFields.t458_fechoraini, oPromotoresAgendaCat.t458_fechoraini),
        //            Param(enumDBFields.t458_fechorafin, oPromotoresAgendaCat.t458_fechorafin),
        //            Param(enumDBFields.Profesional, oPromotoresAgendaCat.Profesional),
        //            Param(enumDBFields.t001_codred_promotor, oPromotoresAgendaCat.t001_codred_promotor)
        //        };

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

        ///// <summary>
        ///// Obtiene un PromotoresAgendaCat a partir del id
        ///// </summary>
        //internal Models.PromotoresAgendaCat Select()
        //{
        //    Models.PromotoresAgendaCat oPromotoresAgendaCat = null;
        //    IDataReader dr = null;

        //    try
        //    {


        //        dr = cDblib.DataReader("SUPER.IAP30_PromotoresAgendaCat_SEL", dbparams);
        //        if (dr.Read())
        //        {
        //            oPromotoresAgendaCat = new Models.PromotoresAgendaCat();
        //            oPromotoresAgendaCat.t458_idPlanif=Convert.ToInt32(dr["t458_idPlanif"]);
        //            oPromotoresAgendaCat.t001_idficepi_mod=Convert.ToInt32(dr["t001_idficepi_mod"]);
        //            oPromotoresAgendaCat.Motivo=Convert.ToString(dr["Motivo"]);
        //            oPromotoresAgendaCat.t458_fechoraini=Convert.ToDateTime(dr["t458_fechoraini"]);
        //            oPromotoresAgendaCat.t458_fechorafin=Convert.ToDateTime(dr["t458_fechorafin"]);
        //            oPromotoresAgendaCat.Profesional=Convert.ToString(dr["Profesional"]);
        //            oPromotoresAgendaCat.t001_codred_promotor=Convert.ToString(dr["t001_codred_promotor"]);

        //        }
        //        return oPromotoresAgendaCat;

        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    finally
        //    {
        //        if (dr != null)
        //        {
        //            if (!dr.IsClosed) dr.Close();
        //            dr.Dispose();
        //        }
        //    }
        //}

        ///// <summary>
        ///// Actualiza un PromotoresAgendaCat a partir del id
        ///// </summary>
        //internal int Update(Models.PromotoresAgendaCat oPromotoresAgendaCat)
        //{
        //    try
        //    {
        //        SqlParameter[] dbparams = new SqlParameter[7] {
        //            Param(enumDBFields.t458_idPlanif, oPromotoresAgendaCat.t458_idPlanif),
        //            Param(enumDBFields.t001_idficepi_mod, oPromotoresAgendaCat.t001_idficepi_mod),
        //            Param(enumDBFields.Motivo, oPromotoresAgendaCat.Motivo),
        //            Param(enumDBFields.t458_fechoraini, oPromotoresAgendaCat.t458_fechoraini),
        //            Param(enumDBFields.t458_fechorafin, oPromotoresAgendaCat.t458_fechorafin),
        //            Param(enumDBFields.Profesional, oPromotoresAgendaCat.Profesional),
        //            Param(enumDBFields.t001_codred_promotor, oPromotoresAgendaCat.t001_codred_promotor)
        //        };

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

        ///// <summary>
        ///// Elimina un PromotoresAgendaCat a partir del id
        ///// </summary>
        //internal int Delete()
        //{
        //    try
        //    {


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

        /// <summary>
        /// Obtiene todos los PromotoresAgendaCat
        /// </summary>
        internal List <Models.PromotoresAgendaCat> Catalogo(Models.PromotoresAgendaCat oPromotoresAgendaCatFilter)
        {
            Models.PromotoresAgendaCat        oPromotoresAgendaCat = null;
            List <Models.PromotoresAgendaCat> lst = new List <Models.PromotoresAgendaCat>();
            IDataReader dr = null;

            try
            {
                SqlParameter[] dbparams = new SqlParameter[4] {
                    Param(enumDBFields.t458_idPlanif, oPromotoresAgendaCatFilter.t458_idPlanif),
                    Param(enumDBFields.t458_fechoraini, oPromotoresAgendaCatFilter.t458_fechoraini),
                    Param(enumDBFields.t458_fechorafin, oPromotoresAgendaCatFilter.t458_fechorafin),
                    Param(enumDBFields.t001_idficepi, oPromotoresAgendaCatFilter.t001_idficepi)
                };

                dr = cDblib.DataReader("SUP_PROMOTORESAGENDA_CAT", dbparams);
                while (dr.Read())
                {
                    oPromotoresAgendaCat = new Models.PromotoresAgendaCat();
                    oPromotoresAgendaCat.t458_idPlanif        = Convert.ToInt32(dr["t458_idPlanif"]);
                    oPromotoresAgendaCat.t001_idficepi_mod    = Convert.ToInt32(dr["t001_idficepi_mod"]);
                    oPromotoresAgendaCat.Motivo               = Convert.ToString(dr["Motivo"]);
                    oPromotoresAgendaCat.t458_fechoraini      = Convert.ToDateTime(dr["t458_fechoraini"]);
                    oPromotoresAgendaCat.t458_fechorafin      = Convert.ToDateTime(dr["t458_fechorafin"]);
                    oPromotoresAgendaCat.Profesional          = Convert.ToString(dr["Profesional"]);
                    oPromotoresAgendaCat.t001_codred_promotor = Convert.ToString(dr["t001_codred_promotor"]);

                    lst.Add(oPromotoresAgendaCat);
                }
                return(lst);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (dr != null)
                {
                    if (!dr.IsClosed)
                    {
                        dr.Close();
                    }
                    dr.Dispose();
                }
            }
        }
Beispiel #3
0
        public int grabarEvento(Models.PlanifAgendaCat evento, bool confirmarBorrado)
        {
            bool bEnviarEmail    = false;
            int  idEvento        = 0;
            bool errorControlado = false;

            ArrayList aListCorreo = new ArrayList();

            bool bDias = false;

            bool[] bDia = new bool[7];

            Models.PlanifAgendaCat oEvento;

            bool bConTransaccion = false;
            Guid methodOwnerID   = new Guid("F35A931C-50C1-4FAA-B3AB-3819DE6E0C79");

            OpenDbConn();
            if (cDblib.Transaction.ownerID.Equals(new Guid()))
            {
                bConTransaccion = true;
            }
            if (bConTransaccion)
            {
                cDblib.beginTransaction(methodOwnerID);
            }

            try

            {
                DAL.PlanifAgendaCat     planifAgendaCatDAL     = new DAL.PlanifAgendaCat(cDblib);
                DAL.PromotoresAgendaCat promotoresAgendaCatDAL = new DAL.PromotoresAgendaCat(cDblib);

                evento.Idficepi    = int.Parse(HttpContext.Current.Session["IDFICEPI_IAP"].ToString());
                evento.IdficepiMod = int.Parse(HttpContext.Current.Session["IDFICEPI_IAP"].ToString());

                //En caso de que el evento ya exista, hay que comprobar los datos que han sido modificados para
                //ver si es necesario enviar mail
                if (evento.ID != 0)
                {
                    #region Update del evento
                    oEvento = planifAgendaCatDAL.Select(evento.ID);

                    //comprobación de si hay que comunicar el cambio
                    if (evento.StartTime != oEvento.StartTime ||
                        evento.EndTime != oEvento.EndTime ||
                        (evento.IdTarea != -1 && evento.IdTarea != oEvento.IdTarea))
                    {
                        bEnviarEmail = true;
                    }

                    //Se comprueba si el evento tiene dsponibilidad o no
                    if (planifAgendaCatDAL.getDisponibilidad(evento.Idficepi, evento.StartTime, evento.EndTime, evento.ID))
                    {
                        //En caso de tener disponibilidad se actualiza el evento en BBDD
                        // y si hay necesidad de enviar correo, se crea el correo y se añade a la lista de correos
                        if (bEnviarEmail)
                        {
                            evento.IdficepiMod = int.Parse(HttpContext.Current.Session["IDFICEPI_ENTRADA"].ToString());
                        }
                        idEvento = planifAgendaCatDAL.Update(evento);
                        if (bEnviarEmail)
                        {
                            aListCorreo.Add(crearCorreoMod(evento, oEvento, null));
                        }
                    }
                    //Si no tiene disponibilidad se manda un mensaje de error
                    else
                    {
                        throw new ValidationException("Cita denegada por solapamiento. Revisa el mapa de citas.");
                    }

                    #endregion
                }
                //El evento no existe, se debe hacer un Insert en BBDD
                else
                {
                    #region insert del evento

                    #region Control días de la semana

                    bDia = evento.DiasSemana;
                    if (Array.Exists(bDia, element => element == true))
                    {
                        bDias = true;
                    }
                    #endregion
                    if (bDias)
                    {
                        #region Una reserva cada día para el rango horario indicado
                        Models.PlanifAgendaCat newEvento = new Models.PlanifAgendaCat();
                        newEvento = duplicarEvento(evento);

                        int nDiff = IB.SUPER.Shared.Fechas.DateDiff("day", evento.StartTime, evento.EndTime);
                        for (int b = 0; b <= nDiff; b++)
                        {
                            //comprobar que el día a grabar está entre los días seleccionados
                            System.DateTime dAux = evento.StartTime.AddDays(b);
                            switch (dAux.DayOfWeek)
                            {
                            case System.DayOfWeek.Monday: if (bDia[0] == false)
                                {
                                    continue;
                                }
                                break;

                            case System.DayOfWeek.Tuesday: if (bDia[1] == false)
                                {
                                    continue;
                                }
                                break;

                            case System.DayOfWeek.Wednesday: if (bDia[2] == false)
                                {
                                    continue;
                                }
                                break;

                            case System.DayOfWeek.Thursday: if (bDia[3] == false)
                                {
                                    continue;
                                }
                                break;

                            case System.DayOfWeek.Friday: if (bDia[4] == false)
                                {
                                    continue;
                                }
                                break;

                            case System.DayOfWeek.Saturday: if (bDia[5] == false)
                                {
                                    continue;
                                }
                                break;

                            case System.DayOfWeek.Sunday: if (bDia[6] == false)
                                {
                                    continue;
                                }
                                break;
                            }

                            //Si llega aquí es que hay que grabar los datos de la reserva para ese día.
                            DateTime dFechaHoraFin = IB.SUPER.Shared.Fechas.crearDateTime(dAux.ToShortDateString(), evento.EndTime.ToShortTimeString());

                            //Antes de realizar la reserva, comprobar la disponibilidad;
                            if (planifAgendaCatDAL.getDisponibilidad(evento.Idficepi, dAux, dFechaHoraFin, 0))
                            {
                                //En caso de tener disponibilidad se inserta el evento en BBDD
                                // y si hay necesidad de enviar correo, se crea el correo y se añade a la lista de correos
                                newEvento.StartTime   = dAux;
                                newEvento.EndTime     = dFechaHoraFin;
                                newEvento.IdficepiMod = int.Parse(HttpContext.Current.Session["IDFICEPI_ENTRADA"].ToString());
                                idEvento     = planifAgendaCatDAL.Insert(newEvento);
                                newEvento.ID = idEvento;
                                aListCorreo.Add(crearCorreo(newEvento, null));
                            }
                            else
                            {
                                if (evento.Idficepi != (int)HttpContext.Current.Session["IDFICEPI_ENTRADA"])
                                {
                                    throw new Exception("Cita denegada por solapamiento. Revisa el mapa de citas.");
                                }

                                if (!confirmarBorrado)
                                {
                                    Models.PromotoresAgendaCat        oPromotoresAgendaCat  = new Models.PromotoresAgendaCat();
                                    List <Models.PromotoresAgendaCat> listaPromotoresEvento = new List <Models.PromotoresAgendaCat>();
                                    oPromotoresAgendaCat.t458_idPlanif   = 0;
                                    oPromotoresAgendaCat.t458_fechoraini = dAux;
                                    oPromotoresAgendaCat.t458_fechorafin = dFechaHoraFin;
                                    oPromotoresAgendaCat.t001_idficepi   = evento.Idficepi;
                                    listaPromotoresEvento = promotoresAgendaCatDAL.Catalogo(oPromotoresAgendaCat);

                                    foreach (Models.PromotoresAgendaCat oProm in listaPromotoresEvento)
                                    {
                                        if (oProm.t001_idficepi_mod == evento.Idficepi)
                                        {
                                            throw new Exception("Cita denegada por solapamiento. Revisa el mapa de citas.");
                                        }
                                    }
                                    errorControlado = true;
                                    throw new Exception("");
                                }
                                else
                                {
                                    //Hay que borrar las citas solapadas.
                                    Models.PromotoresAgendaCat        oPromotoresAgendaCat  = new Models.PromotoresAgendaCat();
                                    List <Models.PromotoresAgendaCat> listaPromotoresEvento = new List <Models.PromotoresAgendaCat>();
                                    oPromotoresAgendaCat.t458_idPlanif   = 0;
                                    oPromotoresAgendaCat.t458_fechoraini = dAux;
                                    oPromotoresAgendaCat.t458_fechorafin = dFechaHoraFin;
                                    oPromotoresAgendaCat.t001_idficepi   = evento.Idficepi;
                                    listaPromotoresEvento = promotoresAgendaCatDAL.Catalogo(oPromotoresAgendaCat);

                                    Models.PlanifAgendaCat eventoEliminar;

                                    foreach (Models.PromotoresAgendaCat oProm in listaPromotoresEvento)
                                    {
                                        eventoEliminar                = new Models.PlanifAgendaCat();
                                        eventoEliminar.ID             = oProm.t458_idPlanif;
                                        eventoEliminar.IdficepiMod    = oProm.t001_idficepi_mod;
                                        eventoEliminar.StartTime      = oProm.t458_fechoraini;
                                        eventoEliminar.EndTime        = oProm.t458_fechorafin;
                                        eventoEliminar.Motivo         = oProm.Motivo;
                                        eventoEliminar.Profesional    = oProm.Profesional;
                                        eventoEliminar.CodRedPromotor = oProm.t001_codred_promotor;
                                        planifAgendaCatDAL.Delete(eventoEliminar.ID);
                                        aListCorreo.Add(crearCorreoEliminacionEventoPorSolapamiento(eventoEliminar));
                                    }
                                    //Una vez eliminados los eventos que generan los solapamientos se procede a insertar el evento
                                    newEvento.StartTime   = dAux;
                                    newEvento.EndTime     = dFechaHoraFin;
                                    newEvento.IdficepiMod = int.Parse(HttpContext.Current.Session["IDFICEPI_ENTRADA"].ToString());
                                    newEvento.ID          = planifAgendaCatDAL.Insert(newEvento);
                                    aListCorreo.Add(crearCorreo(newEvento, null));
                                }
                            }
                        }
                        #endregion

                        if (idEvento == 0)
                        {
                            throw new ValidationException("Las fechas y/o los días de repetición seleccionados no son correctos");
                        }
                    }


                    else
                    {
                        #region Una sola reserva para el rango desde la fecha de inicio a la de fin
                        //Antes de realizar la reserva, comprobar la disponibilidad;
                        if (planifAgendaCatDAL.getDisponibilidad(evento.Idficepi, evento.StartTime, evento.EndTime, 0))
                        {
                            //En caso de tener disponibilidad se inserta el evento en BBDD
                            // y si hay necesidad de enviar correo, se crea el correo y se añade a la lista de correos
                            evento.IdficepiMod = int.Parse(HttpContext.Current.Session["IDFICEPI_ENTRADA"].ToString());
                            idEvento           = planifAgendaCatDAL.Insert(evento);
                            evento.ID          = idEvento;
                            aListCorreo.Add(crearCorreo(evento, null));
                        }
                        else
                        {
                            if (evento.Idficepi != (int)HttpContext.Current.Session["IDFICEPI_ENTRADA"])
                            {
                                throw new Exception("Cita denegada por solapamiento. Revisa el mapa de citas.");
                            }

                            if (!confirmarBorrado)
                            {
                                Models.PromotoresAgendaCat        oPromotoresAgendaCat  = new Models.PromotoresAgendaCat();
                                List <Models.PromotoresAgendaCat> listaPromotoresEvento = new List <Models.PromotoresAgendaCat>();
                                oPromotoresAgendaCat.t458_idPlanif   = 0;
                                oPromotoresAgendaCat.t458_fechoraini = evento.StartTime;
                                oPromotoresAgendaCat.t458_fechorafin = evento.EndTime;
                                oPromotoresAgendaCat.t001_idficepi   = evento.Idficepi;
                                listaPromotoresEvento = promotoresAgendaCatDAL.Catalogo(oPromotoresAgendaCat);

                                foreach (Models.PromotoresAgendaCat oProm in listaPromotoresEvento)
                                {
                                    if (oProm.t001_idficepi_mod == evento.Idficepi)
                                    {
                                        break;
                                    }
                                }
                                errorControlado = true;
                                throw new Exception("");
                            }
                            //En caso de que el usuario haya decidido eliminar las citas que solapan la cita actual, se procede al borrado
                            else
                            {
                                //Hay que borrar las citas solapadas.
                                Models.PromotoresAgendaCat        oPromotoresAgendaCat  = new Models.PromotoresAgendaCat();
                                List <Models.PromotoresAgendaCat> listaPromotoresEvento = new List <Models.PromotoresAgendaCat>();
                                oPromotoresAgendaCat.t458_idPlanif   = 0;
                                oPromotoresAgendaCat.t458_fechoraini = evento.StartTime;
                                oPromotoresAgendaCat.t458_fechorafin = evento.EndTime;
                                oPromotoresAgendaCat.t001_idficepi   = evento.Idficepi;
                                listaPromotoresEvento = promotoresAgendaCatDAL.Catalogo(oPromotoresAgendaCat);

                                Models.PlanifAgendaCat eventoEliminar;

                                foreach (Models.PromotoresAgendaCat oProm in listaPromotoresEvento)
                                {
                                    eventoEliminar                = new Models.PlanifAgendaCat();
                                    eventoEliminar.ID             = oProm.t458_idPlanif;
                                    eventoEliminar.IdficepiMod    = oProm.t001_idficepi_mod;
                                    eventoEliminar.StartTime      = oProm.t458_fechoraini;
                                    eventoEliminar.EndTime        = oProm.t458_fechorafin;
                                    eventoEliminar.Motivo         = oProm.Motivo;
                                    eventoEliminar.Profesional    = oProm.Profesional;
                                    eventoEliminar.CodRedPromotor = oProm.t001_codred_promotor;
                                    planifAgendaCatDAL.Delete(eventoEliminar.ID);
                                    aListCorreo.Add(crearCorreoEliminacionEventoPorSolapamiento(eventoEliminar));
                                }
                                //Una vez eliminados los eventos que generan los solapamientos se procede a insertar el evento
                                evento.IdficepiMod = int.Parse(HttpContext.Current.Session["IDFICEPI_ENTRADA"].ToString());
                                idEvento           = planifAgendaCatDAL.Insert(evento);
                                evento.ID          = idEvento;
                                aListCorreo.Add(crearCorreo(evento, null));
                            }
                        }
                        #endregion
                    }
                    #endregion
                }
                if (bConTransaccion)
                {
                    cDblib.commitTransaction(methodOwnerID);
                }
            }

            catch (ValidationException ex)
            {
                //rollback
                if (cDblib.Transaction.ownerID.Equals(new Guid()))
                {
                    cDblib.rollbackTransaction(methodOwnerID);
                }

                throw ex;
            }
            catch (Exception ex)
            {
                //rollback
                if (cDblib.Transaction.ownerID.Equals(new Guid()))
                {
                    cDblib.rollbackTransaction(methodOwnerID);
                }

                if (!errorControlado)
                {
                    throw ex;
                }
                return(-1);
            }
            finally
            {
            }

            try
            {
                if (aListCorreo.Count > 0)
                {
                    Correo.EnviarCorreosCita(aListCorreo);
                }
            }
            catch (Exception ex)
            {
                //sResul = "Error@#@" + Errores.mostrarError("Error al enviar el mail a los responsables del proyecto", ex);
                IB.SUPER.Shared.LogError.LogearError("Error al enviar los mails de convocatoria:", ex);
            }

            return(idEvento);
        }