@@ -, +, @@
- 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
- 1 new script misc/cronjobs/bulk_transfers.pl
- Datatable on the circulation history pages (readingrec) at the OPAC
and the intranet.
---
C4/Circulation.pm | 18 +-
C4/Items.pm | 6 +
circ/circulation.pl | 27 ++-
installer/data/mysql/kohastructure.sql | 2 +
installer/data/mysql/sysprefs.sql | 2 +
installer/data/mysql/updatedatabase.pl | 28 +++
.../intranet-tmpl/prog/en/css/staff-global.css | 15 ++
koha-tmpl/intranet-tmpl/prog/en/js/datatables.js | 16 +-
.../intranet-tmpl/prog/en/js/pages/circulation.js | 6 +-
.../en/modules/admin/preferences/circulation.pref | 12 ++
.../prog/en/modules/catalogue/detail.tt | 8 +
.../prog/en/modules/circ/circulation.tt | 80 ++++++--
.../prog/en/modules/members/readingrec.tt | 122 +++++++-----
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 ++++++----
misc/cronjobs/bulk_transferts.pl | 105 +++++++++++
18 files changed, 534 insertions(+), 217 deletions(-)
create mode 100644 misc/cronjobs/bulk_transferts.pl
--- a/C4/Circulation.pm
+++ a/C4/Circulation.pm
@@ -1178,9 +1178,12 @@ AddIssue does the following things :
=cut
sub AddIssue {
- my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode) = @_;
+ my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode, $params ) = @_;
+ my $inhouse_use = $params->{inhouse_use};
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);
}
@@ -1248,8 +1251,8 @@ sub AddIssue {
my $sth =
$dbh->prepare(
"INSERT INTO issues
- (borrowernumber, itemnumber,issuedate, date_due, branchcode)
- VALUES (?,?,?,?,?)"
+ (borrowernumber, itemnumber,issuedate, date_due, branchcode, inhouse_use)
+ VALUES (?,?,?,?,?,?)"
);
unless ($datedue) {
my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
@@ -1257,12 +1260,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
+ C4::Context->userenv->{'branch'}, # branchcode
+ $inhouse_use,
);
if ( C4::Context->preference('ReturnToShelvingCart') ) { ## ReturnToShelvingCart is on, anything issued should be taken off the cart.
CartToShelf( $item->{'itemnumber'} );
@@ -1303,7 +1308,8 @@ sub AddIssue {
# Record the fact that this book was issued.
&UpdateStats(
C4::Context->userenv->{'branch'},
- 'issue', $charge,
+ ( $inhouse_use ? 'inhouse_use' : 'issue' ),
+ $charge,
($sipmode ? "SIP-$sipmode" : ''), $item->{'itemnumber'},
$item->{'itype'}, $borrower->{'borrowernumber'}, undef, $item->{'ccode'}
);
--- a/C4/Items.pm
+++ a/C4/Items.pm
@@ -1271,6 +1271,10 @@ sub GetItemsInfo {
holding.branchurl,
holding.branchname,
holding.opac_info as 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
@@ -1278,6 +1282,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);
--- a/circ/circulation.pl
+++ a/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/;
@@ -322,13 +324,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;
@@ -344,13 +348,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 );
+ my $inhouse_use = $query->param('inhouse_use');
+ AddIssue( $borrower, $barcode, $datedue, $cancelreserve, undef, undef, { inhouse_use => $inhouse_use } );
$inprocess = 1;
}
}
@@ -781,6 +787,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;
--- a/installer/data/mysql/kohastructure.sql
+++ a/installer/data/mysql/kohastructure.sql
@@ -1122,6 +1122,7 @@ CREATE TABLE `issues` ( -- information related to check outs or issues
`renewals` tinyint(4) default NULL, -- lists the number of times the item was renewed
`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`),
@@ -1587,6 +1588,7 @@ CREATE TABLE `old_issues` ( -- lists items that were checked out and have been r
`renewals` tinyint(4) default NULL, -- lists the number of times the item was renewed
`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`),
--- a/installer/data/mysql/sysprefs.sql
+++ a/installer/data/mysql/sysprefs.sql
@@ -137,6 +137,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'),
--- a/installer/data/mysql/updatedatabase.pl
+++ a/installer/data/mysql/updatedatabase.pl
@@ -8037,6 +8037,34 @@ if(CheckVersion($DBversion)) {
SetVersion($DBversion);
}
+
+
+
+
+
+
+$DBversion = "3.15.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)
--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
+++ a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
@@ -972,6 +972,17 @@ tr.highlight th[scope=row] {
padding : 1px;
}
+.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;
+}
+
tr.expired td {
color : #999999;
}
@@ -2725,3 +2736,7 @@ span.browse-button {
font-size:0.8em;
padding:0.5em;
}
+
+span.inhouse_use {
+ color: red;
+}
--- a/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js
+++ a/koha-tmpl/intranet-tmpl/prog/en/js/datatables.js
@@ -175,9 +175,13 @@ function dt_add_type_uk_date() {
jQuery.fn.dataTableExt.oSort['uk_date-asc'] = function(a,b) {
var re = /(\d{2}\/\d{2}\/\d{4})/;
- a.match(re);
+ if ( !a.match(re) ) {
+ return 1;
+ }
var ukDatea = RegExp.$1.split("/");
- b.match(re);
+ if ( !b.match(re) ) {
+ return -1;
+ }
var ukDateb = RegExp.$1.split("/");
var x = (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
@@ -188,9 +192,13 @@ function dt_add_type_uk_date() {
jQuery.fn.dataTableExt.oSort['uk_date-desc'] = function(a,b) {
var re = /(\d{2}\/\d{2}\/\d{4})/;
- a.match(re);
+ if ( !a.match(re) ) {
+ return -1;
+ }
var ukDatea = RegExp.$1.split("/");
- b.match(re);
+ if ( !b.match(re) ) {
+ return 1
+ }
var ukDateb = RegExp.$1.split("/");
var x = (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
--- a/koha-tmpl/intranet-tmpl/prog/en/js/pages/circulation.js
+++ a/koha-tmpl/intranet-tmpl/prog/en/js/pages/circulation.js
@@ -84,6 +84,11 @@ $(document).ready(function() {
});
}
});
+
+ toggle_inhouse_use();
+ $("#inhouse_use").click(function(){
+ toggle_inhouse_use();
+ });
});
function export_checkouts(format) {
@@ -113,7 +118,6 @@ function export_checkouts(format) {
/* Reset form action to its initial value */
document.issues.action="/cgi-bin/koha/reserve/renewscript.pl";
-
}
function validate1(date) {
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
@@ -351,6 +351,18 @@ Circulation:
no: "Don't"
- calculate and update overdue charges when an item is returned.
- NOTE If you are doing hourly loans then you should have this on.
+ -
+ - 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
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
@@ -566,9 +566,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 %]
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
@@ -94,7 +94,23 @@ var MSG_EXPORT_SELECT_CHECKOUTS = _("You must select checkout(s) to export");
} ).attr( 'checked', false );
[% END %]
[% 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
+ });
+ }
+}
+
//]]>
@@ -318,6 +334,7 @@ var MSG_EXPORT_SELECT_CHECKOUTS = _("You must select checkout(s) to export");
[% ELSE %]
[% END %]
+
[% END %]
@@ -492,7 +509,7 @@ No patron matched [% message %]
[% IF ( borrowernumber ) %]
+[% END %]
+
+ [% IF inhouse_use_feature %]
+
+ [% IF noissues %]
+ In-house use
+
+ [% ELSE %]
+ In-house use
+ [% END %]
+
+ [% END %]
+
@@ -544,17 +574,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 ) %]
@@ -748,7 +785,12 @@ No patron matched [% message %]
[% AuthorisedValues.GetByCode( 'DAMAGED', todayissue.damaged ) %]
[% END %]
- [% todayissue.title |html %][% FOREACH subtitl IN todayissue.subtitle %] [% subtitl.subfield %][% END %] [% IF ( todayissue.author ) %], by [% todayissue.author %][% END %][% IF ( todayissue.itemnotes ) %]- [% todayissue.itemnotes %] [% END %] [% todayissue.barcode %]
+
+ [% todayissue.title |html %][% FOREACH subtitl IN todayissue.subtitle %] [% subtitl.subfield %][% END %] [% IF ( todayissue.author ) %], by [% todayissue.author %][% END %][% IF ( todayissue.itemnotes ) %]- [% todayissue.itemnotes %] [% END %] [% todayissue.barcode %]
+ [% IF todayissue.inhouse_use %]
+ (In-house use)
+ [% END %]
+
[% UNLESS ( noItemTypeImages ) %] [% IF ( todayissue.itemtype_image ) %] [% END %][% END %][% todayissue.itemtype %]
[% todayissue.checkoutdate %]
[% IF ( todayissue.multiple_borrowers ) %][% todayissue.firstname %] [% todayissue.surname %] [% END %]
@@ -841,7 +883,12 @@ No patron matched [% message %]
[% AuthorisedValues.GetByCode( 'DAMAGED', previssue.damaged ) %]
[% END %]
- [% previssue.title |html %][% FOREACH subtitl IN previssue.subtitle %] [% subtitl.subfield %][% END %] [% IF ( previssue.author ) %], by [% previssue.author %][% END %] [% IF ( previssue.itemnotes ) %]- [% previssue.itemnotes %][% END %] [% previssue.barcode %]
+
+ [% previssue.title |html %][% FOREACH subtitl IN previssue.subtitle %] [% subtitl.subfield %][% END %] [% IF ( previssue.author ) %], by [% previssue.author %][% END %] [% IF ( previssue.itemnotes ) %]- [% previssue.itemnotes %][% END %] [% previssue.barcode %]
+ [% IF previssue.inhouse_use %]
+ (In-house use)
+ [% END %]
+
[% previssue.itemtype %]
@@ -988,7 +1035,12 @@ No patron matched [% message %]
[% AuthorisedValues.GetByCode( 'DAMAGED', relissue.damaged ) %]
[% END %]
- [% relissue.title |html %][% FOREACH subtitl IN relissue.subtitle %] [% subtitl.subfield %][% END %] [% IF ( relissue.author ) %], by [% relissue.author %][% END %][% IF ( relissue.itemnotes ) %]- [% relissue.itemnotes %] [% END %] [% relissue.barcode %]
+
+ [% relissue.title |html %][% FOREACH subtitl IN relissue.subtitle %] [% subtitl.subfield %][% END %] [% IF ( relissue.author ) %], by [% relissue.author %][% END %][% IF ( relissue.itemnotes ) %]- [% relissue.itemnotes %] [% END %] [% relissue.barcode %]
+ [% IF relissue.inhouse_use %]
+ (In-house use)
+ [% END %]
+
[% UNLESS ( noItemTypeImages ) %] [% IF ( relissue.itemtype_image ) %] [% END %][% END %][% relissue.itemtype %]
[% relissue.displaydate %]
[% relissue.issuingbranchname %]
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tt
@@ -8,14 +8,15 @@
//
@@ -53,57 +66,76 @@
-
-
- Date
- Title
- Author
- Call no.
- Barcode
- Number of renewals
- Checked out on
- Checked out from
- Date due
- Return date
-
-[% FOREACH issue IN loop_reading %]
- [% IF issue.returndate %][% ELSE %] [% END %]
-
- [% issue.issuestimestamp | $KohaDates %]
-
- [% issue.title |html %]
+
+
+
+
+
+ Type
+ Date
+ Title
+ Author
+ Call no.
+ Barcode
+ Number of renewals
+ Checked out on
+ Checked out from
+ Date due
+ Return date
+
+
+ [% FOREACH issue IN loop_reading %]
+ [% IF issue.returndate %][% ELSE %] [% END %]
+
+ [% IF issue.inhouse_use %]
+ inhouse_use
+ [% ELSE %]
+ checkout
+ [% END %]
+
+
+ [% issue.issuestimestamp | $KohaDates %]
+
+ [% 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 %]
-
-
-[% 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 %]
+
+
+ [% END %]
+
+
+
+
+[% ELSE %]
+This patron has no circulation history.
[% END %]
--- a/koha-tmpl/opac-tmpl/prog/en/css/datatables.css
+++ a/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;
}
--- a/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc
+++ a/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 %]
--- a/koha-tmpl/opac-tmpl/prog/en/js/datatables.js
+++ a/koha-tmpl/opac-tmpl/prog/en/js/datatables.js
@@ -97,4 +97,4 @@ jQuery.extend( jQuery.fn.dataTableExt.oSort, {
}
});
-}());
+}());
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-readingrecord.tt
+++ a/koha-tmpl/opac-tmpl/prog/en/modules/opac-readingrecord.tt
@@ -2,15 +2,32 @@
[% USE KohaDates %]
[% INCLUDE 'doc-head-open.inc' %][% LibraryNameTitle or "Koha online" %] catalog › Your checkout history
[% INCLUDE 'doc-head-close.inc' %]
-
+
+[% INCLUDE 'datatables.inc' %]
@@ -30,43 +47,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 %]
+
+
-
-
-
-
-
-Title
-Item type
-Call no.
-Date
-[% IF ( OPACMySummaryHTML ) %]
-Links
-[% END %]
-
-
-[% FOREACH issue IN READING_RECORD %]
+
+
+
+
+
+
+ Type
+
+ Title
+ Item type
+ Call no.
+ Date
+ [% IF ( OPACMySummaryHTML ) %]
+ Links
+ [% END %]
+
+
+
+ [% FOREACH issue IN READING_RECORD %]
+
+
+ [% IF issue.inhouse_use %]
+ inhouse_use
+ [% ELSE %]
+ checkout
+ [% END %]
+
-[% IF loop.even %] [% ELSE %] [% END %]
[% IF OPACAmazonCoverImages %]
[% IF issue.normalized_isbn %]
@@ -129,6 +154,7 @@ You have never borrowed anything from this library.
[% END %]
+
[% END %]
--- a/misc/cronjobs/bulk_transferts.pl
+++ a/misc/cronjobs/bulk_transferts.pl
@@ -0,0 +1,105 @@
+#!/usr/bin/perl
+
+# Copyright 2013 BibLibre
+#
+# 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 Pod::Usage;
+use Getopt::Long;
+
+use C4::Context;
+use C4::Circulation;
+
+my ( $help, $verbose, $locations, $branch);
+GetOptions(
+ 'h|help' => \$help,
+ 'v|verbose' => \$verbose,
+ 'locations:s' => \$locations,
+ 'branch:s' => \$branch,
+);
+
+if ( $help or not $branch ) {
+ usage();
+ exit;
+}
+
+my $dbh = C4::Context->dbh;
+
+my @locations;
+@locations = split /, /, $locations
+ if $locations =~ /, /;
+@locations = split /[, ]/, $locations
+ unless @locations;
+
+my $query = q{
+ SELECT barcode
+ FROM branchtransfers
+ LEFT JOIN items ON branchtransfers.itemnumber = items.itemnumber
+ WHERE tobranch = ?
+ AND branchtransfers.datearrived IS NULL
+};
+$query .= q{AND items.location IN (} . ( "?, " x (scalar(@locations) - 1 )) . q{?)}
+ if @locations;
+
+my $sth = $dbh->prepare( $query );
+
+$sth->execute( $branch, @locations );
+
+while ( my $barcode = $sth->fetchrow ) {
+ # We force the return
+ say "Returning barcode $barcode" if $verbose;
+ C4::Circulation::AddReturn( $barcode, $branch, undef, undef, 1 );
+}
+
+sub usage {
+ pod2usage( -verbose => 2 );
+ exit;
+}
+
+=head1 NAME
+
+bulk_transfers.pl - Make a transfer for items of a specified branch.
+
+=head1 USAGE
+
+bulk_transfers.pl --branch [--locations -v -h]
+
+=head1 PARAMETERS
+
+=over
+
+=item B<-h>
+
+Print a brief help message
+
+=item B<--branch>
+
+The transfer is made for items going to this branch.
+
+=item B<--locations>
+
+List of item's locations. Filter to add to the branch parameter.
+
+=item B<-v>
+
+Verbose mode.
+
+=back
+
+=cut
+
--