-- FUNCTION: public.fnc_calcula_peso_ferragem(integer, integer, integer) -- DROP FUNCTION IF EXISTS public.fnc_calcula_peso_ferragem(integer, integer, integer); CREATE OR REPLACE FUNCTION public.fnc_calcula_peso_ferragem( var_filial integer, var_orcamento integer, var_seq_item integer) RETURNS numeric LANGUAGE 'plpgsql' COST 100 VOLATILE PARALLEL UNSAFE AS $BODY$ DECLARE var_peso numeric; BEGIN SELECT (SUM(valor)) AS valor INTO var_peso FROM ( ( SELECT COALESCE(CASE WHEN vnd_orcamento_item_especificacao.largura = 0 AND vnd_orcamento_item_especificacao.diametro_estribo = 0 THEN (TRUNC((((((vnd_orcamento_item_especificacao.comprimento + vnd_orcamento_item_especificacao.altura) * 2) + vnd_orcamento_item_especificacao.acrescimo) * pro_especificacao_vergalhao.fator_peso) * vnd_orcamento_item_especificacao_detalhe.quantidade),6)) ELSE (TRUNC((((vnd_orcamento_item_especificacao.comprimento + vnd_orcamento_item_especificacao.acrescimo) * pro_especificacao_vergalhao.fator_peso) * vnd_orcamento_item_especificacao_detalhe.quantidade),6)) END ,0.000000) AS valor 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 pro_especificacao_vergalhao ON pro_especificacao_vergalhao.codigo = vnd_orcamento_item_especificacao_detalhe.cod_especificacao WHERE vnd_orcamento_item.filial_orc = var_filial AND vnd_orcamento_item.orcamento = var_orcamento AND vnd_orcamento_item.sequencia = var_seq_item AND pro_especificacao_vergalhao.produto_ref IS NOT NULL ) UNION ALL ( SELECT COALESCE(CASE WHEN vnd_orcamento_item_especificacao.diametro_estribo = 0 THEN (TRUNC((((vnd_orcamento_item_especificacao.comprimento / vnd_orcamento_item_especificacao.espacamento_estribo) * ((vnd_orcamento_item_especificacao.largura * 2) + (vnd_orcamento_item_especificacao.altura * 2) + vnd_orcamento_item_especificacao.acrescimo_estribo)) * pro_especificacao_vergalhao.fator_peso),6)) ELSE (TRUNC((((vnd_orcamento_item_especificacao.comprimento / vnd_orcamento_item_especificacao.espacamento_estribo) * ((vnd_orcamento_item_especificacao.diametro_estribo * 3.14159) + vnd_orcamento_item_especificacao.acrescimo_estribo)) * pro_especificacao_vergalhao.fator_peso),6)) END ,0.000000) AS valor 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 pro_especificacao_vergalhao ON pro_especificacao_vergalhao.codigo = vnd_orcamento_item_especificacao.cod_especificacao_estribo WHERE vnd_orcamento_item.filial_orc = var_filial AND vnd_orcamento_item.orcamento = var_orcamento AND vnd_orcamento_item.sequencia = var_seq_item AND pro_especificacao_vergalhao.produto_ref IS NOT NULL ) ) AS tabaux WHERE valor > 0; RETURN var_peso; END; $BODY$; ALTER FUNCTION public.fnc_calcula_peso_ferragem(integer, integer, integer) OWNER TO postgres;