From cd7689478ef6290f57a53cb855dc4e0a664e9066 Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatersolutions.com>
Date: Tue, 23 Oct 2012 14:48:41 -0400
Subject: [PATCH] Bug 12375 [1] - Update database

Signed-off-by: Paul Landers <paul.landers@ttuhsc.edu>
---
 installer/data/mysql/updatedatabase.pl |   53 ++++++++++++++++++++++++++++++-
 1 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index 214faa3..b8b3fa5 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -38,7 +38,6 @@ use C4::Context;
 use C4::Installer;
 use C4::Dates;
 use Koha::Database;
-
 use Koha;
 
 use MARC::Record;
@@ -9897,7 +9896,7 @@ if ( CheckVersion($DBversion) ) {
         ALTER TABLE search_history ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id);
     |);
     print "Upgrade to $DBversion done (Bug 11430: Add primary key for search_history)\n";
-    SetVersion($DBversion);
+    SetVersion ($DBversion);
 }
 
 $DBversion = "3.19.00.016";
@@ -10641,6 +10640,56 @@ if ( CheckVersion($DBversion) ) {
     SetVersion($DBversion);
 }
 
+$DBversion = "3.19.00.XXX";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+   $dbh->do("
+       ALTER TABLE serial
+        ADD serialseq_x VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq,
+        ADD serialseq_y VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_x,
+        ADD serialseq_z VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_y
+   ");
+
+    my $schema        = Koha::Database->new()->schema();
+    my @subscriptions = $schema->resultset('Subscription')->all();
+
+    foreach my $subscription (@subscriptions) {
+        my $number_pattern = $subscription->numberpattern();
+
+        my @splits = split( /\{[XYZ]\}/, $number_pattern->numberingmethod() );
+
+        my @serials =
+          $schema->resultset('Serial')
+          ->search( { subscriptionid => $subscription->subscriptionid() } );
+
+        foreach my $serial (@serials) {
+            my $serialseq = $serial->serialseq();
+            my ( $x, $y, $z );
+
+            ## We cannot split on multiple values at once,
+            ## so let's replace each of those values with __SPLIT__
+            if (@splits) {
+                map( $serialseq =~ s/$_/__SPLIT__/, @splits );
+                ( undef, $x, $y, $z ) = split( /__SPLIT__/, $serialseq );
+            }
+            else
+            {    ## Nothing to split on means the only thing in serialseq is {X}
+                $x = $serialseq;
+            }
+
+            $serial->update(
+                {
+                    serialseq_x => $x,
+                    serialseq_y => $y,
+                    serialseq_z => $z,
+                }
+            );
+        }
+    }
+
+    print "Upgrade to $DBversion done ( Bug 8956 - Split serials enumeration data into separate fields )\n";
+    SetVersion($DBversion);
+}
+
 
 # DEVELOPER PROCESS, search for anything to execute in the db_update directory
 # SEE bug 13068
-- 
1.7.2.5