72 lines
No EOL
1.2 KiB
PL/PgSQL
72 lines
No EOL
1.2 KiB
PL/PgSQL
begin;
|
|
-- Function: proc_check_balance()
|
|
|
|
-- DROP FUNCTION proc_check_balance();
|
|
|
|
CREATE OR REPLACE FUNCTION proc_check_balance()
|
|
RETURNS "trigger" AS
|
|
$BODY$
|
|
declare
|
|
diff numeric;
|
|
tt integer;
|
|
begin
|
|
if TG_OP = 'INSERT' then
|
|
tt=NEW.jr_grpt_id;
|
|
diff:=check_balance(tt);
|
|
if diff != 0 then
|
|
raise exception 'Rounded error %',diff ;
|
|
end if;
|
|
return NEW;
|
|
end if;
|
|
end;
|
|
$BODY$
|
|
LANGUAGE plpgsql VOLATILE;
|
|
|
|
|
|
-- Function: check_balance(p_grpt text)
|
|
|
|
DROP FUNCTION check_balance(text);
|
|
|
|
CREATE OR REPLACE FUNCTION check_balance(p_grpt integer)
|
|
RETURNS "numeric" AS
|
|
$BODY$
|
|
declare
|
|
amount_jrnx_debit numeric;
|
|
amount_jrnx_credit numeric;
|
|
amount_jrn numeric;
|
|
begin
|
|
select sum (j_montant) into amount_jrnx_credit
|
|
from jrnx
|
|
where
|
|
j_grpt=p_grpt
|
|
and j_debit=false;
|
|
|
|
select sum (j_montant) into amount_jrnx_debit
|
|
from jrnx
|
|
where
|
|
j_grpt=p_grpt
|
|
and j_debit=true;
|
|
|
|
select jr_montant into amount_jrn
|
|
from jrn
|
|
where
|
|
jr_grpt_id=p_grpt;
|
|
|
|
if ( amount_jrnx_debit != amount_jrnx_credit )
|
|
then
|
|
return abs(amount_jrnx_debit-amount_jrnx_credit);
|
|
end if;
|
|
if ( amount_jrn != amount_jrnx_credit)
|
|
then
|
|
return -1*abs(amount_jrn - amount_jrnx_credit);
|
|
end if;
|
|
return 0;
|
|
end;
|
|
$BODY$
|
|
LANGUAGE plpgsql VOLATILE;
|
|
|
|
|
|
|
|
|
|
update version set val=11;
|
|
commit; |