CREATE OR REPLACE FUNCTION public.fnc_prc_calcula_promocao( var_filial integer, var_filial_pro integer, var_produto integer, var_tabela_preco integer, var_quantidade numeric) RETURNS numeric LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ DECLARE var_fator_promo numeric; var_indice_promo numeric; row_data prc_promocao_prod_qtd%ROWTYPE; BEGIN SELECT fator_promocao INTO var_fator_promo FROM prc_promocao_prod_qtd WHERE filial = var_filial AND tabela = var_tabela_preco AND filial_pro = var_filial_pro AND produto = var_produto AND data_inicial <= current_date AND data_final >= current_date AND quantidade_ate <= var_quantidade ORDER BY quantidade_ate LIMIT 1; IF var_fator_promo IS NULL THEN var_indice_promo = 1; ELSE var_indice_promo = (1-(var_fator_promo/100)); END IF; RETURN var_indice_promo; END; $BODY$; ALTER FUNCTION public.fnc_prc_calcula_promocao(integer, integer, integer, integer, numeric) OWNER TO postgres; -- FUNCTION: public.fnc_busca_preco_impressao_orcamento(integer, integer, integer, text) -- DROP FUNCTION public.fnc_busca_preco_impressao_orcamento(integer, integer, integer, text); CREATE OR REPLACE FUNCTION public.fnc_busca_preco_impressao_orcamento( var_filial integer, var_sequencia_vnd integer, var_orcamento integer, var_tipo_b_l text) RETURNS numeric LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ DECLARE var_prc_venda numeric; BEGIN SELECT CASE WHEN COALESCE(prc_produto_preco_combinado.aplica_indice,'S') = 'N' AND vnd_orcamento_item.desconto = 'S' THEN vnd_orcamento_item.vlr_unitario ELSE CASE WHEN COALESCE(prc_produto_preco_combinado.aplica_indice,'S') = 'S' AND vnd_orcamento_item.desconto = 'S' THEN CASE WHEN var_tipo_b_l = 'P' THEN vnd_orcamento_item.vlr_unitario ELSE vnd_orcamento_item.vlr_unitario * 0.90 END ELSE CASE WHEN var_tipo_b_l = 'P' THEN ROUND((prc_tabela_preco.preco_venda * fnc_prc_calcula_promocao(vnd_orcamento_item.filial_orc, vnd_orcamento_item.filial_pro, vnd_orcamento_item.produto, prc_tabela_preco.tabela, vnd_orcamento_item.quantidade)),(SELECT decimais_vlr_venda FROM par_faturamento WHERE filial_par = vnd_orcamento_item.filial_orc)) ELSE ROUND((prc_tabela_preco.preco_venda * fnc_prc_calcula_promocao(vnd_orcamento_item.filial_orc, vnd_orcamento_item.filial_pro, vnd_orcamento_item.produto, prc_tabela_preco.tabela, vnd_orcamento_item.quantidade)) * 0.90,(SELECT decimais_vlr_venda FROM par_faturamento WHERE filial_par = vnd_orcamento_item.filial_orc)) END END END AS preco INTO var_prc_venda FROM vnd_orcamento_item JOIN prc_tabela_preco ON prc_tabela_preco.filial_pro = vnd_orcamento_item.filial_pro AND prc_tabela_preco.produto = vnd_orcamento_item.produto LEFT JOIN prc_produto_preco_combinado ON prc_produto_preco_combinado.filial_pro = vnd_orcamento_item.filial_pro AND prc_produto_preco_combinado.codigo = vnd_orcamento_item.produto WHERE vnd_orcamento_item.filial_orc = var_filial AND vnd_orcamento_item.orcamento = var_orcamento AND vnd_orcamento_item.sequencia = var_sequencia_vnd; RETURN var_prc_venda; END; $BODY$; ALTER FUNCTION public.fnc_busca_preco_impressao_orcamento(integer, integer, integer, text) OWNER TO postgres;