[GIT] Evergreen ILS branch main updated. d58439ece73259085a9f929da7d3529a45ab5837

This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Evergreen ILS". The branch, main has been updated via d58439ece73259085a9f929da7d3529a45ab5837 (commit) via 7c01e2c77ce61025cde0a76e973d63e23c9c3eb3 (commit) from 3bc427ad3132c9ddd67a314c8ee596a9ccd2570f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d58439ece73259085a9f929da7d3529a45ab5837 Author: Jane Sandberg <sandbergja@gmail.com> Date: Thu Jun 19 05:08:28 2025 -0700 LP1752367: stamp upgrade script Signed-off-by: Jane Sandberg <sandbergja@gmail.com> diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 3b9b72b341..eba2c4a1b2 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -92,7 +92,7 @@ CREATE TRIGGER no_overlapping_deps BEFORE INSERT OR UPDATE ON config.db_patch_dependencies FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates'); -INSERT INTO config.upgrade_log (version, applied_to) VALUES ('1472', :eg_version); -- terranm/sandbergja +INSERT INTO config.upgrade_log (version, applied_to) VALUES ('1473', :eg_version); -- smayo/redavis/sandbergja CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor-stat-cat-entry-update.sql b/Open-ILS/src/sql/Pg/upgrade/1473.schema.actor-stat-cat-entry-update.sql similarity index 94% rename from Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor-stat-cat-entry-update.sql rename to Open-ILS/src/sql/Pg/upgrade/1473.schema.actor-stat-cat-entry-update.sql index f64bf465f8..c1ae7108eb 100644 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor-stat-cat-entry-update.sql +++ b/Open-ILS/src/sql/Pg/upgrade/1473.schema.actor-stat-cat-entry-update.sql @@ -1,6 +1,6 @@ BEGIN; --- SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version); +SELECT evergreen.upgrade_deps_block_check('1473', :eg_version); -- Basically the same thing as using cascade update, but the stat_cat_entry isn't a foreign key as it can be freetext CREATE OR REPLACE FUNCTION actor.stat_cat_entry_usr_map_cascade_update() RETURNS TRIGGER AS $$ @@ -38,4 +38,4 @@ CREATE TRIGGER actor_stat_cat_entry_delete_trigger EXECUTE FUNCTION actor.stat_cat_entry_usr_map_cascade_delete(); -COMMIT; \ No newline at end of file +COMMIT; commit 7c01e2c77ce61025cde0a76e973d63e23c9c3eb3 Author: Steven Mayo <smayo@georgialibraries.org> Date: Mon Jun 2 10:14:15 2025 -0400 lp1752367 Can't Edit and Delete Stat Cat Entries Reenables editing and deleting Stat Cat Entries in the web client. Adds a SQL trigger to update or delete actor.stat_cat_entry_usr_map as if the column had cascade update or delete, so long as the column exactly matches the changing actor.stat_cat_entry column. Added a pgtap test for the existence of the triggers and that they do the thing on updating or deleting stat_cat_entries. Release-note: Allow administrators to edit and delete statistical category entries. Signed-off-by: Steven Mayo <smayo@georgialibraries.org> Signed-off-by: Ruth Frasur Davis <redavis4974@gmail.com> Signed-off-by: Jane Sandberg <sandbergja@gmail.com> diff --git a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts index 5c89569e9a..25ddf1457d 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts @@ -158,8 +158,6 @@ const routes: Routes = [{ orgFieldsDefaultingToContextOrg: 'owner', fieldOptions: {owner: {persistKey: 'admin.stat_cat.owner' } }, contextOrgSelectorPersistKey: 'admin.item_stat_cat.main_org_selector', - disableEdit: true, - disableDelete: true, recordLabel: $localize `Statistical Category Entry - Item`, hideClearFilters: true, fieldOrder: 'stat_cat,value,owner'}] @@ -189,8 +187,6 @@ const routes: Routes = [{ orgFieldsDefaultingToContextOrg: 'owner', fieldOptions: {owner: {persistKey: 'admin.stat_cat.owner' } }, contextOrgSelectorPersistKey: 'admin.patron_stat_cat.main_org_selector', - disableEdit: true, - disableDelete: true, recordLabel: $localize `Statistical Category Entry - Patron`, hideClearFilters: true, fieldOrder: 'stat_cat,value,owner'}] diff --git a/Open-ILS/src/sql/Pg/005.schema.actors.sql b/Open-ILS/src/sql/Pg/005.schema.actors.sql index 5e68ae5ef3..a097395649 100644 --- a/Open-ILS/src/sql/Pg/005.schema.actors.sql +++ b/Open-ILS/src/sql/Pg/005.schema.actors.sql @@ -281,6 +281,38 @@ $$; CREATE INDEX actor_stat_cat_entry_usr_idx ON actor.stat_cat_entry_usr_map (target_usr); +-- Basically the same thing as using cascade update, but the stat_cat_entry isn't a foreign key as it can be freetext +CREATE FUNCTION actor.stat_cat_entry_usr_map_cascade_update() RETURNS TRIGGER AS $$ +BEGIN + UPDATE actor.stat_cat_entry_usr_map + SET stat_cat_entry = NEW.value + WHERE stat_cat_entry = OLD.value + AND stat_cat = OLD.stat_cat; + + RETURN NEW; +END; +$$ LANGUAGE PLPGSQL; + +-- Basically the same thing as using cascade delete, but the stat_cat_entry isn't a foreign key as it can be freetext +CREATE OR REPLACE FUNCTION actor.stat_cat_entry_usr_map_cascade_delete() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM actor.stat_cat_entry_usr_map + WHERE stat_cat_entry = OLD.value + AND stat_cat = OLD.stat_cat; + + RETURN NEW; +END; +$$ LANGUAGE PLPGSQL; + +CREATE TRIGGER actor_stat_cat_entry_update_trigger + BEFORE UPDATE ON actor.stat_cat_entry FOR EACH ROW + EXECUTE FUNCTION actor.stat_cat_entry_usr_map_cascade_update(); + +CREATE TRIGGER actor_stat_cat_entry_delete_trigger + AFTER DELETE ON actor.stat_cat_entry FOR EACH ROW + EXECUTE FUNCTION actor.stat_cat_entry_usr_map_cascade_delete(); + + CREATE FUNCTION actor.stat_cat_check() RETURNS trigger AS $func$ DECLARE sipfield actor.stat_cat_sip_fields%ROWTYPE; diff --git a/Open-ILS/src/sql/Pg/t/lp1752367-patron_stat_cat_update_delete.pg b/Open-ILS/src/sql/Pg/t/lp1752367-patron_stat_cat_update_delete.pg new file mode 100644 index 0000000000..f250e80e6d --- /dev/null +++ b/Open-ILS/src/sql/Pg/t/lp1752367-patron_stat_cat_update_delete.pg @@ -0,0 +1,86 @@ +BEGIN; + +SELECT plan(10); + +--Make sure our triggers exist +SELECT has_trigger('actor', 'stat_cat_entry', 'actor_stat_cat_entry_update_trigger', 'Has stat_cat_entry update trigger'); +SELECT has_trigger('actor', 'stat_cat_entry', 'actor_stat_cat_entry_delete_trigger', 'Has stat_cat_entry delete trigger'); + +-- Create a test patron +INSERT INTO actor.usr (usrname, first_given_name, family_name, profile, passwd, ident_type, home_ou) +VALUES ('douglasdouglas', 'douglas', 'douglasson', 42, 'hunter2', 1, 4); +-- Did the test patron create? +SELECT isnt_empty( + 'SELECT profile FROM actor.usr WHERE usrname = ''douglasdouglas'' ' , + 'Can create a patron' +); + +SELECT id INTO TEMP TABLE tu +FROM actor.usr +WHERE usrname = 'douglasdouglas'; + +-- Create a test stat cat +INSERT INTO actor.stat_cat (owner, name) +VALUES ('4', 'pgTap stat_cat'); +-- Did the stat cat create? +SELECT isnt_empty( + 'SELECT * FROM actor.stat_cat WHERE name = ''pgTap stat_cat''', + 'Can create a patron stat cat' +); + +-- Remember the id of the stat cat we just made for later +SELECT sc.id AS stat_cat_id INTO TEMP TABLE sc +FROM actor.stat_cat sc WHERE name = 'pgTap stat_cat'; + +-- Create some test stat_cat_entries +INSERT INTO actor.stat_cat_entry (stat_cat, owner, value) +SELECT tv.stat_cat_id, v.owner, v.value +FROM sc tv, +(VALUES + (1, 'Beef'), + (1, 'Borf'), + (1, 'Boeuf') +) AS v (owner, value); +-- Did the stat_cat_entries create? +SELECT results_eq ( + 'SELECT value FROM actor.stat_cat_entry WHERE owner = 1 ORDER BY value ASC', + ARRAY['Beef', 'Boeuf', 'Borf'], + 'Can add 3 stat_cat_entries' +); + +--Make sure adding a duplicate entry fails +SELECT throws_ok( + 'INSERT INTO actor.stat_cat_entry (stat_cat, owner, value) + SELECT tv.stat_cat_id, 1, ''Beef'' + FROM sc tv', + 23505, + 'duplicate key value violates unique constraint "sce_once_per_owner"', + 'Can''t add duplicate stat cat entry' +); + +--Give our new patron the one of the stat_cat_entry +INSERT INTO actor.stat_cat_entry_usr_map (stat_cat, target_usr, stat_cat_entry) +SELECT sc.stat_cat_id, tu.id, 'Beef' +FROM sc, tu; +--Make sure we added the stat_cat_entry +PREPARE find_douglas_stat_cat_entry (text) AS ( + SELECT stat_cat_entry + FROM actor.stat_cat_entry_usr_map + WHERE stat_cat_entry = $1 +); +SELECT isnt_empty('find_douglas_stat_cat_entry(''Beef'')', 'Can add the stat_cat_entry to our patron') FROM tu LIMIT 1; + +-- Make sure douglasdouglas updates when we change the stat_cat_entry +UPDATE actor.stat_cat_entry +SET value = 'Bouf' +WHERE value = 'Beef'; +SELECT is_empty('find_douglas_stat_cat_entry(''Beef'')', 'stat_cat_entry_usr_map is no longer old value on update'); +SELECT isnt_empty('find_douglas_stat_cat_entry(''Bouf'')', 'stat_cat_entry_usr_map is now new value on update'); + +--Make sure douglasdouglas has nothing when we remove the stat_cat_entry +DELETE FROM actor.stat_cat_entry +WHERE value = 'Bouf'; +SELECT is_empty('find_douglas_stat_cat_entry(''Bouf'')', 'stat_cat_entry_usr_map is gone on delete'); + +SELECT * FROM finish(); +ROLLBACK; \ No newline at end of file diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor-stat-cat-entry-update.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor-stat-cat-entry-update.sql new file mode 100644 index 0000000000..f64bf465f8 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.actor-stat-cat-entry-update.sql @@ -0,0 +1,41 @@ +BEGIN; + +-- SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version); + +-- Basically the same thing as using cascade update, but the stat_cat_entry isn't a foreign key as it can be freetext +CREATE OR REPLACE FUNCTION actor.stat_cat_entry_usr_map_cascade_update() RETURNS TRIGGER AS $$ +BEGIN + UPDATE actor.stat_cat_entry_usr_map + SET stat_cat_entry = NEW.value + WHERE stat_cat_entry = OLD.value + AND stat_cat = OLD.stat_cat; + + RETURN NEW; +END; +$$ LANGUAGE PLPGSQL; + + +DROP TRIGGER IF EXISTS actor_stat_cat_entry_update_trigger ON actor.stat_cat_entry; +CREATE TRIGGER actor_stat_cat_entry_update_trigger + BEFORE UPDATE ON actor.stat_cat_entry FOR EACH ROW + EXECUTE FUNCTION actor.stat_cat_entry_usr_map_cascade_update(); + + +-- Basically the same thing as using cascade delete, but the stat_cat_entry isn't a foreign key as it can be freetext +CREATE OR REPLACE FUNCTION actor.stat_cat_entry_usr_map_cascade_delete() RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM actor.stat_cat_entry_usr_map + WHERE stat_cat_entry = OLD.value + AND stat_cat = OLD.stat_cat; + + RETURN NEW; +END; +$$ LANGUAGE PLPGSQL; + +DROP TRIGGER IF EXISTS actor_stat_cat_entry_delete_trigger ON actor.stat_cat_entry; +CREATE TRIGGER actor_stat_cat_entry_delete_trigger + AFTER DELETE ON actor.stat_cat_entry FOR EACH ROW + EXECUTE FUNCTION actor.stat_cat_entry_usr_map_cascade_delete(); + + +COMMIT; \ No newline at end of file ----------------------------------------------------------------------- Summary of changes: .../src/app/staff/admin/local/routing.module.ts | 4 - Open-ILS/src/sql/Pg/002.schema.config.sql | 2 +- Open-ILS/src/sql/Pg/005.schema.actors.sql | 32 ++++++++ .../t/lp1752367-patron_stat_cat_update_delete.pg | 86 ++++++++++++++++++++++ .../1473.schema.actor-stat-cat-entry-update.sql | 41 +++++++++++ 5 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/t/lp1752367-patron_stat_cat_update_delete.pg create mode 100644 Open-ILS/src/sql/Pg/upgrade/1473.schema.actor-stat-cat-entry-update.sql hooks/post-receive -- Evergreen ILS
participants (1)
-
Git User