Bug 14498: uri_escape error triggered by duplicate accountno's for patron
authorKyle M Hall <kyle@bywatersolutions.com>
Mon, 6 Jul 2015 15:00:38 +0000 (11:00 -0400)
committerTomas Cohen Arazi <tomascohen@unc.edu.ar>
Thu, 20 Aug 2015 16:41:38 +0000 (13:41 -0300)
If a patron has duplicate accountno's for two different fines in Koha this will trigger the error
usi_escape: Unmatched [ in regex; marked by <-- HERE in m/([ <-- HERE ])/ at (eval 133) line 1.
upon attempt to pay. How those accountno's get duplicated is unknown, but considering accountno
is somewhat vestigial at this point in time, it would be much more sensible to use accountlines_id
which is has guaranteed uniqueness at the database level.

Test Plan:
1) Create a patron with 2 fines
2) Edit the accountno's for those fines and set them to 0
3) Attempt to pay one, note the error
4) Apply this patch
5) Refesh the page
6) Attempt to pay one, no error this time!
7) Test Pay, Write off, Pay amount, Write off all, and Pay selected

Signed-off-by: Deborah Duce <deborah.duce@huntsvillelibrary.ca>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@unc.edu.ar>

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

index 18b857c..64a0f68 100644 (file)
@@ -94,25 +94,24 @@ function enableCheckboxActions(){
 <tr>
     <td>
     [% IF ( line.amountoutstanding > 0 ) %]
-        <input class="cb" type="checkbox" checked="checked" name="incl_par_[% line.accountno %]" />
+        <input class="cb" type="checkbox" checked="checked" name="incl_par_[% line.accountlines_id %]" />
     [% END %]
     </td>
     <td>
     [% IF ( line.amountoutstanding > 0 ) %]
-        <input type="submit" name="pay_indiv_[% line.accountno %]" value="Pay" />
-        [% IF CAN_user_updatecharges_writeoff %]<input type="submit" name="wo_indiv_[% line.accountno %]" value="Write off" />[% END %]
+        <input type="submit" name="pay_indiv_[% line.accountlines_id %]" value="Pay" />
+        [% IF CAN_user_updatecharges_writeoff %]<input type="submit" name="wo_indiv_[% line.accountlines_id %]" value="Write off" />[% END %]
     [% END %]
-    <input type="hidden" name="itemnumber[% line.accountno %]" value="[% line.itemnumber %]" />
-    <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 %]" />
-    <input type="hidden" name="notify_id[% line.accountno %]" value="[% line.notify_id %]" />
-    <input type="hidden" name="notify_level[% line.accountno %]" value="[% line.notify_level %]" />
-    <input type="hidden" name="totals[% line.accountno %]" value="[% line.totals %]" />
+    <input type="hidden" name="itemnumber[% line.accountlines_id %]" value="[% line.itemnumber %]" />
+    <input type="hidden" name="description[% line.accountlines_id %]" value="[% line.description %]" />
+    <input type="hidden" name="accounttype[% line.accountlines_id %]" value="[% line.accounttype %]" />
+    <input type="hidden" name="amount[% line.accountlines_id %]" value="[% line.amount %]" />
+    <input type="hidden" name="accountlines_id[% line.accountlines_id %]" value="[% line.accountlines_id %]" />
+    <input type="hidden" name="amountoutstanding[% line.accountlines_id %]" value="[% line.amountoutstanding %]" />
+    <input type="hidden" name="borrowernumber[% line.accountlines_id %]" value="[% line.borrowernumber %]" />
+    <input type="hidden" name="notify_id[% line.accountlines_id %]" value="[% line.notify_id %]" />
+    <input type="hidden" name="notify_level[% line.accountlines_id %]" value="[% line.notify_level %]" />
+    <input type="hidden" name="totals[% line.accountlines_id %]" value="[% line.totals %]" />
     </td>
     <td>
         [% SWITCH line.accounttype %]
@@ -139,7 +138,7 @@ function enableCheckboxActions(){
         [%- IF line.description %], [% line.description %][% END %]
         [% IF line.title %]([% line.title %])[% END %]
     </td>
-    <td><input type="text" name="payment_note_[% line.accountno %]" /></td>
+    <td><input type="text" name="payment_note_[% line.accountlines_id %]" /></td>
     <td>[% line.accounttype %]</td>
     <td>[% line.notify_id %]</td>
     <td>[% line.notify_level %]</td>
index 07217fd..a4f73f2 100755 (executable)
@@ -170,7 +170,6 @@ sub redirect_to_paycollect {
     $redirect .= get_for_redirect( 'amount', "amount$line_no", 1 );
     $redirect .=
       get_for_redirect( 'amountoutstanding', "amountoutstanding$line_no", 1 );
-    $redirect .= get_for_redirect( 'accountno',    "accountno$line_no",    0 );
     $redirect .= get_for_redirect( 'title',        "title$line_no",        0 );
     $redirect .= get_for_redirect( 'itemnumber',   "itemnumber$line_no",   0 );
     $redirect .= get_for_redirect( 'notify_id',    "notify_id$line_no",    0 );
@@ -184,7 +183,7 @@ sub redirect_to_paycollect {
 
 sub writeoff_all {
     my @params = @_;
-    my @wo_lines = grep { /^accountno\d+$/ } @params;
+    my @wo_lines = grep { /^accountlines_id\d+$/ } @params;
     for (@wo_lines) {
         if (/(\d+)/) {
             my $value       = $1;
@@ -193,7 +192,6 @@ sub writeoff_all {
             #    my $borrowernum    = $input->param("borrowernumber$value");
             my $itemno    = $input->param("itemnumber$value");
             my $amount    = $input->param("amountoutstanding$value");
-            my $accountno = $input->param("accountno$value");
             my $accountlines_id = $input->param("accountlines_id$value");
             my $payment_note = $input->param("payment_note_$value");
             WriteOffFee( $borrowernumber, $accountlines_id, $itemno, $accounttype, $amount, $branch, $payment_note );
@@ -250,7 +248,7 @@ sub payselected {
     foreach (@params) {
         if (/^incl_par_(\d+)$/) {
             my $index = $1;
-            push @lines_to_pay, $input->param("accountno$index");
+            push @lines_to_pay, $input->param("accountlines_id$index");
             $amt += $input->param("amountoutstanding$index");
         }
     }