altocompta/sql/account-update.sql
2011-10-22 20:17:50 +00:00

55 lines
1.6 KiB
PL/PgSQL

-- Function: comptaproc.account_update(integer, account_type)
-- DROP FUNCTION comptaproc.account_update(integer, account_type);
CREATE OR REPLACE FUNCTION comptaproc.account_update(p_f_id integer, p_account account_type)
RETURNS integer AS
$BODY$
declare
nMax fiche.f_id%type;
nCount integer;
nParent tmp_pcmn.pcm_val_parent%type;
sName varchar;
first text;
second text;
begin
if length(trim(p_account)) != 0 then
-- 2 accounts in card separated by comma
if position (',' in p_account) = 0 then
select count(*) into nCount from tmp_pcmn where pcm_val=p_account;
if nCount = 0 then
select ad_value into sName from
fiche_detail
where
ad_id=1 and f_id=p_f_id;
nParent:=account_parent(p_account);
insert into tmp_pcmn(pcm_val,pcm_lib,pcm_val_parent) values (p_account,sName,nParent);
end if;
else
raise info 'presence of a comma';
-- there is 2 accounts separated by a comma
first := split_part(p_account,',',1);
second := split_part(p_account,',',2);
-- check there is no other coma
raise info 'first value % second value %', first, second;
if position (',' in first) != 0 or position (',' in second) != 0 then
raise exception 'Too many comas, invalid account';
end if;
-- check that both account are in PCMN
end if;
else
-- account is null
update fiche_detail set ad_value=null where f_id=p_f_id and ad_id=5 ;
end if;
update fiche_detail set ad_value=p_account where f_id=p_f_id and ad_id=5 ;
return 0;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION comptaproc.account_update(integer, account_type) OWNER TO dany;