From 859bc955a61cd3ff15ed70598e759778c5647494 Mon Sep 17 00:00:00 2001 From: Olli-Antti Kivilahti Date: Tue, 29 Oct 2013 19:13:10 +0200 Subject: [PATCH] Bug 11157 - Placing a simple item-level hold for serials in staff client. For biblios marked as a serial or if the syspref: -ShowPlaceItemLevelHold is enabled. Adds a "Place hold"-link after each item in the detailed biblio view. Added a new parameter itemnumber to reserve.pl/.tt. This causes the reserving module to display only the desired item, preselect it and hide unnecessary buttons. --- catalogue/detail.pl | 6 ++++++ installer/data/mysql/sysprefs.sql | 1 + .../en/modules/admin/preferences/cataloguing.pref | 7 +++++++ .../prog/en/modules/catalogue/detail.tt | 8 +++++++ .../prog/en/modules/reserve/request.tt | 17 ++++++++++++--- reserve/request.pl | 22 +++++++++++++++++++- 6 files changed, 57 insertions(+), 4 deletions(-) diff --git a/catalogue/detail.pl b/catalogue/detail.pl index 72258fd..618455c 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -143,6 +143,10 @@ my $dat = &GetBiblioData($biblionumber); my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber); my @subscriptions = GetSubscriptions( $dat->{title}, $dat->{issn}, undef, $biblionumber ); my @subs; +if (scalar(@subscriptions)) { + $template->param('isSerial',1); +} + foreach my $subscription (@subscriptions) { my %cell; @@ -412,4 +416,6 @@ if (C4::Context->preference('TagsEnabled') and $tag_quantity = C4::Context->pref my ( $holdcount, $holds ) = C4::Reserves::GetReservesFromBiblionumber($biblionumber,1); $template->param( holdcount => $holdcount, holds => $holds ); +$template->param('ShowPlaceItemLevelHold', C4::Context->preference('ShowPlaceItemLevelHold')); + output_html_with_http_headers $query, $cookie, $template->output; diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 4db2935..091fd98 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -341,6 +341,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('ShowPatronImageInWebBasedSelfCheck','0','','If ON, displays patron image when a patron uses web-based self-checkout','YesNo'), ('ShowReviewer','full','none|full|first|surname|firstandinitial|username','Choose how a commenter\'s identity is presented alongside comments in the OPAC','Choice'), ('ShowReviewerPhoto','1','','If ON, photo of reviewer will be shown beside comments in OPAC','YesNo'), +('ShowPlaceItemLevelHold','0',NULL,'Allow placing a item-level hold from the detailed biblio view.','YesNo'), ('singleBranchMode','0',NULL,'Operate in Single-branch mode, hide branch selection in the OPAC','YesNo'), ('SlipCSS','',NULL,'Slips CSS url.','free'), ('SMSSendDriver','','','Sets which SMS::Send driver is used to send SMS messages.','free'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref index 96f3603..4620462 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref @@ -18,6 +18,13 @@ Cataloging: yes: Display no: "Don't Display" - easy ways to create analytical record relationships + - + - pref: ShowPlaceItemLevelHold + default: 0 + choices: + yes: "Allow" + no : "Don't allow" + - placing a item-level hold from the detailed biblio view. This is always enabled for serials because serials need only item-level holds. Spine Labels: - - When using the quick spine label printer, 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 d5a006b..39d125a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt @@ -422,6 +422,7 @@ function verify_images() { [% IF ( hostrecords ) %]Host records[% END %] [% IF ( analyze ) %]Used in[% END %] [% IF ( ShowCourseReserves ) %]Course Reserves[% END %] + [% IF ( ShowPlaceItemLevelHold || isSerial ) %]Reserve[% END %] @@ -590,6 +591,13 @@ function verify_images() { [% END %] [% END %] + [% IF ( ShowPlaceItemLevelHold || isSerial ) %] + + + Place hold + + + [% END %] [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt index 7f7d05f..b0eb339 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -191,7 +191,9 @@ function checkMultiHold() { [% END %] [% UNLESS ( multi_hold ) %] -

Place a hold on [% INCLUDE 'biblio-default-view.inc' %][% title |html %]

+

Place a hold on [% INCLUDE 'biblio-default-view.inc' %][% title |html %] + [% IF targetItemTitle %] - [% targetItemTitle %][% END %] +

[% ELSE %]

Confirm Holds

[% END %] @@ -208,6 +210,7 @@ function checkMultiHold() { + [% IF targetItemnumber %][% END %] [% ELSE %]
@@ -221,6 +224,7 @@ function checkMultiHold() { [% END %]
+ [% IF targetItemnumber %][% END %] [% END %] [% IF ( multi_hold ) %] @@ -344,8 +348,11 @@ function checkMultiHold() { [% UNLESS ( multi_hold ) %] -
  • +
  • + [% UNLESS targetItemnumber %] + + [% END %]
  • @@ -395,7 +402,11 @@ function checkMultiHold() { [% IF ( itemloo.available ) %] - + [% IF targetItemnumber %] + + [% ELSE %] + + [% END %] [% ELSIF ( itemloo.override ) %] Requires override of hold policy diff --git a/reserve/request.pl b/reserve/request.pl index c411ce9..4151f54 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -57,10 +57,27 @@ my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user( } ); +my $targetItemnumber = $input->param('itemnumber') ? $input->param('itemnumber') : undef; +if ($targetItemnumber) { + $template->param('targetItemnumber', $targetItemnumber); + my $targetItem = C4::Items::GetItem($targetItemnumber); + if ($targetItem->{enumchron}) { + $template->param('targetItemTitle', $targetItem->{enumchron}); + } + elsif ($targetItem->{barcode}) { + $template->param('targetItemTitle', $targetItem->{barcode}); + } + else { + $template->param('targetItemTitle', $targetItem->{itemnumber}); + } +} + + my $multihold = $input->param('multi_hold'); $template->param(multi_hold => $multihold); my $showallitems = $input->param('showallitems'); + # get Branches and Itemtypes my $branches = GetBranches(); my $itemtypes = GetItemTypes(); @@ -243,7 +260,10 @@ foreach my $biblionumber (@biblionumbers) { my @itemnumbers; ## $items is array of 'item' table numbers - if (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){ + if ($targetItemnumber) { #If we just want to place a hold on one item + push @itemnumbers, $targetItemnumber; + } + elsif (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){ @itemnumbers = @$items; } my @hostitems = get_hostitemnumbers_of($biblionumber); -- 1.7.9.5