private string buildSQLFiltros(ParamsQueryIndicador1 modelQuery) { string sqlFiltros = string.Empty; string quadrimestre = modelQuery.quadrimestre != null?modelQuery.quadrimestre.ToString() : "NULL"; if (modelQuery.ano == null) { modelQuery.ano = DateTime.Now.Year; } if (modelQuery.flg_pn_particular == false) { sqlFiltros += $@" COALESCE(GI.PRE_NATAL_PARTICULAR, 'F') = 'F'"; } if (modelQuery.flg_em_andamento == true) { if (modelQuery.idade_gestacional_minima == null) { modelQuery.idade_gestacional_minima = 0; } if (modelQuery.idade_gestacional_maxima == null) { modelQuery.idade_gestacional_maxima = 42; } sqlFiltros += ((sqlFiltros != "") ? " AND " : "") + $@" (((GI.FLG_DESFECHO = 2) AND (GI.DATA_NASCIMENTO BETWEEN (SELECT DATA FROM INICIO_QUADRIMESTRE({quadrimestre},{modelQuery.ano})) AND (SELECT DATA FROM FECHAMENTO_QUADRIMESTRE({quadrimestre},{modelQuery.ano})))) OR (GI.FLG_DESFECHO = 0 AND ((CURRENT_DATE - CAST(GI.DUM AS DATE)) / 7) BETWEEN {modelQuery.idade_gestacional_minima} AND {modelQuery.idade_gestacional_maxima})) "; } else { sqlFiltros += ((sqlFiltros != "") ? " AND " : "") + $@" ((GI.FLG_DESFECHO = 2) AND (GI.DATA_NASCIMENTO BETWEEN (SELECT DATA FROM INICIO_QUADRIMESTRE({quadrimestre},{modelQuery.ano})) AND (SELECT DATA FROM FECHAMENTO_QUADRIMESTRE({quadrimestre},{modelQuery.ano})))) "; } if (!string.IsNullOrEmpty(modelQuery.equipes)) { sqlFiltros += $@" AND EQ.ID IN({modelQuery.equipes}) "; } if (modelQuery.agente_saude != null) { sqlFiltros += $@" AND ME.CSI_CODMED = {modelQuery.agente_saude} "; } return(sqlFiltros); }
public ActionResult Indicador1([FromHeader] string ibge, [FromRoute] ParamsRouteIndicador1 model, [FromQuery] ParamsQueryIndicador1 modelquery) { try { ibge = _config.GetConnectionString(Connection.GetConnection(ibge)); string sqlSelectTipo = string.Empty; string sqlFiltros = string.Empty; string sqlAgrupamento = string.Empty; // Campos do Select sqlSelectTipo = " SELECT "; if (model.desdobramento == "unidade_saude") { sqlSelectTipo += $@" COALESCE(ES.ID,-1) CODIGO_UNIDADE, COALESCE(ES.NOME_FANTASIA,'SEM UNIDADE DE SAÚDE') UNIDADE_SAUDE, "; } else if (model.desdobramento == "equipe") { sqlSelectTipo += $@" COALESCE(EQ.ID,-1) CODIGO_EQUIPE, COALESCE(EQ.DSC_AREA || ' - ' || EQ.COD_INE, 'SEM EQUIPE') EQUIPE, "; } else if (model.desdobramento == "agente_saude") { sqlSelectTipo += $@" COALESCE(ME.CSI_CODMED,-1) CODIGO_AGENTE, COALESCE(ME.CSI_NOMMED,'SEM AGENTE DE SAÚDE') AGENTE, "; } // Filtros sqlFiltros = buildSQLFiltros(modelquery); // Agrupamentos if (model.desdobramento == "unidade_saude") { sqlAgrupamento = $@" GROUP BY ES.ID, ES.NOME_FANTASIA ORDER BY ES.NOME_FANTASIA "; } else if (model.desdobramento == "equipe") { sqlAgrupamento = $@" GROUP BY EQ.ID, EQ.NOME_REFERENCIA, EQ.DSC_AREA, EQ.COD_INE ORDER BY EQ.NOME_REFERENCIA "; } else if (model.desdobramento == "agente_saude") { sqlAgrupamento = $@" GROUP BY ME.CSI_CODMED, ME.CSI_NOMMED "; } var registros = _repository.Indicador1(ibge, sqlSelectTipo, sqlFiltros, sqlAgrupamento); if (model.desdobramento == "total") { var total = new Indicador1TotalViewModel() { porcentagem = Helper.CalculaPorcentagem( registros.FirstOrDefault().qtde_gestantes, registros.FirstOrDefault().qtde_metas ), porcentagem_valida = Helper.CalculaPorcentagem( registros.FirstOrDefault().qtde_gestantes, registros.FirstOrDefault().qtde_metas_validas ), qtde_gestantes = registros.FirstOrDefault().qtde_gestantes, qtde_metas = registros.FirstOrDefault().qtde_metas, qtde_metas_validas = registros.FirstOrDefault().qtde_metas_validas, }; return(Ok(total)); } else if (model.desdobramento == "unidade_saude") { var unidades = new List <Indicador1UnidadeSaudeViewModel>(); foreach (var item in registros) { var unidade = new Indicador1UnidadeSaudeViewModel() { codigo_unidade = item.codigo_unidade, porcentagem = Helper.CalculaPorcentagem(item.qtde_gestantes, item.qtde_metas), porcentagem_valida = Helper.CalculaPorcentagem(item.qtde_gestantes, item.qtde_metas_validas), qtde_gestantes = item.qtde_gestantes, qtde_metas = item.qtde_metas, qtde_metas_validas = item.qtde_metas_validas, unidade = item.unidade_saude }; unidades.Add(unidade); } return(Ok(unidades)); } else if (model.desdobramento == "equipe") { var equipes = new List <Indicador1EquipeViewModel>(); foreach (var item in registros) { var equipe = new Indicador1EquipeViewModel() { codigo_equipe = item.codigo_equipe, equipe = item.equipe, porcentagem = Helper.CalculaPorcentagem(item.qtde_gestantes, item.qtde_metas), porcentagem_valida = Helper.CalculaPorcentagem(item.qtde_gestantes, item.qtde_metas_validas), qtde_gestantes = item.qtde_gestantes, qtde_metas = item.qtde_metas, qtde_metas_validas = item.qtde_metas_validas }; equipes.Add(equipe); } return(Ok(equipes)); } else if (model.desdobramento == "agente_saude") { var agentes = new List <Indicador1AgenteSaudeViewModel>(); foreach (var item in registros) { var agente = new Indicador1AgenteSaudeViewModel() { porcentagem = Helper.CalculaPorcentagem(item.qtde_gestantes, item.qtde_metas), porcentagem_valida = Helper.CalculaPorcentagem(item.qtde_gestantes, item.qtde_metas_validas), agente = item.agente, codigo_agente = item.codigo_agente, qtde_gestantes = item.qtde_gestantes, qtde_metas = item.qtde_metas, qtde_metas_validas = item.qtde_metas_validas }; agentes.Add(agente); } return(Ok(agentes)); } return(Ok()); } catch (Exception ex) { var response = TrataErro.GetResponse(ex.Message, true); return(StatusCode((int)HttpStatusCode.InternalServerError, response)); } }
public ActionResult PublicoAlvo([FromHeader] string ibge, [FromRoute] ParamsRouteIndicador1 model, [FromQuery] ParamsQueryIndicador1 modelquery) { try { ibge = _config.GetConnectionString(Connection.GetConnection(ibge)); if (modelquery.pagesize == null) { modelquery.pagesize = 20; } string sqlSelect = string.Empty; string sqlFiltros = string.Empty; // Filtros sqlFiltros = buildSQLFiltros(modelquery); // Qtde. de registros var countRegistros = _repository.CountPublicoAlvo(ibge, sqlFiltros); Response.Headers.Add("X-Total-Count", countRegistros.ToString()); // Select + paginação modelquery.page = modelquery.page * modelquery.pagesize; sqlSelect = $@" SELECT FIRST {modelquery.pagesize} SKIP {modelquery.page} "; var itens = _repository.PublicoAlvo(ibge, sqlSelect, sqlFiltros); foreach (var item in itens) { if (item.data_primeiro_atendimento != null && item.dum != null) { item.qtde_dias_primeiro_atendimento = Convert.ToInt32( item.data_primeiro_atendimento?.Subtract(Convert.ToDateTime(item.dum)).TotalDays ); } else { item.qtde_dias_primeiro_atendimento = 0; } } return(Ok(itens)); } catch (Exception ex) { var response = TrataErro.GetResponse(ex.Message, true); return(StatusCode((int)HttpStatusCode.InternalServerError, response)); } }