Árvore de páginas

Versões comparadas

Chave

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

...

Aviso
titleFuncionalidade em desenvolvimento

O ponto de entrada PCBROWSE está em fase de desenvolvimento em breve entrará em testes com clientes piloto, portanto ainda não está liberada em nenhum release do Protheus!

Será liberado através de pacote de expedição acumulado do módulo financeiro em data ainda a ser informada.

Essa página poderá sofrer alterações até a data de liberação da funcionalidade!


O ponto de entrada PCBROWSE permite incluir opções de menu para listagem de itens customizados ao Portal do Cliente - SIGAFIN.

...

Bloco de código
languagejava
themeMidnight
firstline1
titlePCBROWSE
linenumberstrue
collapsetrue
#Include 'Protheus.ch'
 
/*/{Protheus.doc} PCBROWSE
	    Ponto de entrada para adicionar opcoes de menu no Oortal do cliente
	    @type function
	    @return array, array de configuracao
/*/
user Function PCBROWSE()
	    Local aMenu := {} as Array
	    aAdd(aMenu, MENU1()) // exemplo utilizando colunas SX3
	    aAdd(aMenu, MENU2()) // exemplo configurando fields
Return aMenu
 
/*/{Protheus.doc} MENU1
	    Configuracao do menu
	    @type function
	    @return json, configuracao do browse
/*/
Static Function MENU1()
	    Local jMenu     := JsonObject():new() as Json
	    Local jDetalhes := JsonObject():new() as Json
	    //titulo apresentado no menu
	    jMenu['tituloMenu'] := 'Pedidos1'
	    //icone para o menu, lista de icones https://po-ui.io/guides/icons
	    jMenu['iconeMenu']  := 'po-icon po-icon-manufacture'
	    //titulo apresentado na pagina
	    jMenu['tituloPagina'] := 'Meus Pedidos1'
	    //user funcion que vai retornar a query de busca
	    jMenu['funcaoQuery'] := 'PCQRY01'
    //campo que vai ser ordenado
    jMenu['orderQuery'
	]  := 'C5_EMISSAO DESC'

    //alias da tabela utilizada para tratamentos internos
	    jMenu['tabela'] := 'SC5'
	    //lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada
	    jMenu['colunas'] := {'c5_filial', 'c5_condpag', 'c5_num', 'c5_vend1', 'c5_nota', 'c5_emissao'}
	
	     
    //configuracao de legendas, array com value, color e label
	    jMenu['legendas'] := {}
	    aAdd(jMenu['legendas'], prepareStatus("N", "color-01", "Normal"))
	    aAdd(jMenu['legendas'], prepareStatus("C", "color-02", "Compl.PrecIo/Cantidad"))
	    aAdd(jMenu['legendas'], prepareStatus("I", "color-03", "Compl.ICMS"))
	    aAdd(jMenu['legendas'], prepareStatus("P", "color-04", "Compl.IPI"))
	    aAdd(jMenu['legendas'], prepareStatus("D", "color-05", "Dev.Compras"))
	    aAdd(jMenu['legendas'], prepareStatus("B", "color-06", "Utiliza proveedor"))
	    jMenu['campoLegendas']  := 'c5_tipo'
	    jMenu['tituloLegendas'] := 'Tipo'
 
	    //campo para busca rapida, Se informar fieldBusca essa propriedade é ignorada
	    jMenu['campoBusca'] := 'c5_num'
	    //lista de campos apra busca avancada, o sistema vai utilizar o titulo da SX3. Se informar fieldsBuscaAvancada essa propriedade é ignorada
	    jMenu['camposBuscaAvancada'] := {'c5_filial', 'c5_vend1', 'c5_nota', 'c5_emissao', 'c5_transp'}
	
	     
    //exemplo de configuracao de detalhes
	    //titulo apresentado na pagina de detalhes
	    jDetalhes['tituloPagina'] := 'Detalhes do pedido'
	    //titulo apresentado na aba principal
	    jDetalhes['tituloAbaPrincipal'] := 'Dados gerais'
	    //lista de campos que serao apresentados, o sistema vai utilizar o titulo da SX3. Se informar fieldsDetalhes essa propriedade é ignorada
  
	  jDetalhes['camposDetalhes'] := {'c5_num','c5_tipo', 'c5_nota', 'c5_emissao', 'c5_vend1', 'c5_tabela', 'c5_cliente', 'c5_lojacli', 'c5_transp', 'c5_frete', 'c5_seguro',}
 
	    //titulo apresentado na aba itens
	    jDetalhes['tituloAbaItens'] := 'Produtos'
	    //user funcion que vai retornar a query dos itens
	    jDetalhes['funcaoQueryItens'] := 'PCITEM'
	    //campo que vai ser ordenado
    jDetalhes['orderQueryItens'] := 'c6_item desc'

    //alias dos itens
	    jDetalhes['tabelaItens'] := 'SC6'
	    //lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada
	    jDetalhes['colunas'] := {'c6_item', 'c6_produto', 'c6_descri', 'c6_qtdven', 'c6_prcven', 'c6_valor'}
	
	     
    jMenu['detalhes'] := jDetalhes
 
