예제 #1
0
        //Metodo certo para o calculo de distancias via latitude e longitude do tipo 25.551252,-14.255645
        public double Calcula_distancia(float lati2, float long2, char unit, Posicao_padrao posicao)
        {
            //var posicao = Get_posicao(id_usuario);
            double deg2radMultiplier = 3.14159265358979323846 / 180;

            double lat1 = -25.954161 * deg2radMultiplier;
            double lat2 = (lati2) * deg2radMultiplier;
            double lon1 = 32.580377 * deg2radMultiplier;
            double lon2 = (long2) * deg2radMultiplier;

            double             radius   = 6378.137;  // earth mean radius defined by WGS84
                        double dlon     = lon2 - lon1;
            double             distance = Math.Acos(Math.Sin(lat1) * Math.Sin(lat2) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Cos(dlon)) * radius;

            if (unit == 'K')
            {
                return(distance);
            }
            else if (unit == 'M')
            {
                return(distance * 0.621371192);
            }
            else if (unit == 'N')
            {
                return(distance * 0.539956803);
            }
            else
            {
                return(0);
            }
        }
예제 #2
0
        //METODO QUE DISPONIBILIZA A POSICAO DO INDIVIDUO
        public Posicao_padrao Get_posicao(long?id_usuario)
        {
            Posicao_padrao posicao = new Posicao_padrao();

            try
            {
                if (id_usuario != null)
                {
                    posicao = db.Posicao_padrao.Where(e => e.estado == 1 && e.situacao == 1 && e.id_usuario == id_usuario).FirstOrDefault();
                }
                else
                {
                    posicao = db.Posicao_padrao.Where(e => e.estado == 1 && e.situacao == 1 && e.id_usuario == null).FirstOrDefault();
                }
            }
            catch { }

            return(posicao);
        }
예제 #3
0
        public List <Pesquisas> Procura_farmacias(string local, string data, long id_usuario, float?raio)
        {
            if (raio == null)
            {
                raio = 5;
            }

            //TempData["pesquisa"] = (List<Medicamento_farmacia>)lista;
            //Inicializacao da magia de pesquisa;

            List <Sucursal_farmacia>    farmacias  = new List <Sucursal_farmacia>();
            List <Receita>              receitas   = new List <Receita>();
            List <Medicamento_farmacia> resultado  = new List <Medicamento_farmacia>();
            List <Medicamento_farmacia> resultado2 = new List <Medicamento_farmacia>();
            List <Pesquisas>            resumo     = new List <Pesquisas>();
            Pesquisas            consulta          = new Pesquisas();
            Medicamento_farmacia med_farm          = new Medicamento_farmacia();
            Receita_real         real         = new Receita_real();
            List <Reserva>       reserva      = new List <Reserva>();
            Reserva reserva_melhor            = new Reserva();
            List <Medicamento_receita> lista2 = new List <Medicamento_receita>();
            Medicamento_receita        rm     = new Medicamento_receita();
            long    contador   = 1;
            decimal distancia2 = 0;

            //Fim da magia de pesquisa

            //Magia de pesquisa

            if (data != null)
            {
                Posicao_padrao posicao = Get_posicao(id_usuario);
                resultado = Farmacias_proximas((int)raio, id_usuario);
                if (resultado != null)
                {
                    receitas = Minha_receita(id_usuario);
                    foreach (var item in resultado)
                    {
                        int encontrado = 0;
                        if (farmacias.Where(e => e.id_sucursal == item.id_farmacia).Count() == 0 && receitas.Where(a => a.id_medicamento == item.id_medicamento).Count() > 0)
                        {
                            Receita ras = receitas.Where(a => a.id_medicamento == item.id_medicamento).FirstOrDefault();

                            //total = (decimal)(ras.quantidade * item.preco);
                            encontrado++;

                            distancia2 = (decimal)(Math.Round(Calcula_distancia((float)item.Sucursal_farmacia.latitude, (float)item.Sucursal_farmacia.longitude, 'K', posicao), 1));
                            consulta   = new Pesquisas
                            {
                                id                = contador,
                                id_fabricante     = item.id_fabricante,
                                referencia        = item.referencia,
                                id_farmacia       = item.id_farmacia,
                                raio              = raio,
                                ditancia_farmacia = distancia2,
                                total_encontrado  = encontrado,
                                id_medicamento    = ras.id_medicamento,
                                data              = ras.data,
                                dosagem           = ras.composicao,
                                forma             = ras.forma,
                                id_registo        = ras.id_registo,
                                id_usuario        = ras.id_usuario,
                                preco_unitario    = item.preco,
                                quantidade        = ras.quantidade,
                                total_receita     = receitas.Count(),
                                total_valor       = (decimal)(ras.quantidade * item.preco)
                            };
                            contador++;
                            resumo.Add(consulta);
                            //farmacias.Add(item.Sucursal_farmacia);
                            encontrado = 0;
                        }
                    }

                    //Historico de pesquisas sobre os medicamentos da receita

                    /*
                     * foreach (var item in receitas)
                     * {
                     *  try
                     *  {
                     *      reserva_melhor = reserva.Where(e => e.dosagem.Contains(item.composicao) && e.desc_quantidade.Contains(item.forma) && e.id_medicamento == item.id_medicamento).OrderBy(e => e.valor_actual).First();
                     *      if (reserva_melhor != null)
                     *      {
                     *         // var distancia2 = Math.Round(Calcula_distancia((float)reserva_melhor.Medicamento_farmacia.Sucursal_farmacia.latitude, (float)reserva_melhor.Medicamento_farmacia.Sucursal_farmacia.longitude, 'K', posicao), 1);
                     *          med_farm = resultado2.Where(e => e.id_medicamento == item.id_medicamento && e.apresentacao.Equals(item.forma) && e.dosagem.Equals(item.composicao) && e.id_farmacia == reserva_melhor.id_farmacia && e.id_fabricante == reserva_melhor.id_fabricante && e.preco == reserva_melhor.valor_actual).FirstOrDefault();
                     *          rm = new Medicamento_receita
                     *          {
                     *              consulta = med_farm,
                     *              distancia = (float)distancia2
                     *          };
                     *          lista2.Add(rm);
                     *
                     *      }
                     *
                     *  }
                     *  catch { }
                     * }
                     */
                    //Envio do resultado para a pagina de disponibilização do resultado
                }
            }
            //Fim da magia de pesquisa

            return(resumo);
        }