public RespuestaBD AgregarOrdenMedica(NuevaOrdenMedica nuevaOrdenMedica)
 {
     return(_gestorDeOrdenesMedicas.AgregarOrdenMedica(nuevaOrdenMedica));
 }
        public RespuestaBD AgregarOrdenMedica(NuevaOrdenMedica nuevaOrdenMedica)
        {
            using (InoBD db = new InoBD())
            {
                OrdenesMedicas pacienteEncontrado = db.OrdenesMedicas.Where(x => x.Fecha.Day == nuevaOrdenMedica.Fecha.Day &&
                                                                            x.Fecha.Month == nuevaOrdenMedica.Fecha.Month &&
                                                                            x.Fecha.Year == nuevaOrdenMedica.Fecha.Year &&
                                                                            x.IdTipoOrdenMedica == nuevaOrdenMedica.IdTipoOrdenMedica &&
                                                                            x.HistoriaClinica == nuevaOrdenMedica.HistoriaClinica).FirstOrDefault();
                if (pacienteEncontrado == null)
                {
                    if (nuevaOrdenMedica.OrdenesMedicasCodigos.Count > 0)
                    {
                        OrdenesMedicas ordenesMedicas = Mapper.Map <OrdenesMedicas>(nuevaOrdenMedica);
                        ordenesMedicas.OrdenesMedicasCodigos.Clear();
                        db.OrdenesMedicas.Add(ordenesMedicas);
                        db.SaveChanges();

                        foreach (NuevaOrdenesMedicasCodigos nuevaOrdenesMedicasCodigos in nuevaOrdenMedica.OrdenesMedicasCodigos)
                        {
                            OrdenesMedicasCodigos codigoExistente = db.OrdenesMedicasCodigos.Where(x => x.IdOrdenMedica == nuevaOrdenesMedicasCodigos.IdOrdenMedica && x.IdProcedimiento == nuevaOrdenesMedicasCodigos.IdProcedimiento).FirstOrDefault();
                            if (codigoExistente == null)
                            {
                                Procedimiento codigoValido = db.Procedimiento.Where(x => x.IdProcedimiento == nuevaOrdenesMedicasCodigos.IdProcedimiento).FirstOrDefault();
                                if (codigoValido != null)
                                {
                                    OrdenesMedicasCodigos ordenesMedicasCodigos = Mapper.Map <OrdenesMedicasCodigos>(nuevaOrdenesMedicasCodigos);
                                    ordenesMedicasCodigos.IdOrdenMedica     = ordenesMedicas.IdOrdenMedica;
                                    ordenesMedicasCodigos.IdUsuarioCreacion = ordenesMedicas.IdUsuarioCreacion;
                                    ordenesMedicasCodigos.OpcionesOrdenMedica.Clear();
                                    db.OrdenesMedicasCodigos.Add(ordenesMedicasCodigos);

                                    if (nuevaOrdenesMedicasCodigos.OpcionesOrdenMedica.Count > 0)
                                    {
                                        List <int> idOpciones = nuevaOrdenesMedicasCodigos.OpcionesOrdenMedica.Select(r => r.Id).ToList();
                                        List <OpcionesOrdenMedica> opciones = db.OpcionesOrdenMedica.Where(r => idOpciones.Contains(r.IdOpcionOrdenMedica)).ToList();
                                        foreach (OpcionesOrdenMedica opcion in opciones)
                                        {
                                            ordenesMedicasCodigos.OpcionesOrdenMedica.Add(opcion);
                                        }
                                    }
                                    db.SaveChanges();
                                    //Mensaje de respuesta
                                    respuesta.Id      = ordenesMedicas.IdOrdenMedica;
                                    respuesta.Mensaje = "Se creó la información correctamente.";
                                }
                                else
                                {
                                    //Mensaje de respuesta
                                    respuesta.Id      = 0;
                                    respuesta.Mensaje = "El código que desea ingresar no existe.";
                                }
                            }
                        }
                    }
                    if (respuesta.Id > 0)
                    {
                        // Auditoria
                        AuditoriaGeneral auditoria = new AuditoriaGeneral
                        {
                            Accion          = "Agregar",
                            NombreTabla     = string.Concat("OrdenesMedicas|", nuevaOrdenMedica.IdTipoOrdenMedica),
                            ValoresAntiguos = null,
                            ValoresNuevos   = JsonConvert.SerializeObject(nuevaOrdenMedica),
                            IdUsuario       = nuevaOrdenMedica.IdUsuarioCreacion
                        };
                        this._gestorDeAuditoria.AgregarAuditoria(auditoria);
                    }
                    else
                    {
                        //Mensaje de respuesta
                        respuesta.Id      = 0;
                        respuesta.Mensaje = "No se encontró ningún código seleccionado.";
                    }
                }
                else
                {
                    //Mensaje de respuesta
                    respuesta.Id      = 0;
                    respuesta.Mensaje = "El paciente ya cuenta con esta orden médica en la fecha propuesta seleccionada, intente de nuevo.";
                }
            }
            return(respuesta);
        }