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 +++++++ .../opac-tmpl/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 9c467d7..2145a04 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 975f699..107f361 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 6022223..2d501ed 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 9d0e97f..2ba9ea3 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.1.4