Bug 19532: (RM follow-up) More use of system preference
[koha-ffzg.git] / offline_circ / process_koc.pl
index 1875166..2ca6022 100755 (executable)
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 #
 
-use strict;
-use warnings;
+use Modern::Perl;
 
 use CGI qw ( -utf8 );
-use Carp;
 
-use C4::Output;
-use C4::Auth;
-use C4::Koha;
+use C4::Output qw( output_html_with_http_headers );
+use C4::Auth qw( get_template_and_user );
 use C4::Context;
-use C4::Biblio;
 use C4::Accounts;
-use C4::Circulation;
-use C4::Items;
+use C4::Circulation qw( barcodedecode GetOpenIssue AddRenewal AddIssue MarkIssueReturned );
+use C4::Items qw( ModDateLastSeen );
 use C4::Members;
 use C4::Stats;
 use C4::BackgroundJob;
-use Koha::Upload;
+use Koha::UploadedFiles;
 use Koha::Account;
+use Koha::Checkouts;
+use Koha::Patrons;
 
-use Date::Calc qw( Add_Delta_Days Date_to_Days );
+use Date::Calc qw( Date_to_Days );
 
 use constant DEBUG => 0;
 
@@ -51,7 +49,6 @@ my ($template, $loggedinuser, $cookie) = get_template_and_user({
     template_name => "offline_circ/process_koc.tt",
     query => $query,
     type => "intranet",
-    authnotrequired => 0,
      flagsrequired   => { circulate => "circulate_remaining_permissions" },
 });
 
@@ -72,10 +69,11 @@ if ($completedJobID) {
     $template->param(transactions_loaded => 1);
     $template->param(messages => $results->{results});
 } elsif ($fileID) {
-    my $upload = Koha::Upload->new->get({ id => $fileID, filehandle => 1 });
-    my $fh = $upload->{fh};
-    my $filename = $upload->{name};
-    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 $job = undef;
 
@@ -244,32 +242,35 @@ sub arguments_for_command {
 sub kocIssueItem {
     my $circ = shift;
 
-    $circ->{ 'barcode' } = barcodedecode($circ->{'barcode'}) if( $circ->{'barcode'} && C4::Context->preference('itemBarcodeInputFilter'));
+    $circ->{barcode} = barcodedecode( $circ->{barcode} ) if $circ->{barcode};
+
     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
-            ) unless ($DEBUG);
+            ) unless (DEBUG);
 
             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'},
@@ -288,9 +289,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'},
@@ -308,9 +309,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'},
@@ -322,34 +323,36 @@ 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 ) ] ) );
+
+    $circ->{barcode} = barcodedecode( $circ->{barcode} ) if $circ->{barcode};
+
+    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,
+            $item->itemnumber,
             $circ->{'date'},
-            $borrower->{'privacy'}
+            $patron->privacy
         );
 
-        ModItem({ onloan => undef }, $item->{'biblionumber'}, $item->{'itemnumber'});
-        ModDateLastSeen( $item->{'itemnumber'} );
-
-        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' }
-        };
+        $item->onloan(undef)->store;
+        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,
@@ -364,10 +367,10 @@ sub kocMakePayment {
     my $cardnumber = $circ->{cardnumber};
     my $amount = $circ->{amount};
 
-    my $patron = Koha::Borrowers->find( { cardnumber => $cardnumber } );
+    my $patron = Koha::Patrons->find( { cardnumber => $cardnumber } );
 
     Koha::Account->new( { patron_id => $patron->id } )
-      ->pay( { amount => $amount } );
+      ->pay( { amount => $amount, interface => C4::Context->interface } );
 
     push @output,
       {
@@ -393,10 +396,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;
 }