Adding member search to patron card generation feature

Signed-off-by: Joshua Ferraro <jmf@liblime.com>
This commit is contained in:
Chris Nighswonger 2008-03-26 06:01:34 -04:00 committed by Joshua Ferraro
parent 4cfbf45e35
commit 028f4f24fb
3 changed files with 291 additions and 5 deletions

View file

@ -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" -->

View file

@ -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;
}

161
labels/pcard-member-search.pl Executable file
View file

@ -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;