Improving and Bug Fixing Membersearch
authorHenri-Damien LAURENT <henridamien.laurent@biblibre.com>
Fri, 18 Sep 2009 14:33:03 +0000 (16:33 +0200)
committerHenri-Damien LAURENT <henridamien.laurent@biblibre.com>
Wed, 30 Sep 2009 09:30:37 +0000 (11:30 +0200)
Now search can take borrowertype and branchcode
search is correctly positioned in page

C4/Members.pm
koha-tmpl/intranet-tmpl/prog/en/modules/members/member.tmpl
koha-tmpl/intranet-tmpl/prog/en/modules/members/search.tmpl
members/member.pl
members/members-home.pl

index e813d90..bd82c71 100644 (file)
@@ -29,6 +29,7 @@ use C4::Reserves;
 use C4::Accounts;
 use C4::Biblio;
 use C4::SQLHelper qw(InsertInTable UpdateInTable SearchInTable);
+use C4::Members::Attributes qw(SearchIdMatchingAttribute);
 
 our ($VERSION,@ISA,@EXPORT,@EXPORT_OK,$debug);
 
@@ -165,7 +166,6 @@ C<$count> is the number of elements in C<$borrowers>.
 
 #'
 #used by member enquiries from the intranet
-#called by member.pl and circ/circulation.pl
 sub SearchMember {
     my ($searchstring, $orderby, $type,$category_type,$filter,$showallbranches ) = @_;
     my $dbh   = C4::Context->dbh;
@@ -229,16 +229,6 @@ sub SearchMember {
         }
         $query = $query . ") OR cardnumber LIKE ? ";
         push( @bind, $searchstring );
-        if (C4::Context->preference('ExtendedPatronAttributes')) {
-            $query .= "OR borrowernumber IN (
-SELECT borrowernumber
-FROM borrower_attributes
-JOIN borrower_attribute_types USING (code)
-WHERE staff_searchable = 1
-AND attribute like ?
-)";
-            push (@bind, $searchstring);
-        }
         $query .= "order by $orderby";
 
         # FIXME - .= <<EOT;
@@ -255,9 +245,20 @@ AND attribute like ?
 }
 
 sub Search {
-    my ($filter,$orderby ) = @_;
-
-       my $data=SearchInTable("borrowers",$filter,$orderby);
+    my ($filter,$orderby, $limit, $columns_out, $search_on_fields,$searchtype) = @_;
+       my @filters;
+       if (ref($filter) eq "ARRAY"){
+               push @filters,@$filter;
+       }
+       else {
+               push @filters,$filter;
+       }
+    if (C4::Context->preference('ExtendedPatronAttributes')) {
+               my $matching_records = C4::Members::Attributes::SearchIdMatchingAttribute($filter);
+               push @filters,@$matching_records;
+    }
+       $searchtype||="wide";
+       my $data=SearchInTable("borrowers",\@filters,$orderby,$limit,$columns_out,$search_on_fields,$searchtype);
 
     return ( $data );
 }
index de5f160..c4b9df6 100644 (file)
@@ -1,6 +1,15 @@
 <!-- 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.tablesorter.min.js"></script>
+<script type="text/javascript">//<![CDATA[
+$(document).ready(function() {
+       $("#memberresultst").tablesorter({
+               sortList: [[0,0]],
+       }); 
+}); 
+//]]>
+</script>
 </head>
 <body>
 <!-- TMPL_INCLUDE NAME="header.inc" -->
 
 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <!-- TMPL_IF NAME="searching" --><a href="/cgi-bin/koha/members/members-home.pl">Patrons</a>  &rsaquo; Search Results<!-- TMPL_ELSE -->Patrons<!-- /TMPL_IF --></div>
 
-<div id="doc" class="yui-t2">
+<div id="doc3" class="yui-t3">
    
    <div id="bd">
-       <div id="yui-main">
-<div class="yui-g">
-<!-- TMPL_INCLUDE NAME="search.tmpl" -->
-</div>
-       <div class="yui-g first">
+               <div id="yui-main">
+                   <div class="yui-b">
+                               <div role="main" class="yui-g"> 
        
-<!-- TMPL_INCLUDE NAME="patron-toolbar.inc" -->
-
+                               <!-- TMPL_INCLUDE NAME="patron-toolbar.inc" -->
 
