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 <nengard@bywatersolutions.com>

Tested all three patches together and was able to write off single
and multiple fines and the data was correct in the stats table.

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
This commit is contained in:
Kyle M Hall 2012-02-28 09:17:04 -05:00 committed by Jared Camins-Esakov
parent 535c4a7aa1
commit 7aec3044b9
2 changed files with 59 additions and 47 deletions

View File

@ -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)

View File

@ -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) {
@ -107,23 +104,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 {
@ -202,7 +182,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 );
}
}
@ -268,23 +248,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;
}