Bug 18805: Add ability to use up account credits
authorTomas Cohen Arazi <tomascohen@theke.io>
Tue, 27 Nov 2018 23:28:29 +0000 (20:28 -0300)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 10 Dec 2018 09:58:56 +0000 (09:58 +0000)
This patch introduces a new button in the 'Pay fines' tab  on the
patron's account page. This button, labeled 'Normalize account' is only
displayed when outstanding credits are available, that could be used to
pay up existing debts.

When clicking the button, the Koha::Account::normalize_balance method
(bug 21896) is used for the purpose.

To test:
- Apply this patch (on top of 21896)
- On a patron's 'Fines' tab, create a 'manual invoice' (maybe more than
  one)
- Go to the 'Pay fines' tab
=> SUCCESS: No 'Apply credits' button is displayed.
- On the 'create manual credit' tab, create a couple credits.
- Go to the 'Pay fines'
=> SUCCESS: 'Apply credits' button is displayed
- Click on 'Apply credits'
=> SUCCESS: Outstanding credits have been used to pay up debts.
- Play with different options (credit excedes debts and vice-versa, they
        match, etc)
=> SUCCESS: They all work as expected
- Sign off :-D

Signed-off-by: Christopher Brannon <cbrannon@cdalibrary.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit a3036b4760d80dd3d2188f5f95c6f4279ecef74b)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

koha-tmpl/intranet-tmpl/prog/en/modules/members/pay.tt
members/pay.pl

index cb49492..6d8c942 100644 (file)
 <tfoot>
 <tr>
     <td class="total" colspan="6">Total due:</td>
+[% IF outstanding_credits.total_outstanding < 0 %]
+    <td style="text-align: right;">[% total + outstanding_credits.total_outstanding | $Price %]</td>
+[% ELSE %]
     <td style="text-align: right;">[% total | $Price %]</td>
+[% END %]
 </tr>
 </tfoot>
 <tbody>
     <td class="debit" style="text-align: right;">[% line.amountoutstanding | $Price %]</td>
 </tr>
 [% END %]
+[% IF outstanding_credits.total_outstanding < 0 %]
+<tr>
+    <td class="total" colspan="6">Outstanding credits could be applied <input type="submit" id="apply_credits" name="apply_credits"  value="Apply credits" class="submit" /></td>
+    <td class="credit" style="text-align: right;">[% outstanding_credits.total_outstanding | $Price %]</td>
+</tr>
+[% END %]
 [% IF ( account_grp.total ) %]
 <tr>
 
index b2216aa..8481419 100755 (executable)
@@ -87,6 +87,9 @@ elsif ( $input->param('writeoff_selected') ) {
 elsif ( $input->param('woall') ) {
     writeoff_all(@names);
 }
+elsif ( $input->param('apply_credits') ) {
+    apply_credits({ patron => $patron, cgi => $input });
+}
 elsif ( $input->param('confirm_writeoff') ) {
     my $accountlines_id = $input->param('accountlines_id');
     my $amount          = $input->param('amountwrittenoff');
@@ -138,7 +141,9 @@ output_html_with_http_headers $input, $cookie, $template->output;
 sub add_accounts_to_template {
 
     my $patron = Koha::Patrons->find( $borrowernumber );
-    my $account_lines = $patron->account->outstanding_debits;
+    my $account = $patron->account;
+    my $outstanding_credits = $account->outstanding_credits;
+    my $account_lines = $account->outstanding_debits;
     my $total = $account_lines->total_outstanding;
     my @accounts;
     while ( my $account_line = $account_lines->next ) {
@@ -157,7 +162,9 @@ sub add_accounts_to_template {
         patron   => $patron,
         accounts => \@accounts,
         total    => $total,
+        outstanding_credits => $outstanding_credits
     );
+
     return;
 
 }
@@ -273,3 +280,15 @@ sub payselected {
     print $input->redirect($redirect);
     return;
 }
+
+sub apply_credits {
+    my ($args) = @_;
+
+    my $patron = $args->{patron};
+    my $cgi    = $args->{cgi};
+
+    $patron->account->reconcile_balance();
+
+    print $cgi->redirect("/cgi-bin/koha/members/pay.pl?borrowernumber=" . $patron->borrowernumber );
+    return;
+}