Пример #1
0
        public Models.PlanifAgendaCat getDetalleEvento(Int32 idEvento)
        {
            OpenDbConn();

            DAL.PlanifAgendaCat cPlanifAgendaCat = new DAL.PlanifAgendaCat(cDblib);
            return(cPlanifAgendaCat.Select(idEvento));
        }
Пример #2
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);
        }