Пример #1
0
        public Models.ValidarTareaAgenda Select(Int32 idFicepi, Int32 idTarea)
        {
            OpenDbConn();

            DAL.ValidarTareaAgenda cValidarTareaAgenda = new DAL.ValidarTareaAgenda(cDblib);
            return(cValidarTareaAgenda.Select(idFicepi, idTarea));
        }
Пример #2
0
        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");
        }