X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FAccounts.pm;h=eb31f6cc46322a359221cb924c42430401cb1b58;hb=7d71d9507202ff667776bf9cb6de0bf2603ad0dd;hp=5fcbba057ebd536e2b563532bee73ba931610fa9;hpb=1ea5f9c82ac195c29ebeff2e534eedce54ae84ca;p=koha.git diff --git a/C4/Accounts.pm b/C4/Accounts.pm index 5fcbba057e..eb31f6cc46 100644 --- a/C4/Accounts.pm +++ b/C4/Accounts.pm @@ -23,7 +23,6 @@ use strict; use C4::Context; use C4::Stats; use C4::Members; -use C4::Circulation qw(ReturnLostItem); use C4::Log qw(logaction); use Koha::Account; use Koha::Account::Lines; @@ -40,12 +39,7 @@ BEGIN { @EXPORT = qw( &manualinvoice &getnextacctno - &getcharges - &ModNote - &getcredits - &getrefunds &chargelostitem - &ReversePayment &purge_zero_balance_fees ); } @@ -89,37 +83,6 @@ sub getnextacctno { return ($sth->fetchrow || 1); } -=head2 fixaccounts (removed) - - &fixaccounts($accountlines_id, $borrowernumber, $accountnumber, $amount); - -#' -# FIXME - I don't understand what this function does. -sub fixaccounts { - my ( $accountlines_id, $borrowernumber, $accountno, $amount ) = @_; - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare( - "SELECT * FROM accountlines WHERE accountlines_id=?" - ); - $sth->execute( $accountlines_id ); - my $data = $sth->fetchrow_hashref; - - # FIXME - Error-checking - my $diff = $amount - $data->{'amount'}; - my $outstanding = $data->{'amountoutstanding'} + $diff; - $sth->finish; - - $dbh->do(<new({ patron_id => $borrowernumber }); # first make sure the borrower hasn't already been charged for this item # FIXME this should be more exact # there is no reason a user can't lose an item, find and return it, and lost it again - my $existing_charges = Koha::Account::Lines->search( + my $existing_charges = $account->lines->search( { - borrowernumber => $borrowernumber, itemnumber => $itemnumber, accounttype => 'L', } @@ -157,13 +121,37 @@ sub chargelostitem{ # OK, they haven't unless ($existing_charges) { + my $checkout = Koha::Checkouts->find({ itemnumber => $itemnumber }); + my $issue_id = $checkout ? $checkout->issue_id : undef; #add processing fee if ($processfee && $processfee > 0){ - manualinvoice($borrowernumber, $itemnumber, $description, 'PF', $processfee, $processingfeenote, 1); + my $accountline = $account->add_debit( + { + amount => $processfee, + description => $description, + note => $processingfeenote, + user_id => C4::Context->userenv ? C4::Context->userenv->{'number'} : 0, + library_id => C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef, + type => 'processing', + item_id => $itemnumber, + issue_id => $issue_id, + } + ); } #add replace cost if ($replacementprice > 0){ - manualinvoice($borrowernumber, $itemnumber, $description, 'L', $replacementprice, undef, 1); + my $accountline = $account->add_debit( + { + amount => $replacementprice, + description => $description, + note => undef, + user_id => C4::Context->userenv ? C4::Context->userenv->{'number'} : 0, + library_id => C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef, + type => 'lost_item', + item_id => $itemnumber, + issue_id => $issue_id, + } + ); } } } @@ -195,24 +183,15 @@ should be the empty string. # sub manualinvoice { - my ( $borrowernumber, $itemnum, $desc, $type, $amount, $note, $skip_notify ) = @_; + my ( $borrowernumber, $itemnum, $desc, $type, $amount, $note ) = @_; my $manager_id = 0; $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; my $dbh = C4::Context->dbh; - my $notifyid = 0; my $insert; my $accountno = getnextacctno($borrowernumber); my $amountleft = $amount; - $skip_notify //= 0; - - if ( ( $type eq 'L' ) - or ( $type eq 'F' ) - or ( $type eq 'A' ) - or ( $type eq 'N' ) - or ( $type eq 'M' ) ) - { - $notifyid = 1 unless $skip_notify; - } + + my $branchcode = C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef; my $accountline = Koha::Account::Line->new( { @@ -224,21 +203,16 @@ sub manualinvoice { accounttype => $type, amountoutstanding => $amountleft, itemnumber => $itemnum || undef, - notify_id => $notifyid, note => $note, manager_id => $manager_id, + branchcode => $branchcode, } )->store(); - my $offset_type = - $type eq 'L' ? 'Lost Item' - : $type eq 'PF' ? 'Processing Fee' - : 'Manual Debit'; - my $account_offset = Koha::Account::Offset->new( { debit_id => $accountline->id, - type => $offset_type, + type => 'Manual Debit', amount => $amount, } )->store(); @@ -252,7 +226,6 @@ sub manualinvoice { description => $desc, accounttype => $type, amountoutstanding => $amountleft, - notify_id => $notifyid, note => $note, itemnumber => $itemnum, manager_id => $manager_id, @@ -262,117 +235,6 @@ sub manualinvoice { return 0; } -sub getcharges { - my ( $borrowerno, $timestamp, $accountno ) = @_; - my $dbh = C4::Context->dbh; - my $timestamp2 = $timestamp - 1; - my $query = ""; - my $sth = $dbh->prepare( - "SELECT * FROM accountlines WHERE borrowernumber=? AND accountno = ?" - ); - $sth->execute( $borrowerno, $accountno ); - - my @results; - while ( my $data = $sth->fetchrow_hashref ) { - push @results,$data; - } - return (@results); -} - -sub ModNote { - my ( $accountlines_id, $note ) = @_; - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare('UPDATE accountlines SET note = ? WHERE accountlines_id = ?'); - $sth->execute( $note, $accountlines_id ); -} - -sub getcredits { - my ( $date, $date2 ) = @_; - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare( - "SELECT * FROM accountlines,borrowers - WHERE amount < 0 AND accounttype not like 'Pay%' AND accountlines.borrowernumber = borrowers.borrowernumber - AND timestamp >=TIMESTAMP(?) AND timestamp < TIMESTAMP(?)" - ); - - $sth->execute( $date, $date2 ); - my @results; - while ( my $data = $sth->fetchrow_hashref ) { - $data->{'date'} = $data->{'timestamp'}; - push @results,$data; - } - return (@results); -} - - -sub getrefunds { - my ( $date, $date2 ) = @_; - my $dbh = C4::Context->dbh; - - my $sth = $dbh->prepare( - "SELECT *,timestamp AS datetime - FROM accountlines,borrowers - WHERE (accounttype = 'REF' - AND accountlines.borrowernumber = borrowers.borrowernumber - AND date >=? AND date execute( $date, $date2 ); - - my @results; - while ( my $data = $sth->fetchrow_hashref ) { - push @results,$data; - - } - return (@results); -} - -#FIXME: ReversePayment should be replaced with a Void Payment feature -sub ReversePayment { - my ($accountlines_id) = @_; - my $dbh = C4::Context->dbh; - - my $accountline = Koha::Account::Lines->find($accountlines_id); - my $amount_outstanding = $accountline->amountoutstanding; - - my $new_amountoutstanding = - $amount_outstanding <= 0 ? $accountline->amount * -1 : 0; - - $accountline->description( $accountline->description . " Reversed -" ); - $accountline->amountoutstanding($new_amountoutstanding); - $accountline->store(); - - my $account_offset = Koha::Account::Offset->new( - { - credit_id => $accountline->id, - type => 'Reverse Payment', - amount => $amount_outstanding - $new_amountoutstanding, - } - )->store(); - - if ( C4::Context->preference("FinesLog") ) { - my $manager_id = 0; - $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; - - logaction( - "FINES", 'MODIFY', - $accountline->borrowernumber, - Dumper( - { - action => 'reverse_fee_payment', - borrowernumber => $accountline->borrowernumber, - old_amountoutstanding => $amount_outstanding, - new_amountoutstanding => $new_amountoutstanding, - , - accountlines_id => $accountline->id, - accountno => $accountline->accountno, - manager_id => $manager_id, - } - ) - ); - } -} - =head2 purge_zero_balance_fees purge_zero_balance_fees( $days ); @@ -395,9 +257,18 @@ sub purge_zero_balance_fees { my $dbh = C4::Context->dbh; my $sth = $dbh->prepare( q{ - DELETE FROM accountlines - WHERE date < date_sub(curdate(), INTERVAL ? DAY) - AND ( amountoutstanding = 0 or amountoutstanding IS NULL ); + DELETE a1 FROM accountlines a1 + + LEFT JOIN account_offsets credit_offset ON ( a1.accountlines_id = credit_offset.credit_id ) + LEFT JOIN accountlines a2 ON ( credit_offset.debit_id = a2.accountlines_id ) + + LEFT JOIN account_offsets debit_offset ON ( a1.accountlines_id = debit_offset.debit_id ) + LEFT JOIN accountlines a3 ON ( debit_offset.credit_id = a3.accountlines_id ) + + WHERE a1.date < date_sub(curdate(), INTERVAL ? DAY) + AND ( a1.amountoutstanding = 0 OR a1.amountoutstanding IS NULL ) + AND ( a2.amountoutstanding = 0 OR a2.amountoutstanding IS NULL ) + AND ( a3.amountoutstanding = 0 OR a3.amountoutstanding IS NULL ) } ); $sth->execute($days) or die $dbh->errstr;