return jMenu
 
/*/{Protheus.doc} MENU2
	    Configuracao do menu utilizando as propriedades fields
	    @type function
	    @return json, configuracao do browse
/*/
Static Function MENU2()
	    Local jMenu     := JsonObject():new() as Json //Json com as propriedades esperadas.
	    Local jDetalhes := JsonObject():new() as Json
 
	    jMenu['tituloMenu']   := 'Pedidos2'
	    jMenu['iconeMenu']    := 'po-icon po-icon-manufacture'
	    jMenu['tituloPagina'] := 'Meus Pedidos2'
	    jMenu['funcaoQuery']  := 'PCQRY01'
    jMenu['orderQuery']  := 'PCQRY01C5_DATA1 ASC'
	    jMenu['tabela']       := 'SC5'
 
	    //lista de campos do browse, utilizado quando nao quer pegar dados da SX3.
	    //deve ser um array de json com as propriedades property, type e label
	    jMenu['fields'] := {}
	    aAdd(jMenu['fields'], prepareField("c5_filial" , "string", "Filial do pedido"))
	    aAdd(jMenu['fields'], prepareField("c5_num"    , "string", "Pedido"))
	    aAdd(jMenu['fields'], prepareField("c5_vend1"  , "string", "Vendedor"))
	    aAdd(jMenu['fields'], prepareField("c5_condpag", "string", "Forma de pagamento"))
	    aAdd(jMenu['fields'], prepareField("c5_nota"   , "string", "NF"))
 
	    //campo para busca rapida, utilizado quando nao quer pegar dados da SX3.
	    //deve ser um array de json com as propriedades property, type e label
	    jMenu['fieldBusca'] := prepareField("c5_num", "string", "Pesquisa por pedido")
 
	    //lista de campos apra busca avancada, o sistema vai utilizar o titulo da SX3. Se informar fieldsBuscaAvancada essa propriedade é ignorada
	    jMenu['fieldsBuscaAvancada'] := {}
	    aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_emissao", "date"  , "Data"))
	    aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial" , "string", "Filial"))
	    aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota"   , "string", "NF"))
	    aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_num"    , "string", "Pedido"))
 
	    //exemplo de configuracao de detalhes
	    //titulo apresentado na pagina de detalhes
	    jDetalhes['tituloPagina'] := 'Detalhes do pedido'
	    //titulo apresentado na aba principal
	    jDetalhes['tituloAbaPrincipal'] := 'Dados gerais'
	    //Utiliza as propriedades PoDynamicViewField do po-dynamic-view poui. https://po-ui.io/documentation/po-dynamic-view
	    jDetalhes['fieldsDetalhes'] := {}
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num'    , 'string', 'Pedido'            , 'Dados'     ))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo'   , 'string', 'Tipo do pedido'                  ))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_nota'   , 'string', 'Nota'                            ))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissao', 'date'  , 'Data'                            ))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1'  , 'string', 'Vendedor'                        ))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tabela' , 'string', 'Tabela de preços'                ))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador'             ))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_lojacli', 'string', 'Loja'                            ))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'Código transportadora', 'Entrega'))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete'  , 'string', 'Valor do frete'                  ))
	    aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_seguro' , 'string', 'Valor do seguro'                 ))
 
	    //titulo apresentado na aba itens
	    jDetalhes['tituloAbaItens'] := 'Produtos'
	    //user funcion que vai retornar a query dos itens
	    jDetalhes['funcaoQueryItens'] := 'PCITEM'
	    //alias dos itens
	    jDetalhes['tabelaItens'] := 'SC6'
	    //lista de campos do browse, deve ser um array de json com as propriedades property, type e label
	    jDetalhes['fields'] := {}
	    aAdd(jDetalhes['fields'], prepareField('c6_item'   , 'string'  , 'Item'))
	    aAdd(jDetalhes['fields'], prepareField('c6_produto', 'string'  , 'Código'))
	    aAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string'  , 'Quantidade'))
	    aAdd(jDetalhes['fields'], prepareField('c6_prcven' , 'currency', 'Preço'))
	    aAdd(jDetalhes['fields'], prepareField('c6_valor'  , 'currency', 'Valor'))
 
	    jMenu['detalhes'] := jDetalhes
