Anda di halaman 1dari 5

-- FUNCTION: public.

itens_vendidos_devolvidos(date, date, integer)

-- DROP FUNCTION public.itens_vendidos_devolvidos(date, date, integer);

CREATE OR REPLACE FUNCTION public.itens_vendidos_devolvidos(


date,
date,
integer)
RETURNS SETOF itens_vendidos_devolvidos
LANGUAGE 'plpgsql'

COST 100
VOLATILE
ROWS 1000
AS $BODY$

declare
origem RECORD;
bVerifica bool;
Retorno Itens_Vendidos_devolvidos%ROWTYPE;
bDataVenda boolean = false;
iProduto integer = coalesce(cast(case when
coalesce(get_temp_parametros('produto'), '') = '' then '0' else
get_temp_parametros('produto') end as integer),0);
begin
Select Into bVerifica cast( valor as varchar )='True' from parametros Where
Upper(Descricao) = Upper('calcular_acrescimo_na_comissao');
Select Into bDataVenda dataParcelas from configuracoes limit 1;
bDataVenda := coalesce( bDataVenda, false );
for Origem in
select
'F' as Tipo
, IOS.Codigo
, IOS.Vendedor
, IOS.Ordem
, IOS.Quantidade
, IOS.e_futura
, case IOS.bonificado when true then 0 else
Coalesce(IOS.Preco_unitario,0) end as Preco_unitario
, Coalesce(IOS.Preco_custo,0) as Preco_custo
, Coalesce(IOS.Preco_contabil,0) as Preco_Contabil
, 0 as custo_cancelado
, 0 as Contabil_cancelado
, 0 as custo_devolvido
, 0 as Contabil_devolvido
, II.aliquota_iss as iss
, IOS.Produto
, IOS.Descricao||case IOS.bonificado when true then ' (bonif.)' else ''
end as descricao
, Coalesce(IOS.Comissao,0) as Comissao
, case IOS.bonificado when true then 0 else IOS.Total end as total
, Coalesce(COS.Venda,'P') as Venda
, COS.Cliente
, COS.nCupom
, COS.Data_fechamento as Data
, IP.acrescimo + IP.outras + IP.seguro as acrescimo
, IP.frete as Frete
, IP.desconto as Desconto
, 0 as Cancelado
, 0 as devolucao
, IOS.preco_partida
, ST.valor_icms_st
, IPI.valor_ipi
From cabecalho_ordem_servico COS
Join Itens_Ordem_servico IOS on IOS.Ordem = COS.Ordem And case $3 when 0
then 1=1 else IOS.Vendedor = $3 end
join impostos I on I.item_ordem_servico = IOS.codigo
Join impostos_iss II on II.cd_imposto = I.codigo
join impostos_icms_st ST on ST.cd_imposto = I.codigo
join impostos_ipi IPI on IPI.cd_imposto = I.codigo
join itens_proporcionais IP on IP.cd_imposto = I.codigo
where COS.status <> 'A' and case bDataVenda when false then
COS.data_fechamento else COS.dataordem end between $1 and $2
and case when iProduto = 0 then true else IOS.produto = iProduto end
Union all
select
'C' as Tipo
,IOS.Codigo
,IOS.Vendedor
,IOS.Ordem
,IOS.Quantidade*-1 as Quantidade
,0 as E_Futura
,case IOS.bonificado when true then 0 else
Coalesce(IOS.Preco_unitario,0) end as Preco_unitario
,Coalesce(IOS.Preco_custo,0) as Preco_custo
,0 as Preco_Contabil
,Coalesce(IOS.Preco_Custo,0) as Custo_cancelado
,Coalesce(IOS.Preco_Contabil,0) as Contabil_Cancelado
,0 as Custo_Devolvido
,0 as Contabil_Devolvido
,II.aliquota_iss as iss
,IOS.Produto
,IOS.Descricao||case IOS.bonificado when true then ' (bonif.)' else ''
end as descricao
,Coalesce(IOS.Comissao,0) as Comissao
,case IOS.bonificado when true then 0 else IOS.Total end as total
,Coalesce(COS.Venda,'P') as Venda
,COS.Cliente
,COS.nCupom
,COS.Data_Cancelamento as Data
,Cos.Acrescimo
,0 as Frete
,Cos.Desconto
,case IOS.bonificado when true then 0 else (IOS.Total + IP.acrescimo +
IP.outras + IP.seguro + IP.frete - IP.desconto) end as Cancelado
,0 as devolucao
,IOS.preco_partida
,ST.valor_icms_st / IOS.quantidade * -1 as valor_icms_st
,IPI.valor_ipi / IOS.quantidade * -1 as valor_ipi
From cabecalho_ordem_servico COS
Join Itens_Ordem_servico IOS on IOS.Ordem = COS.Ordem And case $3 when 0
then 1=1 else IOS.Vendedor = $3 end
join impostos I on I.item_ordem_servico = IOS.codigo
Join impostos_iss II on II.cd_imposto = I.codigo
join impostos_icms_st ST on ST.cd_imposto = I.codigo
join impostos_ipi IPI on IPI.cd_imposto = I.codigo
join itens_proporcionais IP on IP.cd_imposto = I.codigo
where COS.data_cancelamento between $1 and $2 and COS.status = 'C'
and case when iProduto = 0 then true else IOS.produto = iProduto end
UNION all
select
'D' as Tipo
,IOS.Codigo
,IOS.Vendedor
,IOS.Ordem
,ID.Quantidade*-1 as Quantidade
,0 as e_futura
,Coalesce(IOS.Preco_unitario,0) as Preco_unitario
,Coalesce(IOS.Preco_custo,0) as Preco_custo
,0 as Preco_Contabil
,0 as Custo_cancelado
,0 as Contabil_Cancelado
,Coalesce(IOS.Preco_Custo,0) as Custo_Devolvido
,Coalesce(IOS.Preco_Contabil,0) as Contabil_Devolvido
,0 as ISS
,IOS.Produto
,IOS.Descricao
,Coalesce(IOS.Comissao,0) as Comissao
,0 as Total
,Coalesce(COS.Venda,'P') as Venda
,COS.Cliente
,COS.nCupom
,CD.Data as Data
,0 as Acrescimo
,0 as Frete
,0 as Desconto
,0 as Cancelado
,ID.Quantidade * ID.Valor as Devolucao
,IOS.preco_partida
,cast( ST.valor_icms_st / IOS.quantidade * ID.quantidade * -1 as
numeric(30,2)) as valor_icms_st
,cast(IPI.valor_ipi / IOS.quantidade * ID.quantidade * -1 as
numeric(30,2)) as valor_ipi
from cabecalho_devolucao CD
join itens_devolucao ID on ID.cd_devolucao = CD.pedido and CD.status = 'F'
and CD.data between $1 and $2
join impostos I on I.item_devolucao = ID.codigo
join impostos_icms_st ST on ST.cd_imposto = I.codigo
join impostos_ipi IPI on IPI.cd_imposto = I.codigo
join itens_ordem_servico IOS on IOS.Codigo = ID.Produto And case $3 when 0
then 1=1 else IOS.Vendedor = $3 end
join Cabecalho_ordem_servico COS on COS.ordem = IOS.Ordem
and case when iProduto = 0 then true else ID.cd_produto = iProduto
end
Loop
If Origem.Tipo = 'C' Then
Retorno.Valor_comissao := (( ( Origem.Total - Origem.Desconto +
Case when bVerifica = True Then +
Origem.Acrescimo else + 0 end ) * Origem.Comissao) / 100 ) * -1;
Origem.Desconto := 0;
Origem.Acrescimo := 0;
Origem.Total := 0;
Origem.Preco_unitario := 0;
Elsif Origem.Tipo = 'D' Then
Retorno.Valor_comissao := (( Origem.Devolucao * Origem.Comissao) / 100
) * -1;
Elsif Origem.Tipo = 'F' Then
Retorno.Valor_comissao := (( ( Origem.Total - Origem.Desconto +
Case when bVerifica = True Then +
Origem.Acrescimo else + 0 end ) * Origem.Comissao) / 100 );
end if;
Retorno.Ordem := Origem.Ordem;
Retorno.Codigo := Origem.Codigo;
Retorno.Data := Origem.Data;
Retorno.vendedor := Origem.Vendedor;
Retorno.Cliente := Origem.cliente;
Retorno.nCupom := Origem.nCupom;
Retorno.Produto := Origem.Produto;
Retorno.Descricao := Origem.Descricao;
Retorno.Preco_custo := Origem.Preco_Custo;
Retorno.Preco_Venda := Origem.Preco_unitario;
Retorno.Custo_contabil := Origem.Preco_Contabil;
Retorno.custo_cancelado := Origem.custo_cancelado;
Retorno.contabil_cancelado := Origem.contabil_cancelado;
Retorno.custo_devolvido := Origem.custo_devolvido;
Retorno.contabil_devolvido := Origem.contabil_devolvido;
Retorno.Quantidade := Origem.Quantidade;
Retorno.E_futura := Origem.E_futura;
Retorno.Total_devolvido := Origem.Devolucao;
Retorno.Total_cancelado := Origem.Cancelado;
Retorno.Perc_comissao := Origem.Comissao;
Retorno.Total_Item := Origem.Total;
Retorno.Frete := Origem.Frete;
Retorno.Acrescimo := Origem.Acrescimo;
Retorno.Desconto := Origem.Desconto;
Retorno.iss := Origem.iss;
Retorno.venda := Origem.Venda;
Retorno.Status := Origem.Tipo;
Retorno.preco_partida := Origem.preco_partida;
Retorno.valor_icms_st := Origem.valor_icms_st;
Retorno.valor_ipi := Origem.valor_ipi;
Return Next Retorno;
End Loop;
delete from configuracoes;
Return;
end;
$BODY$;

