X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=circ%2Freturns.pl;h=40eeed153f5bc5a8660e513ea9cb7acb07577922;hb=2f99d99991f7d45d16b16ab66bb447d45833eb55;hp=e91d62d1b7c6a6ec3931880687d8253ca5554161;hpb=ba793f760453d6ad2aa5909f7949584ba97004d4;p=koha_gimpoz
diff --git a/circ/returns.pl b/circ/returns.pl
index e91d62d1b7..40eeed153f 100755
--- a/circ/returns.pl
+++ b/circ/returns.pl
@@ -1,457 +1,547 @@
#!/usr/bin/perl
-#written 11/3/2002 by Finlay
-#script to execute returns of books
+# Copyright 2000-2002 Katipo Communications
+# 2006 SAN-OP
+# 2007 BibLibre, Paul POULAIN
+#
+# This file is part of Koha.
+#
+# 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
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA 02111-1307 USA
+
+=head1 returns.pl
+
+script to execute returns of books
+
+=cut
use strict;
+# use warnings; # FIXME
+
use CGI;
-use C4::Circulation::Circ2;
-use C4::Search;
+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::Reserves2;
-
-my %env;
-my $headerbackgroundcolor='#99cc33';
-my $circbackgroundcolor='#ffffcc';
-my $circbackgroundcolor='white';
-my $linecolor1='#ffffcc';
-my $linecolor2='white';
-my $backgroundimage="/images/background-mem.gif";
-
-my $query=new CGI;
-my $branches = getbranches();
-my $printers = getprinters(\%env);
+use C4::Reserves;
+use C4::Biblio;
+use C4::Items;
+use C4::Members;
+use C4::Branch; # GetBranches GetBranchName
+use C4::Koha; # FIXME : is it still useful ?
+
+my $query = new CGI;
+
+if (!C4::Context->userenv){
+ my $sessionID = $query->cookie("CGISESSID");
+ my $session = get_session($sessionID);
+ if ($session->param('branch') eq 'NO_LIBRARY_SET'){
+ # no branch set we can't return
+ print $query->redirect("/cgi-bin/koha/circ/selectbranchprinter.pl");
+ exit;
+ }
+}
-my $branch = $query->param("branch");
-my $printer = $query->param("printer");
+#getting the template
+my ( $template, $librarian, $cookie ) = get_template_and_user(
+ {
+ template_name => "circ/returns.tmpl",
+ query => $query,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => { circulate => "circulate_remaining_permissions" },
+ }
+);
-($branch) || ($branch=$query->cookie('branch')) ;
-($printer) || ($printer=$query->cookie('printer')) ;
+#####################
+#Global vars
+my $branches = GetBranches();
+my $printers = GetPrinters();
+#my $branch = C4::Context->userenv?C4::Context->userenv->{'branch'}:"";
+my $printer = C4::Context->userenv ? C4::Context->userenv->{'branchprinter'} : "";
+my $overduecharges = (C4::Context->preference('finesMode') && C4::Context->preference('finesMode') ne 'off');
+my $userenv_branch = C4::Context->userenv->{'branch'} || '';
#
# Some code to handle the error if there is no branch or printer setting.....
#
-
-$env{'branchcode'}=$branch;
-$env{'printer'}=$printer;
-$env{'queue'}=$printer;
-
# Set up the item stack ....
-my $ritext = '';
my %returneditems;
my %riduedate;
my %riborrowernumber;
-foreach ($query->param) {
+my @inputloop;
+foreach ( $query->param ) {
(next) unless (/ri-(\d*)/);
- my $counter=$1;
- (next) if ($counter>20);
- my $barcode=$query->param("ri-$counter");
- my $duedate=$query->param("dd-$counter");
- my $borrowernumber=$query->param("bn-$counter");
+ my %input;
+ my $counter = $1;
+ (next) if ( $counter > 20 );
+ my $barcode = $query->param("ri-$counter");
+ my $duedate = $query->param("dd-$counter");
+ my $borrowernumber = $query->param("bn-$counter");
$counter++;
- # decode cuecat
- $barcode = cuecatbarcodedecode($barcode);
- $returneditems{$counter}=$barcode;
- $riduedate{$counter}=$duedate;
- $riborrowernumber{$counter}=$borrowernumber;
- $ritext.="\n";
- $ritext.="\n";
- $ritext.="\n";
-}
-# Collect a few messages here...
-my $messagetext='';
-my $reservetext='';
+ # decode barcode ## Didn't we already decode them before passing them back last time??
+ $barcode = barcodedecode($barcode) if(C4::Context->preference('itemBarcodeInputFilter'));
+
+ ######################
+ #Are these lines still useful ?
+ $returneditems{$counter} = $barcode;
+ $riduedate{$counter} = $duedate;
+ $riborrowernumber{$counter} = $borrowernumber;
+
+ #######################
+ $input{counter} = $counter;
+ $input{barcode} = $barcode;
+ $input{duedate} = $duedate;
+ $input{borrowernumber} = $borrowernumber;
+ push( @inputloop, \%input );
+}
############
# Deal with the requests....
-if ($query->param('resbarcode')) {
- my $item = $query->param('itemnumber');
- my $borrnum = $query->param('borrowernumber');
- my $resbarcode = $query->param('resbarcode');
- my $tobranchcd = ReserveWaiting($item, $borrnum);
- my $branchname = $branches->{$tobranchcd}->{'branchname'};
- my ($borr) = getpatroninformation(\%env, $borrnum, 0);
- my $name = $borr->{'surname'}." ".$borr->{'title'}." ".$borr->{'firstname'};
- my $number = "{'borrowernumber'} onClick='openWindow(this,'Member', 480, 640)'>$borr->{'cardnumber'}";
- my $slip = $query->param('resslip');
- printslip(\%env, $slip);
- if ($tobranchcd ne $branch) {
- my ($transfered, $messages, $iteminfo) = transferbook($tobranchcd, $resbarcode, 1);
- $reservetext .= <<"EOF";
-Item marked Waiting:
- Item: $iteminfo->{'title'} ($iteminfo->{'author'})
- needs to be transfered to $branchname
-to be picked up by $name ($number).
-
-EOF
- }
+
+if ($query->param('WT-itemNumber')){
+ updateWrongTransfer ($query->param('WT-itemNumber'),$query->param('WT-waitingAt'),$query->param('WT-From'));
}
+if ( $query->param('resbarcode') ) {
+ my $item = $query->param('itemnumber');
+ my $borrowernumber = $query->param('borrowernumber');
+ my $resbarcode = $query->param('resbarcode');
+ my $diffBranchReturned = $query->param('diffBranch');
+ my $iteminfo = GetBiblioFromItemNumber($item);
+ # fix up item type for display
+ $iteminfo->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $iteminfo->{'itype'} : $iteminfo->{'itemtype'};
+ my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
+# diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
+# i.e., whether to apply waiting status
+ ModReserveAffect( $item, $borrowernumber, $diffBranchSend);
+# check if we have other reserves for this document, if we have a return send the message of transfer
+ my ( $messages, $nextreservinfo ) = GetOtherReserves($item);
+
+ my ($borr) = GetMemberDetails( $nextreservinfo, 0 );
+ my $name = $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'};
+ if ( $messages->{'transfert'} ) {
+ $template->param(
+ itemtitle => $iteminfo->{'title'},
+ itembiblionumber => $iteminfo->{'biblionumber'},
+ iteminfo => $iteminfo->{'author'},
+ tobranchname => GetBranchName($messages->{'transfert'}),
+ name => $name,
+ borrowernumber => $borrowernumber,
+ borcnum => $borr->{'cardnumber'},
+ borfirstname => $borr->{'firstname'},
+ borsurname => $borr->{'surname'},
+ diffbranch => 1,
+ );
+ }
+}
-my $iteminformation;
my $borrower;
my $returned = 0;
my $messages;
-my $barcode = $query->param('barcode');
+my $issueinformation;
+my $itemnumber;
+my $barcode = $query->param('barcode');
+my $exemptfine = $query->param('exemptfine');
+my $dropboxmode = $query->param('dropboxmode');
+my $dotransfer = $query->param('dotransfer');
+my $calendar = C4::Calendar->new( branchcode => $userenv_branch );
+ #dropbox: get last open day (today - 1)
+my $today = C4::Dates->new();
+my $today_iso = $today->output('iso');
+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
+ my $transferitem = $query->param('transferitem');
+ my $tobranch = $query->param('tobranch');
+ ModItemTransfer($transferitem, $userenv_branch, $tobranch);
+}
+
# actually return book and prepare item table.....
if ($barcode) {
- # decode cuecat
- $barcode = cuecatbarcodedecode($barcode);
- ($returned, $messages, $iteminformation, $borrower) = returnbook($barcode, $branch);
+ $barcode = barcodedecode($barcode) if C4::Context->preference('itemBarcodeInputFilter');
+ $itemnumber = GetItemnumberFromBarcode($barcode);
+
+ if ( C4::Context->preference("InProcessingToShelvingCart") ) {
+ my $item = GetItem( $itemnumber );
+ if ( $item->{'location'} eq 'PROC' ) {
+ $item->{'location'} = 'CART';
+ ModItem( $item, $item->{'biblionumber'}, $item->{'itemnumber'} );
+ }
+ }
+
+ 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
+
+ # 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'};
+
+ $template->param(
+ title => $biblio->{'title'},
+ homebranch => $biblio->{'homebranch'},
+ author => $biblio->{'author'},
+ itembarcode => $biblio->{'barcode'},
+ itemtype => $biblio->{'itemtype'},
+ ccode => $biblio->{'ccode'},
+ itembiblionumber => $biblio->{'biblionumber'},
+ );
+
+ my %input = (
+ counter => 0,
+ first => 1,
+ barcode => $barcode,
+ );
+
if ($returned) {
- $returneditems{0} = $barcode;
- $riborrowernumber{0} = $borrower->{'borrowernumber'};
- $riduedate{0} = $iteminformation->{'date_due'};
- $ritext.= "\n";
- $ritext.= "{'date_due'}>\n";
- $ritext.= "{'borrowernumber'}>\n";
+ my $duedate = $issueinformation->{'date_due'};
+ $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'));
+ push( @inputloop, \%input );
+ }
+ elsif ( !$messages->{'BadBarcode'} ) {
+ $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 );
}
}
+$template->param( inputloop => \@inputloop );
+
+my $found = 0;
+my $waiting = 0;
+my $reserved = 0;
+
+# new op dev : we check if the document must be returned to his homebranch directly,
+# if the document is transfered, we have warning message .
-##################################################################################
-# HTML code....
-# title....
-my $title = <<"EOF";
-Circulation: Returns
-Branch: $branches->{$branch}->{'branchname'}  
-Printer: $printers->{$printer}->{'printername'}
-Change Settings
-
-
-