Bug 7061: unnecessary global variables declared in C4::SQLHelper
[koha.git] / members / moremember.pl
index 7de3fb0..9115dd1 100755 (executable)
@@ -1,6 +1,7 @@
 #!/usr/bin/perl
 
 # Copyright 2000-2002 Katipo Communications
+# Copyright 2010 BibLibre
 #
 # This file is part of Koha.
 #
@@ -50,6 +51,8 @@ use C4::Reserves;
 use C4::Branch; # GetBranchName
 use C4::Form::MessagingPreferences;
 use C4::NewsChannels; #get slip news
+use List::MoreUtils qw/uniq/;
+use C4::Members::Attributes qw(GetBorrowerAttributes);
 
 #use Smart::Comments;
 #use Data::Dumper;
@@ -155,12 +158,6 @@ $data->{ "sex_".$data->{'sex'}."_p" } = 1;
 
 my $catcode;
 if ( $category_type eq 'C') {
-       if ($data->{'guarantorid'} ne '0' ) {
-       my $data2 = GetMember( 'borrowernumber' => $data->{'guarantorid'} );
-       foreach (qw(address city B_address B_city phone mobile zipcode country B_country)) {
-           $data->{$_} = $data2->{$_};
-       }
-   }
    my  ( $catcodes, $labels ) =  GetborCatFromCatType( 'A', 'WHERE category_type = ?' );
    my $cnt = scalar(@$catcodes);
 
@@ -230,75 +227,102 @@ my $lib2 = &GetSortDetails( "Bsort2", $data->{'sort2'} );
 $template->param( lib1 => $lib1 ) if ($lib1);
 $template->param( lib2 => $lib2 ) if ($lib2);
 
+# Show OPAC privacy preference is system preference is set
+if ( C4::Context->preference('OPACPrivacy') ) {
+    $template->param( OPACPrivacy => 1);
+    $template->param( "privacy".$data->{'privacy'} => 1);
+}
+
 # current issues
 #
-my $issue = GetPendingIssues($borrowernumber);
-my $issuecount = scalar(@$issue);
+my @borrowernumbers = GetMemberRelatives($borrowernumber);
+my $issue       = GetPendingIssues($borrowernumber);
+my $relissue    = [];
+if ( @borrowernumbers ) {
+    $relissue    = GetPendingIssues(@borrowernumbers);
+}
+my $issuecount     = @{$issue};
+my $relissuecount  = @{$relissue};
 my $roaddetails = &GetRoadTypeDetails( $data->{'streettype'} );
 my $today       = POSIX::strftime("%Y-%m-%d", localtime);      # iso format
 my @issuedata;
+my @borrowers_with_issues;
 my $overdues_exist = 0;
 my $totalprice = 0;
-for ( my $i = 0 ; $i < $issuecount ; $i++ ) {
-    my $datedue = $issue->[$i]{'date_due'};
-    my $issuedate = $issue->[$i]{'issuedate'};
-    $issue->[$i]{'date_due'}  = C4::Dates->new($issue->[$i]{'date_due'}, 'iso')->output('syspref');
-    $issue->[$i]{'issuedate'} = C4::Dates->new($issue->[$i]{'issuedate'},'iso')->output('syspref');
-    my $biblionumber = $issue->[$i]{'biblionumber'};
-    my %row = %{ $issue->[$i] };
-    $totalprice += $issue->[$i]{'replacementprice'};
-    $row{'replacementprice'} = $issue->[$i]{'replacementprice'};
-    # item lost, damaged loops
-    if ($row{'itemlost'}) {
-        my $fw = GetFrameworkCode($issue->[$i]{'biblionumber'});
-        my $category = GetAuthValCode('items.itemlost',$fw);
-        my $lostdbh = C4::Context->dbh;
-        my $sth = $lostdbh->prepare("select lib from authorised_values where category=? and authorised_value =? ");
-        $sth->execute($category, $row{'itemlost'});
-        my $loststat = $sth->fetchrow;
-        if ($loststat) {
-           $row{'itemlost'} = $loststat;
+
+my @issuedata = build_issue_data($issue, $issuecount);
+my @relissuedata = build_issue_data($relissue, $relissuecount);
+
+sub build_issue_data {
+    my $issue = shift;
+    my $issuecount = shift;
+
+    my $localissue;
+
+    for ( my $i = 0 ; $i < $issuecount ; $i++ ) {
+        my $datedue = $issue->[$i]{'date_due'};
+        my $issuedate = $issue->[$i]{'issuedate'};
+        $issue->[$i]{'date_due'}  = C4::Dates->new($issue->[$i]{'date_due'}, 'iso')->output('syspref');
+        $issue->[$i]{'issuedate'} = C4::Dates->new($issue->[$i]{'issuedate'},'iso')->output('syspref');
+        my $biblionumber = $issue->[$i]{'biblionumber'};
+        $issue->[$i]{'issuingbranchname'} = GetBranchName($issue->[$i]{'branchcode'});
+        my %row = %{ $issue->[$i] };
+        $totalprice += $issue->[$i]{'replacementprice'};
+        $row{'replacementprice'} = $issue->[$i]{'replacementprice'};
+        # item lost, damaged loops
+        if ($row{'itemlost'}) {
+            my $fw = GetFrameworkCode($issue->[$i]{'biblionumber'});
+            my $category = GetAuthValCode('items.itemlost',$fw);
+            my $lostdbh = C4::Context->dbh;
+            my $sth = $lostdbh->prepare("select lib from authorised_values where category=? and authorised_value =? ");
+            $sth->execute($category, $row{'itemlost'});
+            my $loststat = $sth->fetchrow;
+            if ($loststat) {
+               $row{'itemlost'} = $loststat;
+            }
         }
-    }
-    if ($row{'damaged'}) {
-        my $fw = GetFrameworkCode($issue->[$i]{'biblionumber'});
-        my $category = GetAuthValCode('items.damaged',$fw);
-        my $damageddbh = C4::Context->dbh;
-        my $sth = $damageddbh->prepare("select lib from authorised_values where category=? and authorised_value =? ");
-        $sth->execute($category, $row{'damaged'});
-        my $damagedstat = $sth->fetchrow;
-        if ($damagedstat) {
-           $row{'itemdamaged'} = $damagedstat;
+        if ($row{'damaged'}) {
+            my $fw = GetFrameworkCode($issue->[$i]{'biblionumber'});
+            my $category = GetAuthValCode('items.damaged',$fw);
+            my $damageddbh = C4::Context->dbh;
+            my $sth = $damageddbh->prepare("select lib from authorised_values where category=? and authorised_value =? ");
+            $sth->execute($category, $row{'damaged'});
+            my $damagedstat = $sth->fetchrow;
+            if ($damagedstat) {
+               $row{'itemdamaged'} = $damagedstat;
+            }
+        }
+        # end lost, damaged
+        if ( $datedue lt $today ) {
+            $overdues_exist = 1;
+            $row{'red'} = 1;
         }
+         if ( $issuedate eq $today ) {
+            $row{'today'} = 1; 
+         }
+
+        #find the charge for an item
+        my ( $charge, $itemtype ) =
+          GetIssuingCharges( $issue->[$i]{'itemnumber'}, $issue->[$i]{'borrowernumber'} );
+
+        my $itemtypeinfo = getitemtypeinfo($itemtype);
+        $row{'itemtype_description'} = $itemtypeinfo->{description};
+        $row{'itemtype_image'}       = $itemtypeinfo->{imageurl};
+
+        $row{'charge'} = sprintf( "%.2f", $charge );
+
+        my ( $renewokay,$renewerror ) = CanBookBeRenewed( $issue->[$i]{'borrowernumber'}, $issue->[$i]{'itemnumber'}, $override_limit );
+        $row{'norenew'} = !$renewokay;
+        $row{'can_confirm'} = ( !$renewokay && $renewerror ne 'on_reserve' );
+        $row{"norenew_reason_$renewerror"} = 1 if $renewerror;
+        $row{'renew_failed'}  = $renew_failed{ $issue->[$i]{'itemnumber'} };
+        $row{'return_failed'} = $return_failed{$issue->[$i]{'barcode'}};   
+        push( @$localissue, \%row );
     }
-    # end lost, damaged
-    if ( $datedue lt $today ) {
-        $overdues_exist = 1;
-        $row{'red'} = 1;
-       }
-        if ( $issuedate eq $today ) {
-        $row{'today'} = 1; 
-        }
-
-    #find the charge for an item
-    my ( $charge, $itemtype ) =
-      GetIssuingCharges( $issue->[$i]{'itemnumber'}, $borrowernumber );
-
-    my $itemtypeinfo = getitemtypeinfo($itemtype);
-    $row{'itemtype_description'} = $itemtypeinfo->{description};
-    $row{'itemtype_image'}       = $itemtypeinfo->{imageurl};
-
-    $row{'charge'} = sprintf( "%.2f", $charge );
-
-       my ( $renewokay,$renewerror ) = CanBookBeRenewed( $borrowernumber, $issue->[$i]{'itemnumber'}, $override_limit );
-       $row{'norenew'} = !$renewokay;
-       $row{'can_confirm'} = ( !$renewokay && $renewerror ne 'on_reserve' );
-       $row{"norenew_reason_$renewerror"} = 1 if $renewerror;
-       $row{'renew_failed'}  = $renew_failed{ $issue->[$i]{'itemnumber'} };
-       $row{'return_failed'} = $return_failed{$issue->[$i]{'barcode'}};   
-    push( @issuedata, \%row );
+    return $localissue;
 }
 
+
 ### ###############################################################################
 # BUILD HTML
 # show all reserves of this borrower, and the position of the reservation ....
@@ -398,11 +422,14 @@ $template->param( picture => 1 ) if $picture;
 
 my $branch=C4::Context->userenv->{'branch'};
 
-$template->param($data);
+$template->param(%$data);
 
 if (C4::Context->preference('ExtendedPatronAttributes')) {
-    $template->param(ExtendedPatronAttributes => 1);
-    $template->param(patron_attributes => C4::Members::Attributes::GetBorrowerAttributes($borrowernumber));
+    my $attributes = GetBorrowerAttributes($borrowernumber);
+    $template->param(
+        ExtendedPatronAttributes => 1,
+        extendedattributes => $attributes
+    );
     my @types = C4::Members::AttributeTypes::GetAttributeTypes();
     if (scalar(@types) == 0) {
         $template->param(no_patron_attribute_types => 1);
@@ -430,8 +457,10 @@ $template->param(
     totalprice      => sprintf("%.2f", $totalprice),
     totaldue        => sprintf("%.2f", $total),
     totaldue_raw    => $total,
-    issueloop       => \@issuedata,
-       issuecount => $issuecount,
+    issueloop       => @issuedata,
+    relissueloop    => @relissuedata,
+       issuecount      => $issuecount,
+    relissuecount   => $relissuecount,
     overdues_exist  => $overdues_exist,
     error           => $error,
     $error          => 1,