Bug 13926: ake circulation.pl not using C4::Members::Search
authorJonathan Druart <jonathan.druart@biblibre.com>
Mon, 30 Mar 2015 10:15:42 +0000 (12:15 +0200)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Mon, 13 Apr 2015 16:58:44 +0000 (13:58 -0300)
This patch uses the same method as bug 13894.

Important note: This will modify the UI.
The patron list will now be displayed in a table (instead of a select).

Test plan:
1/ Search for a patron using the checkout tab
2/ The patron list should appear correctly

Test with different type of search (returns 0, 1, 1+ results).

No behavior changes should be observed.

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
works as expected

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>

circ/circulation.pl
koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt

index fa8e5b1..d093c00 100755 (executable)
@@ -34,6 +34,7 @@ use C4::Dates qw/format_date/;
 use C4::Branch; # GetBranches
 use C4::Koha;   # GetPrinter
 use C4::Circulation;
+use C4::Utils::DataTables::Members;
 use C4::Members;
 use C4::Biblio;
 use C4::Search;
@@ -202,25 +203,30 @@ if ( $print eq 'yes' && $borrowernumber ne '' ) {
 # STEP 2 : FIND BORROWER
 # if there is a list of find borrowers....
 #
-my $borrowerslist;
 my $message;
 if ($findborrower) {
-    my $borrowers = Search($findborrower, 'cardnumber') || [];
-    my $categories = GetBorrowercategoryList;
-    $categories->[0]->{first} = 1;
-    $template->param( categories => $categories );
-
-    if ( @$borrowers == 0 ) {
-        $query->param( 'findborrower', '' );
-        $message = "'$findborrower'";
-    }
-    elsif ( @$borrowers == 1 ) {
-        $borrowernumber = $borrowers->[0]->{'borrowernumber'};
-        $query->param( 'borrowernumber', $borrowernumber );
-        $query->param( 'barcode',           '' );
-    }
-    else {
-        $borrowerslist = $borrowers;
+    my $borrower = C4::Members::GetMember( cardnumber => $findborrower );
+    if ( $borrower ) {
+        $borrowernumber = $borrower->{borrowernumber};
+    } else {
+        my $dt_params = { iDisplayLength => -1 };
+        my $results = C4::Utils::DataTables::Members::search(
+            {
+                searchmember => $findborrower,
+                dt_params => $dt_params,
+            }
+        );
+        my $borrowers = $results->{patrons};
+        if ( scalar @$borrowers == 1 ) {
+            $borrowernumber = $borrowers->[0]->{borrowernumber};
+            $query->param( 'borrowernumber', $borrowernumber );
+            $query->param( 'barcode',           '' );
+        } elsif ( @$borrowers ) {
+            $template->param( borrowers => $borrowers );
+        } else {
+            $query->param( 'findborrower', '' );
+            $message = "'$findborrower'";
+        }
     }
 }
 
@@ -417,25 +423,6 @@ if ($borrowernumber) {
       if ( $borrower->{'category_type'} eq 'A' );
 }
 
-my @values;
-my %labels;
-my $selectborrower;
-if ($borrowerslist) {
-    foreach (
-        sort {(lc $a->{'surname'} cmp lc $b->{'surname'} || lc $a->{'firstname'} cmp lc $b->{'firstname'})
-        } @$borrowerslist
-      )
-    {
-        push @values, $_->{'borrowernumber'};
-        $labels{ $_->{'borrowernumber'} } =
-"$_->{'surname'}, $_->{'firstname'} ... ($_->{'cardnumber'} - $_->{'categorycode'} - $_->{'branchcode'}) ...  $_->{'address'} ";
-    }
-    $selectborrower = {
-        values => \@values,
-        labels => \%labels,
-    };
-}
-
 #title
 my $flags = $borrower->{'flags'};
 foreach my $flag ( sort keys %$flags ) {
@@ -586,7 +573,6 @@ $template->param(
     stickyduedate     => $stickyduedate,
     duedatespec       => $duedatespec,
     message           => $message,
-    selectborrower    => $selectborrower,
     totaldue          => sprintf('%.2f', $total),
     inprocess         => $inprocess,
     is_child          => ($borrowernumber && $borrower->{'category_type'} eq 'C'),
index 0576020..9f17a20 100644 (file)
@@ -44,7 +44,7 @@ var relatives_borrowernumbers = new Array();
 var MSG_ADD_MESSAGE = _("Add a new message");
 var MSG_EXPORT_SELECT_CHECKOUTS = _("You must select checkout(s) to export");
 [% IF ( borrowernumber ) %]if($.cookie("holdfor") != [% borrowernumber %]){ $.cookie("holdfor",null, { path: "/", expires: 0 }); }[% ELSE %]$.cookie("holdfor",null, { path: "/", expires: 0 });[% END %]
-[% UNLESS ( borrowernumber ) %][% UNLESS ( selectborrower ) %]window.onload=function(){ $('#findborrower').focus(); };[% END %][% END %]
+[% UNLESS ( borrowernumber ) %][% UNLESS ( borrowers ) %]window.onload=function(){ $('#findborrower').focus(); };[% END %][% END %]
 
 // On-site checkout
 function toggle_onsite_checkout(){
@@ -83,6 +83,23 @@ $(document).ready(function() {
     $("#onsite_checkout").click(function(){
         toggle_onsite_checkout();
     });
+
+    var table = $("#table_borrowers").dataTable($.extend(true, {}, dataTablesDefaults, {
+        "aoColumnDefs": [
+            { "aTargets": [ 0 ], "bSortable": false, "bSearchable": false },
+        ],
+        "aaSorting": [ 2, "asc" ],
+        "sDom": "t",
+        "iDisplayLength": -1
+    }));
+    $(table).find('tbody tr').filter(':has(:radio:checked)').end().click(function(event) {
+        $('#table_borrowers tbody tr').removeClass('selected');
+        $(this).addClass('selected');
+        if (event.target.type !== 'radio') {
+            $(':radio', this).attr('checked', 'true')
+        }
+    });
+
 });
 
 //]]>
@@ -100,7 +117,7 @@ $(document).ready(function() {
     <strong>Checkouts</strong>
 [% END %]
 </div>
-[% IF ( selectborrower ) %]
+[% IF ( $borrowers ) %]
 <div id="doc" class="yui-t7">
 
    <div id="bd">
@@ -500,19 +517,34 @@ No patron matched <span class="ex">[% message %]</span>
     <input type="hidden" name="duedatespec" value="[% duedatespec %]" />
     <input type="hidden" name="stickyduedate" value="[% stickyduedate %]" />
 
-<ol>    <li>
-    <label for="borrowernumber">Select a patron: </label>
-    <select name="borrowernumber" id="borrowernumber" size="7" class="focus" ondblclick="document.forms['mainform'].submit()">
-        [% FOREACH borrower IN selectborrower.values %]
-        <option value="[% borrower %]">[% selectborrower.labels.$borrower %]</option>
-        [% END %]
-    </select>
-    </li>
-</ol>
-<p><input type="submit" value="Select" /></p>
+    <table id="table_borrowers">
+        <thead>
+            <tr>
+                <th></th>
+                <th>Name</th>
+                <th>Cardnumber</th>
+                <th>Category</th>
+                <th>Library</th>
+                <th>Address</th>
+            </tr>
+        </thead>
+        <tbody>
+            [% FOREACH borrower IN borrowers %]
+            <tr>
+                <td><input type="radio" name="borrowernumber" value="[% borrower.borrowernumber %]" /></td>
+                <td>[% borrower.surname %], [% borrower.firstname %]</td>
+                <td>[% borrower.cardnumber %]</td>
+                <td>[% borrower.categorycode %]</td>
+                <td>[% borrower.branchcode %]</td>
+                <td>[% borrower.address %]</td>
+            </tr>
+            [% END %]
+        </tbody>
+    </table>
+    <fieldset class="action"><input type="submit" value="Select" /></fieldset>
 </fieldset>
 </form>
-[% ELSE %] <!-- selectborrower -->
+[% ELSE %]
 
 <!-- BARCODE ENTRY -->
 
@@ -878,7 +910,7 @@ No patron matched <span class="ex">[% message %]</span>
 
 </div>
 </div>
-[% UNLESS ( selectborrower ) %][% IF ( borrowernumber ) %]<div class="yui-b">
+[% UNLESS ( borrowers ) %][% IF ( borrowernumber ) %]<div class="yui-b">
 [% INCLUDE 'circ-menu.inc' %]
 </div>[% END %][% END %]
 </div>