From ee7d802fdbbd41965896fd2a52af9fb74b47b1e5 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 --- Koha/Biblio.pm | 13 +++ Koha/Hold.pm | 38 +++++++++ .../opac-tmpl/bootstrap/en/modules/opac-user.tt | 54 ++++++++----- opac/opac-user.pl | 81 ++------------------ 4 files changed, 91 insertions(+), 95 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..ef45eeb 100644 --- a/Koha/Hold.pm +++ b/Koha/Hold.pm @@ -105,6 +105,44 @@ 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_in_transit + +Returns true if hold is a in_transit hold + +=cut + +sub is_in_transit { + my ($self) = @_; + + return 0 unless $self->found(); + return $self->found() eq 'T'; +} + +=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 b5bc8d2..bb0d148 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt @@ -511,9 +511,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 %] @@ -526,13 +526,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 %] @@ -541,19 +541,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 ) %] @@ -563,11 +567,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 %] @@ -575,7 +585,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 ) %] @@ -587,7 +597,7 @@ [% IF SuspendHoldsOpac %] - [% IF ( RESERVE.cancelable ) %] + [% IF ( RESERVE.is_cancelable ) %] [% IF RESERVE.suspend %]
@@ -628,11 +638,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 28e73de..37325a5 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'; @@ -276,79 +277,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); @@ -386,7 +322,6 @@ if ( $borr->{'opacnote'} ) { $template->param( bor_messages_loop => GetMessages( $borrowernumber, 'B', 'NONE' ), - waiting_count => $wcount, patronupdate => $patronupdate, OpacRenewalAllowed => C4::Context->preference("OpacRenewalAllowed"), userview => 1, -- 1.7.2.5