View | Details | Raw Unified | Return to bug 11703
Collapse All | Expand All

(-)a/Koha/Schema/Result/Issue.pm (-4 / +28 lines)
Lines 184-193 __PACKAGE__->belongs_to( Link Here
184
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ZEh31EKBmURMKxDxI+H3EA
184
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ZEh31EKBmURMKxDxI+H3EA
185
185
186
__PACKAGE__->belongs_to(
186
__PACKAGE__->belongs_to(
187
  "borrower",
187
    "borrower",
188
  "Koha::Schema::Result::Borrower",
188
    "Koha::Schema::Result::Borrower",
189
  { borrowernumber => "borrowernumber" },
189
    { borrowernumber => "borrowernumber" },
190
  { join_type => "LEFT", on_delete => "CASCADE", on_update => "CASCADE" },
190
    { join_type => "LEFT", on_delete => "CASCADE", on_update => "CASCADE" },
191
);
192
193
__PACKAGE__->belongs_to(
194
  "item",
195
  "Koha::Schema::Result::Item",
196
  { itemnumber => "itemnumber" },
197
  {
198
    is_deferrable => 1,
199
    join_type     => "LEFT",
200
    on_delete     => "CASCADE",
201
    on_update     => "CASCADE",
202
  },
203
);
204
205
__PACKAGE__->belongs_to(
206
  "branch",
207
  "Koha::Schema::Result::Branch",
208
  { branchcode => "branchcode" },
209
  {
210
    is_deferrable => 1,
211
    join_type     => "LEFT",
212
    on_delete     => "CASCADE",
213
    on_update     => "CASCADE",
214
  },
191
);
215
);
192
216
193
1;
217
1;
(-)a/api/checkin.pl (+75 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2014 ByWater Solutions
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 2 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use Modern::Perl;
21
22
use CGI;
23
use JSON qw(to_json);
24
25
use C4::Circulation;
26
use C4::Items qw(GetBarcodeFromItemnumber);
27
use C4::Context;
28
use C4::Auth qw(check_cookie_auth);
29
30
use Koha::DateUtils qw(output_pref_due);
31
32
my $input = new CGI;
33
34
my ( $auth_status, $sessionID ) =
35
  check_cookie_auth( $input->cookie('CGISESSID'),
36
    { circulate => 'circulate_remaining_permissions' } );
37
38
if ( $auth_status ne "ok" ) {
39
    exit 0;
40
}
41
42
binmode STDOUT, ":encoding(UTF-8)";
43
print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
44
45
my $itemnumber     = $input->param('itemnumber');
46
my $borrowernumber = $input->param('borrowernumber');
47
my $override_limit = $input->param('override_limit');
48
my $exempt_fine    = $input->param('exempt_fine');
49
my $branchcode     = $input->param('branchcode')
50
  || C4::Context->userenv->{'branch'};
51
52
my $barcode = GetBarcodeFromItemnumber($itemnumber);
53
54
my $data;
55
$data->{itemnumber}     = $itemnumber;
56
$data->{borrowernumber} = $borrowernumber;
57
$data->{branchcode}     = $branchcode;
58
59
if ( C4::Context->preference("InProcessingToShelvingCart") ) {
60
    my $item = GetItem($itemnumber);
61
    if ( $item->{'location'} eq 'PROC' ) {
62
        $item->{'location'} = 'CART';
63
        ModItem( $item, $item->{'biblionumber'}, $item->{'itemnumber'} );
64
    }
65
}
66
67
if ( C4::Context->preference("ReturnToShelvingCart") ) {
68
    my $item = GetItem($itemnumber);
69
    $item->{'location'} = 'CART';
70
    ModItem( $item, $item->{'biblionumber'}, $item->{'itemnumber'} );
71
}
72
73
( $data->{returned} ) = AddReturn( $barcode, $branchcode, $exempt_fine );
74
75
print to_json($data);
(-)a/api/checkouts.pl (+135 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html)
4
5
# Copyright 2014 ByWater Solutions
6
#
7
# This file is part of Koha.
8
#
9
# Koha is free software; you can redistribute it and/or modify it under the
10
# terms of the GNU General Public License as published by the Free Software
11
# Foundation; either version 3 of the License, or (at your option) any later
12
# version.
13
#
14
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
15
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
17
#
18
# You should have received a copy of the GNU General Public License along
19
# with Koha; if not, write to the Free Software Foundation, Inc.,
20
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21
22
use Modern::Perl;
23
24
use CGI;
25
use JSON qw(to_json);
26
27
use C4::Auth qw(check_cookie_auth);
28
use C4::Biblio qw(GetMarcBiblio GetFrameworkCode GetRecordValue );
29
use C4::Charset;
30
use C4::Circulation qw(GetIssuingCharges CanBookBeRenewed GetRenewCount);
31
use C4::Context;
32
33
use Koha::Database;
34
use Koha::DateUtils;
35
36
my $input = new CGI;
37
38
my ( $auth_status, $sessionID ) =
39
  check_cookie_auth( $input->cookie('CGISESSID'),
40
    { circulate => 'circulate_remaining_permissions' } );
41
42
if ( $auth_status ne "ok" ) {
43
    exit 0;
44
}
45
46
my $schema = Koha::Database->new()->schema();
47
48
my @sort_columns = qw/date_due title itype issuedate branchcode itemcallnumber/;
49
50
my @borrowernumber    = $input->param('borrowernumber');
51
my $offset            = $input->param('iDisplayStart');
52
my $results_per_page  = $input->param('iDisplayLength');
53
my $sorting_column    = $sort_columns[ $input->param('iSortCol_0') ];
54
my $sorting_direction = $input->param('sSortDir_0');
55
56
$results_per_page = undef if ( $results_per_page == -1 );
57
58
binmode STDOUT, ":encoding(UTF-8)";
59
print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
60
61
my $checkouts_rs =
62
  $schema->resultset('Issue')->search( { borrowernumber => \@borrowernumber },
63
    { prefetch => { 'item' => 'biblio' }, orderby => 'issuedate' } );
64
65
my $borrower;
66
my @checkouts;
67
while ( my $c = $checkouts_rs->next() ) {
68
69
    # No point in fetching this every time if only one borrower
70
    $borrower = $c->borrower()
71
      if ( !$borrower || @borrowernumber > 1 );
72
73
    my $borrowernumber = $borrower->borrowernumber();
74
    my $itemnumber     = $c->item()->itemnumber();
75
    my $biblionumber   = $c->item()->biblionumber();
76
77
    my ($charge) = GetIssuingCharges(
78
        $c->itemnumber()->itemnumber(),
79
        $borrowernumber
80
    );
81
82
    my ( $can_renew, $can_renew_error ) =
83
      CanBookBeRenewed( $borrowernumber, $itemnumber );
84
85
    my ( $renewals_count, $renewals_allowed, $renewals_remaining ) =
86
      GetRenewCount( $borrowernumber, $itemnumber );
87
88
    push(
89
        @checkouts,
90
        {
91
            DT_RowId           => "$itemnumber-$borrowernumber",
92
            title              => $c->item()->biblio()->title(),
93
            author             => $c->item()->biblio()->author(),
94
            barcode            => $c->item()->barcode(),
95
            itemtype           => $c->item()->effective_itemtype(),
96
            itemnotes          => $c->item()->itemnotes(),
97
            branchcode         => $c->branchcode(),
98
            branchname         => $c->branch->branchname(),
99
            itemcallnumber     => $c->item()->itemcallnumber() || q{},
100
            charge             => $charge,
101
            price              => $c->item->replacementprice() || q{},
102
            can_renew          => $can_renew,
103
            can_renew_error    => $can_renew_error,
104
            itemnumber         => $itemnumber,
105
            borrowernumber     => $borrowernumber,
106
            biblionumber       => $biblionumber,
107
            issuedate          => $c->issuedate(),
108
            date_due           => $c->date_due(),
109
            renewals_count     => $renewals_count,
110
            renewals_allowed   => $renewals_allowed,
111
            renewals_remaining => $renewals_remaining,
112
            issuedate_formatted =>
113
              output_pref( dt_from_string( $c->issuedate() ) ),
114
            date_due_formatted =>
115
              output_pref_due( dt_from_string( $c->date_due() ) ),
116
            subtitle => GetRecordValue(
117
                'subtitle', GetMarcBiblio($biblionumber),
118
                GetFrameworkCode($biblionumber)
119
            ),
120
            borrower => {
121
                surname        => $borrower->surname(),
122
                firstname      => $borrower->firstname(),
123
                cardnumber     => $borrower->cardnumber(),
124
            }
125
        }
126
    );
127
}
128
129
my $data;
130
$data->{'iTotalRecords'}        = scalar @checkouts;                 #FIXME
131
$data->{'iTotalDisplayRecords'} = scalar @checkouts;
132
$data->{'sEcho'}                = $input->param('sEcho') || undef;
133
$data->{'aaData'}               = \@checkouts;
134
135
print to_json($data);
(-)a/api/renew.pl (+63 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2014 ByWater Solutions
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 2 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use Modern::Perl;
21
22
use CGI;
23
use JSON qw(to_json);
24
25
use C4::Circulation;
26
use C4::Context;
27
use C4::Auth qw(check_cookie_auth);
28
29
use Koha::DateUtils qw(output_pref_due);
30
31
my $input = new CGI;
32
33
my ( $auth_status, $sessionID ) =
34
  check_cookie_auth( $input->cookie('CGISESSID'),
35
    { circulate => 'circulate_remaining_permissions' } );
36
37
if ( $auth_status ne "ok" ) {
38
    exit 0;
39
}
40
41
binmode STDOUT, ":encoding(UTF-8)";
42
print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
43
44
my $itemnumber     = $input->param('itemnumber');
45
my $borrowernumber = $input->param('borrowernumber');
46
my $override_limit = $input->param('override_limit');
47
my $branchcode     = $input->param('branchcode')
48
  || C4::Context->userenv->{'branch'};
49
50
my $data;
51
$data->{itemnumber} = $itemnumber;
52
$data->{borrowernumber} = $borrowernumber;
53
$data->{branchcode} = $branchcode;
54
55
( $data->{renew_okay}, $data->{error} ) =
56
  CanBookBeRenewed( $borrowernumber, $itemnumber, $override_limit );
57
58
if ( $data->{renew_okay} ) {
59
    my $date_due = AddRenewal( $borrowernumber, $itemnumber, $branchcode );
60
    $data->{date_due} = output_pref_due( $date_due );
61
}
62
63
print to_json($data);
(-)a/circ/circulation.pl (-108 / +8 lines)
Lines 42-47 use CGI::Session; Link Here
42
use C4::Members::Attributes qw(GetBorrowerAttributes);
42
use C4::Members::Attributes qw(GetBorrowerAttributes);
43
use Koha::Borrower::Debarments qw(GetDebarments);
43
use Koha::Borrower::Debarments qw(GetDebarments);
44
use Koha::DateUtils;
44
use Koha::DateUtils;
45
use Koha::Database;
45
46
46
use Date::Calc qw(
47
use Date::Calc qw(
47
  Today
48
  Today
Lines 96-109 my ( $template, $loggedinuser, $cookie ) = get_template_and_user ( Link Here
96
97
97
my $branches = GetBranches();
98
my $branches = GetBranches();
98
99
99
my @failedrenews = $query->param('failedrenew');    # expected to be itemnumbers 
100
our %renew_failed = ();
101
for (@failedrenews) { $renew_failed{$_} = 1; }
102
103
my @failedreturns = $query->param('failedreturn');
104
our %return_failed = ();
105
for (@failedreturns) { $return_failed{$_} = 1; }
106
107
my $findborrower = $query->param('findborrower') || q{};
100
my $findborrower = $query->param('findborrower') || q{};
108
$findborrower =~ s|,| |g;
101
$findborrower =~ s|,| |g;
109
my $borrowernumber = $query->param('borrowernumber');
102
my $borrowernumber = $query->param('borrowernumber');
Lines 457-556 if ($borrowernumber) { Link Here
457
    $template->param( adultborrower => 1 ) if ( $borrower->{'category_type'} eq 'A' );
450
    $template->param( adultborrower => 1 ) if ( $borrower->{'category_type'} eq 'A' );
458
}
451
}
459
452
460
# make the issued books table.
461
my $todaysissues = '';
462
my $previssues   = '';
463
our @todaysissues   = ();
464
our @previousissues = ();
465
our @relissues      = ();
466
our @relprevissues  = ();
467
my $displayrelissues;
468
469
our $totalprice = 0;
470
471
sub build_issue_data {
472
    my $issueslist = shift;
473
    my $relatives = shift;
474
475
    # split in 2 arrays for today & previous
476
    foreach my $it ( @$issueslist ) {
477
        my $itemtypeinfo = getitemtypeinfo( (C4::Context->preference('item-level_itypes')) ? $it->{'itype'} : $it->{'itemtype'} );
478
479
        # set itemtype per item-level_itype syspref - FIXME this is an ugly hack
480
        $it->{'itemtype'} = ( C4::Context->preference( 'item-level_itypes' ) ) ? $it->{'itype'} : $it->{'itemtype'};
481
482
        ($it->{'charge'}, $it->{'itemtype_charge'}) = GetIssuingCharges(
483
            $it->{'itemnumber'}, $it->{'borrowernumber'}
484
        );
485
        $it->{'charge'} = sprintf("%.2f", $it->{'charge'});
486
        my ($can_renew, $can_renew_error) = CanBookBeRenewed( 
487
            $it->{'borrowernumber'},$it->{'itemnumber'}
488
        );
489
        $it->{"renew_error_${can_renew_error}"} = 1 if defined $can_renew_error;
490
        my $restype = C4::Reserves::GetReserveStatus( $it->{'itemnumber'} );
491
        $it->{'can_renew'} = $can_renew;
492
        $it->{'can_confirm'} = !$can_renew && !$restype;
493
        $it->{'renew_error'} = ( $restype eq "Waiting" or $restype eq "Reserved" ) ? 1 : 0;
494
        $it->{'checkoutdate'} = C4::Dates->new($it->{'issuedate'},'iso')->output('syspref');
495
        $it->{'issuingbranchname'} = GetBranchName($it->{'branchcode'});
496
497
        $totalprice += $it->{'replacementprice'} || 0;
498
        $it->{'itemtype'} = $itemtypeinfo->{'description'};
499
        $it->{'itemtype_image'} = $itemtypeinfo->{'imageurl'};
500
        $it->{'dd_sort'} = $it->{'date_due'};
501
        $it->{'dd'} = output_pref($it->{'date_due'});
502
        $it->{'displaydate_sort'} = $it->{'issuedate'};
503
        $it->{'displaydate'} = output_pref($it->{'issuedate'});
504
        #$it->{'od'} = ( $it->{'date_due'} lt $todaysdate ) ? 1 : 0 ;
505
        $it->{'od'} = $it->{'overdue'};
506
        $it->{'subtitle'} = GetRecordValue('subtitle', GetMarcBiblio($it->{biblionumber}), GetFrameworkCode($it->{biblionumber}));
507
        $it->{'renew_failed'} = $renew_failed{$it->{'itemnumber'}};
508
        $it->{'return_failed'} = $return_failed{$it->{'barcode'}};
509
510
        if ( ( $it->{'issuedate'} && $it->{'issuedate'} gt $todaysdate )
511
          || ( $it->{'lastreneweddate'} && $it->{'lastreneweddate'} gt $todaysdate ) ) {
512
            (!$relatives) ? push @todaysissues, $it : push @relissues, $it;
513
        } else {
514
            (!$relatives) ? push @previousissues, $it : push @relprevissues, $it;
515
        }
516
        ($it->{'renewcount'},$it->{'renewsallowed'},$it->{'renewsleft'}) = C4::Circulation::GetRenewCount($it->{'borrowernumber'},$it->{'itemnumber'}); #Add renewal count to item data display
517
    }
518
}
519
520
if ($borrower) {
521
522
    # Getting borrower relatives
523
    my @relborrowernumbers = GetMemberRelatives($borrower->{'borrowernumber'});
524
    #push @borrowernumbers, $borrower->{'borrowernumber'};
525
526
    # get each issue of the borrower & separate them in todayissues & previous issues
527
    my $issueslist = GetPendingIssues($borrower->{'borrowernumber'});
528
    my $relissueslist = [];
529
    if ( @relborrowernumbers ) {
530
        $relissueslist = GetPendingIssues(@relborrowernumbers);
531
    }
532
533
    build_issue_data($issueslist, 0);
534
    build_issue_data($relissueslist, 1);
535
  
536
    $displayrelissues = scalar($relissueslist);
537
538
    if ( C4::Context->preference( "todaysIssuesDefaultSortOrder" ) eq 'asc' ) {
539
        @todaysissues   = sort { $a->{'timestamp'} cmp $b->{'timestamp'} } @todaysissues;
540
    }
541
    else {
542
        @todaysissues   = sort { $b->{'timestamp'} cmp $a->{'timestamp'} } @todaysissues;
543
    }
544
545
    if ( C4::Context->preference( "previousIssuesDefaultSortOrder" ) eq 'asc' ){
546
        @previousissues = sort { $a->{'date_due'} cmp $b->{'date_due'} } @previousissues;
547
    }
548
    else {
549
        @previousissues = sort { $b->{'date_due'} cmp $a->{'date_due'} } @previousissues;
550
    }
551
}
552
553
554
my @values;
453
my @values;
555
my %labels;
454
my %labels;
556
my $CGIselectborrower;
455
my $CGIselectborrower;
Lines 702-707 if (C4::Context->preference('ExtendedPatronAttributes')) { Link Here
702
    );
601
    );
703
}
602
}
704
603
604
my @relatives = GetMemberRelatives( $borrower->{'borrowernumber'} );
605
my $relatives_issues_count =
606
  Koha::Database->new()->schema()->resultset('Issue')
607
  ->count( { borrowernumber => \@relatives } );
608
705
$template->param(
609
$template->param(
706
    lib_messages_loop => $lib_messages_loop,
610
    lib_messages_loop => $lib_messages_loop,
707
    bor_messages_loop => $bor_messages_loop,
611
    bor_messages_loop => $bor_messages_loop,
Lines 739-751 $template->param( Link Here
739
    duedatespec       => $duedatespec,
643
    duedatespec       => $duedatespec,
740
    message           => $message,
644
    message           => $message,
741
    CGIselectborrower => $CGIselectborrower,
645
    CGIselectborrower => $CGIselectborrower,
742
    totalprice        => sprintf('%.2f', $totalprice),
743
    totaldue          => sprintf('%.2f', $total),
646
    totaldue          => sprintf('%.2f', $total),
744
    todayissues       => \@todaysissues,
745
    previssues        => \@previousissues,
746
    relissues			=> \@relissues,
747
    relprevissues		=> \@relprevissues,
748
    displayrelissues		=> $displayrelissues,
749
    inprocess         => $inprocess,
647
    inprocess         => $inprocess,
750
    memberofinstution => $member_of_institution,
648
    memberofinstution => $member_of_institution,
751
    CGIorganisations  => $CGIorganisations,
649
    CGIorganisations  => $CGIorganisations,
Lines 758-763 $template->param( Link Here
758
    SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
656
    SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
759
    AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
657
    AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
760
    RoutingSerials => C4::Context->preference('RoutingSerials'),
658
    RoutingSerials => C4::Context->preference('RoutingSerials'),
659
    relatives_issues_count => $relatives_issues_count,
660
    relatives_borrowernumbers => \@relatives,
761
);
661
);
762
662
763
# save stickyduedate to session
663
# save stickyduedate to session
(-)a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css (-1 / +1 lines)
Lines 270-276 tr.even td, tr.even.highlight td { Link Here
270
    border-right : 1px solid #BCBCBC;
270
    border-right : 1px solid #BCBCBC;
271
}
271
}
272
272
273
td.od {
273
.overdue td.od {
274
	color : #cc0000;
274
	color : #cc0000;
275
	font-weight : bold;
275
	font-weight : bold;
276
}
276
}
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/pages/circulation.js (-40 / +114 lines)
Lines 1-57 Link Here
1
$(document).ready(function() {
1
$(document).ready(function() {
2
    $('#patronlists').tabs();
2
    // Handle the select all/none links for checkouts table columns
3
    var allcheckboxes = $(".checkboxed");
3
    $("#CheckAllRenewals").on("click",function(){
4
    $("#renew_all").on("click",function(){
4
        $("#UncheckAllCheckins").click();
5
        allcheckboxes.checkCheckboxes(":input[name*=items]");
5
        $(".renew:visible").attr("checked", "checked" );
6
        allcheckboxes.unCheckCheckboxes(":input[name*=barcodes]");
6
        return false;
7
    });
8
    $("#CheckAllitems").on("click",function(){
9
        allcheckboxes.checkCheckboxes(":input[name*=items]");
10
        allcheckboxes.unCheckCheckboxes(":input[name*=barcodes]"); return false;
11
    });
7
    });
12
    $("#CheckNoitems").on("click",function(){
8
    $("#UncheckAllRenewals").on("click",function(){
13
        allcheckboxes.unCheckCheckboxes(":input[name*=items]"); return false;
9
        $(".renew:visible").removeAttr("checked");
10
        return false;
14
    });
11
    });
15
    $("#CheckAllreturns").on("click",function(){
12
16
        allcheckboxes.checkCheckboxes(":input[name*=barcodes]");
13
    $("#CheckAllCheckins").on("click",function(){
17
        allcheckboxes.unCheckCheckboxes(":input[name*=items]"); return false;
14
        $("#UncheckAllRenewals").click();
15
        $(".checkin:visible").attr("checked", "checked" );
16
        return false;
18
    });
17
    });
19
    $("#CheckNoreturns" ).on("click",function(){
18
    $("#UncheckAllCheckins").on("click",function(){
20
        allcheckboxes.unCheckCheckboxes(":input[name*=barcodes]"); return false;
19
        $(".checkin:visible").removeAttr("checked");
20
        return false;
21
    });
21
    });
22
22
23
    $("#CheckAllexports").on("click",function(){
23
    $("#CheckAllExports").on("click",function(){
24
        allcheckboxes.checkCheckboxes(":input[name*=biblionumbers]");
24
        $(".export:visible").attr("checked", "checked" );
25
        return false;
25
        return false;
26
    });
26
    });
27
    $("#CheckNoexports").on("click",function(){
27
    $("#UncheckAllExports").on("click",function(){
28
        allcheckboxes.unCheckCheckboxes(":input[name*=biblionumbers]");
28
        $(".export:visible").removeAttr("checked");
29
        return false;
29
        return false;
30
    });
30
    });
31
31
32
    $("#relrenew_all").on("click",function(){
32
    // Don't allow both return and renew checkboxes to be checked
33
        allcheckboxes.checkCheckboxes(":input[name*=items]");
33
    $(document).on("change", '.renew', function(){
34
        allcheckboxes.unCheckCheckboxes(":input[name*=barcodes]");
34
        if ( $(this).is(":checked") ) {
35
    });
35
            $( "#checkin_" + $(this).val() ).removeAttr("checked");
36
    $("#relCheckAllitems").on("click",function(){
36
        }
37
        allcheckboxes.checkCheckboxes(":input[name*=items]");
38
        allcheckboxes.unCheckCheckboxes(":input[name*=barcodes]"); return false;
39
    });
37
    });
40
    $("#relCheckNoitems").on("click",function(){
38
    $(document).on("change", '.checkin', function(){
41
        allcheckboxes.unCheckCheckboxes(":input[name*=items]"); return false;
39
        if ( $(this).is(":checked") ) {
40
            $( "#renew_" + $(this).val() ).removeAttr("checked");
41
        }
42
    });
42
    });
43
    $("#relCheckAllreturns").on("click",function(){
43
44
        allcheckboxes.checkCheckboxes(":input[name*=barcodes]");
44
    // Handle renewals
45
        allcheckboxes.unCheckCheckboxes(":input[name*=items]"); return false;
45
    $("#RenewCheckinChecked").on("click",function(){
46
        $(".checkin:checked:visible").each(function() {
47
            itemnumber = $(this).val();
48
49
            $(this).replaceWith("<img id='checkin_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");       
50
51
            params = { 
52
                itemnumber: itemnumber, 
53
                borrowernumber: borrowernumber,
54
                branchcode: branchcode
55
            };
56
57
            $.post( "/cgi-bin/koha/api/checkin.pl", params, function( data ) {
58
                id = "#checkin_" + data.itemnumber;
59
60
                content = "";
61
                if ( data.returned ) {
62
                    content = _("Returned");
63
                } else {
64
                    content = _("Unable to return");
65
                }
66
                    
67
                $(id).replaceWith( content );
68
            }, "json")
69
        });
70
71
        $(".renew:checked:visible").each(function() {
72
            var override_limit = $("#override_limit").is(':checked') ? 1 : 0;
73
74
            var itemnumber = $(this).val();
75
76
            $(this).replaceWith("<img id='renew_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");       
77
78
            var params = { 
79
                itemnumber: itemnumber, 
80
                borrowernumber: borrowernumber,
81
                branchcode: branchcode,
82
                override_limit: override_limit
83
            };
84
85
            $.post( "/cgi-bin/koha/api/renew.pl", params, function( data ) {
86
                var id = "#renew_" + data.itemnumber;
87
88
                var content = "";
89
                if ( data.renew_okay ) {
90
                    content = _("Renewed, due: ") + data.date_due;
91
                } else {
92
                    content = _("Renew failed: ");
93
                    if ( data.error == "no_checkout" ) {
94
                        content += _("not checked out");
95
                    } else if ( data.error == "too_many" ) {
96
                        content += _("too many renewals");
97
                    } else if ( data.error == "on_reserve" ) {
98
                        content += _("on reserve");
99
                    } else if ( data.error ) {
100
                        content += data.error;
101
                    } else {
102
                        content += _("reason unknown");
103
                    }
104
                }
105
                    
106
                $(id).replaceWith( content );
107
            }, "json")
108
        });
109
110
        // Prevent form submit
111
        return false;
46
    });
112
    });
47
    $("#relCheckNoreturns").on("click",function(){
113
48
        allcheckboxes.unCheckCheckboxes(":input[name*=barcodes]"); return false;
114
    $("#RenewAll").on("click",function(){
115
        $("#CheckAllRenewals").click();
116
        $("#UncheckAllCheckins").click();
117
        $("#RenewCheckinChecked").click();
118
119
        // Prevent form submit
120
        return false;
49
    });
121
    });
122
123
    $('#patronlists').tabs();
124
50
    $("#messages ul").after("<a href=\"#\" id=\"addmessage\">"+MSG_ADD_MESSAGE+"</a>");
125
    $("#messages ul").after("<a href=\"#\" id=\"addmessage\">"+MSG_ADD_MESSAGE+"</a>");
126
51
    $("#borrower_messages .cancel").on("click",function(){
127
    $("#borrower_messages .cancel").on("click",function(){
52
        $("#add_message_form").hide();
128
        $("#add_message_form").hide();
53
        $("#addmessage").show();
129
        $("#addmessage").show();
54
    });
130
    });
131
55
    $("#addmessage").on("click",function(){
132
    $("#addmessage").on("click",function(){
56
        $(this).hide();
133
        $(this).hide();
57
        $("#add_message_form").show();
134
        $("#add_message_form").show();
Lines 76-83 $(document).ready(function() { Link Here
76
        export_checkouts(export_format);
153
        export_checkouts(export_format);
77
        return false;
154
        return false;
78
    });
155
    });
156
79
    // Clicking the table cell checks the checkbox inside it
157
    // Clicking the table cell checks the checkbox inside it
80
    $("td").on("click",function(e){
158
    $(document).on("click", 'td', function(e){
81
        if(e.target.tagName.toLowerCase() == 'td'){
159
        if(e.target.tagName.toLowerCase() == 'td'){
82
          $(this).find("input:checkbox:visible").each( function() {
160
          $(this).find("input:checkbox:visible").each( function() {
83
            $(this).click();
161
            $(this).click();
Lines 107-119 function export_checkouts(format) { Link Here
107
    } else if (format == 'iso2709') {
185
    } else if (format == 'iso2709') {
108
        $("#dont_export_item").val(1);
186
        $("#dont_export_item").val(1);
109
    }
187
    }
110
    document.issues.action="/cgi-bin/koha/tools/export.pl";
188
111
    document.getElementById("export_format").value = format;
189
    document.getElementById("export_format").value = format;
112
    document.issues.submit();
190
    document.issues.submit();
113
114
    /* Reset form action to its initial value */
115
    document.issues.action="/cgi-bin/koha/reserve/renewscript.pl";
116
117
}
191
}
118
192
119
function validate1(date) {
193
function validate1(date) {
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (-355 / +345 lines)
Lines 13-33 Link Here
13
</title>
13
</title>
14
[% INCLUDE 'doc-head-close.inc' %]
14
[% INCLUDE 'doc-head-close.inc' %]
15
[% INCLUDE 'calendar.inc' %]
15
[% INCLUDE 'calendar.inc' %]
16
[% IF ( UseTablesortForCirc ) %]<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
16
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
17
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script>
17
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script>
18
[% INCLUDE 'datatables-strings.inc' %]
18
[% INCLUDE 'datatables-strings.inc' %]
19
<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script>[% END %]
19
<!-- <script type="text/javascript" src="[% themelang %]/js/datatables.js"></script> -->
20
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
20
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
21
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery-ui-timepicker-addon.js"></script>
21
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery-ui-timepicker-addon.js"></script>
22
<script type="text/javascript" src="[% themelang %]/js/pages/circulation.js"></script>
22
<script type="text/javascript" src="[% themelang %]/js/pages/circulation.js"></script>
23
<script type="text/javascript">
23
<script type="text/javascript">
24
//<![CDATA[
24
//<![CDATA[
25
/* Set some variable needed in circulation.js */
26
var interface = "[% interface %]";
27
var theme = "[% theme %]";
28
var borrowernumber = "[% borrowernumber %]";
29
var branchcode = "[% branch %]";
30
var exports_enabled = "[% exports_enabled %]";
31
var relatives_borrowernumbers = new Array();
32
[% FOREACH b IN relatives_borrowernumbers %]
33
    relatives_borrowernumbers.push("[% b %]");
34
[% END %]
35
25
var MSG_ADD_MESSAGE = _("Add a new message");
36
var MSG_ADD_MESSAGE = _("Add a new message");
26
var MSG_EXPORT_SELECT_CHECKOUTS = _("You must select checkout(s) to export");
37
var MSG_EXPORT_SELECT_CHECKOUTS = _("You must select checkout(s) to export");
27
[% IF ( UseTablesortForCirc && dateformat == 'metric' ) %]dt_add_type_uk_date();[% END %]
38
[% IF ( UseTablesortForCirc && dateformat == 'metric' ) %]dt_add_type_uk_date();[% END %]
28
[% IF ( borrowernumber ) %]if($.cookie("holdfor") != [% borrowernumber %]){ $.cookie("holdfor",null, { path: "/", expires: 0 }); }[% ELSE %]$.cookie("holdfor",null, { path: "/", expires: 0 });[% END %]
39
[% IF ( borrowernumber ) %]if($.cookie("holdfor") != [% borrowernumber %]){ $.cookie("holdfor",null, { path: "/", expires: 0 }); }[% ELSE %]$.cookie("holdfor",null, { path: "/", expires: 0 });[% END %]
29
[% UNLESS ( borrowernumber ) %][% UNLESS ( CGIselectborrower ) %]window.onload=function(){ $('#findborrower').focus(); };[% END %][% END %]
40
[% UNLESS ( borrowernumber ) %][% UNLESS ( CGIselectborrower ) %]window.onload=function(){ $('#findborrower').focus(); };[% END %][% END %]
30
	 $(document).ready(function() {
41
	 $(document).ready(function() {
42
        var ymd = $.datepicker.formatDate('yy-mm-dd', new Date());
43
31
        $('#patronlists').tabs([% IF ( UseTablesortForCirc ) %]{
44
        $('#patronlists').tabs([% IF ( UseTablesortForCirc ) %]{
32
            // Correct table sizing for tables hidden in tabs
45
            // Correct table sizing for tables hidden in tabs
33
            // http://www.datatables.net/examples/api/tabs_and_scrolling.html
46
            // http://www.datatables.net/examples/api/tabs_and_scrolling.html
Lines 38-86 var MSG_EXPORT_SELECT_CHECKOUTS = _("You must select checkout(s) to export"); Link Here
38
                }
51
                }
39
            }
52
            }
40
        }[% END %]);
53
        }[% END %]);
41
        [% IF ( UseTablesortForCirc ) %]
42
        $("#issuest").dataTable($.extend(true, {}, dataTablesDefaults, {
43
            "sDom": 't',
44
            "aaSorting": [],
45
            "aoColumnDefs": [
46
                { "aTargets": [ -1, -2[% IF ( exports_enabled ) %], -3[% END %] ], "bSortable": false, "bSearchable": false }
47
            ],
48
            "aoColumns": [
49
                { "sType": "title-string" },{ "sType": "html" },null,{ "sType": "title-string" },null,null,null,null,null,null[% IF ( exports_enabled ) %],null[% END %]
50
            ],
51
            "bPaginate": false
52
        }));
53
54
54
        $("#relissuest").dataTable($.extend(true, {}, dataTablesDefaults, {
55
        $("#issues-table").dataTable({
55
            "sDom": 't',
56
            "sDom": "<'row-fluid'<'span6'><'span6'>r>t<'row-fluid'>t",
56
            "aaSorting": [],
57
            "aaSorting": [],
57
            "aoColumns": [
58
            "aoColumns": [
58
                { "sType": "title-string" },{ "sType": "html" },null,{ "sType": "title-string" },null,null,null,null,{ "sType": "html" }
59
                { 
60
                    "mDataProp": function( oObj ) {
61
                        var today = new Date();
62
                        var due = new Date( oObj.date_due );
63
                        if ( today > due ) {
64
                            return "<span class='overdue'>" + oObj.date_due_formatted + "</span>"; 
65
                        } else {
66
                            return oObj.date_due_formatted;
67
                        }
68
                    }
69
                },
70
                { 
71
                    "mDataProp": function ( oObj ) {
72
                        title = "<a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber=" 
73
                              + oObj.biblionumber 
74
                              + "'>" 
75
                              + oObj.title;
76
77
                        $.each(oObj.subtitle, function( index, value ) {
78
                                  title += " " + value.subfield;
79
                        });
80
81
                        title += "</a>";
82
83
                        if ( oObj.author ) {
84
                            title += " " + _("by") + " " + oObj.author;
85
                        }
86
87
                        if ( oObj.itemnotes ) {
88
                            var span_class = "";
89
                            if ( $.datepicker.formatDate('yy-mm-dd', new Date(oObj.issuedate) ) == ymd ) {
90
                                span_class = "circ-hlt";
91
                            }
92
                            title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>"
93
                        }
94
95
                        title += " " 
96
                              + "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=" 
97
                              + oObj.biblionumber 
98
                              + "&itemnumber=" 
99
                              + oObj.itemnumber 
100
                              + "#" 
101
                              + oObj.itemnumber 
102
                              + "'>" 
103
                              + oObj.barcode 
104
                              + "</a>";
105
106
                        return title;
107
                    }
108
                },
109
                { "mDataProp": "itemtype" },
110
                { "mDataProp": "issuedate" },
111
                { "mDataProp": "branchname" },
112
                { "mDataProp": "itemcallnumber" },
113
                { "mDataProp": "charge" },
114
                { "mDataProp": "price" },
115
                { 
116
                    "bSortable": false,
117
                    "mDataProp": function ( oObj ) {
118
                        var content = "";
119
                        var span_style = "";
120
                        var span_class = "";
121
122
                        content += "<span style='padding: 0 1em;'>" + oObj.renewals_count + "</span>";
123
124
                        if ( oObj.can_renew ) {
125
                            // Do nothing 
126
                        } else if ( oObj.can_renew_error == "on_reserve" ) {
127
                            content += "<span class='renewals-disabled'>"
128
                                    + "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + _("On hold") + "</a>"
129
                                    + "</span>";
130
131
                            span_style = "display: none";
132
                            span_class = "renewals-allowed";
133
                        } else if ( oObj.can_renew_error == "too_many" ) {
134
                            content += "<span class='renewals-disabled'>"
135
                                    + _("Not renewable")
136
                                    + "</span>";
137
138
                            span_style = "display: none";
139
                            span_class = "renewals-allowed";
140
                        } else {
141
                            content += "<span class='renewals-disabled'>" 
142
                                    + oObj.can_renew_error 
143
                                    + "</span>";
144
145
                            span_style = "display: none";
146
                            span_class = "renewals-allowed";
147
                        }
148
149
                        content += "<span class='" + span_class + "' style='" + span_style + "'>"
150
                                +  "<input type='checkbox' class='renew' id='renew_" + oObj.itemnumber + "' name='renew' value='" + oObj.itemnumber +"'/>"
151
                                +  "</span>";
152
153
                        if ( oObj.renewals_remaining ) {
154
                            content += "<span class='renewals'>(" 
155
                                    + oObj.renewals_remaining 
156
                                    + " " + _("of") + " " 
157
                                    + oObj.renewals_allowed + " " 
158
                                    + _("renewals remaining") + ")</span>"
159
                        }
160
161
162
                        return content;
163
                    }
164
                },
165
                { 
166
                    "bSortable": false,
167
                    "mDataProp": function ( oObj ) {
168
                        if ( oObj.can_renew_error == "on_reserve" ) {
169
                            return "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + _("On hold") + "</a>";
170
                        } else {
171
                            return "<input type='checkbox' class='checkin' id='checkin_" + oObj.itemnumber + "' name='checkin' value='" + oObj.itemnumber +"'></input>";
172
                        }
173
                    }
174
                },
175
                {
176
                    "bVisible": exports_enabled ? true : false,
177
                    "bSortable": false,
178
                    "mDataProp": function ( oObj ) {
179
                        return "<input type='checkbox' class='export' id='export_" + oObj.biblionumber + "' name='biblionumbers' value='" + oObj.biblionumber + "' />";
180
                    }
181
                }
59
            ],
182
            ],
60
            "bPaginate": false
183
            "bPaginate": false,
61
        }));
184
            "bProcessing": true,
185
            "bServerSide": true,
186
            "sAjaxSource": '/cgi-bin/koha/api/checkouts.pl',
187
            "fnServerData": function ( sSource, aoData, fnCallback ) {
188
                aoData.push( { "name": "borrowernumber", "value": borrowernumber } );
189
190
                $.getJSON( sSource, aoData, function (json) {
191
                    fnCallback(json)
192
                } );
193
            },
194
        });
195
196
        // Don't load relatives' issues table unless it is clicked on
197
        var relativesIssuesTable;
198
        $("#relatives-issues-tab").click( function() { 
199
            if ( ! relativesIssuesTable ) {
200
                relativesIssuesTable = $("#relatives-issues-table").dataTable({
201
                    "sDom": "<'row-fluid'<'span6'><'span6'>r>t<'row-fluid'>t",
202
                    "aaSorting": [],
203
                    "aoColumns": [
204
                        { 
205
                            "mDataProp": function( oObj ) {
206
                                var today = new Date();
207
                                var due = new Date( oObj.date_due );
208
                                if ( today > due ) {
209
                                    return "<span class='overdue'>" + oObj.date_due_formatted + "</span>"; 
210
                                } else {
211
                                    return oObj.date_due_formatted;
212
                                }
213
                            }
214
                        },
215
                        { 
216
                            "mDataProp": function ( oObj ) {
217
                                title = "<a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber=" 
218
                                      + oObj.biblionumber 
219
                                      + "'>" 
220
                                      + oObj.title;
221
222
                                $.each(oObj.subtitle, function( index, value ) {
223
                                          title += " " + value.subfield;
224
                                });
225
226
                                title += "</a>";
227
228
                                if ( oObj.author ) {
229
                                    title += " " + _("by") + " " + oObj.author;
230
                                }
231
232
                                if ( oObj.itemnotes ) {
233
                                    var span_class = "";
234
                                    if ( $.datepicker.formatDate('yy-mm-dd', new Date(oObj.issuedate) ) == ymd ) {
235
                                        span_class = "circ-hlt";
236
                                    }
237
                                    title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>"
238
                                }
239
240
                                title += " " 
241
                                      + "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=" 
242
                                      + oObj.biblionumber 
243
                                      + "&itemnumber=" 
244
                                      + oObj.itemnumber 
245
                                      + "#" 
246
                                      + oObj.itemnumber 
247
                                      + "'>" 
248
                                      + oObj.barcode 
249
                                      + "</a>";
250
251
                                return title;
252
                            }
253
                        },
254
                        { "mDataProp": "itemtype" },
255
                        { "mDataProp": "issuedate" },
256
                        { "mDataProp": "branchname" },
257
                        { "mDataProp": "itemcallnumber" },
258
                        { "mDataProp": "charge" },
259
                        { "mDataProp": "price" },
260
                        { 
261
                            "mDataProp": function( oObj ) {
262
                                return "<a href='/cgi-bin/koha/members/moremember.pl?borrowernumber=" + oObj.borrowernumber + "'>" 
263
                                     + oObj.borrower.firstname + " " + oObj.borrower.surname + " (" + oObj.borrower.cardnumber + ")</a>"
264
                            }
265
                        },
266
                    ],
267
                    "bPaginate": false,
268
                    "bProcessing": true,
269
                    "bServerSide": true,
270
                    "sAjaxSource": '/cgi-bin/koha/api/checkouts.pl',
271
                    "fnServerData": function ( sSource, aoData, fnCallback ) {
272
                        $.each(relatives_borrowernumbers, function( index, value ) {
273
                            aoData.push( { "name": "borrowernumber", "value": value } );
274
                        });
275
276
                        $.getJSON( sSource, aoData, function (json) {
277
                            fnCallback(json)
278
                        } );
279
                    },
280
                });
281
            }
282
        });
283
284
62
285
63
        $("#issuest").on("sort",function() {
286
        $("#issues-table").on("sort",function() {
64
            $("#previous").hide();  // Don't want to see "previous checkouts" header sorted with other rows
287
            $("#previous").hide();  // Don't want to see "previous checkouts" header sorted with other rows
65
        });
288
        });
66
        $("#relissuest").on("sort",function() {
289
        $("#relatives-issues-table").on("sort",function() {
67
            $("#relprevious").hide();  // Don't want to see "previous checkouts" header sorted with other rows
290
            $("#relprevious").hide();  // Don't want to see "previous checkouts" header sorted with other rows
68
        });
291
        });
69
        [% END %]
292
70
        [% IF ( AllowRenewalLimitOverride ) %]
293
        [% IF ( AllowRenewalLimitOverride ) %]
71
        $( '#override_limit' ).click( function () {
294
            $( '#override_limit' ).click( function () {
72
            if ( this.checked ) {
295
                if ( this.checked ) {
73
                $( '.renewals-allowed' ).show(); $( '.renewals-disabled' ).hide();
296
                    $( '.renewals-allowed' ).show(); $( '.renewals-disabled' ).hide();
74
            } else {
297
                } else {
75
                $( '.renewals-allowed' ).hide(); $( '.renewals-disabled' ).show();
298
                    $( '.renewals-allowed' ).hide(); $( '.renewals-disabled' ).show();
76
            }
299
                }
77
        } ).attr( 'checked', false );
300
            } ).attr( 'checked', false );
78
        [% END %][% IF !( CircAutoPrintQuickSlip == 'clear' ) %]
301
        [% END %]
79
        // listen submit to trigger qslip on empty checkout
302
            
80
        $('#mainform').bind('submit',function() {
303
        [% IF !( CircAutoPrintQuickSlip == 'clear' ) %]
81
          if ($('#barcode').val() == '') {
304
            // listen submit to trigger qslip on empty checkout
82
            return printx_window( '[% CircAutoPrintQuickSlip %]' ); }
305
            $('#mainform').bind('submit',function() {
83
        });[% END %]
306
                if ($('#barcode').val() == '') {
307
                    return printx_window( '[% CircAutoPrintQuickSlip %]' ); 
308
                }
309
            });
310
        [% END %]
84
311
85
    [% IF ( CAN_user_circulate_override_renewals ) %]
312
    [% IF ( CAN_user_circulate_override_renewals ) %]
86
    [% IF ( AllowRenewalLimitOverride ) %]
313
    [% IF ( AllowRenewalLimitOverride ) %]
Lines 515-521 No patron matched <span class="ex">[% message %]</span> Link Here
515
    [% ELSE %]
742
    [% ELSE %]
516
	    <input type="text" name="barcode" id="barcode" class="barcode focus" size="14" />
743
	    <input type="text" name="barcode" id="barcode" class="barcode focus" size="14" />
517
    [% END %]
744
    [% END %]
518
    <input type="submit" value="Check Out" />
745
    <button type="submit" class="btn"><i class="icon-barcode"></i> Check out</button>
519
746
520
    [% IF ( SpecifyDueDate ) %]<div class="date-select">
747
    [% IF ( SpecifyDueDate ) %]<div class="date-select">
521
        <div class="hint">Specify due date [% INCLUDE 'date-format.inc' %]: </div>
748
        <div class="hint">Specify due date [% INCLUDE 'date-format.inc' %]: </div>
Lines 527-533 No patron matched <span class="ex">[% message %]</span> Link Here
527
[% ELSE %]
754
[% ELSE %]
528
<input type="checkbox" id="stickyduedate" onclick="this.form.barcode.focus();" name="stickyduedate" />
755
<input type="checkbox" id="stickyduedate" onclick="this.form.barcode.focus();" name="stickyduedate" />
529
[% END %]
756
[% END %]
530
          <input type="button" class="action" id="cleardate" value="Clear" name="cleardate" onclick="this.checked = false; this.form.duedatespec.value = ''; this.form.stickyduedate.checked = false; this.form.barcode.focus(); return false;" />
757
          <button class="btn btn-small action" id="cleardate" name="cleardate" onclick="this.checked = false; this.form.duedatespec.value = ''; this.form.stickyduedate.checked = false; this.form.barcode.focus(); return false;" ><i class="icon-remove-circle"></i> Clear</button>
531
</div>[% END %]
758
</div>[% END %]
532
          <input type="hidden" name="borrowernumber" id="borrowernumber" value="[% borrowernumber %]" />
759
          <input type="hidden" name="borrowernumber" id="borrowernumber" value="[% borrowernumber %]" />
533
          <input type="hidden" name="branch" value="[% branch %]" />
760
          <input type="hidden" name="branch" value="[% branch %]" />
Lines 686-1031 No patron matched <span class="ex">[% message %]</span> Link Here
686
<div class="yui-g"><div id="patronlists" class="toptabs">
913
<div class="yui-g"><div id="patronlists" class="toptabs">
687
914
688
<ul>
915
<ul>
689
<li>    [% IF ( issuecount ) %]
916
    <li>
917
        [% IF ( issuecount ) %]
690
            <a href="#checkouts">[% issuecount %] Checkout(s)</a>
918
            <a href="#checkouts">[% issuecount %] Checkout(s)</a>
691
    [% ELSE %]
919
        [% ELSE %]
692
            <a href="#checkouts">0 Checkouts</a>
920
            <a href="#checkouts">0 Checkouts</a>
693
    [% END %]</li>
921
        [% END %]
694
[% IF ( displayrelissues ) %]
922
    </li>
695
<li><a href="#relissues">Relatives' checkouts</a></li>
923
696
[% END %]
924
    [% IF relatives_issues_count %]
697
<li>[% IF ( countreserv ) %]
925
        <li><a id="relatives-issues-tab" href="#relatives-issues">Relatives' checkouts</a></li>
926
    [% END %]
927
928
    <li>
929
        [% IF ( countreserv ) %]
698
            <a href="#reserves">[% countreserv %] Hold(s)</a>
930
            <a href="#reserves">[% countreserv %] Hold(s)</a>
699
    [% ELSE %]
931
        [% ELSE %]
700
            <a href="#reserves">0 Holds</a>
932
            <a href="#reserves">0 Holds</a>
701
    [% END %]</li>
933
        [% END %]
702
    <li><a id="debarments-tab-link" href="#reldebarments">[% debarments.size %] Restrictions</a></li>
934
    </li>
703
935
936
    <li><a id="debarments-tab-link" href="#reldebarments">[% debarments.size %] Restrictions</a></li>
704
</ul>
937
</ul>
705
938
706
<!-- SUMMARY : TODAY & PREVIOUS ISSUES -->
939
<!-- SUMMARY : TODAY & PREVIOUS ISSUES -->
707
<div id="checkouts">
940
<div id="checkouts">
708
[% IF ( issuecount ) %]
941
[% IF ( issuecount ) %]
709
    <form name="issues" action="/cgi-bin/koha/reserve/renewscript.pl" method="post" class="checkboxed">
942
    <form name="issues" action="/cgi-bin/koha/tools/export.pl" method="post" class="checkboxed">
710
    <input type="hidden" value="circ" name="destination" />
943
        <table id="issues-table">
711
    <input type="hidden" name="cardnumber" value="[% cardnumber %]" />
944
            <thead>
712
    <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
945
                <tr>
713
    <input type="hidden" name="branch" value="[% branch %]" />
946
                    <th scope="col">Due date</th>
714
        <table id="issuest">
947
                    <th scope="col">Title</th>
715
    <thead><tr>
948
                    <th scope="col">Item type</th>
716
        <th scope="col">Due date</th>
949
                    <th scope="col">Checked out on</th>
717
        <th scope="col">Title</th>
950
                    <th scope="col">Checked out from</th>
718
        <th scope="col">Item type</th>
951
                    <th scope="col">Call no</th>
719
        <th scope="col">Checked out on</th>
952
                    <th scope="col">Charge</th>
720
        <th scope="col">Checked out from</th>
953
                    <th scope="col">Price</th>
721
        <th scope="col">Call no</th>
954
                    <th scope="col">Renew <p class="column-tool"><a href="#" id="CheckAllRenewals">select all</a> | <a href="#" id="UncheckAllRenewals">none</a></p></th>
722
        <th scope="col">Charge</th>
955
                    <th scope="col">Check in <p class="column-tool"><a href="#" id="CheckAllCheckins">select all</a> | <a href="#" id="UncheckAllCheckins">none</a></p></th>
723
        <th scope="col">Price</th>
956
                    <th scope="col">Export <p class="column-tool"><a href="#" id="CheckAllExports">select all</a> | <a href="#" id="UncheckAllExports">none</a></p></th>
724
        <th scope="col">Renew <p class="column-tool"><a href="#" id="CheckAllitems">select all</a> | <a href="#" id="CheckNoitems">none</a></p></th>
957
                </tr>
725
        <th scope="col">Check in <p class="column-tool"><a href="#" id="CheckAllreturns">select all</a> | <a href="#" id="CheckNoreturns">none</a></p></th>
958
            </thead>
726
        [% IF ( exports_enabled ) %]
959
        </table>
727
          <th scope="col">Export <p class="column-tool"><a href="#" id="CheckAllexports">select all</a> | <a href="#" id="CheckNoexports">none</a></p></th>
960
728
        [% END %]
961
        [% IF ( issuecount ) %]
729
    </tr></thead>
962
            <fieldset class="action">
730
[% IF ( todayissues ) %]
963
                [% IF ( CAN_user_circulate_override_renewals ) %]
731
[% INCLUDE 'checkouts-table-footer.inc' %]
964
                    [% IF ( AllowRenewalLimitOverride ) %]
732
	<tbody>
965
                        <label for="override_limit">Override renewal limit:</label>
733
966
                        <input type="checkbox" name="override_limit" id="override_limit" value="1" />
734
    [% FOREACH todayissue IN todayissues %]
967
                    [% END %]
735
    [% IF ( loop.odd ) %]
736
    <tr>
737
    [% ELSE %]
738
    <tr class="highlight">
739
    [% END %]
740
        [% IF ( todayissue.od ) %]<td class="od">[% ELSE %]<td>[% END %]
741
        <span title="[% todayissue.dd_sort %]">[% todayissue.dd %]</span>
742
743
            [% IF ( todayissue.itemlost ) %]
744
                <span class="lost">[% AuthorisedValues.GetByCode( 'LOST', todayissue.itemlost ) %]</span>
745
            [% END %]
746
            [% IF ( todayissue.damaged ) %]
747
                <span class="dmg">[% AuthorisedValues.GetByCode( 'DAMAGED', todayissue.damaged ) %]</span>
748
            [% END %]
749
        </td>
750
        <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% todayissue.biblionumber %]&amp;type=intra"><strong>[% todayissue.title |html %][% FOREACH subtitl IN todayissue.subtitle %] [% subtitl.subfield %][% END %]</strong></a>[% IF ( todayissue.author ) %], by [% todayissue.author %][% END %][% IF ( todayissue.itemnotes ) %]- <span class="circ-hlt">[% todayissue.itemnotes %]</span>[% END %] <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% todayissue.biblionumber %]&amp;itemnumber=[% todayissue.itemnumber %]#item[% todayissue.itemnumber %]">[% todayissue.barcode %]</a></td>
751
        <td>[% UNLESS ( noItemTypeImages ) %] [% IF ( todayissue.itemtype_image ) %]<img src="[% todayissue.itemtype_image %]" alt="" />[% END %][% END %][% todayissue.itemtype %]</td>
752
        <td><span title="[% todayissue.displaydate_sort %]">[% todayissue.checkoutdate %]</span></td>
753
        [% IF ( todayissue.multiple_borrowers ) %]<td>[% todayissue.firstname %] [% todayissue.surname %]</td>[% END %]
754
        <td>[% todayissue.issuingbranchname %]</td>
755
        <td>[% todayissue.itemcallnumber %]</td>
756
            <td>[% todayissue.charge %]</td>
757
            <td>[% todayissue.replacementprice %]</td>
758
      [% IF ( todayissue.renew_failed ) %]
759
            <td class="problem">Renewal failed</td>
760
      [% ELSE %]
761
        <td><span style="padding: 0 1em;">[% IF ( todayissue.renewals ) %][% todayissue.renewals %][% ELSE %]0[% END %]</span>
762
        [% IF ( todayissue.can_renew ) %]
763
        <input type="checkbox" name="all_items[]" value="[% todayissue.itemnumber %]" checked="checked" style="display: none;" />
764
        [% IF ( todayissue.od ) %]
765
            <input type="checkbox" class="radio" name="items[]" value="[% todayissue.itemnumber %]" checked="checked" />
766
        [% ELSE %]
767
            <input type="checkbox" class="radio" name="items[]" value="[% todayissue.itemnumber %]" />
768
        [% END %]
769
            [% IF todayissue.renewsallowed && todayissue.renewsleft %]
770
                <span class="renewals">([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining)</span>
771
            [% END %]
772
        [% ELSE %]
773
            [% IF ( todayissue.can_confirm ) %]<span class="renewals-allowed" style="display: none">
774
                <input type="checkbox" name="all_items[]" value="[% todayissue.itemnumber %]" checked="checked" style="display: none;" />
775
                [% IF ( todayissue.od ) %]
776
                    <input type="checkbox" class="radio" name="items[]" value="[% todayissue.itemnumber %]" checked="checked" />
777
                [% ELSE %]
778
                    <input type="checkbox" class="radio" name="items[]" value="[% todayissue.itemnumber %]" />
779
                [% END %]
780
                </span>
781
                [% IF todayissue.renewsallowed && todayissue.renewsleft %]
782
                    <span class="renewals">([% todayissue.renewsleft %] of [% todayissue.renewsallowed %] renewals remaining)</span>
783
                [% END %]
784
                <span class="renewals-disabled">
785
            [% END %]
786
		[% IF ( todayissue.renew_error_on_reserve ) %]
787
            <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% todayissue.biblionumber %]">On hold</a>
788
		[% END %]
789
                [% IF ( todayissue.renew_error_too_many ) %]
790
            Not renewable
791
                [% END %]
968
                [% END %]
792
            [% IF ( todayissue.can_confirm ) %]
969
                <button class="btn" id="RenewCheckinChecked"><i class="icon-book"></i> Renew or Return checked items</button>
793
                </span>
970
                <button class="btn" id="RenewAll"><i class="icon-book"></i> Renew all</button>
794
            [% END %]
971
            </fieldset>
795
        [% END %]
796
        </td>
797
        [% END %]
798
        [% IF ( todayissue.return_failed ) %]
799
            <td class="problem">Checkin failed</td>
800
        [% ELSE %]
801
            [% IF ( todayissue.renew_error_on_reserve ) %]
802
               <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% todayissue.biblionumber %]">On hold</a>
803
                <input type="checkbox" name="all_barcodes[]" value="[% todayissue.barcode %]" checked="checked" style="display: none;" />
804
                </td>
805
            [% ELSE %]
806
            <td><input type="checkbox" class="radio" name="barcodes[]"  value="[% todayissue.barcode %]" />
807
                <input type="checkbox" name="all_barcodes[]" value="[% todayissue.barcode %]" checked="checked" style="display: none;" />
808
            </td>
809
            [% END %]
810
        [% END %]
811
        [% IF ( exports_enabled ) %]
812
          <td style="text-align:center;">
813
            <input type="checkbox" id="export_[% todayissue.biblionumber %]" name="biblionumbers" value="[% todayissue.biblionumber %]" />
814
            <input type="checkbox" name="itemnumbers" value="[% todayissue.itemnumber %]" style="visibility:hidden;" />
815
          </td>
816
        [% END %]
817
    </tr>
818
    [% END %] <!-- /loop todayissues -->
819
    <!-- /if todayissues -->[% END %]
820
821
[% IF ( previssues ) %]
822
    [% UNLESS ( todayissues ) %]
823
    [% INCLUDE 'checkouts-table-footer.inc' %]
824
        <tbody>
825
    [% END %]
826
    [% IF ( UseTablesortForCirc ) %]<tr id="previous"><th><span title="">Previous checkouts</span></th><th></th><th></th><th><span title=""></span></th><th></th><th></th><th></th><th></th><th></th><th></th>[% IF ( exports_enabled ) %]<th></th>[% END %]</tr>[% ELSE %]<tr id="previous">[% IF ( exports_enabled ) %]<th colspan="11">[% ELSE %]<th colspan="10">[% END %]Previous checkouts</th></tr>[% END %]
827
    [% FOREACH previssue IN previssues %]
828
    [% IF ( loop.odd ) %]
829
        <tr>
830
    [% ELSE %]
831
        <tr class="highlight">
832
    [% END %]
833
        [% IF ( previssue.od ) %]<td class="od">[% ELSE %]<td>[% END %]
834
        <span title="[% previssue.dd_sort %]">[% previssue.dd %]</span>
835
972
836
            [% IF ( previssue.itemlost ) %]
973
            [% IF ( exports_enabled ) %]
837
                <span class="lost">[% AuthorisedValues.GetByCode( 'LOST', previssue.itemlost ) %]</span>
974
                <fieldset>
838
            [% END %]
975
                    <label for="export_formats"><b>Export checkouts using format:</b></label>
839
            [% IF ( previssue.damaged ) %]
976
                    <select name="export_formats" id="export_formats">
840
                <span class="dmg">[% AuthorisedValues.GetByCode( 'DAMAGED', previssue.damaged ) %]</span>
977
                        <option value="iso2709_995">ISO2709 with items</option>
841
            [% END %]
978
                        <option value="iso2709">ISO2709 without items</option>
842
        </td>
979
                        [% IF ( export_with_csv_profile ) %]
843
        <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% previssue.biblionumber %]&amp;type=intra"><strong>[% previssue.title |html %][% FOREACH subtitl IN previssue.subtitle %] [% subtitl.subfield %][% END %]</strong></a>[% IF ( previssue.author ) %], by [% previssue.author %][% END %] [% IF ( previssue.itemnotes ) %]- [% previssue.itemnotes %][% END %] <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% previssue.biblionumber %]&amp;itemnumber=[% previssue.itemnumber %]#item[% previssue.itemnumber %]">[% previssue.barcode %]</a></td>
980
                            <option value="csv">CSV</option>
844
        <td>
981
                        [% END %]
845
            [% previssue.itemtype %]
982
                    </select>
846
        </td>
983
847
        <td><span title="[% previssue.displaydate_sort %]">[% previssue.displaydate %]</span></td>
984
                   <label for="export_remove_fields">Don't export fields:</label> <input type="text" id="export_remove_fields" name="export_remove_fields" value="[% export_remove_fields %]" title="Use for iso2709 exports" />
848
        [% IF ( previssue.multiple_borrowers ) %]<td>[% previssue.firstname %] [% previssue.surname %]</td>[% END %]
985
                    <input type="hidden" name="op" value="export" />
849
        <td>[% previssue.issuingbranchname %]</td>
986
                    <input type="hidden" id="export_format" name="format" value="iso2709" />
850
        <td>[% previssue.itemcallnumber %]</td>
987
                    <input type="hidden" id="dont_export_item" name="dont_export_item" value="0" />
851
        <td>[% previssue.charge %]</td>
988
                    <input type="hidden" id="record_type" name="record_type" value="bibs" />
852
        <td>[% previssue.replacementprice %]</td>
989
                    <button class="btn btn-small" id="export_submit"><i class="icon-download-alt"></i> Export</button>
853
      [% IF ( previssue.renew_failed ) %]
990
                </fieldset>
854
            <td class="problem">Renewal failed</td>
855
      [% ELSE %]
856
        <td><span style="padding: 0 1em;">[% IF ( previssue.renewals ) %][% previssue.renewals %][% ELSE %]0[% END %]</span>
857
        [% IF ( previssue.can_renew ) %]
858
        <input type="checkbox" name="all_items[]" value="[% previssue.itemnumber %]" checked="checked" style="display: none;" />
859
        [% IF ( previssue.od ) %]
860
            <input type="checkbox" class="radio" name="items[]" value="[% previssue.itemnumber %]" checked="checked" />
861
        [% ELSE %]
862
            <input type="checkbox" class="radio" name="items[]" value="[% previssue.itemnumber %]" />
863
        [% END %]
864
            [% IF previssue.renewsallowed && previssue.renewsleft %]
865
                <span class="renewals">([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining)</span>
866
            [% END %]
867
        [% ELSE %]
868
            [% IF ( previssue.can_confirm ) %]<span class="renewals-allowed" style="display: none">
869
                <input type="checkbox" name="all_items[]" value="[% previssue.itemnumber %]" checked="checked" style="display: none;" />
870
                [% IF ( previssue.od ) %]
871
                    <input type="checkbox" class="radio" name="items[]" value="[% previssue.itemnumber %]" checked="checked" />
872
                [% ELSE %]
873
                    <input type="checkbox" class="radio" name="items[]" value="[% previssue.itemnumber %]" />
874
                [% END %]
875
                </span>
876
                [% IF previssue.renewsallowed && previssue.renewsleft %]
877
                    <span class="renewals">([% previssue.renewsleft %] of [% previssue.renewsallowed %] renewals remaining)</span>
878
                [% END %]
879
                <span class="renewals-disabled">
880
            [% END %]
881
		[% IF ( previssue.renew_error_on_reserve ) %]
882
            <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% previssue.biblionumber %]">On hold</a>
883
		[% END %]
884
                [% IF ( previssue.renew_error_too_many ) %]
885
            Not renewable
886
                [% END %]
887
            [% IF ( previssue.can_confirm ) %]
888
                </span>
889
            [% END %]
890
        [% END %]
891
        </td>
892
        [% END %]
893
		  [% IF ( previssue.return_failed ) %]
894
            <td class="problem">Check-in failed</td>
895
        [% ELSE %]
896
            [% IF ( previssue.renew_error_on_reserve ) %]
897
               <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% previssue.biblionumber %]">On hold</a>
898
                <input type="checkbox" name="all_barcodes[]" value="[% previssue.barcode %]" checked="checked" style="display: none;" />
899
                </td>
900
            [% ELSE %]
901
            <td><input type="checkbox" class="radio" name="barcodes[]"  value="[% previssue.barcode %]" />
902
                <input type="checkbox" name="all_barcodes[]" value="[% previssue.barcode %]" checked="checked" style="display: none;" />
903
            </td>
904
            [% END %]
991
            [% END %]
905
        [% END %]
992
        [% END %]
906
        [% IF ( exports_enabled ) %]
907
          <td style="text-align:center;">
908
            <input type="checkbox" id="export_[% previssue.biblionumber %]" name="biblionumbers" value="[% previssue.biblionumber %]" />
909
            <input type="checkbox" name="itemnumbers" value="[% previssue.itemnumber %]" style="visibility:hidden;" />
910
          </td>
911
        [% END %]
912
    </tr>
913
    <!-- /loop previssues -->[% END %]
914
<!--/if previssues -->[% END %]
915
      </tbody>
916
    </table>
917
    [% IF ( issuecount ) %]
918
    <fieldset class="action">
919
        [% IF ( CAN_user_circulate_override_renewals ) %]
920
        [% IF ( AllowRenewalLimitOverride ) %]
921
        <label for="override_limit">Override renewal limit:</label>
922
        <input type="checkbox" name="override_limit" id="override_limit" value="1" />
923
        [% END %]
924
        [% END %]
925
        <input type="submit" name="renew_checked" value="Renew or Return checked items" />
926
        <input type="submit" id="renew_all" name="renew_all" value="Renew all" />
927
    </fieldset>
928
        [% IF ( exports_enabled ) %]
929
            <fieldset>
930
            <label for="export_formats"><b>Export checkouts using format:</b></label>
931
            <select name="export_formats" id="export_formats">
932
                <option value="iso2709_995">ISO2709 with items</option>
933
                <option value="iso2709">ISO2709 without items</option>
934
                [% IF ( export_with_csv_profile ) %]
935
                    <option value="csv">CSV</option>
936
                [% END %]
937
938
            </select>
939
           <label for="export_remove_fields">Don't export fields:</label> <input type="text" id="export_remove_fields" name="export_remove_fields" value="[% export_remove_fields %]" title="Use for iso2709 exports" />
940
            <input type="hidden" name="op" value="export" />
941
            <input type="hidden" id="export_format" name="format" value="iso2709" />
942
            <input type="hidden" id="dont_export_item" name="dont_export_item" value="0" />
943
            <input type="hidden" id="record_type" name="record_type" value="bibs" />
944
            <input type="button" id="export_submit" value="Export" />
945
            </fieldset>
946
        [% END %]
947
    [% END %]
948
    </form>
993
    </form>
949
[% ELSE %]
994
[% ELSE %]
950
<p>Patron has nothing checked out.</p>
995
    <p>Patron has nothing checked out.</p>
951
[% END %]
996
[% END %]
952
997
953
</div>
998
</div>
954
999
955
1000
956
[% IF ( displayrelissues ) %]
1001
[% IF ( relatives_issues_count ) %]
957
<div id="relissues">
1002
<div id="relatives-issues">
958
    <table id="relissuest">
1003
    <table id="relatives-issues-table">
959
    <thead>
1004
        <thead>
960
    <tr>
1005
            <tr>
961
        <th scope="col">Due date</th>
1006
                <th scope="col">Due date</th>
962
        <th scope="col">Title</th>
1007
                <th scope="col">Title</th>
963
        <th scope="col">Item type</th>
1008
                <th scope="col">Item type</th>
964
        <th scope="col">Checked out on</th>
1009
                <th scope="col">Checked out on</th>
965
        <th scope="col">Checked out from</th>
1010
                <th scope="col">Checked out from</th>
966
        <th scope="col">Call no</th>
1011
                <th scope="col">Call no</th>
967
        <th scope="col">Charge</th>
1012
                <th scope="col">Charge</th>
968
        <th scope="col">Price</th>
1013
                <th scope="col">Price</th>
969
        <th scope="col">Patron</th>
1014
                <th scope="col">Patron</th>
970
    </tr>
1015
            </tr>
971
    </thead>
1016
        </thead>
972
[% IF ( relissues ) %]	<tbody>
973
974
    [% FOREACH relissue IN relissues %]
975
    [% IF ( loop.odd ) %]
976
    <tr>
977
    [% ELSE %]
978
    <tr class="highlight">
979
    [% END %]
980
        [% IF ( relissue.overdue ) %]<td class="od">[% ELSE %]<td>[% END %]
981
            <span title="[% relissue.dd_sort %]">[% relissue.dd %]</span></td>
982
983
            [% IF ( relissue.itemlost ) %]
984
                <span class="lost">[% AuthorisedValues.GetByCode( 'LOST', relissue.itemlost ) %]</span>
985
            [% END %]
986
            [% IF ( relissue.damaged ) %]
987
                <span class="dmg">[% AuthorisedValues.GetByCode( 'DAMAGED', relissue.damaged ) %]</span>
988
            [% END %]
989
        </td>
990
        <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% relissue.biblionumber %]&amp;type=intra"><strong>[% relissue.title |html %][% FOREACH subtitl IN relissue.subtitle %] [% subtitl.subfield %][% END %]</strong></a>[% IF ( relissue.author ) %], by [% relissue.author %][% END %][% IF ( relissue.itemnotes ) %]- <span class="circ-hlt">[% relissue.itemnotes %]</span>[% END %] <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% relissue.biblionumber %]&amp;itemnumber=[% relissue.itemnumber %]#item[% relissue.itemnumber %]">[% relissue.barcode %]</a></td>
991
        <td>[% UNLESS ( noItemTypeImages ) %] [% IF ( relissue.itemtype_image ) %]<img src="[% relissue.itemtype_image %]" alt="" />[% END %][% END %][% relissue.itemtype %]</td>
992
        <td><span title="[% relissue.displaydate_sort %]">[% relissue.displaydate %]</span></td>
993
        <td>[% relissue.issuingbranchname %]</td>
994
        <td>[% relissue.itemcallnumber %]</td>
995
        <td>[% relissue.charge %]</td>
996
        <td>[% relissue.replacementprice %]</td><td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% relissue.borrowernumber %]">[% relissue.firstname %] [% relissue.surname %] ([% relissue.cardnumber %])</a></td>
997
     </tr>
998
    [% END %] <!-- /loop relissues -->
999
    <!-- /if relissues -->[% END %]
1000
[% IF ( relprevissues ) %]
1001
    [% IF ( UseTablesortForCirc ) %]<tr id="relprevious"><th><span title="">Previous checkouts</span></th><th></th><th></th><th><span title=""></span></th><th></th><th></th><th></th><th></th><th></th></tr>[% ELSE %]<tr id="relprevious"><th colspan="9">Previous checkouts</th></tr>[% END %]
1002
    [% FOREACH relprevissue IN relprevissues %]
1003
    [% IF ( loop.odd ) %]
1004
        <tr>
1005
    [% ELSE %]
1006
        <tr class="highlight">
1007
    [% END %]
1008
        [% IF ( relprevissue.overdue ) %]<td class="od">[% ELSE %]<td>[% END %]
1009
        <span title="[% relprevissue.dd_sort %]">[% relprevissue.dd %]</span>
1010
        </td>
1011
        <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% relprevissue.biblionumber %]&amp;type=intra"><strong>[% relprevissue.title |html %][% FOREACH subtitl IN relprevissue.subtitle %] [% subtitl.subfield %][% END %]</strong></a>[% IF ( relprevissue.author ) %], by [% relprevissue.author %][% END %] [% IF ( relprevissue.itemnotes ) %]- [% relprevissue.itemnotes %][% END %] <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% relprevissue.biblionumber %]&amp;itemnumber=[% relprevissue.itemnumber %]#item[% relprevissue.itemnumber %]">[% relprevissue.barcode %]</a></td>
1012
        <td>[% UNLESS noItemTypeImages %][% IF relprevissue.itemtype_image %]<img src="[% relprevissue.itemtype_image %]" alt="" />[% END %][% END %][% relprevissue.itemtype %]</td>
1013
        <td><span title="[% relprevissue.displaydate_sort %]">[% relprevissue.displaydate %]</span></td>
1014
        <td>[% relprevissue.issuingbranchname %]</td>
1015
        <td>[% relprevissue.itemcallnumber %]</td>
1016
	[% IF ( relprevissue.multiple_borrowers ) %]<td>[% relprevissue.firstname %] [% relprevissue.surname %]</td>[% END %]
1017
        <td>[% relprevissue.charge %]</td>
1018
        <td>[% relprevissue.replacementprice %]</td>
1019
        <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% relprevissue.borrowernumber %]">[% relprevissue.firstname %] [% relprevissue.surname %] ([% relprevissue.cardnumber %])</a></td>
1020
1021
    </tr>
1022
    <!-- /loop relprevissue -->[% END %]
1023
<!--/if relprevissues -->[% END %]
1024
      </tbody>
1025
    </table>
1017
    </table>
1026
1027
</div>
1018
</div>
1028
[% END %]<!-- end displayrelissues -->
1019
[% END %]
1029
1020
1030
[% INCLUDE borrower_debarments.inc %]
1021
[% INCLUDE borrower_debarments.inc %]
1031
1022
1032
- 

Return to bug 11703