Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
languagecpp
firstline1
titleExemplo Gauge (Velocímetro)
linenumberstrue
collapsetrue
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 + "' "
    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
        cLabel  := IIF(nLotes > 1, "Lotes", "Lote")
    Else
        nQuant  := nSaldo
        cLabel  := cUnMedida
    EndIf
    If nQuant > nValSemaf2
        nValorFim := nQuant + (nValSemaf2 - nValSemaf1)
    Else
        nValorFim := nValSemaf2 + (nValSemaf2 - nValSemaf1)
    EndIf
    cValorFim := cValToChar(nValorFim)
 
    //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)")))
    oGauge:SetValueStyle("font-weight","bold")
    oGauge:SetLabel(cLabel)
    oGauge:SetLabelStyle("font-weight","bold")
    oGauge:SetThreshold("0","rgb(38,186,65)")
    oGauge:SetThreshold(cValSemaf1,"rgb(238,173,45)")
    oGauge:SetThreshold(cValSemaf2,"rgb(245,0,49)")
    If Val(cValSemaf1) > 0
        oGauge:SetMarker("0")
    Endif
    oGauge:SetMarker(cValSemaf1)
    oGauge:SetMarker(cValSemaf2)
    oGauge:SetMarker(cValorFim)
    //Atribui o objeto json do 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"
        PCPMonitorUtils():AdicionaTagMonitor(oJsonRet["tags"],@nPos,"po-icon-star-filled",IIF(oFiltros["04_TIPOSEMAFORO"] == "L",cValToChar(nSaldo) + " " + cUnMedida,cValToChar(nLotes) + IIF(nLotes > 1, " Lotes", " Lote")))
    EndIf
    cJsonDados :=  oJsonRet:toJson()
 
    FwFreeArray(aSemaforo)
    FreeObj(oGauge)
    FreeObj(oJsonRet)
Return cJsonDados

...