[17/30] Patron Card Creator member search interface and code
authorChris Nighswonger <cnighswonger@foundations.edu>
Mon, 11 Jan 2010 18:46:30 +0000 (13:46 -0500)
committerChris Nighswonger <cnighswonger@foundations.edu>
Mon, 11 Jan 2010 23:21:14 +0000 (18:21 -0500)
koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tmpl [new file with mode: 0644]
patroncards/members-search.pl [new file with mode: 0755]

diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/members-search.tmpl
new file mode 100644 (file)
index 0000000..49fc107
--- /dev/null
@@ -0,0 +1,136 @@
+<!-- TMPL_INCLUDE NAME="doc-head-open.inc" -->
+<title>Koha &rsaquo; Patrons <!-- TMPL_IF NAME="searching" -->&rsaquo; Search Results<!-- /TMPL_IF --></title>
+<!-- TMPL_INCLUDE NAME="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="<!-- TMPL_VAR name="themelang" -->/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>
+
+<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:
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=a&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">A</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=b&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">B</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=c&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">C</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=d&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">D</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=e&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">E</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=f&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">F</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=g&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">G</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=h&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">H</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=i&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">I</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=j&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">J</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=k&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">K</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=l&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">L</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=m&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">M</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=n&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">N</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=o&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">O</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=p&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">P</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=q&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">Q</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=r&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">R</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=s&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">S</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=t&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">T</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=u&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">U</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=v&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">V</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=w&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">W</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=x&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">X</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=y&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">Y</a>
+    <a href="/cgi-bin/koha/patroncards/members-search.pl?member=z&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->">Z</a>
+</div>
+
+<form method="get" action="/cgi-bin/koha/patroncards/members-search.pl"><p>
+<input type="hidden" name="batch_id" value="<!-- TMPL_VAR NAME="batch_id" -->" />
+<input type="hidden" name="type" value="<!-- TMPL_VAR NAME="type" -->" />
+<label for="member">Name</label>
+<input id="member" name="member" />
+<label for="category">Category code</label>
+<input id="category" name="category" />
+<input type="submit" value="Search" /></p>
+</form>
+
+<!-- TMPL_IF NAME="resultsloop" -->
+<div id="searchheader"> <h3>Results <!-- TMPL_VAR Name ="from" --> to <!-- TMPL_VAR Name ="to" --> of <!-- TMPL_VAR Name ="numresults" --> found for <!-- TMPL_IF NAME="member" -->name: '<span class="ex"><!-- TMPL_VAR NAME="member" --><!-- TMPL_ELSIF NAME="category_type" -->category code: '<span class="ex"><!-- TMPL_VAR NAME="category_type" --><!-- /TMPL_IF --></span>'</h3></div>
+<!-- TMPL_IF NAME="paginationbar" --><div id="pagination_top"><!-- TMPL_VAR Name ="paginationbar" --></div><!-- /TMPL_IF -->
+<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',<!-- TMPL_VAR NAME="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><label style="font-weight:bold;">Select</label></th>
+    <th><a href="members-search.pl?member=<!--TMPL_VAR Name="member" -->&amp;category=<!--TMPL_VAR Name="category_type" -->&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;orderby=cardnumber">Card</a></th>
+    <th><a href="members-search.pl?member=<!--TMPL_VAR Name="member" -->&amp;category=<!--TMPL_VAR Name="category_type" -->&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;orderby=surname">Name</a></th>
+    <th><a href="members-search.pl?member=<!--TMPL_VAR Name="member" -->&amp;category=<!--TMPL_VAR Name="category_type" -->&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;orderby=borrowers.categorycode">Category</a></th>
+    <th><a href="members-search.pl?member=<!--TMPL_VAR Name="member" -->&amp;category=<!--TMPL_VAR Name="category_type" -->&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;orderby=branchcode">Library</a></th>
+    <th>Expires on</th>
+    <th>Notes</th>
+    <th></th>
+    </tr>
+    <!-- TMPL_LOOP NAME="resultsloop" -->
+    <!-- TMPL_UNLESS NAME="__odd__" -->
+    <tr class="highlight">
+    <!-- TMPL_ELSE -->
+    <tr>
+    <!-- /TMPL_UNLESS -->
+    <td> <input type="checkbox" name="borrowernumber" id="patron<!-- TMPL_VAR NAME="borrowernumber" -->" value="<!-- TMPL_VAR NAME="borrowernumber" -->" />    </td>
+    <td><!-- TMPL_VAR NAME="cardnumber" --></td>
+    <td style="white-space: nowrap;"><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->"><!-- TMPL_VAR NAME="surname" -->, <!-- TMPL_VAR NAME="firstname" --></a> <br /> <!-- TMPL_VAR NAME="address" --><!-- TMPL_IF NAME="address2" --><br /><!-- TMPL_VAR NAME="address2" --><!-- /TMPL_IF --><!-- TMPL_IF NAME="city" --><br /><!-- TMPL_VAR NAME=city --><!-- /TMPL_IF --></td>
+    <td><!-- TMPL_VAR NAME="category_description" --> (<!-- TMPL_VAR name="category_type" -->)</td>
+    <td><!-- TMPL_VAR NAME="branchcode" --></td>
+    <td><!-- TMPL_VAR NAME="dateexpiry" --></td>
+    <td><!-- TMPL_VAR NAME="borrowernotes" --></td>
+    <td><a onclick="add_item('<!-- TMPL_VAR NAME="borrowernumber" -->',<!-- TMPL_VAR NAME="batch_id" -->); return false" href="/cgi-bin/koha/patroncards/edit-batch.pl?borrower_number=<!-- TMPL_VAR NAME="borrowernumber" -->&amp;batch_id=<!-- TMPL_VAR name="batch_id" -->&amp;op=add">Add</a></td>
+    </tr>
+    <!-- /TMPL_LOOP -->
+    </table>
+       </div>
+</form>
+
+<!-- TMPL_ELSE -->
+<!-- TMPL_IF NAME="searching" -->
+No results found
+<!-- /TMPL_IF -->
+<!-- /TMPL_IF -->
+
+</div>
+</div>
+<!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->
diff --git a/patroncards/members-search.pl b/patroncards/members-search.pl
new file mode 100755 (executable)
index 0000000..576ed30
--- /dev/null
@@ -0,0 +1,130 @@
+#!/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., 59 Temple Place,
+# Suite 330, Boston, MA  02111-1307 USA
+
+use strict;
+use warnings;
+
+use CGI;
+
+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') || undef;
+my $orderby = $cgi->param('orderby') || undef;
+
+my ($template, $loggedinuser, $cookie) = get_template_and_user({
+                template_name => "patroncards/members-search.tmpl",
+                query => $cgi,
+                type => "intranet",
+                authnotrequired => 0,
+                flagsrequired => {borrowers => 1},
+                debug => 1,});
+
+$orderby = "surname,firstname" unless $orderby;
+$member =~ s/,//g;   #remove any commas from search string
+$member =~ s/\*/%/g;
+
+if ($member || $category) {
+    my ($count,$results) = 0,0;
+
+    if(length($member) == 1)
+    {
+        ($count,$results) = SearchMember($member,$orderby,"simple");
+    }
+    else
+    {
+        ($count,$results) = SearchMember($member,$orderby,"advanced",$category);
+    }
+
+
+    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,
+            borrowernumber      => $results->[$i]{'borrowernumber'},
+            cardnumber          => $results->[$i]{'cardnumber'},
+            surname             => $results->[$i]{'surname'},
+            firstname           => $results->[$i]{'firstname'},
+            categorycode        => $results->[$i]{'categorycode'},
+            category_type       => $results->[$i]{'category_type'},
+            category_description        => $results->[$i]{'description'},
+            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 = __FILE__ . '?' . 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);
+}
+
+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
+
+