X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-user.pl;h=e599cecf1855fdcd4fa022b82175f2eaced32c1b;hb=6b77697c31e9a23c85dd430d764d92143f850d76;hp=ec06d1d45d182f2f8f042ea370da595484d271b0;hpb=dc1ff4efff70cabfad5b8e2e69e7a9448cc61e16;p=koha_ffzg diff --git a/opac/opac-user.pl b/opac/opac-user.pl index ec06d1d45d..e599cecf18 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,12 +32,16 @@ use C4::Output; use C4::Biblio; use C4::Items; use C4::Letters; -use C4::Branch; # GetBranches +use Koha::Account::Lines; +use Koha::Libraries; use Koha::DateUtils; -use Koha::Patron::Debarments qw(IsDebarred); use Koha::Holds; use Koha::Database; +use Koha::ItemTypes; +use Koha::Patron::Attribute::Types; use Koha::Patron::Messages; +use Koha::Patron::Discharge; +use Koha::Patrons; use constant ATTRIBUTE_SHOW_BARCODE => 'SHOW_BCODE'; @@ -58,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", @@ -68,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") ) { @@ -80,17 +87,14 @@ my $canrenew = 1; $template->param( shibbolethAuthentication => C4::Context->config('useshibboleth') ); -if (!$borrowernumber) { - $template->param( adminWarning => 1 ); -} - # get borrower information .... -my ( $borr ) = GetMemberDetails( $borrowernumber ); +my $patron = Koha::Patrons->find( $borrowernumber ); +my $borr = $patron->unblessed; my ( $today_year, $today_month, $today_day) = Today(); my ($warning_year, $warning_month, $warning_day) = split /-/, $borr->{'dateexpiry'}; -my $debar = IsDebarred($borrowernumber); +my $debar = Koha::Patrons->find( $borrowernumber )->is_debarred; my $userdebarred; if ($debar) { @@ -99,6 +103,13 @@ if ($debar) { if ( $debar ne "9999-12-31" ) { $borr->{'userdebarreddate'} = $debar; } + # FIXME looks like $available is not needed + # If a user is discharged they have a validated discharge available + my $available = Koha::Patron::Discharge::count({ + borrowernumber => $borrowernumber, + validated => 1, + }); + $template->param( 'discharge_available' => $available && Koha::Patron::Discharge::is_discharged({borrowernumber => $borrowernumber}) ); } if ( $userdebarred || $borr->{'gonenoaddress'} || $borr->{'lost'} ) { @@ -106,10 +117,11 @@ if ( $userdebarred || $borr->{'gonenoaddress'} || $borr->{'lost'} ) { $canrenew = 0; } -if ( $borr->{'amountoutstanding'} > 5 ) { +my $amountoutstanding = $patron->account->balance; +if ( $amountoutstanding > 5 ) { $borr->{'amountoverfive'} = 1; } -if ( 5 >= $borr->{'amountoutstanding'} && $borr->{'amountoutstanding'} > 0 ) { +if ( 5 >= $amountoutstanding && $amountoutstanding > 0 ) { $borr->{'amountoverzero'} = 1; } my $no_renewal_amt = C4::Context->preference( 'OPACFineNoRenewals' ); @@ -117,19 +129,19 @@ $no_renewal_amt = undef unless looks_like_number( $no_renewal_amt ); if ( C4::Context->preference('OpacRenewalAllowed') && defined($no_renewal_amt) - && $borr->{amountoutstanding} > $no_renewal_amt ) + && $amountoutstanding > $no_renewal_amt ) { $borr->{'flagged'} = 1; $canrenew = 0; $template->param( renewal_blocked_fines => $no_renewal_amt, - renewal_blocked_fines_amountoutstanding => $borr->{amountoutstanding}, + renewal_blocked_fines_amountoutstanding => $amountoutstanding, ); } -if ( $borr->{'amountoutstanding'} < 0 ) { +if ( $amountoutstanding < 0 ) { $borr->{'amountlessthanzero'} = 1; - $borr->{'amountoutstanding'} = -1 * ( $borr->{'amountoutstanding'} ); + $amountoutstanding = -1 * ( $amountoutstanding ); } # Warningdate is the date that the warning starts appearing @@ -150,7 +162,8 @@ 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}, OPACMySummaryHTML => (C4::Context->preference("OPACMySummaryHTML")) ? 1 : 0, @@ -165,34 +178,49 @@ my $count = 0; my $overdues_count = 0; my @overdues; my @issuedat; -my $itemtypes = GetItemTypes(); -my $issues = GetPendingIssues($borrowernumber); -if ($issues){ - foreach my $issue ( sort { $b->{date_due}->datetime() cmp $a->{date_due}->datetime() } @{$issues} ) { +my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } }; +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; - 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'; + # 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} + }, + { select => [ { sum => 'amountoutstanding' } ], as => ['charges'] } + ); + $issue->{charges} = $charges->count ? $charges->next->get_column('charges') : 0; + + my $rental_fines = Koha::Account::Lines->search( + { + borrowernumber => $patron->borrowernumber, + amountoutstanding => { '>' => 0 }, + accounttype => 'Rent', + itemnumber => $issue->{itemnumber} + }, + { + select => [ { sum => 'amountoutstanding' } ], + as => ['rental_fines'] } - } - $issue->{'charges'} = $charges; - my $marcrecord = GetMarcBiblio( $issue->{'biblionumber'} ); + ); + $issue->{rentalfines} = $rental_fines->count ? $rental_fines->next->get_column('rental_fines') : 0; + + my $marcrecord = GetMarcBiblio({ biblionumber => $issue->{'biblionumber'} }); $issue->{'subtitle'} = GetRecordValue('subtitle', $marcrecord, GetFrameworkCode($issue->{'biblionumber'})); # check if item is renewable my ($status,$renewerror) = CanBookBeRenewed( $borrowernumber, $issue->{'itemnumber'} ); ($issue->{'renewcount'},$issue->{'renewsallowed'},$issue->{'renewsleft'}) = GetRenewCount($borrowernumber, $issue->{'itemnumber'}); + ( $issue->{'renewalfee'}, $issue->{'renewalitemtype'} ) = GetIssuingCharges( $issue->{'itemnumber'}, $borrowernumber ); if($status && C4::Context->preference("OpacRenewalAllowed")){ $issue->{'status'} = $status; } @@ -205,6 +233,8 @@ if ($issues){ $issue->{'norenew_overdue'} = 1 if $renewerror eq 'overdue'; $issue->{'auto_renew'} = 1 if $renewerror eq 'auto_renew'; $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'; if ( $renewerror eq 'too_soon' ) { $issue->{'too_soon'} = 1; @@ -217,7 +247,7 @@ if ($issues){ } } - if ( $issue->{'overdue'} ) { + if ( $c->is_overdue ) { push @overdues, $issue; $overdues_count++; $issue->{'overdue'} = 1; @@ -252,37 +282,21 @@ if ($issues){ } my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing'); $canrenew = 0 if ($overduesblockrenewing ne 'allow' and $overdues_count == $count); + $template->param( ISSUES => \@issuedat ); $template->param( issues_count => $count ); $template->param( canrenew => $canrenew ); $template->param( OVERDUES => \@overdues ); $template->param( overdues_count => $overdues_count ); -my $show_barcode = C4::Members::AttributeTypes::AttributeTypeExists( ATTRIBUTE_SHOW_BARCODE ); +my $show_barcode = Koha::Patron::Attribute::Types->search( + { code => ATTRIBUTE_SHOW_BARCODE } )->count; if ($show_barcode) { my $patron_show_barcode = GetBorrowerAttributeValue($borrowernumber, ATTRIBUTE_SHOW_BARCODE); undef $show_barcode if defined($patron_show_barcode) && !$patron_show_barcode; } $template->param( show_barcode => 1 ) if $show_barcode; -# load the branches -my $branches = GetBranches(); -my @branch_loop; -for my $branch_hash ( sort keys %{$branches} ) { - my $selected; - if ( C4::Context->preference('SearchMyLibraryFirst') ) { - $selected = - ( C4::Context->userenv - && ( $branch_hash eq C4::Context->userenv->{branch} ) ); - } - push @branch_loop, - { value => "branch: $branch_hash", - branchname => $branches->{$branch_hash}->{'branchname'}, - selected => $selected, - }; -} -$template->param( branchloop => \@branch_loop ); - # now the reserved items.... my $reserves = Koha::Holds->search( { borrowernumber => $borrowernumber } ); @@ -291,13 +305,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, @@ -314,22 +321,18 @@ if (C4::Context->preference("OPACAmazonCoverImages") or $template->param(JacketImages=>1); } +$template->param( + OverDriveCirculation => C4::Context->preference('OverDriveCirculation') || 0, + overdrive_error => scalar $query->param('overdrive_error') || undef, + overdrive_tab => scalar $query->param('overdrive_tab') || 0, +); + my $patron_messages = Koha::Patron::Messages->search( { borrowernumber => $borrowernumber, message_type => 'B', } ); -if ( $patron_messages->count ) { - $template->param( bor_messages => 1 ); -} - -if ( $borr->{'opacnote'} ) { - $template->param( - bor_messages => 1, - opacnote => $borr->{'opacnote'}, - ); -} if ( C4::Context->preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') || C4::Context->preference('AllowStaffToSetCheckoutsVisibilityForGuarantor') ) @@ -346,8 +349,8 @@ if ( C4::Context->preference('AllowPatronToSetCheckoutsVisibilityForGuarantor' } $template->param( - borrower => $borr, patron_messages => $patron_messages, + opacnote => $borr->{opacnote}, patronupdate => $patronupdate, OpacRenewalAllowed => C4::Context->preference("OpacRenewalAllowed"), userview => 1, @@ -357,4 +360,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 };