TOTVS CRM | SFA - 12.1.2501
.public
Tables
(current)
Columns
Constraints
Relationships
Orphan Tables
Anomalies
Routines
postusuariosub(text)
Parameters
Name
Type
Mode
json_origem
text
IN
Definition
declare json_usuario json; json_usuario_email json; json_usuario_filial json; json_usuario_hierarquia json; json_usuario_local json; json_usuario_telefone json; usuario_id integer; usuario_email_id integer; usuario_filial_id integer; usuario_hierarquia_id integer; usuario_local_id integer; usuario_telefone_id integer; usuariol_external_id text; usuario_email_external_id text; usuario_filial_external_id text; usuario_hierarquia_external_id text; usuario_local_external_id text; usuario_telefone_external_id text; usuario_email_origem RECORD; usuario_filial_origem RECORD; usuario_hierarquia_origem RECORD; usuario_local_origem RECORD; usuario_telefone_origem RECORD; begin --USUARIO --USUARIO --USUARIO --USUARIO --Aqui retira a tag json e também é necessário retirar as chaves que sobram --pois o metodo json_extract_path_textxt não entende e não consegue extrair corretamente as subtags depois json_origem = CAST(json_extract_path_text(CAST(json_origem AS json),'json') AS TEXT); json_origem = substr(json_origem,2,length(json_origem )); json_origem = substr(json_origem,0,length(json_origem)); json_usuario = cast(json_origem AS json); select codigoerp into usuariol_external_id from usuario where codigoerp = json_extract_path_text(json_usuario,'externalid'); if usuariol_external_id is null then select nextval('seqpkusuario')into usuario_id; insert into usuario(idusuario, login, nome, senha, email, idnativo, endereco, cep, idperfilacesso, codigoerp, datacadastro, idnexigealfanumerico, idnpermitirintegracao, idnhabilitarldap) values( usuario_id, json_extract_path_text(json_usuario,'login'), json_extract_path_text(json_usuario,'nome'), substr(encode(digest(cast(json_extract_path_text(json_usuario,'senha') as bytea), cast('sha1' as text)), 'hex'),0,31), json_extract_path_text(json_usuario,'email'), cast(json_extract_path_text(json_usuario,'idnativo') as bigint), json_extract_path_text(json_usuario,'endereco'), json_extract_path_text(json_usuario,'cep'), cast(json_extract_path_text(json_usuario,'idperfilacesso') as bigint), json_extract_path_text(json_usuario,'externalid'), current_date, 0, 0, 0 ); --EMAILS DO USUARIO --EMAILS DO USUARIO --EMAILS DO USUARIO --EMAILS DO USUARIO json_usuario_email = json_extract_path_text(json_usuario,'UsuarioEmail'); FOR usuario_email_origem IN SELECT json_extract_path_text(value,'email') AS email, json_extract_path_text(value,'idnpadrao') AS idnpadrao, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_usuario_email) LOOP -- Consulta Emails do Usuario no SFA select codigoerp into usuario_email_external_id from usuarioemail where codigoerp = usuario_email_origem.externalid; if usuario_email_external_id is null then -- Emails do Usuario novos são inseridos. select nextval('seqpkusuarioemail')into usuario_email_id; insert into usuarioemail (idusuarioemail, email, idnpadrao, codigoerp, idusuario) values( usuario_email_id, usuario_email_origem.email, cast(usuario_email_origem.idnpadrao as bigint), usuario_email_origem.externalid, usuario_id ); end if; END LOOP; -- FIM EMAILS DO USUARIO -- FIM EMAILS DO USUARIO -- FIM EMAILS DO USUARIO -- FIM EMAILS DO USUARIO --FILIAIS DO USUARIO --FILIAIS DO USUARIO --FILIAIS DO USUARIO --FILIAIS DO USUARIO json_usuario_filial = json_extract_path_text(json_usuario,'UsuarioFilial'); FOR usuario_filial_origem IN SELECT json_extract_path_text(value,'idfiliallocal') AS idfiliallocal, json_extract_path_text(value,'idnpadrao') AS idnpadrao, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_usuario_filial) LOOP -- Consulta Filiais do Usuario no SFA select codigoerp into usuario_filial_external_id from usuariofilial where codigoerp = usuario_filial_origem.externalid; if usuario_filial_external_id is null then -- Filiais do Usuario novos são inseridos. select nextval('seqpkusuariofilial')into usuario_filial_id; insert into usuariofilial (idusuariofilial, idlocalfilial , idnpadrao, codigoerp, idusuario) values( usuario_filial_id, cast(usuario_filial_origem.idfiliallocal as bigint), cast(usuario_filial_origem.idnpadrao as bigint), usuario_filial_origem.externalid, usuario_id ); end if; END LOOP; -- FIM FILIAIS DO USUARIO -- FIM FILIAIS DO USUARIO -- FIM FILIAIS DO USUARIO -- FIM FILIAIS DO USUARIO --HIERARQUIA DO USUARIO --HIERARQUIA DO USUARIO --HIERARQUIA DO USUARIO --HIERARQUIA DO USUARIO json_usuario_hierarquia = json_extract_path_text(json_usuario,'UsuarioHierarquia'); FOR usuario_hierarquia_origem IN SELECT json_extract_path_text(value,'idusuariosuperior') AS idusuariosuperior, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_usuario_hierarquia) LOOP -- Consulta hierarquia do Usuario no SFA select codigoerp into usuario_hierarquia_external_id from usuariohierarquia where codigoerp = usuario_hierarquia_origem.externalid; if usuario_hierarquia_external_id is null then -- Hierarquia do Usuario novos são inseridos. select nextval('seqpkusuariohierarquia')into usuario_hierarquia_id; insert into usuariohierarquia (idusuariohierarquia, idusuario, idusuariosuperior, idnenviaclient , idnpadrao , idnusuarioresponsavel , idnusuarionotificacao, codigoerp ) values( usuario_hierarquia_id, usuario_id, cast(usuario_hierarquia_origem.idusuariosuperior as bigint), 0, 0, 0, 0, usuario_hierarquia_origem.externalid ); end if; END LOOP; -- FIM HIERARQUIA DO USUARIO -- FIM HIERARQUIA DO USUARIO -- FIM HIERARQUIA DO USUARIO -- FIM HIERARQUIA DO USUARIO --USUARIOLOCAL DO USUARIO --USUARIOLOCAL DO USUARIO --USUARIOLOCAL DO USUARIO --USUARIOLOCAL DO USUARIO json_usuario_local = json_extract_path_text(json_usuario,'UsuarioLocal'); FOR usuario_local_origem IN SELECT json_extract_path_text(value,'idcliente') AS idcliente, json_extract_path_text(value,'idlocal') AS idlocal, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_usuario_local) LOOP -- Consulta carteira de locais do Usuario no SFA select codigoerp into usuario_local_external_id from usuariolocal where codigoerp = usuario_local_origem.externalid; if usuario_local_external_id is null then -- Carteira de locais do Usuario novos são inseridos. select nextval('seqpkusuariolocal')into usuario_local_id; insert into usuariolocal (idusuariolocal, idusuario, idparceiro, idlocal, codigoerp ) values( usuario_local_id, usuario_id, cast(usuario_local_origem.idcliente as bigint), cast(usuario_local_origem.idlocal as bigint), usuario_local_origem.externalid ); end if; END LOOP; -- FIM USUARIOLOCAL DO USUARIO -- FIM USUARIOLOCAL DO USUARIO -- FIM USUARIOLOCAL DO USUARIO -- FIM USUARIOLOCAL DO USUARIO --TELEFONE DO USUARIO --TELEFONE DO USUARIO --TELEFONE DO USUARIO --TELEFONE DO USUARIO json_usuario_telefone = json_extract_path_text(json_usuario,'UsuarioTelefone'); FOR usuario_telefone_origem IN SELECT json_extract_path_text(value,'telefone') AS telefone, json_extract_path_text(value,'idnpadrao') AS idnpadrao, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_usuario_telefone) LOOP -- Consulta telefones do Usuario no SFA select codigoerp into usuario_telefone_external_id from usuariotelefone where codigoerp = usuario_telefone_origem.externalid; if usuario_telefone_external_id is null then -- Telefones do Usuario novos são inseridos. select nextval('seqpkusuariotelefone')into usuario_telefone_id; insert into usuariotelefone (idusuariotelefone, idusuario, telefone, idnpadrao, codigoerp ) values( usuario_telefone_id, usuario_id, usuario_telefone_origem.telefone, cast(usuario_telefone_origem.idnpadrao as bigint), usuario_telefone_origem.externalid ); end if; END LOOP; -- FIM TELEFONE DO USUARIO -- FIM TELEFONE DO USUARIO -- FIM TELEFONE DO USUARIO -- FIM TELEFONE DO USUARIO else -- Quando já existe RAISE notice 'O usuario (codigoerp = %) já existe, não foi possível inserí-lo, mande um PUT ao invés de POST .',cast(usuariol_external_id as text); return 'O usuario (codigoerp = '||cast(usuariol_external_id as TEXT)||' ) já existe, não foi possível inserí-lo, mande um PUT ao invés de POST .'; end if; --FIM USUARIO --FIM USUARIO --FIM USUARIO --FIM USUARIO return '{"internalid" : "'||cast(usuario_id as text)||'"}'; END;