Bugzilla – Attachment 33031 Details for
Bug 10860
On-site checkouts (was In-House Use)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 10860: In-House Use
Bug-10860-In-House-Use.patch (text/plain), 41.59 KB, created by
Kyle M Hall (khall)
on 2014-10-31 10:22:23 UTC
(
hide
)
Description:
Bug 10860: In-House Use
Filename:
MIME Type:
Creator:
Kyle M Hall (khall)
Created:
2014-10-31 10:22:23 UTC
Size:
41.59 KB
patch
obsolete
>From abdf59222558a55f12fc6d80aaf58b77c741e747 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@biblibre.com> >Date: Wed, 18 Sep 2013 14:16:49 +0200 >Subject: [PATCH] Bug 10860: In-House Use > >This patch implements the In-House Use feature for Koha. > >It adds: >- 2 new sysprefs: > 'In-House Use' to enable/disable this feature > 'In-House Use Forced' to enable/disable the feature for *all* users. >- 2 new columns issues.inhouse_use and old_issues.inhouse_use >- Datatable on the circulation history pages (readingrec) at the OPAC > and the intranet. > >A new checkbox in the Circulation tab. If checked, the issue become a >in-house use (in the statistics and issues tables). >When you check it, the due date changes to the today date. > >The syspref "In-House Use Force" allows to force the in-house use to >permit the checkout even if the borrower is debarred or others problems. > >In the issue table, a new string (in red) marks the issue as "in-house use". > >The circulation history contains 3 tabs : "all", "checkout" and >"in-house use" (OPAC and intranet). > >The cronjob script: >If AutomaticItemReturn if off, a library would like not to do a transit >operation manually. This script (to launch each night) do returns >for a specific branches. > >Test plan: >1/ Execute the updatedatabase entry >2/ Enable the 'In-House Use' pref. >3/ Checkout a biblio for a patron and check the 'in-house use' checkbox. >4/ Check that the due date is the today date (with 23:59) and is not modifiable. >5/ Click on the check out button and check that the new check out >appears in the table bellow with the "(In-house use)" string. >6/ Go on the circulation history pages (readingrec and opac-readingrec) >and try the 3 tabs. In the last one, your last checkout should appear. >7/ Check in. >8/ Check readingrec pages. >9/ Choose a debarred patron and check that you cannot checkout a biblio >for him. >10/ Switch on the 'In-House Use Forced' pref >11/ You are now allowed to checkout a biblio for the debarred patron. > >Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz> >--- > C4/Circulation.pm | 16 +- > C4/Items.pm | 6 + > C4/Stats.pm | 2 +- > circ/circulation.pl | 27 ++- > installer/data/mysql/kohastructure.sql | 2 + > installer/data/mysql/sysprefs.sql | 2 + > installer/data/mysql/updatedatabase.pl | 22 +++ > .../intranet-tmpl/prog/en/css/staff-global.css | 14 ++ > .../intranet-tmpl/prog/en/includes/strings.inc | 1 + > koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js | 19 ++- > .../intranet-tmpl/prog/en/js/pages/circulation.js | 4 + > .../en/modules/admin/preferences/circulation.pref | 12 ++ > .../prog/en/modules/catalogue/detail.tt | 8 + > .../prog/en/modules/circ/circulation.tt | 55 +++++- > .../prog/en/modules/members/readingrec.tt | 127 ++++++++----- > koha-tmpl/opac-tmpl/bootstrap/css/datatables.css | 194 ++++++++++---------- > .../bootstrap/en/includes/item-status.inc | 8 + > koha-tmpl/opac-tmpl/bootstrap/js/datatables.js | 2 +- > svc/checkouts | 3 + > 19 files changed, 344 insertions(+), 180 deletions(-) > >diff --git a/C4/Circulation.pm b/C4/Circulation.pm >index 76b6652..5caa929 100644 >--- a/C4/Circulation.pm >+++ b/C4/Circulation.pm >@@ -1188,9 +1188,13 @@ AddIssue does the following things : > =cut > > sub AddIssue { >- my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode, $auto_renew ) = @_; >+ my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode, $params ) = @_; >+ my $inhouse_use = $params->{inhouse_use}; >+ my $auto_renew = $params->{auto_renew}; > my $dbh = C4::Context->dbh; >- my $barcodecheck=CheckValidBarcode($barcode); >+ my $barcodecheck=CheckValidBarcode($barcode); >+ $inhouse_use = ( $inhouse_use ? 1 : 0 ); >+ > if ($datedue && ref $datedue ne 'DateTime') { > $datedue = dt_from_string($datedue); > } >@@ -1264,8 +1268,8 @@ sub AddIssue { > my $sth = > $dbh->prepare( > "INSERT INTO issues >- (borrowernumber, itemnumber,issuedate, date_due, branchcode, auto_renew) >- VALUES (?,?,?,?,?,?)" >+ (borrowernumber, itemnumber,issuedate, date_due, branchcode, inhouse_use, auto_renew) >+ VALUES (?,?,?,?,?,?,?)" > ); > unless ($datedue) { > my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'}; >@@ -1273,12 +1277,14 @@ sub AddIssue { > > } > $datedue->truncate( to => 'minute'); >+ > $sth->execute( > $borrower->{'borrowernumber'}, # borrowernumber > $item->{'itemnumber'}, # itemnumber > $issuedate->strftime('%Y-%m-%d %H:%M:00'), # issuedate > $datedue->strftime('%Y-%m-%d %H:%M:00'), # date_due > C4::Context->userenv->{'branch'}, # branchcode >+ $inhouse_use, > $auto_renew ? 1 : 0 # automatic renewal > ); > if ( C4::Context->preference('ReturnToShelvingCart') ) { ## ReturnToShelvingCart is on, anything issued should be taken off the cart. >@@ -1320,7 +1326,7 @@ sub AddIssue { > # Record the fact that this book was issued. > &UpdateStats({ > branch => C4::Context->userenv->{'branch'}, >- type => 'issue', >+ type => ( $inhouse_use ? 'inhouse_use' : 'issue' ), > amount => $charge, > other => ($sipmode ? "SIP-$sipmode" : ''), > itemnumber => $item->{'itemnumber'}, >diff --git a/C4/Items.pm b/C4/Items.pm >index c23b272..6085960 100644 >--- a/C4/Items.pm >+++ b/C4/Items.pm >@@ -1299,6 +1299,10 @@ sub GetItemsInfo { > holding.branchname, > holding.opac_info as holding_branch_opac_info, > home.opac_info as home_branch_opac_info >+ "; >+ $query .= ", issues.inhouse_use" >+ if C4::Context->preference("In-House Use"); >+ $query .= " > FROM items > LEFT JOIN branches AS holding ON items.holdingbranch = holding.branchcode > LEFT JOIN branches AS home ON items.homebranch=home.branchcode >@@ -1306,6 +1310,8 @@ sub GetItemsInfo { > LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber > LEFT JOIN itemtypes ON itemtypes.itemtype = " > . (C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype'); >+ $query .= " LEFT JOIN issues ON issues.itemnumber = items.itemnumber" >+ if C4::Context->preference("In-House Use"); > $query .= " WHERE items.biblionumber = ? ORDER BY home.branchname, items.enumchron, LPAD( items.copynumber, 8, '0' ), items.dateaccessioned DESC" ; > my $sth = $dbh->prepare($query); > $sth->execute($biblionumber); >diff --git a/C4/Stats.pm b/C4/Stats.pm >index a1098ae..250c48c 100644 >--- a/C4/Stats.pm >+++ b/C4/Stats.pm >@@ -87,7 +87,7 @@ sub UpdateStats { > return () if ! defined $params; > # change these arrays if new types of transaction or new parameters are allowed > my @allowed_keys = qw (type branch amount other itemnumber itemtype borrowernumber accountno ccode); >- my @allowed_circulation_types = qw (renew issue localuse return); >+ my @allowed_circulation_types = qw (renew issue localuse return inhouse_use); > my @allowed_accounts_types = qw (writeoff payment); > my @circulation_mandatory_keys = qw (type branch borrowernumber itemnumber ccode itemtype); > my @accounts_mandatory_keys = qw (type branch borrowernumber amount); >diff --git a/circ/circulation.pl b/circ/circulation.pl >index 8f79f71..6bd887d 100755 >--- a/circ/circulation.pl >+++ b/circ/circulation.pl >@@ -25,6 +25,8 @@ > use strict; > use warnings; > use CGI; >+use DateTime; >+use DateTime::Duration; > use C4::Output; > use C4::Print; > use C4::Auth qw/:DEFAULT get_session/; >@@ -320,13 +322,15 @@ if ($barcode) { > } > } > >- delete $question->{'DEBT'} if ($debt_confirmed); >- foreach my $impossible ( keys %$error ) { >- $template->param( >- $impossible => $$error{$impossible}, >- IMPOSSIBLE => 1 >- ); >- $blocker = 1; >+ unless( $query->param('inhouse_use') and C4::Context->preference("In-House Use Force") ) { >+ delete $question->{'DEBT'} if ($debt_confirmed); >+ foreach my $impossible ( keys %$error ) { >+ $template->param( >+ $impossible => $$error{$impossible}, >+ IMPOSSIBLE => 1 >+ ); >+ $blocker = 1; >+ } > } > if( !$blocker ){ > my $confirm_required = 0; >@@ -342,13 +346,15 @@ if ($barcode) { > $needsconfirmation => $$question{$needsconfirmation}, > getTitleMessageIteminfo => $getmessageiteminfo->{'title'}, > getBarcodeMessageIteminfo => $getmessageiteminfo->{'barcode'}, >- NEEDSCONFIRMATION => 1 >+ NEEDSCONFIRMATION => 1, >+ inhouse_use => $query->param('inhouse_use'), > ); > $confirm_required = 1; > } > } > unless($confirm_required) { >- AddIssue( $borrower, $barcode, $datedue, $cancelreserve, undef, undef, $session->param('auto_renew') ); >+ my $inhouse_use = $query->param('inhouse_use'); >+ AddIssue( $borrower, $barcode, $datedue, $cancelreserve, undef, undef, { inhouse_use => $inhouse_use, auto_renew => $session->param('auto_renew') } ); > $session->clear('auto_renew'); > $inprocess = 1; > } >@@ -579,6 +585,9 @@ $template->param( > export_with_csv_profile => C4::Context->preference("ExportWithCsvProfile"), > canned_bor_notes_loop => $canned_notes, > debarments => GetDebarments({ borrowernumber => $borrowernumber }), >+ todaysdate => dt_from_string()->set(hour => 23)->set(minute => 59), >+ inhouse_use_feature => C4::Context->preference("In-House Use"), >+ inhouse_use_forced => C4::Context->preference("In-House Use Force"), > ); > > output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql >index b135e21..5df2dea 100644 >--- a/installer/data/mysql/kohastructure.sql >+++ b/installer/data/mysql/kohastructure.sql >@@ -1128,6 +1128,7 @@ CREATE TABLE `issues` ( -- information related to check outs or issues > `auto_renew` BOOLEAN default FALSE, -- automatic renewal > `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, -- the date and time this record was last touched > `issuedate` datetime default NULL, -- date the item was checked out or issued >+ `inhouse_use` int(1) NOT NULL default 0, -- in house use flag > KEY `issuesborridx` (`borrowernumber`), > KEY `itemnumber_idx` (`itemnumber`), > KEY `branchcode_idx` (`branchcode`), >@@ -1601,6 +1602,7 @@ CREATE TABLE `old_issues` ( -- lists items that were checked out and have been r > `auto_renew` BOOLEAN default FALSE, -- automatic renewal > `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, -- the date and time this record was last touched > `issuedate` datetime default NULL, -- date the item was checked out or issued >+ `inhouse_use` int(1) NOT NULL default 0, -- in house use flag > KEY `old_issuesborridx` (`borrowernumber`), > KEY `old_issuesitemidx` (`itemnumber`), > KEY `branchcode_idx` (`branchcode`), >diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql >index efd12fd..fb55827 100644 >--- a/installer/data/mysql/sysprefs.sql >+++ b/installer/data/mysql/sysprefs.sql >@@ -147,6 +147,8 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` > ('ImageLimit','5','','Limit images stored in the database by the Patron Card image manager to this number.','Integer'), > ('IncludeSeeFromInSearches','0','','Include see-from references in searches.','YesNo'), > ('IndependentBranches','0',NULL,'If ON, increases security between libraries','YesNo'), >+('In-House use','0','','Enable/Disable the in-house use feature','YesNo'), >+('In-House use Force','0','','Enable/Disable the in-house for all cases (Even if a user is debarred, etc.)','YesNo'), > ('InProcessingToShelvingCart','0','','If set, when any item with a location code of PROC is \'checked in\', it\'s location code will be changed to CART.','YesNo'), > ('INTRAdidyoumean',NULL,NULL,'Did you mean? configuration for the Intranet. Do not change, as this is controlled by /cgi-bin/koha/admin/didyoumean.pl.','Free'), > ('IntranetBiblioDefaultView','normal','normal|marc|isbd|labeled_marc','Choose the default detail view in the staff interface; choose between normal, labeled_marc, marc or isbd','Choice'), >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index 7e54990..e42237a 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -8949,6 +8949,28 @@ if ( CheckVersion($DBversion) ) { > ADD COLUMN cancellationreason TEXT DEFAULT NULL AFTER datecancellationprinted > "); > print "Upgrade to $DBversion done (Bug 7162: Add aqorders.cancellationreason)\n"; >+ SetVersion ($DBversion); >+} >+ >+$DBversion = "3.17.00.XXX"; >+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { >+ $dbh->do(q{ >+ INSERT IGNORE INTO systempreferences >+ (variable,value,explanation,options,type) >+ VALUES('In-House use','0','Enable/Disable the in-house use feature','','YesNo'); >+ }); >+ $dbh->do(q{ >+ INSERT IGNORE INTO systempreferences >+ (variable,value,explanation,options,type) >+ VALUES('In-House use Force','0','Enable/Disable the in-house for all cases (Even if a user is debarred, etc.)','','YesNo'); >+ }); >+ $dbh->do(q{ >+ ALTER TABLE issues ADD COLUMN inhouse_use INT(1) NOT NULL DEFAULT 0 AFTER issuedate; >+ }); >+ $dbh->do(q{ >+ ALTER TABLE old_issues ADD COLUMN inhouse_use INT(1) NOT NULL DEFAULT 0 AFTER issuedate; >+ }); >+ print "Upgrade to $DBversion done (Bug 10860: Add new system preference In-House use + fields [old_]issues.inhouse_use)\n"; > SetVersion($DBversion); > } > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >index 0f67416..a256db3 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >+++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >@@ -2714,3 +2714,17 @@ span.browse-button { > #i18nMenu .dropdown-menu a:focus { > color : #FFF; > } >+ >+.inhouse_use-select { >+ font-size : 85%; >+ font-weight: normal; >+ padding-top : .3em; >+} >+#circ_circulation_issue .inhouse_use-select label, >+.inhouse_use-select label { >+ font-size : inherit; >+ font-weight: normal; >+} >+span.inhouse_use { >+ color: red; >+} >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc >index fd6ee49..eb75ac1 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc >@@ -26,5 +26,6 @@ > var NOT_TRANSFERRED_YET = _("Item hasn't been transferred yet from %s"); > var NO = _("No"); > var YES = _("Yes"); >+ var INHOUSE_USE = _("In-house use"); > //]]> > </script> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js b/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js >index 749a3f7..4c0ba36 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js >+++ b/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js >@@ -215,6 +215,11 @@ $(document).ready(function() { > title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>" > } > >+ var inhouse_use = ''; >+ if ( oObj.inhouse_use == 1 ) { >+ inhouse_use += " <span class='inhouse_use'>(" + INHOUSE_USE + ")</span>"; >+ } >+ > title += " " > + "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=" > + oObj.biblionumber >@@ -224,7 +229,8 @@ $(document).ready(function() { > + oObj.itemnumber > + "'>" > + oObj.barcode >- + "</a>"; >+ + "</a>" >+ + inhouse_use; > > return title; > } >@@ -305,7 +311,7 @@ $(document).ready(function() { > + "<input type='checkbox' class='renew' id='renew_" + oObj.itemnumber + "' name='renew' value='" + oObj.itemnumber +"'/>" > + "</span>"; > >- if ( oObj.renewals_remaining ) { >+ if ( oObj.renewals_remaining && inhouse_use == 0 ) { > content += "<span class='renewals'>(" > + RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed ) > + ")</span>"; >@@ -313,7 +319,6 @@ $(document).ready(function() { > > content += "</span>"; > >- > return content; > } > }, >@@ -437,6 +442,11 @@ $(document).ready(function() { > title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>" > } > >+ var inhouse_use = ''; >+ if ( oObj.inhouse_use == 1 ) { >+ inhouse_use += " <span class='inhouse_use'>("+INHOUSE_USE+")</span>"; >+ } >+ > title += " " > + "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=" > + oObj.biblionumber >@@ -446,7 +456,8 @@ $(document).ready(function() { > + oObj.itemnumber > + "'>" > + oObj.barcode >- + "</a>"; >+ + "</a>" >+ + inhouse_use; > > return title; > } >diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/pages/circulation.js b/koha-tmpl/intranet-tmpl/prog/en/js/pages/circulation.js >index aa3fd43..e6ac3e8 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/js/pages/circulation.js >+++ b/koha-tmpl/intranet-tmpl/prog/en/js/pages/circulation.js >@@ -46,6 +46,10 @@ $(document).ready(function() { > return false; > }); > >+ toggle_inhouse_use(); >+ $("#inhouse_use").click(function(){ >+ toggle_inhouse_use(); >+ }); > }); > > function export_checkouts(format) { >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >index 2190004..07c86c5 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >@@ -383,6 +383,18 @@ Circulation: > - This is a list of value pairs. When an item is checked in, if the not for loan value on the left matches the items not for loan value > - "it will be updated to the right-hand value. E.g. '-1: 0' will cause an item that was set to 'Ordered' to now be available for loan." > - Each pair of values should be on a separate line. >+ - >+ - pref: In-House use >+ choices: >+ yes: Enable >+ no: Disable >+ - the in-house use feature. >+ - >+ - pref: In-House use Force >+ choices: >+ yes: Enable >+ no: Disable >+ - the in-house for all cases (Even if a user is debarred, etc.). > Holds Policy: > - > - pref: AllowHoldPolicyOverride >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >index e10d95f..68f2bcd 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >@@ -586,9 +586,17 @@ function verify_images() { > <td class="status"> > > [% IF ( item.datedue ) %] >+ [% IF inhouse_use %] >+ <span>Currently in local use >+ [% ELSE %] > <span class="datedue">Checked out >+ [% END %] > [% UNLESS ( item.NOTSAMEBRANCH ) %] >+ [% IF inhouse_use %] >+ by <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% item.borrowernumber %]"> >+ [% ELSE %] > to <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% item.borrowernumber %]"> >+ [% END %] > [% IF ( item.hidepatronname ) %] > [% item.cardnumber %] > [% ELSE %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >index 3708e0e..9b39cb8 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >@@ -55,6 +55,21 @@ $(document).ready(function() { > }); > [% END %] > }); >+ >+// In-house use >+function toggle_inhouse_use(){ >+ if ( $("#inhouse_use").attr('checked') ) { >+ $("#duedatespec").val("[% todaysdate | $KohaDates with_hours => 1%]") >+ $("#duedatespec").datetimepicker('destroy'); >+ } else { >+ $("#duedatespec").datetimepicker({ >+ onClose: function(dateText, inst) { $("#barcode").focus(); }, >+ hour: 23, >+ minute: 59 >+ }); >+ } >+} >+ > //]]> > </script> > </head> >@@ -287,6 +302,7 @@ $(document).ready(function() { > [% ELSE %] > <input type="submit" class="approve" value="Yes, check out (Y)" accesskey="y" /> > [% END %] >+ <input type="hidden" name="inhouse_use" value="[% inhouse_use %]" /> > </form> > [% END %] > >@@ -469,7 +485,7 @@ No patron matched <span class="ex">[% message %]</span> > > [% IF ( borrowernumber ) %] > <div class="yui-g"> >-[% UNLESS ( noissues ) %] >+[% IF !noissues || inhouse_use_forced %] > [% IF ( flagged ) %] > <div class="yui-u first"> > [% ELSE %] >@@ -516,6 +532,18 @@ No patron matched <span class="ex">[% message %]</span> > [% END %] > <button class="btn btn-small action" id="cleardate" name="cleardate" onclick="this.checked = false; this.form.duedatespec.value = ''; this.form.stickyduedate.checked = false; this.form.barcode.focus(); return false;" >Clear</button> > </div>[% END %] >+ >+ [% IF inhouse_use_feature %] >+ <div class="inhouse_use-select"> >+ [% IF noissues %] >+ <input type="checkbox" id="inhouse_use" name="inhouse_use_forced" checked="checked" disabled="disabled" /> <label for="inhouse_use">In-house use</label> >+ <input type="hidden" name="inhouse_use" checked="checked" value="1" /> >+ [% ELSE %] >+ <input type="checkbox" id="inhouse_use" name="inhouse_use" /> <label for="inhouse_use">In-house use</label> >+ [% END %] >+ </div> >+ [% END %] >+ > <input type="hidden" name="borrowernumber" id="borrowernumber" value="[% borrowernumber %]" /> > <input type="hidden" name="branch" value="[% branch %]" /> > <input type="hidden" name="printer" value="[% printer %]" /> >@@ -530,17 +558,24 @@ No patron matched <span class="ex">[% message %]</span> > > [% IF ( noissues ) %]<div>[% ELSE %]<div class="yui-u">[% END %] > >- [% IF ( flagged ) %] >- [% IF ( noissues ) %] >- <h4>Checking out to [% INCLUDE 'patron-title.inc' %]</h4> >- <div id="circmessages" class="circmessage warning"> >- [% ELSE %] >+ [% IF flagged %] >+ [% IF NOT noissues || ( noissues && inhouse_use_forced ) %] > <div id="circmessages" class="circmessage attention"> >- [% END %] >+ [% ELSE %] >+ <h4>Checking out to [% INCLUDE 'patron-title.inc' %]</h4> >+ <div id="circmessages" class="circmessage warning"> >+ [% END %] >+ <h3> >+ [% IF noissues %] >+ Cannot check out! >+ [% IF inhouse_use_forced %] >+ <span style="color:red;">Only in-house use is allowed</span> >+ [% END %] >+ [% ELSE %] >+ Attention: >+ [% END %] >+ </h3> > >- <h3>[% IF ( noissues ) %] >- Cannot check out! >- [% ELSE %]Attention:[% END %]</h3> > <ul> > > [% IF ( warndeparture ) %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt >index 5460ea0..8cd23ef 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt >@@ -8,7 +8,7 @@ > //<![CDATA[ > > $(document).ready(function() { >- $("#table_readingrec").dataTable($.extend(true, {}, dataTablesDefaults, { >+ var table = $("#table_readingrec").dataTable($.extend(true, {}, dataTablesDefaults, { > "sPaginationType": "four_button", > "aaSorting": [], > "aoColumnDefs": [ >@@ -16,6 +16,18 @@ > { "sType": "title-string", "aTargets" : [ "title-string" ] } > ] > })); >+ var tabs = $("#tabs").tabs({ >+ select: function(e, ui) { >+ var id = $(ui.tab).attr("id"); >+ if ( id == "tab_checkout" ) { >+ table.fnFilter("checkout", 0); >+ } else if ( id == "tab_inhouse_use" ) { >+ table.fnFilter("inhouse_use", 0); >+ } else { // all >+ table.fnFilter('', 0); >+ } >+ } >+ }); > }); > //]]> > </script> >@@ -42,64 +54,79 @@ > <form action="/cgi-bin/koha/members/readingrec.pl" method="get"><input type="hidden" name="borrowernumber" id="borrowernumber" value="[% borrowernumber %]" /></form> > > >-<table id="table_readingrec"> >-<thead> >- <tr> >- <th class="title-string">Date</th> >- <th class="anti-the">Title</th> >- <th>Author</th> >- <th>Call no.</th> >- <th>Barcode</th> >- <th>Number of renewals</th> >- <th class="title-string">Checked out on</th> >- <th>Checked out from</th> >- <th class="title-string">Date due</th> >- <th class="title-string">Return date</th> >- </tr> >-</thead> >-<tbody> >-[% FOREACH issue IN loop_reading %] >- [% IF issue.returndate %]<tr>[% ELSE %]<tr class="onissue">[% END %] >- <td> >+<div id="tabs" class="toptabs"> >+ <ul> >+ <li><a href="#readingrec" id="tab_all">All</a></li> >+ <li><a href="#readingrec" id="tab_checkout">Checkouts</a></li> >+ <li><a href="#readingrec" id="tab_inhouse_use">In-house use</a></li> >+ </ul> >+ <div id="readingrec" style="overflow:hidden"> >+ <table id="table_readingrec"> >+ <thead> >+ <th style="display:none;">Type</th> >+ <th class="title-string">Date</th> >+ <th class="anti-the">Title</th> >+ <th>Author</th> >+ <th>Call no.</th> >+ <th>Barcode</th> >+ <th>Number of renewals</th> >+ <th class="title-string">Checked out on</th> >+ <th>Checked out from</th> >+ <th class="title-string">Date due</th> >+ <th class="title-string">Return date</th> >+ </thead> >+ <tbody> >+ [% FOREACH issue IN loop_reading %] >+ [% IF issue.returndate %]<tr>[% ELSE %]<tr class="onissue">[% END %] >+ <td style="display:none;"> >+ [% IF issue.inhouse_use %] >+ inhouse_use >+ [% ELSE %] >+ checkout >+ [% END %] >+ </td> >+ <td> > <span title="[% issue.issuestimestamp %]">[% issue.issuestimestamp | $KohaDates %]</span> >- </td> >- <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% issue.biblionumber %]">[% issue.title |html %]</a></td> >+ </td> >+ <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% issue.biblionumber %]">[% issue.title |html %]</a></td> > >- <td>[% issue.author %]</td> >+ <td>[% issue.author %]</td> > >- <td> >+ <td> > [% IF issue.classification %] > [% issue.classification %] > [% ELSE %] > [% issue.itemcallnumber %] > [% END %] >- </td> >- >- <td>[% issue.barcode %]</td> >+ </td> > >- <td> >- [% issue.renewals %]</td> >- <td> >- <span title="[% issue.issuedate %]">[% issue.issuedate | $KohaDates %]</span></td> >- <td> >- [% issue.issuingbranch %]</td> >- <td>[% IF issue.date_due %] >- <span title="[% issue.date_due %]">[% issue.date_due | $KohaDates %]</span> >- [% ELSE %] >- <span title="0000-00-00"></span> >- [% END %] >- </td> >- <td> >- [% IF issue.returndate %] >- <span title="[% issue.returndate %]">[% issue.returndate | $KohaDates %]</span> >- [% ELSE %] >- <span title="Checked Out"><small>Checked out</small></span> >- [% END %] >- </td> >-</tr> >-[% END %] >-</tbody> >-</table> >+ <td>[% issue.barcode %]</td> >+ <td>[% issue.renewals %]</td> >+ <td> >+ <span title="[% issue.issuedate %]">[% issue.issuedate | $KohaDates %]</span></td> >+ </td> >+ <td>[% issue.issuedate | $KohaDates %]</td> >+ <td>[% issue.issuingbranch %]</td> >+ <td> >+ [% IF issue.date_due %] >+ <span title="[% issue.date_due %]">[% issue.date_due | $KohaDates %]</span> >+ [% ELSE %] >+ <span title="0000-00-00"></span> >+ [% END %] >+ </td> >+ <td> >+ [% IF issue.returndate %] >+ <span title="[% issue.returndate %]">[% issue.returndate | $KohaDates %]</span> >+ [% ELSE %] >+ <span title="Checked Out"><small>Checked Out</small></span> >+ [% END %] >+ </td> >+ </tr> >+ [% END %] >+ </tbody> >+ </table> >+ </div> >+</div> > [% END %] > </div> > </div> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/css/datatables.css b/koha-tmpl/opac-tmpl/bootstrap/css/datatables.css >index e7b11bd..5669543 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/css/datatables.css >+++ b/koha-tmpl/opac-tmpl/bootstrap/css/datatables.css >@@ -3,23 +3,23 @@ input.search_init { > } > .sorting_asc { > padding-right: 19px; >- background: url("../../img/asc.gif") no-repeat scroll right center #EEEEEE; >+ background: url("../../images/asc.gif") no-repeat scroll right center #EEEEEE; > } > .sorting_desc { > padding-right: 19px; >- background: url("../../img/desc.gif") no-repeat scroll right center #EEEEEE; >+ background: url("../../images/desc.gif") no-repeat scroll right center #EEEEEE; > } > .sorting { > padding-right: 19px; >- background: url("../../img/ascdesc.gif") no-repeat scroll right center #EEEEEE; >+ background: url("../../images/ascdesc.gif") no-repeat scroll right center #EEEEEE; > } > .sorting_asc_disabled { > padding-right: 19px; >- background: url("../../img/datatables/sort_asc_disabled.png") no-repeat scroll right center #EEEEEE; >+ background: url("../../images/datatables/sort_asc_disabled.png") no-repeat scroll right center #EEEEEE; > } > .sorting_desc_disabled { > padding-right: 19px; >- background: url("../../img/datatables/sort_desc_disabled.png") no-repeat scroll right center #EEEEEE; >+ background: url("../../images/datatables/sort_desc_disabled.png") no-repeat scroll right center #EEEEEE; > } > .sorting_disabled { > padding-right: 19px; >@@ -64,12 +64,11 @@ div.dataTables_filter { > } > div.dataTables_paginate { > background-color : #F4F4F4; >- font-size: 110%; > padding : 0; > } > >-.paging_full_numbers span.paginate_button, >-.paging_full_numbers span.paginate_active { >+.paging_full_numbers a.paginate_button, >+.paging_full_numbers a.paginate_active { > border-right : 1px solid #AAA; > border-left : 1px solid #FFF; > display : block; >@@ -79,48 +78,48 @@ div.dataTables_paginate { > cursor: pointer; > } > >-.paging_full_numbers span.paginate_button { >+.paging_full_numbers a.paginate_button { > color : #0000CC; > } >-.paging_full_numbers span.paginate_button.first { >- background-image : url('../../img/first.png'); >+.paging_full_numbers a.paginate_button.first { >+ background-image : url('../../images/first.png'); > background-repeat: no-repeat; >- background-position : 2px center; >+ background-position : 1% center; > padding-left : 2em; > } >-.paging_full_numbers span.paginate_button.previous { >- background-image : url('../../img/prev.png'); >+.paging_full_numbers a.paginate_button.previous { >+ background-image : url('../../images/prev.png'); > background-repeat: no-repeat; >- background-position : 2px center; >+ background-position : 1% center; > padding-left : 2em; > } >-.paging_full_numbers span.paginate_button.next { >- background-image : url('../../img/next.png'); >+.paging_full_numbers a.paginate_button.next { >+ background-image : url('../../images/next.png'); > background-repeat: no-repeat; >- background-position : right center; >+ background-position : 96% center; > padding-right : 2em; > } >-.paging_full_numbers span.paginate_button.last { >- background-image : url('../../img/last.png'); >+.paging_full_numbers a.paginate_button.last { >+ background-image : url('../../images/last.png'); > background-repeat: no-repeat; >- background-position : right center; >+ background-position : 96% center; > border-right : 1px solid #686868; > padding-right : 2em; > } >-div.bottom.pager .paging_full_numbers span.paginate_button.last { >+div.bottom.pager .paging_full_numbers a.paginate_button.last { > border-right-width : 0; > } >-.paging_full_numbers span.paginate_active { >+.paging_full_numbers a.paginate_active { > background-color : #FFFFEA; > color : #000; > font-weight: bold; > } > >-.paging_full_numbers span.paginate_button:hover { >+.paging_full_numbers a.paginate_button:hover { > background-color: #FFC; > } > >-.paging_full_numbers span.paginate_button.paginate_button_disabled { >+.paging_full_numbers a.paginate_button.paginate_button_disabled { > color : #666; > } > >@@ -131,7 +130,7 @@ div.dataTables_paginate.paging_four_button { > background-color : transparent; > border-right : 1px solid #686868; > border-left : 1px solid #FFF; >- line-height : 1.8em; >+ line-height : 2.5em; > } > .paginate_disabled_first, > .paginate_enabled_first, >@@ -141,55 +140,67 @@ div.dataTables_paginate.paging_four_button { > .paginate_enabled_next, > .paginate_disabled_last, > .paginate_enabled_last { >- float: left; >- height: 16px; >- margin: .5em; >- width: 16px; >+ cursor: pointer; >+ *cursor: hand; >+ padding: .1em 0; >+} >+ >+.paginate_disabled_previous, >+.paginate_enabled_previous, >+.paginate_disabled_next, >+.paginate_enabled_next { >+ color: #111 !important; >+} >+ >+.paginate_disabled_previous, >+.paginate_enabled_previous { >+ padding-left: 23px; > } >+.paginate_disabled_next, >+.paginate_enabled_next, >+.paginate_disabled_last, >+.paginate_enabled_last { >+ padding-right: 23px; >+ margin-left: 10px; >+ margin-right : .3em; >+} >+ >+.paging_four_button .paginate_disabled_first, >+.paging_four_button .paginate_disabled_previous, >+.paging_four_button .paginate_enabled_first, >+.paging_four_button .paginate_enabled_previous { >+ margin-left : .3em; >+} >+ > .paginate_disabled_first { >- background-image: url("../../img/first-disabled.png"); >+ background: transparent url("../../images/first-disabled.png") no-repeat 3px top; > } > .paginate_enabled_first { >- background-image: url("../../img/first.png"); >+ background: transparent url("../../images/first.png") no-repeat 3px top; > cursor: pointer; > } > .paginate_disabled_previous { >- background-image: url("../../img/prev-disabled.png"); >+ background: transparent url("../../images/prev-disabled.png") no-repeat 3px top; > } > .paginate_enabled_previous { >- background-image: url("../../img/prev.png"); >+ background: transparent url("../../images/prev.png") no-repeat 3px top; > cursor: pointer; > } > .paginate_disabled_next { >- background-image: url("../../img/next-disabled.png"); >+ background: transparent url("../../images/next-disabled.png") no-repeat right top; > } > .paginate_enabled_next { >- background-image: url("../../img/next.png"); >+ background: transparent url("../../images/next.png") no-repeat right top; > cursor: pointer; > } > .paginate_disabled_last { >- background-image: url("../../img/last-disabled.png"); >+ background: transparent url("../../images/last-disabled.png") no-repeat right top; > } > .paginate_enabled_last { >- background-image: url("../../img/last.png"); >+ background: transparent url("../../images/last.png") no-repeat right top; > cursor: pointer; > } > >- >-/* >-table.display { >- width: 100%; >-} >-table.display thead th { >- border-bottom: 1px solid black; >- cursor: pointer; >- font-weight: bold; >- padding: 3px 18px 3px 10px; >-} >-.dataTables_wrapper { >- clear: both; >- position: relative; >-} > .dataTables_processing { > background-color: white; > border: 1px solid #DDDDDD; >@@ -205,61 +216,44 @@ table.display thead th { > top: 50%; > width: 250px; > } >-.dataTables_info { >- float: left; >- width: 60%; >-} >-.dataTables_paginate { >- float: right; >- text-align: right; >- width: 44px; >-} >-.paging_full_numbers { >- height: 22px; >- line-height: 22px; >- width: 400px; >-} >-.paging_full_numbers span.paginate_button, >- .paging_full_numbers span.paginate_active { >- border: 1px solid #aaa; >- -webkit-border-radius: 5px; >- -moz-border-radius: 5px; >- padding: 2px 5px; >- margin: 0 3px; >- cursor: pointer; >- *cursor: hand; >-} > >-.paging_full_numbers span.paginate_button { >- background-color: #ddd; >+tr.odd.selected td { >+ background-color: #D3D3D3; > } > >-.paging_full_numbers span.paginate_button:hover { >- background-color: #ccc; >+tr.even.selected td { >+ background-color: #D3D3D3; > } > >-.paging_full_numbers span.paginate_active { >- background-color: #99B3FF; >-} >-.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next { >- float: left; >- height: 19px; >- margin-left: 3px; >- width: 19px; >+/* ColumnFilter */ >+span.filter_column > input.text_filter { >+ font-size: 80%; >+ width: 100%; > } >-.paginate_disabled_previous { >- background-image: url("../../img/datatables/back_disabled.jpg"); >+ >+div.pager { >+ background-color : #E8E8E8; >+ border : 1px solid #BCBCBC; >+ -moz-border-radius : 5px; >+ border-radius : 5px; >+ display : inline-block; >+ font-size : 85%; >+ padding : .3em .5em .3em .5em; >+ margin : .4em 0; > } >-.paginate_enabled_previous { >- background-image: url("../../img/datatables/back_enabled.jpg"); >+div.pager img { >+ vertical-align : middle; > } >-.paginate_disabled_next { >- background-image: url("../../img/datatables/forward_disabled.jpg"); >+ >+div.pager img.last { >+ padding-right: 5px; > } >-.paginate_enabled_next { >- background-image: url("../../img/datatables/forward_enabled.jpg"); >+div.pager input.pagedisplay { >+ border : 0; >+ background-color : transparent; >+ font-weight: bold; >+ text-align : center; > } >-.spacer { >- clear: both; >- height: 20px; >+div.pager p { >+ margin: 0; > } >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc >index 16599de..faa38b1 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc >@@ -19,11 +19,19 @@ not use an API to fetch items that populates item.datedue. > [% END %] > [% END %] > [% ELSIF ( item.datedue || issue.date_due ) %] >+ [% IF inhouse_use %] >+ [% IF ( OPACShowCheckoutName ) %] >+ Currently in local use by [% item.cardnumber %] [% item.firstname %] [% item.surname %] >+ [% ELSE %] >+ Currently in local use >+ [% END %] >+ [% ELSE %] > [% IF ( OPACShowCheckoutName ) %] > Checked out to [% item.cardnumber %] [% item.firstname %] [% item.surname %] > [% ELSE %] > Checked out > [% END %] >+ [% END %] > [% ELSIF ( item.transfertwhen ) %] > In transit from [% item.transfertfrom %] > to [% item.transfertto %] since [% item.transfertwhen %] >diff --git a/koha-tmpl/opac-tmpl/bootstrap/js/datatables.js b/koha-tmpl/opac-tmpl/bootstrap/js/datatables.js >index 3c4ffdf..5f0892d 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/js/datatables.js >+++ b/koha-tmpl/opac-tmpl/bootstrap/js/datatables.js >@@ -97,4 +97,4 @@ jQuery.extend( jQuery.fn.dataTableExt.oSort, { > } > }); > >-}()); >\ No newline at end of file >+}()); >diff --git a/svc/checkouts b/svc/checkouts >index 11f0895..9e56f64 100755 >--- a/svc/checkouts >+++ b/svc/checkouts >@@ -63,6 +63,8 @@ my $sql = ' > date_due < now() as date_due_overdue, > issues.timestamp, > >+ inhouse_use, >+ > biblionumber, > biblio.title, > author, >@@ -152,6 +154,7 @@ while ( my $c = $sth->fetchrow_hashref() ) { > date_due => $c->{date_due}, > date_due_overdue => $c->{date_due_overdue} ? JSON::true : JSON::false, > timestamp => $c->{timestamp}, >+ inhouse_use => $c->{inhouse_use}, > renewals_count => $renewals_count, > renewals_allowed => $renewals_allowed, > renewals_remaining => $renewals_remaining, >-- >1.7.2.5
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 10860
:
20959
|
20960
|
20961
|
21195
|
21642
|
22461
|
26089
|
26114
|
26123
|
26185
|
26191
|
26192
|
31388
|
31507
|
31548
|
31664
|
31665
|
32213
|
32214
|
32216
|
32223
|
32579
|
32580
|
32581
|
32954
|
32979
|
32980
|
32981
|
32982
|
32983
|
32984
|
32997
|
32998
|
33031
|
33032
|
33033
|
33034
|
33035
|
33036
|
33037
|
33105
|
33106
|
33107
|
33108
|
33109
|
33110
|
33111
|
33163
|
33165