Integração com sistema E-brigada para o cliente Randon
-
Solicitação: 24475
Integração com sistema E-brigada para o cliente Randon
Na solicitação 24475 foi criada a integração do Akita com o sistema E-brigada para o cliente Randon, onde são enviadas as informações de acesso de funcionários que são brigadistas para que seja informada a localização dos mesmos dentro da empresa para esse sistema terceiro.
A informação de quem é brigadista é disponibilizada através de uma consulta nas tabelas do SAP que foi fornecida pelo cliente, a qual é atualizada diariamente para a tabela customizada PESSOAS_EBRIGADA_RANDON através da execução via job de banco da procedure PROC_GERA_PESSOAS_EBRIGADA.
Foram criados dois parâmetros customizados para utilização nessa consulta:
- LISTA_FILIAIS_EBRIGADA - contém a lista do código das filiais para as quais devem ser enviadas as informações ao sistema E-brigada (código separado por vírgula)
- LISTA_QUALIFICACOES_EBRIGADA - contém a lista dos códigos de qualificação que caracterizam a pessoa como um brigadista habilitado (códigos separados por vírgula)
Fluxo funcional:
Foi criada uma trigger customizada
TRIG_GERA_ACESSO_EBRIGADA(AS24100) sobre a tabelaACESSOS_PESSOAS. Nessa trigger é realizada a inclusão do registro de acesso na tabela customizadaPONTEIROS_ACESSOS_EBRIGADApara todos os acessos autorizados dos tipos "E" (Entrada) ou "S" (Saída).O fluxo segue através da execução do job customizado AS24120 que a cada execução irá buscar os registros com status_processamento = Aguardando na tabela customizada
PONTEIROS_ACESSOS_EBRIGADA, irá verificar se o acesso pertence a um brigadista (verificando na tabela customizadaPESSOAS_EBRIGADA_RANDON) e nesse caso irá incluir o registro na tabela customizadaACESSOS_EBRIGADA_RANDON.
Essa operação ocorre através da procedure customizadaPROC_GERA_ACESSOS_EBRIGADA(AS24110) que é chamada pelo job.Os registros na tabela customizada
ACESSOS_EBRIGADA_RANDONsão processados pela apiakitasoft-ebrigada-randon-api, já descrita neste outro post: https://forum.insoft4.com/topic/321/akitasoft-ebrigada-randon-apiScripts e objetos envolvidos:
OS11042.sql
PROMPT Criando tabela customizada para integração com API E-Brigada... CREATE TABLE ACESSOS_EBRIGADA_RANDON ( ID NUMBER(19) NOT NULL, MATRICULA NUMBER(10) NOT NULL, COD_RELOGIO NUMBER(4) NOT NULL, DATA_HORA_ACESSO DATE NOT NULL, TIPO_ACESSO VARCHAR2(1) NOT NULL, RELOGIO_SAIDA_EMPRESA VARCHAR2(1) NOT NULL, COD_HORARIO_TRABALHO NUMBER(5), ENVIADO_EBRIGADA VARCHAR2(1) NOT NULL, MENSAGEM_ERRO VARCHAR2(4000) ) TABLESPACE &PONTO_DATA / COMMENT ON COLUMN ACESSOS_EBRIGADA_RANDON.ID IS 'Identificador único do registro' / COMMENT ON COLUMN ACESSOS_EBRIGADA_RANDON.MATRICULA IS 'Matrícula do brigadista' / COMMENT ON COLUMN ACESSOS_EBRIGADA_RANDON.COD_RELOGIO IS 'Código do equipamento de acesso' / COMMENT ON COLUMN ACESSOS_EBRIGADA_RANDON.DATA_HORA_ACESSO IS 'Data e hora do acesso' / COMMENT ON COLUMN ACESSOS_EBRIGADA_RANDON.TIPO_ACESSO IS 'Tipo de Acesso - (E)ntrada ou (S)aída' / COMMENT ON COLUMN ACESSOS_EBRIGADA_RANDON.RELOGIO_SAIDA_EMPRESA IS 'Indica se o equipamento de acesso é na saída da empresa' / COMMENT ON COLUMN ACESSOS_EBRIGADA_RANDON.COD_HORARIO_TRABALHO IS 'Código do horário de trabalho do brigadista' / COMMENT ON COLUMN ACESSOS_EBRIGADA_RANDON.ENVIADO_EBRIGADA IS 'Indica se o registro já foi replicado para o sistema E-brigada' / COMMENT ON COLUMN ACESSOS_EBRIGADA_RANDON.MENSAGEM_ERRO IS 'Informa a mensagem de erro retornada pela API, quando houver' / ALTER TABLE ACESSOS_EBRIGADA_RANDON ADD CONSTRAINT ACS_BRG_RANDON_PK PRIMARY KEY (ID) USING INDEX TABLESPACE &PONTO_NDX / CREATE SEQUENCE SEQ_ACESSOS_EBRIGADA_RANDON MINVALUE 1 MAXVALUE 9999999999999999999 START WITH 1 INCREMENT BY 1 NOCACHE / CREATE TABLE PONTEIROS_ACESSOS_EBRIGADA ( ID NUMBER(19) NOT NULL, TCP_ID NUMBER(19) NOT NULL, DATA_ACESSO DATE NOT NULL, TIPO_ACESSO VARCHAR2(1) NOT NULL, COD_RELOGIO NUMBER(4) NOT NULL, STATUS_PROCESSAMENTO VARCHAR2(1) NOT NULL ) TABLESPACE &PONTO_DATA / COMMENT ON COLUMN PONTEIROS_ACESSOS_EBRIGADA.ID IS 'Identificador único do registro. Mesmo identificador da tabela ACESSOS_PESSOAS' / COMMENT ON COLUMN PONTEIROS_ACESSOS_EBRIGADA.TCP_ID IS 'Identifica o histórico da pessoa' / COMMENT ON COLUMN PONTEIROS_ACESSOS_EBRIGADA.DATA_ACESSO IS 'Data e hora do acesso' / COMMENT ON COLUMN PONTEIROS_ACESSOS_EBRIGADA.TIPO_ACESSO IS 'Tipo de Acesso - (E)ntrada ou (S)aída' / COMMENT ON COLUMN PONTEIROS_ACESSOS_EBRIGADA.COD_RELOGIO IS 'Código do equipamento onde ocorreu o acesso' / COMMENT ON COLUMN PONTEIROS_ACESSOS_EBRIGADA.STATUS_PROCESSAMENTO IS 'Status do processamento do registro - (A)guardando, (P)rocessando, (F)inalizado' / ALTER TABLE PONTEIROS_ACESSOS_EBRIGADA ADD CONSTRAINT PNT_ACS_EBRIGADA_PK PRIMARY KEY (ID) USING INDEX TABLESPACE &PONTO_NDX / CREATE TABLE PESSOAS_EBRIGADA_RANDON ( MATRICULA NUMBER(10) NOT NULL, COD_EMPRESA VARCHAR2(6) NOT NULL, NOME VARCHAR2(60) ) TABLESPACE &PONTO_DATA / COMMENT ON COLUMN PESSOAS_EBRIGADA_RANDON.MATRICULA IS 'Matrícula do brigadista' / COMMENT ON COLUMN PESSOAS_EBRIGADA_RANDON.COD_EMPRESA IS 'Código da empresa do brigadista' / COMMENT ON COLUMN PESSOAS_EBRIGADA_RANDON.NOME IS 'Nome do brigadista' / ALTER TABLE PESSOAS_EBRIGADA_RANDON ADD CONSTRAINT PSS_EBRIG_RANDON_PK PRIMARY KEY (MATRICULA, COD_EMPRESA) USING INDEX TABLESPACE &PONTO_NDX /OS11042.atz
PROMPT Criando parâmetros customizados para integração com API E-Brigada... insert into parametros_customizados_pontos (nome_parametro, valor_parametro, descr_parametro) values ( 'URL_API_EBRIGADA', 'https://sandbox.e-brigada.com.br/api/', 'URL da API de integração com o sistema E-Brigada') / insert into parametros_customizados_pontos (nome_parametro, valor_parametro, descr_parametro) values ( 'USUARIO_API_EBRIGADA', 'api.frasle@e-brigada.com.br', 'Usuário para conexão com a API de integração com o sistema E-Brigada') / insert into parametros_customizados_pontos (nome_parametro, valor_parametro, descr_parametro) values ( 'SENHA_API_EBRIGADA', '15AT@frasle', 'Senha para conexão com a API de integração com o sistema E-Brigada') / insert into parametros_customizados_pontos (nome_parametro, valor_parametro, descr_parametro) values ( 'LISTA_FILIAIS_EBRIGADA', 'FR01', 'Lista de filiais utilizada na consuolta da view V_PESSOAS_EBRIGADA_RANDON para integração com o sistema E-Brigada') / insert into parametros_customizados_pontos (nome_parametro, valor_parametro, descr_parametro) values ( 'LISTA_QUALIFICACOES_EBRIGADA', '50002613,50002614', 'Lista de qualificações utilizada na consuolta da view V_PESSOAS_EBRIGADA_RANDON para integração com o sistema E-Brigada') / commit /AS24100.trg
create or replace trigger trig_gera_acesso_ebrigada after insert on acessos_pessoas for each row --------------------------------- VERSAO CUSTOMIZADA ESPECÍFICA --------------------------------- -- OS11042, 08/08/2024, Jonathan. Criacao do objeto. -- declare -- cursor c_autorizado is select s.acesso_autorizado from status_acessos_pessoas s where s.status_acesso = :new.status_acesso; -- vacesso_autorizado status_acessos_pessoas.acesso_autorizado%type; -- begin -- if :new.tipo_acesso in ('E','S') then -- open c_autorizado; fetch c_autorizado into vacesso_autorizado; close c_autorizado; -- if vacesso_autorizado = 'S' then -- insert into ponteiros_acessos_ebrigada ( id, tcp_id, data_acesso, tipo_acesso, cod_relogio, status_processamento ) values ( :new.id, :new.tcp_id, :new.data_acesso, :new.tipo_acesso, :new.cod_relogio, 'A' ); -- end if; -- end if; -- end trig_gera_acesso_ebrigada; /AS24110.prc
create or replace procedure proc_gera_acessos_ebrigada is --------------------------------- VERSAO CUSTOMIZADA ESPECÍFICA --------------------------------- -- OS11042, 12/08/2024, Jonathan. Criacao do objeto. -- cursor c_brigadista (ptcp_id in number) is select fpp.matricula, fpp.cod_horario_trabalho from pessoas_ebrigada_randon per, funcionarios_parametros_pontos fpp where fpp.tcp_id = ptcp_id and per.matricula = fpp.matricula and per.cod_empresa = fpp.cod_empresa; -- r_brigadista c_brigadista%rowtype; -- cursor c_relogio (pcod_relogio in number) is select ra.saida_empresa from relogios_acessos ra where ra.cod_relogio = pcod_relogio; -- vrelogio_saida_empresa relogios_acessos.saida_empresa%type; -- begin -- for vreg in ( select p.id, p.tcp_id, p.data_acesso, p.tipo_acesso, p.cod_relogio, p.status_processamento from ponteiros_acessos_ebrigada p where p.status_processamento = 'A' order by p.data_acesso asc for update ) loop -- update ponteiros_acessos_ebrigada set status_processamento = 'P' where id = vreg.id; -- r_brigadista := null; -- open c_brigadista (vreg.tcp_id); fetch c_brigadista into r_brigadista; if c_brigadista%found then -- vrelogio_saida_empresa := 'N'; open c_relogio (vreg.cod_relogio); fetch c_relogio into vrelogio_saida_empresa; close c_relogio; -- insert into acessos_ebrigada_randon ( id, matricula, cod_relogio, data_hora_acesso, tipo_acesso, relogio_saida_empresa, cod_horario_trabalho, enviado_ebrigada ) values ( seq_acessos_ebrigada_randon.nextval, r_brigadista.matricula, vreg.cod_relogio, vreg.data_acesso, vreg.tipo_acesso, vrelogio_saida_empresa, r_brigadista.cod_horario_trabalho, 'N' ); -- end if; close c_brigadista; -- update ponteiros_acessos_ebrigada set status_processamento = 'F' where id = vreg.id; -- commit; -- end loop; -- end proc_gera_acessos_ebrigada; /AS24120.job
PROMPT Cadastrando JOB para geração de dados de acesso para o sistema E-brigada... SET SERVEROUTPUT ON SIZE 100000 DECLARE -- VJOB NUMBER; VCJP_NRO NUMBER; VATUALIZA BOOLEAN := TRUE; VDESCRICAO CADASTROS_JOBS_PONTOS.DESCRICAO_JOB%TYPE := 'Gera acessos E-brigada'; VNOME_JOB CADASTROS_JOBS_PONTOS.NOME_JOB%TYPE := 'PROC_GERA_ACESSOS_EBRIGADA'; VACAO_JOB CADASTROS_JOBS_PONTOS.ACAO%TYPE := 'PROC_GERA_ACESSOS_EBRIGADA'; VINTERVAL CADASTROS_JOBS_PONTOS.EXPRESSAO_INTERVALO%TYPE := 'SYSDATE+3/1440'; PACAO_JOB CADASTROS_JOBS_PONTOS.ACAO%TYPE; XACAO_JOB CADASTROS_JOBS_PONTOS.ACAO%TYPE := 'BEGIN NULL; END;'; VDATA_INI CADASTROS_JOBS_PONTOS.DATA_INICIAL_EXECUCAO%TYPE := SYSDATE+3/1440; -- CURSOR CJOB IS SELECT JOB , INTERVAL , NEXT_DATE FROM USER_JOBS WHERE UPPER(WHAT) LIKE '%'||VACAO_JOB||'%' AND UPPER(WHAT) NOT LIKE '%JOBNAME%'; -- CURSOR C_CJP IS SELECT CJP.NRO_JOB FROM CADASTROS_JOBS_PONTOS CJP WHERE CJP.NOME_JOB = VNOME_JOB; -- BEGIN -- OPEN CJOB; FETCH CJOB INTO VJOB, VINTERVAL, VDATA_INI; -- IF CJOB%FOUND THEN -- DBMS_OUTPUT.PUT_LINE('JOB já existente no cliente: '|| TO_CHAR(VJOB)); -- VATUALIZA := FALSE; -- PACAO_JOB := PACK_JOB_PONTO.MONTA_ACAO_JOB('J',VNOME_JOB,''''||VACAO_JOB||'''',VDESCRICAO,NULL,'S',VJOB); -- DBMS_JOB.REMOVE(VJOB); DBMS_JOB.ISUBMIT(VJOB, PACAO_JOB, VDATA_INI, VINTERVAL); -- ELSE -- DBMS_JOB.SUBMIT(VJOB, XACAO_JOB, VDATA_INI, VINTERVAL); DBMS_JOB.REMOVE(VJOB); -- PACAO_JOB := PACK_JOB_PONTO.MONTA_ACAO_JOB('J',VNOME_JOB,''''||VACAO_JOB||'''',VDESCRICAO,NULL,'S',VJOB); -- DBMS_JOB.ISUBMIT(VJOB, PACAO_JOB, VDATA_INI, VINTERVAL); -- DBMS_OUTPUT.PUT_LINE('JOB Criado: '|| TO_CHAR(VJOB)); -- END IF; -- CLOSE CJOB; -- BEGIN -- OPEN C_CJP; FETCH C_CJP INTO VCJP_NRO; -- IF C_CJP%FOUND THEN -- DBMS_OUTPUT.PUT_LINE('JOB já existente na versão Full Web: '|| TO_CHAR(VCJP_NRO)); -- ELSE -- INSERT INTO CADASTROS_JOBS_PONTOS(NRO_JOB ,NOME_JOB ,ACAO ,DATA_INICIAL_EXECUCAO ,DATA_FINAL_EXECUCAO ,EXPRESSAO_INTERVALO ,HABILITADO ,DESCRICAO_JOB ,EMAIL ,GERA_LOG_SOMENTE_ERRO ,REINICIAVEL ,VERSION) VALUES (SEQ_CADASTROS_JOBS_PONTOS.NEXTVAL ,VNOME_JOB ,VACAO_JOB ,VDATA_INI ,NULL ,VINTERVAL ,'S' ,VDESCRICAO ,NULL ,'S' ,'S' ,0) RETURNING NRO_JOB INTO VCJP_NRO; -- DBMS_OUTPUT.PUT_LINE('JOB versão Full Web Cadastrado: '|| TO_CHAR(VCJP_NRO)); -- IF VATUALIZA THEN -- PACK_JOB_PONTO.ATUALIZA_JOB_BANCO( 'I' , VNOME_JOB , ''''||VACAO_JOB||'''' , VDATA_INI , NULL , VINTERVAL , 'S' , VDESCRICAO , NULL , 'S' , 'S' , VJOB ); -- END IF; -- END IF; -- CLOSE C_CJP; -- END; -- COMMIT; -- END; /AS24140.prc
create or replace procedure proc_gera_pessoas_ebrigada is --------------------------------- VERSAO CUSTOMIZADA ESPECÍFICA --------------------------------- -- OS11042, 15/08/2024, Jonathan. Criacao do objeto. -- begin -- delete pessoas_ebrigada_randon; -- for vreg in ( select liga.objid MATRICULA, sap.empr as COD_EMPRESA, sap.nome NOME from sistemas.e1p1001 liga, sistemas.funcionarios_sap sap where liga.objid = sap.matr and pack_util.consta_lista(pack_util.valor_param_customizado('LISTA_FILIAIS_EBRIGADA',sap.arearh)) = 'S' and liga.sclas = 'Q' and pack_util.consta_lista(pack_util.valor_param_customizado('LISTA_QUALIFICACOES_EBRIGADA',liga.sobid)) = 'S' and liga.endda > sysdate ) loop -- begin -- insert into pessoas_ebrigada_randon ( matricula, cod_empresa, nome ) values ( vreg.matricula, vreg.cod_empresa, vreg.nome ); -- exception when dup_val_on_index then null; end; -- end loop; -- commit; -- end proc_gera_pessoas_ebrigada; /AS24130.job
PROMPT Cadastrando JOB para geração de dados de pessoas integração com o sistema E-brigada... SET SERVEROUTPUT ON SIZE 100000 DECLARE -- VJOB NUMBER; VCJP_NRO NUMBER; VATUALIZA BOOLEAN := TRUE; VDESCRICAO CADASTROS_JOBS_PONTOS.DESCRICAO_JOB%TYPE := 'Gera pessoas E-brigada'; VNOME_JOB CADASTROS_JOBS_PONTOS.NOME_JOB%TYPE := 'PROC_GERA_PESSOAS_EBRIGADA'; VACAO_JOB CADASTROS_JOBS_PONTOS.ACAO%TYPE := 'PROC_GERA_PESSOAS_EBRIGADA'; VINTERVAL CADASTROS_JOBS_PONTOS.EXPRESSAO_INTERVALO%TYPE := 'TRUNC(SYSDATE+1)+1/24'; PACAO_JOB CADASTROS_JOBS_PONTOS.ACAO%TYPE; XACAO_JOB CADASTROS_JOBS_PONTOS.ACAO%TYPE := 'BEGIN NULL; END;'; VDATA_INI CADASTROS_JOBS_PONTOS.DATA_INICIAL_EXECUCAO%TYPE := SYSDATE; -- CURSOR CJOB IS SELECT JOB , INTERVAL , NEXT_DATE FROM USER_JOBS WHERE UPPER(WHAT) LIKE '%'||VACAO_JOB||'%' AND UPPER(WHAT) NOT LIKE '%JOBNAME%'; -- CURSOR C_CJP IS SELECT CJP.NRO_JOB FROM CADASTROS_JOBS_PONTOS CJP WHERE CJP.NOME_JOB = VNOME_JOB; -- BEGIN -- OPEN CJOB; FETCH CJOB INTO VJOB, VINTERVAL, VDATA_INI; -- IF CJOB%FOUND THEN -- DBMS_OUTPUT.PUT_LINE('JOB já existente no cliente: '|| TO_CHAR(VJOB)); -- VATUALIZA := FALSE; -- PACAO_JOB := PACK_JOB_PONTO.MONTA_ACAO_JOB('J',VNOME_JOB,''''||VACAO_JOB||'''',VDESCRICAO,NULL,'S',VJOB); -- DBMS_JOB.REMOVE(VJOB); DBMS_JOB.ISUBMIT(VJOB, PACAO_JOB, VDATA_INI, VINTERVAL); -- ELSE -- DBMS_JOB.SUBMIT(VJOB, XACAO_JOB, VDATA_INI, VINTERVAL); DBMS_JOB.REMOVE(VJOB); -- PACAO_JOB := PACK_JOB_PONTO.MONTA_ACAO_JOB('J',VNOME_JOB,''''||VACAO_JOB||'''',VDESCRICAO,NULL,'S',VJOB); -- DBMS_JOB.ISUBMIT(VJOB, PACAO_JOB, VDATA_INI, VINTERVAL); -- DBMS_OUTPUT.PUT_LINE('JOB Criado: '|| TO_CHAR(VJOB)); -- END IF; -- CLOSE CJOB; -- BEGIN -- OPEN C_CJP; FETCH C_CJP INTO VCJP_NRO; -- IF C_CJP%FOUND THEN -- DBMS_OUTPUT.PUT_LINE('JOB já existente na versão Full Web: '|| TO_CHAR(VCJP_NRO)); -- ELSE -- INSERT INTO CADASTROS_JOBS_PONTOS(NRO_JOB ,NOME_JOB ,ACAO ,DATA_INICIAL_EXECUCAO ,DATA_FINAL_EXECUCAO ,EXPRESSAO_INTERVALO ,HABILITADO ,DESCRICAO_JOB ,EMAIL ,GERA_LOG_SOMENTE_ERRO ,REINICIAVEL ,VERSION) VALUES (SEQ_CADASTROS_JOBS_PONTOS.NEXTVAL ,VNOME_JOB ,VACAO_JOB ,VDATA_INI ,NULL ,VINTERVAL ,'S' ,VDESCRICAO ,NULL ,'S' ,'S' ,0) RETURNING NRO_JOB INTO VCJP_NRO; -- DBMS_OUTPUT.PUT_LINE('JOB versão Full Web Cadastrado: '|| TO_CHAR(VCJP_NRO)); -- IF VATUALIZA THEN -- PACK_JOB_PONTO.ATUALIZA_JOB_BANCO( 'I' , VNOME_JOB , ''''||VACAO_JOB||'''' , VDATA_INI , NULL , VINTERVAL , 'S' , VDESCRICAO , NULL , 'S' , 'S' , VJOB ); -- END IF; -- END IF; -- CLOSE C_CJP; -- END; -- COMMIT; -- END; /
Objetos disponíveis na pasta O:\PONTO\Clientes\32.Randon\CustomizacoesEspecificas\PATCHS\OS11042