From: Galen Charlton Date: Tue, 31 Mar 2015 21:23:22 +0000 (+0000) Subject: LP#1442254: adjust how sending library set for messages created from notes X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=7971f16f026c69f40d9aafc515bf1ccf2d58ed3f;p=evergreen%2Fmasslnc.git LP#1442254: adjust how sending library set for messages created from notes When creating a new user message from a public note, the library of the workstation of the staff member who created the original note is used if available from get_audit_info(). If it's not available (e.g., if notes are added using direct SQL, the home library of the note creator is used instead). Signed-off-by: Galen Charlton Signed-off-by: Kathy Lussier Signed-off-by: Ben Shum --- diff --git a/Open-ILS/src/sql/Pg/005.schema.actors.sql b/Open-ILS/src/sql/Pg/005.schema.actors.sql index af27c3a21b..447d5957e3 100644 --- a/Open-ILS/src/sql/Pg/005.schema.actors.sql +++ b/Open-ILS/src/sql/Pg/005.schema.actors.sql @@ -759,6 +759,8 @@ CREATE RULE protect_usr_message_delete AS ); CREATE FUNCTION actor.convert_usr_note_to_message () RETURNS TRIGGER AS $$ +DECLARE + sending_ou INTEGER; BEGIN IF NEW.pub THEN IF TG_OP = 'UPDATE' THEN @@ -767,8 +769,16 @@ BEGIN END IF; END IF; + SELECT INTO sending_ou aw.owning_lib + FROM auditor.get_audit_info() agai + JOIN actor.workstation aw ON (aw.id = agai.eg_ws); + IF sending_ou IS NULL THEN + SELECT INTO sending_ou home_ou + FROM actor.usr + WHERE id = NEW.creator; + END IF; INSERT INTO actor.usr_message (usr, title, message, sending_lib) - VALUES (NEW.usr, NEW.title, NEW.value, (SELECT home_ou FROM actor.usr WHERE id = NEW.creator)); + VALUES (NEW.usr, NEW.title, NEW.value, sending_ou); END IF; RETURN NEW; diff --git a/Open-ILS/src/sql/Pg/upgrade/ZZZZ.schema.use-ws-lib-for-messages.sql b/Open-ILS/src/sql/Pg/upgrade/ZZZZ.schema.use-ws-lib-for-messages.sql new file mode 100644 index 0000000000..0163d0b09f --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/ZZZZ.schema.use-ws-lib-for-messages.sql @@ -0,0 +1,30 @@ +BEGIN; + +CREATE OR REPLACE FUNCTION actor.convert_usr_note_to_message () RETURNS TRIGGER AS $$ +DECLARE + sending_ou INTEGER; +BEGIN + IF NEW.pub THEN + IF TG_OP = 'UPDATE' THEN + IF OLD.pub = TRUE THEN + RETURN NEW; + END IF; + END IF; + + SELECT INTO sending_ou aw.owning_lib + FROM auditor.get_audit_info() agai + JOIN actor.workstation aw ON (aw.id = agai.eg_ws); + IF sending_ou IS NULL THEN + SELECT INTO sending_ou home_ou + FROM actor.usr + WHERE id = NEW.creator; + END IF; + INSERT INTO actor.usr_message (usr, title, message, sending_lib) + VALUES (NEW.usr, NEW.title, NEW.value, sending_ou); + END IF; + + RETURN NEW; +END; +$$ LANGUAGE PLPGSQL; + +COMMIT;