-- FUNCTION: public.fnc_calcula_preco_ferragem_arame(integer, integer, integer) -- DROP FUNCTION IF EXISTS public.fnc_calcula_preco_ferragem_arame(integer, integer, integer); CREATE OR REPLACE FUNCTION public.fnc_calcula_preco_ferragem_arame( var_filial integer, var_orcamento integer, var_seq_item integer) RETURNS numeric LANGUAGE 'plpgsql' COST 100 VOLATILE PARALLEL UNSAFE AS $BODY$ DECLARE var_preco numeric; BEGIN SELECT SUM(preco) AS preco INTO var_preco FROM ( SELECT ROUND(CASE WHEN pro_grupo_qtde_especificacao.tipo_calculo = 'Q' THEN COALESCE((TRUNC((((TRUNC(((vnd_orcamento_item_especificacao.comprimento / CASE WHEN vnd_orcamento_item_especificacao.espacamento_estribo <= 0 THEN 1 ELSE vnd_orcamento_item_especificacao.espacamento_estribo END)+0.999999),0)) * (vnd_orcamento_item_especificacao_detalhe.quantidade)) * (pro_especificacao_vergalhao.fator_peso * pro_especificacao_vergalhao.comprimento)),6)),0.000000) WHEN pro_grupo_qtde_especificacao.tipo_calculo = 'R' THEN COALESCE((TRUNC((((TRUNC(((vnd_orcamento_item_especificacao.comprimento / CASE WHEN vnd_orcamento_item_especificacao.espacamento_estribo <= 0 THEN 1 ELSE vnd_orcamento_item_especificacao.espacamento_estribo END)+0.999999),0)) * (vnd_orcamento_item_especificacao_detalhe.quantidade)) * (pro_especificacao_vergalhao.fator_peso * pro_especificacao_vergalhao.comprimento)),6)),0.000000) WHEN pro_grupo_qtde_especificacao.tipo_calculo = 'T' THEN COALESCE((TRUNC((((TRUNC(((vnd_orcamento_item_especificacao.comprimento / CASE WHEN vnd_orcamento_item_especificacao.espacamento_estribo <= 0 THEN 1 ELSE vnd_orcamento_item_especificacao.espacamento_estribo END)+0.999999),0)) * (vnd_orcamento_item_especificacao_detalhe.quantidade)) * (pro_especificacao_vergalhao.fator_peso * pro_especificacao_vergalhao.comprimento)),6)),0.000000) WHEN pro_grupo_qtde_especificacao.tipo_calculo = 'S' THEN COALESCE((TRUNC(( ((SELECT SUM(det1.quantidade) FROM vnd_orcamento_item_especificacao_detalhe AS det1 WHERE det1.filial = vnd_orcamento_item.filial_orc AND det1.orcamento = vnd_orcamento_item.orcamento AND det1.sequencia_item = vnd_orcamento_item.sequencia AND det1.sequencia_dimensao = 1 ) * (SELECT SUM(det2.quantidade) FROM vnd_orcamento_item_especificacao_detalhe AS det2 WHERE det2.filial = vnd_orcamento_item.filial_orc AND det2.orcamento = vnd_orcamento_item.orcamento AND det2.sequencia_item = vnd_orcamento_item.sequencia AND det2.sequencia_dimensao = 2 )) * (pro_especificacao_vergalhao.fator_peso * pro_especificacao_vergalhao.comprimento)),6)),0.000000) WHEN pro_grupo_qtde_especificacao.tipo_calculo = 'N' THEN 0.000000 END * vnd_orcamento_item_especificacao.preco_produto_associado ,6) AS preco FROM vnd_orcamento_item LEFT JOIN vnd_orcamento_item_especificacao ON vnd_orcamento_item_especificacao.filial = vnd_orcamento_item.filial_orc AND vnd_orcamento_item_especificacao.orcamento = vnd_orcamento_item.orcamento AND vnd_orcamento_item_especificacao.sequencia_item = vnd_orcamento_item.sequencia LEFT JOIN vnd_orcamento_item_especificacao_detalhe ON vnd_orcamento_item_especificacao_detalhe.filial = vnd_orcamento_item.filial_orc AND vnd_orcamento_item_especificacao_detalhe.orcamento = vnd_orcamento_item.orcamento AND vnd_orcamento_item_especificacao_detalhe.sequencia_item = vnd_orcamento_item.sequencia AND vnd_orcamento_item_especificacao_detalhe.sequencia_dimensao = vnd_orcamento_item_especificacao.sequencia_dimensao LEFT JOIN par_producao ON par_producao.filial = vnd_orcamento_item.filial_orc LEFT JOIN pro_especificacao_vergalhao ON pro_especificacao_vergalhao.produto_ref = par_producao.produto_associado_producao JOIN pro_produto ON pro_produto.filial_pro = vnd_orcamento_item_especificacao.filial_pro AND pro_produto.codigo = vnd_orcamento_item_especificacao.produto JOIN pro_grupo_qtde_especificacao ON pro_grupo_qtde_especificacao.filial = pro_produto.filial_pro AND pro_grupo_qtde_especificacao.grupo = pro_produto.grupo WHERE vnd_orcamento_item.filial_orc = var_filial AND vnd_orcamento_item.orcamento = var_orcamento AND vnd_orcamento_item.sequencia = var_seq_item AND par_producao.produto_associado_producao IS NOT NULL AND (vnd_orcamento_item_especificacao_detalhe.sequencia = 1 OR pro_grupo_qtde_especificacao.tipo_calculo != 'S') ) AS tabaux WHERE preco > 0; RETURN var_preco; END; $BODY$; ALTER FUNCTION public.fnc_calcula_preco_ferragem_arame(integer, integer, integer) OWNER TO postgres;