Versões comparadas

Chave

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

Disponibiliza umaPone a disposición una API REST en el no Dashboard para visualizar um un gráfico de Pizza ouo Polar.


...


Bloco de código
languagejava
themeEclipse
titleExemplo3Ejemplo3.prw
linenumberstrue
#INCLUDE "TOTVS.CH"
#INCLUDE "RESTFUL.CH"

//------------------------------------------------------------------------
/*/{Protheus.doc} Exemplo3
    ExemploEjemplo de API de integraçãointegración de GraficosGráficos de Barra ey LinhaLínea

    @author     Squad CRM & FaturamentoFacturación
    @since      28/07/2020
    @version    12.1.27  
/*/
//------------------------------------------------------------------------
WSRESTFUL Exemplo3Ejemplo3 DESCRIPTION "ExemploEjemplo de API - GraficoGráfico Barra ey LinhaLínea"
    WSDATA JsonFilter       AS STRING	  OPTIONAL
    WSDATA drillDownFilter  AS STRING	  OPTIONAL
    WSDATA Fields           AS STRING	  OPTIONAL
    WSDATA Order            AS STRING	  OPTIONAL
    WSDATA Page             AS INTEGER	OPTIONAL
    WSDATA PageSize         AS INTEGER	OPTIONAL

    WSMETHOD GET form ;
        DESCRIPTION "Formulario de Cadastroregistro dodel Gráficográfico" ;
        WSSYNTAX "/charts/form/" ;
        PATH "/charts/form";
        PRODUCES APPLICATION_JSON

    WSMETHOD GET filterItens ;
        DESCRIPTION "RetornaDevuelve todos oslos filtros adicionaradicionales dodel gráfico." ;
        WSSYNTAX "/charts/filterItens/" ;
        PATH "/charts/filterItens";
        PRODUCES APPLICATION_JSON

    WSMETHOD POST retDados ;
        DESCRIPTION "DeveráDebe devolver retornarlas asinformaciones informaçõespresentadas apresentadasen noel gráfico." ;
        WSSYNTAX "/charts/retDados/{JsonFilter}" ;
        PATH "/charts/retDados";
        PRODUCES APPLICATION_JSON

    WSMETHOD POST itemsDetails ;
        DESCRIPTION "CarregaCarga olos detalhamentodetalles dodel gráfico" ;
        WSSYNTAX "/charts/itemsDetails/{JsonFilter}" ;
        PATH "/charts/itemsDetails";
        PRODUCES APPLICATION_JSON

ENDWSRESTFUL

//-------------------------------------------------------------------
/*/{Protheus.doc} GET form
  RetornaDevuelve oslos campos que serãose presentarán apresentadosen noel formulárioformulario.
  OEl padrãoestándar dodel campo devedebe seguir oel Dynamic Form dodel Portinari.

  @author Squad CRM & FaturamentoFacturación
  @since 27/03/2020
  @version Protheus 12.1.27
/*/
//-------------------------------------------------------------------
WSMETHOD GET form WSSERVICE Exemplo3Ejemplo3

    Local oResponse   := JsonObject():New()
    Local oCoreDash   := CoreDash():New()

    oCoreDash:SetPOForm("Tipo de Gráfico", "charttype"       , 6, "Tipo de Gráfico"        , .T., "string" , oCoreDash:SetPOCombo({{"line","LinhaLínea"}, {"bar","Barra"}}))
    oCoreDash:SetPOForm("Filtros"        , "dateIni"         , 6, "DataFecha Inicial"           , .T., 'date'   , , .T.)
    oCoreDash:SetPOForm(""               , "dateFim"         , 6, "DataFecha Final"             , .T., 'date'   , , .T.)

    oResponse  := oCoreDash:GetPOForm()

    Self:SetResponse( EncodeUtf8(oResponse:ToJson()))

Return .T.

//-------------------------------------------------------------------
/*/{Protheus.doc} GET filterItens
  RetornaDevuelve oslos campos que poderãose podrán serfiltrar filtradosen noel Gráfico

  @author Squad CRM & FaturamentoFacturación
  @since 27/03/2020
  @version Protheus 12.1.27
/*/
//-------------------------------------------------------------------
WSMETHOD GET filterItens WSSERVICE Exemplo3Ejemplo3

    Local aItems    := {}
    Local oItem
    Local oResponse		:=	JsonObject():New()

    oItem := JsonObject():New()
    oItem["property"]  :=	"product"
    oItem["label"] :=	"ProdutoProducto"
    aAdd(aItems, oItem)

    oItem := JsonObject():New()
    oItem["property"]  :=	"salesman"
    oItem["label"] :=	"Vendedor"
    aAdd(aItems, oItem)

    oItem := JsonObject():New()
    oItem["property"]  :=	"cod"
    oItem["label"] :=	"Código"
    aAdd(aItems, oItem)

    oResponse["items"]      := aItems

    Self:SetResponse( EncodeUtf8(oResponse:ToJson()))
