Histórico da Página
...
Nome | Tipo | Descrição |
---|---|---|
oFiltros | Objeto Json | Objeto json com os filtros e seus valores informados. |
cTipo | Caracter | Tipo do monitor. Os valores podem ser "info" (monitor tipo texto) e "chart" (monitor tipo gráfico). |
cSubTipo | Caracter | Tipo do gráfico. É informado quando o parâmetro cTipo é igual a "chart". Os valores possíveis são: "pie", "donut", "column", "bar", "line", "gauge" |
Retorno
Tipo | Descrição |
---|---|
Caracter | String no formato json com conteúdo conforme o tipo do monitor e tipo do gráfico. |
...
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Method BuscaDados(oFiltros, cTipo, cSubTipo) Class PrevisaoEntregaOP Local aSaldos := {} Local aPeriodos := PCPMonitorUtils():RetornaListaPeriodosFuturo(oFiltros["04_TIPOPERIODO"],cValToChar(oFiltros["05_PERIODO"])) Local aChaves := {} Local cAliasQry := GetNextAlias() Local cJsonDados := "" Local cUnMed := "" Local cQuery := "" Local dDataAjust := Nil Local dDataIni := dDatabase Local dDataFin := dDatabase Local lPerdInf := SuperGetMV("MV_PERDINF",.F.,.F.) Local nIndSerie := 0 Local nPosTag := 0 Local nOPsTotal := 0 Local nQtPTotal := 0 Local nX := 0 Local oJsonRet := JsonObject():New() Local oPeriodos := JsonObject():New() //Propriedades que devem ser retornadas para monitores do tipo gráfico oJsonRet["corTitulo"] := "black" //Cor do título do monitor. Se não for informada, assumirá o valor #2590aa oJsonRet["alturaMinimaWidget"] := "350px" //Altura mínima do monitor. Se não for informada, assumirá o valor 350px oJsonRet["alturaMaximaWidget"] := "500px" //Altura máxima do monitor. Se não for informada, assumirá o valor 350px oJsonRet["tags"] := {} //Array de objetos json com as tags que serão visualizadas no monitor oJsonRet["series"] := {} //Array de objetos json com as séries do gráfico oJsonRet["categorias"] := {} //Array de strings com as categorias do gráfico oFiltros["01_C2_FILIAL"] := PadR(oFiltros["01_C2_FILIAL"], FWSizeFilial()) cUnMed := Posicione("SB1",1,xFilial("SB1",oFiltros["01_C2_FILIAL"])+oFiltros["02_C2_PRODUTO"],"B1_UM") dDataIni := aPeriodos[1][1] dDataFin := aPeriodos[Len(aPeriodos)][2] //Query com os filtros para buscar os valores das séries para as categorias cQuery := " SELECT " cQuery += " SC2.C2_FILIAL, " cQuery += " SC2.C2_PRODUTO, " cQuery += " SC2.C2_DATPRF, " If oFiltros["03_TIPOQUANT"] == 'O' cQuery += " SUM(SC2.C2_QUANT)" Else cQuery += " SUM(SC2.C2_QUANT - SC2.C2_QUJE" If !lPerdInf cQuery += " - SC2.C2_PERDA" EndIf cQuery += ")" EndIf cQuery += " AS QUANTIDADE_PRODUTO, " cQuery += " COUNT(*) AS NUMERO_OPS " cQuery += " FROM "+RetSqlName("SC2")+" SC2 " cQuery += " WHERE SC2.C2_FILIAL = '"+xFilial("SC2",oFiltros["01_C2_FILIAL"])+"' " cQuery += " AND SC2.C2_PRODUTO = '"+oFiltros["02_C2_PRODUTO"]+"' " cQuery += " AND SC2.C2_DATPRF BETWEEN '"+dToS(dDataIni)+"' AND '"+dToS(dDataFin)+"' " cQuery += " AND SC2.C2_DATRF = ' '" cQuery += " AND SC2.D_E_L_E_T_ = ' ' " cQuery += " GROUP BY SC2.C2_FILIAL, SC2.C2_PRODUTO, SC2.C2_DATPRF " cQuery += " ORDER BY SC2.C2_FILIAL, SC2.C2_PRODUTO, SC2.C2_DATPRF " dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasQry,.F.,.F.) While (cAliasQry)->(!Eof()) dDataAjust := dToC(PCPMonitorUtils():RetornaPeriodoInicial(oFiltros["04_TIPOPERIODO"],sToD((cAliasQry)->C2_DATPRF))) nOPsTotal += (cAliasQry)->NUMERO_OPS nQtPTotal += (cAliasQry)->QUANTIDADE_PRODUTO If oPeriodos:HasProperty(dDataAjust) oPeriodos[dDataAjust] += (cAliasQry)->QUANTIDADE_PRODUTO Else oPeriodos[dDataAjust] := (cAliasQry)->QUANTIDADE_PRODUTO EndIf (cAliasQry)->(DBSKIP()) End (cAliasQry)->(dbCloseArea()) aChaves := oPeriodos:GetNames() oJsonRet["categorias"] := aChaves For nX := 1 To Len(aChaves) aAdd(aSaldos, oPeriodos[aChaves[nX]]) Next nX //Adiciona série no gráfico PCPMonitorUtils():AdicionaSerieGraficoMonitor(oJsonoJsonRet["series"],@nIndSerie,"rgb(0,0,165)",aSaldos,cUnMed) //Adiciona tags ao monitor PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-calendar",dToC(dDataIni) + " - " + dToC(dDataFin)) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-calculator",PCPMonitorUtils():RetornaDescricaoTipoPeriodo(oFiltros["04_TIPOPERIODO"])) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-bar-code",oFiltros["02_C2_PRODUTO"]) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-star-filled",cValToChar(nOPsTotal) + IIF(nOPsTotal > 1," Ordens"," Ordem") ) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-star-filled",cValToChar(nQtPTotal) + " " + cUnMed ) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-calculator",IIF(oFiltros["03_TIPOQUANT"] == "O","Quantidade Original","Saldo a Produzir")) cJsonDados := oJsonRet:toJson() FwFreeArray(aChaves) FwFreeArray(aPeriodos) FwFreeArray(aSaldos) FreeObj(oPeriodos) FreeObj(oJsonRet) Return cJsonDados |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Method BuscaDados(oFiltros, cTipo, cSubTipo) Class StatusLotesAVencerStatusPlayStopPCP Local aPausa aSemaforo := StrTokArr(Replace(oFiltros["03_SEMAFORO"],",","."),";"){} Local aProd cAliasQry := GetNextAlias(){} Local cCodProd aUsuarios := oFiltros["02_B8_PRODUTO"]{} Local cJsonDadoscAlias := "" := GetNextAlias() Local cQuery Local cJsonDados := "" Local cTxtPrc Local cProdutos := "" Local cTxtSeccUsuarios := "" Local cUnMedidacUsrAtual := "" Local cQuery dFilterDat := PCPMonitorUtils():RetornaPeriodoFinal(oFiltros["05_TIPOPERIODO"],ddatabase,cValtoChar(oFiltros["06_PERIODO"])) Local dDataIni nIndLinha := 0dDatabase Local nQuant dDataFin := 0dDatabase Local lFilUsuar nValSemaf1 := Val(aSemaforo[1]).F. Local nIndice nValSemaf2 := Val(aSemaforo[2]) 0 Local nLotes nIndSerie := 0 Local nPos nPosTag := 0 Local nSaldooDados := 0 Local oJsonRet := JsonObject():New() Local oStylePrcoJsonRet := JsonObject():New() Local oStyleSec oJsonRet["alturaMinimaWidget"] := JsonObject():New() //Propriedades que devem ser retornadas para monitores do tipo texto oJsonRet["corTitulo"] "350px" oJsonRet["alturaMaximaWidget"] := "500px" oJsonRet["categorias"] := {} oJsonRet["series"] := "white" //Cor do título do monitor. Se não for informada, assumirá o valor #2590aa{} oJsonRet["tags"] := {} oJsonRetoFiltros["alturaMinimaWidget01_HZA_FILIAL"] := "350px" //Altura mínima do monitor. Se não for informada, assumirá o valor 350pxPadR(oFiltros["01_HZA_FILIAL"], FWSizeFilial()) dDataIni := PCPMonitorUtils():RetornaPeriodoInicial(oFiltros["06_TIPOPERIODO"],dDataFin,cValtoChar(oFiltros["07_PERIODO"])) oJsonRet["alturaMaximaWidget"] := "500px" //Altura máxima do monitor. Se não for informada, assumirá o valor 350px oJsonRet["linhas"] cQuery +=" SELECT " cQuery += " HZA.HZA_FILIAL, cQuery += " HZA.HZA_OP, := {} //Array de objetos json com cada linha de informação do monitor oJsonRet["tags"]cQuery += " HZA.HZA_OPERAD, cQuery += " HZA.HZA_DTINI, cQuery += " := {} HZA.HZA_HRINI, cQuery //Array de objetos json com as tags que serão visualizadas no monitor oFiltros["01_B8_FILIAL"] := PadR(oFiltros["01_B8_FILIAL"], FWSizeFilial())+= " HZA.HZA_DTFIM, cQuery += " HZA.HZA_HRFIM, cQuery += " HZA.HZA_TPTRNS cUnMedidacQuery :+= Posicione("SB1",1,xFilial("SB1",oFiltros["01_B8_FILIAL"])+cCodProd,"B1_UM") FROM "+RetSqlName("HZA")+" HZA " cQuery += " LEFT JOIN "+RetSqlName("SC2")+" SC2 ON SC2.C2_FILIAL = '"+xFilial("SC2",oFiltros["01_HZA_FILIAL"])+"' AND SC2.C2_NUM+C2_ITEM+C2_SEQUEN+C2_ITEMGRD = HZA.HZA_OP AND SC2.D_E_L_E_T_ = ' ' " cQuery += " WHERE HZA.HZA_FILIAL = '" + xFilial("HZA",oFiltros["01_HZA_FILIAL"]) + "' " cQuery += " AND HZA.HZA_DTINI BETWEEN '" + dToS(dDataIni) + "' AND '" + dToS(dDataFin) + "' " cQuery += " AND HZA.HZA_STATUS = '"+IIF(oFiltros["04_HZA_STATUS"] == "A","1","2")+"' " If oFiltros:HasProperty("02_C2_PRODUTO") .And. ValType(oFiltros["02_C2_PRODUTO"]) == "A" For nIndice := 1 To Len(oFiltros["02_C2_PRODUTO"]) If Empty(cProdutos) cProdutos := "'" + oFiltros["02_C2_PRODUTO"][nIndice] + "'" Else cProdutos += ",'" + oFiltros["02_C2_PRODUTO"][nIndice] + "'" EndIf Next nIndice EndIf If !Empty(cProdutos) cQuery += " AND SC2.C2_PRODUTO IN ("+cProdutos+") " EndIf If oFiltros:HasProperty("03_HZA_OPERAD") .And. ValType(oFiltros["03_HZA_OPERAD"]) == "A" For nIndice := 1 To Len(oFiltros["03_HZA_OPERAD"]) If Empty(cUsuarios) cUsuarios := "'" + oFiltros["03_HZA_OPERAD"][nIndice] + "'" Else cUsuarios += ",'" + oFiltros["03_HZA_OPERAD"][nIndice] + "'" EndIf Next nIndice EndIf If !Empty(cUsuarios) lFilUsuar := .T. cQuery += " AND HZA.HZA_OPERAD IN ("+cUsuarios+") " EndIf cQuery += " AND HZA.D_E_L_E_T_ = ' ' " cQuery += " ORDER BY HZA.HZA_FILIAL, HZA.HZA_OPERAD " dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAlias,.F.,.F.) While (cAlias)->(!Eof()) cUsrAtual := IIF(lFilUsuar,(cAlias)->HZA_OPERAD,"Todos") If !oDados:HasProperty(cUsrAtual) oDados[cUsrAtual] := JsonObject():New() oDados[cUsrAtual]["1"] := 0 oDados[cUsrAtual]["2"] := 0 EndIf If oFiltros["05_APONTAMENTOHORA"] == "H" If oFiltros["04_HZA_STATUS"] == "A" If (cAlias)->HZA_DTINI != dToS(dDatabase) nDifDias := DateDiffDay(sToD((cAlias)->HZA_DTINI),dDatabase) - 1 nMinutos := nDifDias * 24 * 60 nMinutos += Hrs2Min(ElapTime(SubStr((cAlias)->HZA_HRINI,1,5)+":00","24:00:00")) nMinutos += Hrs2Min(ElapTime("00:00:00",SubStr(Time(),1,5)+":00")) Else nMinutos += Hrs2Min(ElapTime(SubStr((cAlias)->HZA_HRINI,1,5)+":00",SubStr(Time(),1,5)+":00")) EndIf Else If (cAlias)->HZA_DTINI != (cAlias)->HZA_DTFIM nDifDias := DateDiffDay(sToD((cAlias)->HZA_DTINI),sToD((cAlias)->HZA_DTFIM)) - 1 nMinutos := nDifDias * 24 * 60 nMinutos += Hrs2Min(ElapTime(SubStr((cAlias)->HZA_HRINI,1,5)+":00","24:00:00")) nMinutos += Hrs2Min(ElapTime("00:00:00",SubStr((cAlias)->HZA_HRFIM,1,5)+":00")) Else nMinutos := Hrs2Min(ElapTime(SubStr((cAlias)->HZA_HRINI,1,5)+":00",SubStr((cAlias)->HZA_HRFIM,1,5)+":00")) EndIf EndIf oDados[cUsrAtual][(cAlias)->HZA_TPTRNS] += nMinutos Else oDados[cUsrAtual][(cAlias)->HZA_TPTRNS]++ EndIf (cAlias)->(dbSkip()) End (cAlias)->(dbCloseArea()) aUsuarios := oDados:GetNames() For nIndice := 1 To Len(aUsuarios) aAdd(aProd,IIF(oFiltros["05_APONTAMENTOHORA"] == "H",NOROUND(((oDados[aUsuarios[nIndice]]["1"] / 0.6) / 100),2),oDados[aUsuarios[nIndice]]["1"])) aAdd(aPausa,IIF(oFiltros["05_APONTAMENTOHORA"] == "H",NOROUND(((oDados[aUsuarios[nIndice]]["2"] / 0.6) / 100),2),oDados[aUsuarios[nIndice]]["2"])) aUsuarios[nIndice] := IIF(lFilUsuar,UsrRetName(aUsuarios[nIndice]),aUsuarios[nIndice]) Next nIndice PCPMonitorUtils():AdicionaSerieGraficoMonitor(oJsonRet["series"],@nIndSerie,COR_VERDE,aProd,"Produção") PCPMonitorUtils():AdicionaSerieGraficoMonitor(oJsonRet["series"],@nIndSerie,COR_VERMELHO,aPausa,"Pausa") PCPMonitorUtils():AdicionaCategoriasGraficoMonitor(oJsonRet["categorias"], aUsuarios) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-calendar",dToC(dDataIni) + " - " + dToC(dDataFin)) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-parameters",IIF(oFiltros["04_HZA_STATUS"] == "A","Em Andamento","Concluído")) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-parameters",IIF(oFiltros["05_APONTAMENTOHORA"] == "H","Horas","Apontamentos")) If oFiltros:HasProperty("02_C2_PRODUTO") .And. ValType(oFiltros["02_C2_PRODUTO"]) == "A" For nIndice := 1 To Len(oFiltros["02_C2_PRODUTO"]) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPosTag,"po-icon-bar-code",oFiltros["02_C2_PRODUTO"][nIndice]) Next nIndice EndIf cJsonDados := oJsonRet:ToJson() FreeObj(oDados) FreeObj(oJsonRet) FwFreeArray(aPausa) FwFreeArray(aProd) FwFreeArray(aUsuarios) Return cJsonDados |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Method BuscaDados(oFiltros, cTipo, cSubTipo) Class StatusLotesAVencer Local aSemaforo := StrTokArr(Replace(oFiltros["03_SEMAFORO"],",","."),";") Local cAliasQry := GetNextAlias() Local cCodProd := oFiltros["02_B8_PRODUTO"] Local cLabel := "" Local cJsonDados := "" Local cQuery := "" Local cUnMedida := "" Local cValorFim := "" Local cValSemaf1 := aSemaforo[1] Local cValSemaf2 := aSemaforo[2] Local dFilterDat := PCPMonitorUtils():RetornaPeriodoFinal(oFiltros["05_TIPOPERIODO"],ddatabase,cValtoChar(oFiltros["06_PERIODO"])) Local nLotes := 0 Local nPos := 0 Local nQuant := 0 Local nSaldo := 0 Local nValorFim := 0 Local nValSemaf1 := Val(cValSemaf1) Local nValSemaf2 := Val(cValSemaf2) Local oJsonRet := JsonObject():New() Local oGauge := PCPMonitorGauge():New() //Propriedades que devem ser retornadas para monitores do tipo gráfico //Propriedades que devem ser retornadas para monitores do tipo gráfico oJsonRet["corTitulo"] := "black" //Cor do título do monitor. Se não for informada, assumirá o valor #2590aa oJsonRet["alturaMinimaWidget"] := "350px" //Altura mínima do monitor. Se não for informada, assumirá o valor 350px oJsonRet["alturaMaximaWidget"] := "500px" //Altura máxima do monitor. Se não for informada, assumirá o valor 350px oJsonRet["tags"] := {} //Array de objetos json com as tags que serão visualizadas no monitor oJsonRet["series"] := {} //Array de objetos json com as séries do gráfico. Será apenas inicializado para o gráfico do tipo velocímetro. oJsonRet["categorias"] := {} //Array de strings com as categorias do gráfico. Será apenas inicializado para o gráfico do tipo velocímetro. oFiltros["01_B8_FILIAL"] := PadR(oFiltros["01_B8_FILIAL"], FWSizeFilial()) cUnMedida := Posicione("SB1",1,xFilial("SB1",oFiltros["01_B8_FILIAL"])+cCodProd,"B1_UM") //Query com os filtros para buscar as informações e apresentar no monitor cQuery += " SELECT " cQuery += " SB8.B8_PRODUTO CODIGO_PRODUTO, " cQuery += " SUM(SB8.B8_SALDO) SALDO, " cQuery += " COUNT(SB8.R_E_C_N_O_) QUANTIDADE_LOTES " cQuery += " FROM "+RetSqlName("SB8")+" SB8 " cQuery += " WHERE SB8.B8_FILIAL = '" + xFilial("SB8",oFiltros["01_B8_FILIAL"]) + "' " cQuery += " AND SB8.B8_PRODUTO = '" + cCodProd + "'//Query com os filtros para buscar as informações e apresentar no monitor cQuery += " SELECT " cQuery += " AND SB8.B8_PRODUTO CODIGO_PRODUTO,DTVALID BETWEEN '"+DTOS(ddatabase)+"' AND '"+DTOS(dFilterDat)+"' " cQuery += " AND SUM(SB8.B8_SALDO) > SALDO,0 " cQuery += " AND COUNT(SB8.RD_E_CL_N_O_) QUANTIDADE_LOTES " cQuery += " FROM "+RetSqlName("SB8")+" SB8 "E_T_ = ' ' " cQuery += " WHEREGROUP BY SB8.B8_FILIAL,SB8.B8_PRODUTO = '" + xFilialdbUseArea(.T.,"SB8",oFiltros["01_B8_FILIAL"]) + "' "TOPCONN",TcGenQry(,,cQuery),cAliasQry,.F.,.F.) cQueryIf += " (cAliasQry)->(!Eof()) AND SB8.B8_PRODUTO = '" + cCodProd + "' ":= AllTrim((cAliasQry)->CODIGO_PRODUTO) cQuery += " nLotes AND SB8.B8_DTVALID BETWEEN '"+DTOS(ddatabase)+"' AND := '"+DTOS(dFilterDat)+"' " cAliasQry)->QUANTIDADE_LOTES nSaldo cQuery += " AND SB8.B8_SALDO > 0 ":= (cAliasQry)->SALDO End cQuery += "(cAliasQry)->(dbCloseArea()) AND SB8.D_E_L_E_T_ = ' ' " cQuery += " GROUP BY SB8.B8_FILIAL,SB8.B8_PRODUTO " dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasQry,.F.,.F.) If (cAliasQry)->(!Eof())If oFiltros["04_TIPOSEMAFORO"] == "L" nQuant := nLotes cLabel := IIF(nLotes > 1, "Lotes", "Lote") Else cCodProd nQuant := AllTrim((cAliasQry)->CODIGO_PRODUTO)nSaldo nLotes cLabel := (cAliasQry)->QUANTIDADE_LOTEScUnMedida EndIf nSaldoIf nQuant > nValSemaf2 := (cAliasQry)->SALDO End nValorFim := nQuant + (cAliasQry)->(dbCloseArea()nValSemaf2 - nValSemaf1) If oFiltros["04_TIPOSEMAFORO"] == "L" Else nValorFim := nValSemaf2 nQuant+ (nValSemaf2 :=- nLotesnValSemaf1) EndIf cTxtPrccValorFim := cValToChar(nLotesnValorFim) //Especifica as propriedades do cTxtSecgráfico := cValToChar(nSaldo) + " " + cUnMedidatipo velocímetro oGauge:SetMaxValue(nValorFim) ElseoGauge:SetValue(nQuant) oGauge:SetValueStyle("color",IIF(nQuant < nValSemaf1,"rgb(38,186,65)",IIF(nQuant nQuant := nSaldo< nValSemaf2,"rgb(255,207,1)","rgb(245,0,49)"))) oGauge:SetValueStyle("font-weight","bold") oGauge:SetLabel(cLabel) cTxtPrc oGauge:= cValToChar(nSaldoSetLabelStyle("font-weight","bold") oGauge:SetThreshold("0","rgb(38,186,65)") cTxtSec := cValToChar(nLotes) + IIF(nLotes > 1, " Lotes", " Lote") EndIf //Adiciona as linhas de informação no monitoroGauge:SetThreshold(cValSemaf1,"rgb(238,173,45)") oGauge:SetThreshold(cValSemaf2,"rgb(245,0,49)") If Val(cValSemaf1) > 0 If nLotes > oGauge:SetMarker("0 oStyleSec["color"] := "white" oJSonRet["corFundo"] := IIF(nQuant < nValSemaf1,"rgb(38,186,65)",IIF(nQuant < nValSemaf2,"rgb(255,207,1)","rgb(245,0,49)"") Endif oGauge:SetMarker(cValSemaf1) oGauge:SetMarker(cValSemaf2) oGauge:SetMarker(cValorFim) //Atribui o objeto json If oJSonRet["corFundo"] == "rgb(255,207,1)" oStyleSec["color"] := "black" oJsonRet["corTitulo"] := "black" EndIfdo velocímetro ao objeto json de retorno do método oJsonRet["gauge"] := oGauge:GetJsonObject() //Adiciona tags ao monitor PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-calendar",cValToChar(ddatabase) + " - " + cValToChar(dFilterDat)) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-bar-code",cCodProd) If cTipo == "chart" oStylePrc["font-weightPCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-star-filled",IIF(oFiltros["04_TIPOSEMAFORO"] :== "bold" oStylePrc["font-size"] := "120px" oStylePrc["line-height"] := "130px"L",cValToChar(nSaldo) + " " + cUnMedida,cValToChar(nLotes) + IIF(nLotes > 1, " Lotes", " Lote"))) EndIf oStylePrc["text-align"] cJsonDados := "center" oJsonRet:toJson() oStylePrc["color"]FwFreeArray(aSemaforo) FreeObj(oGauge) FreeObj(oJsonRet) Return cJsonDados |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Method BuscaDados(oFiltros, cTipo, cSubTipo) Class StatusLotesAVencer Local aSemaforo:= oStyleSec["color"] oStylePrc["cursor"] := "pointer" PCPMonitorUtils():AdicionaLinhaInformacao(oJsonRet["linhasStrTokArr(Replace(oFiltros["03_SEMAFORO"],@nIndLinha",cTxtPrc","po-sm-12",oStylePrc:ToJson(),.T.."),";") Local cAliasQry := PCPMonitorUtilsGetNextAlias():AdicionaLinhaInformacao(oJsonRet["linhas"],@nIndLinha,cTxtSec,"po-font-title po-text-center po-sm-12 po-pt-1 bold-text",oStyleSec:ToJson()) Else oJsonRet["corFundo"] := "rgb(38,186,65) Local cCodProd := oFiltros["02_B8_PRODUTO"] Local cJsonDados := "" Local cQuery := "" Local cTxtPrc PCPMonitorUtils():AdicionaLinhaInformacao(oJsonRet["linhas"],@nIndLinha,"Nenhum lote do produto vencerá no período selecionado.","po-font-text-large-bold po-text-center po-sm-12 po-pt-4",oStyleSec:ToJson()) EndIf //Adiciona tags ao monitor PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-calendar",cValToChar(ddatabase) + " - " + cValToChar(dFilterDat)) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-bar-code",cCodProd) If oFiltros["04_TIPOSEMAFORO"] == "Q" PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-weight",""Un. Medida: "+ cUnMedida) EndIf cJsonDados := oJsonRet:toJson() FwFreeArray(aSemaforo) FreeObj(oJsonRet) Return cJsonDados | ||||||||||
Bloco de código | ||||||||||
| ||||||||||
Method BuscaDados(oFiltros, cTipo, cSubTipo) Class StatusLotesAVencer:= "" Local cTxtSec := "" Local cUnMedida := "" Local dFilterDat := PCPMonitorUtils():RetornaPeriodoFinal(oFiltros["05_TIPOPERIODO"],ddatabase,cValtoChar(oFiltros["06_PERIODO"])) Local nIndLinha := 0 Local nQuant := 0 Local nValSemaf1 := Val(aSemaforo[1]) Local nValSemaf2 := Val(aSemaforo[2]) Local nLotes := 0 Local nPos := 0 Local nSaldo := 0 Local oJsonRet := JsonObject():New() Local oStylePrc := JsonObject():New() Local aSemaforooStyleSec := StrTokArrJsonObject(Replace(oFiltros["03_SEMAFORO"],",","."),";")):New() Local//Propriedades cAliasQryque devem := GetNextAlias() Local cCodProdser retornadas para monitores do tipo texto := oFiltrosoJsonRet["02_B8_PRODUTOcorTitulo"] Local cLabel := "white" //Cor do título do Localmonitor. cJsonDadosSe := "" Local cQuerynão for informada, assumirá o valor #2590aa oJsonRet["alturaMinimaWidget"] := "350px" //Altura mínima do monitor. LocalSe cUnMedidanão := "" Local cValorFim for informada, assumirá o valor 350px oJsonRet["alturaMaximaWidget"] := "500px" //Altura máxima do Localmonitor. cValSemaf1Se := aSemaforo[1] Local cValSemaf2 := aSemaforo[2] Local dFilterDat := PCPMonitorUtils():RetornaPeriodoFinal(oFiltros["05_TIPOPERIODO"],ddatabase,cValtoChar(oFiltros["06_PERIODO"])) Local nLotesnão for informada, assumirá o valor 350px oJsonRet["linhas"] := 0 {} //Array Localde nPosobjetos json com cada linha de informação :=do 0monitor Local nQuant oJsonRet["tags"] := 0 Local nSaldo := 0 {} //Array Localde nValorFimobjetos json :=com 0 as tags que serão Localvisualizadas nValSemaf1no := Val(cValSemaf1)monitor Local nValSemaf2oFiltros["01_B8_FILIAL"] := Val(cValSemaf2) PadR(oFiltros["01_B8_FILIAL"], FWSizeFilial()) Local oJsonRetcUnMedida := JsonObject():New() Local oGaugePosicione("SB1",1,xFilial("SB1",oFiltros["01_B8_FILIAL"])+cCodProd,"B1_UM") //Query := PCPMonitorGauge():New() //Propriedades que devem ser retornadas para monitores do tipo gráfico oJsonRet["alturaMinimaWidget"] := "350pxcom os filtros para buscar as informações e apresentar no monitor cQuery += " SELECT " oJsonRet["alturaMaximaWidget"] :cQuery += "500px" oJsonRet["categorias"] SB8.B8_PRODUTO CODIGO_PRODUTO, " cQuery := {} oJsonRet["series"]+= " SUM(SB8.B8_SALDO) SALDO, " cQuery :+= {} oJsonRet["tags"] COUNT(SB8.R_E_C_N_O_) QUANTIDADE_LOTES " cQuery :+= {} " oJsonRet["detalhes"] FROM "+RetSqlName("SB8")+" SB8 " cQuery :+= {} " oFiltros["01_WHERE SB8.B8_FILIAL"] := PadR(oFiltros["01_B8_FILIAL"], FWSizeFilial()) cUnMedida := Posicione("SB1",1,'" + xFilial("SB1SB8",oFiltros["01_B8_FILIAL"]) +cCodProd,"B1_UM") //Query com os filtros para buscar as informações e apresentar no monitor cQuery += " SELECT "' " cQuery += " AND SB8.B8_PRODUTO = '" + cCodProd + "' " cQuery += " AND SB8.B8_PRODUTO CODIGO_PRODUTO,DTVALID BETWEEN '"+DTOS(ddatabase)+"' AND '"+DTOS(dFilterDat)+"' " cQuery += " AND SUM(SB8.B8_SALDO) > SALDO,0 " cQuery += " AND COUNT(SB8.RD_E_CL_N_O_) QUANTIDADE_LOTES " cQuery += " FROM "+RetSqlName("SB8")+" SB8E_T_ = ' ' " cQuery += " GROUP WHEREBY SB8.B8_FILIAL,SB8.B8_PRODUTO = '" + xFilial("SB8",oFiltros["01_B8_FILIAL"]) + "' " cQuery += " AND SB8.B8_PRODUTO = '" + cCodProd + "' " cQuery += " AND SB8.B8_DTVALID BETWEEN '"+DTOS(ddatabase)+"' AND '"+DTOS(dFilterDat)+"' " cQuery += " AND SB8.B8_SALDO > 0 " cQuery += " AND SB8.D_E_L_E_T_ = ' ' " cQuery += " GROUP BY SB8.B8_FILIAL,SB8.B8_PRODUTO " dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasQry,.F.,.F.) If (cAliasQry)->(!Eof()) cCodProd := AllTrim((cAliasQry)->CODIGO_PRODUTO) nLotes := (cAliasQry)->QUANTIDADE_LOTES nSaldo := (cAliasQry)->SALDO End (cAliasQry)->(dbCloseArea()) If oFiltros["04_TIPOSEMAFORO"] == "L dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasQry,.F.,.F.) If (cAliasQry)->(!Eof()) cCodProd := AllTrim((cAliasQry)->CODIGO_PRODUTO) nLotes := (cAliasQry)->QUANTIDADE_LOTES nSaldo := (cAliasQry)->SALDO End (cAliasQry)->(dbCloseArea()) If oFiltros["04_TIPOSEMAFORO"] == "L" nQuant := nLotes cTxtPrc := cValToChar(nLotes) cTxtSec := cValToChar(nSaldo) + " " + cUnMedida Else nQuant := nSaldo cTxtPrc := cValToChar(nSaldo) cTxtSec := cValToChar(nLotes) + IIF(nLotes > 1, " Lotes", " Lote") EndIf //Adiciona as linhas de informação no monitor If nLotes > 0 oStyleSec["color"] := "white" nQuant oJSonRet["corFundo"] := nLotes IIF(nQuant cLabel := IIF(nLotes > 1, "Lotes", "Lote"< nValSemaf1,"rgb(38,186,65)",IIF(nQuant < nValSemaf2,"rgb(255,207,1)","rgb(245,0,49)")) Else If oJSonRet["corFundo"] == nQuant"rgb(255,207,1)" := nSaldo cLabel oStyleSec["color"] := cUnMedida "black" EndIf If nQuant > nValSemaf2 oJsonRet["corTitulo"] := "black" nValorFimEndIf := nQuant + (nValSemaf2 - nValSemaf1) oStylePrc["font-weight"] := Else"bold" nValorFimoStylePrc["font-size"] := nValSemaf2 + (nValSemaf2 - nValSemaf1)"120px" EndIf cValorFimoStylePrc["line-height"] := cValToChar(nValorFim) //Especifica as propriedades do gráfico tipo velocímetro oGauge:SetMaxValue(nValorFim)"130px" oStylePrc["text-align"] := "center" oGauge:SetValue(nQuant) oGauge:SetValueStyle(oStylePrc["color",IIF(nQuant] < nValSemaf1,"rgb(38,186,65)",IIF(nQuant < nValSemaf2,"rgb(255,207,1)","rgb(245,0,49)")) oGauge:SetValueStyle("font-weight","bold"):= oStyleSec["color"] oGauge:SetLabel(cLabel) oGauge:SetLabelStyle("font-weight","bold") oStylePrc["cursor"] oGauge:SetThreshold("0","rgb(38,186,65)")= "pointer" oGauge:SetThreshold(cValSemaf1,"rgb(238,173,45)") oGaugePCPMonitorUtils():SetThreshold(cValSemaf2,"rgb(245,0,49)") If Val(cValSemaf1) > 0AdicionaLinhaInformacao(oJsonRet["linhas"],@nIndLinha,cTxtPrc,"po-sm-12",oStylePrc:ToJson(),.T.) oGaugePCPMonitorUtils():SetMarkerAdicionaLinhaInformacao("0") EndifoJsonRet["linhas"],@nIndLinha,cTxtSec,"po-font-title po-text-center po-sm-12 po-pt-1 bold-text",oStyleSec:ToJson()) oGauge:SetMarker(cValSemaf1) Else oGauge:SetMarker(cValSemaf2) oJsonRet["corFundo"] oGauge:SetMarker(cValorFim) //Atribui o objeto json do velocímetro ao objeto json de retorno do método oJsonRet["gauge"] := oGauge:GetJsonObject() := "rgb(38,186,65)" PCPMonitorUtils():AdicionaLinhaInformacao(oJsonRet["linhas"],@nIndLinha,"Nenhum lote do produto vencerá no período selecionado.","po-font-text-large-bold po-text-center po-sm-12 po-pt-4",oStyleSec:ToJson()) EndIf //Adiciona tags ao monitor PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-calendar",cValToChar(ddatabase) + " - " + cValToChar(dFilterDat)) PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-bar-code",cCodProd) If cTipooFiltros["04_TIPOSEMAFORO"] == "chartQ" PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-star-filledweight",IIF(oFiltros["04_TIPOSEMAFORO"] == "L",cValToChar(nSaldo) + " " + cUnMedida,cValToChar(nLotes) + IIF(nLotes > 1, " Lotes", " Lote"))"Un. Medida: "+ cUnMedida) EndIf cJsonDados := oJsonRet:toJson() FwFreeArray(aSemaforo) FreeObj(oGauge) FreeObj(oJsonRet) Return cJsonDados |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas