# dates should be in the format you have set up Koha to expect
# branchcode and categorycode need to be valid
-use strict;
-use warnings;
+use Modern::Perl;
use C4::Auth;
use C4::Output;
use C4::Context;
-use C4::Branch qw/GetBranchesLoop GetBranchName/;
use C4::Members;
use C4::Members::Attributes qw(:all);
use C4::Members::AttributeTypes;
use Koha::Patrons;
use Koha::DateUtils;
use Koha::Token;
+use Koha::Libraries;
use Koha::Patron::Categories;
+use Koha::List::Patron;
use Text::CSV;
# Text::CSV::Unicode, even in binary mode, fails to parse lines with these diacriticals:
# č
use CGI qw ( -utf8 );
-# use encoding 'utf8'; # don't do this
-use Digest::MD5 qw(md5_base64);
my (@errors, @feedback);
my $extended = C4::Context->preference('ExtendedPatronAttributes');
debug => 1,
});
-# get the branches and pass them to the template
-my $branches = GetBranchesLoop();
-$template->param( branches => $branches ) if ( $branches );
# get the patron categories and pass them to the template
my @patron_categories = Koha::Patron::Categories->search_limited({}, {order_by => ['description']});
$template->param( categories => \@patron_categories );
}
my $overwrite_cardnumber = $input->param('overwrite_cardnumber');
+#create a patronlist
+my $createpatronlist = $input->param('createpatronlist') || 0;
+my $dt = dt_from_string();
+my $timestamp = $dt->ymd('-').' '.$dt->hms(':');
+my $patronlistname = $uploadborrowers . ' (' . $timestamp .')';
+
$template->param( SCRIPT_NAME => '/cgi-bin/koha/tools/import_borrowers.pl' );
if ( $uploadborrowers && length($uploadborrowers) > 0 ) {
die "Wrong CSRF token"
unless Koha::Token->new->check_csrf({
- id => C4::Context->userenv->{id},
- secret => md5_base64( C4::Context->config('pass') ),
+ session_id => scalar $input->cookie('CGISESSID'),
token => scalar $input->param('csrf_token'),
});
foreach (keys %$uploadinfo) {
push @feedback, {feedback=>1, name=>$_, value=>$uploadinfo->{$_}, $_=>$uploadinfo->{$_}};
}
+
my $imported = 0;
+ my @imported_borrowers;
my $alreadyindb = 0;
my $overwritten = 0;
my $invalid = 0;
}
push @feedback, {feedback=>1, name=>'headerrow', value=>join(', ', @csvcolumns)};
- my $today_iso = output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' });
+ my $today = output_pref;
my @criticals = qw(surname branchcode categorycode); # there probably should be others
my @bad_dates; # I've had a few.
LINE: while ( my $borrowerline = <$handle> ) {
}
if ($borrower{branchcode}) {
push @missing_criticals, {key=>'branchcode', line=>$. , lineraw=>$borrowerline, value=>$borrower{branchcode}, branch_map=>1}
- unless GetBranchName($borrower{branchcode});
+ unless Koha::Libraries->find($borrower{branchcode});
} else {
push @missing_criticals, {key=>'branchcode', line=>$. , lineraw=>$borrowerline};
}
push @missing_criticals, {key=>$_, line=>$. , lineraw=>$borrowerline, bad_date=>1};
}
}
- $borrower{dateenrolled} = $today_iso unless $borrower{dateenrolled};
- $borrower{dateexpiry} = GetExpiryDate($borrower{categorycode},$borrower{dateenrolled}) unless $borrower{dateexpiry};
+ $borrower{dateenrolled} ||= $today;
+ $borrower{dateexpiry} ||= Koha::Patron::Categories->find( $borrower{categorycode} )->get_expiry_date( $borrower{dateenrolled} );
my $borrowernumber;
my $member;
if ( ($matchpoint eq 'cardnumber') && ($borrower{'cardnumber'}) ) {
- $member = GetMember( 'cardnumber' => $borrower{'cardnumber'} );
- if ($member) {
- $borrowernumber = $member->{'borrowernumber'};
- }
+ $member = Koha::Patrons->find( { cardnumber => $borrower{'cardnumber'} } );
} elsif ( ($matchpoint eq 'userid') && ($borrower{'userid'}) ) {
- $member = GetMember( 'userid' => $borrower{'userid'} );
- if ($member) {
- $borrowernumber = $member->{'borrowernumber'};
- }
+ $member = Koha::Patrons->find( { userid => $borrower{'userid'} } );
} elsif ($extended) {
if (defined($matchpoint_attr_type)) {
foreach my $attr (@$patron_attributes) {
}
}
+ if ($member) {
+ $member = $member->unblessed;
+ $borrowernumber = $member->{'borrowernumber'};
+ } else {
+ $member = {};
+ }
+
if ( C4::Members::checkcardnumber( $borrower{cardnumber}, $borrowernumber ) ) {
push @errors, {
invalid_cardnumber => 1,
$imported++;
$template->param('lastimported'=>$borrower{'surname'}.' / '.$borrowernumber);
+ push @imported_borrowers, $borrowernumber; #for patronlist
} else {
$invalid++;
push @errors, {unknown_error => 1};
}
}
}
+
+ if ( $imported && $createpatronlist ) {
+ my $patronlist = AddPatronList({ name => $patronlistname });
+ AddPatronsToList({ list => $patronlist, borrowernumbers => \@imported_borrowers });
+ $template->param('patronlistname' => $patronlistname);
+ }
+
(@errors ) and $template->param( ERRORS=>\@errors );
(@feedback) and $template->param(FEEDBACK=>\@feedback);
$template->param(
$template->param(
csrf_token => Koha::Token->new->generate_csrf(
- { id => C4::Context->userenv->{id},
- secret => md5_base64( C4::Context->config('pass') ),
- }
+ { session_id => scalar $input->cookie('CGISESSID'), }
),
);