lp1387722 sets 'd' for leader when bib is marked as deleted, 'c' when modified or...
authorRogan Hamby <rogan.hamby@gmail.com>
Tue, 17 Oct 2017 18:59:32 +0000 (14:59 -0400)
committerRogan Hamby <rogan.hamby@gmail.com>
Tue, 17 Oct 2017 18:59:32 +0000 (14:59 -0400)
Open-ILS/src/sql/Pg/010.schema.biblio.sql

index 13620a4..fc097d7 100644 (file)
@@ -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;