Feature request: [ 1614574 ] Port sqlj functions to pl/pgsql
Contribution made by Gavin Dunse. To be tested. Thanks Gavin!
This commit is contained in:
parent
e296ef93e1
commit
8ca3887d64
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
*This file is part of Adempiere ERP Bazaar
|
||||
*http://www.adempiere.org
|
||||
*
|
||||
*Copyright (C) 2007 Gavin Dunse
|
||||
*Copyright (C) 1999-2006 ComPiere, inc
|
||||
*
|
||||
*This program is free software; you can redistribute it and/or
|
||||
*modify it under the terms of the GNU General Public License
|
||||
*as published by the Free Software Foundation; either version 2
|
||||
*of the License, or (at your option) any later version.
|
||||
*
|
||||
*This program is distributed in the hope that it will be useful,
|
||||
*but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
*GNU General Public License for more details.
|
||||
*
|
||||
*You should have received a copy of the GNU General Public License
|
||||
*along with this program; if not, write to the Free Software
|
||||
*Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.of
|
||||
*/
|
||||
|
||||
/*
|
||||
* Calculate Payment Discount Amount
|
||||
* - Calculate discountable amount (i.e. with or without tax)
|
||||
* - Calculate and return payment discount
|
||||
*/
|
||||
|
||||
CREATE OR REPLACE FUNCTION invoiceDiscount (
|
||||
IN NUMERIC, -- $1 C_Invoice_ID
|
||||
IN TIMESTAMP WITH TIME ZONE, -- $2 PayDate
|
||||
IN NUMERIC -- $3 C_InvoicePaySchedule_ID
|
||||
) RETURNS NUMERIC AS
|
||||
$$
|
||||
DECLARE
|
||||
v_Amount NUMERIC;
|
||||
v_IsDiscountLineAmt CHAR(1);
|
||||
v_GrandTotal NUMERIC;
|
||||
v_TotalLines NUMERIC;
|
||||
v_C_PaymentTerm_ID NUMERIC;
|
||||
v_DocDate TIMESTAMP WITH TIME ZONE;
|
||||
v_PayDate TIMESTAMP WITH TIME ZONE;
|
||||
v_IsPayScheduleValid CHAR(1);
|
||||
|
||||
BEGIN
|
||||
SELECT CURRENT_DATE INTO v_PayDate;
|
||||
SELECT ci.IsDiscountLineAmt, i.GrandTotal, i.TotalLines, i.C_PaymentTerm_ID, i.DateInvoiced, i.IsPayScheduleValid
|
||||
INTO v_IsDiscountLineAmt, v_GrandTotal, v_TotalLines, v_C_PaymentTerm_ID, v_DocDate, v_IsPayScheduleValid
|
||||
FROM AD_ClientInfo AS ci, C_Invoice AS i
|
||||
WHERE ci.AD_Client_ID=i.AD_Client_ID
|
||||
AND i.C_Invoice_ID=p_C_Invoice_ID;
|
||||
IF FOUND THEN
|
||||
/* What Amount is the Discount Base? */
|
||||
IF (v_IsDiscountLineAmt = 'Y') THEN
|
||||
v_Amount := v_TotalLines;
|
||||
ELSE
|
||||
v_Amount := v_GrandTotal;
|
||||
END IF;
|
||||
|
||||
/* Anything to discount? */
|
||||
IF (v_Amount = 0) THEN
|
||||
RETURN 0;
|
||||
END IF;
|
||||
IF (p_PayDate IS NOT NULL) THEN
|
||||
v_PayDate := p_PayDate;
|
||||
END IF;
|
||||
|
||||
/* Valid Payment Schedule */
|
||||
IF (v_IsPayScheduleValid='Y' AND p_C_InvoicePaySchedule_ID > 0) THEN
|
||||
SELECT COALESCE(MAX(DiscountAmt),0)
|
||||
INTO v_Amount
|
||||
FROM C_InvoicePaySchedule
|
||||
WHERE C_InvoicePaySchedule_ID=p_C_InvoicePaySchedule_ID
|
||||
AND DiscountDate <= v_PayDate;
|
||||
|
||||
RETURN v_Amount;
|
||||
END IF;
|
||||
/* return discount amount */
|
||||
RETURN paymentTermDiscount (v_Amount, 0, v_C_PaymentTerm_ID, v_DocDate, p_PayDate);
|
||||
ELSE
|
||||
RETURN -1;
|
||||
/* RAISE EXCEPTION 'Some error'*/
|
||||
/* RETURN NULL */
|
||||
END IF;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
Loading…
Reference in New Issue