Main Koha release repository https://koha-community.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

192 lines
5.6 KiB

#!/usr/bin/perl
# Copyright 2014 Oslo Public Library
=head1 NAME
nl-sync-to-koha.pl - Sync patrons from the Norwegian national patron database (NL) to Koha.
=head1 SYNOPSIS
perl nl-sync-to-koha.pl -v --run
=cut
use C4::Members;
use C4::Members::Attributes qw( UpdateBorrowerAttribute );
use Koha::NorwegianPatronDB qw( NLCheckSysprefs NLGetChanged );
use Koha::Database;
use Getopt::Long;
use Pod::Usage;
use Modern::Perl;
# Get options
my ( $run, $from, $verbose, $debug ) = get_options();
my $check_result = NLCheckSysprefs();
if ( $check_result->{'error'} == 1 ) {
if ( $check_result->{'nlenabled'} == 0 ) { say "* Please activate this function with the NorwegianPatronDBEnable system preference." };
if ( $check_result->{'endpoint'} == 0 ) { say "* Please specify an endpoint with the NorwegianPatronDBEndpoint system preference." };
if ( $check_result->{'userpass'} == 0 ) { say "* Please fill in the NorwegianPatronDBUsername and NorwegianPatronDBPassword system preferences." };
exit 0;
}
unless ( $run ) {
say "* You have not specified --run, no real syncing will be done.";
}
# Do the sync
my $sync_success = 0;
my $sync_failed = 0;
my $skipped_local_change = 0;
# Get the borrowers that have been changed
my $result = NLGetChanged( $from );
if ( $verbose ) {
say 'Number of records: ' . $result->{'antall_poster_returnert'};
say 'Number of hits: ' . $result->{'antall_treff'};
say 'Message: ' . $result->{'melding'};
say 'Status: ' . $result->{'status'};
say 'Server time: ' . $result->{'server_tid'};
say "-----------------------------";
}
# Loop through the patrons
foreach my $patron ( @{ $result->{'kohapatrons'} } ) {
if ( $verbose ) {
if ( $patron->{'surname'} ) {
say "*** Name: " . $patron->{'surname'};
} else {
say "*** No name";
}
say 'Created by: ' . $patron->{'_extra'}->{'created_by'};
say 'Last change by: ' . $patron->{'_extra'}->{'last_change_by'};
}
# Only sync in changes made by other libraries
if ( C4::Context->preference("NorwegianPatronDBUsername") ne $patron->{'_extra'}->{'last_change_by'} ) {
# Make a copy of the data in the hashref and store it as a hash
my %clean_patron = %$patron;
# Delete the extra data from the copy of the hashref
delete $clean_patron{'_extra'};
# Find the borrowernumber based on cardnumber
my $stored_patron = Koha::Database->new->schema->resultset('Borrower')->find({
'cardnumber' => $patron->{'cardnumber'}
});
my $borrowernumber = $stored_patron->borrowernumber;
if ( $run ) {
# Call ModMember
my $success = ModMember(
'borrowernumber' => $borrowernumber,
%clean_patron,
);
if ( $success ) {
# Get the sync object
my $sync = Koha::Database->new->schema->resultset('BorrowerSync')->find({
'synctype' => 'norwegianpatrondb',
'borrowernumber' => $borrowernumber,
});
# Update the syncstatus to 'synced'
$sync->update( { 'syncstatus' => 'synced' } );
# Update the 'synclast' attribute with the "server time" ("server_tid") returned by the method
$sync->update( { 'lastsync' => $result->{'result'}->{'server_tid'} } );
# Save social security number as attribute
UpdateBorrowerAttribute(
$borrowernumber,
{ code => 'fnr', attribute => $patron->{'_extra'}->{'socsec'} },
);
$sync_success++;
} else {
$sync_failed++;
}
}
} else {
say "Skipped, local change" if $verbose;
$skipped_local_change++;
}
}
if ( $verbose ) {
say "-----------------------------";
say "Sync succeeded: $sync_success";
say "Sync failed : $sync_failed";
say "Skipped local change: $skipped_local_change";
}
=head1 OPTIONS
=over 4
=item B<-r, --run>
Actually carry out syncing operations. Without this option, the script will
only report what it would have done, but not change any data, locally or
remotely.
=item B<-v --verbose>
Report on the progress of the script.
=item B<-f --from>
Date and time to sync from, if this should be different from "1 second past
midnight of the day before". The date should be in this format:
2014-06-03T00:00:01
=item B<-d --debug>
Even more output.
=item B<-h, -?, --help>
Prints this help message and exits.
=back
=cut
sub get_options {
# Options
my $run = '',
my $from = '',
my $verbose = '';
my $debug = '';
my $help = '';
GetOptions (
'r|run' => \$run,
'f|from=s' => \$from,
'v|verbose' => \$verbose,
'd|debug' => \$debug,
'h|?|help' => \$help
);
pod2usage( -exitval => 0 ) if $help;
return ( $run, $from, $verbose, $debug );
}
=head1 AUTHOR
Magnus Enger <digitalutvikling@gmail.com>
=head1 COPYRIGHT
Copyright 2014 Oslo Public Library
=head1 LICENSE
This file is part of Koha.
Koha is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation;
either version 3 of the License, or (at your option) any later version.
You should have received a copy of the GNU General Public License along with
Koha; if not, write to the Free Software Foundation, Inc., 51 Franklin Street,
Fifth Floor, Boston, MA 02110-1301 USA.
=cut