From: miker Date: Thu, 4 Nov 2010 12:41:49 +0000 (+0000) Subject: General 2.0b1 cleanup X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=7eb7d0be39d892cda014e4e5adac1fccfd2ee982;p=evergreen%2Fjoelewis.git General 2.0b1 cleanup * Problem in vandelay.add_fields spotted by tsbere * Syncing 1.6.1-2.0 upgrade script with reality git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_2_0@18601 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 2c4bc6879a..188c1a13ee 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -70,7 +70,7 @@ CREATE TABLE config.upgrade_log ( install_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); -INSERT INTO config.upgrade_log (version) VALUES ('0457'); -- senator +INSERT INTO config.upgrade_log (version) VALUES ('0458'); -- miker CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/012.schema.vandelay.sql b/Open-ILS/src/sql/Pg/012.schema.vandelay.sql index 9996b72807..686cf4543f 100644 --- a/Open-ILS/src/sql/Pg/012.schema.vandelay.sql +++ b/Open-ILS/src/sql/Pg/012.schema.vandelay.sql @@ -360,8 +360,6 @@ CREATE OR REPLACE FUNCTION vandelay.add_field ( target_xml TEXT, source_xml TEXT my @new_sf = map { ($_ => $from_field->subfield($_)) } @{$fields{$f}{sf}}; $to_field->add_subfields( @new_sf ); } - my @new_sf = map { ($_ => $from_field->subfield($_)) } @{$fields{$f}{sf}}; - $to_field->add_subfields( @new_sf ); } } } else { diff --git a/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql b/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql index d40cf91180..37afcd8568 100644 --- a/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql +++ b/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql @@ -23,7 +23,7 @@ BEGIN; -- Highest-numbered individual upgrade script incorporated herein: -INSERT INTO config.upgrade_log (version) VALUES ('0453'); +INSERT INTO config.upgrade_log (version) VALUES ('0458'); -- Remove some uses of the connectby() function from the tablefunc contrib module CREATE OR REPLACE FUNCTION actor.org_unit_descendants( INT, INT ) RETURNS SETOF actor.org_unit AS $$ @@ -3877,6 +3877,132 @@ $$ $$ ); +UPDATE action_trigger.event_definition SET template = $$[% FILTER collapse %] +[%- SET invoice = target -%] + +
+

Invoice

+
+ No. [% invoice.inv_ident %] + [% IF invoice.inv_type %] + / Type:[% invoice.inv_type %] + [% END %] +
+
+
+ [% BLOCK ent_with_address %] +
[% ent_label %]: [% ent.name %] ([% ent.code %])
+
+ [% IF ent.addresses.0 %] + [% SET addr = ent.addresses.0 %] + [% addr.street1 %]
+ [% IF addr.street2 %][% addr.street2 %]
[% END %] + [% addr.city %], + [% IF addr.county %] [% addr.county %], [% END %] + [% IF addr.state %] [% addr.state %] [% END %] + [% IF addr.post_code %][% addr.post_code %][% END %]
+ [% IF addr.country %] [% addr.country %] [% END %] + [% END %] +

+ [% IF ent.phone %] Phone: [% ent.phone %]
[% END %] + [% IF ent.fax_phone %] Fax: [% ent.fax_phone %]
[% END %] + [% IF ent.url %] URL: [% ent.url %]
[% END %] + [% IF ent.email %] E-mail: [% ent.email %] [% END %] +

