core-jgi/db/oracle/functions/Acct_Balance.sql

64 lines
2.4 KiB
MySQL
Raw Normal View History

CREATE OR REPLACE FUNCTION acctBalance
(
p_Account_ID IN NUMBER,
p_AmtDr IN NUMBER,
p_AmtCr IN NUMBER
)
RETURN NUMBER
/*************************************************************************
* The contents of this file are subject to the Compiere License. You may
* obtain a copy of the License at http://www.compiere.org/license.html
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the License for details. Code: Compiere ERP+CRM
* Copyright (C) 1999-2004 Jorg Janke, ComPiere, Inc. All Rights Reserved.
*************************************************************************
* $Id: Acct_Balance.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
***
* Title: Aclculate Balance based on Account Sign + Type
* Description:
* If an account is specified and found
* - If the account sign is Natural it sets it based on Account Type
* Returns Credit or Debit Balance
* Test:
SELECT Acct_Balance (0,11,22) FROM DUAL
SELECT AccountType, AccountSign,
Acct_Balance(C_ElementValue_ID, 20, 10) "DR Balance",
Acct_Balance(C_ElementValue_ID, 10, 20) "CR Balance"
FROM C_ElementValue
WHERE AccountSign<>'N'
ORDER BY AccountSign
************************************************************************/
AS
v_balance NUMBER;
v_AccountType C_ElementValue.AccountType%TYPE;
v_AccountSign C_ElementValue.AccountSign%TYPE;
BEGIN
v_balance := p_AmtDr - p_AmtCr;
--
IF (p_Account_ID > 0) THEN
SELECT AccountType, AccountSign
INTO v_AccountType, v_AccountSign
FROM C_ElementValue
WHERE C_ElementValue_ID=p_Account_ID;
-- DBMS_OUTPUT.PUT_LINE('Type=' || v_AccountType || ' - Sign=' || v_AccountSign);
-- Natural Account Sign
IF (v_AccountSign='N') THEN
IF (v_AccountType IN ('A','E')) THEN
v_AccountSign := 'D';
ELSE
v_AccountSign := 'C';
END IF;
-- DBMS_OUTPUT.PUT_LINE('Type=' || v_AccountType || ' - Sign=' || v_AccountSign);
END IF;
-- Debit Balance
IF (v_AccountSign = 'C') THEN
v_balance := p_AmtCr - p_AmtDr;
END IF;
END IF;
--
RETURN v_balance;
EXCEPTION WHEN OTHERS THEN
-- In case Acct not found
RETURN p_AmtDr - p_AmtCr;
END acctBalance;
/