-<div class="browse">
-    Browse by last name:
-    <a href="/cgi-bin/koha/members/member.pl?member=a">A</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=b">B</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=c">C</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=d">D</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=e">E</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=f">F</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=g">G</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=h">H</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=i">I</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=j">J</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=k">K</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=l">L</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=m">M</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=n">N</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=o">O</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=p">P</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=q">Q</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=r">R</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=s">S</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=t">T</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=u">U</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=v">V</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=w">W</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=x">X</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=y">Y</a>
-    <a href="/cgi-bin/koha/members/member.pl?member=z">Z</a>
-</div>
+                                               <div class="browse">
+                                                       Browse by last name:
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=a">A</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=b">B</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=c">C</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=d">D</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=e">E</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=f">F</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=g">G</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=h">H</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=i">I</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=j">J</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=k">K</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=l">L</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=m">M</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=n">N</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=o">O</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=p">P</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=q">Q</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=r">R</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=s">S</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=t">T</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=u">U</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=v">V</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=w">W</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=x">X</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=y">Y</a>
+                                                       <a href="/cgi-bin/koha/members/member.pl?surname=z">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>
-<div class="searchresults">
+                                               <!-- 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="surname" --></span>'</h3></div>
+                                               <div class="searchresults">
 
-    <table style="width:100%">
-    <tr>
-    <th><a href="member.pl?member=<!--TMPL_VAR Name="member" -->&amp;orderby=cardnumber">Card</a></th>
-    <th><a href="member.pl?member=<!--TMPL_VAR Name="member" -->&amp;orderby=surname">Name</a></th>
-    <th><a href="member.pl?member=<!--TMPL_VAR Name="member" -->&amp;orderby=borrowers.categorycode">Cat</a></th>
-    <th><a href="member.pl?member=<!--TMPL_VAR Name="member" -->&amp;orderby=branchcode">Library</a></th>
-    <th>Expires on</th>
-    <th>OD/Issues</th>
-    <th>Fines</th>
-    <th>Circ note</th>
-       <th>&nbsp;</th>
-    </tr>
-    <!-- TMPL_LOOP NAME="resultsloop" -->
-    <!-- TMPL_IF name="overdue" -->
-    <tr class="problem">
-    <!-- TMPL_ELSE -->
-    <!-- TMPL_UNLESS name="__odd__" -->
-    <tr class="highlight">
-    <!-- TMPL_ELSE -->
-    <tr>
-    <!-- /TMPL_UNLESS -->
-    <!-- /TMPL_IF -->
-    <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 --><!-- TMPL_IF NAME="zipcode" -->  <!-- TMPL_VAR NAME="zipcode" --><!-- /TMPL_IF --><!-- TMPL_IF NAME="country" -->, <!-- TMPL_VAR NAME="country" --><!-- /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_IF "overdues" --><span class="overdue"><strong><!-- TMPL_VAR NAME="overdues" --></strong></span><!-- TMPL_ELSE --><!-- TMPL_VAR NAME="overdues" --><!-- /TMPL_IF -->/<!-- TMPL_VAR NAME="issues" --></td>
-    <td><!-- TMPL_VAR NAME="fines" --></td>
-    <td><!-- TMPL_VAR NAME="borrowernotes" --></td>
-       <td><!-- TMPL_IF NAME="category_type" -->
-            <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->&amp;category_type=<!-- TMPL_VAR NAME="category_type"-->">Edit</a>
-<!-- TMPL_ELSE --> <!-- try with categorycode if no category_type -->
-       <!-- TMPL_IF NAME="categorycode" -->
-            <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->&amp;categorycode=<!-- TMPL_VAR NAME="categorycode"-->">Edit</a>
-    <!-- TMPL_ELSE --> <!-- if no categorycode, set category_type to A by default -->
-            <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->&amp;category_type=A">Edit</a>
-    <!-- /TMPL_IF -->
-<!-- /TMPL_IF --></td>
-    </tr>
-    <!-- /TMPL_LOOP -->
-    </table>
-       <div class="pages"><!--TMPL_IF Name="multipage"--><!--TMPL_VAR Name="paginationbar" --><!--/TMPL_IF--></div>
-</div>
-<!-- TMPL_ELSE -->
-<!-- TMPL_IF NAME="searching" -->
-No results found
-<!-- /TMPL_IF -->
-<!-- /TMPL_IF -->
+                                                       <table id="memberresultst" style="width:100%">
+                                                       <tr>
+                                                       <th>Card</th>
+                                                       <th>Name</th>
+                                                       <th>Cat</th>
+                                                       <th>Library</th>
+                                                       <th>Expires on</th>
+                                                       <th>OD/Issues</th>
+                                                       <th>Fines</th>
+                                                       <th>Circ note</th>
+                                                       <th>&nbsp;</th>
+                                                       </tr>
+                                                       <!-- TMPL_LOOP NAME="resultsloop" -->
+                                                       <!-- TMPL_IF name="overdue" -->
+                                                       <tr class="problem">
+                                                       <!-- TMPL_ELSE -->
+                                                       <!-- TMPL_UNLESS name="__odd__" -->
+                                                       <tr class="highlight">
+                                                       <!-- TMPL_ELSE -->
+                                                       <tr>
+                                                       <!-- /TMPL_UNLESS -->
+                                                       <!-- /TMPL_IF -->
+                                                       <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 --><!-- TMPL_IF NAME="zipcode" -->  <!-- TMPL_VAR NAME="zipcode" --><!-- /TMPL_IF --><!-- TMPL_IF NAME="country" -->, <!-- TMPL_VAR NAME="country" --><!-- /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_IF "overdues" --><span class="overdue"><strong><!-- TMPL_VAR NAME="overdues" --></strong></span><!-- TMPL_ELSE --><!-- TMPL_VAR NAME="overdues" --><!-- /TMPL_IF -->/<!-- TMPL_VAR NAME="issues" --></td>
+                                                       <td><!-- TMPL_VAR NAME="fines" --></td>
+                                                       <td><!-- TMPL_VAR NAME="borrowernotes" --></td>
+                                                       <td><!-- TMPL_IF NAME="category_type" -->
+                                                                       <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->&amp;category_type=<!-- TMPL_VAR NAME="category_type"-->">Edit</a>
+                                               <!-- TMPL_ELSE --> <!-- try with categorycode if no category_type -->
+                                                       <!-- TMPL_IF NAME="categorycode" -->
+                                                                       <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->&amp;categorycode=<!-- TMPL_VAR NAME="categorycode"-->">Edit</a>
+                                                       <!-- TMPL_ELSE --> <!-- if no categorycode, set category_type to A by default -->
+                                                                       <a href="/cgi-bin/koha/members/memberentry.pl?op=modify&amp;destination=circ&amp;borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->&amp;category_type=A">Edit</a>
+                                                       <!-- /TMPL_IF -->
+                                               <!-- /TMPL_IF --></td>
+                                                       </tr>
+                                                       <!-- /TMPL_LOOP -->
+                                                       </table>
+                                                       <div class="pages"><!--TMPL_IF Name="multipage"--><!--TMPL_VAR Name="paginationbar" --><!--/TMPL_IF--></div>
+                                               </div>
+                                               <!-- TMPL_ELSE -->
+                                               <!-- TMPL_IF NAME="searching" -->
+                                               No results found
+                                               <!-- /TMPL_IF -->
+                                               <!-- /TMPL_IF -->
 
