]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/1110.schema.set_record_status_in_leader_trigger.sql
02b4fed7edbc158f2168563a7bf56cdf7dae21fc
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 1110.schema.set_record_status_in_leader_trigger.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('1110', :eg_version);
4
5 CREATE OR REPLACE FUNCTION biblio.set_record_status_in_leader() RETURNS TRIGGER AS $func$
6 use strict;
7 use MARC::Record;
8 use MARC::Field;
9 use MARC::File::XML (BinaryEncoding => 'utf8');
10 use Unicode::Normalize;
11
12 my $old_marc = MARC::Record->new_from_xml($_TD->{new}{marc});
13 my $old_leader = $old_marc->leader();
14 my $old_status = substr($old_leader,5,1);
15
16 my $status;
17 if ($_TD->{event} eq 'INSERT') {$status = 'n';}
18 elsif ($_TD->{event} eq 'UPDATE' && $_TD->{new}{deleted} eq 't') {$status = 'd';}
19 elsif ($_TD->{event} eq 'UPDATE' && $_TD->{new}{deleted} eq 'f') {$status = 'c';}
20
21 if ($old_status ne $status) {
22     my $marc = MARC::Record->new_from_xml($_TD->{new}{marc});
23     my $leader = $marc->leader();
24     substr($leader,5,1) = $status;
25     $marc->leader($leader);
26     my $marc_xml = $marc->as_xml_record();
27     $marc_xml = NFC($marc_xml);  
28     $_TD->{new}{marc} = $marc_xml;
29
30
31 return "MODIFY";
32
33 $func$ LANGUAGE PLPERLU;
34
35 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();
36
37 COMMIT;