From 3ff76f3357fe8cdd6bf28384171dfdeb32a82d95 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 18 Mar 2015 11:45:07 -0400 Subject: [PATCH] Bug 13918 - Add waiting expiration date to opac list of holds for user Waiting holds for patrons in the opac should display the hold expiration date based on the max pickup delay if it is set. Test Plan: 1) Ensure ReservesMaxPickUpDelay is set 2) Place a hold on a record 3) Check in the item, use it to fill the hold 4) Log into the opac as that user 5) View the holds list, note the 'until ' addition to the waiting hold line. Signed-off-by: Kyle M Hall Signed-off-by: Cathi Wiggins Signed-off-by: Megan Wianecki Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall --- Koha/Biblio.pm | 13 +++ Koha/Hold.pm | 25 ++++++ .../bootstrap/en/modules/opac-user.tt | 54 ++++++++----- opac/opac-user.pl | 80 ++----------------- 4 files changed, 78 insertions(+), 94 deletions(-) diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm index 9c467d74b3..2145a04a3c 100644 --- a/Koha/Biblio.pm +++ b/Koha/Biblio.pm @@ -21,6 +21,8 @@ use Modern::Perl; use Carp; +use C4::Biblio qw( GetRecordValue GetMarcBiblio GetFrameworkCode ); + use Koha::Database; use base qw(Koha::Object); @@ -35,6 +37,17 @@ Koha::Biblio - Koha Biblio Object class =cut +=head3 subtitle + +=cut + +sub subtitle { + my ( $self ) = @_; + + return GetRecordValue( 'subtitle', GetMarcBiblio( $self->id() ), GetFrameworkCode( $self->id() ) ); +} + + =head3 type =cut diff --git a/Koha/Hold.pm b/Koha/Hold.pm index 975f69933c..107f361558 100644 --- a/Koha/Hold.pm +++ b/Koha/Hold.pm @@ -105,6 +105,31 @@ sub is_in_transit { return $self->found() eq 'T'; } +=head3 is_cancelable + +Returns true if hold is a cancelable hold + +=cut + +sub is_cancelable { + my ($self) = @_; + + return ( $self->is_waiting() && !$self->is_found() ) + || ( !$self->is_waiting() && !$self->is_in_transit() ); +} + +=head3 is_at_destination + +Returns true if hold is a in_transit hold + +=cut + +sub is_at_destination { + my ($self) = @_; + + return $self->is_waiting() && ( $self->branchcode() eq $self->item()->holdingbranch() ); +} + =head3 biblio Returns the related Koha::Biblio object for this hold 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 6022223c7d..2d501ed75b 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt @@ -521,9 +521,9 @@ [% FOREACH RESERVE IN RESERVES %] - [% IF ( RESERVE.wait ) %] - [% IF ( RESERVE.atdestination ) %] - [% IF ( RESERVE.found ) %] + [% IF ( RESERVE.is_waiting ) %] + [% IF ( RESERVE.is_at_destination ) %] + [% IF ( RESERVE.is_found ) %] [% ELSE %] @@ -536,13 +536,13 @@ [% END %] - [% RESERVE.reserves_title %] - [% FOREACH subtitl IN RESERVE.subtitle %] + [% RESERVE.biblio.title %] + [% FOREACH subtitl IN RESERVE.biblio.subtitle %] [% subtitl.subfield %] [% END %] - [% RESERVE.enumchron %] + [% RESERVE.item.enumchron %] - [% RESERVE.author %] + [% RESERVE.biblio.author %] @@ -551,19 +551,23 @@ - [% IF ( RESERVE.expirationdate ) %] - + [% IF ! RESERVE.found %] + [% IF ( RESERVE.expirationdate ) %] + + Expiration: + [% RESERVE.expirationdate | $KohaDates %] + + [% ELSE %] Expiration: - [% RESERVE.expirationdate | $KohaDates %] - + Never expires + [% END %] [% ELSE %] - Expiration: - Never expires + - [% END %] Pick up location: - [% RESERVE.branch %] + [% RESERVE.branch.branchname %] [% IF ( showpriority ) %] @@ -573,11 +577,17 @@ [% END %] Status: - [% IF ( RESERVE.wait ) %] - [% IF ( RESERVE.atdestination ) %] + [% IF ( RESERVE.is_waiting ) %] + [% IF ( RESERVE.is_at_destination ) %] [% IF ( RESERVE.found ) %] - Item waiting at [% RESERVE.wbrname %][% IF ( RESERVE.waitingdate ) %] since [% RESERVE.waitingdate | $KohaDates %][% END %] - + Item waiting at [% RESERVE.branch.branchname %] + [% IF ( RESERVE.waitingdate ) %] + since [% RESERVE.waitingdate | $KohaDates %] + [% IF RESERVE.waiting_expires_on %] + until [% RESERVE.waiting_expires_on | $KohaDates %] + [% END %] + [% END %] + [% ELSE %] Item waiting to be pulled from [% RESERVE.wbrname %] [% END %] @@ -585,7 +595,7 @@ Item in transit to [% RESERVE.wbrname %] [% END %] [% ELSE %] - [% IF ( RESERVE.intransit ) %] + [% IF ( RESERVE.is_in_transit ) %] Item in transit from [% RESERVE.frombranch %] since [% RESERVE.datesent | $KohaDates %] [% ELSIF ( RESERVE.suspend ) %] @@ -597,7 +607,7 @@ [% IF SuspendHoldsOpac %] - [% IF ( RESERVE.cancelable ) %] + [% IF ( RESERVE.is_cancelable ) %] [% IF RESERVE.suspend %]
@@ -638,11 +648,11 @@
[% END # / IF AutoResumeSuspendedHolds %] [% END # / IF RESERVE.suspend %] - [% END # / IF ( RESERVE.cancelable )%] + [% END # / IF ( RESERVE.is_cancelable )%] [% END # / IF SuspendHoldsOpac %] - [% IF ( RESERVE.cancelable ) %] + [% IF ( RESERVE.is_cancelable ) %]
diff --git a/opac/opac-user.pl b/opac/opac-user.pl index 9d0e97f71f..2ba9ea3322 100755 --- a/opac/opac-user.pl +++ b/opac/opac-user.pl @@ -36,6 +36,7 @@ use C4::Letters; use C4::Branch; # GetBranches use Koha::DateUtils; use Koha::Borrower::Debarments qw(IsDebarred); +use Koha::Holds; use constant ATTRIBUTE_SHOW_BARCODE => 'SHOW_BCODE'; @@ -275,79 +276,14 @@ for my $branch_hash ( sort keys %{$branches} ) { $template->param( branchloop => \@branch_loop ); # now the reserved items.... -my @reserves = GetReservesFromBorrowernumber( $borrowernumber ); -foreach my $res (@reserves) { +my $reserves = Koha::Holds->search( { borrowernumber => $borrowernumber } ); - if ( $res->{'expirationdate'} eq '0000-00-00' ) { - $res->{'expirationdate'} = ''; - } - $res->{'subtitle'} = GetRecordValue('subtitle', GetMarcBiblio($res->{'biblionumber'}), GetFrameworkCode($res->{'biblionumber'})); - $res->{'waiting'} = 1 if $res->{'found'} eq 'W'; - $res->{'branch'} = $branches->{ $res->{'branchcode'} }->{'branchname'}; - my $biblioData = GetBiblioData($res->{'biblionumber'}); - $res->{'reserves_title'} = $biblioData->{'title'}; - $res->{'author'} = $biblioData->{'author'}; - - if ($show_priority) { - $res->{'priority'} ||= ''; - } - if ( $res->{'suspend_until'} ) { - $res->{'suspend_until'} = output_pref({ dt => dt_from_string( $res->{'suspend_until'} , 'iso' ), dateonly => 1 }); - } -} - -# use Data::Dumper; -# warn Dumper(@reserves); - -$template->param( RESERVES => \@reserves ); -$template->param( reserves_count => $#reserves+1 ); -$template->param( showpriority=>$show_priority ); - -my @waiting; -my $wcount = 0; -foreach my $res (@reserves) { - if ( $res->{'itemnumber'} ) { - my $item = GetItem( $res->{'itemnumber'}); - $res->{'holdingbranch'} = - $branches->{ $item->{'holdingbranch'} }->{'branchname'}; - $res->{'branch'} = $branches->{ $res->{'branchcode'} }->{'branchname'}; - $res->{'enumchron'} = $item->{'enumchron'} if $item->{'enumchron'}; - # get document reserve status - my $biblioData = GetBiblioData($res->{'biblionumber'}); - $res->{'waiting_title'} = $biblioData->{'title'}; - if ( ( $res->{'found'} eq 'W' ) ) { - my $item = $res->{'itemnumber'}; - $item = GetBiblioFromItemNumber($item,undef); - $res->{'wait'}= 1; - $res->{'holdingbranch'}=$item->{'holdingbranch'}; - $res->{'biblionumber'}=$item->{'biblionumber'}; - $res->{'barcode'} = $item->{'barcode'}; - $res->{'wbrcode'} = $res->{'branchcode'}; - $res->{'itemnumber'} = $res->{'itemnumber'}; - $res->{'wbrname'} = $branches->{$res->{'branchcode'}}->{'branchname'}; - if($res->{'holdingbranch'} eq $res->{'wbrcode'}){ - $res->{'atdestination'} = 1; - } - # set found to 1 if reserve is waiting for patron pickup - $res->{'found'} = 1 if $res->{'found'} eq 'W'; - } else { - my ($transfertwhen, $transfertfrom, $transfertto) = GetTransfers( $res->{'itemnumber'} ); - if ($transfertwhen) { - $res->{intransit} = 1; - $res->{datesent} = $transfertwhen; - $res->{frombranch} = GetBranchName($transfertfrom); - } - } - push @waiting, $res; - $wcount++; - } - # can be cancelled - #$res->{'cancelable'} = 1 if ($res->{'wait'} && $res->{'atdestination'} && $res->{'found'} ne "1"); - $res->{'cancelable'} = 1 if ($res->{wait} and not $res->{found}) or (not $res->{wait} and not $res->{intransit}); - -} - -$template->param( WAITING => \@waiting ); +$template->param( + RESERVES => $reserves, + reserves_count => $reserves->count(), + showpriority => $show_priority, + WAITING => $reserves->waiting() +); # current alert subscriptions my $alerts = getalert($borrowernumber); -- 2.39.5