Bugzilla – Attachment 121886 Details for
Bug 27920
Add ability to update patron expiration dates when importing patrons
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 27920: Add ability to update patron expiration dates when importing patrons
Bug-27920-Add-ability-to-update-patron-expiration-.patch (text/plain), 11.20 KB, created by
Kyle M Hall (khall)
on 2021-06-12 13:41:10 UTC
(
hide
)
Description:
Bug 27920: Add ability to update patron expiration dates when importing patrons
Filename:
MIME Type:
Creator:
Kyle M Hall (khall)
Created:
2021-06-12 13:41:10 UTC
Size:
11.20 KB
patch
obsolete
>From cece0e0d074236a6b60f5218dcdf404c068db35e Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Wed, 10 Mar 2021 13:43:32 -0500 >Subject: [PATCH] Bug 27920: Add ability to update patron expiration dates when > importing patrons > >Some libraries need to recalculate a patron's expiration date any time they are updated via a patron import from file. > >Test Plan: >1) Apply this patch >2) prove t/db_dependent/Koha/Patrons/Import.t > >Signed-off-by: David Nind <david@davidnind.com> >--- > Koha/Patrons/Import.pm | 23 ++++++++++++------- > .../prog/en/modules/tools/import_borrowers.tt | 12 +++++++++- > misc/import_patrons.pl | 16 ++++++++++++- > t/db_dependent/Koha/Patrons/Import.t | 10 ++++++-- > tools/import_borrowers.pl | 4 ++++ > 5 files changed, 53 insertions(+), 12 deletions(-) > >diff --git a/Koha/Patrons/Import.pm b/Koha/Patrons/Import.pm >index 4904284d76..1be6d65603 100644 >--- a/Koha/Patrons/Import.pm >+++ b/Koha/Patrons/Import.pm >@@ -68,13 +68,15 @@ sub import_patrons { > my $handle = $params->{file}; > unless( $handle ) { carp('No file handle passed in!'); return; } > >- my $matchpoint = $params->{matchpoint}; >- my $defaults = $params->{defaults}; >- my $preserve_fields = $params->{preserve_fields}; >- my $ext_preserve = $params->{preserve_extended_attributes}; >- my $overwrite_cardnumber = $params->{overwrite_cardnumber}; >- my $overwrite_passwords = $params->{overwrite_passwords}; >- my $dry_run = $params->{dry_run}; >+ my $matchpoint = $params->{matchpoint}; >+ my $defaults = $params->{defaults}; >+ my $preserve_fields = $params->{preserve_fields}; >+ my $update_dateexpiry = $params->{update_dateexpiry}; >+ my $update_dateexpiry_from_today = $params->{update_dateexpiry_from_today}; >+ my $ext_preserve = $params->{preserve_extended_attributes}; >+ my $overwrite_cardnumber = $params->{overwrite_cardnumber}; >+ my $overwrite_passwords = $params->{overwrite_passwords}; >+ my $dry_run = $params->{dry_run}; > my $extended = C4::Context->preference('ExtendedPatronAttributes'); > my $set_messaging_prefs = C4::Context->preference('EnhancedMessagingPreferences'); > >@@ -168,7 +170,8 @@ sub import_patrons { > > # Default date enrolled and date expiry if not already set. > $borrower{dateenrolled} = $self->today_iso() unless $borrower{dateenrolled}; >- $borrower{dateexpiry} = Koha::Patron::Categories->find( $borrower{categorycode} )->get_expiry_date( $borrower{dateenrolled} ) unless $borrower{dateexpiry}; >+ my $expiration_start_date = $update_dateexpiry_from_today ? dt_from_string : $borrower{dateenrolled}; >+ $borrower{dateexpiry} = Koha::Patron::Categories->find( $borrower{categorycode} )->get_expiry_date( $expiration_start_date ) unless $borrower{dateexpiry}; > > my $borrowernumber; > my ( $member, $patron ); >@@ -278,6 +281,10 @@ sub import_patrons { > } > } > >+ my $expiration_start_date = $update_dateexpiry_from_today ? dt_from_string : $borrower{dateenrolled}; >+ $borrower{dateexpiry} = Koha::Patron::Categories->find( $borrower{categorycode} ) >+ ->get_expiry_date( $expiration_start_date ) if $update_dateexpiry; >+ > my $patron = Koha::Patrons->find( $borrowernumber ); > try { > $schema->storage->txn_do(sub { >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tt >index 153ffd3a09..d96a25d253 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tt >@@ -322,7 +322,15 @@ > <li> > <input class="overwrite_passwords" type="checkbox" id="overwrite_passwords" name="overwrite_passwords" disabled/> > <label class="overwrite_passwords" for="overwrite_passwords">Replace patron passwords with those in the file (blank passwords will be ignored)</label> >- </li >+ </li> >+ <li> >+ <input class="update_dateexpiry" type="checkbox" id="update_dateexpiry" name="update_dateexpiry" disabled/> >+ <label class="update_dateexpiry" for="update_dateexpiry">Update existing patron expiration dates.</label> >+ </li> >+ <li> >+ <input class="update_dateexpiry_from_today" type="checkbox" id="update_dateexpiry_from_today" name="update_dateexpiry_from_today" disabled/> >+ <label class="update_dateexpiry_from_today" for="update_dateexpiry_from_today">Update patron's expiration date based on the current date instead of the patron's enrollment date</label> >+ </li> > </ul> > </li> > </ol> >@@ -426,9 +434,11 @@ you can supply dates in ISO format (e.g., '2010-10-28'). > > $("#overwrite_cardnumberno").click(function(){ > $("#overwrite_passwords").prop('checked',false).prop('disabled',true); >+ $("#update_dateexpiry").prop('checked',false).prop('disabled',true); > }); > $("#overwrite_cardnumberyes").click(function(){ > $("#overwrite_passwords").prop('disabled',false); >+ $("#update_dateexpiry").prop('disabled',false); > }); > </script> > [% END %] >diff --git a/misc/import_patrons.pl b/misc/import_patrons.pl >index ee0d8a92c9..ac0dcb721b 100755 >--- a/misc/import_patrons.pl >+++ b/misc/import_patrons.pl >@@ -36,6 +36,8 @@ my $confirm; > my $verbose = 0; > my $help; > my @preserve_fields; >+my $update_dateexpiry; >+my $update_dateexpiry_from_today; > > GetOptions( > 'c|confirm' => \$confirm, >@@ -44,6 +46,8 @@ GetOptions( > 'd|default=s' => \%defaults, > 'o|overwrite' => \$overwrite_cardnumber, > 'op|overwrite_passwords' => \$overwrite_passwords, >+ 'ue|update-expiration' => \$update_dateexpiry, >+ 'et|expiration-from-today' => \$update_dateexpiry_from_today, > 'p|preserve-extended-attributes' => \$ext_preserve, > 'pf|preserve-field=s' => \@preserve_fields, > 'v|verbose+' => \$verbose, >@@ -68,6 +72,8 @@ my $return = $Import->import_patrons( > overwrite_passwords => $overwrite_passwords, > preserve_extended_attributes => $ext_preserve, > preserve_fields => \@preserve_fields, >+ update_dateexpiry => $update_dateexpiry >+ update_dateexpiry_from_today => $update_dateexpiry_from_today > dry_run => !$confirm, > } > ); >@@ -107,7 +113,7 @@ import_patrons.pl - CLI script to import patrons data into Koha > > =head1 SYNOPSIS > >-import_patrons.pl --file /path/to/patrons.csv --matchpoint cardnumber --confirm [--default branchcode=MPL] [--overwrite] [--preserve_field <column>] [--preserve-extended-attributes] [--verbose] >+import_patrons.pl --file /path/to/patrons.csv --matchpoint cardnumber --confirm [--default branchcode=MPL] [--overwrite] [--preserve_field <column>] [--preserve-extended-attributes] [--update-expiration] [--verbose] > > =head1 OPTIONS > >@@ -145,6 +151,14 @@ Overwrite existing patrons with new data if a match is found > > Retain extended patron attributes for existing patrons being overwritten > >+=item B<-ue|--update-expiration> >+ >+If a matching patron is found, extend the expiration date of their account using the patron's enrollment date as the base >+ >+=item B<-et|--expiration-from-today> >+ >+If a matching patron is found, extend the expiration date of their account using the patron's enrollment date as the base >+ > =item B<-v|--verbose> > > Be verbose >diff --git a/t/db_dependent/Koha/Patrons/Import.t b/t/db_dependent/Koha/Patrons/Import.t >index 0d1eb8ff1e..46ac7701bc 100755 >--- a/t/db_dependent/Koha/Patrons/Import.t >+++ b/t/db_dependent/Koha/Patrons/Import.t >@@ -18,7 +18,7 @@ > # along with Koha; if not, see <http://www.gnu.org/licenses>. > > use Modern::Perl; >-use Test::More tests => 173; >+use Test::More tests => 175; > use Test::Warn; > use Test::Exception; > use Encode qw( encode_utf8 ); >@@ -28,6 +28,7 @@ use utf8; > use Test::MockModule; > use Koha::Database; > use Koha::Patron::Relationships; >+use Koha::DateUtils qw(dt_from_string); > > use File::Temp qw(tempfile tempdir); > my $temp_dir = tempdir('Koha_patrons_import_test_XXXX', CLEANUP => 1, TMPDIR => 1); >@@ -189,7 +190,10 @@ is($result_3a->{overwritten}, 1, 'Got the expected 1 overwritten result from imp > # overwrite but firstname is not > my $filename_3c = make_csv($temp_dir, $csv_headers, $csv_one_line_b); > open(my $handle_3c, "<", $filename_3c) or die "cannot open < $filename_3: $!"; >-my $params_3c = { file => $handle_3c, matchpoint => 'cardnumber', overwrite_cardnumber => 1, preserve_fields => [ 'firstname' ] }; >+my $params_3c = { file => $handle_3c, matchpoint => 'cardnumber', overwrite_cardnumber => 1, preserve_fields => [ 'firstname' ], update_dateexpiry => 1, update_dateexpiry_from_today => 1 }; >+ >+my $patron_3 = Koha::Patrons->find({ cardnumber => '1000' }); >+is( $patron_3->dateexpiry, '2015-07-01', "Expiration date is correct with update_dateexpiry = false" ); > > # When ... > my $result_3c; >@@ -211,6 +215,8 @@ is($result_3c->{invalid}, 0, 'Got the expected 0 invalid result from import_patr > is($result_3c->{overwritten}, 1, 'Got the expected 1 overwritten result from import_patrons that matched'); > > my $patron_3c = Koha::Patrons->find({ cardnumber => '1000' }); >+is( $patron_3c->dateexpiry, dt_from_string->add( months => 99, end_of_month => 'limit' )->ymd, "Expiration date is correct with update_dateexpiry = true" ); >+ > is( $patron_3c->surname, "Nancy2", "Surname field is preserved from original" ); > is( $patron_3c->firstname, "Jenkins", "Firstname field is overwritten" ); > >diff --git a/tools/import_borrowers.pl b/tools/import_borrowers.pl >index d22104f27d..5207a6af91 100755 >--- a/tools/import_borrowers.pl >+++ b/tools/import_borrowers.pl >@@ -120,6 +120,8 @@ if ( $uploadborrowers && length($uploadborrowers) > 0 ) { > my $handle = $input->upload('uploadborrowers'); > my %defaults = $input->Vars; > my $overwrite_passwords = defined $input->param('overwrite_passwords') ? 1 : 0; >+ my $update_dateexpiry = defined $input->param('update_dateexpiry') ? 1 : 0; >+ my $update_dateexpiry_from_today = defined $input->param('update_dateexpiry_from_today') ? 1 : 0; > my $return = $Import->import_patrons( > { > file => $handle, >@@ -129,6 +131,8 @@ if ( $uploadborrowers && length($uploadborrowers) > 0 ) { > overwrite_passwords => $overwrite_passwords, > preserve_extended_attributes => scalar $input->param( 'ext_preserve' ) || 0, > preserve_fields => \@preserve_fields, >+ update_dateexpiry => $update_dateexpiry, >+ update_dateexpiry_from_today => $update_dateexpiry_from_today, > } > ); > >-- >2.30.1 (Apple Git-130)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 27920
:
118079
|
119234
|
120940
|
120951
|
121885
|
121886
|
138524
|
139017
|
139018
|
139019
|
142176
|
142178
|
142738
|
142739
|
142740
|
142741
|
142742
|
142743
|
142744