X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=offline_circ%2Fprocess_koc.pl;h=174f00db67b5c3db9c21a66e20c2ccf473f99a29;hb=refs%2Fheads%2Fkoha_ffzg;hp=b22ae24f399d4be3c3552202502b85956215b0b1;hpb=b06a289173d0f2e299b0c8652d59d47dc196062c;p=koha.git diff --git a/offline_circ/process_koc.pl b/offline_circ/process_koc.pl index b22ae24f39..174f00db67 100755 --- a/offline_circ/process_koc.pl +++ b/offline_circ/process_koc.pl @@ -4,24 +4,25 @@ # 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 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 3 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. +# 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 +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . # -use strict; -use warnings; +use Modern::Perl; + +use CGI qw ( -utf8 ); +use Carp; -use CGI; use C4::Output; use C4::Auth; use C4::Koha; @@ -29,10 +30,14 @@ use C4::Context; use C4::Biblio; use C4::Accounts; use C4::Circulation; +use C4::Items; use C4::Members; use C4::Stats; -use C4::UploadedFile; use C4::BackgroundJob; +use Koha::UploadedFiles; +use Koha::Account; +use Koha::Checkouts; +use Koha::Patrons; use Date::Calc qw( Add_Delta_Days Date_to_Days ); @@ -44,7 +49,7 @@ my $FILE_VERSION = '1.0'; our $query = CGI->new; my ($template, $loggedinuser, $cookie) = get_template_and_user({ - template_name => "offline_circ/process_koc.tmpl", + template_name => "offline_circ/process_koc.tt", query => $query, type => "intranet", authnotrequired => 0, @@ -68,16 +73,17 @@ if ($completedJobID) { $template->param(transactions_loaded => 1); $template->param(messages => $results->{results}); } elsif ($fileID) { - my $uploaded_file = C4::UploadedFile->fetch($sessionID, $fileID); - my $fh = $uploaded_file->fh(); - my @input_lines = <$fh>; + my $upload = Koha::UploadedFiles->find( $fileID ); + my $fh = $upload? $upload->file_handle: undef; + my $filename = $upload? $upload->filename: undef; + my @input_lines = $fh? <$fh>: (); + $fh->close if $fh; - my $filename = $uploaded_file->name(); my $job = undef; if ($runinbackground) { my $job_size = scalar(@input_lines); - $job = C4::BackgroundJob->new($sessionID, $filename, $ENV{'SCRIPT_NAME'}, $job_size); + $job = C4::BackgroundJob->new($sessionID, $filename, '/cgi-bin/koha/offline_circ/process_koc.pl', $job_size); my $jobID = $job->id(); # fork off @@ -92,7 +98,7 @@ if ($completedJobID) { my $reply = CGI->new(""); print $reply->header(-type => 'text/html'); - print "{ jobID: '$jobID' }"; + print '{"jobID":"' . $jobID . '"}'; exit 0; } elsif (defined $pid) { # child @@ -103,7 +109,7 @@ if ($completedJobID) { } else { # fork failed, so exit immediately # fork failed, so exit immediately - warn "fork failed while attempting to run $ENV{'SCRIPT_NAME'} as a background job"; + warn "fork failed while attempting to run offline_circ/process_koc.pl as a background job"; exit 0; } @@ -242,20 +248,22 @@ sub kocIssueItem { $circ->{ 'barcode' } = barcodedecode($circ->{'barcode'}) if( $circ->{'barcode'} && C4::Context->preference('itemBarcodeInputFilter')); my $branchcode = C4::Context->userenv->{branch}; - my $borrower = GetMember( 'cardnumber'=>$circ->{ 'cardnumber' } ); - my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } ); - my $issue = GetItemIssue( $item->{'itemnumber'} ); + my $patron = Koha::Patrons->find( { cardnumber => $circ->{cardnumber} } ); + my $borrower = $patron->unblessed; + my $item = Koha::Items->find({ barcode => $circ->{barcode} }); + my $issue = Koha::Checkouts->find( { itemnumber => $item->itemnumber } ); + my $biblio = $item->biblio; - if ( $issue->{ 'date_due' } ) { ## Item is currently checked out to another person. + if ( $issue ) { ## Item is currently checked out to another person. #warn "Item Currently Issued."; - my $issue = GetOpenIssue( $item->{'itemnumber'} ); + my $issue = GetOpenIssue( $item->itemnumber ); # FIXME Hum? That does not make sense, if it's in the issue table, the issue is open (i.e. returndate is null) if ( $issue->{'borrowernumber'} eq $borrower->{'borrowernumber'} ) { ## Issued to this person already, renew it. #warn "Item issued to this member already, renewing."; C4::Circulation::AddRenewal( $issue->{'borrowernumber'}, # borrowernumber - $item->{'itemnumber'}, # itemnumber + $item->itemnumber, # itemnumber undef, # branch undef, # datedue - let AddRenewal calculate it automatically $circ->{'date'}, # issuedate @@ -263,9 +271,9 @@ sub kocIssueItem { push @output, { renew => 1, - title => $item->{ 'title' }, - biblionumber => $item->{'biblionumber'}, - barcode => $item->{ 'barcode' }, + title => $biblio->title, + biblionumber => $biblio->biblionumber, + barcode => $item->barcode, firstname => $borrower->{ 'firstname' }, surname => $borrower->{ 'surname' }, borrowernumber => $borrower->{'borrowernumber'}, @@ -284,9 +292,9 @@ sub kocIssueItem { C4::Circulation::AddIssue( $borrower, $circ->{'barcode'}, undef, undef, $circ->{'date'} ) unless ( DEBUG ); push @output, { issue => 1, - title => $item->{ 'title' }, - biblionumber => $item->{'biblionumber'}, - barcode => $item->{ 'barcode' }, + title => $biblio->title, + biblionumber => $biblio->biblionumber, + barcode => $item->barcode, firstname => $borrower->{ 'firstname' }, surname => $borrower->{ 'surname' }, borrowernumber => $borrower->{'borrowernumber'}, @@ -304,9 +312,9 @@ sub kocIssueItem { C4::Circulation::AddIssue( $borrower, $circ->{'barcode'}, undef, undef, $circ->{'date'} ) unless ( DEBUG ); push @output, { issue => 1, - title => $item->{ 'title' }, - biblionumber => $item->{'biblionumber'}, - barcode => $item->{ 'barcode' }, + title => $biblio->title, + biblionumber => $biblio->biblionumber, + barcode => $item->barcode, firstname => $borrower->{ 'firstname' }, surname => $borrower->{ 'surname' }, borrowernumber => $borrower->{'borrowernumber'}, @@ -319,29 +327,33 @@ sub kocIssueItem { sub kocReturnItem { my ( $circ ) = @_; $circ->{'barcode'} = barcodedecode($circ->{'barcode'}) if( $circ->{'barcode'} && C4::Context->preference('itemBarcodeInputFilter')); - my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } ); - #warn( Data::Dumper->Dump( [ $circ, $item ], [ qw( circ item ) ] ) ); + my $item = Koha::Items->find({ barcode => $circ->{barcode} }); + my $biblio = $item->biblio; my $borrowernumber = _get_borrowernumber_from_barcode( $circ->{'barcode'} ); if ( $borrowernumber ) { - my $borrower = GetMember( 'borrowernumber' =>$borrowernumber ); + my $patron = Koha::Patrons->find( $borrowernumber ); C4::Circulation::MarkIssueReturned( $borrowernumber, - $item->{'itemnumber'}, - undef, - $circ->{'date'} + $item->itemnumber, + $circ->{'date'}, + $patron->privacy ); - push @output, { - return => 1, - title => $item->{ 'title' }, - biblionumber => $item->{'biblionumber'}, - barcode => $item->{ 'barcode' }, - borrowernumber => $borrower->{'borrowernumber'}, - firstname => $borrower->{'firstname'}, - surname => $borrower->{'surname'}, - cardnumber => $borrower->{'cardnumber'}, - datetime => $circ->{ 'datetime' } - }; + ModItem({ onloan => undef }, $biblio->biblionumber, $item->itemnumber); + ModDateLastSeen( $item->itemnumber ); + + push @output, + { + return => 1, + title => $biblio->title, + biblionumber => $biblio->biblionumber, + barcode => $item->barcode, + borrowernumber => $patron->borrowernumber, + firstname => $patron->firstname, + surname => $patron->surname, + cardnumber => $patron->cardnumber, + datetime => $circ->{'datetime'} + }; } else { push @output, { ERROR_no_borrower_from_item => 1, @@ -351,17 +363,25 @@ sub kocReturnItem { } sub kocMakePayment { - my ( $circ ) = @_; - my $borrower = GetMember( 'cardnumber'=>$circ->{ 'cardnumber' } ); - recordpayment( $borrower->{'borrowernumber'}, $circ->{'amount'} ); - push @output, { - payment => 1, - amount => $circ->{'amount'}, - firstname => $borrower->{'firstname'}, - surname => $borrower->{'surname'}, - cardnumber => $circ->{'cardnumber'}, - borrower => $borrower->{'borrowernumber'} - }; + my ($circ) = @_; + + my $cardnumber = $circ->{cardnumber}; + my $amount = $circ->{amount}; + + my $patron = Koha::Patrons->find( { cardnumber => $cardnumber } ); + + Koha::Account->new( { patron_id => $patron->id } ) + ->pay( { amount => $amount } ); + + push @output, + { + payment => 1, + amount => $circ->{'amount'}, + firstname => $patron->firstname, + surname => $patron->surname, + cardnumber => $patron->cardnumber, + borrower => $patron->id, + }; } =head2 _get_borrowernumber_from_barcode @@ -377,10 +397,10 @@ sub _get_borrowernumber_from_barcode { return unless $barcode; - my $item = GetBiblioFromItemNumber( undef, $barcode ); - return unless $item->{'itemnumber'}; + my $item = Koha::Items->find({ barcode => $barcode }); + return unless $item; - my $issue = C4::Circulation::GetItemIssue( $item->{'itemnumber'} ); - return unless $issue->{'borrowernumber'}; - return $issue->{'borrowernumber'}; + my $issue = Koha::Checkouts->find( { itemnumber => $item->itemnumber } ); + return unless $issue; + return $issue->borrowernumber; }