From 61caf25689086bd0b786950ffa2f3bb333faf96f Mon Sep 17 00:00:00 2001 From: Alex Buckley Date: Wed, 10 Oct 2018 10:05:33 +0000 Subject: [PATCH] Bug 21528: Single line for hold groups in intranet side Sponsored-By: Brimbank Library, Australia --- C4/Reserves.pm | 3 +- .../prog/en/modules/reserve/hold-group.tt | 4 + .../prog/en/modules/reserve/request.tt | 50 ++++++- .../opac-tmpl/bootstrap/en/modules/opac-user.tt | 159 +++++++++++++++++++-- opac/opac-user.pl | 38 +++++ reserve/hold-group.pl | 2 + reserve/request.pl | 41 +++++- 7 files changed, 277 insertions(+), 20 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 95b489e..b6fcfbb 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -2505,7 +2505,8 @@ sub GetHoldGroupHolds { my $dbh = C4::Context->dbh; my $reserves = $dbh->selectall_arrayref(q{ - SELECT * FROM reserves + SELECT * FROM reserves LEFT JOIN items + ON reserves.itemnumber = items.itemnumber WHERE hold_group_id = ? }, { Slice => {} }, $hold_group_id); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/hold-group.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/hold-group.tt index cf7ebaf..09287e3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/hold-group.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/hold-group.tt @@ -13,6 +13,8 @@ Title Priority Notes + Barcode + Enumchron @@ -22,6 +24,8 @@ [% biblio.title %] [% hold.priority %] [% hold.reservenotes %] + [% hold.barcode %] + [% hold.enumchron %] [% 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 c70969b..f70283d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -809,6 +809,52 @@ function checkMultiHold() {   [% IF SuspendHoldsIntranet %] [% END %] + [% IF (grouped_holds) %] + [% FOREACH group_level_hold IN grouped_holds %] + + Group hold: hold group + + [% INCLUDE 'patron-title.inc' patron=group_level_hold.patron hide_patron_infos_if_needed=1 %] + [% group_level_hold.hold.reservenotes %] + [% group_level_hold.hold.reservedate | $KohaDates %] + [% group_level_hold.hold.expirationdate | $KohaDates %] + + [% IF ( group_level_hold.hold.found ) %] + [% IF ( group_level_hold.hold.atdestination ) %] + [% IF ( group_level_hold.hold.found ) %] + Item waiting at [% group_level_hold.hold.wbrname %] since [% group_level_hold.hold.waiting_date | $KohaDates %] + [% ELSE %] + Waiting to be pulled + [% END %] + [% ELSE %] + Item being transferred to [% group_level_hold.hold.wbrname %] + [% END %] + [% ELSE %] + [% IF Koha.Preference('IndependentBranches') && Branches.all().size == 1 %] + [% Branches.GetName(group_level_hold.hold.branchcode) %] + [% ELSE %] + + [% END %] + [% END %] + + + [% IF group_level_hold.hold.hold_group_id %] +
(part of a hold group)
+ [% END %] + + + + + Cancel + + + + + [% END %] + [% END %] + [% FOREACH reserveloo IN biblioloo.reserveloop %] @@ -917,9 +963,6 @@ function checkMultiHold() { [% END %] [% END %] - [% IF reserveloo.hold_group_id %] -
(part of a hold group)
- [% END %] [% IF ( CAN_user_reserveforothers_modify_holds_priority ) %] @@ -959,7 +1002,6 @@ function checkMultiHold() { [% END # IF SuspendHoldsIntranet %] - [% END %] [% END %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt index 0e05092..2c0e069 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt @@ -4,6 +4,7 @@ [% USE Branches %] [% USE ItemTypes %] [% USE Price %] +[% USE Biblio %] [% SET borrower_club_enrollments = borrower.get_club_enrollments(1) %] [% SET borrower_enrollable_clubs = borrower.get_enrollable_clubs(1,1) %] @@ -585,20 +586,152 @@ - [% FOREACH RESERVE IN RESERVES %] - [% IF ( RESERVE.is_waiting ) %] - [% IF ( RESERVE.is_at_destination ) %] - [% IF ( RESERVE.is_found ) %] + [% IF (grouped_holds) %] + [% FOREACH group_level_hold IN grouped_holds %] + + + [% biblio = Biblio.Get(group_level_hold.hold.biblionumber) %] + + [% biblio.title %] + + [% biblio.author %] + + + + Hold date: + [% group_level_hold.hold.reservedate | $KohaDates %] + + + + [% IF ! group_level_hold.hold.found %] + [% IF ( group_level_hold.hold.expirationdate ) %] + + Expiration: + [% group_level_hold.hold.expirationdate | $KohaDates %] + + [% ELSE %] + + Expiration: + Never expires + + [%END %] + [% ELSE %] + - + [% END %] + + [% UNLESS( singleBranchMode) %] + + Pick up location: + [% Branches.GetName(group_level_hold.hold.branchcode ) %] + + [% END %] + [% IF ( showpriority ) %] + + + [% END %] + + Status: + [% IF ( group_level_hold.hold.is_waiting ) %] + [% IF ( group_level_hold.hold.is_at_destination ) %] + [% IF ( group_level_hold.hold.found ) %] + Item waiting at [% group_level_hold.hold.branch.branchname %] + [% IF ( group_level_hold.hold.waitingdate ) %] + since [% group_level_hold.hold.waitingdate | $KohaDates %] until [% group_level_hold.hold.lastpickupdate | $KohaDates %] + [% END %] + + [% ELSE %] + Item waiting to be pulled from [% Branches.GetName( group_level_hold.hold.branchcode ) %] + [% END %] + [% ELSE %] + Item in transit to [% Branches.GetName(group_level_hold.hold.branchcode ) %] + [% END %] + [% ELSE %] + [% IF ( group_level_hold.hold.is_in_transit ) %] + [% SET transfer = group_level_hold.hold.item.get_transfer %] + Item in transit from [% Branches.GetName( transfer.frombranch ) %] since + [% transfer.datesent | $KohaDates %] + [% ELSIF ( group_level_level.hold.suspend ) %] + Suspended [% IF ( group_level_hold.hold.suspend_until ) %] until [% grou_level_hold.hold.suspend_until %] [% END %] + [% ELSE %] + [% IF group_level_hold.hold.itemtype %] + Pending for next available item of itemtype '[% ItemTypes.GetDescription( group_level_hold.hold.itemtype ) %]' + [% ELSE %] + Pending + [% END %] + [% END %] + [% END %] + + [% IF SuspendHoldsOpac %] + + [% IF ( group_level_hold.hold.is_cancelable_from_opac ) %] + [% IF group_level_hold.hold.suspend %] +
+ + +
+ [% ELSE %] + [% IF AutoResumeSuspendedHolds %] + Suspend + [% # hold suspend modal form %] + - [% END %] [% END # / #RESERVES.count %] diff --git a/opac/opac-user.pl b/opac/opac-user.pl index 2ba7496..ca3beea 100755 --- a/opac/opac-user.pl +++ b/opac/opac-user.pl @@ -42,6 +42,7 @@ use Koha::Patron::Attribute::Types; use Koha::Patron::Messages; use Koha::Patron::Discharge; use Koha::Patrons; +use Data::Dumper; use constant ATTRIBUTE_SHOW_BARCODE => 'SHOW_BCODE'; @@ -298,6 +299,43 @@ if ($show_barcode) { $template->param( show_barcode => 1 ) if $show_barcode; # now the reserved items.... +my @reserves = Koha::Holds->search( { borrowernumber => $borrowernumber } ); +my $reserves = Koha::Holds->search( { borrowernumber => $borrowernumber } ); + +my %reserve_records; +my $count = 0; +foreach my $reserve ( @reserves ) { + warn Dumper($reserve->hold_group_id); + if ($reserve->hold_group_id) { + # Keep track of which hold_group_id (duplicated field) go with each reserve_id (unique field) + $reserve_records{ $reserve->hold_group_id }->{ $reserve->reserve_id }++; + warn $reserve->reserve_id; + $reserves = grep { $_->{'reserve_id'} != $reserve->reserve_id } $reserves; + }else { + warn $reserve->reserve_id; + warn $reserve->hold_group_id; + } +} +my @grouped_parts; +for my $hold_group ( sort { $a <=> $b } keys %reserve_records ) { + my @reserveids = sort { $a <=> $b } keys %{ $reserve_records{ $hold_group } }; + my @holds = GetHoldGroupHolds($hold_group); + my $hold = $holds[0]; + my $patron = Koha::Patrons->find( {borrowernumber => $hold->{borrowernumber}} ); + # Merge the itemnumbers with each hold_group_id + push @grouped_parts, { + hold_group_id => $hold_group, + reserve_id => join(', ', sort { $a <=> $b } @reserveids), + hold => $hold, + patron => $patron, + }; +} + +warn Dumper(@grouped_parts); +if (@grouped_parts) { + $template->param( grouped_holds => \@grouped_parts ); +} + my $reserves = Koha::Holds->search( { borrowernumber => $borrowernumber } ); $template->param( diff --git a/reserve/hold-group.pl b/reserve/hold-group.pl index 49d33e4..b24c417 100755 --- a/reserve/hold-group.pl +++ b/reserve/hold-group.pl @@ -21,6 +21,8 @@ use CGI qw( -utf8 ); use C4::Auth; use C4::Output; use C4::Reserves; +use C4::Items; +use Data::Dumper; my $cgi = new CGI; my ($template, $loggedinuser, $cookie) = get_template_and_user({ diff --git a/reserve/request.pl b/reserve/request.pl index 4cf6c07..15c7725 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -42,6 +42,7 @@ use Koha::DateUtils; use C4::Utils::DataTables::Members; use C4::Members; use C4::Search; # enabled_staff_search_views +use Data::Dumper; use Koha::Biblios; use Koha::DateUtils; @@ -115,6 +116,9 @@ if ( $action eq 'move' ) { my $reserve_id = $input->param('reserve_id'); my $suspend_until = $input->param('suspend_until'); ToggleSuspend( $reserve_id, $suspend_until ); +} elsif ( $action eq 'cancel_group_hold' ) { + + } if ($findborrower) { @@ -568,6 +572,7 @@ foreach my $biblionumber (@biblionumbers) { } @reserves ) { + my $priority = $res->priority(); my %reserve; my @optionloop; @@ -580,7 +585,6 @@ foreach my $biblionumber (@biblionumbers) { } ); } - if ( $res->is_found() ) { $reserve{'holdingbranch'} = $res->item()->holdingbranch(); $reserve{'biblionumber'} = $res->item()->biblionumber(); @@ -631,10 +635,43 @@ foreach my $biblionumber (@biblionumbers) { $reserve{itemtype} = $res->itemtype(); $reserve{branchcode} = $res->branchcode(); $reserve{'hold_group_id'} = $res->hold_group_id; - push( @reserveloop, \%reserve ); } + my %reserve_records; + my $count = 0; + foreach my $reserve ( @reserves ) { + warn $reserve->reserve_id; + if ($reserve->hold_group_id) { + # Keep track of which hold_group_id (duplicated field) go with each reserve_id (unique field) + $reserve_records{ $reserve->hold_group_id }->{ $reserve->reserve_id }++; + warn $reserve->reserve_id; + @reserveloop = grep { $_->{reserve_id} != $reserve->reserve_id } @reserveloop; + }else { + warn $reserve->reserve_id; + warn $reserve->hold_group_id; + } + } + my @grouped_parts; + for my $hold_group ( sort { $a <=> $b } keys %reserve_records ) { + my @reserveids = sort { $a <=> $b } keys %{ $reserve_records{ $hold_group } }; + + my @holds = GetHoldGroupHolds($hold_group); + my $hold = $holds[0]; + my $patron = Koha::Patrons->find( {borrowernumber => $hold->{borrowernumber}} ); + + # Merge the itemnumbers with each hold_group_id + push @grouped_parts, { + hold_group_id => $hold_group, + reserve_id => join(', ', sort { $a <=> $b } @reserveids), + hold => $hold, + patron => $patron, + }; + } + if (@grouped_parts) { + $template->param( grouped_holds => \@grouped_parts ); + } + # get the time for the form name... my $time = time(); -- 2.1.4