public List <Models.PromotoresAgendaCat> CatalogoPromotoresEvento(Models.PromotoresAgendaCat oPromotoresAgendaCat) { OpenDbConn(); DAL.PromotoresAgendaCat cPromotoresAgendaCat = new DAL.PromotoresAgendaCat(cDblib); return(cPromotoresAgendaCat.Catalogo(oPromotoresAgendaCat)); }
///// <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(); } } }
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); }