From ab8da470283e10b4d3c70199ae27533eeeab2fc4 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 5 Mar 2014 11:24:58 -0500 Subject: [PATCH] [SIGNED OFF] Bug 9011 - Add the ability to store the last patron to return an item Signed-off-by: Nick Clemens --- C4/Circulation.pm | 16 ++++++++++++++-- installer/data/mysql/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 8 ++++++++ .../prog/en/modules/admin/preferences/opac.pref | 7 +++++++ t/db_dependent/Circulation_anonymization.t | 19 +++++++++++++++++-- 5 files changed, 47 insertions(+), 4 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 480a7a2..44b2253 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -3788,8 +3788,20 @@ sub AnonymizeItemIssueHistory { { prefetch => 'borrower', order_by => { -desc => 'issue_id' } } ); - my $oi = $old_issues_rs->next(); - if ( $oi->borrower()->privacy() == 2 ) { + my $oi; + if ( C4::Context->preference('StoreLastBorrower') ) { + + # If storing last borrower, skip the latest old_issue for this item + $old_issues_rs->next(); + $oi = $old_issues_rs->next(); + } + else { + + # If *not* storing last borrower, use the latest old_issue for this item + $oi = $old_issues_rs->next(); + } + + if ( $oi && $oi->borrower()->privacy() == 2 ) { $oi->set_column( 'borrowernumber', $a ); $oi->update(); } diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 7eb08a8..98d6bb2 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -374,6 +374,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('StaffDetailItemSelection', '1', NULL, 'Enable item selection in record detail page', 'YesNo'), ('StaffSerialIssueDisplayCount','3','','Number of serial issues to display per subscription in the Staff client','Integer'), ('StaticHoldsQueueWeight','0',NULL,'Specify a list of library location codes separated by commas -- the list of codes will be traversed and weighted with first values given higher weight for holds fulfillment -- alternatively, if RandomizeHoldsQueueWeight is set, the list will be randomly selective','Integer'), +('StoreLastBorrower','0','','If ON, the last borrower to return an item will be stored in items.last_returned_by','YesNo'), ('SubfieldsToUseWhenPrefill','','','Define a list of subfields to use when prefilling items (separated by space)','Free'), ('SubscriptionDuplicateDroppedInput','','','List of fields which must not be rewritten when a subscription is duplicated (Separated by pipe |)','Free'), ('SubscriptionHistory','simplified','simplified|full','Define the display preference for serials issue history in OPAC','Choice'), diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index de77bf3..b73027f 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -8613,6 +8613,14 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "3.13.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('StoreLastBorrower','0','','If ON, the last borrower to return an item will be stored in items.last_returned_by','YesNo')"); + + print "Upgrade to $DBversion done (Bug 9011 - Add the ability to store the last patron to return an item)\n"; + SetVersion ($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index 739abb3..5518714 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -589,6 +589,13 @@ OPAC: track: "Track" no: "Don't track" - links that patrons click on + - + - pref: StoreLastBorrower + default: 0 + choices: + yes: Store + no: "Don't store" + - the last patron to return an item. This setting is independent of opacreadinghistory/AnonymousPatron. Shelf Browser: - diff --git a/t/db_dependent/Circulation_anonymization.t b/t/db_dependent/Circulation_anonymization.t index caec6b5..d886bf1 100644 --- a/t/db_dependent/Circulation_anonymization.t +++ b/t/db_dependent/Circulation_anonymization.t @@ -6,7 +6,7 @@ use C4::Context; use C4::Circulation; use Koha::Database; -use Test::More tests => 4; +use Test::More tests => 6; BEGIN { use_ok('C4::Circulation'); @@ -132,6 +132,8 @@ my $userenv = C4::Context->userenv #Begin Tests +C4::Context->set_preference( 'StoreLastBorrower', 0 ); + AddIssue( $borrower_1, 'barcode_1' ); AddReturn('barcode_1'); my $old_issue = @@ -141,13 +143,26 @@ ok( $old_issue->borrower()->borrowernumber() == $anonymous_patron->borrowernumbe my $next_issue_id = $old_issue->issue_id() + 1; - AddIssue( $borrower_2, 'barcode_1' ); AddReturn('barcode_1'); $old_issue = $schema->resultset('OldIssue')->find( $next_issue_id ); ok( $old_issue->borrower()->borrowernumber() == $borrower2->borrowernumber(), "Patron with privacy of 1 not anonymized" ); +C4::Context->set_preference( 'StoreLastBorrower', 1 ); + +$next_issue_id = $old_issue->issue_id() + 1; + +AddIssue( $borrower_1, 'barcode_1' ); +AddReturn('barcode_1'); +$old_issue = + $schema->resultset('OldIssue')->find( $next_issue_id ); +ok( $old_issue->borrower()->borrowernumber() == $borrower1->borrowernumber(), "Patron with privacy of 2 not anonymized with StoreLastBorrower enabled" ); +AddIssue( $borrower_2, 'barcode_1' ); +AddReturn('barcode_1'); +$old_issue = + $schema->resultset('OldIssue')->find( $next_issue_id ); +ok( $old_issue->borrower()->borrowernumber() == $anonymous_patron->borrowernumber(), "Patron with privacy of 2 anonymized after next return with StoreLastBorrower enabled" ); #End transaction $dbh->rollback; -- 1.7.10.4