64 lines
2.4 KiB
MySQL
64 lines
2.4 KiB
MySQL
|
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;
|
||
|
/
|