[Koha-patches] [PATCH] Reverse Payment - Allows any payment to be 'undone' while retaining a record of said payment. Useful for accidental double-payments.
Kyle M Hall
kyle.m.hall at gmail.com
Wed Jul 29 19:27:11 CEST 2009
---
C4/Accounts.pm | 20 ++++++++++++++++++++
.../prog/en/modules/members/boraccount.tmpl | 10 +++++++++-
members/boraccount.pl | 11 ++++++++++-
3 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/C4/Accounts.pm b/C4/Accounts.pm
index c43741b..e137587 100644
--- a/C4/Accounts.pm
+++ b/C4/Accounts.pm
@@ -36,6 +36,7 @@ BEGIN {
&recordpayment &makepayment &manualinvoice
&getnextacctno &reconcileaccount &getcharges &getcredits
&getrefunds &chargelostitem
+ &ReversePayment
); # removed &fixaccounts
}
@@ -642,6 +643,25 @@ sub getrefunds {
}
return (@results);
}
+
+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 );
+ }
+}
+
END { } # module clean-up code here (global destructor)
1;
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tmpl
index 1661161..8f649ad 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tmpl
@@ -32,6 +32,7 @@
<th>Description of charges</th>
<th>Amount</th>
<th>Outstanding</th>
+ <th> </th>
</tr>
<!-- FIXME: Shouldn't hardcode dollar signs, since Euro or Pound might be needed -->
@@ -42,13 +43,20 @@
<td><!-- TMPL_VAR NAME="description" --> <!-- TMPL_IF NAME="itemnumber" --><a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->">View item</a> <!-- /TMPL_IF --><!-- TMPL_IF NAME="printtitle" --> <!-- TMPL_VAR NAME="title" escape="html" --><!-- /TMPL_IF --></td>
<!-- TMPL_IF NAME="amountcredit" --><td class="credit"><!-- TMPL_ELSE --><td class="debit"><!-- /TMPL_IF --><!-- TMPL_VAR NAME="amount" --></td>
<!-- TMPL_IF NAME="amountoutstandingcredit" --><td class="credit"><!-- TMPL_ELSE --><td class="debit"><!-- /TMPL_IF --><!-- TMPL_VAR NAME="amountoutstanding" --></td>
+ <td>
+ <!-- TMPL_IF NAME="payment" -->
+ <a href="boraccount.pl?action=reverse&borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->&accountno=<!-- TMPL_VAR NAME="accountno" -->">Reverse</a>
+ <!-- TMPL_ELSE -->
+
+ <!-- /TMPL_IF -->
+ </td>
</tr>
<!-- /TMPL_LOOP -->
<tfoot>
<tr>
<td colspan="3">Total due</td>
- <!-- TMPL_IF NAME="totalcredit" --><td class="credit"><!-- TMPL_ELSE --><td class="debit"><!-- /TMPL_IF --><!-- TMPL_VAR NAME="total" --></td>
+ <!-- TMPL_IF NAME="totalcredit" --><td colspan="2" class="credit"><!-- TMPL_ELSE --><td colspan="2" class="debit"><!-- /TMPL_IF --><!-- TMPL_VAR NAME="total" --></td>
</tr>
</tfoot>
</table>
diff --git a/members/boraccount.pl b/members/boraccount.pl
index 40dd68a..6c7fe48 100755
--- a/members/boraccount.pl
+++ b/members/boraccount.pl
@@ -29,6 +29,7 @@ use C4::Dates qw/format_date/;
use CGI;
use C4::Members;
use C4::Branch;
+use C4::Accounts;
my $input=new CGI;
@@ -46,6 +47,10 @@ my $borrowernumber=$input->param('borrowernumber');
#get borrower details
my $data=GetMember($borrowernumber,'borrowernumber');
+if ( $input->param('action') eq 'reverse' ) {
+ ReversePayment( $borrowernumber, $input->param('accountno') );
+}
+
if ( $data->{'category_type'} eq 'C') {
my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' );
my $cnt = scalar(@$catcodes);
@@ -85,7 +90,11 @@ for (my $i=0;$i<$numaccts;$i++){
'itemnumber' => $accts->[$i]{'itemnumber'},
'biblionumber' => $accts->[$i]{'biblionumber'},
'amount' => sprintf("%.2f",$accts->[$i]{'amount'}),
- 'amountoutstanding' => sprintf("%.2f",$accts->[$i]{'amountoutstanding'}) );
+ 'amountoutstanding' => sprintf("%.2f",$accts->[$i]{'amountoutstanding'}),
+ 'accountno' => $accts->[$i]{'accountno'},
+ 'payment' => ( $accts->[$i]{'accounttype'} eq 'Pay' ),
+
+ );
if ($accts->[$i]{'accounttype'} ne 'F' && $accts->[$i]{'accounttype'} ne 'FU'){
$row{'printtitle'}=1;
--
1.5.6.5
More information about the Koha-patches
mailing list