Histórico da Página
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|
Informações Gerais
Especificação | |||||||||||||
Produto | LOGIX | Módulo | WMS | ||||||||||
Segmento Executor | Supply Chain | ||||||||||||
Projeto1 | LOGWMS01 | IRM1 |
| ||||||||||
Requisito1 |
| Subtarefa1 |
| ||||||||||
Chamado2 | Não se aplica. | ||||||||||||
País | ( X ) Brasil ( ) Argentina ( ) Mexico ( ) Chile ( ) Paraguai ( ) Equador ( ) USA ( ) Colombia ( ) Outro _____________. | ||||||||||||
Outros | Não se aplica. |
Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos).
Objetivo
Realizar a integração dos endereços de entrega dos clientes. Será previsto o envio e o recebimento destas informações.
Definição da Regra de Negócio
Aviso | ||
---|---|---|
| ||
|
Rotina | Tipo de Operação | Opção de Menu | Regras de Negócio |
EAIAdapterCustomerShippingAddress1 | Criação | Adapter da mensagem CustomerShippingAddress | |
EAIHelperCustomerShippingAddress1 | Criação | Helper da mensagem CustomerShippingAddress | |
VDPR248 | Criação | Preparação de informações para integração de Locais de Entrega |
Aviso | ||||||
---|---|---|---|---|---|---|
| ||||||
Os fontes EAIAdapterCustomerShippingAddress1 e EAIHelperCustomerShippingAddress1 devem ser gerados utilizando o programa EAI0032, conforme orientações para construção de adapters disponível no TDN (ver link 2. Geração Automática de Adapters). Ao gerar deixar desmarcada a opção "Gerar arquivo Master?". Para que os fontes possam ser gerados será necessário utilizar o XSD da mensagem CustomerShippingAddress:
|
Dica | ||
---|---|---|
| ||
Verificar as informações de cada página deste link: 3. Construção do Adapter |
Na função EAIAdapterCustomerShippingAddress1_Install() deverá ser realizado o registro do InternalId referente ao local de entrega, utilizando como base a tabela cli_end_det_cobranca_entrega:
Bloco de código | ||||
---|---|---|---|---|
| ||||
IF NOT EAI_depara_existe("CustomerShippingAddress", "cli_end_det_cobranca_entrega") THEN CALL EAI_depara_register("CustomerShippingAddress", "cli_end_det_cobranca_entrega", "cliente|sequencia") END IF |
Para desenvolver o fonte VDPR248 considerar as regras abaixo:
- ########################### VER ###############################
Segue abaixo o detalhamento de cada tag existente na mensagem CustomerShippingAddress e como o sistema deverá tratar.
ENVIO:
Tag | Descrição | Regra a ser aplicada | |||||
---|---|---|---|---|---|---|---|
CompanyId | Código da empresa | Código da empresa corrente (p_cod_empresa) | |||||
BranchId | Código da filial | NULO | |||||
CompanyInternalId | Chave interna da empresa | Código da empresa corrente (p_cod_empresa) | |||||
BranchInternalId | Chave interna da filial | NULO | |||||
CustomerCode | Código do cliente | Código do cliente ao qual pertence o local de entrega, recebido por parâmetro na função vdpr248_EAI_CustomerShippingAddress_envia(). | |||||
(¹)GovernmentalInformation.Id.Id | Identificação da informação | Deverá ser o número do CNPJ/CPF ou Inscrição Estadual (somente números). Utilizar como base as lógicas existentes na função vdpr239_atualiza_business_content_Customer(). | |||||
(¹)GovernmentalInformation.Id.Attributes.scope | Escopo | Para CNPJ/CPF considerar o texto "Federal". Para Inscrição Estadual considerar o texto "State". | |||||
(¹)GovernmentalInformation.Id.Attributes.name | Nome da identificação | Para CNPJ considerar o texto "CNPJ". Para CPF considerar o texto "CPF". Para Inscrição Estadual considerar o texto "Inscricao Estadual". | |||||
(¹)GovernmentalInformation.Id.Attributes.issueOn | Data em que a identificação foi emitida | NULO para CNPJ, CPF e Inscrição Estadual. | |||||
(¹)GovernmentalInformation.Id.Attributes.expiresOn | Data de expiração da identificação | NULO para CNPJ, CPF e Inscrição Estadual. | |||||
InternalId | Chave interna do local de entrega | Concatenar o código do cliente e a sequência do local de entrega recebidos por parâmetro, separados por "|". Exemplo: Cliente 1234, sequência local de entrega 3 => "1234|3" | |||||
Code | Código do local de entrega | Sequência do local de entrega recebido por parâmetro na função vdpr248_EAI_CustomerShippingAddress_envia(). | |||||
ExternalId | Chave externa do local de entrega | NULO | |||||
(²)ShippingAddress.Address | Endereço | cli_end_det_cobranca_entrega.endereco_completo / cli_end_ent.end_entrega | |||||
(²)ShippingAddress.Number | Número do endereço | cli_end_det_cobranca_entrega.num_iden_lograd / NULO | |||||
(²)ShippingAddress.Complement | Complemento do endereço | cli_end_det_cobranca_entrega.complemento_endereco / NULO | |||||
(³)ShippingAddress.City.CityCode | Código da cidade | clientes.cod_cidade / cli_ent_ent.cod_cidade
| |||||
(³)ShippingAddress.City.CityInternalId | Chave interna da cidade | clientes.cod_cidade / cli_ent_ent.cod_cidade | |||||
(³)ShippingAddress.City.CityDescription | Descrição da cidade | cidades.den_cidade | |||||
(²)ShippingAddress.District | Bairro | cli_end_det_cobranca_entrega.bairro_cobr_entga / cli_end_ent.den_bairro | |||||
(³)ShippingAddress.State.StateCode | Código do estado (UF) | cidades.cod_uni_feder
| |||||
(³)ShippingAddress.State.StateInternalId | Chave interna do estado (UF) | cidades.cod_uni_feder | |||||
(³)ShippingAddress.State.StateDescription | Descrição do estado (UF) | uni_feder.den_uni_feder | |||||
(³)ShippingAddress.Country.CountryCode | Código do país | uni_feder.cod_pais
| |||||
(³)ShippingAddress.Country.CountryInternalId | Chave interna do país | uni_feder.cod_pais | |||||
(³)ShippingAddress.Country.CountryDescription | Descrição do país | paises.den_pais | |||||
(³)ShippingAddress.ZIPCode | CEP | clientes.cod_cep / cli_end_ent.cod_cep | |||||
ShippingAddress.Region | Região | NULO | |||||
ShippingAddress.POBox | Caixa postal | NULO |
(¹)Deverá gerar dois registros no record GovernmentalInformation: O primeiro para o CNPJ/CPF e o segundo para a Inscrição Estadual.
(²)Deverá ser analisado o parâmetro "vdp_utiliza_tela_endereco" (LOG00087):
- Se estiver "S" deverá ser lida a tabela cli_end_det_cobranca_entrega. Filtrar onde o tip_endereco seja igual a "E". Ordenar os registros pelo campo sequencia.
- Se estiver "N" deverá ser lida a tabela cli_end_ent. Ordenar os registros pelo campo num_sequencia.
(³)Para estas tags não há correspondência na tabela cli_end_det_cobranca_entrega. Neste caso deverá ser utilizada a informação padrão da tabela clientes.
RECEBIMENTO - Upsert:
Inicialmente deverá ser utilizada a função EAI_depara_get_value() para verificar se existe o local de entrega já cadastrado no Logix para a chave interna enviada na mensagem.
Bloco de código title Buscando o InternalId collapse true LET l_internalValue = EAI_depara_get_value("CustomerShippingAddress", _advpl_eai_get_message_info(g_eai_msg_negocio, 'MessageInformation.SourceApplication'), EAIHelperCustomerShippingAddress1_get_BusinessContent_InternalId())
Se o conteúdo da variável l_internalValue for diferente de nulo deverá ser chamada a função EAI_depara_InternalId_get_value() para obter o código do cliente e a sequência do local de entrega.
Bloco de código title Identificando o cliente e o sequência do local de entrega collapse true IF l_internalValue CLIPPED IS NOT NULL THEN LET l_cliente = EAI_depara_internalid_get_value('CustomerShippingAddress' , #depara_id l_internalValue , #valor interno 'cli_end_det_cobranca_entrega', #tabela interna 'cliente' ) #Campo interno LET l_sequencia = EAI_depara_internalid_get_value('CustomerShippingAddress' , #depara_id l_internalValue , #valor interno 'cli_end_det_cobranca_entrega', #tabela interna 'sequencia') #Campo interno END IF
- Se o conteúdo da variável l_internalValue for igual a nulo deverá considerar o conteúdo da tag Code para a variável l_sequencia.
- Se o conteúdo da variável l_internalValue for igual a nulo deverá tentar localizar o cliente pela conteúdo da tag GovernmentalInformation, buscando pelo CNPJ e Inscrição Estadual (campos num_cgc_cpf e ins_estadual, respectivamente). Caso encontre deverá armazenar o código do cliente na variável l_cliente.
- Se depois da lógica acima o cliente ainda não puder ser identificado, considerar o conteúdo da tag CustomerCode para a variável l_cliente.
- Se as variáveis referentes ao cliente (l_cliente) e sequência do local entrega (l_sequencia) não estiverem nulos, verificar se existe o registro correspondente na tabela de locais de entrega (considerar o parâmetro "vdp_utiliza_tela_endereco" para pesquisar na tabela cli_end_det_cobranca_entrega caso seja "S" ou na cli_end_ent caso seja "N").
- Se encontrar o registro correspondente deverá ser considerado como alteração deste local de entrega, caso contrário deverá ser considerada inclusão de um novo local de entrega.
Para incluir/alterar o local de entrega deverá ser analisado o parâmetro "vdp_utiliza_tela_endereco" (LOG00087). Se estiver "S" deverá ser gravada a tabela cli_end_det_cobranca_entrega:
Campo Conteúdo a ser gravado cliente Variável l_cliente tip_endereco 'E' sequencia Variável l_sequencia tip_logradouro Verificar se no início da tag ShippingAddress.Address existe a palavra "RUA ", "R " ou "R: ".
Se existir, pesquisar na tabela vdp_tip_logradouro por esta descrição de logradouro (campo des_logradouro).
Se encontrar o registro, considerar o conteúdo do campo tip_logradouro.
Se o início da tag não estiver conforme indicado inicialmente ou não encontrar o registro na vdp_tip_logradouro este campo deverá ficar nulo.logradouro Tag ShippingAddress.Address num_iden_lograd Tag ShippingAddress.Number complemento_endereco Tag ShippingAddress.Complement endereco_completo Concatenar os conteúdos abaixo, separando cada um com um espaço em branco:
* Tag ShippingAddress.Address
* Tag ShippingAddress.Number
* Tag ShippingAddress.Complement
* Tag ShippingAddress.Districtbairro_cobr_entga Tag ShippingAddress.District Independente do valor do parâmetro "vdp_utiliza_tela_endereco", sempre deverá ser gravada a tabela cli_end_ent:
Campo Conteúdo a ser gravado cod_cliente Variável l_cliente end_entrega Se a tag ShippingAddress.Number não estiver nula considerar ShippingAddress.Address + ShippingAddress.Number (separando as duas tags com um espaço em branco), caso contrário considerar somente ShippingAddress.Address den_bairro Tag ShippingAddress.District cod_cidade Primeiramente deverá ser verificado se existe relacionamento de/para para o código interno da cidade, caso a tag ShippingAddress.City.CityInternalId esteja preenchida. Se existir deverá utilizar a função para EAI_depara_InternalId_get_value() para identificar o código da cidade do Logix. Se não encontrar a cidade seguindo as regras acima deverá tentar localizar a cidade utilizando a tag ShippingAddress.City.CityCode, buscando pelo código IBGE. Se não existir deverá gerar mensagem de erro de que não foi possível identificar a cidade.
Bloco de código title Buscar o código da cidade Logix collapse true LET l_cidade_logix = NULL IF EAIHelperCustomerShippingAddress1_get_BusinessContent_ShippingAddress_City_CityInternalId() IS NOT NULL AND EAIHelperCustomerShippingAddress1_get_BusinessContent_ShippingAddress_City_CityInternalId() <> ' ' THEN LET l_InternalId = EAI_depara_get_value('City', _advpl_eai_get_message_info(g_eai_msg_negocio, 'MessageInformation.SourceApplication'), EAIHelperCustomerShippingAddress1_get_BusinessContent_ShippingAddress_City_CityInternalId()) IF l_InternalId IS NOT NULL AND l_InternalId <> ' ' THEN LET l_cidade_logix = EAI_depara_InternalId_get_value('City', l_InternalId, NULL, 'cod_cidade') END IF END IF IF l_cidade_logix IS NULL OR l_cidade_logix = ' ' THEN WHENEVER ERROR CONTINUE SELECT cidade_logix INTO l_cidade_logix FROM cidades, obf_cidade_ibge WHERE cidade_ibge = _BusinessContent._ShippingAddress._City._CityCode AND cod_cidade = cidade_logix WHENEVER ERROR STOP IF sqlca.sqlcode <> 0 THEN CALL log0030_processa_mensagem('Código da cidade informado na integração inexistente.','excl',1) RETURN FALSE END IF END IF IF l_cidade_logix IS NULL OR l_cidade_logix = ' ' THEN CALL log0030_processa_mensagem('Não foi possível identificar a cidade na integração.','excl',1) RETURN FALSE ELSE WHENEVER ERROR CONTINUE SELECT cod_cidade FROM cidades WHERE cod_cidade = l_cidade_logix WHENEVER ERROR STOP IF sqlca.sqlcode <> 0 THEN CALL log0030_processa_mensagem('Código da cidade informado na integração inexistente.','excl',1) RETURN FALSE END IF END IF
cod_cep Tag ShippingAddress.ZIPCode num_cgc Campo num_cgc_cpf da tabela clientes ins_estadual Campo ins_estadual da tabela clientes num_sequencia Variável l_sequencia cod_rota Campo cod_rota da tabela clientes cod_local Campo cod_local da tabela clientes cod_praca Campo cod_praca da tabela clientes
RECEBIMENTO - Delete:
Inicialmente deverá ser utilizada a função EAI_depara_get_value() para verificar se existe o local de entrega cadastrado no Logix para a chave interna enviada na mensagem.
Bloco de código title Buscando o InternalId collapse true LET l_internalValue = EAI_depara_get_value("CustomerShippingAddress", _advpl_eai_get_message_info(g_eai_msg_negocio, 'MessageInformation.SourceApplication'), EAIHelperCustomerShippingAddress1_get_BusinessContent_InternalId())
Se o conteúdo da variável l_internalValue for diferente de nulo deverá ser chamada a função EAI_depara_InternalId_get_value() para obter o código do cliente e a sequência do local de entrega.
Bloco de código title Identificando o cliente e o sequência do local de entrega collapse true IF l_internalValue CLIPPED IS NOT NULL THEN LET l_cliente = EAI_depara_internalid_get_value('CustomerShippingAddress' , #depara_id l_internalValue , #valor interno 'cli_end_det_cobranca_entrega', #tabela interna 'cliente' ) #Campo interno LET l_sequencia = EAI_depara_internalid_get_value('CustomerShippingAddress' , #depara_id l_internalValue , #valor interno 'cli_end_det_cobranca_entrega', #tabela interna 'sequencia') #Campo interno END IF
- Se o conteúdo da variável l_internalValue for igual a nulo deverá considerar o conteúdo da tag Code para a variável l_sequencia.
- Se o conteúdo da variável l_internalValue for igual a nulo deverá tentar localizar o cliente pela conteúdo da tag GovernmentalInformation, buscando pelo CNPJ e Inscrição Estadual (campos num_cgc_cpf e ins_estadual, respectivamente). Caso encontre deverá armazenar o código do cliente na variável l_cliente.
- Se depois da lógica acima o cliente ainda não puder ser identificado, considerar o conteúdo da tag CustomerCode para a variável l_cliente.
- Se as variáveis referentes ao cliente (l_cliente) e sequência do local entrega (l_sequencia) não estiverem nulos, verificar se existe o registro correspondente na tabela de locais de entrega (considerar o parâmetro "vdp_utiliza_tela_endereco" para pesquisar na tabela cli_end_det_cobranca_entrega caso seja "S" ou na cli_end_ent caso seja "N").
- Se não encontrar o registro correspondente deverá apenas retornar TRUE como se a exclusão tivesse ocorrido normalmente, apenas para evitar erro no aplicativo de origem.
- Se encontrar o registro deverá realizar a exclusão dos registros nas tabelas cli_end_det_cobranca_entrega e cli_end_ent, pesquisando pelo código do cliente e sequência do local de entrega.
Fluxo do Processo
Cenários de Teste
Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico. |
---|