//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(); } }
/* * 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"); } } } }
//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"); } } } }