예제 #1
0
파일: Produto.cs 프로젝트: salez/Guirotab
        public Relatorio GetRelatorio(DateTime? dataInicial, DateTime? dataFinal, int? idDoutor)
        {
            RelatorioPaginaRepository relatorioPaginaRepository = new RelatorioPaginaRepository();

            var relatorio = new Relatorio();

            var relatorioPaginas = relatorioPaginaRepository.GetRelatorioPaginas().Where(rp => rp.ProdutoVaSlide.ProdutoVa.Produto.Id == this.Id); //this.ProdutoVas.SelectMany(va => va.ProdutoVaSlides).SelectMany(s => s.RelatorioPaginas).Where(rp => rp.DoutorCadastro != null);

            if (dataInicial != null)
            {
                relatorioPaginas = relatorioPaginas.Where(rp => rp.DataInicio >= dataInicial);
            }

            if (dataFinal != null)
            {
                relatorioPaginas = relatorioPaginas.Where(rp => rp.DataInicio < dataFinal.Value.AddDays(1));
            }

            if (idDoutor != null)
            {
                relatorioPaginas = relatorioPaginas.Where(rp => rp.IdDoutorCadastro == idDoutor);
            }

            relatorio.QtdeVisualizacoes = relatorioPaginas.Count();

            //tira a mediana
            var metade1 = relatorioPaginas.OrderBy(rp => rp.Segundos).Take(relatorioPaginas.Count() / 2).Max(rp => rp.Segundos);
            var metade2 = relatorioPaginas.OrderByDescending(rp => rp.Segundos).Take(relatorioPaginas.Count() / 2).Min(rp => rp.Segundos);
            relatorio.Mediana = (metade1 + metade2) / 2;

            relatorio.Segundos = relatorioPaginas.Sum(r => r.Segundos);

            return relatorio;
        }
