Bug 13891: DataTables server-side processing - patron cards
authorJonathan Druart <jonathan.druart@biblibre.com>
Fri, 20 Mar 2015 16:48:43 +0000 (17:48 +0100)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Mon, 13 Apr 2015 13:55:24 +0000 (10:55 -0300)
This third patch removes the previous way to search for patron cards users.

Test plan:
1/ Add items to a patron card batch (patroncards/edit-batch.pl?op=edit&element_id=X)
2/ Add 1+ patrons to the batch
3/ Confirm there is no regression

Tested together with other patches.
Signed-off-by: Marc Veron <veron@veron.ch>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
koha-tmpl/intranet-tmpl/prog/en/modules/common/patron_search.tt
koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/edit-batch.tt
koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt [deleted file]
koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt [new file with mode: 0644]
patroncards/add_user_search.pl [new file with mode: 0755]
patroncards/members-search.pl [deleted file]

index b1e4c47..e182688 100644 (file)
@@ -176,6 +176,8 @@ function filter() {
                                 [% CASE 'name' %]<th>Name</th>
                                 [% CASE 'branch' %]<th>Library</th>
                                 [% CASE 'category' %]<th>Category</th>
+                                [% CASE 'dateexpiry' %]<th>Expires on</td>
+                                [% CASE 'borrowernotes' %]<th>Notes</th>
                                 [% CASE 'action' %]<th>&nbsp;</th>
                             [% END %]
                         [% END %]
index 0851936..25f79d4 100644 (file)
                     return; // abort delete
                 }
             };
