X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=ferlib2koha.pl;h=34b65024c8167996c26fea74134defc8ea886b2a;hb=46f829f7f91f5be4159db49e2fbb2d139e0f4d38;hp=e702ddb8a769778fc13dbefdcc11587dcf4f30a7;hpb=4429c343d51528fef3b1385aa65225dcdcc39ced;p=ferlib2koha.git diff --git a/ferlib2koha.pl b/ferlib2koha.pl old mode 100755 new mode 100644 index e702ddb..34b6502 --- a/ferlib2koha.pl +++ b/ferlib2koha.pl @@ -4,8 +4,9 @@ use strict; use DBI; use Data::Dump qw/dump/; use Algorithm::CheckDigits; +use Text::Unaccent; -# sudo apt-get install libdbd-sqlite3-perl libdbd-csv-perl +# sudo apt-get install libdbd-sqlite3-perl libdbd-csv-perl libtext-unaccent-perl $|++; @@ -26,15 +27,25 @@ sub lookup { my ( $dbh, $t, $k, $v, $s, $default ) = @_; my $hash; my $key = "$t $k $v"; + my $max = $v =~ s/max\((\w+)\)/$1/; if ( exists $lookup->{$key} ) { $hash = $lookup->{$key}; } else { warn "# select $k,$v from $t"; my $sth = $dbh->prepare( "select $k,$v from $t" ); $sth->execute; + my @non_unique; while (my $row = $sth->fetchrow_hashref() ) { + if ( ! $max && exists $hash->{ $row->{$k} } ) { + push @non_unique, $row->{$k}; + next; + } $hash->{ $row->{$k} } = $row->{$v}; } + if ( @non_unique ) { + warn "# remove non-unique ", dump(@non_unique); + delete $hash->{$_} foreach @non_unique; + } $lookup->{$key} = $hash; warn "# lookup $key = ",dump($hash); } @@ -341,7 +352,7 @@ sub reserves { $row->{itemnumber} ? 'W' : undef; $row->{borrowernumber} = lookup($k, 'borrowers', 'cardnumber' => 'borrowernumber', $row->{borrowernumber}); - $row->{biblionumber} = lookup($k, 'biblioitems', 'collectionvolume' => 'biblionumber', $row->{biblionumber}); + $row->{biblionumber} = lookup($k, 'biblioitems', 'collectionvolume' => 'max(biblionumber)', $row->{biblionumber}); $row->{itemnumber} = lookup($k, 'items', 'barcode' => 'itemnumber', $row->{itemnumber}); insert $table => $row; @@ -414,4 +425,32 @@ select from nacdob }; +my $sth = $k->prepare(qq{ +select + borrowernumber, + firstname, + surname, + cardnumber +from borrowers +where categorycode = 'D' and email is null +group by firstname,surname +having count(*) = 1 -- update only unique users +}); +my $update_borrower = $k->prepare(qq{ +update borrowers +set email = ?, userid = ?, cardnumber = ? +where borrowernumber = ? +}); +$sth->execute; +while (my $row = $sth->fetchrow_hashref) { + my $email = lc unac_string( 'utf-8', $row->{firstname} . '.' . $row->{surname} . '@fer.hr' ); + if ( my $nick = lookup($u, 'users', 'email', 'nick', $email, undef) ) { + my $cardnumber = lookup($u, 'users', 'email', 'jmbag', $email, undef) || next; + warn "# FIXED nick $row->{borrowernumber} $nick $email $cardnumber\n"; +eval { + $update_borrower->execute( $email, $nick, $cardnumber, $row->{borrowernumber} ); +}; + } +} + $k->commit;