ALTER FUNCTION public.itens_vendidos_devolvidos(date, date, integer)


OWNER TO postgres;

Select IV.Ordem
,IV.data
,IV.cliente
,C.nome
,IV.produto
,IV.descricao
,IV.quantidade
,IV.Preco_Venda
,round(II.valor_icms / IV.quantidade,2) as icms
,round(PC.valor_pis / IV.quantidade,2) as pis
,round(PC.valor_cofins / IV.quantidade,2) as cofins
,IV.acrescimo
,IV.frete
,IV.desconto
,IV.Preco_custo
,'V' as tipo
,IV.Total_Item
+ IV.acrescimo
+ IV.frete
- IV.desconto
as total_venda
,IV.Total_Item - round(II.valor_icms / IV.quantidade,2)
- round(PC.valor_pis / IV.quantidade,2)
- round(PC.valor_cofins / IV.quantidade,2)
+ IV.acrescimo
+ IV.frete
- IV.desconto
as total_sem_impostos
,IV.quantidade * IV.Preco_custo as Total_custo
from itens_vendidos_devolvidos('2018-06-01','2018-06-30',0) IV
Join Impostos I on I.item_ordem_servico = IV.codigo
Join impostos_icms II on II.cd_imposto = I.codigo
Join impostos_pis_cofins PC on PC.cd_imposto = I.codigo
Join Clientes C on C.codigo = IV.cliente
where IV.status <> 'D'

Anda mungkin juga menyukai