From dbe239070e4009bb59ae04bbedb121992482b101 Mon Sep 17 00:00:00 2001 From: Jonathan Druart 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. --- 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 | 26 +++ .../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 | 33 +++- .../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/prog/en/css/datatables.css | 194 ++++++++++----------- .../opac-tmpl/prog/en/includes/item-status.inc | 8 + koha-tmpl/opac-tmpl/prog/en/js/datatables.js | 2 +- .../prog/en/modules/opac-readingrecord.tt | 100 +++++++---- svc/checkouts | 3 + 20 files changed, 424 insertions(+), 218 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 8c0b208..5668622 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1183,9 +1183,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); } @@ -1259,8 +1263,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'}; @@ -1268,12 +1272,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. @@ -1315,7 +1321,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 acb2a9b..c52b892 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1284,6 +1284,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 @@ -1291,6 +1295,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 aeeba17..5f2fe30 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -1126,6 +1126,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`), @@ -1599,6 +1600,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 b06b163..1be2ac0 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -146,6 +146,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 9bdc033..ff36622 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -8780,6 +8780,32 @@ if ( CheckVersion($DBversion) ) { 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); +} + =head1 FUNCTIONS =head2 TableExists($table) 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 382701b..90df94b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css +++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css @@ -2713,3 +2713,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 8d1327e..7df5f20 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"); //]]> diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js b/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js index b2e47e4..49bab69 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js @@ -192,6 +192,11 @@ $(document).ready(function() { title += " - " + oObj.itemnotes + "" } + var inhouse_use = ''; + if ( oObj.inhouse_use == 1 ) { + inhouse_use += " ("+INHOUSE_USE+")"; + } + title += " " + "" + oObj.barcode - + ""; + + "" + + inhouse_use; return title; } @@ -230,10 +236,21 @@ $(document).ready(function() { var span_class = ""; content += ""; - content += "" + oObj.renewals_count + ""; - if ( oObj.can_renew ) { + if ( inhouse_use == 0 ) { + content += "" + oObj.renewals_count + ""; + } + + if ( oObj.can_renew && inhouse_use == 0 ) { // Do nothing + } else if ( oObj.inhouse_use == 1 ) { + // If the issue is an in-house use, it is not renewable + content += "" + + NOT_RENEWABLE + + ""; + + span_style = "display: none"; + span_class = "renewals-allowed"; } else if ( oObj.can_renew_error == "on_reserve" ) { content += "" + "" + ON_HOLD + "" @@ -282,7 +299,7 @@ $(document).ready(function() { + "" + ""; - if ( oObj.renewals_remaining ) { + if ( oObj.renewals_remaining && inhouse_use == 0 ) { content += "(" + RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed ) + ")"; @@ -413,6 +430,11 @@ $(document).ready(function() { title += " - " + oObj.itemnotes + "" } + var inhouse_use = ''; + if ( oObj.inhouse_use == 1 ) { + inhouse_use += " ("+INHOUSE_USE+")"; + } + title += " " + "" + oObj.barcode - + ""; + + "" + + 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() { [% IF ( item.datedue ) %] + [% IF inhouse_use %] + Currently in local use + [% ELSE %] Checked out + [% END %] [% UNLESS ( item.NOTSAMEBRANCH ) %] + [% IF inhouse_use %] + by + [% ELSE %] to + [% 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 fc61059..e463755 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -53,6 +53,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 + }); + } +} + //]]> @@ -285,6 +300,7 @@ $(document).ready(function() { [% ELSE %] [% END %] + [% END %] @@ -463,7 +479,7 @@ No patron matched [% message %] [% IF ( borrowernumber ) %]
-[% UNLESS ( noissues ) %] +[% IF !noissues || inhouse_use_forced %] [% IF ( flagged ) %]
[% ELSE %] @@ -510,6 +526,18 @@ No patron matched [% message %] [% END %]
[% END %] + + [% IF inhouse_use_feature %] +
+ [% IF noissues %] + + + [% ELSE %] + + [% END %] +
+ [% END %] + @@ -524,17 +552,24 @@ No patron matched [% message %] [% IF ( noissues ) %]
[% ELSE %]
[% END %] - [% IF ( flagged ) %] - [% IF ( noissues ) %] -

Checking out to [% INCLUDE 'patron-title.inc' %]

-
- [% ELSE %] + [% IF flagged %] + [% IF NOT noissues || ( noissues && inhouse_use_forced ) %]
- [% END %] + [% ELSE %] +

Checking out to [% INCLUDE 'patron-title.inc' %]

+
+ [% END %] +

+ [% IF noissues %] + Cannot check out! + [% IF inhouse_use_forced %] + Only in-house use is allowed + [% END %] + [% ELSE %] + Attention: + [% END %] +

-