-</div>
-</div>
+                                       </div>
+                               </div>
 
-<div class="yui-b">
-<!-- TMPL_INCLUDE NAME="members-menu.inc" -->
-</div>
-</div>
+                               <div class="yui-g">
+                               <!-- TMPL_INCLUDE NAME="members-menu.inc" -->
+                               </div>
+                       </div> 
+                    
+   <div role="search" class="yui-b">
+                               <!-- TMPL_INCLUDE NAME="search.tmpl" -->
+   </div> 
+    </div> 
 </div>
 <!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->
index 15bc172..9ac9675 100644 (file)
@@ -1,30 +1,19 @@
     <form action="member.pl" method="get">
-                <fieldset> <legend>search</legend><fieldset><legend>
-                       Patron information
-                </legend>
-                    <label for="firstname"> Firstname :</label><input type="text" name="firstname" value="<!-- TMPL_VAR name="firstname"-->" /><br/>
-                    <label for="surname"> Surname :</label><input type="text" name="surname" value="<!-- TMPL_VAR name="surname"-->" /><br/>
-                    <label for="address"> Address :</label><input type="text" name="address1" value="<!-- TMPL_VAR name="address"-->" /><br/>
-                    <label for="zipcode"> Zipcode :</label><input type="text" name="zipcode" value="<!-- TMPL_VAR name="zipcode"-->" /><br/>
-                    <label for="city"> City :</label><input type="text" name="city" value="<!-- TMPL_VAR name="city"-->" /><br />
-                    <label for="email"> email :</label><input type="text" name="email" value="<!-- TMPL_VAR name="email"-->" /><br />
-                </fieldset>
-                <fieldset ><legend>
-                Library Management 
-                </legend>
-                    <label for="branchcode"> Library :</label><select name="branchcode" id="branchcode">
+                               <h3 > Filter :</h3>
+                               <input type="hidden" name="surname" value="<!-- TMPL_VAR name="surname"-->" />
+                               <input type="text" name="member" value="<!-- TMPL_VAR name="member"-->" /><br/>
+                <label for="branchcode"> Library :</label><select name="branchcode" id="branchcode">
         <option value="">Any</option><!-- TMPL_LOOP name="branchloop" -->
         <!-- TMPL_IF NAME="selected" -->
         <option value="<!-- TMPL_VAR name="value" -->" selected="selected"><!-- TMPL_VAR name="branchname" --></option><!-- TMPL_ELSE -->
         <option value="<!-- TMPL_VAR name="value" -->"><!-- TMPL_VAR name="branchname" --></option><!-- /TMPL_IF -->
       <!-- /TMPL_LOOP --></select><br />
