MANUAL INSTALAÇÃO WEB SERVICE Recebimento de dados pelo Hospital Versão 1.1 2/9/2014 Contato suporte@gtplan.com.br
Índice Introdução... 2 Requerimentos para instalação do Web Service... 2 Instalação... 2 Adaptação de layout de integração... 3 Processamento da Sugestão... 3 Gerenciador Web Service... 5 Permissões Necessárias ao ambiente de Produção Tasy... 5 Visualização... 5 Inserção... 5 Anexo 1... 5
Introdução O documento a seguir tem objetivo prover uma sugestão de implantação de web service ao cliente para conexão ao servidor através do banco de dados ORACLE, sistema operacional WINDOWS e sistema ERP TASY sendo de total responsabilidade do mesmo a manutenção e garantia de pleno funcionamento e integridade dos dados. Caso o banco de dados não seja ORACLE ou o sistema operacional não seja WINDOWS, o manual ainda sim poderá servir de referência para instalação. Será detalhado no mesmo desde a configuração do banco, até o processo de busca aos dados Requerimentos para instalação do Web Service Servidor de Aplicação Servidor dedicado ou Virtual Machine) Sistema Operacional Windows 02 GB de RAM 100 MB Disco Windows Servidor Web Apache ou IIS Recomendamos pacote ScriptCase com Apache - Solicitar para equipe de Suporte) PHP 5.2.1 ou superior Servidor de Banco de Dados Servidor dedicado ou Virtual Machine) 04 GB de RAM 10 Gb Disco Sistema ERP: TASY Banco de dados Oracle 10G/11G Esquema GTP TableSpace GTP_TS Instalação 1 Instalação de PHP+APACHE scriptcase_v7.exe) a. Se não estiver habilitado, habilitar a extensão soap removendo ; da seguinte linha do php.ini i. ;extension=php_soap.dll 2 Instalação do client web service + gerenciador de webservice a. Descompactar o arquivo plannexo_wes.zip no diretório wwwroot b. Serão criadas duas pastas, uma referente ao gerenciador e outra referente ao webservice propriamente dito 3 Criação no banco do Esquema GTP para criação dos objetos ver tópico Lista de objetos) 4 No banco de dados executar script s para criação de objetos plannexo_wes-xxx.sql) 5 Recomendável habilitar envio de alerta por e-mail de erro de execução em job não exibido no manual)
Lista de objetos de banco Segue abaixo a lista dos objetos do banco que deverão ser criados e uma breve descrição que será detalhada mais a frente. Ver anexo 1 TABELA - WES_SUGGESTION_HEADER TABELA - WES_SUGGESTION_ITEM TABELA - WES_SUGGESTION_PARC PROCEDURE - PRC_GENERATE_REQ Adaptação de layout de integração Caso o sistema ERP instalado não seja TASY, a PROCEDURE prc_generate_req precisará ser adaptada de acordo com as regras de negócio do ERP em questão. Para compreender verique o documento Manual de Integração PLANNEXO Processamento da Sugestão A tela abaixo exibe todas as sugestões de compra do Plannexo, podendo conter diversos itens distintos, ou itens iguais no entanto com datas de entregas distintas programação de compra). Para cada linha existirá a quantidade sugerida e a data prevista de entrega sendo possível que o usuário altere os dados Após selecionar os itens que deseja, irá clicar no botão processar de mesmo nome e aparecerá a tela abaixo com os dados da capa da solicitação. Nesse estágio, o usuário ainda poderá alterar os dados padrões da capa e ainda as quantidades.
Após finalizar as alterações, o usuário irá clicar em Atualizar e a solicitação ficará com o status Aguardando ERP conforme imagem abaixo. No servidor de aplicação de cliente, o arquivo php client_gerar_solic.php deverá ser agendado para ser executado numa frequência de 5 em 5 minutos e irá acessar o webservice plannexo, realizando a leitura de todos as solicitações com status Aguardando ERP. Esse arquivo deverá ser configurado para apontar para o servidor testes PLANNEXO inicialmente) conforme imagem abaixo Uma vez obtidas as solicitações, serão gravadas nas tabelas wes_suggestion_header - Capa da solicitação wes_suggestion_item - Itens da solicitação wes_suggestion_parc - Parcelas da solicitação
Logo após serem gravadas, o mesmo php irá executar a procedure prc_generate_req que irá realizar a inserção no TASY, e retornar os logs de integração nas tabelas citadas acima Caso ocorra sucesso, irá enviar ao servidor plannexo o código de solicitação gerada no TASY, e ao mesmo tempo irá executar o layout de integração de envio ERP_PURCHASE_REQ para enviar os registros atualizados da tabela de solcitação do TASY. No PLANNEXO a solcitação ficara com status Aprovado ERP Caso ocorra erro, serão enviados os logs de integração e será gravado o status Reprovado ERP Gerenciador Web Service Caso seja necessário, o conteúdo das tabelas WES, poderão ser consultados através do Gerenciador Web service da aba Integração Retorno Nela poderá ser consultado dados da Capa, Itens e Parcelas assim como os respectivos logs de integração conforme imagem abaixo Permissões Necessárias ao ambiente de Produção Tasy Visualização Tabela: Sequence: Função: estabelecimento, unidade_medida,usuario solic_compra_seq obter_pessoa_fisica_usuario Inserção Tabela: solic_compra, solic_compra_item, solic_compra_item_entrega Anexo 1
******************************************** ** Tabela - wes_suggestion_header Capa da solicitação ******************************************** CREATE TABLE wes_suggestion_header id_int_plannexo NUMBER22) NOT NULL, date_expected DATE NOT NULL, cod_sector VARCHAR2200) NOT NULL, cod_local VARCHAR2200) NOT NULL, cod_reason VARCHAR2200) NOT NULL, cod_buyer VARCHAR2200) NOT NULL, cod_user VARCHAR2200) NOT NULL, yn_urgent CHAR1) NOT NULL, sit_req NUMBER*,0) NOT NULL, date_int DATE, id_req_erp NUMBER22), header_log VARCHAR22000), cod_estab VARCHAR2255) NOT NULL, CONSTRAINT wes_suggestion_header_pk PRIMARY KEY id_int_plannexo) ) ******************************************** ** Tabela - wes_suggestion_item Itens da solicitação ******************************************** CREATE TABLE wes_suggestion_item id_int_plannexo NUMBER22) NOT NULL, cod_item VARCHAR2255) NOT NULL, qty_parc FLOAT NOT NULL, std_unit VARCHAR2255) NOT NULL, item_log VARCHAR22000), CONSTRAINT wes_suggestion_item_pk PRIMARY KEY id_int_plannexo,cod_item) ) ******************************************** ** Tabela - wes_suggestion_parc Parcelas da solicitação ******************************************** CREATE TABLE wes_suggestion_parc id_int_plannexo NUMBER22) NOT NULL, cod_item VARCHAR2255) NOT NULL, num_parc NUMBER*,0), date_parc DATE NOT NULL, qty_parc FLOAT NOT NULL, CONSTRAINT wes_suggestion_parc_pk PRIMARY KEY id_int_plannexo,cod_item,date_parc) )
********************** ** Procedure - prc_generate_req ********************** CREATE OR REPLACE procedure PRC_GENERATE_REQ is --****************** --HEADER PARAM --****************** v_nr_seq_header v_date_expected v_cod_sector v_local_estoq v_reason v_cod_user v_urgent v_sit_req v_date_int v_estab WES_SUGGESTION_HEADER.ID_INT_PLANNEXO%type; WES_SUGGESTION_HEADER.DATE_EXPECTED%type; WES_SUGGESTION_HEADER.COD_SECTOR%type; WES_SUGGESTION_HEADER.COD_LOCAL%type; WES_SUGGESTION_HEADER.COD_REASON%type; WES_SUGGESTION_HEADER.COD_USER%type; WES_SUGGESTION_HEADER.YN_URGENT%type; WES_SUGGESTION_HEADER.SIT_REQ%type; WES_SUGGESTION_HEADER.DATE_INT%type; WES_SUGGESTION_HEADER.COD_ESTAB%type; --****************** -- HEADER ITEM --****************** v_item v_nr_seq_item v_qty_parc v_item_unit WES_SUGGESTION_ITEM.COD_ITEM%type; WES_SUGGESTION_ITEM.ITEM_ORDER%type; WES_SUGGESTION_ITEM.QTY_PARC%type; WES_SUGGESTION_ITEM.STD_UNIT%type; --****************** -- PARC PARAM --****************** v_nr_parcela WES_SUGGESTION_PARC.NUM_PARC%type; v_dt_delivery WES_SUGGESTION_PARC.DATE_PARC%type; v_qty_delivery WES_SUGGESTION_PARC.QTY_PARC%type; v_tasy_nr_solic integer; tasy_seq_item integer; tasy_seq_item_in integer; ID_REQ_ERP integer; v_dt_solic_purchase date; v_integration varchar1); v_qt_total_item real; v_dt_solic_item date; ie_tipo_integracao_w varchar215); nr_seq_integracao_w number10); ie_integra_tipo_solic_w varchar215); qt_registro_w number10); ie_erro_w varchar21000) := ''; ds_erro_w varchar23000); vl_ultima_compra_w number13,4); v_id_user varchar100); cursor c01 IS SELECT ID_INT_PLANNEXO, DATE_EXPECTED, COD_SECTOR, COD_LOCAL, COD_REASON, COD_USER,
nvlyn_urgent,'n'), SIT_REQ, DATE_INT, COD_ESTAB FROM WES_SUGGESTION_HEADER WHERE sit_req=1; CURSOR c02 IS SELECT COD_ITEM, ITEM_ORDER, QTY_PARC, STD_UNIT FROM WES_SUGGESTION_ITEM WHERE ID_INT_PLANNEXO = v_nr_seq_header; CURSOR c03 IS SELECT NUM_PARC, DATE_PARC, QTY_PARC FROM WES_SUGGESTION_PARC WHERE ID_INT_PLANNEXO = v_nr_seq_header AND COD_ITEM = v_item; --*************************************** --Loop cabeçalho --*************************************** open C01; loop fetch C01 into v_nr_seq_header, v_date_expected, v_cod_sector, v_local_estoq, v_reason, v_cod_user, v_urgent, v_sit_req, v_date_int, v_estab; exit when C01%notfound; ie_erro_w := NULL; --Validacao de usuario v_cod_user is not null) then select count*) into qt_registro_w from tasy.usuario where uppernm_usuario) = upperv_cod_user); qt_registro_w = 0) then
ie_erro_w := 'Usuário inválido no tasy'; UPDATE wes_suggestion_header SET header_log = ie_erro_w where id_int_plannexo = v_nr_seq_header; else select tasy.obter_pessoa_fisica_usuariov_cod_user,'c') into v_id_user from dual; v_id_user is null) then ie_erro_w := 'S'; --Validacao de estabelecimento nvlv_estab,0) = 0) then ie_erro_w := 'Estabelecimento vazio'; nvlv_estab,0) > 0) then select count*) into qt_registro_w from tasy.estabelecimento where cd_estabelecimento = v_estab and ie_situacao = 'A'; qt_registro_w = 0) then ie_erro_w := 'Estabelecimento não existe no Tasy'; UPDATE wes_suggestion_header SET header_log = ie_erro_w where id_int_plannexo = v_nr_seq_header; --Validacao de local de estoque nvlv_local_estoq,0) = 0) then ie_erro_w := 'Local de estoque vazio'; ie_erro_w is null) then select tasy.solic_compra_seq.nextval into v_tasy_nr_solic from dual; insert into tasy.solic_compra nr_solic_compra, cd_estabelecimento, dt_solicitacao_compra, dt_atualizacao, nm_usuario, ie_situacao, cd_local_estoque, ie_aviso_chegada, ie_aviso_aprov_oc, ie_urgente, ie_tipo_solicitacao, dt_atualizacao_nrec, nm_usuario_nrec, ie_envia_integracao,
values v_estab, sysdate, sysdate, v_cod_user, 'A', v_local_estoq, 'N', 'N', v_urgent, '2', sysdate, v_cod_user, 'N', ); exception when others then ) cd_pessoa_solicitante, ie_comodato, nr_solic_importacao v_tasy_nr_solic, v_id_user, 'N', v_nr_seq_header ie_erro_w := 'Ocorreu um erro ao inserir no tasy'; UPDATE wes_suggestion_header SET header_log = ie_erro_w where id_int_plannexo = v_nr_seq_header; open C02; loop fetch C02 into v_item, v_nr_seq_item, v_qty_parc, v_item_unit; exit when C02%notfound; --*************************************** --Loop itens --*************************************** SELECT SUMqty_parc), mindate_parc) into v_qt_total_item, v_dt_solic_item FROM wes_suggestion_parc WHERE id_int_plannexo = v_nr_seq_header AND cod_item = v_item; --Validacao de unidade de medida v_item_unit is null) then ie_erro_w := 'Unidade medida não informada'; UPDATE wes_suggestion_item SET item_log = ie_erro_w where id_int_plannexo = v_nr_seq_header and cod_item = v_item; v_item_unit is not null) then select count*) into qt_registro_w from tasy.unidade_medida where cd_unidade_medida = v_item_unit and
ie_situacao = 'A'; qt_registro_w = 0) then ie_erro_w := 'Unidade medida não existe no tasy'; UPDATE wes_suggestion_item SET item_log = ie_erro_w where id_int_plannexo = v_nr_seq_header and cod_item = v_item; --Validacao de data da solicitação v_dt_solic_item is null) then ie_erro_w := 'Data de solicitação não informada'; UPDATE wes_suggestion_item SET item_log = ie_erro_w where id_int_plannexo = v_nr_seq_header and cod_item = v_item; ie_erro_w is null) then select nvlmaxnr_item_solic_compra),0) + 1 into from tasy.solic_compra_item where nr_solic_compra = v_tasy_nr_solic; tasy_seq_item insert into tasy.solic_compra_item nr_solic_compra, nr_item_solic_compra, cd_material, cd_unidade_medida_compra, qt_material, dt_atualizacao, nm_usuario, ie_situacao, dt_solic_item, ie_geracao ) values tasy_seq_item, v_item, v_item_unit, v_qt_total_item, sysdate, v_cod_user, 'A', v_dt_solic_item, 'S' exception when others then v_nr_seq_header and cod_item = v_item; ); v_tasy_nr_solic, ie_erro_w := 'Ocorreu um erro ao gravar o item da solicitação ' v_tasy_nr_solic; UPDATE wes_suggestion_item SET item_log = ie_erro_w where id_int_plannexo = ie_erro_w is null) then
--*************************************** --Loop parcela --*************************************** open C03; loop fetch C03 into v_nr_parcela, v_dt_delivery, v_qty_delivery; exit when C03%notfound; select nvlmaxnr_item_solic_compra_entr),0) + 1 into tasy_seq_item_in from solic_compra_item_entrega where nr_solic_compra = v_tasy_nr_solic and nr_item_solic_compra = tasy_seq_item; insert into tasy.solic_compra_item_entrega nr_solic_compra, nr_item_solic_compra, nr_item_solic_compra_entr, qt_entrega_solicitada, dt_entrega_solicitada, dt_atualizacao, nm_usuario ) values v_tasy_nr_solic, tasy_seq_item, tasy_seq_item_in, v_qty_delivery, v_dt_delivery, sysdate, v_cod_user ); end loop; close C03; end loop; close C02; ie_erro_w is not null) then --caso ocorra erro em um unico item ja deleta toda solicitacao DELETE FROM tasy.solic_compra where nr_solic_compra = v_tasy_nr_solic; --marca a capa da solicitação falha caso ocorre erro em tanto no item, como solciitacao) update wes_suggestion_header set sit_req = 3 where id_int_plannexo = v_nr_seq_header; else -- marca a capa da solicitação como sucesso, e grava o código gerado no tasy update wes_suggestion_header set sit_req = 2,
id_req_erp = v_tasy_nr_solic where id_int_plannexo = v_nr_seq_header; end loop; close C01; commit;