[Koha-patches] [PATCH] Bug 7671 : add a real primary key accountlinesid in accountlines
Martin Renvoize
martin.renvoize at ptfs-europe.com
Sat Jun 9 15:08:10 CEST 2012
From: Stéphane Delaune <stephane.delaune at biblibre.com>
Signed-off-by: Stéphane Delaune <stephane.delaune at biblibre.com>
---
C4/Accounts.pm | 114 ++++++++++----------
C4/Circulation.pm | 16 ++--
installer/data/mysql/kohastructure.sql | 2 +
installer/data/mysql/updatedatabase.pl | 7 ++
.../prog/en/modules/members/boraccount.tt | 6 +-
.../intranet-tmpl/prog/en/modules/members/pay.tt | 1 +
.../prog/en/modules/members/paycollect.tt | 2 +
members/boraccount.pl | 2 +-
members/pay.pl | 45 +++++++-
members/paycollect.pl | 8 +-
members/printinvoice.pl | 1 +
11 files changed, 127 insertions(+), 77 deletions(-)
diff --git a/C4/Accounts.pm b/C4/Accounts.pm
index b7aef01..2824cdf 100644
--- a/C4/Accounts.pm
+++ b/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
@@ -113,12 +113,12 @@ sub recordpayment {
$newamtos = $accdata->{'amountoutstanding'} - $amountleft;
$amountleft = 0;
}
- my $thisacct = $accdata->{accountno};
+ my $thisacct = $accdata->{accountlinesid};
my $usth = $dbh->prepare(
"UPDATE accountlines SET amountoutstanding= ?
- WHERE (borrowernumber = ?) AND (accountno=?)"
+ WHERE (accountlinesid = ?)"
);
- $usth->execute( $newamtos, $borrowernumber, $thisacct );
+ $usth->execute( $newamtos, $thisacct );
$usth->finish;
# $usth = $dbh->prepare(
# "INSERT INTO accountoffsets
@@ -144,7 +144,7 @@ sub recordpayment {
=head2 makepayment
- &makepayment($borrowernumber, $acctnumber, $amount, $branchcode);
+ &makepayment($accountlinesid, $borrowernumber, $acctnumber, $amount, $branchcode);
Records the fact that a patron has paid off the entire amount he or
she owes.
@@ -165,7 +165,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 ( $accountlinesid, $borrowernumber, $accountno, $amount, $user, $branch ) = @_;
my $dbh = C4::Context->dbh;
my $manager_id = 0;
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;
@@ -173,10 +173,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 accountlinesid=?");
+ $sth->execute( $accountlinesid );
my $data = $sth->fetchrow_hashref;
$sth->finish;
@@ -185,22 +183,20 @@ sub makepayment {
$dbh->prepare(
"UPDATE accountlines
SET amountoutstanding = 0, description = 'Payment,thanks'
- WHERE borrowernumber = ?
- AND accountno = ?
+ WHERE accountlinesid = ?
"
);
- $udp->execute($borrowernumber, $accountno );
+ $udp->execute($accountlinesid);
$udp->finish;
}else{
my $udp =
$dbh->prepare(
"UPDATE accountlines
SET amountoutstanding = 0
- WHERE borrowernumber = ?
- AND accountno = ?
+ WHERE accountlinesid = ?
"
);
- $udp->execute($borrowernumber, $accountno );
+ $udp->execute($accountlinesid);
$udp->finish;
# create new line
@@ -227,6 +223,11 @@ sub makepayment {
if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) {
C4::Circulation::ReturnLostItem( $borrowernumber, $data->{'itemnumber'} );
}
+ my $sthr = $dbh->prepare("SELECT max(accountlinesid) AS lastinsertid FROM accountlines");
+ $sthr->execute();
+ my $datalastinsertid = $sthr->fetchrow_hashref;
+ $sthr->finish;
+ return $datalastinsertid->{'lastinsertid'};
}
=head2 getnextacctno
@@ -254,18 +255,17 @@ sub getnextacctno ($) {
=head2 fixaccounts (removed)
- &fixaccounts($borrowernumber, $accountnumber, $amount);
+ &fixaccounts($accountlinesid, $borrowernumber, $accountnumber, $amount);
#'
# FIXME - I don't understand what this function does.
sub fixaccounts {
- my ( $borrowernumber, $accountno, $amount ) = @_;
+ my ( $accountlinesid, $borrowernumber, $accountno, $amount ) = @_;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare(
- "SELECT * FROM accountlines WHERE borrowernumber=?
- AND accountno=?"
+ "SELECT * FROM accountlines WHERE accountlinesid=?"
);
- $sth->execute( $borrowernumber, $accountno );
+ $sth->execute( $accountlinesid );
my $data = $sth->fetchrow_hashref;
# FIXME - Error-checking
@@ -277,8 +277,7 @@ sub fixaccounts {
UPDATE accountlines
SET amount = '$amount',
amountoutstanding = '$outstanding'
- WHERE borrowernumber = $borrowernumber
- AND accountno = $accountno
+ WHERE accountlinesid = $accountlinesid
EOT
# FIXME: exceedingly bad form. Use prepare with placholders ("?") in query and execute args.
}
@@ -456,12 +455,12 @@ sub fixcredit {
$newamtos = $accdata->{'amountoutstanding'} - $amountleft;
$amountleft = 0;
}
- my $thisacct = $accdata->{accountno};
+ my $thisacct = $accdata->{accountlinesid};
my $usth = $dbh->prepare(
"UPDATE accountlines SET amountoutstanding= ?
- WHERE (borrowernumber = ?) AND (accountno=?)"
+ WHERE (accountlinesid = ?)"
);
- $usth->execute( $newamtos, $borrowernumber, $thisacct );
+ $usth->execute( $newamtos, $thisacct );
$usth->finish;
$usth = $dbh->prepare(
"INSERT INTO accountoffsets
@@ -495,12 +494,12 @@ sub fixcredit {
$newamtos = $accdata->{'amountoutstanding'} - $amountleft;
$amountleft = 0;
}
- my $thisacct = $accdata->{accountno};
+ my $thisacct = $accdata->{accountlinesid};
my $usth = $dbh->prepare(
"UPDATE accountlines SET amountoutstanding= ?
- WHERE (borrowernumber = ?) AND (accountno=?)"
+ WHERE (accountlinesid = ?)"
);
- $usth->execute( $newamtos, $borrowernumber, $thisacct );
+ $usth->execute( $newamtos, $thisacct );
$usth->finish;
$usth = $dbh->prepare(
"INSERT INTO accountoffsets
@@ -561,12 +560,12 @@ sub refund {
}
# print $amountleft;
- my $thisacct = $accdata->{accountno};
+ my $thisacct = $accdata->{accountlinesid};
my $usth = $dbh->prepare(
"UPDATE accountlines SET amountoutstanding= ?
- WHERE (borrowernumber = ?) AND (accountno=?)"
+ WHERE (accountlinesid = ?)"
);
- $usth->execute( $newamtos, $borrowernumber, $thisacct );
+ $usth->execute( $newamtos, $thisacct );
$usth->finish;
$usth = $dbh->prepare(
"INSERT INTO accountoffsets
@@ -599,10 +598,10 @@ sub getcharges {
}
sub ModNote {
- my ( $borrowernumber, $accountno, $note ) = @_;
+ my ( $accountlinesid, $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 accountlinesid = ?');
+ $sth->execute( $note, $accountlinesid );
}
sub getcredits {
@@ -647,21 +646,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 ( $accountlinesid ) = @_;
+ my $dbh = C4::Context->dbh;
+
+ my $sth = $dbh->prepare('SELECT amountoutstanding FROM accountlines WHERE accountlinesid = ?');
+ $sth->execute( $accountlinesid );
+ 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 accountlinesid = ?');
+ $sth->execute( $accountlinesid );
+ } else {
+ $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = 0, description = CONCAT( description, " Reversed -" ) WHERE accountlinesid = ?');
+ $sth->execute( $accountlinesid );
+ }
}
=head2 recordpayment_selectaccts
@@ -703,7 +702,7 @@ sub recordpayment_selectaccts {
# offset transactions
my $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding= ? ' .
- 'WHERE (borrowernumber = ?) AND (accountno=?)');
+ 'WHERE accountlinesid=?');
for my $accdata ( @{$rows} ) {
if ($amountleft == 0) {
last;
@@ -716,8 +715,8 @@ sub recordpayment_selectaccts {
$newamtos = $accdata->{amountoutstanding} - $amountleft;
$amountleft = 0;
}
- my $thisacct = $accdata->{accountno};
- $sth->execute( $newamtos, $borrowernumber, $thisacct );
+ my $thisacct = $accdata->{accountlinesid};
+ $sth->execute( $newamtos, $thisacct );
}
# create new line
@@ -732,7 +731,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 ( $accountlinesid, $borrowernumber, $accountno, $amount, $user, $branch ) = @_;
my $manager_id = 0;
$manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;
if (!$amount || $amount < 0) {
@@ -744,12 +743,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 accountlinesid=?',undef,$accountlinesid);
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 accountlinesid = ? ';
+ $dbh->do( $update, undef, $new_outstanding, $accountlinesid);
# create new line
my $insert = 'INSERT INTO accountlines (borrowernumber, accountno, date, amount, '
diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index c26de76..4b25d47 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -1894,7 +1894,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->{'accountlinesid'});
if ($exemptfine) {
$uquery = "update accountlines set accounttype='FFOR', amountoutstanding=0";
if (C4::Context->preference("FinesLog")) {
@@ -1914,7 +1914,7 @@ sub _FixOverduesOnReturn {
} else {
$uquery = "update accountlines set accounttype='F' ";
}
- $uquery .= " where (borrowernumber = ?) and (itemnumber = ?) and (accountno = ?)";
+ $uquery .= " where (accountlinesid = ?)";
my $usth = $dbh->prepare($uquery);
return $usth->execute(@bind);
}
@@ -1957,9 +1957,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 (accountlinesid = ?)");
+ $usth->execute($data->{'accountlinesid'}); # 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);
@@ -1978,12 +1977,11 @@ sub _FixAccountForLostAndReturned {
$newamtos = $accdata->{'amountoutstanding'} - $amountleft;
$amountleft = 0;
}
- my $thisacct = $accdata->{'accountno'};
+ my $thisacct = $accdata->{'accountlinesid'};
# 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 (accountlinesid = ?)");
+ $usth->execute($newamtos,'$thisacct'); # FIXME: '$thisacct' is a string literal!
$usth = $dbh->prepare("INSERT INTO accountoffsets
(borrowernumber, accountno, offsetaccount, offsetamount)
VALUES
diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql
index 3137f38..a4464f1 100644
--- a/installer/data/mysql/kohastructure.sql
+++ b/installer/data/mysql/kohastructure.sql
@@ -2457,6 +2457,7 @@ CREATE TABLE `messages` ( -- circulation messages left via the patron's check ou
DROP TABLE IF EXISTS `accountlines`;
CREATE TABLE `accountlines` (
+ `accountlinesid` 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,
@@ -2472,6 +2473,7 @@ CREATE TABLE `accountlines` (
`notify_level` int(2) NOT NULL default 0,
`note` text NULL default NULL,
`manager_id` int(11) NULL,
+ PRIMARY KEY (`accountlinesid`),
KEY `acctsborridx` (`borrowernumber`),
KEY `timeidx` (`timestamp`),
KEY `itemnumber` (`itemnumber`),
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index dbbdee3..696cf26 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -5308,6 +5308,13 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
SetVersion ($DBversion);
}
+$DBversion = "XXX";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+ $dbh->do("ALTER TABLE `accountlines` ADD `accountlinesid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;");
+ print "Upgrade to $DBversion done (adding accountlinesid field in accountlines table)\n";
+ SetVersion($DBversion);
+}
+
=head1 FUNCTIONS
=head2 TableExists($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt
index 995ea8c..fd12197 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt
@@ -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&accountlinesid=[% account.accountlinesid %]&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&accountlinesid=[% account.accountlinesid %]&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&accountlinesid=[% account.accountlinesid %]&borrowernumber=[% account.borrowernumber %]">Print</a>
[% END %]
</td>
</tr>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt
index fb06325..246290e 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt
@@ -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="accountlinesid[% line.accountno %]" value="[% line.accountlinesid %]" />
<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 %]" />
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt
index d5102cc..31aed6e 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt
@@ -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="accountlinesid" id="accountlinesid" value="[% accountlinesid %]" />
<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="accountlinesid" id="accountlinesid" value="[% accountlinesid %]" />
<input type="hidden" name="title" id="title" value="[% title %]" />
<table>
<thead><tr>
diff --git a/members/boraccount.pl b/members/boraccount.pl
index 44db953..a0aed2f 100755
--- a/members/boraccount.pl
+++ b/members/boraccount.pl
@@ -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('accountlinesid') );
}
if ( $data->{'category_type'} eq 'C') {
diff --git a/members/pay.pl b/members/pay.pl
index 8f5233c..cd71c5e 100755
--- a/members/pay.pl
+++ b/members/pay.pl
@@ -83,11 +83,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 $accountlinesid = $input->param('accountlinesid');
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, $accountlinesid, $itemno, $account_type, $amount, $branch );
}
for (@names) {
@@ -106,6 +106,23 @@ add_accounts_to_template();
output_html_with_http_headers $input, $cookie, $template->output;
+sub writeoff {
+ my ( $accountlinesid, $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( $accountlinesid );
+
+ 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 +184,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( 'accountlinesid', "accountlinesid$line_no", 0 );
$redirect .= '&remote_user=';
$redirect .= $user;
return print $input->redirect($redirect);
@@ -184,7 +202,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 $accountlinesid = $input->param("accountlinesid$value");
+ WriteOffFee( $borrowernumber, $accountlinesid, $itemno, $accounttype, $amount, $branch );
}
}
@@ -250,3 +269,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 accountlinesid=?';
+ $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;
+}
diff --git a/members/paycollect.pl b/members/paycollect.pl
index 7dfb622..8eb03b0 100755
--- a/members/paycollect.pl
+++ b/members/paycollect.pl
@@ -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 $accountlinesid;
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');
+ $accountlinesid = $input->param('accountlinesid');
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,
+ accountlinesid => $accountlinesid,
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( $accountlinesid, $borrowernumber, $accountno, $total_paid, $user,
$branch );
} else {
- makepartialpayment( $borrowernumber, $accountno, $total_paid,
+ makepartialpayment( $accountlinesid, $borrowernumber, $accountno, $total_paid,
$user, $branch );
}
print $input->redirect(
diff --git a/members/printinvoice.pl b/members/printinvoice.pl
index 039132f..1bfe632 100755
--- a/members/printinvoice.pl
+++ b/members/printinvoice.pl
@@ -48,6 +48,7 @@ my ($template, $loggedinuser, $cookie)
my $borrowernumber=$input->param('borrowernumber');
my $action = $input->param('action') || '';
my $accountno = $input->param('accountno');
+my $accountlinesid = $input->param('accountlinesid');
#get borrower details
my $data=GetMember('borrowernumber' => $borrowernumber);
--
1.7.2.5
More information about the Koha-patches
mailing list