예제 #2
0
        public Answer Log(string xml)
        {
            //int? idDoutor = null;
            int idVa = 0;
            int idSlide = 0;
            double segundos = 0;
            DateTime? data = null;
            string crm = null;
            string crmUf = null;

            string userTerritorio;
            string userSenha;
            double gpsLatitude;
            double gpsLongitude;
            string type;

            #region lê informações do Xml passado

            XmlDocument doc = new XmlDocument();

            try
            {
                doc.Load(new StringReader(xml));

                XmlElement nodeUsuario = (XmlElement)doc.GetElementsByTagName("user")[0];
                userTerritorio = nodeUsuario.GetElementsByTagName("territory")[0].InnerText;
                userSenha = nodeUsuario.GetElementsByTagName("password")[0].InnerText;

                XmlElement nodeLogs = (XmlElement)doc.GetElementsByTagName("logs")[0];

                //faz autenticação
                var territorio = GetTerritorio(userTerritorio, userSenha);

                if (territorio == null)
                    return new Answer(Answer.EnumStatus.Erro, "Login e/ou senha inválido(s)");

                foreach (XmlNode nodeLog in nodeLogs.ChildNodes)
                {
                    /*if(nodeLog["doctorId"] != null && nodeLog["doctorId"].InnerText != null && nodeLog["doctorId"].InnerText != string.Empty){
                        idDoutor = nodeLog["doctorId"].InnerText.ToInt();
                    }*/

                    idVa = nodeLog["presentationId"].InnerText.ToInt();
                    idSlide = nodeLog["presentationPageId"].InnerText.ToInt();
                    segundos = nodeLog["duration"].InnerText.ToDouble();
                    data = nodeLog["dateOfStart"].InnerText.ToDateTime();
                    crm = nodeLog["crm"].InnerText.ToString();
                    crmUf = nodeLog["crmUf"].InnerText.ToString();
                    gpsLatitude = nodeLog["latitude"].InnerText.ToDouble();
                    gpsLongitude = nodeLog["longitude"].InnerText.ToDouble();
                    type = nodeLog["type"].InnerText.ToString();

                    #region Valida Informações passadas

                    /*
                        if(idDoutor.HasValue){
                            //verifica doutor
                            DoutorRepository doutorRepository = new DoutorRepository();
                            var doutor = doutorRepository.GetDoutor(idDoutor.Value);

                            if (doutor == null)
                                return new Answer(Answer.EnumStatus.Erro, "Doutor não existente");
                        }

                        //verifica VA
                        ProdutoVaRepository vaRepository = new ProdutoVaRepository();
                        var va = vaRepository.GetProdutoVa(idVa);

                        if (va == null)
                            return new Answer(Answer.EnumStatus.Erro, "Visual Aid não existente");

                        //verifica slide
                        ProdutoVaSlideRepository slideRepository = new ProdutoVaSlideRepository();
                        var slide = slideRepository.GetProdutoVaSlide(idSlide);

                        if (slide == null)
                            return new Answer(Answer.EnumStatus.Erro, "Página não existente");

                        if (slide.IdVa != va.Id)
                        return new Answer(Answer.EnumStatus.Erro, "Página não pertence ao Visual Aid informado");
                    */

                    #endregion
                }

                RelatorioPaginaRepository paginaRepository = new RelatorioPaginaRepository();
                DoutorCadastroRepository doutorCadastroRepository = new DoutorCadastroRepository();

                foreach (XmlNode nodeLog in nodeLogs.GetElementsByTagName("log"))
                {
                    type = nodeLog["type"].InnerText.ToString();

                    if (type == "presentation") {
                        //idDoutor = nodeLog["doctorId"].InnerText.ToInt();
                        idVa = nodeLog["presentationId"].InnerText.ToInt();
                        idSlide = nodeLog["presentationPageId"].InnerText.ToInt();
                        segundos = nodeLog["duration"].InnerText.ToDouble();
                        data = nodeLog["dateOfStart"].InnerText.ToDateTime();
                        crm = nodeLog["crm"].InnerText.ToString();
                        crmUf = nodeLog["crmUf"].InnerText.ToString();
                        gpsLatitude = nodeLog["latitude"].InnerText.ToDouble();
                        gpsLongitude = nodeLog["longitude"].InnerText.ToDouble();

                        #region grava relatório

                    RelatorioPagina pagina = new RelatorioPagina();

                    pagina.IdTerritorio = territorio.Id;
                    //pagina.IdDoutor_temp = idDoutor;
                    pagina.IdVa_temp = idVa;
                    pagina.IdSlide_temp = idSlide;
                    pagina.Segundos = segundos;
                    pagina.DataInicio = data;
                    pagina.Crm = crm;
                    pagina.CrmUf = crmUf;
                    pagina.GpsLatitude = gpsLatitude;
                    pagina.GpsLongitude = gpsLongitude;

                    paginaRepository.Add(pagina);
                    paginaRepository.Save();

                    try
                    {
                        if (crm.Trim() != "" && crmUf.Trim() != "")
                        {
                            var doutorCadastro = doutorCadastroRepository.GetDoutorCadastros().Where(d => d.CRM == crm && d.CRMUF == crmUf).FirstOrDefault();

                            if (doutorCadastro == null)
                            {
                                doutorCadastro = new DoutorCadastro();
                                doutorCadastro.CRM = crm;
                                doutorCadastro.CRMUF = crmUf;

                                doutorCadastroRepository.Add(doutorCadastro);
                                doutorCadastroRepository.Save();
                            }

                            if (doutorCadastro != null)
                            {
                                pagina.IdDoutorCadastro = doutorCadastro.Id;
                                paginaRepository.Save();
                            }
                        }
                    }
                    catch { }

                    try{
                        pagina.IdVa = idVa;
                        pagina.IdSlide = idSlide;
                        //pagina.IdDoutor = idDoutor;

                        paginaRepository.Save();

                    }catch(Exception e){

                        pagina.IdVa = null;
                        pagina.IdSlide = null;
                        pagina.Xml = xml;
                        paginaRepository.Save();

                        Util.Sistema.Error.TrataErro(e, enviarEmail: false);

                    }

                    #endregion
                    }
                    else if (type == "html")
                    {
                        //faz nada
                    }
                }

            }
            catch(Exception e)
            {
                Util.Sistema.Error.TrataErro(e, enviarEmail: false);

                return new Answer(Answer.EnumStatus.Erro, "Erro ao fazer a leitura do arquivo xml");
            }

            #endregion

            return new Answer(Answer.EnumStatus.Ok, String.Empty);
        }