Árvore de páginas

Versões comparadas

Chave

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

01. DADOS GERAIS

Linha de Produto:Microsiga Protheus®
Segmento:Backoffice
Módulo:Financeiro
Idiomas:Português
Função: Portal do Cliente

02. DESCRIÇÃO

O ponto de entrada PCBROWSE permite incluir menus customizados ao Portal do Cliente - SIGAFIN.

Parâmetros disponibilizados no ponto de entrada:

PARAMIXBTipoDescrição
1º PosiçãoJsonJson com as propriedades: logo, shortLogo e logoText

Retorno do ponto de entrada:

O ponto de entrada deve retornar um array com o json de cada menu que deseja adicionar, o json de cada posição do array deve conter as seguintes propriedades da seguinte forma:


PropriedadeObrigatoriedadeDescrição
tituloMenuObrigatório

Titulo apresentado no menu.

iconeMenuOpcional

Ícone para o menu. Lista de ícones PO UI que podem ser usados nesta propriedade. https://po-ui.io/guides/icons

tituloPaginaObrigatório

Titulo apresentado na pagina.

funcaoQueryObrigatório

Nome da user function que vai retornar a query para buscar os dados.

tabelaObrigatório

Alias da tabela utilizada para tratamento interno.

colunasObrigatório

Lista de campos do browse, o sistema vai utilizar o titulo da SX3.

legendasOpcional

Configuração das legendas. Array com value, color e label.

campoLegendasOpcional

Campo utilizado para legenda.

tituloLegendasOpcional

Titulo da legenda.

campoBuscaOpcional

Campo para busca rápida.

camposBuscaAvancadaOpcional

Lista de campos apra busca avançada, o sistema vai utilizar o titulo da SX3.

detalhesObrigatório

Json com as propriedades para ser exibido na tela de detalhes do registro. "jDetalhes"


Estrutura da propriedade detalhes "jDetalhes"

PropriedadeObrigatoriedadeDescrição
tituloPaginaObrigatórioTitulo apresentado na pagina de detalhes.
tituloAbaPrincipalObrigatórioTitulo apresentado na aba principal.
camposDetalhesObrigatórioLista de campos que serão apresentados, o sistema vai utilizar o titulo da SX3. Se informar fieldsDetalhes essa propriedade é ignorada.
tituloAbaItensObrigatórioTitulo apresentado na aba itens.
funcaoQueryItensObrigatórioUser funcion que vai retornar a query dos itens.
tabelaItensObrigatórioAlias dos itens.
colunasObrigatório

Lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada.

03. EXEMPLO DE UTILIZAÇÃO

Bloco de código
languagejava
themeMidnight
firstline1
titlePCTITOBSPCBROWSE
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

user Function PCBROWSE()
	Local aMenu := {} as Array

	aAdd(aMenu, MENU1())
	aAdd(aMenu, MENU2())

Return aMenu


Static Function MENU1()
	Local jMenu     := JsonObject():new() as Json
	Local jDetalhes := JsonObject():new() as Json
	//titulo apresentado no menu
	jMenu['tituloMenu'] := 'Pedidos'
	//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 Pedidos'
	//user funcion que vai retornar a query de busca
	jMenu['funcaoQuery'] := 'PCQRY01'
	//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'
	//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

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['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

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

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


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


User function PCQRY01()
	local aSA1   := Paramixb[1] //{{"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 += "("

	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