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 StatusPlayStopPCP
Local aPausa := {}
Local aProd := {}
Local aUsuarios := {}
Local cAlias := GetNextAlias()
Local cJsonDados := ""
Local cProdutos := ""
Local cUsuarios := ""
Local cUsrAtual := ""
Local cQuery := ""
Local dDataIni := dDatabase
Local dDataFin := dDatabase
Local lFilUsuar := .F.
Local nIndice := 0
Local nIndSerie := 0
Local nPosTag := 0
Local oDados := JsonObject():New()
Local oJsonRet := JsonObject():New()
oJsonRet["alturaMinimaWidget"] := "350px"
oJsonRet["alturaMaximaWidget"] := "500px"
oJsonRet["categorias"] := {}
oJsonRet["series"] := {}
oJsonRet["tags"] := {}
oFiltros["01_HZA_FILIAL"] := PadR(oFiltros["01_HZA_FILIAL"], FWSizeFilial())
dDataIni := PCPMonitorUtils():RetornaPeriodoInicial(oFiltros["06_TIPOPERIODO"],dDataFin,cValtoChar(oFiltros["07_PERIODO"]))
cQuery +=" SELECT "
cQuery += " HZA.HZA_FILIAL,
cQuery += " HZA.HZA_OP,
cQuery += " HZA.HZA_OPERAD,
cQuery += " HZA.HZA_DTINI,
cQuery += " HZA.HZA_HRINI,
cQuery += " HZA.HZA_DTFIM,
cQuery += " HZA.HZA_HRFIM,
cQuery += " HZA.HZA_TPTRNS
cQuery += " 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 cTxtPrc Local cUnMedida := ""
Local cTxtSec cValorFim := ""
Local cUnMedida cValSemaf1 := aSemaforo[1]
Local cValSemaf2 := ""aSemaforo[2]
Local dFilterDat := PCPMonitorUtils():RetornaPeriodoFinal(oFiltros["05_TIPOPERIODO"],ddatabase,cValtoChar(oFiltros["06_PERIODO"]))
Local nIndLinhanLotes := 0
Local nPos nQuant := 0
Local nValSemaf1nQuant := Val(aSemaforo[1])
Local nValSemaf2 := Val(aSemaforo[2]) 0
Local nLotesnSaldo := 0
Local nPosnValorFim := 0
Local nValSemaf1 := 0Val(cValSemaf1)
Local nSaldo nValSemaf2 := 0Val(cValSemaf2)
Local oJsonRet := JsonObject():New()
Local oGauge oStylePrc := JsonObjectPCPMonitorGauge():New()
Local
oStyleSec := JsonObject():New()
//Propriedades que devem ser retornadas para monitores do tipo texto
oJsonRet["corTitulo"]gráfico //Propriedades que devem ser := "white" //Cor do 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["linhastags"] := {} //Array de objetos json com as cadatags linhaque deserão informaçãovisualizadas dono monitor
oJsonRet["tagsseries"] := {} //Array de objetos json com as tags que serão visualizadas no monitor
séries do gráfico. Será apenas inicializado para o gráfico do tipo velocímetro.
oFiltrosoJsonRet["01_B8_FILIAL"] 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 + "' "
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"
nQuant := nLotes
cTxtPrccLabel := cValToCharIIF(nLotes > 1, "Lotes", "Lote")
Else
cTxtSec nQuant := cValToChar(nSaldo)
+ " " + cUnMedida
cLabel := ElsecUnMedida
EndIf
If nQuant > := nSaldonValSemaf2
cTxtPrcnValorFim := nQuant cValToChar(nSaldo)+ (nValSemaf2 - nValSemaf1)
Else
cTxtSecnValorFim := cValToChar(nLotes)nValSemaf2 + IIF(nLotesnValSemaf2 > 1, " Lotes", " Lote"- nValSemaf1)
EndIf
//Adiciona as linhas de informaçãocValorFim no monitor:= cValToChar(nValorFim)
If nLotes > 0
oStyleSec["color"] := "white"
oJSonRet["corFundo"] := //Especifica as propriedades do gráfico tipo velocímetro
oGauge:SetMaxValue(nValorFim)
oGauge:SetValue(nQuant)
oGauge:SetValueStyle("color",IIF(nQuant < nValSemaf1,"rgb(38,186,65)",IIF(nQuant < nValSemaf2,"rgb(255,207,1)","rgb(245,0,49)")))
If oJSonRet["corFundo"] == "rgb(255,207,1)"oGauge:SetValueStyle("font-weight","bold")
oGauge:SetLabel(cLabel)
oStyleSec["color"] := "black"oGauge:SetLabelStyle("font-weight","bold")
oGauge:SetThreshold("0","rgb(38,186,65)")
oGauge:SetThreshold(cValSemaf1,"rgb(238,173,45)")
oJsonRet["corTitulo"] := "black"oGauge:SetThreshold(cValSemaf2,"rgb(245,0,49)")
If Val(cValSemaf1) > EndIf0
oStylePrc["font-weight"] := "bold"oGauge:SetMarker("0")
Endif
oStylePrc["font-size"] := "120px"oGauge:SetMarker(cValSemaf1)
oGauge:SetMarker(cValSemaf2)
oStylePrc["line-height"] := "130px"
oGauge:SetMarker(cValorFim)
//Atribui o objeto json oStylePrc["text-align"] := "center"
do velocímetro ao objeto json de retorno do método
oStylePrcoJsonRet["colorgauge"] := oStyleSec["color"]oGauge:GetJsonObject()
//Adiciona tags oStylePrc["cursor"]ao monitor
:= "pointer"
PCPMonitorUtils():AdicionaLinhaInformacaoAdicionaTagMonitor(oJsonRet["linhastags"],@nIndLinha@nPos,cTxtPrc,"po-smicon-12calendar",oStylePrc:ToJsoncValToChar(),.T.)
ddatabase) + " - " + cValToChar(dFilterDat))
PCPMonitorUtils():AdicionaLinhaInformacaoAdicionaTagMonitor(oJsonRet["linhastags"],@nIndLinha,cTxtSec@nPos,"po-font-title po-text-center po-sm-12 po-pt-1 bold-text",oStyleSec:ToJson())
Elseicon-bar-code",cCodProd)
If cTipo == "chart"
PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["corFundotags"],@nPos,"po-icon-star-filled",IIF(oFiltros["04_TIPOSEMAFORO"] :== "L"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 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 | ||||||||||
| ||||||||||
,cValToChar(nSaldo) + " " + cUnMedida,cValToChar(nLotes) + IIF(nLotes > 1, " Lotes", " Lote")))
EndIf
cJsonDados := oJsonRet:toJson()
FwFreeArray(aSemaforo)
FreeObj(oGauge)
FreeObj(oJsonRet)
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 cJsonDados := "" Local cQuery := "" Local cTxtPrc := "" Local cTxtSec := "" Local cUnMedida := "" Local dFilterDat := PCPMonitorUtils():RetornaPeriodoFinal(oFiltros["05_TIPOPERIODO"],ddatabase,cValtoChar(oFiltros["06_PERIODO"])Method BuscaDados(oFiltros, cTipo, cSubTipo) Class StatusLotesAVencer Local aSemaforo := StrTokArr(Replace(oFiltros["03_SEMAFORO"],",","."),";") Local cAliasQrynIndLinha := GetNextAlias()0 Local nQuant cCodProd := oFiltros["02_B8_PRODUTO"] Local cLabel0 Local nValSemaf1 := ""Val(aSemaforo[1]) Local cJsonDadosnValSemaf2 := "" Val(aSemaforo[2]) Local cQuerynLotes := ""0 Local cUnMedidanPos := ""0 Local nSaldo cValorFim := ""0 Local oJsonRet cValSemaf1 := aSemaforo[1]JsonObject():New() Local cValSemaf2oStylePrc := aSemaforo[2] JsonObject():New() Local oStyleSec dFilterDat := PCPMonitorUtilsJsonObject():RetornaPeriodoFinal(oFiltros["05_TIPOPERIODO"],ddatabase,cValtoChar(oFiltros["06_PERIODO"]))New() Local nLotes //Propriedades :=que 0 devem ser retornadas para Localmonitores nPosdo tipo texto := 0 Local nQuantoJsonRet["corTitulo"] := 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"white" //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["linhas"] := {} //PropriedadesArray quede devemobjetos serjson retornadascom para monitorescada linha de informação do tipo gráficomonitor oJsonRet["corTitulotags"] := "black"{} //CorArray dode títuloobjetos dojson monitor.com Seas nãotags forque informada,serão assumirávisualizadas ono valormonitor #2590aa oJsonRetoFiltros["alturaMinimaWidget01_B8_FILIAL"] := "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 "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 + "' " cQuery += " AND SB8.B8_DTVALID BETWEEN '"+DTOS(ddatabase)+"' AND '"+DTOS(dFilterDat)+"' " cQuery += " AND SB8.B8_PRODUTO CODIGO_PRODUTO, " cQuery += " SUM(SB8.B8_SALDO) SALDO, SALDO > 0 " cQuery += " AND COUNT(SB8.RD_E_CL_N_O_) QUANTIDADE_LOTES " cQuery += " FROM "+RetSqlName("SB8")+" SB8E_T_ = ' ' " cQuery += " WHEREGROUP BY 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 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" cQuery += " nQuant AND SB8.D_E_L_E_T_ = ' ' " := nLotes cQuery += " GROUP BY SB8.B8_FILIAL,SB8.B8_PRODUTO " dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasQry,.F.,.F.) cTxtPrc := cValToChar(nLotes) IfcTxtSec := cValToChar(cAliasQry)->(!Eof())nSaldo) + " " + cUnMedida Else cCodProd nQuant := AllTrim((cAliasQry)->CODIGO_PRODUTO) nSaldo cTxtPrc := cValToChar(nSaldo) nLotes cTxtSec := cValToChar(cAliasQrynLotes)->QUANTIDADE_LOTES + IIF(nLotes > 1, " Lotes", " nSaldoLote") EndIf := (cAliasQry)->SALDO //Adiciona as End linhas de informação (cAliasQry)->(dbCloseArea()) no monitor If oFiltros["04_TIPOSEMAFORO"] == "L"nLotes > 0 nQuant oStyleSec["color"] := nLotes"white" cLabel oJSonRet["corFundo"] := IIF(nLotesnQuant > 1, "Lotes", "Lote") Else< nValSemaf1,"rgb(38,186,65)",IIF(nQuant < nValSemaf2,"rgb(255,207,1)","rgb(245,0,49)")) nQuant := nSaldoIf oJSonRet["corFundo"] == "rgb(255,207,1)" cLabel := cUnMedida EndIf oStyleSec["color"] := "black" If nQuant > nValSemaf2 nValorFimoJsonRet["corTitulo"] := nQuant"black" + (nValSemaf2 - nValSemaf1) ElseEndIf nValorFimoStylePrc["font-weight"] := nValSemaf2"bold" + (nValSemaf2 - nValSemaf1) EndIf oStylePrc["font-size"] cValorFim := cValToChar(nValorFim) //Especifica as propriedades do gráfico tipo velocímetro oGauge:SetMaxValue(nValorFim)"120px" oStylePrc["line-height"] := "130px" oGauge:SetValue(nQuant) oGauge:SetValueStyle("color",IIF(nQuant < nValSemaf1,"rgb(38,186,65)",IIF(nQuant < nValSemaf2,"rgb(255,207,1)","rgb(245,0,49)"))oStylePrc["text-align"] := "center" oGauge:SetValueStyle("font-weight","bold") oStylePrc["color"] := oStyleSec["color"] oGauge:SetLabel(cLabel) oGauge:SetLabelStyle("font-weight","bold")oStylePrc["cursor"] := "pointer" oGauge:SetThreshold("0","rgb(38,186,65)" PCPMonitorUtils():AdicionaLinhaInformacao(oJsonRet["linhas"],@nIndLinha,cTxtPrc,"po-sm-12",oStylePrc:ToJson(),.T.) oGauge:SetThreshold(cValSemaf1,"rgb(238,173,45)") oGauge:SetThreshold(cValSemaf2,"rgb(245,0,49)" PCPMonitorUtils():AdicionaLinhaInformacao(oJsonRet["linhas"],@nIndLinha,cTxtSec,"po-font-title po-text-center po-sm-12 po-pt-1 bold-text",oStyleSec:ToJson()) If Val(cValSemaf1) > 0Else oGauge:SetMarker("0") Endif oGauge:SetMarker(cValSemaf1)oJsonRet["corFundo"] := "rgb(38,186,65)" oGauge:SetMarker(cValSemaf2) oGaugePCPMonitorUtils():SetMarker(cValorFim) //Atribui o objeto jsonAdicionaLinhaInformacao(oJsonRet["linhas"],@nIndLinha,"Nenhum lote do velocímetroproduto aovencerá objetono json de retorno do métodoperíodo selecionado.","po-font-text-large-bold po-text-center po-sm-12 po-pt-4",oStyleSec:ToJson()) oJsonRet["gauge"] EndIf := 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 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 |
Import HTML Content
Visão Geral
Conteúdo das Ferramentas