Adding member search to patron card generation feature
authorChris Nighswonger <cnighswonger@foundations.edu>
Wed, 26 Mar 2008 10:01:34 +0000 (06:01 -0400)
committerJoshua Ferraro <jmf@liblime.com>
Tue, 1 Apr 2008 11:42:37 +0000 (06:42 -0500)
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
koha-tmpl/intranet-tmpl/prog/en/modules/labels/pcard-members-search.tmpl [new file with mode: 0644]
labels/label-manager.pl
labels/pcard-member-search.pl [new file with mode: 0755]

diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/pcard-members-search.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/pcard-members-search.tmpl
new file mode 100644 (file)
index 0000000..628fb29
--- /dev/null
@@ -0,0 +1,128 @@
+<!-- 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" -->
+<script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/jquery/plugins/jquery.checkboxes.pack.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("borrowernumber=" +  document.resultform.borrowernumber[i].value);
+            }
+        }
+        getstr = itms.join("&");
+    } else {
+        getstr = "borrowernumber="+document.resultform.borrowernumber.value;
+    }
+  } else {
+               getstr = "borrowernumber="+borrowernum;
+    } 
+       var myurl = "label-manager.pl?op=add&batch_id="+batch_id+"&type="+type_id+"&"+getstr;
+       window.opener.location.href = myurl;
+}
+function add_item3(borrowernumber){
+ var myurl = "label-manager.pl?op=add&borrowernumber="+borrowernumber+"";
+     window.opener.location.href = myurl;
+}
+//]]>
+</script>
+</head>
+</head>
+<body>
+<div id="breadcrumbs">Home &rsaquo; <!-- TMPL_IF NAME="searching" --><a href="/cgi-bin/koha/labels/pcard-member-search.pl">Patrons</a>  &rsaquo; Search Results<!-- TMPL_ELSE -->Patrons<!-- /TMPL_IF --></div>
+
+<div id="doc2"><!-- class="yui-t4">-->
+   
+<!--   <div id="bd"> -->
+<!--   <div id="yui-main"> -->
+<!--   <div class="yui-g"> -->
+       
+
+<div class="browse">
+    Browse by last name:
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=a&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">A</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=b&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">B</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=c&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">C</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=d&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">D</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=e&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">E</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=f&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">F</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=g&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">G</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=h&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">H</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=i&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">I</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=j&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">J</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=k&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">K</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=l&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">L</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=m&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">M</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=n&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">N</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=o&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">O</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=p&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">P</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=q&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">Q</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=r&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">R</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=s&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">S</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=t&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">T</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=u&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">U</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=v&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">V</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=w&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">W</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=x&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">X</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=y&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">Y</a>
+    <a href="/cgi-bin/koha/labels/pcard-member-search.pl?member=z&amp;batch_id=<!-- TMPL_VAR NAME="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->">Z</a>
+</div>
+
+
+<!-- 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 '<span class="ex"><!-- TMPL_VAR NAME="member" --></span>'</h3></div>
+<form name="resultform" 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" -->,'<!-- TMPL_VAR NAME="type" -->'); 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/labels/pcard-member-search.pl">Select All</a></span><span class="clearall"><a id="CheckNone" href="/cgi-bin/koha/labels/pcard-member-search.pl">Clear All</a></div>
+<div class="searchresults">
+
+    <table style="float: left; margin: .5em 0;">
+    <tr>
+    <th><label for="patron<!-- TMPL_VAR NAME="borrowernumber" -->" style="font-weight:bold;">Select</label></th>
+    <th><a href="pcard-member-search.pl?member=<!--TMPL_VAR Name="member" -->&amp;orderby=cardnumber">Card</a></th>
+    <th><a href="pcard-member-search.pl?member=<!--TMPL_VAR Name="member" -->&amp;orderby=surname">Name</a></th>
+    <th><a href="pcard-member-search.pl?member=<!--TMPL_VAR Name="member" -->&amp;orderby=borrowers.categorycode">Cat</a></th>
+    <th><a href="pcard-member-search.pl?member=<!--TMPL_VAR Name="member" -->&amp;orderby=branchcode">Branch</a></th>
+    <th>Expires on</th>
+    <th>Notes</th>
+    <th></th>
+    </tr>
+    <!-- TMPL_LOOP NAME="resultsloop" -->
+    <tr>
+    <td align="center"> <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/morepcard-member-search.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 align="center"><a onclick="add_item('<!-- TMPL_VAR NAME="borrowernumber" -->',<!-- TMPL_VAR NAME="batch_id" -->,'<!-- TMPL_VAR NAME="type" -->'); return false" href="/cgi-bin/koha/barcodes/label-manager.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->&amp;batch_id=<!-- TMPL_VAR name="batch_id" -->&amp;type=<!-- TMPL_VAR NAME="type" -->&amp;op=add">Add</a></td>
+    </tr>
+    <!-- /TMPL_LOOP -->
+    </table>
+</form>
+<!--  </div> -->
+<!-- TMPL_ELSE -->
+<!-- TMPL_IF NAME="searching" -->
+No results found
+<!-- /TMPL_IF -->
+<!-- /TMPL_IF -->
+
+<!-- </div> -->
+<!-- </div> -->
+
+</div>
+<!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->
index 50d8135..55e1257 100755 (executable)
@@ -7,7 +7,7 @@ use C4::Labels;
 use C4::Output;
 use HTML::Template::Pro;
 #use POSIX qw(ceil);
