Advertisement
Guest User

Untitled

a guest
Jul 24th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.42 KB | None | 0 0
  1. -- Function: public.f_analise_proposta(character varying, character varying, double precision)
  2. -- DROP FUNCTION public.f_analise_proposta(character varying, character varying, double precision);
  3.  
  4. CREATE OR REPLACE FUNCTION public.f_analise_proposta(p_propost CHARACTER varying, p_operaca CHARACTER varying DEFAULT 'H'::CHARACTER varying, p_valsuge double precision DEFAULT 0) RETURNS text AS $BODY$
  5. DECLARE
  6.  
  7. DECLARE
  8. V_RESULT text;
  9. I_EMPRESA INTEGER;
  10. S_TIPOVEI VARCHAR(10);
  11. S_FORMULA VARCHAR(4000);
  12. S_CAMPO VARCHAR(4000);
  13. S_FORMRES VARCHAR(4000);
  14. S_TABLE VARCHAR(4000);
  15. I INTEGER;
  16. F_ABRIU BOOLEAN;
  17. S_NOMECAM VARCHAR(400);
  18. S_VALOR VARCHAR(4000);
  19. V_JSON text;
  20. CONTADOR numeric;
  21. S_BGCOLOR VARCHAR(50);
  22. S_FONTCOLOR VARCHAR(50);
  23. C_TOTALACES FLOAT;
  24. V_JSONR text;
  25. S_COMILUC VARCHAR(50);
  26. CUR RECORD;
  27. s_sqlform text;
  28. ssql text;
  29. BEGIN
  30.  
  31. IF ( P_OPERACA IS NULL ) THEN
  32. P_OPERACA := 'H';
  33. END IF;
  34. IF ( P_VALSUGE IS NULL ) THEN
  35. P_VALSUGE :=0;
  36. END IF;
  37. CONTADOR := 0;
  38. V_JSON := '';
  39. V_JSONR := '';
  40. V_RESULT := '<html>';
  41. IF COALESCE(P_OPERACA, ' ') <> 'R' THEN
  42. V_RESULT := V_RESULT ||
  43. '<style>table th {background: #3F51B5;color: white;}' ||
  44. 'table caption {background: #3F51B5;color: white; border: padding: 1px; 1px solid black;}' ||
  45. 'table{border: 0px black;border-collapse: collapse;}table td,th {padding: 4px;border: 0.1px solid black;}' ||
  46. '</style>';
  47. END IF;
  48. V_RESULT := V_RESULT ||
  49. '<body><table width="100%"><tr><th>Linha</th><th>Identificacao</th><th>Valor</th></tr>';
  50. if (substr(P_PROPOST, 1, 1) = 'P') then
  51. select VACM_EMITPRO_1,
  52. case VVEI_TIPOVEI_1
  53. when 'N' then
  54. 'Novos'
  55. when 'U' then
  56. 'Usados'
  57. else
  58. 'VDI'
  59. end
  60. into I_EMPRESA, S_TIPOVEI
  61. from SGVACM
  62. left join SGVVEI on VVEI_CODIVEI_1 = VACM_CODIVEI_1
  63. where VACM_PROPOST_1 = P_PROPOST;
  64. else
  65. select VLOC_EMITENT_1,
  66. case VVEI_TIPOVEI_1
  67. when 'N' then
  68. 'Novos'
  69. when 'U' then
  70. 'Usados'
  71. else
  72. 'VDI'
  73. end
  74. into I_EMPRESA, S_TIPOVEI
  75. from SGVVEI
  76. left join SGVLOC on VLOC_CODILOC_1 = VVEI_LOCORIG_1
  77. where VVEI_CODIVEI_1 = P_PROPOST;
  78. end if;
  79. FOR CUR in execute 'select *
  80. from SGVRES
  81. where VRES_EMITENT_1 = ' || cast(I_EMPRESA as varchar) ||
  82. ' and VRES_TIPOVEI_1 = ''' || S_TIPOVEI || '''' || ' order by vres_emitent_1, vres_tipovei_1, vres_nrolinh_1'
  83. loop
  84.  
  85. I := 1;
  86. S_formres := '';
  87. F_ABRIU := FALSE;
  88. s_campo := '';
  89. while (I <= LENGTH(CUR.VRES_FORMULA_1)) loop
  90. IF SUBSTR(CUR.VRES_FORMULA_1, I, 1) = '>' THEN
  91. S_TABLE := REPLACE(TRIM(REPLACE(LOWER(SUBSTR(S_CAMPO,
  92. 1,
  93. STRPOS(S_CAMPO, ',') - 1)) ||
  94. '.xfd',
  95. '.arq',
  96. '')),
  97. 'sgvsim',
  98. 'sgvacm');
  99.  
  100. BEGIN
  101. SELECT REPLACE(replace(VX103_XFD_FLD_NAME, '-', '_'),
  102. 'vsim_',
  103. 'vacm_')
  104. INTO S_NOMECAM
  105. from SINVX103
  106. where VX103_XFD_FILE = lower( s_table )
  107. and VX103_XFD_FLD_STRING Like
  108. '%' || TRIM(SUBSTR(s_campo, STRPOS(S_CAMPO, ',') + 1, 5)) || '%';
  109.  
  110. EXCEPTION
  111. WHEN OTHERS THEN
  112. S_FORMRES := SQLCODE || ' - ' || SUBSTR(SQLERRM, 1, 200);
  113. END;
  114. IF (COALESCE(P_VALSUGE, 0) > 0) THEN
  115. S_NOMECAM := case when UPPER(S_NOMECAM) IN ('VACM_VALSUGE_1', 'VACM_VALNOTA_1') THEN CAST(REPLACE(CAST(P_VALSUGE AS VARCHAR), ',', '.') AS VARCHAR)
  116. when UPPER(S_NOMECAM) IN ('vacm_valrevi_1') THEN 'vvei_valrevi_1'
  117. when UPPER(S_NOMECAM) IN ('vacm_valrepa_1') THEN 'COALESCE( ( SELECT SUM(vrep_valores_1) FROM sgvrep WHERE vrep_codivei_1 = ''' || P_PROPOST || ''' ), 0 )' else S_NOMECAM end;
  118. END IF;
  119. S_formres := s_formres || ' COALESCE( ' || coalesce(S_nomecam, ' ') ||
  120. ', 0 )';
  121. S_CAMPO := '';
  122. f_abriu := false;
  123. END IF;
  124. IF SUBSTR(CUR.VRES_FORMULA_1, I, 1) = '<' THEN
  125. F_ABRIU := TRUE;
  126. S_FORMULA := '';
  127. END IF;
  128. IF (NOT F_ABRIU) and
  129. (SUBSTR(CUR.VRES_FORMULA_1, I, 1) not in ('<', '>')) then
  130. S_FORmres := S_FORmres || SUBSTR(CUR.VRES_FORMULA_1, I, 1);
  131. END IF;
  132. IF (F_ABRIU) and (SUBSTR(CUR.VRES_FORMULA_1, I, 1) not in ('<', '>')) then
  133. S_campo := s_campo || SUBSTR(CUR.VRES_FORMULA_1, I, 1);
  134. END IF;
  135. I := I + 1;
  136. end loop;
  137. BEGIN
  138. IF (S_TIPOVEI = 'VDI') THEN
  139. s_formres := replace(s_formres, 'vvei_valaqui_1', 'vint_prectot_1');
  140. end if;
  141. IF (S_TIPOVEI = 'VDI' or substr(P_PROPOST, 1, 1) <> 'P') THEN
  142. s_formres := replace(s_formres, 'VVEI_VALBONU_1', 'VINT_VALBON1_1');
  143. s_formres := replace(s_formres, 'VVEI_VALBON2_1', 'VINT_VALBON2_1');
  144. s_formres := replace(s_formres, 'VVEI_VALBON3_1', 'VINT_VALBON3_1');
  145. END IF;
  146. IF (substr(P_PROPOST, 1, 1) = 'P') then
  147. ssql := 'select to_char( ' || s_formres || ', ''999G999G990D00'' )'||
  148. ' AS VALOR from sgvacm ' ||
  149. ' left join SGVVEI on VVEI_CODIVEI_1 = VACM_CODIVEI_1' ||
  150. ' left join SGVINT on trim( to_char( VINT_CONTROL_1, ''00000000'' ) ) = VACM_CODIVEI_1' ||
  151. ' where vacm_propost_1 = ''' || P_PROPOST || '''';
  152. begin
  153. execute ssql
  154. into s_valor;
  155. EXCEPTION
  156. WHEN OTHERS THEN
  157. s_valor := 'erro';
  158. end;
  159.  
  160. else
  161. raise notice 'Formula 1 % ', s_formres;
  162. s_formres := replace(s_formres,
  163. 'VACM_BONUFAB_1',
  164. '( VVEI_VALBONU_1 + VVEI_VALBON2_1 + VVEI_VALBON3_1 )');
  165. raise notice 'Formula 2 % ', s_formres;
  166. s_formres := replace(s_formres, 'VACM_VALREVI_1', 'VCFG_VALREVI_1');
  167. raise notice 'Formula 3 % ', s_formres;
  168. s_formres := replace(s_formres, 'VACM_VALFRET_1', 'VCFG_PLATAFO_1');
  169. raise notice 'Formula 4 % ', s_formres;
  170. s_formres := replace(s_formres, 'VACM_PARTIDN_1', 'VCFG_PARTIDN_1');
  171. raise notice 'Formula 5 % ', s_formres;
  172. s_formres := replace(s_formres,
  173. 'VACM_VALCOMI_1',
  174. '( ' || REPLACE(cast( P_VALSUGE as varchar(15)), ',', '.') ||
  175. ' * CASE VVEI_TIPOVEI_1 WHEN ''N'' then VCFG_PERCOMI_1 else VCFU_PERCOMI_1 END / 100 )');
  176. raise notice 'Formula 5 % ', s_formres;
  177. s_formres := replace(s_formres, 'VACM_COMILUC_1', coalesce( S_COMILUC, ' ' ));
  178. raise notice 'Formula 6 % ', s_formres;
  179. s_formres := replace(s_formres,
  180. 'VACM_VALICMS_1',
  181. '( ( ' || REPLACE(cast( P_VALSUGE as varchar(15) ), ',', '.') ||
  182. ' * 10 / 100 ) * VCFU_ALIQSAI_1 / 100 )');
  183. raise notice 'Formula 7 % ', s_formres;
  184. s_formres := replace(s_formres,
  185. 'VACM_PISCONF_1',
  186. '( ( ' || REPLACE( cast( P_VALSUGE as varchar(15) ), ',', '.') ||
  187. ' - VVEI_VALAQUI_1 ) * VCFG_PISCONF_1 / 100 )');
  188. raise notice 'Formula 8 % ', s_formres;
  189. s_formres := replace(s_formres,
  190. 'VACM_CUSTADM_1',
  191. '( ' || REPLACE(cast(P_VALSUGE as varchar(15)), ',', '.') ||
  192. ' * CASE VVEI_TIPOVEI_1 WHEN ''N'' then VCFG_CUSTADM_1 else VCFU_CUSTADM_1 END / 100 )');
  193. raise notice 'Formula 9 % ', s_formres;
  194. s_sqlform := 'select to_char( ' || s_formres ||
  195. ', ''999G999G990D00'' )' ||
  196. ' AS VALOR from SGVVEI ' ||
  197. ' left join SGVLOC on VLOC_CODILOC_1 = VVEI_LOCORIG_1' ||
  198. ' left join SGVACM on VACM_CODIVEI_1 = VVEI_CODIVEI_1 and VACM_SITUACA_1 = '' ''' ||
  199. ' left join SGVINT on trim( to_char( VINT_CONTROL_1, ''00000000'' ) ) = VACM_CODIVEI_1' ||
  200. ' left join SGVCFG on VCFG_EMPRESA_1 = VLOC_EMITENT_1' ||
  201. ' where VVEI_CODIVEI_1 = ''' || P_PROPOST || '''';
  202. execute s_sqlform
  203. into s_valor;
  204. end if;
  205. if (cur.vres_campvin_1 = 'VACM-COMILUC-1') then
  206. s_comiluc := REPLACE(s_valor, ',', '.');
  207. end if;
  208. EXCEPTION
  209. WHEN OTHERS THEN
  210. raise notice 'Formula 4 % ', s_formres;
  211. S_VALOR := 'ERRO' || coalesce( s_sqlform, '' );
  212. END;
  213.  
  214. CASE CUR.VRES_CORLINH_1
  215. WHEN 'Branco' THEN
  216. S_BGCOLOR := 'white';
  217. WHEN 'Azul' THEN
  218. S_BGCOLOR := '#3598db';
  219. WHEN 'Verde' THEN
  220. S_BGCOLOR := 'green';
  221. WHEN 'Vermelho' THEN
  222. S_BGCOLOR := 'red';
  223. WHEN 'Amarelo' THEN
  224. S_BGCOLOR := 'yellow';
  225. ELSE
  226. S_BGCOLOR := '';
  227. end case;
  228.  
  229. CASE CUR.Vres_Corfont_1
  230. WHEN 'Branco' THEN
  231. S_FONTCOLOR := 'white';
  232. WHEN 'Azul' THEN
  233. S_FONTCOLOR := '#3598db';
  234. WHEN 'Verde' THEN
  235. S_FONTCOLOR := 'green';
  236. WHEN 'Vermelho' THEN
  237. S_FONTCOLOR := 'red';
  238. WHEN 'Amarelo' THEN
  239. S_FONTCOLOR := 'yellow';
  240. WHEN 'Preto' THEN
  241. S_FONTCOLOR := 'black';
  242. ELSE
  243. S_FONTCOLOR := '';
  244. end case;
  245.  
  246. V_RESULT := V_RESULT || '<tr style="background-color:' || s_bgcolor ||
  247. ';color:' || s_fontcolor || '"><td>' || cur.vres_nrolinh_1 || '</td><td>' || CUR.VRES_DESCRIC_1 ||
  248. '</td><td align="right">' || trim(S_valor) || '</td></tr>';
  249.  
  250. V_JSONR := V_JSONR || CUR.VRES_DESCRIC_1 || '<br>;' || trim(s_Valor) ||
  251. '<br>;';
  252.  
  253. IF (CUR.VRES_CAMPVIN_1 > ' ') THEN
  254. IF (CONTADOR > 0) THEN
  255. V_JSON := V_JSON || ',';
  256. END IF;
  257. CONTADOR := CONTADOR + 1;
  258. V_JSON := V_JSON || '{"' || replace(CUR.VRES_CAMPVIN_1, '-', '_') ||
  259. '":"' || trim(s_valor) || '"}';
  260. END IF;
  261.  
  262. end loop;
  263.  
  264. V_RESULT := V_RESULT || '</table><br/>';
  265.  
  266. IF COALESCE(P_OPERACA, ' ') <> 'R' THEN
  267.  
  268. V_RESULT := V_RESULT ||
  269. '<table width="100%" ><tr><th>Outras vendas</th></tr><tr><th>Cod</th><th>Descricao</th><th>Valor R$</th><th>Pagamento</th></tr>';
  270. for cur in (select *
  271. from SGVOUT o
  272. left join SGVTAB05 T05 on T05.VTAB_CODITAB_05 =
  273. O.VOUT_CODIGOS_1
  274. Where O.VOUT_PROPOST_1 = P_PROPOST) loop
  275. V_RESULT := V_RESULT || '<tr><td>' || CUR.VOUT_CODIGOS_1 || '</td>' ||
  276. '<td>' || cur.vtab_desctab_05 || '</td>' ||
  277. '<td align="right">' ||
  278. to_char(cur.vout_valores_1, '999G999G990D00') || '</td>' ||
  279. '<td>' || cur.vout_formpag_1 || '</td>' || '</tr>';
  280. end loop;
  281. V_RESULT := V_RESULT || '</table><br/>';
  282. C_TOTALACES := 0;
  283. V_RESULT := V_RESULT || '<table width="100%"><tr><th colspam="2">Acessorios</th></tr><tr><tr><th>Codigo</th><th>Descricao</th><th>Valor R$</th></tr>';
  284. for cur in (select * from SGVACE A left join ESTPRO P on P.TPRO_CODPROD_1 = A.VACE_CODPROD_1 Where A.VACE_PROPOST_1 = P_PROPOST) loop
  285. V_RESULT := V_RESULT || '<tr><td>' || CUR.VACE_CODPROD_1 ||
  286. '</td>' || '<td>' || CUR.TPRO_DESCPR1_1 || '</td>' ||
  287. '<td align="right">' ||
  288. to_char(cur.vace_liquido_1, '999G999G990D00') ||
  289. '</td>' || '</tr>';
  290. C_TOTALACES := C_TOTALACES + cur.vace_liquido_1;
  291. end loop;
  292. V_RESULT := V_RESULT ||
  293. '<tr style="background-color:#3F51B5;color:white"><td></td>' ||
  294. '<td>Total de acessorios</td>' || '<td align="right">' ||
  295. to_char(C_TOTALACES, '999G999G990D00') || '</td>' ||
  296. '</tr>';
  297. V_RESULT := V_RESULT || '</table>';
  298. END IF;
  299. V_RESULT := V_RESULT || '</body></html>';
  300.  
  301. IF (COALESCE(P_OPERACA, ' ') = 'R') THEN
  302. return v_jsonr;
  303. ELSE
  304. IF (COALESCE(P_OPERACA, ' ') = 'J') THEN
  305. RETURN '[' || V_JSON || ']';
  306. ELSE
  307. RETURN V_RESULT;
  308. END IF;
  309. END IF;
  310.  
  311. RETURN V_RESULT;
  312. END
  313. $BODY$ LANGUAGE PLPGSQL VOLATILE COST 100;
  314.  
  315.  
  316. ALTER FUNCTION public.f_analise_proposta(CHARACTER varying, CHARACTER varying, double precision) OWNER TO postgres;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement