Esempio n. 1
0
 //Precondiciones: No tiene.
 public void agregarConsulta(Consulta consulta)
 {
     using (var db = SARMContext.getTenant(tenant))
     {
         db.consultas.Add(consulta);
         db.SaveChanges();
         //creo los turnos
         DateTime turno = consulta.fecha_inicio;
         //Console.WriteLine(consulta.fecha_inicio.ToString()+consulta.fecha_fin.ToString()+"  "+ consulta.numpacientes);
         double intervalo = ((consulta.fecha_fin - consulta.fecha_inicio).TotalMinutes) / consulta.numpacientes;
         //turno = turno.AddMinutes(minutos * numpacientes);
         //Console.WriteLine((consulta.fecha_fin - consulta.fecha_inicio).Minutes+"EL INTERVALO ES "+intervalo);
         for (short i = 0; i < consulta.numpacientes; i++)
         {
             PacienteConsultaAgenda pca = new PacienteConsultaAgenda
             {
                 ConsultaID = consulta.ConsultaID,
                 ConsultaIDTurno = i,
                 ausencia = false,
                 fueralista = false,
                 turno = turno
             };
             db.consultasagendadas.Add(pca);
             turno = turno.AddMinutes(intervalo);
             db.SaveChanges();
         }
         db.SaveChanges();
     }
 }
Esempio n. 2
0
        /*
         * Este metodo ha cambiado, antes se asignaba dinamicamente, metodo single, es decir lo agregaba
         * a la lista si existe lugar, caso contrario a lista de espera.
         * En esta ocasion no se puede asignar a lista de espera, ya que solicita un turno especifico, pueden existir otros libres
         * lo cual no tendria sentido agregarlo aqui.
         * En la presentacion si no existen turnos libres para una consulta se deberia agregar un boton o algo parecido
         * que diga agregar a lista de espera.
         */
        public void agregarConsultaPaciente(string PacienteID, long ConsultaID, short ConsultaIDTurno, Boolean fueraLista)
        {
            using (var db = SARMContext.getTenant(tenant))
            {
                //Si es fuera de lista debo crear PacienteConsultaAgenda
                if (fueraLista)
                {
                    int count = (from c in db.consultasagendadas
                            where c.ConsultaID == ConsultaID
                            select c).Count();

                    PacienteConsultaAgenda pca = new PacienteConsultaAgenda {
                        ConsultaID=ConsultaID,
                        ausencia=false,
                        ConsultaIDTurno=(short)count,
                        fecharegistro= DateTime.UtcNow,
                        fueralista=fueraLista,
                        PacienteID = PacienteID,
                        turno=null
                    };
                    db.consultasagendadas.Add(pca);
                    db.SaveChanges();
                }
                else
                {
                    Paciente paciente = db.pacientes.Find(PacienteID);
                    if (paciente != null)
                    {

                        int numpacientesEnConsulta = db.consultasagendadas
                                       .Where(c => c.ConsultaID == ConsultaID && c.PacienteID != null).ToList().Count;

                        int numpacientesConsulta = ( from c in db.consultas
                                                     where c.ConsultaID == ConsultaID
                                                     select c.numpacientes ).Single();

                        if (numpacientesEnConsulta >= numpacientesConsulta)
                        {

                            throw new ExcepcionMaxPacientesConsulta();
                        }
                        else {

                        PacienteConsultaAgenda consultaturno = (from ct in db.consultasagendadas
                                                                where ct.PacienteID == null && ct.ConsultaID == ConsultaID && ct.ConsultaIDTurno == ConsultaIDTurno
                                                                select ct).FirstOrDefault();

                        if (consultaturno != null)
                        {
                            consultaturno.PacienteID = PacienteID;
                            consultaturno.fueralista = false;
                            consultaturno.fecharegistro = DateTime.UtcNow;
                            db.SaveChanges();

                            //send MQ
                            try
                            {
                                IDALNotificaciones inot = new DALNotificaciones(tenant);
                                inot.enviarMensajeAlertaConsulta(PacienteID, 1, (DateTime)consultaturno.turno);
                            }
                            catch (Exception E)
                            {
                                Debug.WriteLine("AMQP:Mensaje no enviado.");
                            }

                        }
                        else
                            throw new Exception("No existe turno o la consulta ha sido tomada...");

                        }
                    }
                    else
                    {
                        throw new Exception("No existe paciente");
                    }
                }
            }
        }
Esempio n. 3
0
        //Mueve los pacientes de la LE a la consulta
        public void moverPacientesLEConsulta(List<string> pacientesIDs, long ConsultaID)
        {
            using (var db = SARMContext.getTenant(tenant))
            {
                List<PacienteConsultaEspera> listEspera = new List<PacienteConsultaEspera>();

                foreach (string PacienteID in pacientesIDs)
                {
                    if (db.consultas.Any(c => c.ConsultaID == ConsultaID)
                        && db.pacientes.Any(p => p.PacienteID == PacienteID))
                    {
                        PacienteConsultaEspera pEspera = db.pacienteespera.First(i => (i.PacienteID == PacienteID) && (i.ConsultaID == ConsultaID));
                        listEspera.Add(pEspera);
                    }
                    else
                    {
                        throw new Exception("No existe consulta o paciente");
                    }
                }

                //Ordeno por fecha de registro de manera ascendiente
                var pacientesListOrdered = listEspera.OrderBy(x => x.fecha).ToList();

                foreach (PacienteConsultaEspera pEspera in pacientesListOrdered)
                {
                    this.eliminarPacienteConsultaLE(pEspera.PacienteID, pEspera.ConsultaID);
                    Consulta consulta = db.consultas.Find(ConsultaID);
                    int numpacientes = db.consultas.Include("pacientes")
                                         .Where(c => c.ConsultaID == ConsultaID)
                                         .Single().pacientes.Count;

                    if (numpacientes < consulta.numpacientes)
                    {
                        PacienteConsultaAgenda pca = new PacienteConsultaAgenda { ConsultaID = ConsultaID, PacienteID = pEspera.PacienteID, fecharegistro = DateTime.UtcNow };
                        db.consultasagendadas.Add(pca);
                        db.SaveChanges();
                    }
                    else
                    {
                        throw new Exception("Ya existen 10 Pacientes en Consulta");
                    }

                }
            }
        }