[% IF ( noissues ) %] - Cannot check out! - [% ELSE %]Attention:[% END %]

    [% 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 @@ // @@ -42,64 +54,79 @@
    - - - - - - - - - - - - - - - - -[% FOREACH issue IN loop_reading %] - [% IF issue.returndate %][% ELSE %][% END %] - + + + + + + + + + [% END %] + +
    DateTitleAuthorCall no.BarcodeNumber of renewalsChecked out onChecked out fromDate dueReturn date
    +
    + +
    + + + + + + + + + + + + + + + + [% FOREACH issue IN loop_reading %] + [% IF issue.returndate %][% ELSE %][% END %] + + - + + - + - - - + - - - - - - -[% END %] - -
    TypeDateTitleAuthorCall no.BarcodeNumber of renewalsChecked out onChecked out fromDate dueReturn date
    + [% IF issue.inhouse_use %] + inhouse_use + [% ELSE %] + checkout + [% END %] + [% issue.issuestimestamp | $KohaDates %] - [% issue.title |html %][% issue.title |html %][% issue.author %][% issue.author %] + [% IF issue.classification %] [% issue.classification %] [% ELSE %] [% issue.itemcallnumber %] [% END %] - [% issue.barcode %] - [% issue.renewals %] - [% issue.issuedate | $KohaDates %] - [% issue.issuingbranch %][% IF issue.date_due %] - [% issue.date_due | $KohaDates %] - [% ELSE %] - - [% END %] - - [% IF issue.returndate %] - [% issue.returndate | $KohaDates %] - [% ELSE %] - Checked out - [% END %] -
    +
    [% issue.barcode %][% issue.renewals %] + [% issue.issuedate | $KohaDates %][% issue.issuedate | $KohaDates %][% issue.issuingbranch %] + [% IF issue.date_due %] + [% issue.date_due | $KohaDates %] + [% ELSE %] + + [% END %] + + [% IF issue.returndate %] + [% issue.returndate | $KohaDates %] + [% ELSE %] + Checked Out + [% END %] +
    +
+
[% END %]
diff --git a/koha-tmpl/opac-tmpl/prog/en/css/datatables.css b/koha-tmpl/opac-tmpl/prog/en/css/datatables.css index e7b11bd..5669543 100644 --- a/koha-tmpl/opac-tmpl/prog/en/css/datatables.css +++ b/koha-tmpl/opac-tmpl/prog/en/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/prog/en/includes/item-status.inc b/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc index 21bde2c..852a7bc 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc +++ b/koha-tmpl/opac-tmpl/prog/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/prog/en/js/datatables.js b/koha-tmpl/opac-tmpl/prog/en/js/datatables.js index 3c4ffdf..5f0892d 100644 --- a/koha-tmpl/opac-tmpl/prog/en/js/datatables.js +++ b/koha-tmpl/opac-tmpl/prog/en/js/datatables.js @@ -97,4 +97,4 @@ jQuery.extend( jQuery.fn.dataTableExt.oSort, { } }); -}()); \ No newline at end of file +}()); diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-readingrecord.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-readingrecord.tt index a448d0b..8359b44 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-readingrecord.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-readingrecord.tt @@ -3,15 +3,32 @@ [% INCLUDE 'doc-head-open.inc' %] [% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog › Your checkout history [% INCLUDE 'doc-head-close.inc' %] - + +[% INCLUDE 'datatables.inc' %] @@ -31,43 +48,51 @@ $(document).ready(function(){ You have never borrowed anything from this library. [% ELSE %]
+

+ [% IF showfulllink %] + [% IF limit %] + Show All Items | Showing Last 50 Items + [% ELSE %] + Showing All Items | Show Last 50 Items Only + [% END %] + [% ELSE %] + Showing All Items + [% END %] +

+
-
-[% UNLESS ( limit ) %][% END %] -
- - -
- - - - - -[% IF ( OPACMySummaryHTML ) %] - -[% END %] - - -[% FOREACH issue IN READING_RECORD %] +
+ +
+
TitleItem typeCall no.DateLinks
+ + + + + + + + + [% IF ( OPACMySummaryHTML ) %] + + [% END %] + + + + [% FOREACH issue IN READING_RECORD %] + + -[% IF loop.even %][% ELSE %][% END %] [% END %] +
TypeTitleItem typeCall no.DateLinks
+ [% IF issue.inhouse_use %] + inhouse_use + [% ELSE %] + checkout + [% END %] +
[% IF OPACAmazonCoverImages %] [% IF issue.normalized_isbn %] @@ -130,6 +155,7 @@ You have never borrowed anything from this library.
[% END %] diff --git a/svc/checkouts b/svc/checkouts index f56bdff..dcd82e2 100755 --- a/svc/checkouts +++ b/svc/checkouts @@ -62,6 +62,8 @@ my $sql = ' date_due, date_due < now() as date_due_overdue, + inhouse_use, + biblionumber, biblio.title, author, @@ -150,6 +152,7 @@ while ( my $c = $sth->fetchrow_hashref() ) { issuedate => $c->{issuedate}, date_due => $c->{date_due}, date_due_overdue => $c->{date_due_overdue} ? JSON::true : JSON::false, + inhouse_use => $c->{inhouse_use}, renewals_count => $renewals_count, renewals_allowed => $renewals_allowed, renewals_remaining => $renewals_remaining, -- 2.1.0