Advertisement
ratacheski

f_ago_grava_dados_pessoa

Aug 20th, 2020
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. create function f_ago_grava_dados_pessoa(pdadospessoa json, OUT rstatus boolean, OUT rmensagem text) returns record
  2.     language plpgsql
  3. as
  4. $$
  5. DECLARE
  6.     VCodigoPessoa   TEXT;
  7.     VErroMensagem   TEXT;
  8.     VIdMunicipio    BIGINT;
  9.     VIdPessoa       BIGINT;
  10.  BEGIN
  11.    
  12.     RStatus := FALSE;
  13.     RMensagem := '';
  14.    
  15.     IF (MD5(CURRENT_SETTING('petros.conta_usuario')) != f_ago_obtem_hash_validacao_conta_usuario()) THEN
  16.         RAISE EXCEPTION 'Usuário sem permissão!!!';
  17.     END IF;
  18.    
  19.     CREATE TEMPORARY TABLE temp_ago_pessoa(
  20.         nome VARCHAR(100),
  21.         fantasia_codinome VARCHAR(100),
  22.         nascimento DATE,
  23.         cnpj_cpf VARCHAR(14),
  24.         email VARCHAR(100)
  25.     ) ON COMMIT DROP;
  26.    
  27.     INSERT INTO temp_ago_pessoa(
  28.         nome,
  29.         fantasia_codinome,
  30.         nascimento,
  31.         cnpj_cpf,
  32.         email
  33.     )
  34.     SELECT  nome,
  35.         fantasia_codinome,
  36.         nascimento,
  37.         cnpj_cpf,
  38.         email
  39.     FROM    JSON_POPULATE_RECORDSET(NULL::temp_ago_pessoa, PDadosPessoa -> 'pessoa');
  40.    
  41.     CREATE TEMPORARY TABLE temp_ago_endereco_pessoa(
  42.         logradouro VARCHAR(100),
  43.         numero VARCHAR(10),
  44.         complemento VARCHAR(100),
  45.         cep VARCHAR(10),
  46.         bairro VARCHAR(50),
  47.         municipio VARCHAR(50),
  48.         uf CHAR(2),
  49.         telefone VARCHAR(20)
  50.     ) ON COMMIT DROP;
  51.    
  52.     INSERT INTO temp_ago_endereco_pessoa(
  53.         logradouro,
  54.         numero,
  55.         complemento,
  56.         cep,
  57.         bairro,
  58.         municipio,
  59.         uf,
  60.         telefone
  61.     )
  62.     SELECT  logradouro,
  63.         numero,
  64.         complemento,
  65.         cep,
  66.         bairro,
  67.         municipio,
  68.         uf,
  69.         telefone
  70.     FROM    JSON_POPULATE_RECORDSET(NULL::temp_ago_endereco_pessoa, PDadosPessoa -> 'endereco_pessoa');
  71.    
  72.     IF (NOT EXISTS (SELECT 1
  73.         FROM    pessoa p
  74.         WHERE   p.cnpj_cpf = (SELECT t.cnpj_cpf FROM temp_ago_pessoa t LIMIT 1))
  75.         AND EXISTS(SELECT 1 FROM temp_ago_pessoa t WHERE COALESCE(TRIM(t.cnpj_cpf), '') <> '')) THEN
  76.    
  77.         WITH RECURSIVE sub_ultimo_codigo_pessoa(n) AS (
  78.             SELECT (SELECT f_obtem_parametro_inteiro('corporativo.ultimo_codigo_pessoa_utilizado', NULL, NULL, 'N') + 1) AS n
  79.            
  80.             UNION ALL
  81.            
  82.             SELECT n + 1 FROM sub_ultimo_codigo_pessoa WHERE EXISTS(SELECT 1
  83.                 FROM    pessoa
  84.                 WHERE   pessoa.codigo = CAST(n AS TEXT))
  85.         )
  86.         SELECT  CAST(MAX(n) AS TEXT)
  87.         INTO    VCodigoPessoa
  88.         FROM    sub_ultimo_codigo_pessoa;
  89.        
  90.         UPDATE  sis_parametro
  91.         SET valor_numerico = CAST(VCodigoPessoa AS BIGINT)
  92.         WHERE   id_parametro = 'corporativo.ultimo_codigo_pessoa_utilizado';
  93.        
  94.         SELECT  m.id_municipio
  95.         INTO    VIdMunicipio
  96.         FROM    municipio m
  97.             INNER JOIN uf uf ON (uf.id_uf = m.id_uf)
  98.             INNER JOIN temp_ago_endereco_pessoa t ON (UPPER(TRIM(TRANSLATE(t.municipio,'ÁÀÂÃÄáàâãäÉÈÊËéèêëÍÌÎÏíìîïÓÒÕÔÖóòôõöÚÙÛÜúùûüÇç','AAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUUuuuuÇc'))) =
  99.                 UPPER(TRIM(TRANSLATE(m.nome,'ÁÀÂÃÄáàâãäÉÈÊËéèêëÍÌÎÏíìîïÓÒÕÔÖóòôõöÚÙÛÜúùûüÇç','AAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUUuuuuÇc'))) AND
  100.                 UPPER(t.uf) = UPPER(uf.sigla))
  101.         LIMIT 1;
  102.    
  103.         IF (NOT FOUND) THEN
  104.             RAISE EXCEPTION 'Município [%] não encontrado.', (SELECT t.municipio FROM temp_ago_endereco_pessoa t);
  105.         END IF;
  106.        
  107.         VIdPessoa = NEXTVAL('SEQ_CHAVE_PRIMARIA');
  108.        
  109.         INSERT INTO pessoa(
  110.             id_pessoa,
  111.             guid_pessoa,
  112.             codigo,
  113.             nome,
  114.             fantasia_codinome,
  115.             natureza,
  116.             id_municipio,
  117.             cnpj_cpf,
  118.             num_rg,
  119.             orgao_expedicao_rg,
  120.             data_expedicao_rg,
  121.             sexo,
  122.             nascimento,
  123.             inscricao_estadual,
  124.             inscricao_municipal,
  125.             documento_estrangeiro,
  126.             id_banco,
  127.             codigo_agencia,
  128.             conta_corrente,
  129.             site,
  130.             email_comercial,
  131.             email_cobranca,
  132.             email_nfe,
  133.             celular,
  134.             cnae,
  135.             regime_tributario,
  136.             inscricao_estadual_unica,
  137.             opcional_1,
  138.             opcional_2,
  139.             opcional_3,
  140.             opcional_4,
  141.             opcional_5,
  142.             observacao,
  143.             situacao,
  144.             id_usuario,
  145.             data_cadastro,
  146.             id_usuario_cadastro,
  147.             data_aprovacao,
  148.             id_usuario_aprovacao,
  149.             data_bloqueio,
  150.             id_usuario_bloqueio,
  151.             data_desativacao,
  152.             id_usuario_desativacao,
  153.             data_alteracao,
  154.             id_usuario_alteracao,
  155.             checksum,
  156.             versao_registro,
  157.             id_conta_contabil,
  158.             tipo_conta
  159.         )
  160.         SELECT VIdPessoa id_pessoa,
  161.             UPPER(MD5('' || CLOCK_TIMESTAMP() || CLOCK_TIMESTAMP())) guid_pessoa,
  162.             VCodigoPessoa codigo,
  163.             t.nome,
  164.             t.fantasia_codinome,
  165.             (CASE WHEN LENGTH(t.cnpj_cpf) = 14 then 2 /*juridica*/ ELSE 1 /*fisica*/ END) natureza,
  166.             VIdMunicipio id_municipio,
  167.             t.cnpj_cpf,
  168.             NULL num_rg,
  169.             NULL orgao_expedicao_rg,
  170.             NULL data_expedicao_rg,
  171.             NULL sexo,
  172.             t.nascimento,
  173.             NULL inscricao_estadual,
  174.             NULL inscricao_municipal,
  175.             NULL documento_estrangeiro,
  176.             NULL id_banco,
  177.             NULL codigo_agencia,
  178.             NULL conta_corrente,
  179.             NULL site,
  180.             t.email email_comercial,
  181.             t.email email_cobranca,
  182.             t.email email_nfe,
  183.             (SELECT te.telefone FROM temp_ago_endereco_pessoa te) celular,
  184.             NULL cnae,
  185.             9 /*Não Informado*/ regime_tributario,
  186.             NULL inscricao_estadual_unica,
  187.             NULL opcional_1,
  188.             NULL opcional_2,
  189.             NULL opcional_3,
  190.             NULL opcional_4,
  191.             NULL opcional_5,
  192.             'Inclusão realizada de forma automática pelo AdaptiveGo' observacao,
  193.             1 /*Ativo*/ situacao,
  194.             NULL id_usuario,
  195.             CLOCK_TIMESTAMP() data_cadastro,
  196.             NULL id_usuario_cadastro,
  197.             CLOCK_TIMESTAMP() data_aprovacao,
  198.             NULL id_usuario_aprovacao,
  199.             NULL data_bloqueio,
  200.             NULL id_usuario_bloqueio,
  201.             NULL data_desativacao,
  202.             NULL id_usuario_desativacao,
  203.             CLOCK_TIMESTAMP() data_alteracao,
  204.             NULL id_usuario_alteracao,
  205.             UPPER(MD5(t.nome || COALESCE(t.cnpj_cpf, '') || COALESCE(CAST(NULL AS TEXT), '') || COALESCE(CAST(NULL AS TEXT), '') || '90FF5985D57C42389D631AE4F25C026E')) checksum,
  206.             NEXTVAL('SEQ_VERSAO_REGISTRO') versao_registro,
  207.             NULL id_conta_contabil,
  208.             0 /*Não informado*/ tipo_conta
  209.         FROM    temp_ago_pessoa t;
  210.        
  211.         INSERT INTO endereco_pessoa(
  212.             id_endereco_pessoa,
  213.             id_pessoa,
  214.             id_tipo_endereco,
  215.             cep,
  216.             id_tipo_logradouro,
  217.             logradouro,
  218.             complemento,
  219.             numero,
  220.             bairro,
  221.             id_municipio,
  222.             telefone,
  223.             fax,
  224.             registro_ativo,
  225.             uuid_endereco_pessoa
  226.         )
  227.         SELECT  NEXTVAL('SEQ_CHAVE_PRIMARIA') id_endereco_pessoa,
  228.             VIdPessoa id_pessoa,
  229.             1 /*principal*/ id_tipo_endereco,
  230.             t.cep,
  231.             CAST(45 AS BIGINT)/*Outros*/ id_tipo_logradouro,
  232.             t.logradouro,
  233.             t.complemento,
  234.             t.numero,
  235.             t.bairro,
  236.             VIdMunicipio id_municipio,
  237.             t.telefone,
  238.             CAST('' AS VARCHAR(20)) fax,
  239.             'S' registro_ativo,
  240.             CAST(UPPER(MD5('' || CLOCK_TIMESTAMP() || CLOCK_TIMESTAMP())) AS UUID) uuid_endereco_pessoa
  241.         FROM    temp_ago_endereco_pessoa t;
  242.     END IF;
  243.     RStatus := TRUE;
  244.  EXCEPTION
  245.     WHEN OTHERS THEN
  246.         GET STACKED DIAGNOSTICS VErroMensagem = MESSAGE_TEXT;
  247.        
  248.         RStatus := FALSE;
  249.         RMensagem := VErroMensagem;
  250.  END;
  251. $$;
  252.  
  253. alter function f_ago_grava_dados_pessoa(json, out boolean, out text) owner to retaguarda_dba;
  254.  
  255.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement