# along with Koha; if not, see <http://www.gnu.org/licenses>.
-use strict;
-#use warnings; FIXME - Bug 2505
+use Modern::Perl;
use CGI qw ( -utf8 );
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';
}
}
+# 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",
}
);
-my %renewed = map { $_ => 1 } split( ':', $query->param('renewed') );
+my %renewed = map { $_ => 1 } split( ':', $query->param('renewed') || '' );
my $show_priority;
for ( C4::Context->preference("OPACShowHoldQueueDetails") ) {
$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) {
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'} ) {
$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' );
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 => sprintf( '%.02f', $no_renewal_amt ),
- renewal_blocked_fines_amountoutstanding =>
- sprintf( '%.02f', $borr->{amountoutstanding} ),
+ renewal_blocked_fines => $no_renewal_amt,
+ renewal_blocked_fines_amountoutstanding => $amountoutstanding,
);
}
-if ( $borr->{'amountoutstanding'} < 0 ) {
+if ( $amountoutstanding < 0 ) {
$borr->{'amountlessthanzero'} = 1;
- $borr->{'amountoutstanding'} = -1 * ( $borr->{'amountoutstanding'} );
+ $amountoutstanding = -1 * ( $amountoutstanding );
}
-$borr->{'amountoutstanding'} = sprintf "%.02f", $borr->{'amountoutstanding'};
-
# Warningdate is the date that the warning starts appearing
if ( $borr->{'dateexpiry'} && C4::Context->preference('NotifyBorrowerDeparture') ) {
my $days_to_expiry = Date_to_Days( $warning_year, $warning_month, $warning_day ) - Date_to_Days( $today_year, $today_month, $today_day );
# 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,
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;
}
$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;
}
}
- if ( $issue->{'overdue'} ) {
+ if ( $c->is_overdue ) {
push @overdues, $issue;
$overdues_count++;
$issue->{'overdue'} = 1;
}
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 } );
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,
$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,
+ RecordedBooksCirculation => C4::Context->preference('RecordedBooksClientSecret') && C4::Context->preference('RecordedBooksLibraryID'),
+);
+
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') )
}
$template->param(
- borrower => $borr,
patron_messages => $patron_messages,
+ opacnote => $borr->{opacnote},
patronupdate => $patronupdate,
OpacRenewalAllowed => C4::Context->preference("OpacRenewalAllowed"),
userview => 1,
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 };