-use Data::Dumper;
+#use Data::Dumper;
 #use Smart::Comments;
 
 use vars qw($debug);
@@ -110,14 +110,11 @@ elsif  ( $op eq 'add_layout' ) {
 # FIXME: The trinary conditionals here really need to be replaced with a more robust form of db abstraction -fbcit
 
 elsif ( $op eq 'add' ) {   # add item
-       warn "op \'add\': batch id = $batch_id, type = $batch_type";
         my $query2 = "INSERT INTO $batch_type ( " . (($batch_type eq 'labels') ? 'itemnumber' : 'borrowernumber') . ", batch_id ) values ( ?,? )";
-        warn "op \'add\' \$query2=$query2";
        my $sth2   = $dbh->prepare($query2);
-        warn Dumper($itemnumber);
        for my $inum (@itemnumber) {
             warn "INSERTing " . (($batch_type eq 'labels') ? 'itemnumber' : 'borrowernumber') . ":$inum for batch $batch_id";
-               $sth2->execute($inum, $batch_id);
+           $sth2->execute($inum, $batch_id);
        }
        $sth2->finish;
 }
diff --git a/labels/pcard-member-search.pl b/labels/pcard-member-search.pl
new file mode 100755 (executable)
index 0000000..d40da1b
--- /dev/null
@@ -0,0 +1,161 @@
+#!/usr/bin/perl
+
+
+#script to do a borrower enquiry/bring up borrower details etc
+#written 20/12/99 by chris@katipo.co.nz
+
+
+# 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 C4::Auth;
+use C4::Output;
+use CGI;
+use C4::Members;
+
+
+my $input = new CGI;
+my $batch_id    = $input->param('batch_id');
+my $batch_type  = $input->param('type');
+
+warn "Passed Batch Id: $batch_id and Type: $batch_type";
+
+my $quicksearch = $input->param('quicksearch');
+my $startfrom = $input->param('startfrom')||1;
+my $resultsperpage = $input->param('resultsperpage')||C4::Context->preference("PatronsPerPage")||20;
+
+my ($template, $loggedinuser, $cookie);
+if($quicksearch){
+    ($template, $loggedinuser, $cookie)
+    = get_template_and_user({template_name => "members/member-quicksearch-results.tmpl",
+                 query => $input,
+                 type => "intranet",
+                 authnotrequired => 0,
+                 flagsrequired => {borrowers => 1},
+                 debug => 1,
+                 });
+} else {
+    ($template, $loggedinuser, $cookie)
+    = get_template_and_user({template_name => "labels/pcard-members-search.tmpl",
+                 query => $input,
+                 type => "intranet",
+                 authnotrequired => 0,
+                 flagsrequired => {borrowers => 1},
+                 debug => 1,
+                 });
+}
+my $theme = $input->param('theme') || "default";
+            # only used if allowthemeoverride is set
+#my %tmpldata = pathtotemplate ( template => 'member.tmpl', theme => $theme, language => 'fi' );
+    # FIXME - Error-checking
+#my $template = HTML::Template->new( filename => $tmpldata{'path'},
+#                   die_on_bad_params => 0,
+#                   loop_context_vars => 1 );
+
+
+my $member=$input->param('member');
+my $orderby=$input->param('orderby');
+$orderby = "surname,firstname" unless $orderby;
+$member =~ s/,//g;   #remove any commas from search string
+$member =~ s/\*/%/g;
+
+unless ($member) {
+    $template->param( batch_id => $batch_id, type => $batch_type,);
+    output_html_with_http_headers $input, $cookie, $template->output;
+    exit;
+}
+
+my ($count,$results);
+
+if(length($member) == 1)
+{
+    ($count,$results)=SearchMember($member,$orderby,"simple");
+}
+else
+{
+    ($count,$results)=SearchMember($member,$orderby,"advanced");
+}
+
+
+my @resultsdata;
+my $toggle = 0;
+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 = (
+    toggle => $toggle,
+    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'},
+    branchcode => $results->[$i]{'branchcode'},
+    overdues => $od,
+    issues => $issue,
+    odissue => "$od/$issue",
+    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'),
+    );
+  if ( $toggle ) { $toggle = 0; } else {$toggle = 1; }
+  push(@resultsdata, \%row);
+}
+my $base_url =
+    'member.pl?&amp;'
+  . join(
+    '&amp;',
+    map { $_->{term} . '=' . $_->{val} } (
+        { term => 'member', val => $member},
+        { term => 'orderby', val => $orderby },
+        { term => 'resultsperpage', val => $resultsperpage },
+        { term => 'type',           val => 'intranet' },
+    )
+  );
+
+$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),
+);
+
+$template->param( 
+        searching       => "1",
+        member          => $member,
+        numresults      => $count,
+        resultsloop     => \@resultsdata,
+        batch_id        => $batch_id,
+        type            => $batch_type,
+            );
+
+output_html_with_http_headers $input, $cookie, $template->output;