-- 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 - 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;