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

(-)a/installer/data/mysql/updatedatabase.pl (-1 / +51 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 8577-8582 if ( CheckVersion($DBversion) ) { Link Here
8577
    SetVersion ($DBversion);
8578
    SetVersion ($DBversion);
8578
}
8579
}
8579
8580
8581
$DBversion = "3.17.00.XXX";
8582
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
8583
   $dbh->do("
8584
       ALTER TABLE serial
8585
        ADD serialseq_x VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq,
8586
        ADD serialseq_y VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_x,
8587
        ADD serialseq_z VARCHAR( 100 ) NULL DEFAULT NULL AFTER serialseq_y
8588
   ");
8589
8590
    my $schema        = Koha::Database->new()->schema();
8591
    my @subscriptions = $schema->resultset('Subscription')->all();
8592
8593
    foreach my $subscription (@subscriptions) {
8594
        my $number_pattern = $subscription->numberpattern();
8595
8596
        my @splits = split( /\{[XYZ]\}/, $number_pattern->numberingmethod() );
8597
8598
        my @serials =
8599
          $schema->resultset('Serial')
8600
          ->search( { subscriptionid => $subscription->subscriptionid() } );
8601
8602
        foreach my $serial (@serials) {
8603
            my $serialseq = $serial->serialseq();
8604
            my ( $x, $y, $z );
8605
8606
            ## We cannot split on multiple values at once,
8607
            ## so let's replace each of those values with __SPLIT__
8608
            if (@splits) {
8609
                map( $serialseq =~ s/$_/__SPLIT__/, @splits );
8610
                ( undef, $x, $y, $z ) = split( /__SPLIT__/, $serialseq );
8611
            }
8612
            else
8613
            {    ## Nothing to split on means the only thing in serialseq is {X}
8614
                $x = $serialseq;
8615
            }
8616
8617
            $serial->update(
8618
                {
8619
                    serialseq_x => $x,
8620
                    serialseq_y => $y,
8621
                    serialseq_z => $z,
8622
                }
8623
            );
8624
        }
8625
    }
8626
8627
    print "Upgrade to $DBversion done ( Bug 8956 - Split serials enumeration data into separate fields )\n";
8628
    SetVersion($DBversion);
8629
}
8630
8580
=head1 FUNCTIONS
8631
=head1 FUNCTIONS
8581
8632
8582
=head2 TableExists($table)
8633
=head2 TableExists($table)
8583
- 

Return to bug 12375