+
+ [% END %] + [% INCLUDE ent_with_address + ent = invoice.provider + ent_label = "Provider" %] + [% INCLUDE ent_with_address + ent = invoice.shipper + ent_label = "Shipper" %] +
Receiver
+
+ [% invoice.receiver.name %] ([% invoice.receiver.shortname %]) +
+
Received
+
+ [% helpers.format_date(invoice.recv_date) %] by + [% invoice.recv_method %] +
+ [% IF invoice.note %] +
Note
+
+ [% invoice.note %] +
+ [% END %] +
+
+ +
+ Amounts spent per fund: + + [% FOR blob IN user_data %] + + + + + [% END %] +
[% blob.fund.code %] ([% blob.fund.year %]):$[% blob.total %]
+
+
+[% END %]$$ WHERE id = 22; INSERT INTO action_trigger.environment (event_def, path) VALUES (22, 'provider'), (22, 'provider.addresses'), @@ -14777,64 +14903,64 @@ CREATE TABLE acq.claim_policy_action ( CREATE OR REPLACE FUNCTION public.ingest_acq_marc ( ) RETURNS TRIGGER AS $function$ DECLARE - value TEXT; - atype TEXT; - prov INT; - pos INT; - adef RECORD; - xpath_string TEXT; + value TEXT; + atype TEXT; + prov INT; + pos INT; + adef RECORD; + xpath_string TEXT; BEGIN - FOR adef IN SELECT *,tableoid FROM acq.lineitem_attr_definition LOOP - - SELECT relname::TEXT INTO atype FROM pg_class WHERE oid = adef.tableoid; - - IF (atype NOT IN ('lineitem_usr_attr_definition','lineitem_local_attr_definition')) THEN - IF (atype = 'lineitem_provider_attr_definition') THEN - SELECT provider INTO prov FROM acq.lineitem_provider_attr_definition WHERE id = adef.id; - CONTINUE WHEN NEW.provider IS NULL OR prov <> NEW.provider; - END IF; - - IF (atype = 'lineitem_provider_attr_definition') THEN - SELECT xpath INTO xpath_string FROM acq.lineitem_provider_attr_definition WHERE id = adef.id; - ELSIF (atype = 'lineitem_marc_attr_definition') THEN - SELECT xpath INTO xpath_string FROM acq.lineitem_marc_attr_definition WHERE id = adef.id; - ELSIF (atype = 'lineitem_generated_attr_definition') THEN - SELECT xpath INTO xpath_string FROM acq.lineitem_generated_attr_definition WHERE id = adef.id; - END IF; - + FOR adef IN SELECT *,tableoid FROM acq.lineitem_attr_definition LOOP + + SELECT relname::TEXT INTO atype FROM pg_class WHERE oid = adef.tableoid; + + IF (atype NOT IN ('lineitem_usr_attr_definition','lineitem_local_attr_definition')) THEN + IF (atype = 'lineitem_provider_attr_definition') THEN + SELECT provider INTO prov FROM acq.lineitem_provider_attr_definition WHERE id = adef.id; + CONTINUE WHEN NEW.provider IS NULL OR prov <> NEW.provider; + END IF; + + IF (atype = 'lineitem_provider_attr_definition') THEN + SELECT xpath INTO xpath_string FROM acq.lineitem_provider_attr_definition WHERE id = adef.id; + ELSIF (atype = 'lineitem_marc_attr_definition') THEN + SELECT xpath INTO xpath_string FROM acq.lineitem_marc_attr_definition WHERE id = adef.id; + ELSIF (atype = 'lineitem_generated_attr_definition') THEN + SELECT xpath INTO xpath_string FROM acq.lineitem_generated_attr_definition WHERE id = adef.id; + END IF; + xpath_string := REGEXP_REPLACE(xpath_string,$re$//?text\(\)$$re$,''); IF (adef.code = 'title' OR adef.code = 'author') THEN -- title and author should not be split -- FIXME: once oils_xpath can grok XPATH 2.0 functions, we can use -- string-join in the xpath and remove this special case - SELECT extract_acq_marc_field(id, xpath_string, adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id; - IF (value IS NOT NULL AND value <> '') THEN - INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value) - VALUES (NEW.id, adef.id, atype, adef.code, value); + SELECT extract_acq_marc_field(id, xpath_string, adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id; + IF (value IS NOT NULL AND value <> '') THEN + INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value) + VALUES (NEW.id, adef.id, atype, adef.code, value); END IF; ELSE pos := 1; LOOP - SELECT extract_acq_marc_field(id, xpath_string || '[' || pos || ']', adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id; - - IF (value IS NOT NULL AND value <> '') THEN - INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value) - VALUES (NEW.id, adef.id, atype, adef.code, value); + SELECT extract_acq_marc_field(id, xpath_string || '[' || pos || ']', adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id; + + IF (value IS NOT NULL AND value <> '') THEN + INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value) + VALUES (NEW.id, adef.id, atype, adef.code, value); ELSE EXIT; - END IF; + END IF; pos := pos + 1; END LOOP; END IF; - END IF; + END IF; - END LOOP; + END LOOP; - RETURN NULL; + RETURN NULL; END; $function$ LANGUAGE PLPGSQL; @@ -17176,24 +17302,16 @@ DECLARE bib_id INT := 0; bib_rec biblio.record_entry%ROWTYPE; auth_link authority.bib_linking%ROWTYPE; + ingest_same boolean; BEGIN - -- 1. Make source_record MARC a copy of the target_record to get auto-sync in linked bib records - UPDATE authority.record_entry - SET marc = ( - SELECT marc - FROM authority.record_entry - WHERE id = target_record - ) - WHERE id = source_record; - - -- 2. Update all bib records with the ID from target_record in their $0 - FOR bib_rec IN SELECT bre.* FROM biblio.record_entry bre + -- 1. Update all bib records with the ID from target_record in their $0 + FOR bib_rec IN SELECT bre.* FROM biblio.record_entry bre INNER JOIN authority.bib_linking abl ON abl.bib = bre.id - WHERE abl.authority = target_record LOOP + WHERE abl.authority = source_record LOOP UPDATE biblio.record_entry - SET marc = REGEXP_REPLACE(marc, + SET marc = REGEXP_REPLACE(marc, E'([^<]*?\\))' || source_record || '<', E'\\1' || target_record || '<', 'g') WHERE id = bib_rec.id; @@ -17201,10 +17319,34 @@ BEGIN moved_objects := moved_objects + 1; END LOOP; - -- 3. "Delete" source_record + -- 2. Grab the current value of reingest on same MARC flag + SELECT enabled INTO ingest_same + FROM config.internal_flag + WHERE name = 'ingest.reingest.force_on_same_marc' + ; + + -- 3. Temporarily set reingest on same to TRUE + UPDATE config.internal_flag + SET enabled = TRUE + WHERE name = 'ingest.reingest.force_on_same_marc' + ; + + -- 4. Make a harmless update to target_record to trigger auto-update + -- in linked bibliographic records + UPDATE authority.record_entry + SET DELETED = FALSE + WHERE id = source_record; + + -- 5. "Delete" source_record DELETE FROM authority.record_entry WHERE id = source_record; + -- 6. Set "reingest on same MARC" flag back to initial value + UPDATE config.internal_flag + SET enabled = ingest_same + WHERE name = 'ingest.reingest.force_on_same_marc' + ; + RETURN moved_objects; END; $func$ LANGUAGE plpgsql; @@ -18760,7 +18902,7 @@ INSERT INTO acq.lineitem_marc_attr_definition ( code, description, xpath, remove SELECT 'upc', 'UPC', '//*[@tag="024" and @ind1="1"]/*[@code="a"]', $r$(?:-|\s.+$)$r$ WHERE NOT EXISTS ( SELECT 1 FROM acq.lineitem_marc_attr_definition WHERE code = 'upc' -); +); COMMIT; diff --git a/Open-ILS/src/sql/Pg/upgrade/0458.schema.vandelay-add_fields.sql b/Open-ILS/src/sql/Pg/upgrade/0458.schema.vandelay-add_fields.sql new file mode 100644 index 0000000000..a7623bfa29 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0458.schema.vandelay-add_fields.sql @@ -0,0 +1,78 @@ +BEGIN; + +INSERT INTO config.upgrade_log (version) VALUES ('0458'); -- miker + +CREATE OR REPLACE FUNCTION vandelay.add_field ( target_xml TEXT, source_xml TEXT, field TEXT ) RETURNS TEXT AS $_$ + + use MARC::Record; + use MARC::File::XML (BinaryEncoding => 'UTF-8'); + use strict; + + my $target_xml = shift; + my $source_xml = shift; + my $field_spec = shift; + + my $target_r = MARC::Record->new_from_xml( $target_xml ); + my $source_r = MARC::Record->new_from_xml( $source_xml ); + + return $target_xml unless ($target_r && $source_r); + + my @field_list = split(',', $field_spec); + + my %fields; + for my $f (@field_list) { + $f =~ s/^\s*//; $f =~ s/\s*$//; + if ($f =~ /^(.{3})(\w*)(?:\[([^]]*)\])?$/) { + my $field = $1; + $field =~ s/\s+//; + my $sf = $2; + $sf =~ s/\s+//; + my $match = $3; + $match =~ s/^\s*//; $match =~ s/\s*$//; + $fields{$field} = { sf => [ split('', $sf) ] }; + if ($match) { + my ($msf,$mre) = split('~', $match); + if (length($msf) > 0 and length($mre) > 0) { + $msf =~ s/^\s*//; $msf =~ s/\s*$//; + $mre =~ s/^\s*//; $mre =~ s/\s*$//; + $fields{$field}{match} = { sf => $msf, re => qr/$mre/ }; + } + } + } + } + + for my $f ( keys %fields) { + if ( @{$fields{$f}{sf}} ) { + for my $from_field ($source_r->field( $f )) { + my @tos = $target_r->field( $f ); + if (!@tos) { + next if (exists($fields{$f}{match})); + my @new_fields = map { $_->clone } $source_r->field( $f ); + $target_r->insert_fields_ordered( @new_fields ); + } else { + for my $to_field (@tos) { + if (exists($fields{$f}{match})) { + next unless (grep { $_ =~ $fields{$f}{match}{re} } $to_field->subfield($fields{$f}{match}{sf})); + } + my @new_sf = map { ($_ => $from_field->subfield($_)) } @{$fields{$f}{sf}}; + $to_field->add_subfields( @new_sf ); + } + } + } + } else { + my @new_fields = map { $_->clone } $source_r->field( $f ); + $target_r->insert_fields_ordered( @new_fields ); + } + } + + $target_xml = $target_r->as_xml_record; + $target_xml =~ s/^<\?.+?\?>$//mo; + $target_xml =~ s/\n//sgo; + $target_xml =~ s/>\s+