+
             function Add() {
-                window.open("/cgi-bin/koha/patroncards/members-search.pl?batch_id=[% batch_id %]",'FindABibIndex','width=875,height=400,toolbar=no,scrollbars=yes');
-            };
+                window.open("/cgi-bin/koha/patroncards/add_user_search.pl",
+                   'PatronPopup',
+                   'width=740,height=450,location=yes,toolbar=no,'
+                   + 'scrollbars=yes,resize=yes'
+               );
+            }
+
+            function add_user(borrowernumber) {
+                var myurl = "edit-batch.pl?op=add&batch_id=[% batch_id %]&borrower_number="+borrowernumber;
+                window.location.href = myurl;
+            }
+
             function DeDuplicate() {
                 window.location = "/cgi-bin/koha/patroncards/edit-batch.pl?op=de_duplicate&amp;batch_id=[% batch_id %]";
             };
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tt
deleted file mode 100644 (file)
index b0e7702..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-[% INCLUDE 'doc-head-open.inc' %]
-<title>Koha &rsaquo; Patrons [% IF ( searching ) %]&rsaquo; Search results[% END %]</title>
-[% INCLUDE 'doc-head-close.inc' %]
-       <style type="text/css">
-               #custom-doc { width:47.23em;*width:46.04em;min-width:600px; margin:auto; text-align:left; }
-       </style>
-<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
-<script type="text/javascript">
-//<![CDATA[
-$(document).ready(function(){
-    $("#CheckAll").click(function(){
-               $(".checkboxed").checkCheckboxes();
-               return false;
-    });
-    $("#CheckNone").click(function(){
-        $(".checkboxed").unCheckCheckboxes();
-        return false;
-    });
-});
-function add_item(borrowernum,batch_id,type_id){
- var getstr='';
- if (borrowernum == 'checked') {
-    itms= new Array;
-    if(document.resultform.borrowernumber.length > 0) {
-        for (var i=0; i < document.resultform.borrowernumber.length; i++) {
-            if (document.resultform.borrowernumber[i].checked) {
-                itms.push("borrower_number=" +  document.resultform.borrowernumber[i].value);
-            }
-        }
-        getstr = itms.join("&");
-    } else {
-        getstr = "borrower_number="+document.resultform.borrowernumber.value;
-    }
-  } else {
-               getstr = "borrower_number="+borrowernum;
-    }
-       var myurl = "edit-batch.pl?op=add&batch_id="+batch_id+"&"+getstr;
-       window.opener.location.href = myurl;
-}
-//]]>
-</script>
-</head>
-<body id="pcard_members-search" class="tools pcard">
-
-<div id="custom-doc" class="yui-t7">
-  <div id="bd">
-       <div class="yui-g">
-<h3>Patron search</h3>
-
-<div class="browse">
-    Browse by last name:
-    [% FOREACH letter IN alphabet.split(' ') %]
-        <a href="/cgi-bin/koha/patroncards/members-search.pl?not_attributes=1&amp;member=[% letter %]&amp;batch_id=[% batch_id %]">[% letter %]</a>
-    [% END %]
-</div>
-
-<form method="get" action="/cgi-bin/koha/patroncards/members-search.pl"><p>
-<input type="hidden" name="batch_id" value="[% batch_id %]" />
-<input type="hidden" name="type" value="[% type %]" />
-<label for="member">Name: </label>
-<input id="member" name="member" value="[% member %]" />
-
-[% UNLESS ( no_categories ) %]
-    <label for="category">Category: </label>
-    <select name="category" id="category">
-        <option value="">Any</option>
-        [% FOREACH categorie IN categories %]
-            [% IF ( categorie.categorycode == category ) %]
-                <option value="[% categorie.categorycode %]" selected="selected">[% categorie.description |html_entity %]</option>
-            [% ELSE %]
-                <option value="[% categorie.categorycode %]">[% categorie.description |html_entity %]</option>
-            [% END %]
-        [% END %]
-    </select>
-[% END %]
-
-<input type="submit" value="Search" /></p>
-</form>
-
-[% IF ( resultsloop ) %]
-<div id="searchheader"> <h3>Results [% from %] to [% to %] of [% numresults %] found [% IF ( member ) %]for name: '<span class="ex">[% member %]</span>'[% END %] [% IF ( category ) %]with category code: '<span class="ex">[% category %]</span>'[% END %]</h3></div>
-[% IF ( paginationbar ) %]<div id="pagination_top" class="pages">[% paginationbar %]</div>[% END %]
-<form name="resultform" action="/cgi-bin/koha/patroncards/members-search.pl" method="get" class="checkboxed"><div style="float: right; margin-top: .5em;"><input type="submit" class="icon addchecked" value="Add checked" onclick="add_item('checked',[% batch_id %]); return false" /> <input type="button" class="close" value="Done" /></div>
-<div style="line-height: 2em; margin-left: .7em;"><a id="CheckAll" href="/cgi-bin/koha/patroncards/members-search.pl">Select All</a><a id="CheckNone" href="/cgi-bin/koha/patroncards/members-search.pl">Clear All</a></div>
-<div class="searchresults">
-
-    <table style="float: left; margin: .5em 0;">
-    <tr>
-    <th>Select</th>
-    <th><a href="members-search.pl?member=[% member %]&amp;category=[% category %]&amp;batch_id=[% batch_id %]&amp;orderby=cardnumber">Card</a></th>
-    <th><a href="members-search.pl?member=[% member %]&amp;category=[% category %]&amp;batch_id=[% batch_id %]&amp;orderby=surname">Name</a></th>
-    <th><a href="members-search.pl?member=[% member %]&amp;category=[% category %]&amp;batch_id=[% batch_id %]&amp;orderby=borrowers.categorycode">Category</a></th>
-    <th><a href="members-search.pl?member=[% member %]&amp;category=[% category %]&amp;batch_id=[% batch_id %]&amp;orderby=branchcode">Library</a></th>
-    <th>Expires on</th>
-    <th>Notes</th>
-    <th></th>
-    </tr>
-    [% FOREACH resultsloo IN resultsloop %]
-    [% UNLESS ( loop.odd ) %]
-    <tr class="highlight">
-    [% ELSE %]
-    <tr>
-    [% END %]
-    <td> <input type="checkbox" name="borrowernumber" id="patron[% resultsloo.borrowernumber %]" value="[% resultsloo.borrowernumber %]" />    </td>
-    <td>[% resultsloo.cardnumber %]</td>
-    <td style="white-space: nowrap;"><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% resultsloo.borrowernumber %]">[% resultsloo.surname %], [% resultsloo.firstname %]</a> <br /> [% resultsloo.address %][% IF ( resultsloo.address2 ) %]<br />[% resultsloo.address2 %][% END %][% IF ( resultsloo.city ) %]<br />[% resultsloo.city %][% END %]</td>
-    <td>[% resultsloo.category_description %] ([% resultsloo.categorycode %])</td>
-    <td>[% resultsloo.branchcode %]</td>
-    <td>[% resultsloo.dateexpiry %]</td>
-    <td>[% resultsloo.borrowernotes %]</td>
-    <td><a onclick="add_item('[% resultsloo.borrowernumber %]',[% batch_id %]); return false" href="/cgi-bin/koha/patroncards/edit-batch.pl?borrower_number=[% resultsloo.borrowernumber %]&amp;batch_id=[% batch_id %]&amp;op=add">Add</a></td>
-    </tr>
-    [% END %]
-    </table>
-       </div>
-</form>
-
-[% ELSE %]
-[% IF ( searching ) %]
-No results found
-[% END %]
-[% END %]
-
-</div>
-</div>
-[% INCLUDE 'popup-bottom.inc' %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/tables/members_results.tt
new file mode 100644 (file)
index 0000000..39f6ece
--- /dev/null
@@ -0,0 +1,26 @@
+[% USE To %]
+{
+    "sEcho": [% sEcho %],
+    "iTotalRecords": [% iTotalRecords %],
+    "iTotalDisplayRecords": [% iTotalDisplayRecords %],
+    "aaData": [
+        [% FOREACH data IN aaData %]
+            {
+                "dt_cardnumber":
+                    "[% data.cardnumber %]",
+                "dt_name":
+                    "<span style='white-space:nowrap'><a href='/cgi-bin/koha/members/moremember.pl?borrowernumber=[% data.borrowernumber %]'>[% INCLUDE 'patron-title.inc' borrowernumber = data.borrowernumber category_type = data.category_type firstname = data.firstname surname = data.surname othernames = data.othernames cardnumber = data.cardnumber invert_name = 1%]</a></span>",
+                "dt_category":
+                    "[% data.category_description |html %] ([% data.category_type |html %])",
+                "dt_branch":
+                    "[% data.branchname |html %]",
+                "dt_dateexpiry":
+                    "[% data.dateexpiry %]",
+                "dt_borrowernotes":
+                    "[% data.borrowernotes.replace('\\\\' , '\\\\') |html |html_line_break |collapse %]",
+                "dt_action":
+                    "<a style='cursor:pointer' onclick='add_user(\"[% data.borrowernumber %]\", \"[% data.firstname %] [% data.surname %]\"); return false;'>Add</a>"
+            }[% UNLESS loop.last %],[% END %]
+        [% END %]
+    ]
+}
diff --git a/patroncards/add_user_search.pl b/patroncards/add_user_search.pl
new file mode 100755 (executable)
index 0000000..2953dcf
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# Copyright 2014 BibLibre
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use CGI qw ( -utf8 );
+use C4::Auth;
+use C4::Output;
+use C4::Members;
+
+my $input = new CGI;
+
+my $dbh = C4::Context->dbh;
+
+my ( $template, $loggedinuser, $cookie, $staff_flags ) = get_template_and_user(
+    {   template_name   => "common/patron_search.tt",
+        query           => $input,
+        type            => "intranet",
+        authnotrequired => 0,
+        flagsrequired => { serials => 'routing' },
+    }
+);
+
+my $q = $input->param('q') || '';
+my $op = $input->param('op') || '';
+
+my $referer = $input->referer();
+
+$template->param(
+    view => ( $input->request_method() eq "GET" ) ? "show_form" : "show_results",
+    columns => ['cardnumber', 'name', 'category', 'branch', 'dateexpiry', 'borrowernotes', 'action'],
+    json_template => 'patroncards/tables/members_results.tt',
+    selection_type => 'add',
+);
+output_html_with_http_headers( $input, $cookie, $template->output );
diff --git a/patroncards/members-search.pl b/patroncards/members-search.pl
deleted file mode 100755 (executable)
index 0c680a0..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/perl
-
-# Copyright 2000-2002 Katipo Communications
-#
-# This file is part of Koha.
-#
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
-#
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-use strict;
-use warnings;
-
-use CGI qw ( -utf8 );
-
-use C4::Auth;
-use C4::Output;
-use C4::Members;
-use C4::Debug;
-
-my $cgi = CGI->new;
-
-my $batch_id = $cgi->param('batch_id') || 0;
-my $startfrom = $cgi->param('startfrom')||1;
-my $resultsperpage = $cgi->param('resultsperpage')||C4::Context->preference("PatronsPerPage")||20;
-my $category = $cgi->param('category') || undef;
-my $member = $cgi->param('member') || '';
-my $orderby = $cgi->param('orderby') || undef;
-my $not_attributes = $cgi->param('not_attributes') || undef;
-
-my @categories=C4::Category->all;
-my %categories_display;
-my $no_categories;
-
-foreach my $category (@categories) {
-    my $hash={
-        category_description=>$$category{description},
-        category_type=>$$category{category_type}
-    };
-    $categories_display{$$category{categorycode}} = $hash;
-}
-
-
-my ($template, $loggedinuser, $cookie) = get_template_and_user({
-                template_name => "patroncards/members-search.tt",
-                query => $cgi,
-                type => "intranet",
-                authnotrequired => 0,
-                flagsrequired => {borrowers => 1},
-                debug => 1,});
-
-if(scalar(@categories) < 1){ $no_categories = 1; }
-if($no_categories && C4::Context->preference("AddPatronLists")=~/code/){
-    $template->param(no_categories => 1);
-} else {
-    $template->param(
-        categories=>\@categories,
-        category => $category
-    );
-}
-
-$orderby = "surname,firstname" unless $orderby;
-$member =~ s/,//g;   #remove any commas from search string
-$member =~ s/\*/%/g;
-
-if ($member || $category) {
-    my $results = $category ? Search({''=>$member, categorycode=>$category}, $orderby, undef, undef, undef, undef, $not_attributes )
-                            : Search($member, $orderby, undef, undef, undef, undef, $not_attributes);
-    my $count = $results ? @$results : 0;
-
-    my @resultsdata = ();
-    my $to = ($count>($startfrom * $resultsperpage)?$startfrom * $resultsperpage:$count);
-    for (my $i = ($startfrom-1) * $resultsperpage; $i < $to; $i++){
-        #find out stats
-        my ($od,$issue,$fines) = GetMemberIssuesAndFines($results->[$i]{'borrowernumber'});
-        my %row = (
-            count               => $i + 1,
-                %{$categories_display{$results->[$i]{categorycode}}},
-            borrowernumber      => $results->[$i]{'borrowernumber'},
-            cardnumber          => $results->[$i]{'cardnumber'},
-            surname             => $results->[$i]{'surname'},
-            firstname           => $results->[$i]{'firstname'},
-            categorycode        => $results->[$i]{'categorycode'},
-            address             => $results->[$i]{'address'},
-            address2            => $results->[$i]{'address2'},
-            city                => $results->[$i]{'city'},
-            zipcode             => $results->[$i]{'zipcode'},
-            country             => $results->[$i]{'country'},
-            branchcode          => $results->[$i]{'branchcode'},
-            overdues            => $od,
-            issues              => $issue,
-            odissue             => "$od/$issue",
-            fines               => ($fines ? sprintf("%.2f",$fines) : ''),
-            borrowernotes       => $results->[$i]{'borrowernotes'},
-            sort1               => $results->[$i]{'sort1'},
-            sort2               => $results->[$i]{'sort2'},
-            dateexpiry          => C4::Dates->new($results->[$i]{'dateexpiry'},'iso')->output('syspref'),
-        );
-        push(@resultsdata, \%row);
-    }
-    my $base_url = '?' . join('&amp;', map { $_->{term} . '=' . $_->{val} } (
-                                            { term => 'member',         val => $member         },
-                                            { term => 'category',       val => $category       },
-                                            { term => 'orderby',        val => $orderby        },
-                                            { term => 'resultsperpage', val => $resultsperpage },
-                                            { term => 'batch_id',       val => $batch_id       },)
-                                        );
-    $template->param(
-        paginationbar   => pagination_bar(
-                                            $base_url,  int( $count / $resultsperpage ) + 1,
-                                            $startfrom, 'startfrom'
-                                         ),
-        startfrom       => $startfrom,
-        from            => ($startfrom-1) * $resultsperpage + 1,
-        to              => $to,
-        multipage       => ($count != $to || $startfrom != 1),
-        searching       => "1",
-        member          => $member,
-        category_type   => $category,
-        numresults      => $count,
-        resultsloop     => \@resultsdata,
-        batch_id        => $batch_id,
-    );
-}
-else {
-    $template->param( batch_id => $batch_id);
-}
-
-$template->param( 'alphabet' => C4::Context->preference('alphabet') || join ' ', 'A' .. 'Z' );
-
-output_html_with_http_headers $cgi, $cookie, $template->output;
-
-__END__
-
-#script to do a borrower enquiry/bring up borrower details etc
-#written 20/12/99 by chris@katipo.co.nz
-
-