Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- create function f_ago_grava_dados_pessoa(pdadospessoa json, OUT rstatus boolean, OUT rmensagem text) returns record
- language plpgsql
- as
- $$
- DECLARE
- VCodigoPessoa TEXT;
- VErroMensagem TEXT;
- VIdMunicipio BIGINT;
- VIdPessoa BIGINT;
- BEGIN
- RStatus := FALSE;
- RMensagem := '';
- IF (MD5(CURRENT_SETTING('petros.conta_usuario')) != f_ago_obtem_hash_validacao_conta_usuario()) THEN
- RAISE EXCEPTION 'Usuário sem permissão!!!';
- END IF;
- CREATE TEMPORARY TABLE temp_ago_pessoa(
- nome VARCHAR(100),
- fantasia_codinome VARCHAR(100),
- nascimento DATE,
- cnpj_cpf VARCHAR(14),
- email VARCHAR(100)
- ) ON COMMIT DROP;
- INSERT INTO temp_ago_pessoa(
- nome,
- fantasia_codinome,
- nascimento,
- cnpj_cpf,
- email
- )
- SELECT nome,
- fantasia_codinome,
- nascimento,
- cnpj_cpf,
- email
- FROM JSON_POPULATE_RECORDSET(NULL::temp_ago_pessoa, PDadosPessoa -> 'pessoa');
- CREATE TEMPORARY TABLE temp_ago_endereco_pessoa(
- logradouro VARCHAR(100),
- numero VARCHAR(10),
- complemento VARCHAR(100),
- cep VARCHAR(10),
- bairro VARCHAR(50),
- municipio VARCHAR(50),
- uf CHAR(2),
- telefone VARCHAR(20)
- ) ON COMMIT DROP;
- INSERT INTO temp_ago_endereco_pessoa(
- logradouro,
- numero,
- complemento,
- cep,
- bairro,
- municipio,
- uf,
- telefone
- )
- SELECT logradouro,
- numero,
- complemento,
- cep,
- bairro,
- municipio,
- uf,
- telefone
- FROM JSON_POPULATE_RECORDSET(NULL::temp_ago_endereco_pessoa, PDadosPessoa -> 'endereco_pessoa');
- IF (NOT EXISTS (SELECT 1
- FROM pessoa p
- WHERE p.cnpj_cpf = (SELECT t.cnpj_cpf FROM temp_ago_pessoa t LIMIT 1))
- AND EXISTS(SELECT 1 FROM temp_ago_pessoa t WHERE COALESCE(TRIM(t.cnpj_cpf), '') <> '')) THEN
- WITH RECURSIVE sub_ultimo_codigo_pessoa(n) AS (
- SELECT (SELECT f_obtem_parametro_inteiro('corporativo.ultimo_codigo_pessoa_utilizado', NULL, NULL, 'N') + 1) AS n
- UNION ALL
- SELECT n + 1 FROM sub_ultimo_codigo_pessoa WHERE EXISTS(SELECT 1
- FROM pessoa
- WHERE pessoa.codigo = CAST(n AS TEXT))
- )
- SELECT CAST(MAX(n) AS TEXT)
- INTO VCodigoPessoa
- FROM sub_ultimo_codigo_pessoa;
- UPDATE sis_parametro
- SET valor_numerico = CAST(VCodigoPessoa AS BIGINT)
- WHERE id_parametro = 'corporativo.ultimo_codigo_pessoa_utilizado';
- SELECT m.id_municipio
- INTO VIdMunicipio
- FROM municipio m
- INNER JOIN uf uf ON (uf.id_uf = m.id_uf)
- INNER JOIN temp_ago_endereco_pessoa t ON (UPPER(TRIM(TRANSLATE(t.municipio,'ÁÀÂÃÄáàâãäÉÈÊËéèêëÍÌÎÏíìîïÓÒÕÔÖóòôõöÚÙÛÜúùûüÇç','AAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUUuuuuÇc'))) =
- UPPER(TRIM(TRANSLATE(m.nome,'ÁÀÂÃÄáàâãäÉÈÊËéèêëÍÌÎÏíìîïÓÒÕÔÖóòôõöÚÙÛÜúùûüÇç','AAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUUuuuuÇc'))) AND
- UPPER(t.uf) = UPPER(uf.sigla))
- LIMIT 1;
- IF (NOT FOUND) THEN
- RAISE EXCEPTION 'Município [%] não encontrado.', (SELECT t.municipio FROM temp_ago_endereco_pessoa t);
- END IF;
- VIdPessoa = NEXTVAL('SEQ_CHAVE_PRIMARIA');
- INSERT INTO pessoa(
- id_pessoa,
- guid_pessoa,
- codigo,
- nome,
- fantasia_codinome,
- natureza,
- id_municipio,
- cnpj_cpf,
- num_rg,
- orgao_expedicao_rg,
- data_expedicao_rg,
- sexo,
- nascimento,
- inscricao_estadual,
- inscricao_municipal,
- documento_estrangeiro,
- id_banco,
- codigo_agencia,
- conta_corrente,
- site,
- email_comercial,
- email_cobranca,
- email_nfe,
- celular,
- cnae,
- regime_tributario,
- inscricao_estadual_unica,
- opcional_1,
- opcional_2,
- opcional_3,
- opcional_4,
- opcional_5,
- observacao,
- situacao,
- id_usuario,
- data_cadastro,
- id_usuario_cadastro,
- data_aprovacao,
- id_usuario_aprovacao,
- data_bloqueio,
- id_usuario_bloqueio,
- data_desativacao,
- id_usuario_desativacao,
- data_alteracao,
- id_usuario_alteracao,
- checksum,
- versao_registro,
- id_conta_contabil,
- tipo_conta
- )
- SELECT VIdPessoa id_pessoa,
- UPPER(MD5('' || CLOCK_TIMESTAMP() || CLOCK_TIMESTAMP())) guid_pessoa,
- VCodigoPessoa codigo,
- t.nome,
- t.fantasia_codinome,
- (CASE WHEN LENGTH(t.cnpj_cpf) = 14 then 2 /*juridica*/ ELSE 1 /*fisica*/ END) natureza,
- VIdMunicipio id_municipio,
- t.cnpj_cpf,
- NULL num_rg,
- NULL orgao_expedicao_rg,
- NULL data_expedicao_rg,
- NULL sexo,
- t.nascimento,
- NULL inscricao_estadual,
- NULL inscricao_municipal,
- NULL documento_estrangeiro,
- NULL id_banco,
- NULL codigo_agencia,
- NULL conta_corrente,
- NULL site,
- t.email email_comercial,
- t.email email_cobranca,
- t.email email_nfe,
- (SELECT te.telefone FROM temp_ago_endereco_pessoa te) celular,
- NULL cnae,
- 9 /*Não Informado*/ regime_tributario,
- NULL inscricao_estadual_unica,
- NULL opcional_1,
- NULL opcional_2,
- NULL opcional_3,
- NULL opcional_4,
- NULL opcional_5,
- 'Inclusão realizada de forma automática pelo AdaptiveGo' observacao,
- 1 /*Ativo*/ situacao,
- NULL id_usuario,
- CLOCK_TIMESTAMP() data_cadastro,
- NULL id_usuario_cadastro,
- CLOCK_TIMESTAMP() data_aprovacao,
- NULL id_usuario_aprovacao,
- NULL data_bloqueio,
- NULL id_usuario_bloqueio,
- NULL data_desativacao,
- NULL id_usuario_desativacao,
- CLOCK_TIMESTAMP() data_alteracao,
- NULL id_usuario_alteracao,
- UPPER(MD5(t.nome || COALESCE(t.cnpj_cpf, '') || COALESCE(CAST(NULL AS TEXT), '') || COALESCE(CAST(NULL AS TEXT), '') || '90FF5985D57C42389D631AE4F25C026E')) checksum,
- NEXTVAL('SEQ_VERSAO_REGISTRO') versao_registro,
- NULL id_conta_contabil,
- 0 /*Não informado*/ tipo_conta
- FROM temp_ago_pessoa t;
- INSERT INTO endereco_pessoa(
- id_endereco_pessoa,
- id_pessoa,
- id_tipo_endereco,
- cep,
- id_tipo_logradouro,
- logradouro,
- complemento,
- numero,
- bairro,
- id_municipio,
- telefone,
- fax,
- registro_ativo,
- uuid_endereco_pessoa
- )
- SELECT NEXTVAL('SEQ_CHAVE_PRIMARIA') id_endereco_pessoa,
- VIdPessoa id_pessoa,
- 1 /*principal*/ id_tipo_endereco,
- t.cep,
- CAST(45 AS BIGINT)/*Outros*/ id_tipo_logradouro,
- t.logradouro,
- t.complemento,
- t.numero,
- t.bairro,
- VIdMunicipio id_municipio,
- t.telefone,
- CAST('' AS VARCHAR(20)) fax,
- 'S' registro_ativo,
- CAST(UPPER(MD5('' || CLOCK_TIMESTAMP() || CLOCK_TIMESTAMP())) AS UUID) uuid_endereco_pessoa
- FROM temp_ago_endereco_pessoa t;
- END IF;
- RStatus := TRUE;
- EXCEPTION
- WHEN OTHERS THEN
- GET STACKED DIAGNOSTICS VErroMensagem = MESSAGE_TEXT;
- RStatus := FALSE;
- RMensagem := VErroMensagem;
- END;
- $$;
- alter function f_ago_grava_dados_pessoa(json, out boolean, out text) owner to retaguarda_dba;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement