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; }
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); }