X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=circ%2Fcirculation.pl;h=efb87da7c9240796258c97440b553724da2f721e;hb=c8df6bdcc9fe2523a77c839270b31304d8e13ee5;hp=ab681f1c7ca36fe8d6bf588f7aff7adaa37da41a;hpb=9693db7bff0e900680e388c24e7920ce703f4419;p=koha_fer diff --git a/circ/circulation.pl b/circ/circulation.pl index ab681f1c7c..efb87da7c9 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -1,9 +1,9 @@ #!/usr/bin/perl -# written 8/5/2002 by Finlay # script to execute issuing of books # Copyright 2000-2002 Katipo Communications +# copyright 2010 BibLibre # # This file is part of Koha. # @@ -35,6 +35,7 @@ use C4::Biblio; use C4::Reserves; use C4::Context; use CGI::Session; +use C4::Members::Attributes qw(GetBorrowerAttributes); use Date::Calc qw( Today @@ -42,6 +43,7 @@ use Date::Calc qw( Add_Delta_Days Date_to_Days ); +use List::MoreUtils qw/uniq/; # @@ -136,11 +138,8 @@ if ( $barcode ) { } } -my ($datedue,$invalidduedate,$globalduedate); +my ($datedue,$invalidduedate); -if(C4::Context->preference('globalDueDate') && (C4::Context->preference('globalDueDate') =~ C4::Dates->regexp('syspref'))){ - $globalduedate = C4::Dates->new(C4::Context->preference('globalDueDate')); -} my $duedatespec_allow = C4::Context->preference('SpecifyDueDate'); if($duedatespec_allow){ if ($duedatespec) { @@ -157,16 +156,7 @@ if($duedatespec_allow){ $invalidduedate = 1; $template->param(IMPOSSIBLE=>1, INVALID_DATE=>$duedatespec); } - } else { - # pass global due date to tmpl if specifyduedate is true - # and we have no barcode (loading circ page but not checking out) - if($globalduedate && ! $barcode ){ - $duedatespec = $globalduedate->output(); - $stickyduedate = 1; - } } -} else { - $datedue = $globalduedate if ($globalduedate); } my $todaysdate = C4::Dates->new->output('iso'); @@ -197,7 +187,7 @@ if ( $print eq 'yes' && $borrowernumber ne '' ) { my $borrowerslist; my $message; if ($findborrower) { - my ($count, $borrowers) = SearchMember($findborrower, 'cardnumber', 'web'); + my $borrowers = Search($findborrower, 'cardnumber'); my @borrowers = @$borrowers; if (C4::Context->preference("AddPatronLists")) { $template->param( @@ -241,7 +231,7 @@ if ($borrowernumber) { 0 , $borrower->{'enrolmentperiod'}); } # if the expiry date is before today ie they have expired - if ( $warning_year*$warning_month*$warning_day==0 + if ( !$borrower->{'dateexpiry'} || $warning_year*$warning_month*$warning_day==0 || Date_to_Days($today_year, $today_month, $today_day ) > Date_to_Days($warning_year, $warning_month, $warning_day) ) { @@ -249,7 +239,7 @@ if ($borrowernumber) { $template->param( flagged => "1", noissues => "1", - expired => format_date($borrower->{dateexpiry}), + expired => "1", renewaldate => format_date("$renew_year-$renew_month-$renew_day") ); } @@ -311,10 +301,6 @@ if ($barcode) { unless($confirm_required) { AddIssue( $borrower, $barcode, $datedue, $cancelreserve ); $inprocess = 1; - if($globalduedate && ! $stickyduedate && $duedatespec_allow ){ - $duedatespec = $globalduedate->output(); - $stickyduedate = 1; - } } } @@ -419,24 +405,29 @@ my $todaysissues = ''; my $previssues = ''; my @todaysissues; my @previousissues; +my @relissues; +my @relprevissues; +my $displayrelissues; my $totalprice = 0; -if ($borrower) { -# get each issue of the borrower & separate them in todayissues & previous issues - my ($issueslist) = GetPendingIssues($borrower->{'borrowernumber'}); +sub build_issue_data { + my $issueslist = shift; + my $relatives = shift; + # split in 2 arrays for today & previous foreach my $it ( @$issueslist ) { my $itemtypeinfo = getitemtypeinfo( (C4::Context->preference('item-level_itypes')) ? $it->{'itype'} : $it->{'itemtype'} ); + # set itemtype per item-level_itype syspref - FIXME this is an ugly hack $it->{'itemtype'} = ( C4::Context->preference( 'item-level_itypes' ) ) ? $it->{'itype'} : $it->{'itemtype'}; ($it->{'charge'}, $it->{'itemtype_charge'}) = GetIssuingCharges( - $it->{'itemnumber'}, $borrower->{'borrowernumber'} + $it->{'itemnumber'}, $it->{'borrowernumber'} ); $it->{'charge'} = sprintf("%.2f", $it->{'charge'}); my ($can_renew, $can_renew_error) = CanBookBeRenewed( - $borrower->{'borrowernumber'},$it->{'itemnumber'} + $it->{'borrowernumber'},$it->{'itemnumber'} ); $it->{"renew_error_${can_renew_error}"} = 1 if defined $can_renew_error; my ( $restype, $reserves ) = CheckReserves( $it->{'itemnumber'} ); @@ -444,6 +435,7 @@ if ($borrower) { $it->{'can_confirm'} = !$can_renew && !$restype; $it->{'renew_error'} = $restype; $it->{'checkoutdate'} = C4::Dates->new($it->{'issuedate'},'iso')->output('syspref'); + $it->{'issuingbranchname'} = GetBranchName($it->{'branchcode'}); $totalprice += $it->{'replacementprice'}; $it->{'itemtype'} = $itemtypeinfo->{'description'}; @@ -455,17 +447,38 @@ if ($borrower) { $it->{'renew_failed'} = $renew_failed{$it->{'itemnumber'}}; if ( $todaysdate eq $it->{'issuedate'} or $todaysdate eq $it->{'lastreneweddate'} ) { - push @todaysissues, $it; + (!$relatives) ? push @todaysissues, $it : push @relissues, $it; } else { - push @previousissues, $it; + (!$relatives) ? push @previousissues, $it : push @relprevissues, $it; } } +} + +if ($borrower) { + + # Getting borrower relatives + my @relborrowernumbers = GetMemberRelatives($borrower->{'borrowernumber'}); + #push @borrowernumbers, $borrower->{'borrowernumber'}; + + # get each issue of the borrower & separate them in todayissues & previous issues + my $issueslist = GetPendingIssues($borrower->{'borrowernumber'}); + my $relissueslist = []; + if ( @relborrowernumbers ) { + $relissueslist = GetPendingIssues(@relborrowernumbers); + } + + build_issue_data($issueslist, 0); + build_issue_data($relissueslist, 1); + + $displayrelissues = scalar($relissueslist); + if ( C4::Context->preference( "todaysIssuesDefaultSortOrder" ) eq 'asc' ) { @todaysissues = sort { $a->{'timestamp'} cmp $b->{'timestamp'} } @todaysissues; } else { @todaysissues = sort { $b->{'timestamp'} cmp $a->{'timestamp'} } @todaysissues; } + if ( C4::Context->preference( "previousIssuesDefaultSortOrder" ) eq 'asc' ){ @previousissues = sort { $a->{'date_due'} cmp $b->{'date_due'} } @previousissues; } @@ -494,6 +507,7 @@ if ($borrowerslist) { -id => 'borrowernumber', -values => \@values, -labels => \%labels, + -ondblclick => 'document.forms[\'mainform\'].submit()', -size => 7, -tabindex => '', -multiple => 0 @@ -614,6 +628,19 @@ if($bor_messages_loop){ $template->param(flagged => 1 ); } my (undef, $roadttype_hashref) = &GetRoadTypes(); my $address = $borrower->{'streetnumber'}.' '.$roadttype_hashref->{$borrower->{'streettype'}}.' '.$borrower->{'address'}; +my $fast_cataloging = 0; + if (defined getframeworkinfo('FA')) { + $fast_cataloging = 1 + } + +if (C4::Context->preference('ExtendedPatronAttributes')) { + my $attributes = GetBorrowerAttributes($borrowernumber); + $template->param( + ExtendedPatronAttributes => 1, + extendedattributes => $attributes + ); +} + $template->param( lib_messages_loop => $lib_messages_loop, bor_messages_loop => $bor_messages_loop, @@ -637,6 +664,7 @@ $template->param( emailpro => $borrower->{'emailpro'}, borrowernotes => $borrower->{'borrowernotes'}, city => $borrower->{'city'}, + state => $borrower->{'state'}, zipcode => $borrower->{'zipcode'}, country => $borrower->{'country'}, phone => $borrower->{'phone'} || $borrower->{'mobile'}, @@ -651,12 +679,16 @@ $template->param( totaldue => sprintf('%.2f', $total), todayissues => \@todaysissues, previssues => \@previousissues, + relissues => \@relissues, + relprevissues => \@relprevissues, + displayrelissues => $displayrelissues, inprocess => $inprocess, memberofinstution => $member_of_institution, CGIorganisations => $CGIorganisations, is_child => ($borrower->{'category_type'} eq 'C'), circview => 1, soundon => C4::Context->preference("SoundOn"), + fast_cataloging => $fast_cataloging, ); # save stickyduedate to session