public Models.ValidarTareaAgenda Select(Int32 idFicepi, Int32 idTarea) { OpenDbConn(); DAL.ValidarTareaAgenda cValidarTareaAgenda = new DAL.ValidarTareaAgenda(cDblib); return(cValidarTareaAgenda.Select(idFicepi, idTarea)); }
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"); }