Project

General

Profile

Tareas #4938 » FUNCION_CALCULOCOMISIONCOBRANZA.sql

Armando Chuto, 06/25/2024 12:31 PM

 
-- 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;
(3-3/14)