public Models.PlanifAgendaCat getDetalleEvento(Int32 idEvento) { OpenDbConn(); DAL.PlanifAgendaCat cPlanifAgendaCat = new DAL.PlanifAgendaCat(cDblib); return(cPlanifAgendaCat.Select(idEvento)); }
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); }