X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=circ%2Freturns.pl;h=93f36f213095d6eab7ada0e299244ba5f8dee3ac;hb=320afd2fc53abb037c9c3fc4527ab8ad502461ac;hp=e142117eb237ea4864d032f1f50062a112a5136a;hpb=ba6c8485ca7afdaaace20d021591ac532de55b3a;p=koha.git diff --git a/circ/returns.pl b/circ/returns.pl index e142117eb2..93f36f2130 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -4,6 +4,7 @@ # 2006 SAN-OP # 2007-2010 BibLibre, Paul POULAIN # 2010 Catalyst IT +# 2011 PTFS-Europe Ltd. # # This file is part of Koha. # @@ -27,16 +28,14 @@ script to execute returns of books =cut use strict; -#use warnings; FIXME - Bug 2505 +use warnings; use CGI; +use DateTime; use C4::Context; use C4::Auth qw/:DEFAULT get_session/; use C4::Output; use C4::Circulation; -use C4::Dates qw/format_date/; -use Date::Calc qw/Add_Delta_Days/; -use C4::Calendar; use C4::Print; use C4::Reserves; use C4::Biblio; @@ -45,6 +44,8 @@ use C4::Members; use C4::Branch; # GetBranches GetBranchName use C4::Koha; # FIXME : is it still useful ? use C4::RotatingCollections; +use Koha::DateUtils; +use Koha::Calendar; my $query = new CGI; @@ -175,10 +176,9 @@ my $dropboxmode = $query->param('dropboxmode'); my $dotransfer = $query->param('dotransfer'); my $canceltransfer = $query->param('canceltransfer'); my $dest = $query->param('dest'); -my $calendar = C4::Calendar->new( branchcode => $userenv_branch ); +my $calendar = Koha::Calendar->new( branchcode => $userenv_branch ); #dropbox: get last open day (today - 1) -my $today = C4::Dates->new(); -my $today_iso = $today->output('iso'); +my $today = DateTime->now( time_zone => C4::Context->tz()); my $dropboxdate = $calendar->addDate($today, -1); if ($dotransfer){ # An item has been returned to a branch other than the homebranch, and the librarian has chosen to initiate a transfer @@ -212,24 +212,29 @@ if ($barcode) { } } - if ( C4::Context->preference("ReturnToShelvingCart") ) { - my $item = GetItem( $itemnumber ); - $item->{'location'} = 'CART'; - ModItem( $item, $item->{'biblionumber'}, $item->{'itemnumber'} ); - } - # # save the return # ( $returned, $messages, $issueinformation, $borrower ) = AddReturn( $barcode, $userenv_branch, $exemptfine, $dropboxmode); # do the return - my $homeorholdingbranchreturn = C4::Context->preference('HomeOrHoldingBranchReturn') or 'homebranch'; + my $homeorholdingbranchreturn = C4::Context->preference('HomeOrHoldingBranchReturn'); + $homeorholdingbranchreturn ||= 'homebranch'; # get biblio description my $biblio = GetBiblioFromItemNumber($itemnumber); # fix up item type for display $biblio->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $biblio->{'itype'} : $biblio->{'itemtype'}; + # Check if we should display a checkin message, based on the the item + # type of the checked in item + my $itemtype = C4::ItemType->get( $biblio->{'itemtype'} ); + if ( $itemtype->{'checkinmsg'} ) { + $template->param( + checkinmsg => $itemtype->{'checkinmsg'}, + checkinmsgtype => $itemtype->{'checkinmsgtype'}, + ); + } + $template->param( title => $biblio->{'title'}, homebranch => $biblio->{'homebranch'}, @@ -249,13 +254,14 @@ if ($barcode) { ); if ($returned) { - my $duedate = $issueinformation->{'date_due'}; + my $time_now = DateTime->now( time_zone => C4::Context->tz )->truncate( to => 'minute'); + my $duedate = $issueinformation->{date_due}->strftime('%Y-%m-%d %H:%M'); $returneditems{0} = $barcode; $riborrowernumber{0} = $borrower->{'borrowernumber'}; $riduedate{0} = $duedate; $input{borrowernumber} = $borrower->{'borrowernumber'}; $input{duedate} = $duedate; - $input{return_overdue} = 1 if ($duedate and $duedate lt $today->output('iso')); + $input{return_overdue} = 1 if (DateTime->compare($issueinformation->{date_due}, $time_now) == -1); push( @inputloop, \%input ); if ( C4::Context->preference("FineNotifyAtCheckin") ) { @@ -289,15 +295,6 @@ if ($barcode) { $input{duedate} = 0; $returneditems{0} = $barcode; $riduedate{0} = 0; - if ( $messages->{'wthdrawn'} ) { - $input{withdrawn} = 1; - $input{borrowernumber} = 'Item Cancelled'; # FIXME: should be in display layer ? - $riborrowernumber{0} = 'Item Cancelled'; - } - else { - $input{borrowernumber} = ' '; # This seems clearly bogus. - $riborrowernumber{0} = ' '; - } push( @inputloop, \%input ); } } @@ -335,7 +332,6 @@ if ( $messages->{'Wrongbranch'} ){ # case of wrong transfert, if the document wasn't transfered to the right library (according to branchtransfer (tobranch) BDD) if ( $messages->{'WrongTransfer'} and not $messages->{'WasTransfered'}) { - $messages->{'WrongTransfer'} = GetBranchName( $messages->{'WrongTransfer'} ); $template->param( WrongTransfer => 1, TransferWaitingAt => $messages->{'WrongTransfer'}, @@ -432,6 +428,9 @@ foreach my $code ( keys %$messages ) { elsif ( $code eq 'WasLost' ) { $err{waslost} = 1; } + elsif ( $code eq 'LostItemFeeRefunded' ) { + $template->param( LostItemFeeRefunded => 1 ); + } elsif ( $code eq 'ResFound' ) { ; # FIXME... anything to do here? } @@ -441,9 +440,9 @@ foreach my $code ( keys %$messages ) { elsif ( $code eq 'WasTransfered' ) { ; # FIXME... anything to do here? } - elsif ( $code eq 'wthdrawn' ) { + elsif ( $code eq 'withdrawn' ) { $err{withdrawn} = 1; - $exit_required_p = 1; + $exit_required_p = 1 if C4::Context->preference("BlockReturnOfWithdrawnItems"); } elsif ( ( $code eq 'IsPermanent' ) && ( not $messages->{'ResFound'} ) ) { if ( $messages->{'IsPermanent'} ne $userenv_branch ) { @@ -463,7 +462,7 @@ foreach my $code ( keys %$messages ) { elsif ( $code eq 'Wrongbranch' ) { } elsif ( $code eq 'Debarred' ) { - $err{debarred} = format_date( $messages->{'Debarred'} ); + $err{debarred} = $messages->{'Debarred'}; $err{debarcardnumber} = $borrower->{cardnumber}; $err{debarborrowernumber} = $borrower->{borrowernumber}; $err{debarname} = "$borrower->{firstname} $borrower->{surname}"; @@ -479,73 +478,6 @@ foreach my $code ( keys %$messages ) { } $template->param( errmsgloop => \@errmsgloop ); -# patrontable .... -if ($borrower) { - my $flags = $borrower->{'flags'}; - my @flagloop; - my $flagset; - foreach my $flag ( sort keys %$flags ) { - my %flaginfo; - unless ($flagset) { $flagset = 1; } - $flaginfo{redfont} = ( $flags->{$flag}->{'noissues'} ); - $flaginfo{flag} = $flag; - if ( $flag eq 'CHARGES' ) { - $flaginfo{msg} = $flag; - $flaginfo{charges} = 1; - $flaginfo{chargeamount} = $flags->{$flag}->{amount}; - $flaginfo{borrowernumber} = $borrower->{borrowernumber}; - } - elsif ( $flag eq 'WAITING' ) { - $flaginfo{msg} = $flag; - $flaginfo{waiting} = 1; - my @waitingitemloop; - my $items = $flags->{$flag}->{'itemlist'}; - foreach my $item (@$items) { - my $biblio = GetBiblioFromItemNumber( $item->{'itemnumber'}); - push @waitingitemloop, { - biblionum => $biblio->{'biblionumber'}, - barcode => $biblio->{'barcode'}, - title => $biblio->{'title'}, - brname => $branches->{ $biblio->{'holdingbranch'} }->{'branchname'}, - }; - } - $flaginfo{itemloop} = \@waitingitemloop; - } - elsif ( $flag eq 'ODUES' ) { - my $items = $flags->{$flag}->{'itemlist'}; - my @itemloop; - foreach my $item ( sort { $a->{'date_due'} cmp $b->{'date_due'} } - @$items ) - { - my $biblio = GetBiblioFromItemNumber( $item->{'itemnumber'}); - push @itemloop, { - duedate => format_date($item->{'date_due'}), - biblionum => $biblio->{'biblionumber'}, - barcode => $biblio->{'barcode'}, - title => $biblio->{'title'}, - brname => $branches->{ $biblio->{'holdingbranch'} }->{'branchname'}, - }; - } - $flaginfo{itemloop} = \@itemloop; - $flaginfo{overdue} = 1; - } - else { - $flaginfo{other} = 1; - $flaginfo{msg} = $flags->{$flag}->{'message'}; - } - push( @flagloop, \%flaginfo ); - } - $template->param( - flagset => $flagset, - flagloop => \@flagloop, - riborrowernumber => $borrower->{'borrowernumber'}, - riborcnum => $borrower->{'cardnumber'}, - riborsurname => $borrower->{'surname'}, - ribortitle => $borrower->{'title'}, - riborfirstname => $borrower->{'firstname'} - ); -} - #set up so only the last 8 returned items display (make for faster loading pages) my $returned_counter = ( C4::Context->preference('numReturnedItemsToShow') ) ? C4::Context->preference('numReturnedItemsToShow') : 8; my $count = 0; @@ -555,15 +487,16 @@ foreach ( sort { $a <=> $b } keys %returneditems ) { my %ri; if ( $count++ < $returned_counter ) { my $bar_code = $returneditems{$_}; - my $duedate = $riduedate{$_}; - if ($duedate) { - my @tempdate = split( /-/, $duedate ); - $ri{year} = $tempdate[0]; - $ri{month} = $tempdate[1]; - $ri{day} = $tempdate[2]; - $ri{duedate} = format_date($duedate); + if ($riduedate{$_}) { + my $duedate = dt_from_string( $riduedate{$_}, 'sql'); + $ri{year} = $duedate->year(); + $ri{month} = $duedate->month(); + $ri{day} = $duedate->day(); + $ri{hour} = $duedate->hour(); + $ri{minute} = $duedate->minute(); + $ri{duedate} = output_pref($duedate); my ($b) = GetMemberDetails( $riborrowernumber{$_}, 0 ); - $ri{return_overdue} = 1 if ($duedate lt $today->output('iso')); + $ri{return_overdue} = 1 if (DateTime->compare($duedate, DateTime->now()) == -1 ); $ri{borrowernumber} = $b->{'borrowernumber'}; $ri{borcnum} = $b->{'cardnumber'}; $ri{borfirstname} = $b->{'firstname'}; @@ -578,6 +511,7 @@ foreach ( sort { $a <=> $b } keys %returneditems ) { # my %ri; my $biblio = GetBiblioFromItemNumber(GetItemnumberFromBarcode($bar_code)); + my $item = GetItem( GetItemnumberFromBarcode($bar_code) ); # fix up item type for display $biblio->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $biblio->{'itype'} : $biblio->{'itemtype'}; $ri{itembiblionumber} = $biblio->{'biblionumber'}; @@ -589,6 +523,8 @@ foreach ( sort { $a <=> $b } keys %returneditems ) { $ri{ccode} = $biblio->{'ccode'}; $ri{itemnumber} = $biblio->{'itemnumber'}; $ri{barcode} = $bar_code; + $ri{homebranch} = $item->{'homebranch'}; + $ri{holdingbranch} = $item->{'holdingbranch'}; $ri{location} = $biblio->{'location'}; my $shelfcode = $ri{'location'}; @@ -600,7 +536,6 @@ foreach ( sort { $a <=> $b } keys %returneditems ) { } push @riloop, \%ri; } - $template->param( riloop => \@riloop, genbrname => $branches->{$userenv_branch}->{'branchname'}, @@ -610,9 +545,10 @@ $template->param( errmsgloop => \@errmsgloop, exemptfine => $exemptfine, dropboxmode => $dropboxmode, - dropboxdate => $dropboxdate->output(), + dropboxdate => output_pref($dropboxdate), overduecharges => $overduecharges, soundon => C4::Context->preference("SoundOn"), + BlockReturnOfWithdrawnItems => C4::Context->preference("BlockReturnOfWithdrawnItems"), ); ### Comment out rotating collections for now to allow it a little more time to bake