public List <Models.PromotoresAgendaCat> CatalogoPromotoresEvento(Models.PromotoresAgendaCat oPromotoresAgendaCat) { OpenDbConn(); DAL.PromotoresAgendaCat cPromotoresAgendaCat = new DAL.PromotoresAgendaCat(cDblib); return(cPromotoresAgendaCat.Catalogo(oPromotoresAgendaCat)); }
public string grabarEventoProfAsignados(Models.PlanifAgendaCat evento, string[] otrosProfesionales, bool confirmarBorrado) { int idEvento = 0; string result = ""; string sOtrosProfNoCita = ""; ArrayList aListCorreo = new ArrayList(); bool bDias = false; bool[] bDia = new bool[7]; bool bConTransaccion = false; Guid methodOwnerID = new Guid("C9762B5E-8973-4DFC-81A6-C233F3503749"); OpenDbConn(); if (cDblib.Transaction.ownerID.Equals(new Guid())) { bConTransaccion = true; } if (bConTransaccion) { cDblib.beginTransaction(methodOwnerID); } try { int idEventoProf = 0; ArrayList profesionalesNoCita = new ArrayList(); int idFicepiProf = 0; string codRedProf = ""; Models.ValidarTareaAgenda accesoATarea = new Models.ValidarTareaAgenda(); DAL.PlanifAgendaCat planifAgendaCatDAL = new DAL.PlanifAgendaCat(cDblib); DAL.PromotoresAgendaCat promotoresAgendaCatDAL = new DAL.PromotoresAgendaCat(cDblib); DAL.ValidarTareaAgenda validarTareaAgendaDAL = new DAL.ValidarTareaAgenda(cDblib); Models.PlanifAgendaCat newEvento; foreach (string oProf in otrosProfesionales) { string[] aProf = Regex.Split(oProf, "//"); idFicepiProf = int.Parse(aProf[0]); codRedProf = aProf[1]; //si la cita es a tarea, comprobar que el profesional tiene acceso a la tarea. if (evento.IdTarea != null) { accesoATarea = validarTareaAgendaDAL.Select(idFicepiProf, (int)evento.IdTarea); if (accesoATarea == null) { profesionalesNoCita.Add(idFicepiProf); if (sOtrosProfNoCita == "") { sOtrosProfNoCita = idFicepiProf.ToString(); } else { sOtrosProfNoCita += "," + idFicepiProf.ToString(); } continue; } } #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 newEvento = new Models.PlanifAgendaCat(); newEvento = duplicarEvento(evento); newEvento.Privado = ""; //El campo privado que ha escrito el interesado no se inserta a los otros profesionales. newEvento.Idficepi = idFicepiProf; //Se asigna el idficepi del profesional que se está tratando 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(newEvento.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; idEventoProf = planifAgendaCatDAL.Insert(newEvento); newEvento.ID = idEventoProf; aListCorreo.Add(crearCorreo(newEvento, codRedProf)); } else { profesionalesNoCita.Add(idFicepiProf); if (sOtrosProfNoCita == "") { sOtrosProfNoCita = newEvento.Idficepi.ToString(); } else { sOtrosProfNoCita += "," + newEvento.Idficepi.ToString(); } break; } #endregion } //Fin de bucle de días } 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; newEvento = new Models.PlanifAgendaCat(); newEvento = duplicarEvento(evento); newEvento.Privado = ""; //El campo privado que ha escrito el interesado no se inserta a los otros profesionales. newEvento.Idficepi = idFicepiProf; //Se asigna el idficepi del profesional que se está tratando if (planifAgendaCatDAL.getDisponibilidad(newEvento.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 idEventoProf = planifAgendaCatDAL.Insert(newEvento); newEvento.ID = idEventoProf; aListCorreo.Add(crearCorreo(newEvento, codRedProf)); } else { profesionalesNoCita.Add(idFicepiProf); if (sOtrosProfNoCita == "") { sOtrosProfNoCita = newEvento.Idficepi.ToString(); } else { sOtrosProfNoCita += "," + newEvento.Idficepi.ToString(); } } #endregion } //Fin de If (bDias) } //Fin de bucle de profesionales if (sOtrosProfNoCita != "") { throw new ValidationException(""); } if (bConTransaccion) { cDblib.commitTransaction(methodOwnerID); } } catch (ValidationException ex) { //rollback if (cDblib.Transaction.ownerID.Equals(new Guid())) { cDblib.rollbackTransaction(methodOwnerID); } if (sOtrosProfNoCita != "") { return(idEvento + "//" + sOtrosProfNoCita); } throw ex; } catch (Exception ex) { //rollback if (cDblib.Transaction.ownerID.Equals(new Guid())) { cDblib.rollbackTransaction(methodOwnerID); } throw new Exception("La planificación para el profesional ha sido realizada con éxito. Sin embargo, se ha producido un error en la programación de las citas de los profesionales asignados: " + ex.Message); } 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("OK"); }
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); }