X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-user.pl;h=f6ed4841704017b6f021074c5f31e0c07ca7aab9;hb=d7a51d83c16f5617ee975bfedd055eddde0c8c9f;hp=708ba7f1d4f0940ec9fc5688bf3efab264da8a76;hpb=2b1472744997e5c9567479d38357baf8adc0a2d0;p=koha_gimpoz diff --git a/opac/opac-user.pl b/opac/opac-user.pl index 708ba7f1d4..f6ed484170 100755 --- a/opac/opac-user.pl +++ b/opac/opac-user.pl @@ -1,6 +1,7 @@ #!/usr/bin/perl # This file is part of Koha. +# parts copyright 2010 BibLibre # # Koha is free software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software @@ -17,6 +18,7 @@ use strict; +#use warnings; FIXME - Bug 2505 use CGI; @@ -25,13 +27,24 @@ use C4::Koha; use C4::Circulation; use C4::Reserves; use C4::Members; +use C4::Members::AttributeTypes; +use C4::Members::Attributes qw/GetBorrowerAttributeValue/; use C4::Output; +use C4::Overdues qw/CheckBorrowerDebarred/; use C4::Biblio; use C4::Items; use C4::Dates qw/format_date/; use C4::Letters; use C4::Branch; # GetBranches +use constant ATTRIBUTE_SHOW_BARCODE => 'SHOW_BCODE'; + +use Date::Calc qw( + Today + Add_Delta_Days + Date_to_Days +); + my $query = new CGI; BEGIN { @@ -58,22 +71,45 @@ my $patronupdate = $query->param('patronupdate'); # get borrower information .... my ( $borr ) = GetMemberDetails( $borrowernumber ); +my ( $today_year, $today_month, $today_day) = Today(); +my ($warning_year, $warning_month, $warning_day) = split /-/, $borr->{'dateexpiry'}; + for (qw(dateenrolled dateexpiry dateofbirth)) { ($borr->{$_}) and $borr->{$_} = format_date($borr->{$_}); } $borr->{'ethnicity'} = fixEthnicity( $borr->{'ethnicity'} ); -if ( $borr->{'debarred'} || $borr->{'gonenoaddress'} || $borr->{'lost'} ) { +my $debar = CheckBorrowerDebarred($borrowernumber); +my $userdebarred; + +if ($debar) { + $userdebarred = 1; + $template->param( 'userdebarred' => $userdebarred ); + if ( $debar ne "9999-12-31" ) { + $borr->{'userdebarreddate'} = C4::Dates::format_date($debar); + } +} + +if ( $userdebarred || $borr->{'gonenoaddress'} || $borr->{'lost'} ) { $borr->{'flagged'} = 1; } -# $make flagged available everywhere in the template -my $patron_flagged = $borr->{'flagged'}; + if ( $borr->{'amountoutstanding'} > 5 ) { $borr->{'amountoverfive'} = 1; } if ( 5 >= $borr->{'amountoutstanding'} && $borr->{'amountoutstanding'} > 0 ) { $borr->{'amountoverzero'} = 1; } +my $no_renewal_amt = C4::Context->preference( 'OPACFineNoRenewals' ); +$no_renewal_amt ||= 0; + +if ( $borr->{amountoutstanding} > $no_renewal_amt ) { + $borr->{'flagged'} = 1; + $template->param( + renewal_blocked_fines => sprintf( '%.02f', $no_renewal_amt ), + ); +} + if ( $borr->{'amountoutstanding'} < 0 ) { $borr->{'amountlessthanzero'} = 1; $borr->{'amountoutstanding'} = -1 * ( $borr->{'amountoutstanding'} ); @@ -84,14 +120,28 @@ $borr->{'amountoutstanding'} = sprintf "%.02f", $borr->{'amountoutstanding'}; my @bordat; $bordat[0] = $borr; -$template->param( BORROWER_INFO => \@bordat, - borrowernumber => $borrowernumber, - patron_flagged => $patron_flagged, +# Warningdate is the date that the warning starts appearing +if ( C4::Context->preference('NotifyBorrowerDeparture') && + Date_to_Days(Add_Delta_Days($warning_year,$warning_month,$warning_day,- C4::Context->preference('NotifyBorrowerDeparture'))) < + Date_to_Days( $today_year, $today_month, $today_day ) ) +{ + # borrower card soon to expire, warn the borrower + $borr->{'warndeparture'} = $borr->{dateexpiry}; + if (C4::Context->preference('ReturnBeforeExpiry')){ + $borr->{'returnbeforeexpiry'} = 1; + } +} + +$template->param( BORROWER_INFO => \@bordat, + borrowernumber => $borrowernumber, + patron_flagged => $borr->{flagged}, + OPACMySummaryHTML => (C4::Context->preference("OPACMySummaryHTML")) ? 1 : 0, + surname => $borr->{surname}, + showname => $borr->{showname}, + ); #get issued items .... -my ($issues) = GetPendingIssues($borrowernumber); -my @issue_list = sort { $b->{'date_due'} cmp $a->{'date_due'} } @$issues; my $count = 0; my $toggle = 0; @@ -99,87 +149,122 @@ my $overdues_count = 0; my @overdues; my @issuedat; my $itemtypes = GetItemTypes(); -foreach my $issue ( @issue_list ) { - if($count%2 eq 0){ $issue->{'toggle'} = 1; } else { $issue->{'toggle'} = 0; } - # check for reserves - my ( $restype, $res ) = CheckReserves( $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 'L'; +my ($issues) = GetPendingIssues($borrowernumber); +my $canrenew = 0; +if ($issues){ + foreach my $issue ( sort { $b->{'date_due'} cmp $a->{'date_due'} } @$issues ) { + # check for reserves + my ( $restype, $res, undef ) = CheckReserves( $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 'L'; + } + } + $issue->{'charges'} = $charges; + + # get publictype for icon + + my $publictype = $issue->{'publictype'}; + $issue->{$publictype} = 1; + + # check if item is renewable + my ($status,$renewerror) = CanBookBeRenewed( $borrowernumber, $issue->{'itemnumber'} ); + ($issue->{'renewcount'},$issue->{'renewsallowed'},$issue->{'renewsleft'}) = GetRenewCount($borrowernumber, $issue->{'itemnumber'}); + if($status && C4::Context->preference("OpacRenewalAllowed")){ + $issue->{'status'} = $status; + $canrenew = 1; } - } - $issue->{'charges'} = $charges; - - # get publictype for icon - - my $publictype = $issue->{'publictype'}; - $issue->{$publictype} = 1; - - # check if item is renewable - my ($status,$renewerror) = CanBookBeRenewed( $borrowernumber, $issue->{'itemnumber'} ); - ($issue->{'renewcount'},$issue->{'renewsallowed'},$issue->{'renewsleft'}) = GetRenewCount($borrowernumber, $issue->{'itemnumber'}); - $issue->{'status'} = $status && C4::Context->preference("OpacRenewalAllowed"); - $issue->{'too_many'} = 1 if $renewerror and $renewerror eq 'too_many'; - $issue->{'on_reserve'} = 1 if $renewerror and $renewerror eq 'on_reserve'; - - if ( $issue->{'overdue'} ) { - push @overdues, $issue; - $overdues_count++; - $issue->{'overdue'} = 1; - } - else { - $issue->{'issued'} = 1; - } - # imageurl: - my $itemtype = $issue->{'itemtype'}; - if ( $itemtype ) { - $issue->{'imageurl'} = getitemtypeimagelocation( 'opac', $itemtypes->{$itemtype}->{'imageurl'} ); - $issue->{'description'} = $itemtypes->{$itemtype}->{'description'}; - } - $issue->{date_due} = format_date($issue->{date_due}); - push @issuedat, $issue; - $count++; - - my $isbn = GetNormalizedISBN($issue->{'isbn'}); - $issue->{normalized_isbn} = $isbn; + $issue->{'too_many'} = 1 if $renewerror and $renewerror eq 'too_many'; + $issue->{'on_reserve'} = 1 if $renewerror and $renewerror eq 'on_reserve'; + + if ( $issue->{'overdue'} ) { + push @overdues, $issue; + $overdues_count++; + $issue->{'overdue'} = 1; + } + else { + $issue->{'issued'} = 1; + } + # imageurl: + my $itemtype = $issue->{'itemtype'}; + if ( $itemtype ) { + $issue->{'imageurl'} = getitemtypeimagelocation( 'opac', $itemtypes->{$itemtype}->{'imageurl'} ); + $issue->{'description'} = $itemtypes->{$itemtype}->{'description'}; + } + $issue->{date_due} = format_date($issue->{date_due}); + push @issuedat, $issue; + $count++; + + my $isbn = GetNormalizedISBN($issue->{'isbn'}); + $issue->{normalized_isbn} = $isbn; + + # My Summary HTML + if (my $my_summary_html = C4::Context->preference('OPACMySummaryHTML')){ + $issue->{author} ? $my_summary_html =~ s/{AUTHOR}/$issue->{author}/g : $my_summary_html =~ s/{AUTHOR}//g; + $issue->{title} =~ s/\/+$//; # remove trailing slash + $issue->{title} =~ s/\s+$//; # remove trailing space + $issue->{title} ? $my_summary_html =~ s/{TITLE}/$issue->{title}/g : $my_summary_html =~ s/{TITLE}//g; + $issue->{isbn} ? $my_summary_html =~ s/{ISBN}/$isbn/g : $my_summary_html =~ s/{ISBN}//g; + $issue->{biblionumber} ? $my_summary_html =~ s/{BIBLIONUMBER}/$issue->{biblionumber}/g : $my_summary_html =~ s/{BIBLIONUMBER}//g; + $issue->{MySummaryHTML} = $my_summary_html; + } + } } - $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 ); +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=(C4::Context->userenv && ($branch_hash eq C4::Context->userenv->{branch})) if (C4::Context->preference('SearchMyLibraryFirst')); +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", + { value => "branch: $branch_hash", branchname => $branches->{$branch_hash}->{'branchname'}, - selected => $selected + selected => $selected, }; } -$template->param( branchloop => \@branch_loop, "mylibraryfirst"=>C4::Context->preference("SearchMyLibraryFirst")); +$template->param( branchloop => \@branch_loop ); # now the reserved items.... my @reserves = GetReservesFromBorrowernumber( $borrowernumber ); foreach my $res (@reserves) { $res->{'reservedate'} = format_date( $res->{'reservedate'} ); + + if ( $res->{'expirationdate'} ne '0000-00-00' ) { + $res->{'expirationdate'} = format_date( $res->{'expirationdate'} ) + } else { + $res->{'expirationdate'} = ''; + } + my $publictype = $res->{'publictype'}; $res->{$publictype} = 1; $res->{'waiting'} = 1 if $res->{'found'} eq 'W'; + $res->{'formattedwaitingdate'} = format_date($res->{'waitingdate'}); $res->{'branch'} = $branches->{ $res->{'branchcode'} }->{'branchname'}; my $biblioData = GetBiblioData($res->{'biblionumber'}); $res->{'reserves_title'} = $biblioData->{'title'}; @@ -212,7 +297,7 @@ foreach my $res (@reserves) { $res->{'wait'}= 1; $res->{'holdingbranch'}=$item->{'holdingbranch'}; $res->{'biblionumber'}=$item->{'biblionumber'}; - $res->{'barcodenumber'} = $item->{'barcode'}; + $res->{'barcode'} = $item->{'barcode'}; $res->{'wbrcode'} = $res->{'branchcode'}; $res->{'itemnumber'} = $res->{'itemnumber'}; $res->{'wbrname'} = $branches->{$res->{'branchcode'}}->{'branchname'}; @@ -232,6 +317,10 @@ foreach my $res (@reserves) { 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 ); @@ -259,7 +348,19 @@ if (C4::Context->preference("OPACAmazonCoverImages") or $template->param(JacketImages=>1); } +if ( GetMessagesCount( $borrowernumber, 'B' ) ) { + $template->param( bor_messages => 1 ); +} + +if ( $borr->{'opacnote'} ) { + $template->param( + bor_messages => 1, + opacnote => $borr->{'opacnote'}, + ); +} + $template->param( + bor_messages_loop => GetMessages( $borrowernumber, 'B', 'NONE' ), waiting_count => $wcount, textmessaging => $borr->{textmessaging}, patronupdate => $patronupdate,