-                    <label for="categorycode"> categorycode :</label><select name="categorycode" id="categorycode">
+                 <label for="categorycode"> categorycode :</label><select name="categorycode" id="categorycode">
         <option value="">Any</option><!-- TMPL_LOOP name="categoryloop" -->
         <!-- TMPL_IF NAME="selected" -->
         <option value="<!-- TMPL_VAR name="categorycode" -->" selected="selected"><!-- TMPL_VAR name="description" --></option><!-- TMPL_ELSE -->
         <option value="<!-- TMPL_VAR name="categorycode" -->"><!-- TMPL_VAR name="description" --></option><!-- /TMPL_IF -->
-      <!-- /TMPL_LOOP --></select>
-                </fieldset>
+      <!-- /TMPL_LOOP --></select> <br />
                     <input type="submit" value="Search" />
                 </fieldset>
             </form>
index 9192be8..73af8ae 100755 (executable)
@@ -43,7 +43,6 @@ if($quicksearch){
                  type => "intranet",
                  authnotrequired => 0,
                  flagsrequired => {borrowers => 1},
-                 debug => 1,
                  });
 } else {
     ($template, $loggedinuser, $cookie)
@@ -52,26 +51,28 @@ if($quicksearch){
                  type => "intranet",
                  authnotrequired => 0,
                  flagsrequired => {borrowers => 1},
-                 debug => 1,
                  });
 }
 my $theme = $input->param('theme') || "default";
 
+my @categories=C4::Category->all;
+my $branches=GetBranchesLoop();
+
+my %categories_dislay;
 
+foreach my $category (@categories){
+       my $hash={
+                       category_description=>$$category{description},
+                       category_type=>$$category{category_type}
+                        };
+       $categories_dislay{$$category{categorycode}} = $hash;
+}
 $template->param( 
         "AddPatronLists_".C4::Context->preference("AddPatronLists")=> "1",
             );
 if (C4::Context->preference("AddPatronLists")=~/code/){
-    my $categories=GetBorrowercategoryList;
-    $categories->[0]->{'first'}=1;
-    $template->param(categories=>$categories);  
+    $categories[0]->{'first'}=1;
 }  
-            # 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');
@@ -85,32 +86,36 @@ my $patron = $input->Vars;
 foreach (keys %$patron){
        delete $$patron{$_} unless($$patron{$_}); 
 }
