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
);
}
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)
}
);
-my $writeoff_sth;
-my $add_writeoff_sth;
-
my @names = $input->param;
my $borrowernumber = $input->param('borrowernumber');
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) {
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 {
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 );
}
}
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;
-}