| Line 0
          
      
      
        Link Here | 
          
            
              | 0 | -  | 1 | #!/usr/bin/perl | 
            
              |  |  | 2 | # Small script that rebuilds the non-MARC Holdings DB | 
            
              | 3 |  | 
            
              | 4 | use strict; | 
            
              | 5 | use warnings; | 
            
              | 6 |  | 
            
              | 7 | BEGIN { | 
            
              | 8 |     # find Koha's Perl modules | 
            
              | 9 |     # test carefully before changing this | 
            
              | 10 |     use FindBin; | 
            
              | 11 |     eval { require "$FindBin::Bin/kohalib.pl" }; | 
            
              | 12 | } | 
            
              | 13 |  | 
            
              | 14 | # Koha modules used | 
            
              | 15 | use MARC::Record; | 
            
              | 16 | use C4::Context; | 
            
              | 17 | use C4::Holdings; | 
            
              | 18 |  | 
            
              | 19 | use Getopt::Long; | 
            
              | 20 |  | 
            
              | 21 | my ($input_marc_file, $number) = ('', 0); | 
            
              | 22 | my ($help, $confirm, $test_parameter); | 
            
              | 23 | GetOptions( | 
            
              | 24 |     'c' => \$confirm, | 
            
              | 25 |     'h' => \$help, | 
            
              | 26 |     't' => \$test_parameter, | 
            
              | 27 | ); | 
            
              | 28 |  | 
            
              | 29 | if ($help || !$confirm) { | 
            
              | 30 |     print <<EOF | 
            
              | 31 | This script rebuilds the non-MARC Holdings DB from the MARC values. | 
            
              | 32 | You can/must use it when you change the mappings. | 
            
              | 33 |  | 
            
              | 34 | Example: you decide to map holdings.callnumber to 852\$k\$l\$m (it was previously mapped to 852\$k). | 
            
              | 35 |  | 
            
              | 36 | Syntax: | 
            
              | 37 | \t./batchRebuildHoldingsTables.pl -h (or without arguments => shows this screen) | 
            
              | 38 | \t./batchRebuildHoldingsTables.pl -c (c like confirm => rebuild non-MARC DB (may takes long) | 
            
              | 39 | \t-t => test only, change nothing in DB | 
            
              | 40 | EOF | 
            
              | 41 | ; | 
            
              | 42 |     exit; | 
            
              | 43 | } | 
            
              | 44 |  | 
            
              | 45 | my $dbh = C4::Context->dbh; | 
            
              | 46 | my $i = 0; | 
            
              | 47 | my $starttime = time(); | 
            
              | 48 |  | 
            
              | 49 | $| = 1; # flushes output | 
            
              | 50 | $starttime = time(); | 
            
              | 51 |  | 
            
              | 52 | my $sth = $dbh->prepare("SELECT holding_id FROM holdings"); | 
            
              | 53 | $sth->execute(); | 
            
              | 54 | my @errors; | 
            
              | 55 | while (my ($holding_id) = $sth->fetchrow()) { | 
            
              | 56 |     my $record = C4::Holdings::GetMarcHolding($holding_id); | 
            
              | 57 |     if (not defined $record) { | 
            
              | 58 |         push @errors, $holding_id; | 
            
              | 59 |         next; | 
            
              | 60 |     } | 
            
              | 61 |     my $rowData = C4::Holdings::TransformMarcHoldingToKoha($record); | 
            
              | 62 |     my $frameworkcode = C4::Holdings::GetHoldingFrameworkCode($holding_id); | 
            
              | 63 |     C4::Holdings::_koha_modify_holding($dbh, $holding_id, $rowData, $frameworkcode) unless $test_parameter; | 
            
              | 64 |     ++$i; | 
            
              | 65 | } | 
            
              | 66 | $sth->finish(); | 
            
              | 67 | my $timeneeded = time() - $starttime; | 
            
              | 68 | print "$i MARC records done in $timeneeded seconds\n"; | 
            
              | 69 | if (scalar(@errors) > 0) { | 
            
              | 70 |     print 'Records that could not be processed: ', join(' ', @errors); | 
            
              | 71 | } |