Adding IndependantBranches Filter + adding some ordering on member list display.
[koha_fer] / C4 / Members.pm
index 8ecb68b..b2f57c9 100644 (file)
@@ -122,7 +122,7 @@ push @EXPORT, qw(
 
 =item SearchMember
 
-  ($count, $borrowers) = &SearchMember($searchstring, $type,$category_type);
+  ($count, $borrowers) = &SearchMember($searchstring, $type,$category_type,$filter,$showallbranches);
 
 Looks up patrons (borrowers) by name.
 
@@ -137,6 +137,10 @@ C<$searchstring> is a space-separated list of search terms. Each term
 must match the beginning a borrower's surname, first name, or other
 name.
 
+C<$filter> is assumed to be a list of elements to filter results on
+
+C<$showallbranches> is used in IndependantBranches Context to display all branches results.
+
 C<&SearchMember> returns a two-element list. C<$borrowers> is a
 reference-to-array; each element is a reference-to-hash, whose keys
 are the fields of the C<borrowers> table in the Koha database.
@@ -148,7 +152,7 @@ C<$count> is the number of elements in C<$borrowers>.
 #used by member enquiries from the intranet
 #called by member.pl
 sub SearchMember {
-    my ($searchstring, $orderby, $type,$category_type ) = @_;
+    my ($searchstring, $orderby, $type,$category_type,$filter,$showallbranches ) = @_;
     my $dbh   = C4::Context->dbh;
     my $query = "";
     my $count;
@@ -158,10 +162,18 @@ sub SearchMember {
     if ( $type eq "simple" )    # simple search for one letter only
     {
         $query =
-          "SELECT * FROM borrowers
-                  LEFT JOIN categories ON borrowers.categorycode=categories.categorycode ".
-                  ($category_type?" AND category_type = ".$dbh->quote($category_type):"").
-                  " WHERE surname LIKE ? OR cardnumber like ? ORDER BY $orderby";
+          "SELECT * 
+           FROM borrowers
+           LEFT JOIN categories ON borrowers.categorycode=categories.categorycode ".
+                  ($category_type?" AND category_type = ".$dbh->quote($category_type):"");
+        $query .=
+         " WHERE (surname LIKE ? OR cardnumber like ?) ";
+        if (C4::Context->preference("IndependantBranches") && !$showallbranches){
+          if (C4::Context->userenv && C4::Context->userenv->{flags}!=1 && C4::Context->userenv->{'branch'}){
+            $query.=" AND borrowers.branchcode =".$dbh->quote(C4::Context->userenv->{'branch'}) unless (C4::Context->userenv->{'branch'} eq "insecure");
+          }      
+        }     
+        $query.=" ORDER BY $orderby";
         @bind = ("$searchstring%","$searchstring");
     }
     else    # advanced search looking in surname, firstname and othernames
@@ -170,9 +182,15 @@ sub SearchMember {
         $count = @data;
         $query = "SELECT * FROM borrowers
                     LEFT JOIN categories ON borrowers.categorycode=categories.categorycode
-               WHERE ((surname LIKE ? OR surname LIKE ?
-               OR firstname  LIKE ? OR firstname LIKE ?
-               OR othernames LIKE ? OR othernames LIKE ?)
+                             WHERE ";
+        if (C4::Context->preference("IndependantBranches") && !$showallbranches){
+          if (C4::Context->userenv && C4::Context->userenv->{flags}!=1 && C4::Context->userenv->{'branch'}){
+            $query.=" borrowers.branchcode =".$dbh->quote(C4::Context->userenv->{'branch'})." AND " unless (C4::Context->userenv->{'branch'} eq "insecure");
+          }      
+        }     
+        $query.="((surname LIKE ? OR surname LIKE ?
+                             OR firstname  LIKE ? OR firstname LIKE ?
+                             OR othernames LIKE ? OR othernames LIKE ?)
                ".
                   ($category_type?" AND category_type = ".$dbh->quote($category_type):"");
         @bind = (
@@ -198,7 +216,7 @@ sub SearchMember {
 
     my $sth = $dbh->prepare($query);
 
-    #  warn "Q $orderby : $query";
+#     warn "Q $orderby : $query";
     $sth->execute(@bind);
     my @results;
     my $data = $sth->fetchall_arrayref({});
@@ -442,7 +460,7 @@ sub patronflags {
         }
         $flags{'ODUES'} = \%flaginfo;
     }
-    my @itemswaiting = GetReservesFromBorrowernumber( $patroninformation->{'borrowernumber'},'W' );
+    my @itemswaiting = C4::Reserves::GetReservesFromBorrowernumber( $patroninformation->{'borrowernumber'},'W' );
     my $nowaiting = scalar @itemswaiting;
     if ( $nowaiting > 0 ) {
         my %flaginfo;
@@ -1016,11 +1034,13 @@ sub GetAllIssues {
     my $dbh   = C4::Context->dbh;
     my $count = 0;
     my $query =
-"Select *,items.timestamp AS itemstimestamp from issues,biblio,items,biblioitems
-  where borrowernumber=? and
-  items.biblioitemnumber=biblioitems.biblioitemnumber and
-  items.itemnumber=issues.itemnumber and
-  items.biblionumber=biblio.biblionumber order by $order";
+  "Select *,items.timestamp AS itemstimestamp from 
+  issues 
+  LEFT JOIN items on items.itemnumber=issues.itemnumber
+  LEFT JOIN biblio ON items.biblionumber=biblio.biblionumber
+  LEFT JOIN biblioitems ON items.biblioitemnumber=biblioitems.biblioitemnumber
+  where borrowernumber=? 
+  order by $order";
     if ( $limit != 0 ) {
         $query .= " limit $limit";
     }
@@ -1040,11 +1060,11 @@ sub GetAllIssues {
     # large chunk of older issues data put into table oldissues
     # to speed up db calls for issuing items
     if ( C4::Context->preference("ReadingHistory") ) {
-        my $query2 = "SELECT * FROM oldissues,biblio,items,biblioitems
+        my $query2 = "SELECT * FROM oldissues
+                      LEFT JOIN items ON items.itemnumber=oldissues.itemnumber
+                      LEFT JOIN biblio ON items.biblionumber=biblio.biblionumber
+                      LEFT JOIN biblioitems ON items.biblioitemnumber=biblioitems.biblioitemnumber
                       WHERE borrowernumber=? 
-                      AND items.biblioitemnumber=biblioitems.biblioitemnumber
-                      AND items.itemnumber=oldissues.itemnumber
-                      AND items.biblionumber=biblio.biblionumber
                       ORDER BY $order";
         if ( $limit != 0 ) {
             $limit = $limit - $count;