Return .T.

//-------------------------------------------------------------------
/*/{Protheus.doc} POST retDados
  RetornaDevuelve oslos dadosdatos dodel Gráfico

  @author Squad CRM & FaturamentoFacturación
  @since 27/03/2020
  @version Protheus 12.1.27
/*/
//-------------------------------------------------------------------
WSMETHOD POST retDados WSRECEIVE JsonFilter WSSERVICE Exemplo3

    Local oResponse   := JsonObject():New()
    Local oCoreDash   := CoreDash():New()
    Local oJson       := JsonObject():New()

    oJson:FromJson(DecodeUtf8(Self:GetContent()))

    retDados(@oResponse, oCoreDash, oJson)

    Self:SetResponse( EncodeUtf8(oResponse:ToJson()))

    oResponse := Nil
    FreeObj( oResponse )

    oCoreDash:Destroy()
    FreeObj( oCoreDash )

Return .T.

//-------------------------------------------------------------------
/*/{Protheus.doc} GET retDados
  RetornaDevuelve oel valor dasde las Meta ey oel Valor Vendido de acuerdo acordocon comlos parâmetrosparámetros
  informados

  @author Squad CRM & FaturamentoFacturación
  @since 27/03/2020
  @version Protheus 12.1.27
/*/
//-------------------------------------------------------------------
Static Function retDados(oResponse, oCoreDash, oJson)
    Local aData    := {}
    Local aDataFim := {}
    Local aData1   := {}
    Local aData2   := {}
    Local aData3   := {}
    Local aData4   := {}
    Local aData5   := {}
    Local aCab     := {}
    Local aSaldo   := {}
    Local nSaldo   := 0

    If oJson:GetJsonText("level") == "null" .Or. Len(oJson["level"]) == 0
        aCab := {'Janeiro', 'Fevereiro', 'Março' }

        aData1 := { Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ) }
        aData2 := { Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ) }
        aData3 := { Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ) }
        aData4 := { Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ) }

        oCoreDash:SetGraphInfo( aData1, 'Vendedor 01' )
        oCoreDash:SetGraphInfo( aData2, 'Vendedor 02' )
        oCoreDash:SetGraphInfo( aData3, 'Vendedor 03' )
        oCoreDash:SetGraphInfo( aData4, 'Vendedor 04' )

        nSaldo := (aData1[1] + aData2[1] + aData3[1] + aData4[1] ) / 4
        aAdd(aSaldo, nSaldo)
        nSaldo := (aData1[2] + aData2[2] + aData3[2] + aData4[2] ) / 4
        aAdd(aSaldo, nSaldo)
        nSaldo := (aData1[3] + aData2[3] + aData3[3] + aData4[3] ) / 4
        aAdd(aSaldo, nSaldo)

        oCoreDash:SetGraphInfo( aSaldo, 'Média', 'line', "rgba(193,66,66,1.0)" ,,.F.)        

        aDataFim := {}
        aAdd(aDataFim, oCoreDash:SetChart(aCab,,.T.))
    ElseIf Len(oJson["level"]) == 1
        aCab := {'Semana 1', 'Semana 2', 'Semana 3', 'Semana 4' }

        aData1          := { Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 )}
        aData2          := { Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 )}
        aData3          := { Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 )}
        aData4          := { Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 )}
        aData5          := { Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 ), Randomize( 100000000.00, 999000000.00 )}

        oCoreDash:SetGraphInfo( aData1, '00000101 - Cliente 000001' )
        oCoreDash:SetGraphInfo( aData2, '00000102 - Cliente 000002' )
        oCoreDash:SetGraphInfo( aData3, '00543501 - Cliente 000003' )
        oCoreDash:SetGraphInfo( aData4, '00543502 - Cliente 000004' )
        oCoreDash:SetGraphInfo( aData5, '00543503 - Cliente 000005' )

        aDataFim := {}
        aAdd(aDataFim, oCoreDash:SetChart(aCab,,.T., ,"Maiores Vendas - " + oJson["level"][1]["labelDataSet"] + " - " + oJson["level"][1]["label"]))
    ElseIf Len(oJson["level"]) == 2
        aCab := {"Pedido - 234323", "Pedido - 234322", "Pedido - 234456", "Pedido - 234533", "Pedido - 234222" }

        oData       := JsonObject():New()

        aData   := { 26589, 25000,23560,10000,35000}

        aDataFim := {}
        aAdd(aDataFim, oCoreDash:SetChart(aCab, aData, .T.,"pie", "MaioresMayores Clientes - " + oJson["level"][2]["labelDataSet"] + " - " + oJson["level"][1]["label"]))
    EndIf
    oResponse["items"] := aDataFim

