From a3685d1e566861dd94051a5d6e42fff51a5597cd Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Sun, 28 Nov 2010 16:06:47 +0000 Subject: [PATCH] Add the upgrade SQL script --- html/admin/sql/patch/upgrade91.sql | 166 +++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 html/admin/sql/patch/upgrade91.sql diff --git a/html/admin/sql/patch/upgrade91.sql b/html/admin/sql/patch/upgrade91.sql new file mode 100644 index 000000000..b577a3c56 --- /dev/null +++ b/html/admin/sql/patch/upgrade91.sql @@ -0,0 +1,166 @@ +begin; +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 serial, + 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'; +ALTER TABLE forecast ADD COLUMN f_start_date bigint; +ALTER TABLE forecast ADD COLUMN f_end_date bigint; +ALTER TABLE forecast + ADD CONSTRAINT forecast_f_end_date_fkey FOREIGN KEY (f_end_date) + REFERENCES parm_periode (p_id) MATCH SIMPLE + ON UPDATE SET NULL ON DELETE SET NULL; +ALTER TABLE forecast + ADD CONSTRAINT forecast_f_start_date_fkey FOREIGN KEY (f_start_date) + REFERENCES parm_periode (p_id) MATCH SIMPLE + ON UPDATE SET NULL ON DELETE SET NULL; +CREATE INDEX fki_f_start_date + ON forecast + USING btree + (f_start_date); +CREATE INDEX fki_f_end_date + ON forecast + USING btree + (f_end_date); +update version set val=92; + +commit; \ No newline at end of file