From 55557ff757e5a15b99516f7f81430421c66ebca1 Mon Sep 17 00:00:00 2001 From: Rogan Hamby Date: Tue, 17 Oct 2017 14:59:32 -0400 Subject: [PATCH] lp1387722 sets 'd' for leader when bib is marked as deleted, 'c' when modified or undeleted and 'n' on import --- Open-ILS/src/sql/Pg/010.schema.biblio.sql | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Open-ILS/src/sql/Pg/010.schema.biblio.sql b/Open-ILS/src/sql/Pg/010.schema.biblio.sql index 13620a4d2d..fc097d7652 100644 --- a/Open-ILS/src/sql/Pg/010.schema.biblio.sql +++ b/Open-ILS/src/sql/Pg/010.schema.biblio.sql @@ -121,4 +121,34 @@ $$ LANGUAGE PLPGSQL; CREATE TRIGGER norm_sort_label BEFORE INSERT OR UPDATE ON biblio.monograph_part FOR EACH ROW EXECUTE PROCEDURE biblio.normalize_biblio_monograph_part_sortkey(); +CREATE OR REPLACE FUNCTION biblio.set_record_status_in_leader() RETURNS TRIGGER AS $func$ +use strict; +use MARC::Record; +use MARC::Field; +use MARC::File::XML (BinaryEncoding => 'utf8'); +use Unicode::Normalize; + +my $c; + +if ($_TD->{event} eq 'INSERT') {$c = 'n';} +elsif ($_TD->{event} eq 'UPDATE' && $_TD->{new}{deleted} eq 't') {$c = 'd';} +elsif ($_TD->{event} eq 'UPDATE' && $_TD->{new}{deleted} eq 'f') {$c = 'c';} + +my $marc = MARC::Record->new_from_xml($_TD->{new}{marc}); +my $leader = $marc->leader(); +substr($leader,5,1) = $c; +$marc->leader($leader); + +my $marc_xml = $marc->as_xml_record(); + +$marc_xml = NFC($marc_xml); + +$_TD->{new}{marc} = $marc_xml; + +return "MODIFY"; + +$func$ LANGUAGE PLPERLU; + +CREATE TRIGGER set_record_status_in_leader BEFORE INSERT OR UPDATE ON biblio.record_entry FOR EACH ROW EXECUTE PROCEDURE biblio.set_record_status_in_leader(); + COMMIT; -- 2.11.0