View | Details | Raw Unified | Return to bug 12375
Collapse All | Expand All

(-)a/installer/data/mysql/updatedatabase.pl (-1 / +58 lines)
Lines 37-42 use Getopt::Long; Link Here
37
use C4::Context;
37
use C4::Context;
38
use C4::Installer;
38
use C4::Installer;
39
use C4::Dates;
39
use C4::Dates;
40
use Koha::Database;
40
41
41
use MARC::Record;
42
use MARC::Record;
42
use MARC::File::XML ( BinaryEncoding => 'utf8' );
43
use MARC::File::XML ( BinaryEncoding => 'utf8' );
Lines 8551-8556 if (CheckVersion($DBversion)) { Link Here
8551
    SetVersion($DBversion);
8552
    SetVersion($DBversion);
8552
}
8553
}
8553
8554
8555
$DBversion = "3.17.00.XXX";
8556
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
8557
   $dbh->do("
8558
       ALTER TABLE serial 
8559
        ADD serialseq_x VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq,
8560
        ADD serialseq_y VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_x,
8561
        ADD serialseq_z VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_y
8562
   ");
8563
8564
    my $trim = sub {
8565
        my $string = shift;
8566
        $string =~ s/^\s+//;
8567
        $string =~ s/\s+$//;
8568
        return $string;
8569
    };
8570
8571
    my $schema        = Koha::Database->new()->schema();
8572
    my @subscriptions = $schema->resultset('Subscription')->all();
8573
8574
    foreach my $subscription (@subscriptions) {
8575
        my $number_pattern = $subscription->numberpattern();
8576
8577
        my @splits = split( /\{[XYZ]\}/, $number_pattern->numberingmethod() );
8578
8579
        my @serials =
8580
          $schema->resultset('Serial')
8581
          ->search( { subscriptionid => $subscription->subscriptionid() } );
8582
8583
        foreach my $serial (@serials) {
8584
            my $serialseq = $serial->serialseq();
8585
            my ( $x, $y, $z );
8586
8587
            ## We cannot split on multiple values at once,
8588
            ## so let's replace each of those values with __SPLIT__
8589
            if (@splits) {
8590
                map( $serialseq =~ s/$_/__SPLIT__/, @splits );
8591
                ( undef, $x, $y, $z ) = split( /__SPLIT__/, $serialseq );
8592
            }
8593
            else
8594
            {    ## Nothing to split on means the only thing in serialseq is {X}
8595
                $x = $serialseq;
8596
            }
8597
8598
            $serial->update(
8599
                {
8600
                    serialseq_x => $x,
8601
                    serialseq_y => $y,
8602
                    serialseq_z => $z,
8603
                }
8604
            );
8605
        }
8606
    }
8607
8608
    print "Upgrade to $DBversion done ( Bug 8956 - Split serials enumeration data into separate fields )\n";
8609
    SetVersion($DBversion);
8610
}
8611
8554
=head1 FUNCTIONS
8612
=head1 FUNCTIONS
8555
8613
8556
=head2 TableExists($table)
8614
=head2 TableExists($table)
8557
- 

Return to bug 12375