Bug 15899 - Remove C4::Accounts::recordpayment
[koha.git] / C4 / Accounts.pm
index 4b67dce..e49becb 100644 (file)
@@ -25,18 +25,16 @@ use C4::Stats;
 use C4::Members;
 use C4::Circulation qw(ReturnLostItem);
 use C4::Log qw(logaction);
+use Koha::Account;
 
 use Data::Dumper qw(Dumper);
 
-use vars qw($VERSION @ISA @EXPORT);
+use vars qw(@ISA @EXPORT);
 
 BEGIN {
-       # set the version for version checking
-    $VERSION = 3.07.00.049;
        require Exporter;
        @ISA    = qw(Exporter);
        @EXPORT = qw(
-               &recordpayment
                &makepayment
                &manualinvoice
                &getnextacctno
@@ -69,120 +67,6 @@ patron.
 
 =head1 FUNCTIONS
 
-=head2 recordpayment
-
-  &recordpayment($borrowernumber, $payment, $sip_paytype, $note);
-
-Record payment by a patron. C<$borrowernumber> is the patron's
-borrower number. C<$payment> is a floating-point number, giving the
-amount that was paid. C<$sip_paytype> is an optional flag to indicate this
-payment was made over a SIP2 interface, rather than the staff client. The
-value passed is the SIP2 payment type value (message 37, characters 21-22)
-
-Amounts owed are paid off oldest first. That is, if the patron has a
-$1 fine from Feb. 1, another $1 fine from Mar. 1, and makes a payment
-of $1.50, then the oldest fine will be paid off in full, and $0.50
-will be credited to the next one.
-
-=cut
-
-#'
-sub recordpayment {
-
-    #here we update the account lines
-    my ( $borrowernumber, $data, $sip_paytype, $payment_note ) = @_;
-    my $dbh        = C4::Context->dbh;
-    my $newamtos   = 0;
-    my $accdata    = "";
-    my $branch     = C4::Context->userenv->{'branch'};
-    my $amountleft = $data;
-    my $manager_id = 0;
-    $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;
-
-    $payment_note //= "";
-
-    # begin transaction
-    my $nextaccntno = getnextacctno($borrowernumber);
-
-    # get lines with outstanding amounts to offset
-    my $sth = $dbh->prepare(
-        "SELECT * FROM accountlines
-  WHERE (borrowernumber = ?) AND (amountoutstanding<>0)
-  ORDER BY date"
-    );
-    $sth->execute($borrowernumber);
-
-    # offset transactions
-    my @ids;
-    while ( ( $accdata = $sth->fetchrow_hashref ) and ( $amountleft > 0 ) ) {
-        if ( $accdata->{'amountoutstanding'} < $amountleft ) {
-            $newamtos = 0;
-            $amountleft -= $accdata->{'amountoutstanding'};
-        }
-        else {
-            $newamtos   = $accdata->{'amountoutstanding'} - $amountleft;
-            $amountleft = 0;
-        }
-        my $thisacct = $accdata->{accountlines_id};
-        my $usth     = $dbh->prepare(
-            "UPDATE accountlines SET amountoutstanding= ?
-     WHERE (accountlines_id = ?)"
-        );
-        $usth->execute( $newamtos, $thisacct );
-
-        if ( C4::Context->preference("FinesLog") ) {
-            $accdata->{'amountoutstanding_new'} = $newamtos;
-            logaction("FINES", 'MODIFY', $borrowernumber, Dumper({
-                action                => 'fee_payment',
-                borrowernumber        => $accdata->{'borrowernumber'},
-                old_amountoutstanding => $accdata->{'amountoutstanding'},
-                new_amountoutstanding => $newamtos,
-                amount_paid           => $accdata->{'amountoutstanding'} - $newamtos,
-                accountlines_id       => $accdata->{'accountlines_id'},
-                accountno             => $accdata->{'accountno'},
-                manager_id            => $manager_id,
-                note                  => $payment_note,
-            }));
-            push( @ids, $accdata->{'accountlines_id'} );
-        }
-    }
-
-    # create new line
-    my $usth = $dbh->prepare(
-        "INSERT INTO accountlines
-  (borrowernumber, accountno,date,amount,description,accounttype,amountoutstanding,manager_id, note)
-  VALUES (?,?,now(),?,'',?,?,?,?)"
-    );
-
-    my $paytype = "Pay";
-    $paytype .= $sip_paytype if defined $sip_paytype;
-    $usth->execute( $borrowernumber, $nextaccntno, 0 - $data, $paytype, 0 - $amountleft, $manager_id, $payment_note );
-    $usth->finish;
-
-    UpdateStats({
-                branch => $branch,
-                type =>'payment',
-                amount => $data,
-                borrowernumber => $borrowernumber,
-                accountno => $nextaccntno }
-    );
-
-    if ( C4::Context->preference("FinesLog") ) {
-        $accdata->{'amountoutstanding_new'} = $newamtos;
-        logaction("FINES", 'CREATE',$borrowernumber,Dumper({
-            action            => 'create_payment',
-            borrowernumber    => $borrowernumber,
-            accountno         => $nextaccntno,
-            amount            => $data * -1,
-            amountoutstanding => $amountleft * -1,
-            accounttype       => 'Pay',
-            accountlines_paid => \@ids,
-            manager_id        => $manager_id,
-        }));
-    }
-
-}
-
 =head2 makepayment
 
   &makepayment($accountlines_id, $borrowernumber, $acctnumber, $amount, $branchcode);
@@ -608,7 +492,7 @@ sub recordpayment_selectaccts {
     my $sql = 'SELECT * FROM accountlines WHERE (borrowernumber = ?) ' .
     'AND (amountoutstanding<>0) ';
     if (@{$accts} ) {
-        $sql .= ' AND accountno IN ( ' .  join ',', @{$accts};
+        $sql .= ' AND accountlines_id IN ( ' .  join ',', @{$accts};
         $sql .= ' ) ';
     }
     $sql .= ' ORDER BY date';
@@ -829,10 +713,15 @@ sub WriteOffFee {
 
   purge_zero_balance_fees( $days );
 
-Delete accountlines entries where amountoutstanding is 0 which are more than a given number of days old.
+Delete accountlines entries where amountoutstanding is 0 or NULL which are more than a given number of days old.
 
 B<$days> -- Zero balance fees older than B<$days> days old will be deleted.
 
+B<Warning:> Because fines and payments are not linked in accountlines, it is
+possible for a fine to be deleted without the accompanying payment,
+or vise versa. This won't affect the account balance, but might be
+confusing to staff.
+
 =cut
 
 sub purge_zero_balance_fees {
@@ -844,7 +733,7 @@ sub purge_zero_balance_fees {
         q{
             DELETE FROM accountlines
             WHERE date < date_sub(curdate(), INTERVAL ? DAY)
-              AND amountoutstanding = 0;
+              AND ( amountoutstanding = 0 or amountoutstanding IS NULL );
         }
     );
     $sth->execute($days) or die $dbh->errstr;