Add the upgrade SQL script

This commit is contained in:
Dany De Bontridder 2010-11-28 16:06:56 +00:00
parent a3685d1e56
commit c0260a45fb

View file

@ -1,149 +0,0 @@
CREATE OR REPLACE FUNCTION comptaproc.jrnx_ins()
RETURNS trigger AS
$BODY$
declare
n_fid bigint;
begin
NEW.j_tech_per := comptaproc.find_periode(to_char(NEW.j_date,'DD.MM.YYYY'));
if NEW.j_tech_per = -1 then
raise exception 'Période invalide';
end if;
if NEW.j_qcode is NULL then
return NEW;
end if;
NEW.j_qcode=trim(upper(NEW.j_qcode));
if length (NEW.j_qcode) = 0 then
NEW.j_qcode=NULL;
else
select f_id into n_fid from fiche_detail where ad_id=23 and ad_value=NEW.j_qcode;
if NOT FOUND then
raise exception 'La fiche dont le quick code est % n''existe pas',NEW.j_qcode;
end if;
end if;
NEW.f_id:=n_fid;
return NEW;
end;
$BODY$
LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION comptaproc.jrn_check_periode()
RETURNS trigger AS
$BODY$
declare
bClosed bool;
str_status text;
ljr_tech_per jrn.jr_tech_per%TYPE;
ljr_def_id jrn.jr_def_id%TYPE;
lreturn jrn%ROWTYPE;
begin
if TG_OP='UPDATE' then
ljr_tech_per :=OLD.jr_tech_per ;
NEW.jr_tech_per := comptaproc.find_periode(to_char(NEW.jr_date,'DD.MM.YYYY'));
ljr_def_id :=OLD.jr_def_id;
lreturn :=NEW;
if NEW.jr_date = OLD.jr_date then
return NEW;
end if;
if comptaproc.is_closed(NEW.jr_tech_per,NEW.jr_def_id) = true then
raise exception 'Periode fermee';
end if;
end if;
if TG_OP='INSERT' then
NEW.jr_tech_per := comptaproc.find_periode(to_char(NEW.jr_date,'DD.MM.YYYY'));
ljr_tech_per :=NEW.jr_tech_per ;
ljr_def_id :=NEW.jr_def_id;
lreturn :=NEW;
end if;
if TG_OP='DELETE' then
ljr_tech_per :=OLD.jr_tech_per;
ljr_def_id :=OLD.jr_def_id;
lreturn :=OLD;
end if;
if comptaproc.is_closed (ljr_def_id,ljr_def_id) = true then
raise exception 'Periode fermee';
end if;
return lreturn;
end;$BODY$
LANGUAGE 'plpgsql';
create or replace function comptaproc.is_closed (p_periode jrn.jr_tech_per%TYPE,p_jrn_def_id jrn.jr_def_id%TYPE)
returns bool as
$BODY$
declare
bClosed bool;
str_status text;
begin
-- return true is the periode is closed otherwise false
select p_closed into bClosed from parm_periode
where p_id=p_periode;
if bClosed = true then
return bClosed;
end if;
select status into str_status from jrn_periode
where p_id =p_periode and jrn_def_id=p_jrn_def_id;
if str_status <> 'OP' then
return bClosed;
end if;
return false;
end;
$BODY$
LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION comptaproc.find_periode(p_date text)
RETURNS integer AS
$BODY$
declare n_p_id int4;
begin
select p_id into n_p_id
from parm_periode
where
p_start <= to_date(p_date,'DD.MM.YYYY')
and
p_end >= to_date(p_date,'DD.MM.YYYY');
if NOT FOUND then
return -1;
end if;
return n_p_id;
end;$BODY$
LANGUAGE 'plpgsql';
DROP TRIGGER t_check_jrn ON jrn;
CREATE TRIGGER t_check_jrn
BEFORE INSERT OR DELETE OR update
ON jrn
FOR EACH ROW
EXECUTE PROCEDURE comptaproc.jrn_check_periode();
CREATE TABLE jrn_note
(
n_id integer NOT NULL DEFAULT nextval('jrnx_note_n_id_seq'::regclass),
n_text text,
jr_id bigint NOT NULL,
CONSTRAINT jrnx_note_pkey PRIMARY KEY (n_id),
CONSTRAINT jrnx_note_j_id_fkey FOREIGN KEY (jr_id)
REFERENCES jrn (jr_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
;
COMMENT ON TABLE jrn_note IS 'Note about operation';