Á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 Tipo Gráfico Simples
linenumberstrue
collapsetrue
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

...