Return

//-------------------------------------------------------------------
/*/{Protheus.doc} GET itemsDetails
  Método para retornardevolver oslos dadosdatos dodel PainelPanel

  @author Squad CRM & FaturamentoFacturación
  @since 27/03/2020
  @version Protheus 12.1.27
/*/
//-------------------------------------------------------------------
WSMETHOD POST itemsDetails WSRECEIVE JsonFilter, drillDownFilter WSRESTFUL Exemplo3

  Local aHeader     := {}
  Local aItems      := {}
  Local aRet        := {}
  Local cBody       := DecodeUtf8(Self:GetContent())
  Local cError		  := "ErroError en nael Requisiçãorequerimiento"
  Local lRet			  := .T.
  Local oCoreDash   := CoreDash():New()
  Local oBody       := JsonObject():New()
  Local oJsonFilter := JsonObject():New()
  Local oJsonDD     := JsonObject():New()

  If !Empty(cBody)
    oBody:FromJson(cBody)
    If ValType(oBody["chartFilter"]) == "J"
        oJsonFilter := oBody["chartFilter"]
    EndIf
    If ValType(oBody["detailFilter"]) == "A"
        oJsonDD := oBody["detailFilter"]
    EndIf
  EndIf

  Self:SetContentType("application/json")
  //Verifico o Nivel do grafico
  If oJsonFilter:GetJsonText("level") == "null" .Or. Len(oJsonFilter["level"]) == 0
    //Verifico o nivel do Drilldpwn
    If Len(oJsonDD) == 0
      aHeader := {;
          {"codigo"     , "Código"        ,"linkenlace"               },;
          {"nomenombre"	      , "NomeNombre Vendedor"                       },;
          {"totalItens" , "Total de ItensItems","number",'1.2-5',.F. },;
          {"totalValor" , "Valor Total"   , "currency","BRL",.F.};
          }

      aItems := {;
          {"codigo"     , "SA3.A3_COD"    },;
          {"nome"	      , "SA3.A3_NOME"   },;
          {"totalItens" , "QTDITEM"       },;
          {"totalValor" , "TOTAL","N"     };
          }

      aRet := MntQuery1()
    ElseIf Len(oJsonDD) == 1
      //CasoSi eudesea queiratomar pegarel onombre nomedel do nível selecionado nivel seleccionado: oJsonFilter["level"][1]["labelDataSet"]
      // SeSi fossefuese gráfico dodel tipo pizza: oJsonFilter["level"][1]["label"]
      aHeader := {;
          {"codigoPed"  , "Código dodel Pedido"    },;
          {"codigoCli"  , "Código dodel Cliente"   },;
          {"nome"	      , "NomeNombre" 	              },;
          {"totalValor" , "TOTAL","currency","BRL",.F.};
          }

      aItems := {;
          {"codigoPed"  , "SC5.C5_NUM"   },;
          {"codigoCli"	, "SC5.C5_CLIENTE"  },;
          {"nome"       , "SA1.A1_NOME"      },;
          {"totalValor" , "TOTAL","N"        };
          }
      aRet := MntQuery2("SC5.C5_VEND1 = '" + oJsonDD[1]["codigo"] + "'")
    EndIf
  ElseIf Len(oJsonFilter["level"]) == 1
    aHeader := {;
        {"codigo"     , "Código"        },;
        {"nome"	      , "NomeNombre Vendedor" },;
        {"totalItens" , "Total de Itensítems","number",'1.2-5',.F.},;
        {"totalValor" , "Valor Total", "currency","BRL",.F.};
        }

    aItems := {;
        {"codigo"     , "SA3.A3_COD"   },;
        {"nome"	      , "SA3.A3_NOME"  },;
        {"totalItens" , "QTDITEM"      },;
        {"totalValor" , "TOTAL","N" };
        }

    aRet := MntQuery1()
  EndIf

  oCoreDash:SetQuery(aRet[1])
  oCoreDash:SetWhere(aRet[2])
  oCoreDash:SetGroupBy(aRet[3])
  oCoreDash:SetFields(aItems)
  oCoreDash:SetApiQstring(Self:aQueryString)
  oCoreDash:BuildJson()

  If lRet
    oCoreDash:SetPOHeader(aHeader)
    Self:SetResponse( oCoreDash:ToObjectJson() )
  Else
    cError := oCoreDash:GetJsonError()
    SetRestFault( 500,  EncodeUtf8(cError) )
  EndIf

  oCoreDash:Destroy()

  FreeObj(oBody)
  FreeObj(oJsonFilter)
  FreeObj(oJsonDD)
  FreeObj(oCoreDash)

  aSize(aRet, 0)
  aSize(aItems, 0)
  aSize(aHeader, 0)

