49 lines
1.4 KiB
PL/PgSQL
49 lines
1.4 KiB
PL/PgSQL
-- Function: comptaproc.account_compute(integer)
|
|
|
|
-- DROP FUNCTION comptaproc.account_compute(integer);
|
|
|
|
CREATE OR REPLACE FUNCTION comptaproc.account_compute(p_f_id integer)
|
|
RETURNS account_type AS
|
|
$BODY$
|
|
declare
|
|
class_base fiche_def.fd_class_base%type;
|
|
maxcode numeric;
|
|
sResult account_type;
|
|
bAlphanum bool;
|
|
sName text;
|
|
begin
|
|
select fd_class_base into class_base
|
|
from
|
|
fiche_def join fiche using (fd_id)
|
|
where
|
|
f_id=p_f_id;
|
|
raise notice 'account_compute class base %',class_base;
|
|
bAlphanum := account_alphanum();
|
|
if bAlphanum = false then
|
|
select count (pcm_val) into maxcode from tmp_pcmn where pcm_val_parent = class_base;
|
|
if maxcode = 0 then
|
|
maxcode:=class_base::numeric;
|
|
else
|
|
select max (pcm_val) into maxcode from tmp_pcmn where pcm_val_parent = class_base;
|
|
maxcode:=maxcode::numeric;
|
|
end if;
|
|
if maxcode::text = class_base then
|
|
maxcode:=class_base::numeric*1000;
|
|
end if;
|
|
maxcode:=maxcode+1;
|
|
raise notice 'account_compute Max code %',maxcode;
|
|
sResult:=maxcode::account_type;
|
|
else
|
|
-- if alphanum, use name
|
|
select ad_value into sName from fiche_detail where f_id=p_f_id and ad_id=1;
|
|
if sName is null then
|
|
raise exception 'Cannot compute an accounting without the name of the card for %',p_f_id;
|
|
end if;
|
|
sResult := class_base||sName;
|
|
end if;
|
|
return sResult;
|
|
end;
|
|
$BODY$
|
|
LANGUAGE plpgsql VOLATILE
|
|
COST 100;
|
|
ALTER FUNCTION comptaproc.account_compute(integer) OWNER TO dany;
|