From db946ffd58094ec6287f991493a8df7bd7298f71 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 28 Feb 2012 09:17:04 -0500 Subject: [PATCH] Bug 7597 - Part 2 - move sub writeoff to C4::Accounts Currently, the subroutine writeoff lives in pay.pl, which is a violation of the Koha coding guidelines, as it writes to the database. This commit restructures and moves writeoff to C4::Accounts::WriteOff(), and modifies pay.pl to use it. Signed-off-by: Nicole C. Engard Tested all three patches together and was able to write off single and multiple fines and the data was correct in the stats table. --- C4/Accounts.pm | 62 ++++++++++++++++++++++++++++++++++++++++++++++---- members/pay.pl | 44 ++--------------------------------- 2 files changed, 59 insertions(+), 47 deletions(-) diff --git a/C4/Accounts.pm b/C4/Accounts.pm index c3d121d882..4b49064d3b 100644 --- a/C4/Accounts.pm +++ b/C4/Accounts.pm @@ -33,12 +33,20 @@ BEGIN { require Exporter; @ISA = qw(Exporter); @EXPORT = qw( - &recordpayment &makepayment &manualinvoice - &getnextacctno &reconcileaccount &getcharges &ModNote &getcredits - &getrefunds &chargelostitem + &recordpayment + &makepayment + &manualinvoice + &getnextacctno + &reconcileaccount + &getcharges + &ModNote + &getcredits + &getrefunds + &chargelostitem &ReversePayment - makepartialpayment - recordpayment_selectaccts + &makepartialpayment + &recordpayment_selectaccts + &WriteOff ); } @@ -756,7 +764,51 @@ sub makepartialpayment { return; } +=head2 WriteOff + WriteOff( $borrowernumber, $accountnum, $itemnum, $accounttype, $amount, $branch ); + +Write off a fine for a patron. +C<$borrowernumber> is the patron's borrower number. +C<$accountnum> is the accountnumber of the fee to write off. +C<$itemnum> is the itemnumber of of item whose fine is being written off. +C<$accounttype> is the account type of the fine being written off. +C<$amount> is a floating-point number, giving the amount that is being written off. +C<$branch> is the branchcode of the library where the writeoff occurred. + +=cut + +sub WriteOff { + my ( $borrowernumber, $accountnum, $itemnum, $accounttype, $amount, $branch ) = @_; + my $branch ||= C4::Context->userenv->{branch}; + my $manager_id = 0; + $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; + + # if no item is attached to fine, make sure to store it as a NULL + $itemnum ||= undef; + + my ( $sth, $query ); + my $dbh = C4::Context->dbh(); + + $query = " + UPDATE accountlines SET amountoutstanding = 0 + WHERE accountno = ? AND borrowernumber = ? + "; + $sth = $dbh->prepare( $query ); + $sth->execute( $accountnum, $borrowernumber ); + + $query =" + INSERT INTO accountlines + ( borrowernumber, accountno, itemnumber, date, amount, description, accounttype, manager_id ) + VALUES ( ?, ?, ?, NOW(), ?, 'Writeoff', 'W', ? ) + "; + $sth = $dbh->prepare( $query ); + my $acct = getnextacctno($borrowernumber); + $sth->execute( $borrowernumber, $acct, $itemnum, $amount, $manager_id ); + + UpdateStats( $branch, 'writeoff', $amount, q{}, q{}, q{}, $borrowernumber ); + +} END { } # module clean-up code here (global destructor) diff --git a/members/pay.pl b/members/pay.pl index 9533922b73..9343c90ffd 100755 --- a/members/pay.pl +++ b/members/pay.pl @@ -53,9 +53,6 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -my $writeoff_sth; -my $add_writeoff_sth; - my @names = $input->param; my $borrowernumber = $input->param('borrowernumber'); @@ -90,7 +87,7 @@ if ($writeoff_all) { my $itemno = $input->param('itemnumber'); my $account_type = $input->param('accounttype'); my $amount = $input->param('amountoutstanding'); - writeoff( $accountno, $itemno, $account_type, $amount ); + WriteOff( $borrowernumber, $accountno, $itemno, $account_type, $amount, $branch ); } for (@names) { @@ -109,23 +106,6 @@ add_accounts_to_template(); output_html_with_http_headers $input, $cookie, $template->output; -sub writeoff { - my ( $accountnum, $itemnum, $accounttype, $amount ) = @_; - my $manager_id = 0; - $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; - - # if no item is attached to fine, make sure to store it as a NULL - $itemnum ||= undef; - get_writeoff_sth(); - $writeoff_sth->execute( $accountnum, $borrowernumber ); - - my $acct = getnextacctno($borrowernumber); - $add_writeoff_sth->execute( $borrowernumber, $acct, $itemnum, $amount, $manager_id ); - - UpdateStats( $branch, 'writeoff', $amount, q{}, q{}, q{}, $borrowernumber ); - - return; -} sub add_accounts_to_template { @@ -204,7 +184,7 @@ sub writeoff_all { my $itemno = $input->param("itemnumber$value"); my $amount = $input->param("amount$value"); my $accountno = $input->param("accountno$value"); - writeoff( $accountno, $itemno, $accounttype, $amount ); + WriteOff( $borrowernumber, $accountno, $itemno, $accounttype, $amount, $branch ); } } @@ -270,23 +250,3 @@ sub payselected { print $input->redirect($redirect); return; } - -sub get_writeoff_sth { - - # lets prepare these statement handles only once - if ($writeoff_sth) { - return; - } else { - my $dbh = C4::Context->dbh; - - # Do we need to validate accounttype - my $sql = 'Update accountlines set amountoutstanding=0 ' - . 'WHERE accountno=? and borrowernumber=?'; - $writeoff_sth = $dbh->prepare($sql); - my $insert = -q{insert into accountlines (borrowernumber,accountno,itemnumber,date,amount,description,accounttype,manager_id)} - . q{values (?,?,?,now(),?,'Writeoff','W',?)}; - $add_writeoff_sth = $dbh->prepare($insert); - } - return; -} -- 2.39.5