Bugzilla – Attachment 3431 Details for
Bug 5952
Shows member relatives in issues list
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch from BibLibre
0001-MT3747-Shows-member-relatives-in-issues-lists.patch (text/plain), 31.62 KB, created by
Julian Maurice
on 2011-03-25 10:43:36 UTC
(
hide
)
Description:
Patch from BibLibre
Filename:
MIME Type:
Creator:
Julian Maurice
Created:
2011-03-25 10:43:36 UTC
Size:
31.62 KB
patch
obsolete
>From 274bc782e74d428f5d851aa32ec90fc933219ab9 Mon Sep 17 00:00:00 2001 >From: Matthias Meusburger <matthias.meusburger@biblibre.com> >Date: Mon, 28 Jun 2010 17:17:41 +0200 >Subject: [PATCH] MT3747: Shows member relatives in issues lists > >MT3747, Follow-up: Adds siblings issues > >MT3747, Follow-up: Shows member relatives in issues lists > > - Now displays patron's and relatives' issues apart > >MT3747, Follow-up: Shows member relatives in issues lists > > - Removes renewal in circulation.pl > - Adds links to moremember.pl > >MT3747, Follow-up: Shows member relatives in issues lists > > - Remove unuseful warn > >MT3747, Follow-up: Shows member relatives in issues lists > > - Removes renewal in moremember.pl > >MT3747, Follow-up: Shows member relatives in issues lists > > - Adds sorting for circulation.pl >--- > C4/Members.pm | 64 ++++++++- > circ/circulation.pl | 40 +++++- > .../prog/en/includes/checkouts-table-footer.inc | 2 +- > .../prog/en/modules/circ/circulation.tmpl | 100 ++++++++++++++- > .../prog/en/modules/members/moremember.tmpl | 86 +++++++++++-- > members/moremember.pl | 140 ++++++++++++-------- > 6 files changed, 350 insertions(+), 82 deletions(-) > >diff --git a/C4/Members.pm b/C4/Members.pm >index ace939d..5ddadd6 100644 >--- a/C4/Members.pm >+++ b/C4/Members.pm >@@ -45,6 +45,7 @@ BEGIN { > &Search > &SearchMember > &GetMemberDetails >+ &GetMemberRelatives > &GetMember > > &GetGuarantees >@@ -580,6 +581,46 @@ sub GetMember { > return; > } > >+=head2 GetMemberRelatives >+ >+ @borrowernumbers = GetMemberRelatives($borrowernumber); >+ >+ C<GetMemberRelatives> returns a borrowersnumber's list of guarantor/guarantees of the member given in parameter >+ >+=cut >+sub GetMemberRelatives { >+ my $borrowernumber = shift; >+ my $dbh = C4::Context->dbh; >+ my @glist; >+ >+ # Getting guarantor >+ my $query = "SELECT guarantorid FROM borrowers WHERE borrowernumber=?"; >+ my $sth = $dbh->prepare($query); >+ $sth->execute($borrowernumber); >+ my $data = $sth->fetchrow_arrayref(); >+ push @glist, $data->[0] if $data->[0]; >+ my $guarantor = $data->[0] if $data->[0]; >+ >+ # Getting guarantees >+ $query = "SELECT borrowernumber FROM borrowers WHERE guarantorid=?"; >+ $sth = $dbh->prepare($query); >+ $sth->execute($borrowernumber); >+ while ($data = $sth->fetchrow_arrayref()) { >+ push @glist, $data->[0]; >+ } >+ >+ # Getting sibling guarantees >+ if ($guarantor) { >+ $query = "SELECT borrowernumber FROM borrowers WHERE guarantorid=?"; >+ $sth = $dbh->prepare($query); >+ $sth->execute($guarantor); >+ while ($data = $sth->fetchrow_arrayref()) { >+ push @glist, $data->[0] if ($data->[0] != $borrowernumber); >+ } >+ } >+ >+ return @glist; >+} > > =head2 IsMemberBlocked > >@@ -961,7 +1002,7 @@ sub UpdateGuarantees { > } > =head2 GetPendingIssues > >- my $issues = &GetPendingIssues($borrowernumber); >+ my $issues = &GetPendingIssues(@borrowernumber); > > Looks up what the patron with the given borrowernumber has borrowed. > >@@ -974,14 +1015,22 @@ The keys include C<biblioitems> fields except marc and marcxml. > > #' > sub GetPendingIssues { >- my ($borrowernumber) = @_; >+ my (@borrowernumbers) = @_; >+ >+ # Borrowers part of the query >+ my $bquery = ''; >+ for (my $i = 0; $i < @borrowernumbers; $i++) { >+ $bquery .= " borrowernumber = ?"; >+ $bquery .= " OR" if ($i < (scalar(@borrowernumbers) - 1)); >+ } >+ > # must avoid biblioitems.* to prevent large marc and marcxml fields from killing performance > # FIXME: namespace collision: each table has "timestamp" fields. Which one is "timestamp" ? > # FIXME: circ/ciculation.pl tries to sort by timestamp! > # FIXME: C4::Print::printslip tries to sort by timestamp! > # FIXME: namespace collision: other collisions possible. > # FIXME: most of this data isn't really being used by callers. >- my $sth = C4::Context->dbh->prepare( >+ my $query = > "SELECT issues.*, > items.*, > biblio.*, >@@ -998,16 +1047,19 @@ sub GetPendingIssues { > biblioitems.url, > issues.timestamp AS timestamp, > issues.renewals AS renewals, >+ issues.borrowernumber AS borrowernumber, > items.renewals AS totalrenewals > 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=? >+ $bquery > ORDER BY issues.issuedate" >- ); >- $sth->execute($borrowernumber); >+ ; >+ >+ my $sth = C4::Context->dbh->prepare($query); >+ $sth->execute(@borrowernumbers); > my $data = $sth->fetchall_arrayref({}); > my $today = C4::Dates->new->output('iso'); > foreach (@$data) { >diff --git a/circ/circulation.pl b/circ/circulation.pl >index 1ed4afd..2ca257c 100755 >--- a/circ/circulation.pl >+++ b/circ/circulation.pl >@@ -42,6 +42,7 @@ use Date::Calc qw( > Add_Delta_Days > Date_to_Days > ); >+use List::MoreUtils qw/uniq/; > > > # >@@ -419,15 +420,24 @@ my $todaysissues = ''; > my $previssues = ''; > my @todaysissues; > my @previousissues; >+my @relissues; >+my @relprevissues; >+my $displayrelissues; > > my $totalprice = 0; > >-if ($borrower) { >-# get each issue of the borrower & separate them in todayissues & previous issues >- my ($issueslist) = GetPendingIssues($borrower->{'borrowernumber'}); >+sub build_issue_data { >+ my $issueslist = shift; >+ my $relatives = shift; >+ > # split in 2 arrays for today & previous > foreach my $it ( @$issueslist ) { > my $itemtypeinfo = getitemtypeinfo( (C4::Context->preference('item-level_itypes')) ? $it->{'itype'} : $it->{'itemtype'} ); >+ >+ # Getting borrower details >+ my $memberdetails = GetMemberDetails($it->{'borrowernumber'}); >+ $it->{'borrowername'} = $memberdetails->{'firstname'} . " " . $memberdetails->{'surname'}; >+ > # set itemtype per item-level_itype syspref - FIXME this is an ugly hack > $it->{'itemtype'} = ( C4::Context->preference( 'item-level_itypes' ) ) ? $it->{'itype'} : $it->{'itemtype'}; > >@@ -455,11 +465,28 @@ if ($borrower) { > $it->{'renew_failed'} = $renew_failed{$it->{'itemnumber'}}; > > if ( $todaysdate eq $it->{'issuedate'} or $todaysdate eq $it->{'lastreneweddate'} ) { >- push @todaysissues, $it; >+ (!$relatives) ? push @todaysissues, $it : push @relissues, $it; > } else { >- push @previousissues, $it; >+ (!$relatives) ? push @previousissues, $it : push @relprevissues, $it; > } > } >+} >+ >+if ($borrower) { >+ >+ # Getting borrower relatives >+ my @relborrowernumbers = GetMemberRelatives($borrower->{'borrowernumber'}); >+ #push @borrowernumbers, $borrower->{'borrowernumber'}; >+ >+ # get each issue of the borrower & separate them in todayissues & previous issues >+ my ($issueslist) = GetPendingIssues($borrower->{'borrowernumber'}); >+ my ($relissueslist) = GetPendingIssues(@relborrowernumbers); >+ >+ build_issue_data($issueslist, 0); >+ build_issue_data($relissueslist, 1); >+ >+ $displayrelissues = scalar($relissueslist); >+ > if ( C4::Context->preference( "todaysIssuesDefaultSortOrder" ) eq 'asc' ) { > @todaysissues = sort { $a->{'timestamp'} cmp $b->{'timestamp'} } @todaysissues; > } >@@ -657,6 +684,9 @@ $template->param( > totaldue => sprintf('%.2f', $total), > todayissues => \@todaysissues, > previssues => \@previousissues, >+ relissues => \@relissues, >+ relprevissues => \@relprevissues, >+ displayrelissues => $displayrelissues, > inprocess => $inprocess, > memberofinstution => $member_of_institution, > CGIorganisations => $CGIorganisations, >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/checkouts-table-footer.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/checkouts-table-footer.inc >index df1acbf..87d245e 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/checkouts-table-footer.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/checkouts-table-footer.inc >@@ -1,6 +1,6 @@ > <tfoot> > <tr> >- <td colspan="5" style="text-align: right; font-weight:bold;">Totals:</td> >+ <td colspan="5" style="text-align: right; font-weight:bold;">Totals:</td> > <td><!-- TMPL_VAR NAME="totaldue" --></td> > <td><!-- TMPL_VAR NAME="totalprice" --></td> > <td colspan="2"> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl >index dc7ed5f..3839bd0 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl >@@ -24,9 +24,19 @@ if($.cookie("holdfor") != <!-- TMPL_VAR NAME="borrowernumber" -->){ $.cookie("ho > dateFormat: 'uk',<!-- /TMPL_IF --> > headers: { 1: { sorter: 'articles' },5: { sorter: false },6:{sorter:false},7:{sorter:false},8:{sorter:false}} > }); >+ $("#relissuest").tablesorter({<!-- TMPL_IF NAME="dateformat_metric" --> >+ dateFormat: 'uk',<!-- /TMPL_IF --> >+ headers: { 1: { sorter: 'articles' },5: { sorter: false },6:{sorter:false},7:{sorter:false},8:{sorter:false}} >+ }); >+ >+ //FIXME: Sorting does not work when there are previous checkouts only >+ // (It works fine when there are only checkouts of the day, or both previous and today checkouts) > $("#issuest").bind("sortEnd",function() { > $("#previous").parents("tr").remove(); // 'previous checkouts' header chokes table sorter > }); >+ $("#relissuest").bind("sortEnd",function() { >+ $("#relprevious").parents("tr").remove(); // 'previous checkouts' header chokes table sorter >+ }); > $("#holdst").tablesorter({<!-- TMPL_IF NAME="dateformat_metric" --> > dateFormat: 'uk',<!-- /TMPL_IF --> > sortList: [[0,0]], >@@ -62,6 +72,25 @@ var allcheckboxes = $(".checkboxed"); > $(allcheckboxes).unCheckCheckboxes(":input[name*=barcodes]"); return false; > }); > >+ $("#relrenew_all").click(function(){ >+ $(allcheckboxes).checkCheckboxes(":input[name*=items]"); >+ $(allcheckboxes).unCheckCheckboxes(":input[name*=barcodes]"); >+ }); >+ $("#relCheckAllitems").click(function(){ >+ $(allcheckboxes).checkCheckboxes(":input[name*=items]"); >+ $(allcheckboxes).unCheckCheckboxes(":input[name*=barcodes]"); return false; >+ }); >+ $("#relCheckNoitems").click(function(){ >+ $(allcheckboxes).unCheckCheckboxes(":input[name*=items]"); return false; >+ }); >+ $("#relCheckAllreturns").click(function(){ >+ $(allcheckboxes).checkCheckboxes(":input[name*=barcodes]"); >+ $(allcheckboxes).unCheckCheckboxes(":input[name*=items]"); return false; >+ }); >+ $("#relCheckNoreturns").click(function(){ >+ $(allcheckboxes).unCheckCheckboxes(":input[name*=barcodes]"); return false; >+ }); >+ > <!-- TMPL_IF NAME="CAN_user_circulate_override_renewals" --> > <!-- TMPL_IF NAME="AllowRenewalLimitOverride" --> > $( '#override_limit' ).click( function () { >@@ -659,6 +688,7 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> > <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&type=intra"><strong><!-- TMPL_VAR NAME="title" escape="html" --></strong></a><!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF --><!-- TMPL_IF NAME="itemnotes" -->- <span class="circ-hlt"><!-- TMPL_VAR name="itemnotes" --></span><!-- /TMPL_IF --> <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td> > <td><!-- TMPL_UNLESS NAME="noItemTypeImages" --> <!-- TMPL_IF NAME="itemtype_image" --><img src="<!-- TMPL_VAR NAME="itemtype_image" -->" alt="" /><!-- /TMPL_IF --><!-- /TMPL_UNLESS --><!-- TMPL_VAR NAME="itemtype" --></td> > <td><!-- TMPL_VAR NAME="checkoutdate" --></td> >+ <!-- TMPL_IF NAME="multiple_borrowers" --><td><!-- TMPL_VAR NAME="borrowername" --></td><!-- /TMPL_IF --> > <td><!-- TMPL_VAR NAME="itemcallnumber" --></td> > <td><!-- TMPL_VAR NAME="charge" --></td> > <td><!-- TMPL_VAR NAME="replacementprice" --></td> >@@ -726,6 +756,7 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> > <!-- TMPL_VAR NAME="itemtype" --> > </td> > <td><!-- TMPL_VAR NAME="displaydate" --></td> >+ <!-- TMPL_IF NAME="multiple_borrowers" --><td><!-- TMPL_VAR NAME="borrowername" --></td><!-- /TMPL_IF --> > <td><!-- TMPL_VAR NAME="itemcallnumber" --></td> > <td><!-- TMPL_VAR NAME="charge" --></td> > <td><!-- TMPL_VAR NAME="replacementprice" --></td> >@@ -787,10 +818,77 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> > <input type="submit" id="renew_all" name="renew_all" value="Renew all" /> > </fieldset> > <!-- /TMPL_IF --> >-</form> > <!-- TMPL_ELSE --> > <p>Patron has nothing checked out.</p> > <!-- /TMPL_IF --> >+ >+ >+<!-- TMPL_IF NAME="displayrelissues" --> >+<h2>Relatives issues</h2> >+ <table id="relissuest"> >+ <thead> >+ <tr> >+ <th scope="col">Due date</th> >+ <th scope="col">Title</th> >+ <th scope="col">Item Type</th> >+ <th scope="col">Branch</th> >+ <th scope="col">Checked out on</th> >+ <th scope="col">Charge</th> >+ <th scope="col">Borrower</th> >+ <th scope="col">Material</th> >+ </tr> >+ </thead> >+<!-- TMPL_IF NAME="relissues" --> <tbody> >+ >+ <!-- TMPL_LOOP NAME="relissues" --> >+ <!-- TMPL_IF NAME="__odd__" --> >+ <tr> >+ <!-- TMPL_ELSE --> >+ <tr class="highlight"> >+ <!-- /TMPL_IF --> >+ <!-- TMPL_IF NAME="overdue" --><td class="od"><!-- TMPL_ELSE --><td><!-- /TMPL_IF --> >+ <!-- TMPL_VAR NAME="dd" --></td> >+ <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&type=intra"><strong><!-- TMPL_VAR NAME="title" escape="html" --></strong></a><!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF --><!-- TMPL_IF NAME="itemnotes" -->- <span class="circ-hlt"><!-- TMPL_VAR name="itemnotes" --></span><!-- /TMPL_IF --> <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td> >+ <td><!-- TMPL_UNLESS NAME="noItemTypeImages" --> <!-- TMPL_IF NAME="itemtype_image" --><img src="<!-- TMPL_VAR NAME="itemtype_image" -->" alt="" /><!-- /TMPL_IF --><!-- /TMPL_UNLESS --><!-- TMPL_VAR NAME="itemtype" --></td> >+ <td><!-- TMPL_VAR NAME="branchdisplay" --> >+ <!--TMPL_IF Name="itemcallnumber"-->(<!-- TMPL_VAR NAME="itemcallnumber" -->)<!--/TMPL_IF--></td> >+ <td><!-- TMPL_VAR NAME="displaydate" --></td> >+ <td><!-- TMPL_VAR NAME="charge" --></td> >+ <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->"><!-- TMPL_VAR NAME="borrowername" --></a></td> >+ <td><!-- TMPL_VAR NAME="materials" --></td> >+ </tr> >+ <!-- /TMPL_LOOP --> <!-- /loop todayissues --> >+ <!-- /if todayissues --><!-- /TMPL_IF --> >+<!-- TMPL_IF NAME="relprevissues" --> >+<tr><th class="{sorter: false}" colspan="10"><a name="relprevious" id="relprevious"></a>Previous checkouts</th></tr> >+ <!-- TMPL_LOOP NAME="relprevissues" --> >+ <!-- TMPL_IF NAME="__odd__" --> >+ <tr> >+ <!-- TMPL_ELSE --> >+ <tr class="highlight"> >+ <!-- /TMPL_IF --> >+ <!-- TMPL_IF NAME="overdue" --><td class="od"><!-- TMPL_ELSE --><td><!-- /TMPL_IF --> >+ <!-- TMPL_VAR NAME="dd" --> >+ </td> >+ <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&type=intra"><strong><!-- TMPL_VAR NAME="title" escape="html" --></strong></a><!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF --> <!-- TMPL_IF NAME="itemnotes" -->- <!-- TMPL_VAR name="itemnotes" --><!-- /TMPL_IF --> <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td> >+ <td> >+ <!-- TMPL_VAR NAME="itemtype" --> >+ </td> >+ <td><!-- TMPL_VAR NAME="branchdisplay" --> >+ <!--TMPL_IF NAME="itemcallnumber"-->(<!-- TMPL_VAR NAME="itemcallnumber" -->)<!--/TMPL_IF--></td> >+ <td><!-- TMPL_VAR NAME="displaydate" --></td> >+ <!-- TMPL_IF NAME="multiple_borrowers" --><td><!-- TMPL_VAR NAME="borrowername" --></td><!-- /TMPL_IF --> >+ <td><!-- TMPL_VAR NAME="charge" --></td> >+ <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->"><!-- TMPL_VAR NAME="borrowername" --></a></td> >+ <td><!-- TMPL_VAR NAME="materials" --></td> >+ </tr> >+ <!-- /loop previssues --><!-- /TMPL_LOOP --> >+<!--/if previssues --><!-- /TMPL_IF --> >+ </tbody> >+ </table> >+</form> >+<!-- /TMPL_IF --><!-- end displayrelissues --> >+ > </div> > > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl >index 2cdc13a..d3e71ed 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl >@@ -17,7 +17,11 @@ $(document).ready(function() { > $.tablesorter.defaults.widgets = ['zebra']; > $("#issuest").tablesorter({<!-- TMPL_IF NAME="dateformat_metric" --> > dateFormat: 'uk',<!-- /TMPL_IF --> >- headers: { 1: { sorter: 'articles' },5: { sorter: false },6:{sorter:false},7:{sorter:false},8:{sorter:false}} >+ headers: { 1: { sorter: 'articles' }} >+ }); >+ $("#relissuest").tablesorter({<!-- TMPL_IF NAME="dateformat_metric" --> >+ dateFormat: 'uk',<!-- /TMPL_IF --> >+ headers: { 1: { sorter: 'articles' }} > }); > $("#holdst").tablesorter({<!-- TMPL_IF NAME="dateformat_metric" --> > dateFormat: 'uk',<!-- /TMPL_IF --> >@@ -42,6 +46,13 @@ $(document).ready(function() { > $("#CheckAllreturns").click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=barcodes]"); $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; }); > $("#CheckNoreturns" ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; }); > >+ $("#relrenew_all" ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]" ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); }); >+ $("#relCheckAllitems" ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]" ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; }); >+ $("#relCheckNoitems" ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; }); >+ $("#relCheckAllreturns").click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=barcodes]"); $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; }); >+ $("#relCheckNoreturns" ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; }); >+ >+ > <!-- TMPL_IF NAME="CAN_user_circulate_override_renewals" --> > <!-- TMPL_IF NAME="AllowRenewalLimitOverride" --> > $( '#override_limit' ).click( function () { >@@ -398,11 +409,11 @@ function validate1(date) { > <!-- /TMPL_IF --> > </div> > >-<div id="checkedout"> >- <!-- TMPL_IF NAME="issueloop" --> > <form action="/cgi-bin/koha/reserve/renewscript.pl" method="post" class="checkboxed"> > <input type="hidden" name="borrowernumber" value="<!-- TMPL_VAR NAME="borrowernumber" -->" /> > <input type="hidden" name="branch" value="<!-- TMPL_VAR NAME="branch" -->" /> >+<div id="checkedout"> >+ <!-- TMPL_IF NAME="issueloop" --> > <table id="issuest"> > <thead> > <tr> >@@ -410,7 +421,7 @@ function validate1(date) { > <th scope="col">Title</th> > <th scope="col">Item Type</th> > <th scope="col">Checked out on</th> >- <th scope="col">Call no</th> >+ <th scope="col">Call no</th> > <th scope="col">Charge</th> > <th scope="col">Price</th> > <th scope="col">Renew <p class="column-tool"><a href="#" id="CheckAllitems">select all</a> | <a href="#" id="CheckNoitems">none</a></p></th> >@@ -494,7 +505,58 @@ function validate1(date) { > <input type="submit" name="renew_checked" value="Renew or Return checked items" /> > <input type="submit" id="renew_all" name="renew_all" value="Renew all" /> > </fieldset> >- </form><!-- TMPL_ELSE --><p>Patron has nothing checked out.</p><!-- /TMPL_IF --> >+ <!-- TMPL_ELSE --><p>Patron has nothing checked out.</p> >+<!-- /TMPL_IF --> >+ >+<!-- TMPL_IF NAME="relissuecount" --> >+ <h2>Relatives issues</h2> >+ <table id="relissuest"> >+ <thead> >+ <tr> >+ <th scope="col">Due date</th> >+ <th scope="col">Title</th> >+ <th scope="col">Collection</th> >+ <th scope="col">Stock number</th> >+ <th scope="col">Barcode</th> >+ <th scope="col">Item Type</th> >+ <th scope="col">Checked out on</th> >+ <th scope="col">Borrower</th> >+ <th scope="col">Call no</th> >+ <th scope="col">Charge</th> >+ <th scope="col">Price</th> >+ </tr> >+ </thead> >+ <tbody> >+ <!-- TMPL_LOOP name="relissueloop" --> >+ >+ <!-- TMPL_IF name="overdue" --> >+ <tr class="problem"> >+ <!-- TMPL_ELSE --> >+ <tr> >+ <!-- /TMPL_IF --> >+ <td<!-- TMPL_IF NAME="red" --> class="od"<!-- /TMPL_IF -->><!-- TMPL_VAR NAME="date_due" --> >+ <!-- TMPL_IF NAME="itemlost" --> >+ <span class="lost"><!-- TMPL_VAR NAME="itemlost" --></span> >+ <!-- /TMPL_IF --> >+ <!-- TMPL_IF NAME="damaged" --> >+ <span class="dmg"><!-- TMPL_VAR NAME="itemdamaged" --></span> >+ <!-- /TMPL_IF --> >+</td> >+ <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->"><strong><!-- TMPL_VAR NAME="title" escape="html" --></strong></a><!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR name="author" --><!-- /TMPL_IF --> <!-- TMPL_IF name="publishercode" -->; <!-- TMPL_VAR name="publishercode" --> <!-- /TMPL_IF --> <!-- TMPL_IF name="publicationyear" -->, <!-- TMPL_VAR name="publicationyear" --><!-- /TMPL_IF --></td> >+ <td><!-- TMPL_VAR NAME="collection" --></td> >+ <td><!-- TMPL_VAR NAME="stocknumber" --></td> >+ <td><a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td> >+<td><!-- TMPL_UNLESS NAME="noItemTypeImages" --> <!-- TMPL_IF NAME="itemtype_image" --><img src="<!-- TMPL_VAR NAME="itemtype_image" -->" alt="" /><!-- /TMPL_IF --><!-- /TMPL_UNLESS --><!-- TMPL_VAR NAME="itemtype_description" --></td> >+ <td><!-- TMPL_VAR NAME="issuedate" --></td> >+ <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->"><!-- TMPL_VAR NAME="borrowername" --></a></td> >+ <td><!-- TMPL_VAR NAME="itemcallnumber" --></td> >+ <td><!-- TMPL_VAR NAME="charge" --></td> >+ <td><!-- TMPL_VAR NAME="replacementprice" --></td> >+ </tr> >+ <!-- /tmpl_loop --> >+ </tbody> >+ </table> >+<!-- /TMPL_IF --> > </div> > > <div id="onhold"> >@@ -543,12 +605,14 @@ function validate1(date) { > </tr> > <!-- /TMPL_LOOP --></tbody> > </table> >- <fieldset class="action"><input type="submit" class="cancel" name="submit" value="Cancel Marked Requests" /></fieldset> >- </form> >- <!-- TMPL_ELSE --> >- <p>Patron has nothing on hold.</p> >- <!-- /TMPL_IF --> >- </div> >+ >+ <fieldset class="action"> >+ <input type="submit" name="renew_checked" value="Renew or Return checked items" /> >+ <input type="submit" id="renew_all" name="renew_all" value="Renew all" /> >+ </fieldset> >+ <!-- TMPL_ELSE --><p>Patron has nothing checked out.</p><!-- /TMPL_IF --> >+ </div> >+ > </div> > <!-- /TMPL_IF --> <!-- unknowuser --> > >diff --git a/members/moremember.pl b/members/moremember.pl >index bb593c4..9dcfa3a 100755 >--- a/members/moremember.pl >+++ b/members/moremember.pl >@@ -51,6 +51,7 @@ use C4::Reserves; > use C4::Branch; # GetBranchName > use C4::Form::MessagingPreferences; > use C4::NewsChannels; #get slip news >+use List::MoreUtils qw/uniq/; > > #use Smart::Comments; > #use Data::Dumper; >@@ -239,73 +240,94 @@ if ( C4::Context->preference('OPACPrivacy') ) { > > # current issues > # >-my $issue = GetPendingIssues($borrowernumber); >+my @borrowernumbers = GetMemberRelatives($borrowernumber); >+my $issue = GetPendingIssues($borrowernumber); >+my $relissue = GetPendingIssues(@borrowernumbers); > my $issuecount = scalar(@$issue); >+my $relissuecount = scalar(@$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++ ) { >+ # Getting borrower details >+ my $memberdetails = GetMemberDetails($issue->[$i]{'borrowernumber'}); >+ $issue->[$i]{'borrowername'} = $memberdetails->{'firstname'} . " " . $memberdetails->{'surname'}; >+ >+ 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; >+ } > } >- } >- 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'}, $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( @$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 .... >@@ -437,8 +459,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, >-- >1.7.4.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 5952
: 3431 |
3447
|
3460
|
3604
|
3606
|
3650
|
3914