Serial holdings display consistency fix
authorDan Wells <dbw2@calvin.edu>
Wed, 1 Jun 2011 18:33:59 +0000 (14:33 -0400)
committerDan Wells <dbw2@calvin.edu>
Wed, 1 Jun 2011 18:33:59 +0000 (14:33 -0400)
When holdings are sourced from both MFHD and the DB, display may be
inconsistent due to a hard-coded ', ' in Serial.pm.  This patch works around
the problem by storing generated_coverage as a JSON array instead of a string,
leaving display formatting to the OPAC.

Signed-off-by: Dan Wells <dbw2@calvin.edu>

Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Serial.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm
Open-ILS/src/sql/Pg/002.schema.config.sql
Open-ILS/src/sql/Pg/upgrade/0543.data.reformat_generated_coverage.sql [new file with mode: 0644]

index a08a8c3..11c3202 100644 (file)
@@ -15,8 +15,6 @@ use OpenSRF::Utils::Logger qw/:logger/;
 
 use Data::Dumper;
 
-use OpenSRF::Utils::JSON;
-
 use Time::HiRes qw(time);
 use OpenSRF::EX qw(:try);
 use Digest::MD5 qw(md5_hex);
@@ -27,8 +25,7 @@ use XML::LibXSLT;
 use OpenILS::Const qw/:const/;
 
 use OpenILS::Application::AppUtils;
-my $apputils = "OpenILS::Application::AppUtils";
-my $U = $apputils;
+my $U = "OpenILS::Application::AppUtils";
 
 my $pfx = "open-ils.search_";
 
@@ -149,7 +146,7 @@ sub bib_to_svr {
         if ($_->summary_method ne 'use_sre_only') {
             if (ref $_->basic_summary) { #TODO: 'show-generated' boolean on summaries
                 if ($_->basic_summary->generated_coverage) {
-                    push(@{$svr->basic_holdings}, $_->basic_summary->generated_coverage);
+                    push(@{$svr->basic_holdings}, OpenSRF::Utils::JSON->JSON2perl($_->basic_summary->generated_coverage));
                 }
                 if ($_->basic_summary->textual_holdings) {
                     push(@{$svr->basic_holdings_add}, $_->basic_summary->textual_holdings);
@@ -157,7 +154,7 @@ sub bib_to_svr {
             }
             if (ref $_->supplement_summary) {
                 if ($_->supplement_summary->generated_coverage) {
-                    push(@{$svr->supplement_holdings}, $_->supplement_summary->generated_coverage);
+                    push(@{$svr->supplement_holdings}, OpenSRF::Utils::JSON->JSON2perl($_->supplement_summary->generated_coverage));
                 }
                 if ($_->supplement_summary->textual_holdings) {
                     push(@{$svr->supplement_holdings_add}, $_->supplement_summary->textual_holdings);
@@ -165,7 +162,7 @@ sub bib_to_svr {
             }
             if (ref $_->index_summary) {
                 if ($_->index_summary->generated_coverage) {
-                    push(@{$svr->index_holdings}, $_->index_summary->generated_coverage);
+                    push(@{$svr->index_holdings}, OpenSRF::Utils::JSON->JSON2perl($_->index_summary->generated_coverage));
                 }
                 if ($_->index_summary->textual_holdings) {
                     push(@{$svr->index_holdings_add}, $_->index_summary->textual_holdings);
index 832d0c2..a2bab96 100644 (file)
@@ -1515,7 +1515,7 @@ sub _prepare_summaries {
         $cu_method = "create";
     }
 
-    $summary->generated_coverage(join(", ", @$formatted_parts));
+    $summary->generated_coverage(OpenSRF::Utils::JSON->perl2JSON($formatted_parts));
     my $method = "${cu_method}_serial_${type}_summary";
     return $e->die_event unless $e->$method($summary);
 }
index 58dcc74..56af82f 100644 (file)
@@ -86,7 +86,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 ('0542', :eg_version); -- phasefx
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('0543', :eg_version); -- dbwells
 
 CREATE TABLE config.bib_source (
        id              SERIAL  PRIMARY KEY,
diff --git a/Open-ILS/src/sql/Pg/upgrade/0543.data.reformat_generated_coverage.sql b/Open-ILS/src/sql/Pg/upgrade/0543.data.reformat_generated_coverage.sql
new file mode 100644 (file)
index 0000000..25fcb9f
--- /dev/null
@@ -0,0 +1,18 @@
+BEGIN;
+
+-- Reformat generated_coverage to be JSON arrays rather than simple comma-
+-- separated lists.
+
+-- This upgrade script is technically imperfect, but should do the right thing
+-- in 99.9% of cases, and any mistakes will be self-healing as more serials
+-- activity happens
+
+SELECT evergreen.upgrade_deps_block_check('0543', :eg_version); -- dbwells
+
+UPDATE serial.basic_summary SET generated_coverage = '["' || regexp_replace(regexp_replace(generated_coverage, '"', E'\\"', 'g'), ', ', '","', 'g') || '"]' WHERE generated_coverage <> '';
+
+UPDATE serial.supplement_summary SET generated_coverage = '["' || regexp_replace(regexp_replace(generated_coverage, '"', E'\\"', 'g'), ', ', '","', 'g') || '"]' WHERE generated_coverage <> '';
+
+UPDATE serial.index_summary SET generated_coverage = '["' || regexp_replace(regexp_replace(generated_coverage, '"', E'\\"', 'g'), ', ', '","', 'g') || '"]' WHERE generated_coverage <> '';
+
+COMMIT;