X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Fopac-user.pl;h=d3ff88884808e4fb95b503bff95811c70a4efeaa;hb=36df53ad8d4987e938e478d934d553b73e7450f2;hp=55c04a3a7874deb37d5f09d930ce8aa9b491315f;hpb=3df0c9ac70621b2b434b47424cc9be2d2ba58bc4;p=koha.git diff --git a/opac/opac-user.pl b/opac/opac-user.pl index 55c04a3a78..d3ff888848 100755 --- a/opac/opac-user.pl +++ b/opac/opac-user.pl @@ -17,8 +17,7 @@ # along with Koha; if not, see . -use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; use CGI qw ( -utf8 ); @@ -33,6 +32,7 @@ use C4::Output; use C4::Biblio; use C4::Items; use C4::Letters; +use Koha::Account::Lines; use Koha::Libraries; use Koha::DateUtils; use Koha::Holds; @@ -61,6 +61,10 @@ BEGIN { } } +# CAS single logout handling +# Will print header and exit +C4::Context->preference('casAuthentication') and C4::Auth_with_cas::logout_if_required($query); + my ( $template, $borrowernumber, $cookie ) = get_template_and_user( { template_name => "opac-user.tt", @@ -71,7 +75,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( } ); -my %renewed = map { $_ => 1 } split( ':', $query->param('renewed') ); +my %renewed = map { $_ => 1 } split( ':', $query->param('renewed') || '' ); my $show_priority; for ( C4::Context->preference("OPACShowHoldQueueDetails") ) { @@ -83,12 +87,11 @@ my $canrenew = 1; $template->param( shibbolethAuthentication => C4::Context->config('useshibboleth') ); -if (!$borrowernumber) { - $template->param( adminWarning => 1 ); -} - # get borrower information .... -my $borr = Koha::Patrons->find( $borrowernumber )->unblessed; +my $patron = Koha::Patrons->find( $borrowernumber ); +my $borr = $patron->unblessed; +# unblessed is a hash vs. object/undef. Hence the use of curly braces here. +my $borcat = $borr ? $borr->{categorycode} : q{}; my ( $today_year, $today_month, $today_day) = Today(); my ($warning_year, $warning_month, $warning_day) = split /-/, $borr->{'dateexpiry'}; @@ -116,7 +119,7 @@ if ( $userdebarred || $borr->{'gonenoaddress'} || $borr->{'lost'} ) { $canrenew = 0; } -my ( $amountoutstanding ) = GetMemberAccountRecords($borrowernumber); +my $amountoutstanding = $patron->account->balance; if ( $amountoutstanding > 5 ) { $borr->{'amountoverfive'} = 1; } @@ -161,7 +164,7 @@ if ( $borr->{'dateexpiry'} && C4::Context->preference('NotifyBorrowerDeparture') # pass on any renew errors to the template for displaying my $renew_error = $query->param('renew_error'); -$template->param( BORROWER_INFO => $borr, +$template->param( amountoutstanding => $amountoutstanding, borrowernumber => $borrowernumber, patron_flagged => $borr->{flagged}, @@ -178,33 +181,42 @@ my $overdues_count = 0; my @overdues; my @issuedat; my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } }; -my $issues = GetPendingIssues($borrowernumber); -if ($issues){ - foreach my $issue ( sort { $b->{date_due}->datetime() cmp $a->{date_due}->datetime() } @{$issues} ) { +my $pending_checkouts = $patron->pending_checkouts->search({}, { order_by => [ { -desc => 'date_due' }, { -asc => 'issue_id' } ] }); +if ( $pending_checkouts->count ) { # Useless test + while ( my $c = $pending_checkouts->next ) { + my $issue = $c->unblessed_all_relateds; # check for reserves my $restype = GetReserveStatus( $issue->{'itemnumber'} ); if ( $restype ) { $issue->{'reserved'} = 1; } - my ( $total , $accts, $numaccts) = GetMemberAccountRecords( $borrowernumber ); - my $charges = 0; - my $rentalfines = 0; - foreach my $ac (@$accts) { - if ( $ac->{'itemnumber'} == $issue->{'itemnumber'} ) { - $charges += $ac->{'amountoutstanding'} - if $ac->{'accounttype'} eq 'F'; - $charges += $ac->{'amountoutstanding'} - if $ac->{'accounttype'} eq 'FU'; - $charges += $ac->{'amountoutstanding'} - if $ac->{'accounttype'} eq 'L'; - $rentalfines += $ac->{'amountoutstanding'} - if $ac->{'accounttype'} eq 'Rent'; + # Must be moved in a module if reused + my $charges = Koha::Account::Lines->search( + { + borrowernumber => $patron->borrowernumber, + amountoutstanding => { '>' => 0 }, + accounttype => [ 'F', 'FU', 'L' ], + itemnumber => $issue->{itemnumber} + }, + ); + $issue->{charges} = $charges->total_outstanding; + + my $rental_fines = Koha::Account::Lines->search( + { + borrowernumber => $patron->borrowernumber, + amountoutstanding => { '>' => 0 }, + accounttype => 'Rent', + itemnumber => $issue->{itemnumber} } - } - $issue->{'charges'} = $charges; - $issue->{'rentalfines'} = $rentalfines; - my $marcrecord = GetMarcBiblio({ biblionumber => $issue->{'biblionumber'} }); + ); + $issue->{rentalfines} = $rental_fines->total_outstanding; + + my $marcrecord = GetMarcBiblio({ + biblionumber => $issue->{'biblionumber'}, + embed_items => 1, + opac => 1, + borcat => $borcat }); $issue->{'subtitle'} = GetRecordValue('subtitle', $marcrecord, GetFrameworkCode($issue->{'biblionumber'})); # check if item is renewable my ($status,$renewerror) = CanBookBeRenewed( $borrowernumber, $issue->{'itemnumber'} ); @@ -224,6 +236,7 @@ if ($issues){ $issue->{'auto_too_soon'} = 1 if $renewerror eq 'auto_too_soon'; $issue->{'auto_too_late'} = 1 if $renewerror eq 'auto_too_late'; $issue->{'auto_too_much_oweing'} = 1 if $renewerror eq 'auto_too_much_oweing'; + $issue->{'item_denied_renewal'} = 1 if $renewerror eq 'item_denied_renewal'; if ( $renewerror eq 'too_soon' ) { $issue->{'too_soon'} = 1; @@ -236,7 +249,7 @@ if ($issues){ } } - if ( $issue->{'overdue'} ) { + if ( $c->is_overdue ) { push @overdues, $issue; $overdues_count++; $issue->{'overdue'} = 1; @@ -294,13 +307,6 @@ $template->param( showpriority => $show_priority, ); -# current alert subscriptions -my $alerts = getalert($borrowernumber); -foreach ( @$alerts ) { - $_->{ $_->{type} } = 1; - $_->{relatedto} = findrelatedto( $_->{type}, $_->{externalid} ); -} - if (C4::Context->preference('BakerTaylorEnabled')) { $template->param( BakerTaylorEnabled => 1, @@ -321,6 +327,7 @@ $template->param( OverDriveCirculation => C4::Context->preference('OverDriveCirculation') || 0, overdrive_error => scalar $query->param('overdrive_error') || undef, overdrive_tab => scalar $query->param('overdrive_tab') || 0, + RecordedBooksCirculation => C4::Context->preference('RecordedBooksClientSecret') && C4::Context->preference('RecordedBooksLibraryID'), ); my $patron_messages = Koha::Patron::Messages->search( @@ -345,7 +352,6 @@ if ( C4::Context->preference('AllowPatronToSetCheckoutsVisibilityForGuarantor' } $template->param( - borrower => scalar Koha::Patrons->find($borrowernumber), patron_messages => $patron_messages, opacnote => $borr->{opacnote}, patronupdate => $patronupdate, @@ -357,4 +363,16 @@ $template->param( failed_holds => scalar $query->param('failed_holds'), ); +# if not an empty string this indicates to return +# back to the opac-results page +my $search_query = $query->param('has-search-query'); + +if ($search_query) { + + print $query->redirect( + -uri => "/cgi-bin/koha/opac-search.pl?$search_query", + -cookie => $cookie, + ); +} + output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 };