@@ -, +, @@ borrowers.borrowernumber field to the patron who last returned this item. details page. --- C4/Circulation.pm | 4 ++ Koha/Template/Plugin/KohaBorrowers.pm | 44 ++++++++++++++++++++ catalogue/moredetail.pl | 1 + installer/data/mysql/kohastructure.sql | 4 ++ installer/data/mysql/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 16 +++++++ .../prog/en/modules/admin/preferences/opac.pref | 7 +++ .../prog/en/modules/catalogue/moredetail.tt | 2 + 8 files changed, 79 insertions(+), 0 deletions(-) create mode 100644 Koha/Template/Plugin/KohaBorrowers.pm --- a/C4/Circulation.pm +++ a/C4/Circulation.pm @@ -2001,6 +2001,10 @@ sub MarkIssueReturned { WHERE borrowernumber = ? AND itemnumber = ?"); $sth_del->execute($borrowernumber, $itemnumber); + + if ( C4::Context->preference('StoreLastBorrower') ) { + $dbh->do("UPDATE items SET last_returned_by = ? WHERE itemnumber = ?", undef, ( $borrowernumber, $itemnumber ) ); + } } =head2 _debar_user_on_return --- a/Koha/Template/Plugin/KohaBorrowers.pm +++ a/Koha/Template/Plugin/KohaBorrowers.pm @@ -0,0 +1,44 @@ +package Koha::Template::Plugin::KohaBorrowers; + +# Copyright ByWater Solutions 2013 + +# 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 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# 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. + +use Modern::Perl; + +use Template::Plugin; +use base qw( Template::Plugin ); + +use C4::Context; + +=pod + +This plugin contains TT helper functions related to borrowers + +=cut + +sub BorrowernumberToCardnumber { + my ( $self, $borrowernumber ) = @_; + + my $sql = "SELECT cardnumber FROM borrowers WHERE borrowernumber = ?"; + my $sth = C4::Context->dbh->prepare( $sql ); + $sth->execute( $borrowernumber ); + my ( $cardnumber ) = $sth->fetchrow_array(); + + return $cardnumber; +} + +1; --- a/catalogue/moredetail.pl +++ a/catalogue/moredetail.pl @@ -212,6 +212,7 @@ $template->param( z3950_search_params => C4::Search::z3950_search_args(GetBiblioData($biblionumber)), subtitle => $subtitle, hidepatronname => $hidepatronname, + StoreLastBorrower => C4::Context->preference('StoreLastBorrower'), ); $template->param(ONLY_ONE => 1) if ( $itemnumber && $showncount != @items ); --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -862,6 +862,7 @@ CREATE TABLE `deleteditems` ( `replacementpricedate` date default NULL, -- the date the price is effective from (MARC21 952$w) `datelastborrowed` date default NULL, -- the date the item was last checked out `datelastseen` date default NULL, -- the date the item was last see (usually the last time the barcode was scanned or inventory was done) + `last_returned_by` int(11) DEFAULT NULL, -- the last borrower to return an item `stack` tinyint(1) default NULL, `notforloan` tinyint(1) NOT NULL default 0, -- authorized value defining why this item is not for loan (MARC21 952$7) `damaged` tinyint(1) NOT NULL default 0, -- authorized value defining this item as damaged (MARC21 952$4) @@ -899,6 +900,7 @@ CREATE TABLE `deleteditems` ( KEY `delhomebranch` (`homebranch`), KEY `delholdingbranch` (`holdingbranch`), KEY `itype_idx` (`itype`) + KEY `del_last_returned_by` (`last_returned_by`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- @@ -1154,6 +1156,7 @@ CREATE TABLE `items` ( -- holdings/item information `replacementpricedate` date default NULL, -- the date the price is effective from (MARC21 952$w) `datelastborrowed` date default NULL, -- the date the item was last checked out/issued `datelastseen` date default NULL, -- the date the item was last see (usually the last time the barcode was scanned or inventory was done) + `last_returned_by` int(11) DEFAULT NULL, -- the last borrower to return an item `stack` tinyint(1) default NULL, `notforloan` tinyint(1) NOT NULL default 0, -- authorized value defining why this item is not for loan (MARC21 952$7) `damaged` tinyint(1) NOT NULL default 0, -- authorized value defining this item as damaged (MARC21 952$4) @@ -1193,6 +1196,7 @@ CREATE TABLE `items` ( -- holdings/item information KEY `items_location` (`location`), KEY `items_ccode` (`ccode`), KEY `itype_idx` (`itype`), + KEY `last_returned_by` (`last_returned_by`), CONSTRAINT `items_ibfk_1` FOREIGN KEY (`biblioitemnumber`) REFERENCES `biblioitems` (`biblioitemnumber`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `items_ibfk_2` FOREIGN KEY (`homebranch`) REFERENCES `branches` (`branchcode`) ON UPDATE CASCADE, CONSTRAINT `items_ibfk_3` FOREIGN KEY (`holdingbranch`) REFERENCES `branches` (`branchcode`) ON UPDATE CASCADE --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -430,3 +430,4 @@ INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) V INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('CalculateFinesOnReturn','1','Switch to control if overdue fines are calculated on return or not', '', 'YesNo'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AcqWarnOnDuplicateInvoice','0','Warn librarians when they try to create a duplicate invoice', '', 'YesNo'); INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('AllowTooManyOverride', '1', 'If on, allow staff to override and check out items when the patron has reached the maximum number of allowed checkouts', '', 'YesNo'); +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'); --- a/installer/data/mysql/updatedatabase.pl +++ a/installer/data/mysql/updatedatabase.pl @@ -7067,6 +7067,22 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "3.13.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("ALTER TABLE items ADD last_returned_by INT( 11 ) NULL DEFAULT NULL AFTER datelastseen"); + $dbh->do("ALTER TABLE items ADD INDEX ( last_returned_by )"); + $dbh->do("ALTER TABLE items ADD FOREIGN KEY ( last_returned_by ) REFERENCES borrowers ( borrowernumber )"); + + $dbh->do("ALTER TABLE deleteditems ADD last_returned_by INT( 11 ) NULL DEFAULT NULL AFTER datelastseen"); + $dbh->do("ALTER TABLE deleteditems ADD INDEX ( last_returned_by )"); + $dbh->do("ALTER TABLE deleteditems ADD FOREIGN KEY ( last_returned_by ) REFERENCES borrowers ( borrowernumber )"); + + $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 ( Add syspref StoreLastBorrower )\n"; + SetVersion ($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -551,6 +551,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: - --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt @@ -1,3 +1,4 @@ +[% USE KohaBorrowers %] [% INCLUDE 'doc-head-open.inc' %] Koha › Catalog › Item details for [% title %] [% FOREACH subtitl IN subtitle %] [% subtitl.subfield %][% END %] [% INCLUDE 'doc-head-close.inc' %] @@ -201,6 +202,7 @@
  • Last seen:[% IF ( ITEM_DAT.datelastseen ) %][% ITEM_DAT.datelastseen | $KohaDates %] [%END %] 
  • Last borrowed:[% IF (ITEM_DAT.datelastborrowed ) %][% ITEM_DAT.datelastborrowed | $KohaDates %][% END %] 
  • + [% IF ( StoreLastBorrower && ITEM_DAT.last_returned_by ) %]
  • Last returned by: [% KohaBorrowers.BorrowernumberToCardnumber( ITEM_DAT.last_returned_by ) %] 
  • [% END %] [% IF ( ITEM_DAT.card0 ) %]
  • Last borrower: [% ITEM_DAT.card0 %] 
  • [% END %] [% IF ( ITEM_DAT.card1 ) %]
  • Previous borrower: [% ITEM_DAT.card1 %] 
  • [% END %] [% IF ( ITEM_DAT.card2 ) %]
  • Previous borrower: [% ITEM_DAT.card2 %] 
  • [% END %] --