-($results)=Search($patron,{surname=>1,firstname=>1}) if (keys %$patron);
-$count =scalar(@$results);
-use YAML;
-warn Dump($results);
-unless ($count){
-       if(length($member) == 1)
-       {
-               ($count,$results)=SearchMember($member,$orderby,"simple");
-       }
-       else
-       {
-               ($count,$results)=SearchMember($member,$orderby,"advanced");
-       }
+if (C4::Context->preference("IndependantBranches")){
+   if (C4::Context->userenv && C4::Context->userenv->{flags} % 2 !=1 && C4::Context->userenv->{'branch'}){
+        $$patron{branchcode}=C4::Context->userenv->{'branch'} unless (C4::Context->userenv->{'branch'} eq "insecure");
+   }
+}
+$$patron{firstname}.="\%" if ($$patron{firstname});
+
+my @searchpatron;
+push @searchpatron, $member if ($member);
+push @searchpatron, $patron if (keys %$patron);
+my $from= ($startfrom-1)*$resultsperpage;
+my $to=$from+$resultsperpage;
+ #($results)=Search(\@searchpatron,{surname=>1,firstname=>1},[$from,$to],undef,["firstname","surname","email","othernames"]  ) if (@searchpatron);
+ ($results)=Search(\@searchpatron,{surname=>1,firstname=>1},undef,undef,["firstname","surname","email","othernames"]  ) if (@searchpatron);
+if ($results){
+       $count =scalar(@$results);
 }
-
 my @resultsdata;
-my $to=($count>($startfrom*$resultsperpage)?$startfrom*$resultsperpage:$count);
-for (my $i=($startfrom-1)*$resultsperpage; $i < $to; $i++){
+my $to=($count>$to?$to:$count);
+my $index=$from;
+foreach my $borrower(@$results[$from..$to-1]){
   #find out stats
-  my ($od,$issue,$fines)=GetMemberIssuesAndFines($results->[$i]{'borrowernumber'});
+  my ($od,$issue,$fines)=GetMemberIssuesAndFines($$borrower{'borrowernumber'});
 
-  $$results[$i]{'dateexpiry'}= C4::Dates->new($results->[$i]{'dateexpiry'},'iso')->output('syspref');
+  $$borrower{'dateexpiry'}= C4::Dates->new($$borrower{'dateexpiry'},'iso')->output('syspref');
 
   my %row = (
-    count => $i+1,
-       %{$results->[$i]},
+    count => $index++,
+       %$borrower,
+       %{$categories_dislay{$$borrower{categorycode}}},
     overdues => $od,
     issues => $issue,
     odissue => "$od/$issue",
@@ -118,19 +123,29 @@ for (my $i=($startfrom-1)*$resultsperpage; $i < $to; $i++){
     );
   push(@resultsdata, \%row);
 }
+
+if ($$patron{branchcode}){
+       foreach my $branch (grep{$_->{value} eq $$patron{branchcode}}@$branches){
+               $$branch{selected}=1;
+       }
+}
+if ($$patron{categorycode}){
+       foreach my $category (grep{$_->{categorycode} eq $$patron{categorycode}}@categories){
+               $$category{selected}=1;
+       }
+}
+my %parameters=
+        (  %$patron
+               , 'orderby'                     => $orderby 
+               , 'resultsperpage'      => $resultsperpage 
+        , 'type'=> 'intranet'); 
 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' },
-    )
+    map { "$_=$parameters{$_}" } (keys %parameters)
   );
 
-my @categories=C4::Category->all;
 $template->param(
     paginationbar => pagination_bar(
         $base_url,  int( $count / $resultsperpage ) + 1,
@@ -139,14 +154,17 @@ $template->param(
     startfrom => $startfrom,
     from      => ($startfrom-1)*$resultsperpage+1,  
     to        => $to,
-    multipage => ($count != $to || $startfrom!=1),
-       branchloop=>GetBranchesLoop(),
+    multipage => ($count != $to+1 || $startfrom!=1),
+);
+$template->param(
+    branchloop=>$branches,
        categoryloop=>\@categories,
 );
 
+
 $template->param( 
         searching       => "1",
-        member          => $member,
+               %$patron,
         numresults      => $count,
         resultsloop     => \@resultsdata,
             );
index 2755452..7a9beb5 100755 (executable)
@@ -23,6 +23,8 @@ use C4::Auth;
 use C4::Output;
 use C4::Context;
 use C4::Members;
+use C4::Branch;
+use C4::Category;
 
 my $query = new CGI;
 my $quicksearch = $query->param('quicksearch');
@@ -48,6 +50,11 @@ if($quicksearch){
                  debug => 1,
                  });
 }
+my @categories=C4::Category->all;
+$template->param(
+    branchloop=>GetBranchesLoop(),
+       categoryloop=>\@categories,
+);
 $template->param( 
         "AddPatronLists_".C4::Context->preference("AddPatronLists")=> "1",
             );