· 5 years ago · Aug 20, 2020, 06:58 PM
1create function f_ago_grava_dados_pessoa(pdadospessoa json, OUT rstatus boolean, OUT rmensagem text) returns record
2 language plpgsql
3as
4$$
5DECLARE
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
253alter function f_ago_grava_dados_pessoa(json, out boolean, out text) owner to retaguarda_dba;
254
255