|
-- FUNCTION: adempiere.calculo_comision_cobranza(numeric, numeric, character varying, date, date, integer, integer)
|
|
|
|
-- DROP FUNCTION adempiere.calculo_comision_cobranza(numeric, numeric, character varying, date, date, integer, integer);
|
|
|
|
CREATE OR REPLACE FUNCTION adempiere.calculo_comision_cobranza(
|
|
organizacion numeric,
|
|
oficial numeric,
|
|
tipo character varying,
|
|
fechadesde date,
|
|
fechahasta date,
|
|
diadesde integer,
|
|
diahasta integer)
|
|
RETURNS double precision
|
|
LANGUAGE 'plpgsql'
|
|
|
|
COST 100
|
|
VOLATILE
|
|
|
|
AS $BODY$
|
|
declare
|
|
valor float;
|
|
begin
|
|
if tipo='XV' then
|
|
select (
|
|
select
|
|
sum(pys.dueamt) as valor
|
|
from Tb_ProjectPaySchedule pys
|
|
inner join C_Project cp on cp.C_Project_id=pys.C_Project_id
|
|
INNER join tb_estadoContrato tbec on tbec.tb_estadocontrato_id = cp.tb_estadocontrato_id
|
|
left join C_ProjectType type on type.C_ProjectType_ID=cp.C_ProjectType_ID and type.Name='CONTRATO_INMOBILIARIO'
|
|
left join ad_user ca on ca.ad_user_ID=cp.CarteraRep_ID
|
|
|
|
where cp.ad_org_id=organizacion
|
|
AND tbec.IsValid='Y' AND tbec.IsActive='Y' AND cp.IsActive='Y'
|
|
AND CASE WHEN 'Y'='Y' THEN tbec.esVenta='Y' ELSE (tbec.esVenta='N' OR tbec.esVenta='Y') END
|
|
AND pys.paymentType ='CE' AND pys.isActive='Y'
|
|
AND cp.IsInDispute='N'
|
|
AND cp.tipoFinanciamiento IN('DIR','CON','HIP')
|
|
AND pys.DueDate::date>=fechaDesde and pys.DueDate::date<=fechaHasta
|
|
AND cp.CarteraRep_ID=oficial
|
|
AND pys.isActive='Y'
|
|
) into valor;
|
|
end if;
|
|
|
|
if tipo='XVC' THEN
|
|
select (
|
|
|
|
SELECT sum(val.valorConCargo)+sum(val.valor) as valor
|
|
FROM(
|
|
select sum(k.payamt) as valor,
|
|
|
|
/*(coalesce((select sum(k.payamt)
|
|
from Tb_ProjectPaySchedule pp
|
|
left join Tb_ProjectPayScheduleLine k on k.Tb_ProjectPaySchedule_id=pp.Tb_ProjectPaySchedule_id
|
|
left join tb_allocationpayschedule al_pys on al_pys.tb_allocationpayschedule_id=k.tb_allocationpayschedule_id
|
|
where
|
|
k.Tb_ProjectPaySchedule_id=pp.Tb_ProjectPaySchedule_id
|
|
and al_pys.docstatus IN ('CO', 'CL')
|
|
and pp.isActive='Y'
|
|
and k.c_payment_ID is null
|
|
and k.paymentDate::date>=fechaDesde::date --$P{fechaVencimientoCuota}
|
|
and CASE WHEN pp.DueDate::date + interval '1 day'*5 <= fechaHasta::date THEN k.paymentDate::date<=fechaHasta::date
|
|
ELSE k.paymentDate::date<= (pp.DueDate::date + interval '1 day'*5) END
|
|
AND pp.paymentType ='CE'
|
|
),0)) as valorConCargo*/
|
|
|
|
(coalesce((select sum(k.payamt)
|
|
from Tb_ProjectPaySchedule ppx
|
|
left join Tb_ProjectPayScheduleLine k on k.Tb_ProjectPaySchedule_id=ppx.Tb_ProjectPaySchedule_id
|
|
left join tb_allocationpayschedule al_pys on al_pys.tb_allocationpayschedule_id=k.tb_allocationpayschedule_id
|
|
where
|
|
k.Tb_ProjectPaySchedule_id=ppx.Tb_ProjectPaySchedule_id
|
|
and al_pys.docstatus IN ('CO', 'CL')
|
|
and ppx.isActive='Y'
|
|
and k.c_payment_ID is null
|
|
and k.paymentDate::date>=fechaDesde::date --$P{fechaVencimientoCuota}
|
|
and CASE WHEN ppx.DueDate::date + interval '1 day'*5 <= fechaHasta::date THEN k.paymentDate::date<=fechaHasta::date
|
|
ELSE k.paymentDate::date<= (ppx.DueDate::date + interval '1 day'*5) END
|
|
AND ppx.paymentType ='CE'
|
|
AND ppx.Tb_ProjectPaySchedule_id=pp.Tb_ProjectPaySchedule_id
|
|
),0)) as valorConCargo
|
|
|
|
from Tb_ProjectPaySchedule pp
|
|
left join Tb_ProjectPayScheduleLine k on k.Tb_ProjectPaySchedule_id=pp.Tb_ProjectPaySchedule_id
|
|
left join tb_allocationpayschedule al_pys on al_pys.tb_allocationpayschedule_id=k.tb_allocationpayschedule_id
|
|
inner join c_payment cp on cp.c_payment_ID=k.c_payment_ID
|
|
inner join C_Project cpx on cpx.C_Project_id=pp.C_Project_id
|
|
inner join tb_estadoContrato tbec on tbec.tb_estadocontrato_id = cpx.tb_estadocontrato_id
|
|
left join C_ProjectType type on type.C_ProjectType_ID=cpx.C_ProjectType_ID and type.Name='CONTRATO_INMOBILIARIO'
|
|
where
|
|
cpx.ad_org_id=organizacion
|
|
and al_pys.docstatus IN ('CO', 'CL')
|
|
and pp.isActive='Y'
|
|
and cp.docStatus IN ('CO','CL')
|
|
and k.paymentDate::date>=fechaDesde
|
|
and
|
|
CASE WHEN pp.DueDate::date + interval '1 day'*5<= fechaHasta
|
|
THEN k.paymentDate::date<=fechaHasta
|
|
ELSE k.paymentDate::date<= (pp.DueDate::date + interval '1 day'*5) END
|
|
AND pp.paymentType ='CE'
|
|
AND tbec.IsValid='Y' AND tbec.IsActive='Y' AND cp.IsActive='Y'
|
|
AND CASE WHEN 'Y'='Y' THEN tbec.esVenta='Y' ELSE (tbec.esVenta='N' OR tbec.esVenta='Y') END
|
|
AND pp.DueDate::date>=fechaDesde::date and pp.DueDate::date<=fechaHasta
|
|
AND cpx.CarteraRep_ID=oficial
|
|
AND cpx.IsInDispute='N'
|
|
AND cpx.tipoFinanciamiento IN('DIR','CON','HIP')
|
|
GROUP BY pp.Tb_ProjectPaySchedule_id
|
|
)val
|
|
) into valor;
|
|
end if;
|
|
|
|
|
|
if tipo='V' THEN
|
|
select (
|
|
select
|
|
(cobranza.valorCuotasVencida - COALESCE(cobranza.PagosCuotasVencidas,0)) as SaldoVencido
|
|
FROM (
|
|
select
|
|
sum((select sum(s.dueamt)
|
|
FROM Tb_ProjectPaySchedule s
|
|
where s.c_project_ID=cp.c_project_ID AND s.isActive='Y'
|
|
AND s.paymentType IN ('CE','CI')
|
|
and s.DueDate::date <= fechaDesde - interval '1 day'*diadesde
|
|
and s.DueDate::date >= fechaDesde - interval '1 day'*diahasta
|
|
))
|
|
AS valorCuotasVencida,
|
|
|
|
sum(coalesce((select
|
|
sum(coalesce(k.payamt,0)) as saldo
|
|
FROM Tb_ProjectPaySchedule s
|
|
inner join Tb_ProjectPayScheduleLine k on k.Tb_ProjectPaySchedule_id=s.Tb_ProjectPaySchedule_id and k.IsActive='Y'
|
|
and exists (select 1 from tb_allocationpayschedule alp where alp.tb_allocationpayschedule_id=k.tb_allocationpayschedule_id and alp.docstatus in ('CO', 'CL'))
|
|
and (case when k.c_Payment_ID isnull then 1=1 else exists (select 1 from c_Payment ptbl where ptbl.c_Payment_ID = k.c_Payment_ID and ptbl.docstatus in ('CO', 'CL')) end)
|
|
inner join tb_allocationpayschedule al_pys on al_pys.tb_allocationpayschedule_id=k.tb_allocationpayschedule_id
|
|
left join c_payment cpx on cpx.c_payment_ID=k.c_payment_ID and cpx.docStatus IN ('CO','CL')
|
|
WHERE
|
|
s.C_Project_ID=cp.C_Project_ID
|
|
AND s.paymentType IN ('CE','CI')
|
|
AND s.isActive='Y'
|
|
and s.DueDate::date <= fechaDesde - interval '1 day'*diadesde
|
|
and s.DueDate::date >= fechaDesde - interval '1 day'*diahasta
|
|
and k.paymentDate::date<fechaDesde
|
|
and al_pys.docstatus IN ('CO', 'CL')
|
|
and s.isActive='Y'
|
|
),0)) AS PagosCuotasVencidas
|
|
|
|
FROM C_Project cp
|
|
inner join tb_estadoContrato tbec on tbec.tb_estadocontrato_id = cp.tb_estadocontrato_id
|
|
WHERE cp.ad_org_id=organizacion
|
|
AND tbec.IsValid='Y' AND cp.IsActive='Y' AND tbec.IsActive='Y'
|
|
AND tbec.esVenta='Y'
|
|
AND cp.tipoFinanciamiento IN('DIR','CON','HIP')
|
|
and cp.CarteraRep_ID=oficial
|
|
AND cp.IsInDispute='N'
|
|
) cobranza
|
|
) into valor;
|
|
end if;
|
|
|
|
|
|
if tipo='VC' THEN
|
|
select (
|
|
|
|
select
|
|
sum(coalesce((select
|
|
sum(coalesce(k.payamt,0)) as saldo
|
|
FROM Tb_ProjectPaySchedule s
|
|
inner join Tb_ProjectPayScheduleLine k on k.Tb_ProjectPaySchedule_id=s.Tb_ProjectPaySchedule_id and k.IsActive='Y'
|
|
and exists (select 1 from tb_allocationpayschedule alp where alp.tb_allocationpayschedule_id=k.tb_allocationpayschedule_id and alp.docstatus in ('CO', 'CL'))
|
|
and (case when k.c_Payment_ID isnull then 1=1 else exists (select 1 from c_Payment ptbl where ptbl.c_Payment_ID = k.c_Payment_ID and ptbl.docstatus in ('CO', 'CL')) end)
|
|
inner join tb_allocationpayschedule al_pys on al_pys.tb_allocationpayschedule_id=k.tb_allocationpayschedule_id
|
|
left join c_payment cpx on cpx.c_payment_ID=k.c_payment_ID and cpx.docStatus IN ('CO','CL')
|
|
WHERE
|
|
s.C_Project_ID=cp.C_Project_ID
|
|
AND s.paymentType IN ('CE','CI')
|
|
AND s.isActive='Y'
|
|
and s.DueDate::date <= fechaDesde - interval '1 day'*diadesde
|
|
and s.DueDate::date >= fechaDesde - interval '1 day'*diahasta
|
|
and k.paymentDate::date>=fechaDesde
|
|
and k.paymentDate::date<=fechaHasta
|
|
and al_pys.docstatus IN ('CO', 'CL')
|
|
and s.isActive='Y'
|
|
),0)) AS PagosCuotasVencidas
|
|
|
|
FROM C_Project cp
|
|
inner join tb_estadoContrato tbec on tbec.tb_estadocontrato_id = cp.tb_estadocontrato_id
|
|
WHERE cp.ad_org_id=organizacion
|
|
AND tbec.IsValid='Y' AND cp.IsActive='Y' AND tbec.IsActive='Y'
|
|
AND tbec.esVenta='Y'
|
|
AND cp.tipoFinanciamiento IN('DIR','CON','HIP')
|
|
and cp.CarteraRep_ID=oficial
|
|
AND cp.IsInDispute='N'
|
|
|
|
) into valor;
|
|
end if;
|
|
|
|
|
|
return valor;
|
|
end
|
|
$BODY$;
|
|
|
|
ALTER FUNCTION adempiere.calculo_comision_cobranza(numeric, numeric, character varying, date, date, integer, integer)
|
|
OWNER TO adempiere;
|