| 
      
            Lines 26-31
          use C4::Members;
      
      
        Link Here
      
     | 
  
        
          | 26 | 
          use C4::Circulation qw(ReturnLostItem);  | 
          26 | 
          use C4::Circulation qw(ReturnLostItem);  | 
        
        
          | 27 | 
          use C4::Log qw(logaction);  | 
          27 | 
          use C4::Log qw(logaction);  | 
        
        
          | 28 | 
          use Koha::Account;  | 
          28 | 
          use Koha::Account;  | 
        
            
               | 
               | 
              29 | 
              use Koha::Account::Lines;  | 
            
        
          | 29 | 
           | 
          30 | 
           | 
        
        
          | 30 | 
          use Data::Dumper qw(Dumper);  | 
          31 | 
          use Data::Dumper qw(Dumper);  | 
        
        
          | 31 | 
           | 
          32 | 
           | 
        
  
    | 
      
            Lines 366-427
          C<$payment_note> is the note to attach to this payment
      
      
        Link Here
      
     | 
  
        
          | 366 | 
           | 
          367 | 
           | 
        
        
          | 367 | 
          sub WriteOffFee { | 
          368 | 
          sub WriteOffFee { | 
        
        
          | 368 | 
              my ( $borrowernumber, $accountlines_id, $itemnum, $accounttype, $amount, $branch, $payment_note ) = @_;  | 
          369 | 
              my ( $borrowernumber, $accountlines_id, $itemnum, $accounttype, $amount, $branch, $payment_note ) = @_;  | 
        
            
              | 369 | 
                  $payment_note //= "";  | 
               | 
               | 
            
            
              | 370 | 
                  $branch ||= C4::Context->userenv->{branch}; | 
            
            
              | 371 | 
                  my $manager_id = 0;  | 
            
            
              | 372 | 
                  $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; | 
            
            
              | 373 | 
               | 
            
            
              | 374 | 
                  # if no item is attached to fine, make sure to store it as a NULL  | 
            
            
              | 375 | 
                  $itemnum ||= undef;  | 
            
            
              | 376 | 
               | 
            
            
              | 377 | 
                  my ( $sth, $query );  | 
            
            
              | 378 | 
                  my $dbh = C4::Context->dbh();  | 
            
            
              | 379 | 
               | 
            
            
              | 380 | 
                  $query = "  | 
            
            
              | 381 | 
                      UPDATE accountlines SET amountoutstanding = 0  | 
            
            
              | 382 | 
                      WHERE accountlines_id = ? AND borrowernumber = ?  | 
            
            
              | 383 | 
                  ";  | 
            
            
              | 384 | 
                  $sth = $dbh->prepare( $query );  | 
            
            
              | 385 | 
                  $sth->execute( $accountlines_id, $borrowernumber );  | 
            
            
              | 386 | 
               | 
            
            
              | 387 | 
                  if ( C4::Context->preference("FinesLog") ) { | 
            
            
              | 388 | 
                      logaction("FINES", 'MODIFY', $borrowernumber, Dumper({ | 
            
            
              | 389 | 
                          action                => 'fee_writeoff',  | 
            
            
              | 390 | 
                          borrowernumber        => $borrowernumber,  | 
            
            
              | 391 | 
                          accountlines_id       => $accountlines_id,  | 
            
            
              | 392 | 
                          manager_id            => $manager_id,  | 
            
            
              | 393 | 
                      }));  | 
            
            
              | 394 | 
                  }  | 
            
        
          | 395 | 
           | 
          370 | 
           | 
        
          
            
              | 396 | 
                  $query ="  | 
              371 | 
                  my $line = Koha::Account::Lines->find($accountlines_id);  | 
            
            
              | 397 | 
                      INSERT INTO accountlines  | 
              372 | 
                  return Koha::Account->new( { patron_id => $borrowernumber } )->pay( | 
            
            
              | 398 | 
                      ( borrowernumber, accountno, itemnumber, date, amount, description, accounttype, manager_id, note )  | 
              373 | 
                      { | 
            
            
              | 399 | 
                      VALUES ( ?, ?, ?, NOW(), ?, 'Writeoff', 'W', ?, ? )  | 
              374 | 
                          amount     => $amount,  | 
            
            
              | 400 | 
                  ";  | 
              375 | 
                          lines      => [$line],  | 
            
            
              | 401 | 
                  $sth = $dbh->prepare( $query );  | 
              376 | 
                          type       => 'writeoff',  | 
            
            
              | 402 | 
                  my $acct = getnextacctno($borrowernumber);  | 
              377 | 
                          note       => $payment_note,  | 
            
            
              | 403 | 
                  $sth->execute( $borrowernumber, $acct, $itemnum, $amount, $manager_id, $payment_note );  | 
              378 | 
                          library_id => $branch,  | 
            
            
              | 404 | 
               | 
              379 | 
                      }  | 
            
            
              | 405 | 
                  if ( C4::Context->preference("FinesLog") ) { | 
               | 
               | 
            
            
              | 406 | 
                      logaction("FINES", 'CREATE',$borrowernumber,Dumper({ | 
            
            
              | 407 | 
                          action            => 'create_writeoff',  | 
            
            
              | 408 | 
                          borrowernumber    => $borrowernumber,  | 
            
            
              | 409 | 
                          accountno         => $acct,  | 
            
            
              | 410 | 
                          amount            => 0 - $amount,  | 
            
            
              | 411 | 
                          accounttype       => 'W',  | 
            
            
              | 412 | 
                          itemnumber        => $itemnum,  | 
            
            
              | 413 | 
                          accountlines_paid => [ $accountlines_id ],  | 
            
            
              | 414 | 
                          manager_id        => $manager_id,  | 
            
            
              | 415 | 
                      }));  | 
            
            
              | 416 | 
                  }  | 
            
            
              | 417 | 
               | 
            
            
              | 418 | 
                  UpdateStats({ | 
            
            
              | 419 | 
                              branch => $branch,  | 
            
            
              | 420 | 
                              type => 'writeoff',  | 
            
            
              | 421 | 
                              amount => $amount,  | 
            
            
              | 422 | 
                              borrowernumber => $borrowernumber}  | 
            
        
          | 423 | 
              );  | 
          380 | 
              );  | 
        
            
              | 424 | 
               | 
               | 
               | 
            
        
          | 425 | 
          }  | 
          381 | 
          }  | 
        
        
          | 426 | 
           | 
          382 | 
           | 
        
        
          | 427 | 
          =head2 purge_zero_balance_fees  | 
          383 | 
          =head2 purge_zero_balance_fees  |