return jMenu
 
/*/{Protheus.doc} prepareField
	    funcao auxiliar para preparar as propriedades do field
	    @type function
	    @param cCampo, character, campo
	    @param cTipo, character, tipo (string, date, number)
	    @param cTitulo, character, titulo
	    @param cDivisor, character, titulo do divisor (utilizado nos detalhes)
	    @return json, json de field
/*/
Static Function prepareField(cCampo as Character, cTipo as Character, cTitulo as Character, cDivisor as Character)
	    Local jField  := JsonObject():new() as Json
	    jField["property"] := cCampo
	    jField["type"]     := cTipo
	    jField["label"]    := cTitulo
	    if !Empty(cDivisor)
		        jField["divider"] := cDivisor
	    endIf
Return jField
 
/*/{Protheus.doc} prepareStatus
	    funcao auxiliar para preparar as propriedades da legenda
	    @type function
	    @param cValor, character, valor
	    @param cCor, character, cor
	    @param cTitulo, character, label
	    @return variant, rconfiguracao de legenda
/*/
Static Function prepareStatus(cValor as Character, cCor as Character, cTitulo as Character)
	    Local jStatus  := JsonObject():new() as Json
	    jStatus["value"] := cValor
	    jStatus["color"] := cCor
	    jStatus["label"] := cTitulo
Return jStatus 
Bloco de código
languagecpp
themeMidnight
firstline1
titleFUNCTION QUERY
linenumberstrue
collapsetrue
#Include 'Protheus.ch'  

/*/{Protheus.doc} PCQRY01
	Query para listar os itens do PE PCBROWSE
	@type function
	@return character, query
/*/
User function PCQRY01()
	local aSA1   := Paramixb[1] // Array de clientes {{"D MG    ", "000002", "02"}, {"D RJ    ", "000002", "12"}}
	local cLogin := Paramixb[2] // Login do portal 
	local cQuery := ""
	local cAlias := "SC5"
	local nCli  := 1
	local cOr := ""

	cQuery := " SELECT #QueryFields#  "
	cQuery += " FROM " + RetSqlName(cAlias) + " SC5 "
	cQuery += " WHERE SC5.D_E_L_E_T_ = ' ' AND "
	cQuery += "("

	// lógica para filtro utilizando os código de clientes
	for nCli := 1 to len(aSA1)
		if (nCli > 1)
			cOr := " OR "
		endIf
		cQuery +=  cOr + "(SC5.C5_CLIENTE = '" + aSA1[nCli][2] + "' AND SC5.C5_LOJACLI = '" + aSA1[nCli][3]+"')" 
	next
	cQuery += ")"
	cQuery += " #QueryWhere# "

Return cQuery

/*/{Protheus.doc} PCITEM
	Query para listar os detalhes do item do PE PCBROWSE
	@type function
	@return character, query
/*/
user function PCITEM()
    local aSA1    := Paramixb[1] // Clientes
    local cUser   := Paramixb[2] // Login do portal
    local jFilter := Paramixb[3] // Linha selecionada para os detalhes
    local cAlias := "SC6"

    cQuery := " SELECT #QueryFields#  "
    cQuery += " FROM " + RetSqlName(cAlias) + " " + cAlias
    cQuery += " WHERE  " + cAlias + ".D_E_L_E_T_ = ' ' AND "
    cQuery += " C6_FILIAL = '" + jFilter['C5_FILIAL'] + "' AND "
    cQuery += " C6_NUM = '" + jFilter['C5_NUM'] + "'"
    cQuery += " #QueryWhere# "
return cQuery