d2a9be79af95f011884693aaea1c08b2dd842231
[misc/alice/.git] / fix-alice-barcodes.pl
1 #!/usr/bin/perl
2 use strict;
3
4 use C4::Context;
5 use C4::Items;
6
7 # use C4::Debug;
8 #use Data::Dumper;
9 #use Smart::Comments '####';
10
11 my $dbh = C4::Context->dbh();
12
13 my $q   = " select * from items  ";
14 my $sth = $dbh->prepare($q);
15
16 #$sth->trace(3);
17 $sth->execute();
18
19 my $i = 0;
20 while ( my $rec = $sth->fetchrow_hashref() ) {
21
22     my $bc = $rec->{'barcode'};
23     $bc =~ s/^[ \t]+|[ \t]+$//g;
24
25     $bc = AliceBarcode($bc);
26 #### $bc
27     my $itm = $rec->{'itemnumber'};
28 #### $itm
29
30     my $bib = $rec->{'biblionumber'};
31
32     #    ModItem( { barcode => $bc  }, $bib, $itm , $dbh, $frameworkcode, undef );
33     ModItem( { barcode => $bc }, undef, $itm );
34     $i++;
35     print "$i\n" if ( 0 == $i % 100 );
36
37 }
38
39 # a handy algo to calculate softlink-alice barcode checksums
40 sub AliceBarcode {
41     my $bc = shift;
42
43     my $bn = substr( $bc, 1, 5 );
44     my $ba;
45
46 ####  $bc
47 ####  $bn
48
49     my @a = split( //, $bn );
50
51     my $total;
52     ( $total += $_ ) for @a;
53
54 #### $total
55     my $mod = ( $total % 11 );
56 ####  $mod
57
58     use Switch;
59     switch ($mod) {
60
61         case 0  { $ba = 'J' }
62         case 1  { $ba = 'K' }
63         case 2  { $ba = 'L' }
64         case 3  { $ba = 'M' }
65         case 4  { $ba = 'N' }
66         case 5  { $ba = 'P' }
67         case 6  { $ba = 'F' }
68         case 7  { $ba = 'W' }
69         case 8  { $ba = 'X' }
70         case 9  { $ba = 'Y' }
71         case 10 { $ba = 'A' }
72
73     };
74
75 #### $ba
76
77     $bc = "R" . $bn . $ba . "1416";
78     return $bc;
79 }
80