Merge remote-tracking branch 'origin/new/bug_7671'
This commit is contained in:
commit
f32be62ef6
12 changed files with 130 additions and 78 deletions
114
C4/Accounts.pm
114
C4/Accounts.pm
|
@ -72,7 +72,7 @@ patron.
|
|||
|
||||
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.
|
||||
amount that was paid.
|
||||
|
||||
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
|
||||
|
@ -115,12 +115,12 @@ sub recordpayment {
|
|||
$newamtos = $accdata->{'amountoutstanding'} - $amountleft;
|
||||
$amountleft = 0;
|
||||
}
|
||||
my $thisacct = $accdata->{accountno};
|
||||
my $thisacct = $accdata->{accountlines_id};
|
||||
my $usth = $dbh->prepare(
|
||||
"UPDATE accountlines SET amountoutstanding= ?
|
||||
WHERE (borrowernumber = ?) AND (accountno=?)"
|
||||
WHERE (accountlines_id = ?)"
|
||||
);
|
||||
$usth->execute( $newamtos, $borrowernumber, $thisacct );
|
||||
$usth->execute( $newamtos, $thisacct );
|
||||
$usth->finish;
|
||||
# $usth = $dbh->prepare(
|
||||
# "INSERT INTO accountoffsets
|
||||
|
@ -146,7 +146,7 @@ sub recordpayment {
|
|||
|
||||
=head2 makepayment
|
||||
|
||||
&makepayment($borrowernumber, $acctnumber, $amount, $branchcode);
|
||||
&makepayment($accountlines_id, $borrowernumber, $acctnumber, $amount, $branchcode);
|
||||
|
||||
Records the fact that a patron has paid off the entire amount he or
|
||||
she owes.
|
||||
|
@ -167,7 +167,7 @@ sub makepayment {
|
|||
#here we update both the accountoffsets and the account lines
|
||||
#updated to check, if they are paying off a lost item, we return the item
|
||||
# from their card, and put a note on the item record
|
||||
my ( $borrowernumber, $accountno, $amount, $user, $branch ) = @_;
|
||||
my ( $accountlines_id, $borrowernumber, $accountno, $amount, $user, $branch ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $manager_id = 0;
|
||||
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;
|
||||
|
@ -175,10 +175,8 @@ sub makepayment {
|
|||
# begin transaction
|
||||
my $nextaccntno = getnextacctno($borrowernumber);
|
||||
my $newamtos = 0;
|
||||
my $sth =
|
||||
$dbh->prepare(
|
||||
"SELECT * FROM accountlines WHERE borrowernumber=? AND accountno=?");
|
||||
$sth->execute( $borrowernumber, $accountno );
|
||||
my $sth = $dbh->prepare("SELECT * FROM accountlines WHERE accountlines_id=?");
|
||||
$sth->execute( $accountlines_id );
|
||||
my $data = $sth->fetchrow_hashref;
|
||||
$sth->finish;
|
||||
|
||||
|
@ -187,22 +185,20 @@ sub makepayment {
|
|||
$dbh->prepare(
|
||||
"UPDATE accountlines
|
||||
SET amountoutstanding = 0, description = 'Payment,thanks'
|
||||
WHERE borrowernumber = ?
|
||||
AND accountno = ?
|
||||
WHERE accountlines_id = ?
|
||||
"
|
||||
);
|
||||
$udp->execute($borrowernumber, $accountno );
|
||||
$udp->execute($accountlines_id);
|
||||
$udp->finish;
|
||||
}else{
|
||||
my $udp =
|
||||
$dbh->prepare(
|
||||
"UPDATE accountlines
|
||||
SET amountoutstanding = 0
|
||||
WHERE borrowernumber = ?
|
||||
AND accountno = ?
|
||||
WHERE accountlines_id = ?
|
||||
"
|
||||
);
|
||||
$udp->execute($borrowernumber, $accountno );
|
||||
$udp->execute($accountlines_id);
|
||||
$udp->finish;
|
||||
|
||||
# create new line
|
||||
|
@ -229,6 +225,11 @@ sub makepayment {
|
|||
if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) {
|
||||
C4::Circulation::ReturnLostItem( $borrowernumber, $data->{'itemnumber'} );
|
||||
}
|
||||
my $sthr = $dbh->prepare("SELECT max(accountlines_id) AS lastinsertid FROM accountlines");
|
||||
$sthr->execute();
|
||||
my $datalastinsertid = $sthr->fetchrow_hashref;
|
||||
$sthr->finish;
|
||||
return $datalastinsertid->{'lastinsertid'};
|
||||
}
|
||||
|
||||
=head2 getnextacctno
|
||||
|
@ -256,18 +257,17 @@ sub getnextacctno ($) {
|
|||
|
||||
=head2 fixaccounts (removed)
|
||||
|
||||
&fixaccounts($borrowernumber, $accountnumber, $amount);
|
||||
&fixaccounts($accountlines_id, $borrowernumber, $accountnumber, $amount);
|
||||
|
||||
#'
|
||||
# FIXME - I don't understand what this function does.
|
||||
sub fixaccounts {
|
||||
my ( $borrowernumber, $accountno, $amount ) = @_;
|
||||
my ( $accountlines_id, $borrowernumber, $accountno, $amount ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth = $dbh->prepare(
|
||||
"SELECT * FROM accountlines WHERE borrowernumber=?
|
||||
AND accountno=?"
|
||||
"SELECT * FROM accountlines WHERE accountlines_id=?"
|
||||
);
|
||||
$sth->execute( $borrowernumber, $accountno );
|
||||
$sth->execute( $accountlines_id );
|
||||
my $data = $sth->fetchrow_hashref;
|
||||
|
||||
# FIXME - Error-checking
|
||||
|
@ -279,8 +279,7 @@ sub fixaccounts {
|
|||
UPDATE accountlines
|
||||
SET amount = '$amount',
|
||||
amountoutstanding = '$outstanding'
|
||||
WHERE borrowernumber = $borrowernumber
|
||||
AND accountno = $accountno
|
||||
WHERE accountlines_id = $accountlines_id
|
||||
EOT
|
||||
# FIXME: exceedingly bad form. Use prepare with placholders ("?") in query and execute args.
|
||||
}
|
||||
|
@ -460,12 +459,12 @@ sub fixcredit {
|
|||
$newamtos = $accdata->{'amountoutstanding'} - $amountleft;
|
||||
$amountleft = 0;
|
||||
}
|
||||
my $thisacct = $accdata->{accountno};
|
||||
my $thisacct = $accdata->{accountlines_id};
|
||||
my $usth = $dbh->prepare(
|
||||
"UPDATE accountlines SET amountoutstanding= ?
|
||||
WHERE (borrowernumber = ?) AND (accountno=?)"
|
||||
WHERE (accountlines_id = ?)"
|
||||
);
|
||||
$usth->execute( $newamtos, $borrowernumber, $thisacct );
|
||||
$usth->execute( $newamtos, $thisacct );
|
||||
$usth->finish;
|
||||
$usth = $dbh->prepare(
|
||||
"INSERT INTO accountoffsets
|
||||
|
@ -499,12 +498,12 @@ sub fixcredit {
|
|||
$newamtos = $accdata->{'amountoutstanding'} - $amountleft;
|
||||
$amountleft = 0;
|
||||
}
|
||||
my $thisacct = $accdata->{accountno};
|
||||
my $thisacct = $accdata->{accountlines_id};
|
||||
my $usth = $dbh->prepare(
|
||||
"UPDATE accountlines SET amountoutstanding= ?
|
||||
WHERE (borrowernumber = ?) AND (accountno=?)"
|
||||
WHERE (accountlines_id = ?)"
|
||||
);
|
||||
$usth->execute( $newamtos, $borrowernumber, $thisacct );
|
||||
$usth->execute( $newamtos, $thisacct );
|
||||
$usth->finish;
|
||||
$usth = $dbh->prepare(
|
||||
"INSERT INTO accountoffsets
|
||||
|
@ -565,12 +564,12 @@ sub refund {
|
|||
}
|
||||
|
||||
# print $amountleft;
|
||||
my $thisacct = $accdata->{accountno};
|
||||
my $thisacct = $accdata->{accountlines_id};
|
||||
my $usth = $dbh->prepare(
|
||||
"UPDATE accountlines SET amountoutstanding= ?
|
||||
WHERE (borrowernumber = ?) AND (accountno=?)"
|
||||
WHERE (accountlines_id = ?)"
|
||||
);
|
||||
$usth->execute( $newamtos, $borrowernumber, $thisacct );
|
||||
$usth->execute( $newamtos, $thisacct );
|
||||
$usth->finish;
|
||||
$usth = $dbh->prepare(
|
||||
"INSERT INTO accountoffsets
|
||||
|
@ -603,10 +602,10 @@ sub getcharges {
|
|||
}
|
||||
|
||||
sub ModNote {
|
||||
my ( $borrowernumber, $accountno, $note ) = @_;
|
||||
my ( $accountlines_id, $note ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth = $dbh->prepare('UPDATE accountlines SET note = ? WHERE borrowernumber = ? AND accountno = ?');
|
||||
$sth->execute( $note, $borrowernumber, $accountno );
|
||||
my $sth = $dbh->prepare('UPDATE accountlines SET note = ? WHERE accountlines_id = ?');
|
||||
$sth->execute( $note, $accountlines_id );
|
||||
}
|
||||
|
||||
sub getcredits {
|
||||
|
@ -651,21 +650,21 @@ sub getrefunds {
|
|||
}
|
||||
|
||||
sub ReversePayment {
|
||||
my ( $borrowernumber, $accountno ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
|
||||
my $sth = $dbh->prepare('SELECT amountoutstanding FROM accountlines WHERE borrowernumber = ? AND accountno = ?');
|
||||
$sth->execute( $borrowernumber, $accountno );
|
||||
my $row = $sth->fetchrow_hashref();
|
||||
my $amount_outstanding = $row->{'amountoutstanding'};
|
||||
|
||||
if ( $amount_outstanding <= 0 ) {
|
||||
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = amount * -1, description = CONCAT( description, " Reversed -" ) WHERE borrowernumber = ? AND accountno = ?');
|
||||
$sth->execute( $borrowernumber, $accountno );
|
||||
} else {
|
||||
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = 0, description = CONCAT( description, " Reversed -" ) WHERE borrowernumber = ? AND accountno = ?');
|
||||
$sth->execute( $borrowernumber, $accountno );
|
||||
}
|
||||
my ( $accountlines_id ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
|
||||
my $sth = $dbh->prepare('SELECT amountoutstanding FROM accountlines WHERE accountlines_id = ?');
|
||||
$sth->execute( $accountlines_id );
|
||||
my $row = $sth->fetchrow_hashref();
|
||||
my $amount_outstanding = $row->{'amountoutstanding'};
|
||||
|
||||
if ( $amount_outstanding <= 0 ) {
|
||||
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = amount * -1, description = CONCAT( description, " Reversed -" ) WHERE accountlines_id = ?');
|
||||
$sth->execute( $accountlines_id );
|
||||
} else {
|
||||
$sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = 0, description = CONCAT( description, " Reversed -" ) WHERE accountlines_id = ?');
|
||||
$sth->execute( $accountlines_id );
|
||||
}
|
||||
}
|
||||
|
||||
=head2 recordpayment_selectaccts
|
||||
|
@ -709,7 +708,7 @@ sub recordpayment_selectaccts {
|
|||
|
||||
# offset transactions
|
||||
my $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding= ? ' .
|
||||
'WHERE (borrowernumber = ?) AND (accountno=?)');
|
||||
'WHERE accountlines_id=?');
|
||||
for my $accdata ( @{$rows} ) {
|
||||
if ($amountleft == 0) {
|
||||
last;
|
||||
|
@ -722,8 +721,8 @@ sub recordpayment_selectaccts {
|
|||
$newamtos = $accdata->{amountoutstanding} - $amountleft;
|
||||
$amountleft = 0;
|
||||
}
|
||||
my $thisacct = $accdata->{accountno};
|
||||
$sth->execute( $newamtos, $borrowernumber, $thisacct );
|
||||
my $thisacct = $accdata->{accountlines_id};
|
||||
$sth->execute( $newamtos, $thisacct );
|
||||
}
|
||||
|
||||
# create new line
|
||||
|
@ -738,7 +737,7 @@ sub recordpayment_selectaccts {
|
|||
# makepayment needs to be fixed to handle partials till then this separate subroutine
|
||||
# fills in
|
||||
sub makepartialpayment {
|
||||
my ( $borrowernumber, $accountno, $amount, $user, $branch ) = @_;
|
||||
my ( $accountlines_id, $borrowernumber, $accountno, $amount, $user, $branch ) = @_;
|
||||
my $manager_id = 0;
|
||||
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;
|
||||
if (!$amount || $amount < 0) {
|
||||
|
@ -750,12 +749,11 @@ sub makepartialpayment {
|
|||
my $newamtos = 0;
|
||||
|
||||
my $data = $dbh->selectrow_hashref(
|
||||
'SELECT * FROM accountlines WHERE borrowernumber=? AND accountno=?',undef,$borrowernumber,$accountno);
|
||||
'SELECT * FROM accountlines WHERE accountlines_id=?',undef,$accountlines_id);
|
||||
my $new_outstanding = $data->{amountoutstanding} - $amount;
|
||||
|
||||
my $update = 'UPDATE accountlines SET amountoutstanding = ? WHERE borrowernumber = ? '
|
||||
. ' AND accountno = ?';
|
||||
$dbh->do( $update, undef, $new_outstanding, $borrowernumber, $accountno);
|
||||
my $update = 'UPDATE accountlines SET amountoutstanding = ? WHERE accountlines_id = ? ';
|
||||
$dbh->do( $update, undef, $new_outstanding, $accountlines_id);
|
||||
|
||||
# create new line
|
||||
my $insert = 'INSERT INTO accountlines (borrowernumber, accountno, date, amount, '
|
||||
|
|
|
@ -1953,7 +1953,7 @@ sub _FixOverduesOnReturn {
|
|||
return 0 unless $data; # no warning, there's just nothing to fix
|
||||
|
||||
my $uquery;
|
||||
my @bind = ($borrowernumber, $item, $data->{'accountno'});
|
||||
my @bind = ($data->{'accountlines_id'});
|
||||
if ($exemptfine) {
|
||||
$uquery = "update accountlines set accounttype='FFOR', amountoutstanding=0";
|
||||
if (C4::Context->preference("FinesLog")) {
|
||||
|
@ -1973,7 +1973,7 @@ sub _FixOverduesOnReturn {
|
|||
} else {
|
||||
$uquery = "update accountlines set accounttype='F' ";
|
||||
}
|
||||
$uquery .= " where (borrowernumber = ?) and (itemnumber = ?) and (accountno = ?)";
|
||||
$uquery .= " where (accountlines_id = ?)";
|
||||
my $usth = $dbh->prepare($uquery);
|
||||
return $usth->execute(@bind);
|
||||
}
|
||||
|
@ -2016,9 +2016,8 @@ sub _FixAccountForLostAndReturned {
|
|||
$amountleft = $data->{'amountoutstanding'} - $amount; # Um, isn't this the same as ZERO? We just tested those two things are ==
|
||||
}
|
||||
my $usth = $dbh->prepare("UPDATE accountlines SET accounttype = 'LR',amountoutstanding='0'
|
||||
WHERE (borrowernumber = ?)
|
||||
AND (itemnumber = ?) AND (accountno = ?) ");
|
||||
$usth->execute($data->{'borrowernumber'},$itemnumber,$acctno); # We might be adjusting an account for some OTHER borrowernumber now. Not the one we passed in.
|
||||
WHERE (accountlines_id = ?)");
|
||||
$usth->execute($data->{'accountlines_id'}); # We might be adjusting an account for some OTHER borrowernumber now. Not the one we passed in.
|
||||
#check if any credit is left if so writeoff other accounts
|
||||
my $nextaccntno = getnextacctno($data->{'borrowernumber'});
|
||||
$amountleft *= -1 if ($amountleft < 0);
|
||||
|
@ -2037,12 +2036,11 @@ sub _FixAccountForLostAndReturned {
|
|||
$newamtos = $accdata->{'amountoutstanding'} - $amountleft;
|
||||
$amountleft = 0;
|
||||
}
|
||||
my $thisacct = $accdata->{'accountno'};
|
||||
my $thisacct = $accdata->{'accountlines_id'};
|
||||
# FIXME: move prepares outside while loop!
|
||||
my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ?
|
||||
WHERE (borrowernumber = ?)
|
||||
AND (accountno=?)");
|
||||
$usth->execute($newamtos,$data->{'borrowernumber'},'$thisacct'); # FIXME: '$thisacct' is a string literal!
|
||||
WHERE (accountlines_id = ?)");
|
||||
$usth->execute($newamtos,'$thisacct'); # FIXME: '$thisacct' is a string literal!
|
||||
$usth = $dbh->prepare("INSERT INTO accountoffsets
|
||||
(borrowernumber, accountno, offsetaccount, offsetamount)
|
||||
VALUES
|
||||
|
|
|
@ -2466,6 +2466,7 @@ CREATE TABLE `messages` ( -- circulation messages left via the patron's check ou
|
|||
|
||||
DROP TABLE IF EXISTS `accountlines`;
|
||||
CREATE TABLE `accountlines` (
|
||||
`accountlines_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`borrowernumber` int(11) NOT NULL default 0,
|
||||
`accountno` smallint(6) NOT NULL default 0,
|
||||
`itemnumber` int(11) default NULL,
|
||||
|
@ -2481,6 +2482,7 @@ CREATE TABLE `accountlines` (
|
|||
`notify_level` int(2) NOT NULL default 0,
|
||||
`note` text NULL default NULL,
|
||||
`manager_id` int(11) NULL,
|
||||
PRIMARY KEY (`accountlines_id`),
|
||||
KEY `acctsborridx` (`borrowernumber`),
|
||||
KEY `timeidx` (`timestamp`),
|
||||
KEY `itemnumber` (`itemnumber`),
|
||||
|
|
|
@ -5788,6 +5788,13 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
|
|||
SetVersion($DBversion);
|
||||
}
|
||||
|
||||
$DBversion = "3.09.00.046";
|
||||
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
|
||||
$dbh->do("ALTER TABLE `accountlines` ADD `accountlines_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;");
|
||||
print "Upgrade to $DBversion done (adding accountlines_id field in accountlines table)\n";
|
||||
SetVersion($DBversion);
|
||||
}
|
||||
|
||||
=head1 FUNCTIONS
|
||||
|
||||
=head2 TableExists($table)
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
[% IF ( reverse_col ) %]
|
||||
<td>
|
||||
[% IF ( account.payment ) %]
|
||||
<a href="boraccount.pl?action=reverse&borrowernumber=[% account.borrowernumber %]&accountno=[% account.accountno %]">Reverse</a>
|
||||
<a href="boraccount.pl?action=reverse&accountlines_id=[% account.accountlines_id %]&borrowernumber=[% account.borrowernumber %]">Reverse</a>
|
||||
[% ELSE %]
|
||||
|
||||
[% END %]
|
||||
|
@ -59,9 +59,9 @@
|
|||
[% END %]
|
||||
<td>
|
||||
[% IF ( account.payment ) %]
|
||||
<a target="_blank" href="printfeercpt.pl?action=print&borrowernumber=[% account.borrowernumber %]&accountno=[% account.accountno %]">Print</a>
|
||||
<a target="_blank" href="printfeercpt.pl?action=print&accountlines_id=[% account.accountlines_id %]&borrowernumber=[% account.borrowernumber %]">Print</a>
|
||||
[% ELSE %]
|
||||
<a target="_blank" href="printinvoice.pl?action=print&borrowernumber=[% account.borrowernumber %]&accountno=[% account.accountno %]">Print</a>
|
||||
<a target="_blank" href="printinvoice.pl?action=print&accountlines_id=[% account.accountlines_id %]&borrowernumber=[% account.borrowernumber %]">Print</a>
|
||||
[% END %]
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -73,6 +73,7 @@
|
|||
<input type="hidden" name="description[% line.accountno %]" value="[% line.description %]" />
|
||||
<input type="hidden" name="accounttype[% line.accountno %]" value="[% line.accounttype %]" />
|
||||
<input type="hidden" name="amount[% line.accountno %]" value="[% line.amount %]" />
|
||||
<input type="hidden" name="accountlines_id[% line.accountno %]" value="[% line.accountlines_id %]" />
|
||||
<input type="hidden" name="amountoutstanding[% line.accountno %]" value="[% line.amountoutstanding %]" />
|
||||
<input type="hidden" name="borrowernumber[% line.accountno %]" value="[% line.borrowernumber %]" />
|
||||
<input type="hidden" name="accountno[% line.accountno %]" value="[% line.accountno %]" />
|
||||
|
|
|
@ -102,6 +102,7 @@ function moneyFormat(textObj) {
|
|||
<input type="hidden" name="amount" id="amount" value="[% amount %]" />
|
||||
<input type="hidden" name="amountoutstanding" id="amountoutstanding" value="[% amountoutstanding %]" />
|
||||
<input type="hidden" name="accountno" id="accountno" value="[% accountno %]" />
|
||||
<input type="hidden" name="accountlines_id" id="accountlines_id" value="[% accountlines_id %]" />
|
||||
<input type="hidden" name="title" id="title" value="[% title %]" />
|
||||
|
||||
<fieldset class="rows">
|
||||
|
@ -157,6 +158,7 @@ function moneyFormat(textObj) {
|
|||
<input type="hidden" name="amount" id="amount" value="[% amount %]" />
|
||||
<input type="hidden" name="amountoutstanding" id="amountoutstanding" value="[% amountoutstanding %]" />
|
||||
<input type="hidden" name="accountno" id="accountno" value="[% accountno %]" />
|
||||
<input type="hidden" name="accountlines_id" id="accountlines_id" value="[% accountlines_id %]" />
|
||||
<input type="hidden" name="title" id="title" value="[% title %]" />
|
||||
<table>
|
||||
<thead><tr>
|
||||
|
|
|
@ -16,7 +16,7 @@ the kohaversion is divided in 4 parts :
|
|||
use strict;
|
||||
|
||||
sub kohaversion {
|
||||
our $VERSION = '3.09.00.045';
|
||||
our $VERSION = '3.09.00.046';
|
||||
# version needs to be set this way
|
||||
# so that it can be picked up by Makefile.PL
|
||||
# during install
|
||||
|
|
|
@ -53,7 +53,7 @@ my $action = $input->param('action') || '';
|
|||
my $data=GetMember('borrowernumber' => $borrowernumber);
|
||||
|
||||
if ( $action eq 'reverse' ) {
|
||||
ReversePayment( $borrowernumber, $input->param('accountno') );
|
||||
ReversePayment( $input->param('accountlines_id') );
|
||||
}
|
||||
|
||||
if ( $data->{'category_type'} eq 'C') {
|
||||
|
|
|
@ -42,6 +42,8 @@ use C4::Branch;
|
|||
use C4::Members::Attributes qw(GetBorrowerAttributes);
|
||||
|
||||
our $input = CGI->new;
|
||||
our $writeoff_sth;
|
||||
our $add_writeoff_sth;
|
||||
|
||||
our ( $template, $loggedinuser, $cookie ) = get_template_and_user(
|
||||
{ template_name => 'members/pay.tmpl',
|
||||
|
@ -83,11 +85,11 @@ my $writeoff_all = $input->param('woall'); # writeoff all fines
|
|||
if ($writeoff_all) {
|
||||
writeoff_all(@names);
|
||||
} elsif ($writeoff_item) {
|
||||
my $accountno = $input->param('accountno');
|
||||
my $accountlines_id = $input->param('accountlines_id');
|
||||
my $itemno = $input->param('itemnumber');
|
||||
my $account_type = $input->param('accounttype');
|
||||
my $amount = $input->param('amountoutstanding');
|
||||
WriteOffFee( $borrowernumber, $accountno, $itemno, $account_type, $amount, $branch );
|
||||
WriteOffFee( $borrowernumber, $accountlines_id, $itemno, $account_type, $amount, $branch );
|
||||
}
|
||||
|
||||
for (@names) {
|
||||
|
@ -106,6 +108,23 @@ add_accounts_to_template();
|
|||
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
||||
sub writeoff {
|
||||
my ( $accountlines_id, $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( $accountlines_id );
|
||||
|
||||
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 {
|
||||
|
||||
|
@ -167,6 +186,7 @@ sub redirect_to_paycollect {
|
|||
$redirect .= get_for_redirect( 'itemnumber', "itemnumber$line_no", 0 );
|
||||
$redirect .= get_for_redirect( 'notify_id', "notify_id$line_no", 0 );
|
||||
$redirect .= get_for_redirect( 'notify_level', "notify_level$line_no", 0 );
|
||||
$redirect .= get_for_redirect( 'accountlines_id', "accountlines_id$line_no", 0 );
|
||||
$redirect .= '&remote_user=';
|
||||
$redirect .= $user;
|
||||
return print $input->redirect($redirect);
|
||||
|
@ -184,7 +204,8 @@ sub writeoff_all {
|
|||
my $itemno = $input->param("itemnumber$value");
|
||||
my $amount = $input->param("amountoutstanding$value");
|
||||
my $accountno = $input->param("accountno$value");
|
||||
WriteOffFee( $borrowernumber, $accountno, $itemno, $accounttype, $amount, $branch );
|
||||
my $accountlines_id = $input->param("accountlines_id$value");
|
||||
WriteOffFee( $borrowernumber, $accountlines_id, $itemno, $accounttype, $amount, $branch );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -250,3 +271,23 @@ 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 accountlines_id=?';
|
||||
$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;
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ my $writeoff = $input->param('writeoff_individual');
|
|||
my $select_lines = $input->param('selected');
|
||||
my $select = $input->param('selected_accts');
|
||||
my $accountno;
|
||||
|
||||
my $accountlines_id;
|
||||
if ( $individual || $writeoff ) {
|
||||
if ($individual) {
|
||||
$template->param( pay_individual => 1 );
|
||||
|
@ -64,6 +64,7 @@ if ( $individual || $writeoff ) {
|
|||
$template->param( writeoff_individual => 1 );
|
||||
}
|
||||
my $accounttype = $input->param('accounttype');
|
||||
$accountlines_id = $input->param('accountlines_id');
|
||||
my $amount = $input->param('amount');
|
||||
my $amountoutstanding = $input->param('amountoutstanding');
|
||||
$accountno = $input->param('accountno');
|
||||
|
@ -75,6 +76,7 @@ if ( $individual || $writeoff ) {
|
|||
$total_due = $amountoutstanding;
|
||||
$template->param(
|
||||
accounttype => $accounttype,
|
||||
accountlines_id => $accountlines_id,
|
||||
accountno => $accountno,
|
||||
amount => $amount,
|
||||
amountoutstanding => $amountoutstanding,
|
||||
|
@ -101,10 +103,10 @@ if ( $total_paid and $total_paid ne '0.00' ) {
|
|||
} else {
|
||||
if ($individual) {
|
||||
if ( $total_paid == $total_due ) {
|
||||
makepayment( $borrowernumber, $accountno, $total_paid, $user,
|
||||
makepayment( $accountlines_id, $borrowernumber, $accountno, $total_paid, $user,
|
||||
$branch );
|
||||
} else {
|
||||
makepartialpayment( $borrowernumber, $accountno, $total_paid,
|
||||
makepartialpayment( $accountlines_id, $borrowernumber, $accountno, $total_paid,
|
||||
$user, $branch );
|
||||
}
|
||||
print $input->redirect(
|
||||
|
|
|
@ -48,6 +48,7 @@ my ($template, $loggedinuser, $cookie)
|
|||
my $borrowernumber=$input->param('borrowernumber');
|
||||
my $action = $input->param('action') || '';
|
||||
my $accountno = $input->param('accountno');
|
||||
my $accountlines_id = $input->param('accountlines_id');
|
||||
|
||||
#get borrower details
|
||||
my $data=GetMember('borrowernumber' => $borrowernumber);
|
||||
|
|
Loading…
Reference in a new issue