Пример #1
0
        public TurnoAdd(TurnoView view)
        {
            InitializeComponent();

            MostrarTitulo();
            LlenarComboMedico();
            LlenarComboPaciente();
            ObjEqual(view);
        }
Пример #2
0
 private void ObjEqual(TurnoView view)
 {
     if (view != null)
     {
         this.id                  = view.idPaciente;
         txtDetalle.Text          = view.detalles;
         txtHora.Text             = view.hora;
         dpFecha.Value            = view.fecha;
         cbMedico.SelectedValue   = view.idMedico;
         cbPaciente.SelectedValue = view.idPaciente;
     }
 }
Пример #3
0
        private void DataListado_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            string    msj;
            TurnoView item = dataListado.Rows[e.RowIndex].DataBoundItem as TurnoView;

            if (e.ColumnIndex == 0)
            {
                DialogResult result = MessageBox.Show("Realmete desea eliminar el registro", "Clinica", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (result == DialogResult.Yes)
                {
                    msj = obj.Delete(item.idPaciente);
                    MessageBox.Show(msj, "Clinica", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            if (e.ColumnIndex == 1)
            {
                TurnoAdd frm = new TurnoAdd(item);
                frm.ShowDialog();
            }
            Mostrar();
        }
Пример #4
0
        public async Task <ActionResult> Create([Bind(Include = "Id,MedicoId,EspecialidadId,FechaDesde,FechaHasta")] TurnoView turnoView)
        {
            if (ModelState.IsValid)
            {
                if (turnoView.FechaDesde.Date > turnoView.FechaHasta.Date)
                {
                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = "La fecha Desde no puede ser mayor que la fecha Hasta.",
                        MessageType = GenericMessages.warning
                    };
                    ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre", turnoView.EspecialidadId);
                    ViewBag.MedicoId       = new SelectList(db.Medicos, "Id", "Nombre", turnoView.MedicoId);
                    return(View(turnoView));
                }

                var hoy = DateTime.Now.Date;
                if (turnoView.FechaDesde.Date < hoy)
                {
                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = "La fecha Desde no puede ser menor que la fecha de Hoy.",
                        MessageType = GenericMessages.warning
                    };
                    ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre", turnoView.EspecialidadId);
                    ViewBag.MedicoId       = new SelectList(db.Medicos, "Id", "Nombre", turnoView.MedicoId);
                    return(View(turnoView));
                }

                var duracion = db.DuracionTurnoEspecialidades.Where(t => t.MedicoId == turnoView.MedicoId && t.EspecialidadId == turnoView.EspecialidadId).FirstOrDefault();
                if (duracion == null)
                {
                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = "No existe la especialidad del Médico.",
                        MessageType = GenericMessages.warning
                    };
                    ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre", turnoView.EspecialidadId);
                    ViewBag.MedicoId       = new SelectList(db.Medicos, "Id", "Nombre", turnoView.MedicoId);
                    return(View(turnoView));
                }

                var diasHorarios = db.AtencionHorarios.Where(t => t.MedicoId == turnoView.MedicoId).ToList();
                if (diasHorarios.Count == 0)
                {
                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = "El Médico no tiene Consultorio ni Horario de Atención asignados.",
                        MessageType = GenericMessages.warning
                    };
                    ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre", turnoView.EspecialidadId);
                    ViewBag.MedicoId       = new SelectList(db.Medicos, "Id", "Nombre", turnoView.MedicoId);
                    return(View(turnoView));
                }

                Turno hayTurnoCreado = await db.Turnos.Where(t => DbFunctions.TruncateTime(t.FechaHora) >= turnoView.FechaDesde && DbFunctions.TruncateTime(t.FechaHora) <= turnoView.FechaHasta && t.MedicoId == turnoView.MedicoId && t.EspecialidadId == turnoView.EspecialidadId).FirstOrDefaultAsync();

                if (hayTurnoCreado != null)
                {
                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = "Ya hay turnos cargados dentro del rango de fechas elegido.",
                        MessageType = GenericMessages.warning
                    };
                    ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre", turnoView.EspecialidadId);
                    ViewBag.MedicoId       = new SelectList(db.Medicos, "Id", "Nombre", turnoView.MedicoId);
                    return(View(turnoView));
                }

                //creamos el ámbito de la transacción
                using (var dbContextTransaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        TimeSpan diferencia = turnoView.FechaHasta - turnoView.FechaDesde;
                        for (int i = 0; i < diferencia.TotalDays; i++)
                        {
                            DateTime fechaActual = new DateTime();
                            fechaActual = turnoView.FechaDesde.AddDays(i);

                            foreach (var diaHorario in diasHorarios)
                            {
                                if ((int)diaHorario.Dia == (int)fechaActual.DayOfWeek)
                                {
                                    DateTime horarioActual = diaHorario.HoraInicio;
                                    while (horarioActual + TimeSpan.FromMinutes(duracion.Duracion) < diaHorario.HoraFin)
                                    {
                                        //una consulta
                                        Turno turno = new Turno();
                                        turno.MedicoId       = turnoView.MedicoId;
                                        turno.EspecialidadId = turnoView.EspecialidadId;
                                        turno.Estado         = Estado.Disponible;
                                        turno.FechaHora      = fechaActual.Date.AddHours(horarioActual.Hour).AddMinutes(horarioActual.Minute); // Horario que comienza a atender

                                        horarioActual += TimeSpan.FromMinutes(duracion.Duracion);                                              // Sumamos minutos

                                        turno.FechaHoraFin = fechaActual.Date.AddHours(horarioActual.Hour).AddMinutes(horarioActual.Minute);   // OJO: Posible error a futuro...

                                        //agregamos el elemento
                                        db.Turnos.Add(turno);
                                    }
                                }
                            }
                        }

                        //guardamos en la base de datos
                        await db.SaveChangesAsync();

                        ////hacemos algo extra a manipulación de datos
                        ////como enviar un mail, suponiendo que regresa true si es exitoso
                        //if (!EnviaUnMail())
                        //{
                        //    //hacemos rollback si fallo el envio del mail
                        //    dbContextTransaction.Rollback();
                        //}

                        //Hacemos commit de todos los datos
                        dbContextTransaction.Commit();
                    }
                    catch (Exception)
                    {
                        //hacemos rollback si hay excepción
                        dbContextTransaction.Rollback();
                        return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                    }
                }

                TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                {
                    Message     = "Turno creados exitosamante.",
                    MessageType = GenericMessages.success
                };

                return(RedirectToAction("Index"));
            }

            ViewBag.EspecialidadId = new SelectList(db.Especialidades, "Id", "Nombre", turnoView.EspecialidadId);
            ViewBag.MedicoId       = new SelectList(db.Medicos, "Id", "Nombre", turnoView.MedicoId);
            return(View(turnoView));
        }