Você está na página 1de 2

-- Function: prc_recgera_titulos(bigint)

-- DROP FUNCTION prc_recgera_titulos(bigint);


CREATE OR REPLACE FUNCTION prc_recgera_titulos(p_titulo bigint)
RETURNS void AS
$BODY$
declare
v_parc record;
itens record;
v_vencimento date;
v_valorParcela numeric;
v_quantParcela integer;
v_diferenca numeric;
v_idItem bigint;
v_contItem integer;
v_parcela integer;
v_codigoItem varchar;
v_tpdoc integer;
v_pedido bigint;
v_cliente bigint;
v_nomecliente varchar;
v_totalpedido numeric;
v_condicao integer;

c_pedido cursor is
select a.numero_pedido, a.numero_cliente, a.nome_cliente, a.total_pedido, a.n
umero_condicao
from pedido a
where a.numero_pedido = p_titulo;
begin
open c_pedido;
fetch c_pedido into v_pedido, v_cliente, v_nomecliente, v_totalpedido, v_cond
icao;
close c_pedido;

select count(*) into v_quantParcela
from dias_condicao
where numero_condicao = v_condicao;
if v_quantParcela = 0 then
Raise exception 'solerror:No existe dias cadastrado para esta condio de paga
mento,deve ser cadastrado mesmo com 0 dias';
end if;

--===================================================================
for itens in
select *
from itens_pedido
where numero_pedido = v_pedido

loop
update veiculo set situacao_veiculo = 'V'
where numero_veiculo = itens.numero_veiculo;
end loop;


--===================================================================
v_valorParcela := v_totalpedido / v_quantParcela;
v_valorParcela := round(v_valorParcela,2);
-- v_diferenca := 0;
v_contItem := 0;
v_parcela := 1;

for v_parc in
select dia
from dias_condicao
where numero_condicao = v_condicao

loop
if v_contItem >26 then --Controla as letras.(n-1A,n-1B...n-1Z - n-2A,n-2B.
..2Z...)
v_contItem :=0; --Isto no caso de mais de 26 parcelas.
v_parcela := v_parcela + 1;
end if;
v_contItem := v_contItem +1;
v_codigoItem:= v_pedido||'-'||v_contItem||'/'||v_quantParcela;
v_vencimento:=(date(current_date) + v_parc.dia); --Verifica se a data na
o cai no feriado, sabadao ou domingo.
v_idItem :=NEXTVAL('parcela_receber_numero_titulo_seq');
Insert into parcela_receber(numero_titulo, codigo_titulo, data_cadastro, d
ata_vencimento, valor_parcela, numero_pedido)
values(v_idItem, v_codigoItem, current_date,
v_vencimento, v_valorParcela,v_pedido );
v_diferenca := v_diferenca + v_valorPArcela;
end loop;
/* if v_diferenca < v_valor_titulo then
v_diferenca := v_valor_titulo - v_diferenca;
update reciterc set nvaloriterc = nvaloriterc+v_diferenca
where nnumerotitrc = p_titulo
and nnumeroiterc = v_idItem;
end if;*/
return;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION prc_recgera_titulos(bigint)
OWNER TO sollutions;

Você também pode gostar