Return( lRet )

//-------------------------------------------------------------------
/*/{Protheus.doc} MntQuery1
  Monta ala Query oel Total de doslos Pedidos de VendaVenta

  @author Squad CRM & FaturamentoFacturación
  @since 27/03/2020
  @version Protheus 12.1.27
/*/
//-------------------------------------------------------------------
Static Function MntQuery1()
  Local cQuery  := ""
  Local cWhere  := ""
  Local cGroup  := ""
  
  cQuery := " SELECT SA3.A3_COD, SA3.A3_NOME, COUNT(C6_ITEM) QTDITEM, SUM(C6_VALOR) TOTAL " 
  cQuery += " FROM " + RetSqlName("SC5") + " SC5 "

  cQuery += " INNER JOIN " + RetSqlName("SC6") + " SC6 ON SC6.C6_NUM = SC5.C5_NUM "
  cQuery += " INNER JOIN " + RetSqlName("SA3") + " SA3 ON SA3.A3_COD = SC5.C5_VEND1 "

  cWhere := " SC5.D_E_L_E_T_ = ' ' "
  cWhere += " AND SC6.D_E_L_E_T_ = ' ' "
  cWhere += " AND SA3.D_E_L_E_T_ = ' ' "
  cWhere += " AND SC5.C5_FILIAL = '" + xFilial("SC5") + "'   "
  cWhere += " AND SC6.C6_FILIAL = '" + xFilial("SC6") + "'   "
  cWhere += " AND SA3.A3_FILIAL = '" + xFilial("SA3") + "'   "

  cGroup := " SA3.A3_COD, SA3.A3_NOME "

Return {cQuery, cWhere, cGroup}

//-------------------------------------------------------------------
/*/{Protheus.doc} MntQuery2
  Monta Query Pedido de vendas

  @author Squad CRM & FaturamentoFacturación
  @since 27/03/2020
  @version Protheus 12.1.27
/*/
//-------------------------------------------------------------------
Static Function MntQuery2(cFilter)
  Local cQuery  := ""
  Local cGroup  := ""
  Local cWhere  := ""

  Default cFilter := "" 

  cQuery := " SELECT SC5.C5_NUM, SC5.C5_CLIENTE, SA1.A1_NOME, SUM(C6_VALOR) TOTAL "
  cQuery += " FROM " + RetSqlName("SC5") + " SC5 "
  cQuery += " INNER JOIN " + RetSqlName("SC6") + " SC6 ON SC6.C6_NUM = SC5.C5_NUM "
  cQuery += " INNER JOIN " + RetSqlName("SA1") + " SA1 ON SA1.A1_COD = SC5.C5_CLIENTE

  if !Empty(cFilter)
      cWhere += cFilter + " AND "
  EndIf

  cWhere += " SC5.D_E_L_E_T_ = ' ' "
  cWhere += " AND SC6.D_E_L_E_T_ = ' ' "
  cWhere += " AND SA1.D_E_L_E_T_ = ' ' "
  cWhere += " AND SC5.C5_FILIAL = '" + xFilial("SC5") + "'   "
  cWhere += " AND SC6.C6_FILIAL = '" + xFilial("SC6") + "'   "
  cWhere += " AND SA1.A1_FILIAL = '" + xFilial("SA1") + "'   "

  cGroup := " C5_NUM, C5_CLIENTE, SA1.A1_NOME "

Return {cQuery, cWhere, cGroup}

...



...

Otras informaciones

Consultar a documentação dola documentación del CoreDash.