1be9f1a0e7
1) Be more careful when checking the NorwegianPatronDBEnable syspref. Before: if ( C4::Context->preference('NorwegianPatronDBEnable') == 1 ) { After: if ( C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preference('NorwegianPatronDBEnable') == 1 ) { This should avoid complaints if the syspref is not initialized. 2) Fix some empty =head2 POD sections 3) Fix some indentation in patrons.pref, to make xt/yaml_valid.t happy Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> I couldn't find any regressions with adding, editing and deleting members. Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
202 lines
4.6 KiB
Perl
202 lines
4.6 KiB
Perl
#!/usr/bin/perl
|
|
|
|
# Copyright 2014 Oslo Public Library
|
|
|
|
=head1 NAME
|
|
|
|
nl-sync-from-koha.pl - Sync patrons from Koha to the Norwegian national patron database (NL).
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
perl nl-sync-from-koha.pl -v --run
|
|
|
|
=cut
|
|
|
|
use Koha::NorwegianPatronDB qw( NLCheckSysprefs NLSync );
|
|
use Koha::Database;
|
|
use Getopt::Long;
|
|
use Pod::Usage;
|
|
use Modern::Perl;
|
|
|
|
# Get options
|
|
my ( $run, $verbose, $debug ) = get_options();
|
|
|
|
=head1 ACTIONS
|
|
|
|
=head2
|
|
|
|
Find local patrons that have been changed and need to be sent upstream to NL.
|
|
These patrons will be distinguished by two borrower attributes:
|
|
|
|
=over 4
|
|
|
|
=item * The "nlstatus" attribute will have a value of "needsync". (Which means
|
|
that the patron has been changed in Koha, but not yet successfully synced
|
|
upstream.)
|
|
|
|
=item * The "nlsync" attribute will have a value of 1. (Which means that this
|
|
patron has accepted to be synced with NL, as opposed to a value of 0 which
|
|
would indicate that the patron has asked not to be synced with NL.)
|
|
|
|
=back
|
|
|
|
=head1 STEPS
|
|
|
|
This script performs the following steps:
|
|
|
|
=head2 Check sysprefs
|
|
|
|
Check that the necessary sysprefs are set before proceeding.
|
|
|
|
=cut
|
|
|
|
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.";
|
|
}
|
|
|
|
=head2 Find patrons that need to be synced
|
|
|
|
Patrons with either of these statuses:
|
|
|
|
=over 4
|
|
|
|
=item * edited
|
|
|
|
=item * new
|
|
|
|
=item * deleted
|
|
|
|
=back
|
|
|
|
=cut
|
|
|
|
my @needs_sync = Koha::Database->new->schema->resultset('BorrowerSync')->search({
|
|
-and => [
|
|
sync => 1,
|
|
synctype => 'norwegianpatrondb',
|
|
-or => [
|
|
syncstatus => 'edited',
|
|
syncstatus => 'new',
|
|
syncstatus => 'delete',
|
|
],
|
|
],
|
|
});
|
|
|
|
=head2 Do the actual sync
|
|
|
|
Data is synced to NL with NLSync.
|
|
|
|
=cut
|
|
|
|
my $sync_success = 0;
|
|
my $sync_failed = 0;
|
|
foreach my $borrower ( @needs_sync ) {
|
|
my $cardnumber = $borrower->borrowernumber->cardnumber;
|
|
my $firstname = $borrower->borrowernumber->firstname;
|
|
my $surname = $borrower->borrowernumber->surname;
|
|
my $syncstatus = $borrower->syncstatus;
|
|
say "*** Syncing patron: $cardnumber - $firstname $surname ($syncstatus)" if $verbose;
|
|
if ( $run ) {
|
|
my $response = NLSync({ 'patron' => $borrower->borrowernumber });
|
|
if ( $response ) {
|
|
my $result = $response->result;
|
|
if ( $result->{'status'} && $result->{'status'} == 1 ) {
|
|
$sync_success++;
|
|
} else {
|
|
$sync_failed++;
|
|
}
|
|
if ( $result->{'melding'} && $verbose ) {
|
|
say $result->{'melding'};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
=head2 Summarize if verbose mode is enabled
|
|
|
|
Specify -v on the command line to get a summary of the syncing operations.
|
|
|
|
=cut
|
|
|
|
if ( $verbose ) {
|
|
say "-----------------------------";
|
|
say "Sync succeeded: $sync_success";
|
|
say "Sync failed : $sync_failed";
|
|
}
|
|
|
|
=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<-d --debug>
|
|
|
|
Even more output.
|
|
|
|
=item B<-h, -?, --help>
|
|
|
|
Prints this help message and exits.
|
|
|
|
=back
|
|
|
|
=cut
|
|
|
|
sub get_options {
|
|
|
|
# Options
|
|
my $run = '',
|
|
my $verbose = '';
|
|
my $debug = '';
|
|
my $help = '';
|
|
|
|
GetOptions (
|
|
'r|run' => \$run,
|
|
'v|verbose' => \$verbose,
|
|
'd|debug' => \$debug,
|
|
'h|?|help' => \$help
|
|
);
|
|
|
|
pod2usage( -exitval => 0 ) if $help;
|
|
|
|
return ( $run, $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
|