Bugzilla – Attachment 25988 Details for
Bug 11703
Convert checkouts table to ajax datatable
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 11703 - Convert holds tables to ajax datatables
Bug-11703---Convert-holds-tables-to-ajax-datatable.patch (text/plain), 31.52 KB, created by
Kyle M Hall
on 2014-03-10 12:26:17 UTC
(
hide
)
Description:
Bug 11703 - Convert holds tables to ajax datatables
Filename:
MIME Type:
Creator:
Kyle M Hall
Created:
2014-03-10 12:26:17 UTC
Size:
31.52 KB
patch
obsolete
>From 870f781269dc384dc24bbe6ccd4e3b77636b5f10 Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Thu, 13 Feb 2014 13:11:15 -0500 >Subject: [PATCH] Bug 11703 - Convert holds tables to ajax datatables > >--- > Koha/Schema/Result/Reserve.pm | 24 +++- > api/holds.pl | 143 ++++++++++++++++++++ > circ/circulation.pl | 87 +------------ > koha-tmpl/intranet-tmpl/prog/en/js/holds.js | 131 ++++++++++++++++++ > .../prog/en/modules/circ/circulation.tt | 70 +++------- > .../prog/en/modules/members/moremember.tt | 79 ++++-------- > members/moremember.pl | 74 +---------- > 7 files changed, 350 insertions(+), 258 deletions(-) > create mode 100755 api/holds.pl > create mode 100644 koha-tmpl/intranet-tmpl/prog/en/js/holds.js > >diff --git a/Koha/Schema/Result/Reserve.pm b/Koha/Schema/Result/Reserve.pm >index 527651d..184a854 100644 >--- a/Koha/Schema/Result/Reserve.pm >+++ b/Koha/Schema/Result/Reserve.pm >@@ -288,6 +288,28 @@ __PACKAGE__->belongs_to( > # Created by DBIx::Class::Schema::Loader v0.07025 @ 2013-10-14 20:56:21 > # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ig/fobzvZf1OgAHZFtkyyQ > >+__PACKAGE__->belongs_to( >+ "item", >+ "Koha::Schema::Result::Item", >+ { itemnumber => "itemnumber" }, >+ { >+ is_deferrable => 1, >+ join_type => "LEFT", >+ on_delete => "CASCADE", >+ on_update => "CASCADE", >+ }, >+); >+ >+__PACKAGE__->belongs_to( >+ "biblio", >+ "Koha::Schema::Result::Biblio", >+ { biblionumber => "biblionumber" }, >+ { >+ is_deferrable => 1, >+ join_type => "LEFT", >+ on_delete => "CASCADE", >+ on_update => "CASCADE", >+ }, >+); > >-# You can replace this text with custom content, and it will be preserved on regeneration > 1; >diff --git a/api/holds.pl b/api/holds.pl >new file mode 100755 >index 0000000..9fbdb5f >--- /dev/null >+++ b/api/holds.pl >@@ -0,0 +1,143 @@ >+#!/usr/bin/perl >+ >+# This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html) >+ >+# Copyright 2014 ByWater Solutions >+# >+# 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 3 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., >+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+use Modern::Perl; >+ >+use CGI; >+use JSON qw(to_json); >+ >+use C4::Auth qw(check_cookie_auth); >+use C4::Biblio qw(GetMarcBiblio GetFrameworkCode GetRecordValue ); >+use C4::Branch qw(GetBranchName); >+use C4::Charset; >+use C4::Circulation qw(GetTransfers); >+use C4::Context; >+ >+use Koha::Database; >+use Koha::DateUtils; >+ >+my $input = new CGI; >+ >+my ( $auth_status, $sessionID ) = >+ check_cookie_auth( $input->cookie('CGISESSID'), >+ { circulate => 'circulate_remaining_permissions' } ); >+ >+if ( $auth_status ne "ok" ) { >+ exit 0; >+} >+ >+my $branch = C4::Context->userenv->{'branch'}; >+ >+my $schema = Koha::Database->new()->schema(); >+ >+my @sort_columns = >+ qw/reservedate title itemcallnumber barcode expirationdate priority/; >+ >+my $borrowernumber = $input->param('borrowernumber'); >+my $offset = $input->param('iDisplayStart'); >+my $results_per_page = $input->param('iDisplayLength'); >+my $sorting_direction = $input->param('sSortDir_0') || 'desc'; >+my $sorting_column = $sort_columns[ $input->param('iSortCol_0') ] >+ || 'reservedate'; >+ >+binmode STDOUT, ":encoding(UTF-8)"; >+print $input->header( -type => 'text/plain', -charset => 'UTF-8' ); >+ >+my $holds_rs = $schema->resultset('Reserve')->search( >+ { borrowernumber => $borrowernumber }, >+ { >+ prefetch => { 'item' => 'biblio' }, >+ order_by => { "-$sorting_direction" => $sorting_column } >+ } >+); >+ >+my $borrower; >+my @holds; >+while ( my $h = $holds_rs->next() ) { >+ my $item = $h->item(); >+ >+ my $biblionumber = $h->biblio()->biblionumber(); >+ >+ my $hold = { >+ DT_RowId => $h->reserve_id(), >+ biblionumber => $biblionumber, >+ title => $h->biblio()->title(), >+ author => $h->biblio()->author(), >+ reserve_id => $h->reserve_id(), >+ reservedate => $h->reservedate(), >+ expirationdate => $h->expirationdate(), >+ suspend => $h->suspend(), >+ suspend_until => $h->suspend_until(), >+ found => $h->found(), >+ waiting => $h->found() eq 'W', >+ waiting_at => $h->branchcode()->branchname(), >+ waiting_here => $h->branchcode()->branchcode() eq $branch, >+ priority => $h->priority(), >+ subtitle => GetRecordValue( >+ 'subtitle', GetMarcBiblio($biblionumber), >+ GetFrameworkCode($biblionumber) >+ ), >+ reservedate_formatted => $h->reservedate() >+ ? output_pref_due( dt_from_string( $h->reservedate() ) ) >+ : q{}, >+ suspend_until_formatted => $h->suspend_until() >+ ? output_pref_due( dt_from_string( $h->suspend_until() ) ) >+ : q{}, >+ expirationdate_formatted => $h->expirationdate() >+ ? output_pref_due( dt_from_string( $h->expirationdate() ) ) >+ : q{}, >+ }; >+ >+ $hold->{transfered} = 0; >+ $hold->{not_transfered} = 0; >+ >+ if ($item) { >+ $hold->{itemnumber} = $item->itemnumber(); >+ $hold->{barcode} = $item->barcode(); >+ $hold->{itemtype} = $item->effective_itemtype(); >+ $hold->{itemcallnumber} = $item->itemcallnumber() || q{}; >+ >+ my ( $transferred_when, $transferred_from, $transferred_to ) = >+ GetTransfers( $item->itemnumber() ); >+ if ($transferred_when) { >+ $hold->{color} = 'transferred'; >+ $hold->{transferred} = 1; >+ $hold->{date_sent} = format_date($transferred_when); >+ $hold->{from_branch} = GetBranchName($transferred_from); >+ } >+ elsif ( $item->holdingbranch()->branchcode() ne >+ $h->branchcode()->branchcode() ) >+ { >+ $hold->{not_transferred} = 1; >+ $hold->{not_transferred_by} = $h->branchcode()->branchname(); >+ } >+ } >+ >+ push( @holds, $hold ); >+} >+ >+my $data; >+$data->{'iTotalRecords'} = scalar @holds; >+$data->{'iTotalDisplayRecords'} = scalar @holds; >+$data->{'sEcho'} = $input->param('sEcho') || undef; >+$data->{'aaData'} = \@holds; >+ >+print to_json($data); >diff --git a/circ/circulation.pl b/circ/circulation.pl >index e759eb7..76ec0db 100755 >--- a/circ/circulation.pl >+++ b/circ/circulation.pl >@@ -361,91 +361,10 @@ if ($borrowernumber) { > # BUILD HTML > # show all reserves of this borrower, and the position of the reservation .... > if ($borrowernumber) { >+ $template->param( >+ holds_count => Koha::Database->new()->schema()->resultset('Reserve') >+ ->count( { borrowernumber => $borrowernumber } ) ); > >- # new op dev >- # now we show the status of the borrower's reservations >- my @borrowerreserv = GetReservesFromBorrowernumber($borrowernumber ); >- my @reservloop; >- my @WaitingReserveLoop; >- >- foreach my $num_res (@borrowerreserv) { >- my %getreserv; >- my %getWaitingReserveInfo; >- my $getiteminfo = GetBiblioFromItemNumber( $num_res->{'itemnumber'} ); >- my $itemtypeinfo = getitemtypeinfo( (C4::Context->preference('item-level_itypes')) ? $getiteminfo->{'itype'} : $getiteminfo->{'itemtype'} ); >- my ( $transfertwhen, $transfertfrom, $transfertto ) = >- GetTransfers( $num_res->{'itemnumber'} ); >- >- $getreserv{waiting} = 0; >- $getreserv{transfered} = 0; >- $getreserv{nottransfered} = 0; >- >- $getreserv{reservedate} = format_date( $num_res->{'reservedate'} ); >- $getreserv{reserve_id} = $num_res->{'reserve_id'}; >- $getreserv{title} = $getiteminfo->{'title'}; >- $getreserv{subtitle} = GetRecordValue('subtitle', GetMarcBiblio($getiteminfo->{biblionumber}), GetFrameworkCode($getiteminfo->{biblionumber})); >- $getreserv{itemtype} = $itemtypeinfo->{'description'}; >- $getreserv{author} = $getiteminfo->{'author'}; >- $getreserv{barcodereserv} = $getiteminfo->{'barcode'}; >- $getreserv{itemcallnumber} = $getiteminfo->{'itemcallnumber'}; >- $getreserv{biblionumber} = $getiteminfo->{'biblionumber'}; >- $getreserv{waitingat} = GetBranchName( $num_res->{'branchcode'} ); >- $getreserv{suspend} = $num_res->{'suspend'}; >- $getreserv{suspend_until} = $num_res->{'suspend_until'}; >- # check if we have a waiting status for reservations >- if ( $num_res->{'found'} && $num_res->{'found'} eq 'W' ) { >- $getreserv{color} = 'reserved'; >- $getreserv{waiting} = 1; >-# genarate information displaying only waiting reserves >- $getWaitingReserveInfo{title} = $getiteminfo->{'title'}; >- $getWaitingReserveInfo{biblionumber} = $getiteminfo->{'biblionumber'}; >- $getWaitingReserveInfo{itemtype} = $itemtypeinfo->{'description'}; >- $getWaitingReserveInfo{author} = $getiteminfo->{'author'}; >- $getWaitingReserveInfo{itemcallnumber} = $getiteminfo->{'itemcallnumber'}; >- $getWaitingReserveInfo{reservedate} = format_date( $num_res->{'reservedate'} ); >- $getWaitingReserveInfo{waitingat} = GetBranchName( $num_res->{'branchcode'} ); >- $getWaitingReserveInfo{waitinghere} = 1 if $num_res->{'branchcode'} eq $branch; >- } >- # check transfers with the itemnumber foud in th reservation loop >- if ($transfertwhen) { >- $getreserv{color} = 'transfered'; >- $getreserv{transfered} = 1; >- $getreserv{datesent} = format_date($transfertwhen); >- $getreserv{frombranch} = GetBranchName($transfertfrom); >- } elsif ($getiteminfo->{'holdingbranch'} ne $num_res->{'branchcode'}) { >- $getreserv{nottransfered} = 1; >- $getreserv{nottransferedby} = GetBranchName( $getiteminfo->{'holdingbranch'} ); >- } >- >-# if we don't have a reserv on item, we put the biblio infos and the waiting position >- if ( $getiteminfo->{'title'} eq '' ) { >- my $getbibinfo = GetBiblioData( $num_res->{'biblionumber'} ); >- >- $getreserv{color} = 'inwait'; >- $getreserv{title} = $getbibinfo->{'title'}; >- $getreserv{subtitle} = GetRecordValue('subtitle', GetMarcBiblio($num_res->{biblionumber}), GetFrameworkCode($num_res->{biblionumber})); >- $getreserv{nottransfered} = 0; >- $getreserv{itemtype} = $itemtypeinfo->{'description'}; >- $getreserv{author} = $getbibinfo->{'author'}; >- $getreserv{biblionumber} = $num_res->{'biblionumber'}; >- } >- $getreserv{waitingposition} = $num_res->{'priority'}; >- $getreserv{expirationdate} = $num_res->{'expirationdate'}; >- push( @reservloop, \%getreserv ); >- >-# if we have a reserve waiting, initiate waitingreserveloop >- if ($getreserv{waiting} == 1) { >- push (@WaitingReserveLoop, \%getWaitingReserveInfo) >- } >- >- } >- >- # return result to the template >- $template->param( >- countreserv => scalar @reservloop, >- reservloop => \@reservloop , >- WaitingReserveLoop => \@WaitingReserveLoop, >- ); > $template->param( adultborrower => 1 ) if ( $borrower->{'category_type'} eq 'A' ); > } > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/holds.js b/koha-tmpl/intranet-tmpl/prog/en/js/holds.js >new file mode 100644 >index 0000000..4aa9fb7 >--- /dev/null >+++ b/koha-tmpl/intranet-tmpl/prog/en/js/holds.js >@@ -0,0 +1,131 @@ >+$(document).ready(function() { >+ // Don't load holds table unless it is clicked on >+ var holdsTable; >+ $("#holds-tab").click( function() { >+ if ( ! holdsTable ) { >+ holdsTable = $("#holds-table").dataTable({ >+ "sDom": "<'row-fluid'<'span6'><'span6'>r>t<'row-fluid'>t", >+ "aoColumns": [ >+ { >+ "mDataProp": "reservedate_formatted" >+ }, >+ { >+ "mDataProp": function ( oObj ) { >+ title = "<a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber=" >+ + oObj.biblionumber >+ + "'>" >+ + oObj.title; >+ >+ $.each(oObj.subtitle, function( index, value ) { >+ title += " " + value.subfield; >+ }); >+ >+ title += "</a>"; >+ >+ if ( oObj.author ) { >+ title += " " + _("by") + " " + oObj.author; >+ } >+ >+ if ( oObj.itemnotes ) { >+ var span_class = ""; >+ if ( $.datepicker.formatDate('yy-mm-dd', new Date(oObj.issuedate) ) == ymd ) { >+ span_class = "circ-hlt"; >+ } >+ title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>" >+ } >+ >+ title += " " >+ + "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=" >+ + oObj.biblionumber >+ + "&itemnumber=" >+ + oObj.itemnumber >+ + "#" >+ + oObj.itemnumber >+ + "'>" >+ + oObj.barcode >+ + "</a>"; >+ >+ return title; >+ } >+ }, >+ { >+ "mDataProp": function( oObj ) { >+ return oObj.itemcallnumber || ""; >+ } >+ }, >+ { >+ "mDataProp": function( oObj ) { >+ var data = ""; >+ >+ if ( oObj.suspend == 1 ) { >+ data += "<p>" + _("Hold is") + " <strong> " + _("suspended") + " </strong>"; >+ if ( oObj.suspend_until ) { >+ data += " " + _("until") + " " + oObj.suspend_until_formatted; >+ } >+ data += "</p>"; >+ } >+ >+ if ( oObj.barcode ) { >+ data += "<em>"; >+ if ( oObj.found == "W" ) { >+ data += _("Item is") + " <strong> " + _("waiting") + " </strong>"; >+ >+ if ( ! oObj.waiting_here ) { >+ data += " " + _("at") + " " + oObj.waiting_at; >+ } >+ } else if ( oObj.transferred ) { >+ data += _("Item is") + " <strong> " + _("in transit") + " </strong> " + _("from") + oObj.from_branch; >+ } else if ( oObj.not_transferred ) { >+ data += _("Item hasn't been transferred yet from") + " " + oObj.not_transferred_by; >+ } data += "</em>"; >+ >+ data += " <a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber=" >+ + oObj.biblionumber + "'>" + oObj.barcode + "</a>"; >+ } >+ >+ return data; >+ } >+ }, >+ { "mDataProp": "expirationdate_formatted" }, >+ { >+ "mDataProp": function( oObj ) { >+ if ( oObj.priority && parseInt( oObj.priority ) && parseInt( oObj.priority ) > 0 ) { >+ return oObj.priority; >+ } else { >+ return ""; >+ } >+ } >+ }, >+ { >+ "mDataProp": function( oObj ) { >+ return "<select name='rank-request'>" >+ + "<option value='n'>" + _("No") + "</option>" >+ + "<option value='del'>" + _("Yes") + "</option>" >+ + "</select>" >+ + "<input type='hidden' name='biblionumber' value='" + oObj.biblionumber + "'>" >+ + "<input type='hidden' name='borrowernumber' value='" + borrowernumber + "'>" >+ + "<input type='hidden' name='reserve_id' value='" + oObj.reserve_id + "'>"; >+ } >+ } >+ ], >+ "bPaginate": false, >+ "bProcessing": true, >+ "bServerSide": true, >+ "sAjaxSource": '/cgi-bin/koha/api/holds.pl', >+ "fnServerData": function ( sSource, aoData, fnCallback ) { >+ aoData.push( { "name": "borrowernumber", "value": borrowernumber } ); >+ >+ $.getJSON( sSource, aoData, function (json) { >+ fnCallback(json) >+ } ); >+ }, >+ }); >+ >+ $("#holds-table_processing").position({ >+ of: $( "#holds-table" ), >+ collision: "none" >+ }); >+ } >+ }); >+ >+}); >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >index 1ac9c22..18c1e48 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt >@@ -22,6 +22,7 @@ > [% INCLUDE 'timepicker.inc' %] > <script type="text/javascript" src="[% themelang %]/js/pages/circulation.js"></script> > <script type="text/javascript" src="[% themelang %]/js/checkouts.js"></script> >+<script type="text/javascript" src="[% themelang %]/js/holds.js"></script> > <script type="text/javascript"> > //<![CDATA[ > /* Set some variable needed in circulation.js */ >@@ -657,10 +658,10 @@ No patron matched <span class="ex">[% message %]</span> > [% END %] > > <li> >- [% IF ( countreserv ) %] >- <a href="#reserves">[% countreserv %] Hold(s)</a> >+ [% IF ( holds_count ) %] >+ <a href="#reserves" id="holds-tab">[% holds_count %] Hold(s)</a> > [% ELSE %] >- <a href="#reserves">0 Holds</a> >+ <a href="#reserves" id="holds-tab">0 Holds</a> > [% END %] > </li> > >@@ -727,51 +728,26 @@ No patron matched <span class="ex">[% message %]</span> > [% INCLUDE borrower_debarments.inc %] > > <div id="reserves"> >-[% IF ( reservloop ) %] >+[% IF ( holds_count ) %] > <form action="/cgi-bin/koha/reserve/modrequest.pl" method="post"> >- <input type="hidden" name="from" value="circ" /> >- <table id="holdst"> >- <thead><tr> >- <th>Hold date</th> >- <th>Title</th> >- <th>Call number</th> >- <th>Barcode</th> >- <th>Expiration</th> >- <th>Priority</th> >- <th>Delete?</th> >- <th> </th> >- </tr></thead> >- <tbody> >- [% FOREACH reservloo IN reservloop %] >- <tr class="[% reservloo.color %]"> >- <td>[% reservloo.reservedate %]</td> >- <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% reservloo.biblionumber %]"><strong>[% reservloo.title |html %][% FOREACH subtitl IN reservloo.subtitle %] [% subtitl.subfield %][% END %]</strong></a>[% IF ( reservloo.author ) %], by [% reservloo.author %][% END %]</td> >- <td>[% reservloo.itemcallnumber %]</td> >- <td><em>[% IF ( reservloo.barcodereserv ) %]Item [% reservloo.barcodereserv %] >- [% END %][% IF ( reservloo.waiting ) %] <strong>waiting at [% reservloo.waitingat %]</strong> >- [% END %] >- [% IF ( reservloo.transfered ) %] <strong>in transit</strong> from >- [% reservloo.frombranch %] since [% reservloo.datesent %] >- [% END %] >- [% IF ( reservloo.nottransfered ) %] hasn't been transferred yet from [% reservloo.nottransferedby %]</i> >- [% END %]</em></td> >- <td>[% reservloo.expirationdate | $KohaDates %]</td> >- <td> >- [% IF ( reservloo.waitingposition ) %]<b> [% reservloo.waitingposition %] </b>[% END %] >- </td> >- <td><select name="rank-request"> >- <option value="n">No</option> >- <option value="del">Yes</option> >- </select> >- <input type="hidden" name="biblionumber" value="[% reservloo.biblionumber %]" /> >- <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" /> >- <input type="hidden" name="reserve_id" value="[% reservloo.reserve_id %]" /> >- </td> >- <td>[% IF ( reservloo.suspend ) %]Suspended [% IF ( reservloo.suspend_until ) %] until [% reservloo.suspend_until | $KohaDates %][% END %][% END %]</td> >- </tr> >- [% END %]</tbody> >- </table> >- <fieldset class="action"><input type="submit" class="cancel" name="submit" value="Cancel marked holds" /></fieldset> >+ <input type="hidden" name="from" value="circ" /> >+ <table id="holds-table" style="width: 100% !Important;"> >+ <thead> >+ <tr> >+ <th>Hold date</th> >+ <th>Title</th> >+ <th>Call number</th> >+ <th>Barcode</th> >+ <th>Expiration</th> >+ <th>Priority</th> >+ <th>Delete?</th> >+ </tr> >+ </thead> >+ </table> >+ >+ <fieldset class="action"> >+ <input type="submit" class="cancel" name="submit" value="Cancel marked holds" /> >+ </fieldset> > </form> > > [% IF SuspendHoldsIntranet %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >index a7441a8..5c58754 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >@@ -15,6 +15,7 @@ > <script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery-ui-timepicker-addon.js"></script> > [% INCLUDE 'timepicker.inc' %] > <script type="text/javascript" src="[% themelang %]/js/checkouts.js"></script> >+<script type="text/javascript" src="[% themelang %]/js/holds.js"></script> > <script type="text/JavaScript"> > //<![CDATA[ > /* Set some variable needed in circulation.js */ >@@ -391,10 +392,10 @@ function validate1(date) { > [% END %] > <li><a href="#finesandcharges">Fines & Charges</a></li> > <li> >- [% IF ( countreserv ) %] >- <a href="#onhold">[% countreserv %] Hold(s)</a> >+ [% IF ( holds_count ) %] >+ <a href="#reserves" id="holds-tab">[% holds_count %] Hold(s)</a> > [% ELSE %] >- <a href="#onhold">0 Holds</a> >+ <a href="#reserves" id="holds-tab">0 Holds</a> > [% END %] > </li> > <li><a id="debarments-tab-link" href="#reldebarments">[% debarments.size %] Restrictions</a></li> >@@ -490,59 +491,27 @@ function validate1(date) { > > [% INCLUDE borrower_debarments.inc %] > >-<div id="onhold"> >-[% IF ( reservloop ) %] >-<form action="/cgi-bin/koha/reserve/modrequest.pl" method="post"> >- <input type="hidden" name="from" value="borrower" /> >- <table id="holdst"> >- <thead><tr> >- <th>Hold date</th> >- <th>Title</th> >- <th>Call number</th> >- <th>Barcode</th> >- <th>Expiration</th> >- <th>Priority</th> >- <th>Delete?</th> >- <th> </th> >- </tr></thead> >- <tbody>[% FOREACH reservloo IN reservloop %] >- <tr class="[% reservloo.color %]"> >- <td><span title="[% reservloo.reservedate %]">[% reservloo.reservedate | $KohaDates %]</span></td> >- <td> >- <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% reservloo.biblionumber %]">[% reservloo.title |html %][% FOREACH subtitl IN reservloo.subtitle %] [% subtitl.subfield %][% END %]</a>[% IF ( reservloo.author ) %], by [% reservloo.author %][% END %] >- </td> >- <td>[% reservloo.itemcallnumber %]</td> >- <td>[% IF ( reservloo.waiting ) %] >- <em>Item is <strong>waiting</strong></em> >- [% END %] >- [% IF ( reservloo.transfered ) %] >- <em>Item <strong>in transit</strong> from >- [% reservloo.frombranch %] since [% reservloo.datesent %] </em> >- [% END %] >+<div id="reserves"> >+[% IF ( holds_count ) %] >+ <form action="/cgi-bin/koha/reserve/modrequest.pl" method="post"> >+ <input type="hidden" name="from" value="circ" /> >+ <table id="holds-table" style="width: 100% !Important;"> >+ <thead> >+ <tr> >+ <th>Hold date</th> >+ <th>Title</th> >+ <th>Call number</th> >+ <th>Barcode</th> >+ <th>Expiration</th> >+ <th>Priority</th> >+ <th>Delete?</th> >+ </tr> >+ </thead> >+ </table> > >- [% IF ( reservloo.nottransfered ) %] >- <em>Item hasn't been transferred yet from [% reservloo.nottransferedby %]</em> >- [% END %] >- [% IF ( reservloo.barcodereserv ) %] >- <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% reservloo.biblionumber %]">[% reservloo.barcodereserv %]</a> >- [% END %] >- </td> >- <td>[% reservloo.expirationdate | $KohaDates %]</td> >- <td>[% IF ( reservloo.waitingposition ) %]<strong>[% reservloo.waitingposition %]</strong>[% END %]</td> >- <td><select name="rank-request"> >- <option value="n">No</option> >- <option value="del">Yes</option> >- </select> >- <input type="hidden" name="biblionumber" value="[% reservloo.biblionumber %]" /> >- <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" /> >- <input type="hidden" name="reserve_id" value="[% reservloo.reserve_id %]" /> >- </td> >- <td>[% IF ( reservloo.suspend ) %]Suspended [% IF ( reservloo.suspend_until ) %] until [% reservloo.suspend_until | $KohaDates %][% END %][% END %]</td> >- </tr> >- [% END %]</tbody> >- </table> >- >- <fieldset class="action"><input type="submit" class="cancel" name="submit" value="Cancel marked holds" /></fieldset> >+ <fieldset class="action"> >+ <input type="submit" class="cancel" name="submit" value="Cancel marked holds" /> >+ </fieldset> > </form> > > [% IF SuspendHoldsIntranet %] >diff --git a/members/moremember.pl b/members/moremember.pl >index 0a035a5..f04ff82 100755 >--- a/members/moremember.pl >+++ b/members/moremember.pl >@@ -246,77 +246,9 @@ my $totalprice = 0; > # BUILD HTML > # show all reserves of this borrower, and the position of the reservation .... > if ($borrowernumber) { >- >- # new op dev >- # now we show the status of the borrower's reservations >- my @borrowerreserv = GetReservesFromBorrowernumber($borrowernumber ); >- my @reservloop; >- foreach my $num_res (@borrowerreserv) { >- my %getreserv; >- my $getiteminfo = GetBiblioFromItemNumber( $num_res->{'itemnumber'} ); >- my $itemtypeinfo = getitemtypeinfo( $getiteminfo->{'itemtype'} ); >- my ( $transfertwhen, $transfertfrom, $transfertto ) = >- GetTransfers( $num_res->{'itemnumber'} ); >- >- foreach (qw(waiting transfered nottransfered)) { >- $getreserv{$_} = 0; >- } >- $getreserv{reservedate} = $num_res->{'reservedate'}; >- foreach (qw(biblionumber title author itemcallnumber )) { >- $getreserv{$_} = $getiteminfo->{$_}; >- } >- $getreserv{barcodereserv} = $getiteminfo->{'barcode'}; >- $getreserv{itemtype} = $itemtypeinfo->{'description'}; >- >- # check if we have a waitin status for reservations >- if ( $num_res->{'found'} eq 'W' ) { >- $getreserv{color} = 'reserved'; >- $getreserv{waiting} = 1; >- } >- >- # check transfers with the itemnumber foud in th reservation loop >- if ($transfertwhen) { >- $getreserv{color} = 'transfered'; >- $getreserv{transfered} = 1; >- $getreserv{datesent} = C4::Dates->new($transfertwhen, 'iso')->output('syspref') or die "Cannot get new($transfertwhen, 'iso') from C4::Dates"; >- $getreserv{frombranch} = GetBranchName($transfertfrom); >- } >- >- if ( ( $getiteminfo->{'holdingbranch'} ne $num_res->{'branchcode'} ) >- and not $transfertwhen ) >- { >- $getreserv{nottransfered} = 1; >- $getreserv{nottransferedby} = >- GetBranchName( $getiteminfo->{'holdingbranch'} ); >- } >- $getreserv{title} = $getiteminfo->{'title'}; >- $getreserv{subtitle} = GetRecordValue('subtitle', GetMarcBiblio($getiteminfo->{biblionumber}), GetFrameworkCode($getiteminfo->{biblionumber})); >- >-# if we don't have a reserv on item, we put the biblio infos and the waiting position >- if ( $getiteminfo->{'title'} eq '' ) { >- my $getbibinfo = GetBiblioData( $num_res->{'biblionumber'} ); >- my $getbibtype = getitemtypeinfo( $getbibinfo->{'itemtype'} ); >- $getreserv{color} = 'inwait'; >- $getreserv{title} = $getbibinfo->{'title'}; >- $getreserv{subtitle} = GetRecordValue('subtitle', GetMarcBiblio($num_res->{biblionumber}), GetFrameworkCode($num_res->{biblionumber})); >- $getreserv{nottransfered} = 0; >- $getreserv{itemtype} = $getbibtype->{'description'}; >- $getreserv{author} = $getbibinfo->{'author'}; >- $getreserv{biblionumber} = $num_res->{'biblionumber'}; >- } >- $getreserv{waitingposition} = $num_res->{'priority'}; >- $getreserv{suspend} = $num_res->{'suspend'}; >- $getreserv{suspend_until} = $num_res->{'suspend_until'}; >- $getreserv{expirationdate} = $num_res->{'expirationdate'}; >- $getreserv{reserve_id} = $num_res->{'reserve_id'}; >- >- push( @reservloop, \%getreserv ); >- } >- >- # return result to the template >- $template->param( reservloop => \@reservloop, >- countreserv => scalar @reservloop, >- ); >+ $template->param( >+ holds_count => Koha::Database->new()->schema()->resultset('Reserve') >+ ->count( { borrowernumber => $borrowernumber } ) ); > } > > # current alert subscriptions >-- >1.7.2.5
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 11703
:
25105
|
25110
|
25111
|
25213
|
25217
|
25218
|
25220
|
25221
|
25261
|
25262
|
25263
|
25264
|
25271
|
25272
|
25289
|
25290
|
25292
|
25390
|
25391
|
25986
|
25987
|
25988
|
25989
|
25990
|
25991
|
25992
|
25993
|
25994
|
25995
|
25996
|
25997
|
25998
|
25999
|
26081
|
26085
|
26115
|
26131
|
26158
|
26160
|
26241
|
26986
|
26990
|
26991
|
27102
|
27241
|
27338
|
27339
|
27340
|
27341
|
27342
|
27349
|
27350
|
27353
|
27354
|
27356
|
27548
|
27610
|
27717
|
27718
|
27745
|
27746
|
27750
|
27751
|
28025
|
28026
|
28027
|
28028
|
28029
|
29195
|
29196
|
29197
|
29198
|
29199
|
29279
|
29280
|
29281
|
29282
|
29283
|
29284
|
29419
|
29420
|
29432
|
29433
|
29434
|
29438
|
29439
|
29440
|
29444
|
29445
|
29446
|
29447
|
29448
|
29449
|
29450
|
29451
|
29452
|
29453
|
29454
|
29472
|
29473
|
29474
|
29475
|
29476
|
29477
|
29478
|
29479
|
29480
|
29493
|
30228