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

(-)a/basket/basket.pl (-4 / +15 lines)
Lines 17-22 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
use CGI qw ( -utf8 );
19
use CGI qw ( -utf8 );
20
use C4::Context;
20
use C4::Koha;
21
use C4::Koha;
21
use C4::Biblio qw(
22
use C4::Biblio qw(
22
    GetMarcSeries
23
    GetMarcSeries
Lines 29-34 use C4::Output qw( output_html_with_http_headers ); Link Here
29
use Koha::AuthorisedValues;
30
use Koha::AuthorisedValues;
30
use Koha::Biblios;
31
use Koha::Biblios;
31
use Koha::CsvProfiles;
32
use Koha::CsvProfiles;
33
use Koha::Items;
32
34
33
my $query = CGI->new;
35
my $query = CGI->new;
34
36
Lines 87-93 foreach my $biblionumber (@bibs) { Link Here
87
89
88
    $num++;
90
    $num++;
89
    $dat->{biblionumber} = $biblionumber;
91
    $dat->{biblionumber} = $biblionumber;
90
    $dat->{ITEM_RESULTS} = $biblio->items->search_ordered;
92
    my $items = $biblio->items->search_ordered;
93
94
    # Add effective_location for display module support
95
    if ( C4::Context->preference('UseDisplayModule') ) {
96
        foreach my $item ( $items->as_list ) {
97
            $item->{effective_location} = $item->effective_location;
98
        }
99
    }
100
    $dat->{ITEM_RESULTS} = $items;
91
    $dat->{MARCNOTES}    = $marcnotesarray;
101
    $dat->{MARCNOTES}    = $marcnotesarray;
92
    $dat->{MARCSUBJCTS}  = $marcsubjctsarray;
102
    $dat->{MARCSUBJCTS}  = $marcsubjctsarray;
93
    $dat->{MARCAUTHORS}  = $marcauthorsarray;
103
    $dat->{MARCAUTHORS}  = $marcauthorsarray;
Lines 107-115 my $resultsarray = \@results; Link Here
107
# my $itemsarray=\@items;
117
# my $itemsarray=\@items;
108
118
109
$template->param(
119
$template->param(
110
    BIBLIO_RESULTS => $resultsarray,
120
    BIBLIO_RESULTS   => $resultsarray,
111
    csv_profiles   => Koha::CsvProfiles->search( { type => 'marc', used_for => 'export_records' } ),
121
    csv_profiles     => Koha::CsvProfiles->search( { type => 'marc', used_for => 'export_records' } ),
112
    bib_list       => $bib_list,
122
    bib_list         => $bib_list,
123
    UseDisplayModule => C4::Context->preference('UseDisplayModule'),
113
);
124
);
114
125
115
output_html_with_http_headers $query, $cookie, $template->output;
126
output_html_with_http_headers $query, $cookie, $template->output;
(-)a/catalogue/itemsearch.pl (+7 lines)
Lines 30-35 use C4::Koha qw( GetAuthorisedValues ); Link Here
30
use Koha::AuthorisedValues;
30
use Koha::AuthorisedValues;
31
use Koha::Biblios;
31
use Koha::Biblios;
32
use Koha::Item::Search::Field qw(GetItemSearchFields);
32
use Koha::Item::Search::Field qw(GetItemSearchFields);
33
use Koha::Items;
33
use Koha::ItemTypes;
34
use Koha::ItemTypes;
34
use Koha::Libraries;
35
use Koha::Libraries;
35
36
Lines 292-297 if ( defined $format and $format ne 'shareable' ) { Link Here
292
            $item->{biblioitem} = $biblio->biblioitem->unblessed;
293
            $item->{biblioitem} = $biblio->biblioitem->unblessed;
293
            my $checkout = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
294
            my $checkout = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
294
            $item->{checkout} = $checkout;
295
            $item->{checkout} = $checkout;
296
297
            # Add effective_location for display module support
298
            if ( C4::Context->preference('UseDisplayModule') ) {
299
                my $item_obj = Koha::Items->find( $item->{itemnumber} );
300
                $item->{effective_location} = $item_obj ? $item_obj->effective_location : $item->{location};
301
            }
295
        }
302
        }
296
    }
303
    }
297
304
(-)a/catalogue/moredetail.pl (+16 lines)
Lines 161-166 foreach my $item (@items) { Link Here
161
    $item_info->{itype}  = $itemtypes->{ $item->itype }->{'translated_description'}
161
    $item_info->{itype}  = $itemtypes->{ $item->itype }->{'translated_description'}
162
        if exists $itemtypes->{ $item->itype };
162
        if exists $itemtypes->{ $item->itype };
163
    $item_info->{effective_itemtype} = $itemtypes->{ $item->effective_itemtype };
163
    $item_info->{effective_itemtype} = $itemtypes->{ $item->effective_itemtype };
164
    $item_info->{effective_location} = $item->effective_location;
164
    $item_info->{'ccode'} = $ccodes->{ $item->ccode } if $ccodes && $item->ccode && exists $ccodes->{ $item->ccode };
165
    $item_info->{'ccode'} = $ccodes->{ $item->ccode } if $ccodes && $item->ccode && exists $ccodes->{ $item->ccode };
165
    if ( defined $item->copynumber ) {
166
    if ( defined $item->copynumber ) {
166
        $item_info->{'displaycopy'} = 1;
167
        $item_info->{'displaycopy'} = 1;
Lines 256-261 foreach my $item (@items) { Link Here
256
257
257
    $item_info->{nomod} = !$patron->can_edit_items_from( $item->homebranch );
258
    $item_info->{nomod} = !$patron->can_edit_items_from( $item->homebranch );
258
259
260
    my @displays;
261
    my @display_items = Koha::DisplayItems->search(
262
        { itemnumber => $item->itemnumber },
263
        {
264
            order_by => { '-desc' => 'date_added' },
265
        }
266
    )->as_list;
267
268
    foreach my $display_item (@display_items) {
269
        push @displays, $display_item->display;
270
    }
271
272
    $item_info->{displays} = \@displays
273
        unless $#displays < 0;
274
259
    push @item_data, $item_info;
275
    push @item_data, $item_info;
260
}
276
}
261
277
(-)a/catalogue/search.pl (+6 lines)
Lines 684-689 if ($hits) { Link Here
684
            sort_by           => \@sort_by
684
            sort_by           => \@sort_by
685
        }
685
        }
686
        );
686
        );
687
use Data::Dumper; $Data::Dumper::Maxdepth = 2;
688
print STDERR "##### " . __LINE__ . " #######################################################\n";
689
foreach my $result (@newresults) {
690
    print STDERR Dumper($result->{available_items_loop});
691
}
692
print STDERR "##### " . __LINE__ . " #######################################################\n";
687
    $template->param( hits_to_paginate => $hits_to_paginate );
693
    $template->param( hits_to_paginate => $hits_to_paginate );
688
    $template->param( SEARCH_RESULTS   => \@newresults );
694
    $template->param( SEARCH_RESULTS   => \@newresults );
689
695
(-)a/cataloguing/additem.pl (+4 lines)
Lines 698-703 my @items; Link Here
698
for my $item ( $biblio->items->as_list, $biblio->host_items->as_list ) {
698
for my $item ( $biblio->items->as_list, $biblio->host_items->as_list ) {
699
    my $i = $item->columns_to_str;
699
    my $i = $item->columns_to_str;
700
    $i->{nomod} = 1 unless $patron->can_edit_items_from( $item->homebranch );
700
    $i->{nomod} = 1 unless $patron->can_edit_items_from( $item->homebranch );
701
702
    # Add effective_location for display module support
703
    $i->{effective_location} = $item->effective_location;
704
701
    push @items, $i;
705
    push @items, $i;
702
}
706
}
703
707
(-)a/circ/overdue.pl (-30 / +35 lines)
Lines 28-33 use Koha::DateUtils qw( dt_from_string ); Link Here
28
use Koha::Patron::Attribute::Types;
28
use Koha::Patron::Attribute::Types;
29
use DateTime;
29
use DateTime;
30
use DateTime::Format::MySQL;
30
use DateTime::Format::MySQL;
31
use Koha::Items;
31
32
32
my $input               = CGI->new;
33
my $input               = CGI->new;
33
my $showall             = $input->param('showall');
34
my $showall             = $input->param('showall');
Lines 349-384 if ($noreport) { Link Here
349
        }
350
        }
350
351
351
        push @overduedata, {
352
        push @overduedata, {
352
            patron                  => Koha::Patrons->find( $data->{borrowernumber} ),
353
            patron                         => Koha::Patrons->find( $data->{borrowernumber} ),
353
            duedate                 => $data->{date_due},
354
            duedate                        => $data->{date_due},
354
            borrowernumber          => $data->{borrowernumber},
355
            borrowernumber                 => $data->{borrowernumber},
355
            cardnumber              => $data->{cardnumber},
356
            cardnumber                     => $data->{cardnumber},
356
            borrowertitle           => $data->{borrowertitle},
357
            borrowertitle                  => $data->{borrowertitle},
357
            surname                 => $data->{surname},
358
            surname                        => $data->{surname},
358
            firstname               => $data->{firstname},
359
            firstname                      => $data->{firstname},
359
            streetnumber            => $data->{streetnumber},
360
            streetnumber                   => $data->{streetnumber},
360
            streettype              => $data->{streettype},
361
            streettype                     => $data->{streettype},
361
            address                 => $data->{address},
362
            address                        => $data->{address},
362
            address2                => $data->{address2},
363
            address2                       => $data->{address2},
363
            city                    => $data->{city},
364
            city                           => $data->{city},
364
            zipcode                 => $data->{zipcode},
365
            zipcode                        => $data->{zipcode},
365
            country                 => $data->{country},
366
            country                        => $data->{country},
366
            phone                   => $data->{phone},
367
            phone                          => $data->{phone},
367
            email                   => $data->{email},
368
            email                          => $data->{email},
368
            branchcode              => $data->{branchcode},
369
            branchcode                     => $data->{branchcode},
369
            barcode                 => $data->{barcode},
370
            barcode                        => $data->{barcode},
370
            datelastborrowed        => $data->{datelastborrowed},
371
            datelastborrowed               => $data->{datelastborrowed},
371
            itemnum                 => $data->{itemnumber},
372
            itemnum                        => $data->{itemnumber},
372
            issuedate               => $data->{issuedate},
373
            issuedate                      => $data->{issuedate},
373
            biblionumber            => $data->{biblionumber},
374
            biblionumber                   => $data->{biblionumber},
374
            title                   => $data->{title},
375
            title                          => $data->{title},
375
            subtitle                => $data->{subtitle},
376
            subtitle                       => $data->{subtitle},
376
            part_number             => $data->{part_number},
377
            part_number                    => $data->{part_number},
377
            part_name               => $data->{part_name},
378
            part_name                      => $data->{part_name},
378
            author                  => $data->{author},
379
            author                         => $data->{author},
379
            homebranchcode          => $data->{homebranch},
380
            homebranchcode                 => $data->{homebranch},
380
            holdingbranchcode       => $data->{holdingbranch},
381
            holdingbranchcode              => $data->{holdingbranch},
381
            location                => $data->{location},
382
            location                       => $data->{location},
383
            effective_location             => do {
384
                my $item = Koha::Items->find( $data->{itemnumber} );
385
                $item ? $item->effective_location : '';
386
            },
382
            itemcallnumber          => $data->{itemcallnumber},
387
            itemcallnumber          => $data->{itemcallnumber},
383
            replacementprice        => $data->{replacementprice},
388
            replacementprice        => $data->{replacementprice},
384
            itemnotes_nonpublic     => $data->{itemnotes_nonpublic},
389
            itemnotes_nonpublic     => $data->{itemnotes_nonpublic},
(-)a/circ/pendingreserves.pl (-7 / +23 lines)
Lines 276-288 foreach my $bibnum (@biblionumbers) { Link Here
276
276
277
    # get available values for each biblio
277
    # get available values for each biblio
278
    my $fields = {
278
    my $fields = {
279
        collections     => 'ccode',
279
        collections         => 'ccode',
280
        locations       => 'location',
280
        locations           => 'location',
281
        callnumbers     => 'itemcallnumber',
281
        effective_locations => 'effective_location',
282
        enumchrons      => 'enumchron',
282
        callnumbers         => 'itemcallnumber',
283
        copynumbers     => 'copynumber',
283
        enumchrons          => 'enumchron',
284
        barcodes        => 'barcode',
284
        copynumbers         => 'copynumber',
285
        holdingbranches => 'holdingbranch'
285
        barcodes            => 'barcode',
286
        holdingbranches     => 'holdingbranch'
286
    };
287
    };
287
288
288
    while ( my ( $key, $field ) = each %$fields ) {
289
    while ( my ( $key, $field ) = each %$fields ) {
Lines 316-321 foreach my $bibnum (@biblionumbers) { Link Here
316
    $hold_info->{hold}       = $res_info;
317
    $hold_info->{hold}       = $res_info;
317
    $hold_info->{item_group} = $res_info->item_group;
318
    $hold_info->{item_group} = $res_info->item_group;
318
319
320
    my @displays;
321
    my @display_items = Koha::DisplayItems->search(
322
        { itemnumber => $hold_info->{item}->itemnumber },
323
        {
324
            order_by => { '-desc' => 'date_added' },
325
        }
326
    )->as_list;
327
328
    foreach my $display_item (@display_items) {
329
        push @displays, $display_item->display;
330
    }
331
332
    $hold_info->{displays} = \@displays
333
        unless $#displays < 0;
334
319
    push @holds_info, $hold_info;
335
    push @holds_info, $hold_info;
320
}
336
}
321
337
(-)a/circ/returns.pl (+2 lines)
Lines 758-763 foreach my $code ( keys %$messages ) { Link Here
758
        ;
758
        ;
759
    } elsif ( $code eq 'InBundle' ) {
759
    } elsif ( $code eq 'InBundle' ) {
760
        $template->param( InBundle => $messages->{InBundle} );
760
        $template->param( InBundle => $messages->{InBundle} );
761
    } elsif ( $code eq 'RemovedFromDisplay' ) {
762
        $template->param( RemovedFromDisplay => $messages->{RemovedFromDisplay} );
761
    } elsif ( $code eq 'UpdateLastSeenError' ) {
763
    } elsif ( $code eq 'UpdateLastSeenError' ) {
762
        $err{UpdateLastSeenError} = $messages->{UpdateLastSeenError};
764
        $err{UpdateLastSeenError} = $messages->{UpdateLastSeenError};
763
    } else {
765
    } else {
(-)a/circ/view_holdsqueue.pl (+23 lines)
Lines 59-64 if ($run_report) { Link Here
59
        }
59
        }
60
    );
60
    );
61
61
62
    my @itemsdisplays;
63
    for my $item ($items->as_list) {
64
        my $itemsdisplay;
65
66
        my @displays;
67
        my @display_items = Koha::DisplayItems->search(
68
            { itemnumber => $item->itemnumber },
69
            {
70
                order_by => { '-desc' => 'date_added' },
71
            }
72
        )->as_list;
73
74
        foreach my $display_item (@display_items) {
75
            push @displays, $display_item->display;
76
77
            $itemsdisplay->{itemnumber} = $item->itemnumber;
78
            $itemsdisplay->{displays} = \@displays;
79
80
            push @itemsdisplays, $itemsdisplay;
81
        }
82
    }
83
62
    $template->param(
84
    $template->param(
63
        branchlimit    => $branchlimit,
85
        branchlimit    => $branchlimit,
64
        itemtypeslimit => $itemtypeslimit,
86
        itemtypeslimit => $itemtypeslimit,
Lines 66-71 if ($run_report) { Link Here
66
        locationslimit => $locationslimit,
88
        locationslimit => $locationslimit,
67
        total          => $items->count,
89
        total          => $items->count,
68
        itemsloop      => $items,
90
        itemsloop      => $items,
91
        itemsdisplays  => \@itemsdisplays,
69
        run_report     => $run_report,
92
        run_report     => $run_report,
70
    );
93
    );
71
}
94
}
(-)a/display/display-home.pl (+52 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18
use Modern::Perl;
19
20
use CGI        qw ( -utf8 );
21
use C4::Auth   qw( get_template_and_user );
22
use C4::Output qw( output_html_with_http_headers );
23
24
use Koha::Database::Columns;
25
26
my $query = CGI->new;
27
my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
28
    {
29
        template_name => 'display/display-home.tt',
30
        query         => $query,
31
        type          => 'intranet',
32
        flagsrequired => { displays => '*' },
33
    }
34
);
35
36
my $columns = Koha::Database::Columns::columns;
37
$template->param(
38
    db_columns => {
39
        map {
40
            my $table = $_;
41
            map { ( $table . '.' . $_ => $columns->{$table}->{$_} ) }
42
                keys %{ $columns->{$table} }
43
        } qw( biblio biblioitems items )
44
    },
45
    api_mappings => {
46
        items       => Koha::Item->to_api_mapping,
47
        biblioitems => Koha::Biblioitem->to_api_mapping,
48
        biblio      => Koha::Biblio->to_api_mapping,
49
    },
50
);
51
52
output_html_with_http_headers $query, $cookie, $template->output;
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/action-logs.inc (+10 lines)
Lines 22-27 Link Here
22
        <span>Circulation</span>[% UNLESS Koha.Preference('IssueLog') %]<i class="log-disabled fa-solid fa-triangle-exclamation" title="Log not enabled" data-log="IssueLog"></i>[% END %]
22
        <span>Circulation</span>[% UNLESS Koha.Preference('IssueLog') %]<i class="log-disabled fa-solid fa-triangle-exclamation" title="Log not enabled" data-log="IssueLog"></i>[% END %]
23
    [% CASE 'CLAIMS' %]
23
    [% CASE 'CLAIMS' %]
24
        <span>Claims</span>[% UNLESS Koha.Preference('ClaimsLog') %]<i class="log-disabled fa-solid fa-triangle-exclamation" title="Log not enabled" data-log="ClaimsLog"></i>[% END %]
24
        <span>Claims</span>[% UNLESS Koha.Preference('ClaimsLog') %]<i class="log-disabled fa-solid fa-triangle-exclamation" title="Log not enabled" data-log="ClaimsLog"></i>[% END %]
25
    [% CASE 'DISPLAYS' %]
26
        <span>Displays</span>[% UNLESS Koha.Preference('DisplayItemsLog') %]<i class="log-disabled fa-solid fa-triangle-exclamation" title="Log not enabled" data-log="DisplayItemsLog"></i>[% END %]
25
    [% CASE 'FINES' %]
27
    [% CASE 'FINES' %]
26
        <span>Fines</span>[% UNLESS Koha.Preference('FinesLog') %]<i class="log-disabled fa-solid fa-triangle-exclamation" title="Log not enabled" data-log="FinesLog"></i>[% END %]
28
        <span>Fines</span>[% UNLESS Koha.Preference('FinesLog') %]<i class="log-disabled fa-solid fa-triangle-exclamation" title="Log not enabled" data-log="FinesLog"></i>[% END %]
27
    [% CASE 'SYSTEMPREFERENCE' %]
29
    [% CASE 'SYSTEMPREFERENCE' %]
Lines 153-158 Link Here
153
        <span>Modify cardnumber</span>
155
        <span>Modify cardnumber</span>
154
    [% CASE 'RESET 2FA' %]
156
    [% CASE 'RESET 2FA' %]
155
        <span>Reset 2FA</span>
157
        <span>Reset 2FA</span>
158
    [% CASE 'ENABLE' %]
159
        <span>Enable</span>
160
    [% CASE 'DISABLE' %]
161
        <span>Disable</span>
162
    [% CASE 'ADD_ITEM' %]
163
        <span>Add item</span>
164
    [% CASE 'REMOVE_ITEM' %]
165
        <span>Remove item</span>
156
    [% CASE %]
166
    [% CASE %]
157
        [% action | html %]
167
        [% action | html %]
158
    [% END %]
168
    [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc (+70 lines)
Lines 303-313 Link Here
303
        [% END %]
303
        [% END %]
304
    [% END %]
304
    [% END %]
305
305
306
    [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
307
        <div class="btn-group">
308
            <button type="button" class="btn btn-default dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false"><i class="fa fa-tv"></i> Add to display</button>
309
            <ul class="dropdown-menu" id="display-dropdown">
310
                <li class="text-center"><i class="fa fa-spinner fa-spin"></i> Loading displays...</li>
311
            </ul>
312
        </div>
313
    [% END %]
314
306
    [% FOREACH p IN plugins %]
315
    [% FOREACH p IN plugins %]
307
        [% p.intranet_catalog_biblio_enhancements_toolbar_button | $raw %]
316
        [% p.intranet_catalog_biblio_enhancements_toolbar_button | $raw %]
308
    [% END %]
317
    [% END %]
309
</div>
318
</div>
310
319
320
<!-- Modal for Add to Display -->
321
[% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
322
    <div class="modal fade" id="addToDisplayModal" tabindex="-1" role="dialog" aria-labelledby="addToDisplayModalLabel" aria-hidden="true">
323
        <div class="modal-dialog modal-lg">
324
            <div class="modal-content">
325
                <div class="modal-header">
326
                    <h4 class="modal-title" id="addToDisplayModalLabel">Add items to display</h4>
327
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
328
                </div>
329
                <form id="addToDisplayForm">
330
                    <div class="modal-body">
331
                        <div class="row">
332
                            <div class="col-md-6">
333
                                <label for="display-select" class="form-label">Select display:</label>
334
                                <select id="display-select" class="form-select" required>
335
                                    <option value="">Loading displays...</option>
336
                                </select>
337
                            </div>
338
                            <div class="col-md-6">
339
                                <label for="date-remove" class="form-label">Remove date (optional):</label>
340
                                <div class="input-group">
341
                                    <input type="date" id="date-remove" class="form-control" />
342
                                    <button class="btn btn-outline-secondary" type="button" id="clear-date" title="Clear date">
343
                                        <i class="fa fa-times"></i>
344
                                    </button>
345
                                </div>
346
                            </div>
347
                        </div>
348
                        <div class="row mt-3">
349
                            <div class="col-12">
350
                                <label class="form-label">Select items to add:</label>
351
                                <div class="table-responsive">
352
                                    <table id="display-items-table" class="table table-striped">
353
                                        <thead>
354
                                            <tr>
355
                                                <th><input type="checkbox" id="select-all-display-items" /></th>
356
                                                <th>Barcode</th>
357
                                                <th>Current library</th>
358
                                                <th>Home library</th>
359
                                                <th>Location</th>
360
                                                <th>Collection</th>
361
                                                <th>Call number</th>
362
                                                <th>Status</th>
363
                                            </tr>
364
                                        </thead>
365
                                        <tbody> </tbody>
366
                                    </table>
367
                                </div>
368
                            </div>
369
                        </div>
370
                    </div>
371
                    <div class="modal-footer">
372
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
373
                        <button type="submit" class="btn btn-primary" id="add-to-display-btn">Add to display</button>
374
                    </div>
375
                </form>
376
            </div>
377
        </div>
378
    </div>
379
[% END %]
380
311
<!--Modal for Dublin Core-->
381
<!--Modal for Dublin Core-->
312
<div class="modal" id="exportModal_" tabindex="-1" role="dialog" aria-labelledby="exportLabelexportModal_" aria-hidden="true">
382
<div class="modal" id="exportModal_" tabindex="-1" role="dialog" aria-labelledby="exportLabelexportModal_" aria-hidden="true">
313
    <div class="modal-dialog">
383
    <div class="modal-dialog">
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/catalogue/itemsearch_item.csv.inc (-1 / +1 lines)
Lines 12-18 Link Here
12
"[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => item.ccode ) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% item.barcode | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
12
"[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => item.ccode ) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% item.barcode | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
13
"[% item.itemnumber | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% item.enumchron | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% item.itemcallnumber | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
13
"[% item.itemnumber | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% item.enumchron | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% item.itemcallnumber | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
14
"[% Branches.GetName(item.homebranch) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% Branches.GetName(item.holdingbranch) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
14
"[% Branches.GetName(item.homebranch) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% Branches.GetName(item.holdingbranch) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
15
"[% AuthorisedValues.GetDescriptionByKohaField(frameworkcode => biblio.frameworkcode, kohafield => 'items.location', authorised_value => item.location) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
15
"[% AuthorisedValues.GetDescriptionByKohaField(frameworkcode => biblio.frameworkcode, kohafield => 'items.location', authorised_value => item.effective_location) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
16
"[% ItemTypes.GetDescription(item.itype) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% item.stocknumber | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
16
"[% ItemTypes.GetDescription(item.itype) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%] "[% item.stocknumber | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
17
"[% AuthorisedValues.GetDescriptionByKohaField(frameworkcode => biblio.frameworkcode, kohafield => 'items.notforloan', authorised_value => item.notforloan) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
17
"[% AuthorisedValues.GetDescriptionByKohaField(frameworkcode => biblio.frameworkcode, kohafield => 'items.notforloan', authorised_value => item.notforloan) | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
18
"[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.itemlost', authorised_value => item.itemlost ) || "" | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
18
"[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.itemlost', authorised_value => item.itemlost ) || "" | replace('"', '""') | $raw %]" [%- delimiter | $raw -%]
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/catalogue/itemsearch_item.json.inc (-1 / +10 lines)
Lines 20-26 Link Here
20
    <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% biblio.biblionumber | uri %]#item[% item.itemnumber | uri %]" title="Go to item details">[% item.barcode | html | $To %]</a>
20
    <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% biblio.biblionumber | uri %]#item[% item.itemnumber | uri %]" title="Go to item details">[% item.barcode | html | $To %]</a>
21
[%~ END %]",
21
[%~ END %]",
22
"[% item.itemnumber | html %]", "[% item.enumchron | html | $To %]", "[% item.itemcallnumber | html | $To %]", "[% Branches.GetName(item.homebranch) | html %]", "[% Branches.GetName(item.holdingbranch) | html %]",
22
"[% item.itemnumber | html %]", "[% item.enumchron | html | $To %]", "[% item.itemcallnumber | html | $To %]", "[% Branches.GetName(item.homebranch) | html %]", "[% Branches.GetName(item.holdingbranch) | html %]",
23
"[% AuthorisedValues.GetDescriptionByKohaField( frameworkcode => biblio.frameworkcode, kohafield => 'items.location', authorised_value => item.location) | html %]", "[% ItemTypes.GetDescription(item.itype) | html %]",
23
[% IF Koha.Preference('UseDisplayModule') && item.effective_location %]
24
    [% SET effective_loc = item.effective_location %]
25
    [% IF effective_loc.match('^DISPLAY:') %]
26
        "[% effective_loc | html %]", "[% ItemTypes.GetDescription(item.itype) | html %]",
27
    [% ELSE %]
28
        "[% AuthorisedValues.GetDescriptionByKohaField( frameworkcode => biblio.frameworkcode, kohafield => 'items.location', authorised_value => effective_loc) | html %]", "[% ItemTypes.GetDescription(item.itype) | html %]",
29
    [% END %]
30
[% ELSE %]
31
    "[% AuthorisedValues.GetDescriptionByKohaField( frameworkcode => biblio.frameworkcode, kohafield => 'items.location', authorised_value => item.location) | html %]", "[% ItemTypes.GetDescription(item.itype) | html %]",
32
[% END %]
24
"[% item.stocknumber | html | $To %]", "[% AuthorisedValues.GetDescriptionByKohaField( frameworkcode => biblio.frameworkcode, kohafield => 'items.notforloan', authorised_value => item.notforloan) | html %]",
33
"[% item.stocknumber | html | $To %]", "[% AuthorisedValues.GetDescriptionByKohaField( frameworkcode => biblio.frameworkcode, kohafield => 'items.notforloan', authorised_value => item.notforloan) | html %]",
25
"[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.itemlost', authorised_value => item.itemlost ) || "" | html %]",
34
"[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.itemlost', authorised_value => item.itemlost ) || "" | html %]",
26
"[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.withdrawn', authorised_value => item.withdrawn ) || "" | html %]",
35
"[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.withdrawn', authorised_value => item.withdrawn ) || "" | html %]",
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/display-search.inc (+35 lines)
Line 0 Link Here
1
[% USE raw %]
2
[% USE Koha %]
3
[% PROCESS 'html_helpers.inc' %]
4
<!-- display-search.inc -->
5
[% WRAPPER tabs id="header_search" %]
6
    [% WRAPPER tab_panels %]
7
        [% IF ( CAN_user_circulate_circulate_remaining_permissions ) %]
8
            [% INCLUDE 'patron-search-box.inc' bs_tab_active= 1 %]
9
            [% INCLUDE 'checkin-search-box.inc' %]
10
            [% INCLUDE 'renew-search-box.inc' %]
11
        [% END %]
12
        [% IF ( CAN_user_catalogue ) %]
13
            [% INCLUDE 'catalogue-search-box.inc' %]
14
        [% END %]
15
    [% END # /tab_panels %]
16
    [% WRAPPER tabs_nav %]
17
        [% IF ( CAN_user_circulate_circulate_remaining_permissions ) %]
18
            [% WRAPPER tab_item tabname="circ_search" bt_active= 1 %]
19
                <i class="fa fa-fw fa-upload" aria-hidden="true"></i> <span class="tab-title">Check out</span>
20
            [% END %]
21
            [% WRAPPER tab_item tabname= "checkin_search" %]
22
                <i class="fa fa-fw fa-download" aria-hidden="true"></i> <span class="tab-title">Check in</span>
23
            [% END %]
24
            [% WRAPPER tab_item tabname= "renew_search" %]
25
                <i class="fa fa-fw fa-retweet" aria-hidden="true"></i> <span class="tab-title">Renew</span>
26
            [% END %]
27
        [% END %]
28
        [% IF ( CAN_user_catalogue ) %]
29
            [% WRAPPER tab_item tabname= "catalog_search" %]
30
                <i class="fa fa-fw fa-search" aria-hidden="true"></i> <span class="tab-title">Search catalog</span>
31
            [% END %]
32
        [% END %]
33
    [% END # /tabs_nav %]
34
[% END # /WRAPPER tabs %]
35
<!-- /display-search.inc -->
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc (+3 lines)
Lines 70-75 Link Here
70
                        [% IF Koha.Preference('PreservationModule') && CAN_user_preservation %]
70
                        [% IF Koha.Preference('PreservationModule') && CAN_user_preservation %]
71
                            <li><a class="dropdown-item" href="/cgi-bin/koha/preservation/home.pl">Preservation</a></li>
71
                            <li><a class="dropdown-item" href="/cgi-bin/koha/preservation/home.pl">Preservation</a></li>
72
                        [% END %]
72
                        [% END %]
73
                        [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
74
                            <li><a class="dropdown-item" href="/cgi-bin/koha/display/display-home.pl">Displays</a></li>
75
                        [% END %]
73
                        [% IF ( CAN_user_reports ) %]
76
                        [% IF ( CAN_user_reports ) %]
74
                            <li><a class="dropdown-item" href="/cgi-bin/koha/reports/reports-home.pl">Reports</a></li>
77
                            <li><a class="dropdown-item" href="/cgi-bin/koha/reports/reports-home.pl">Reports</a></li>
75
                        [% END %]
78
                        [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers/tables/items/catalogue_detail.inc (-3 / +44 lines)
Lines 425-446 Link Here
425
                    }
425
                    }
426
                },
426
                },
427
                {
427
                {
428
                    [% IF Koha.Preference('UseDisplayModule') %]
429
                    data: "me.effective_location",
430
                    searchable: false,
431
                    orderable: false,
432
                    [% ELSE %]
428
                    data: "me.location",
433
                    data: "me.location",
429
                    datatype: "coded_value:location",
434
                    datatype: "coded_value:location",
430
                    searchable: true,
435
                    searchable: true,
431
                    orderable: true,
436
                    orderable: true,
437
                    [% END %]
432
                    render: function (data, type, row, meta) {
438
                    render: function (data, type, row, meta) {
433
                        let nodes = '<span class="shelvingloc">';
439
                        let nodes = '<span class="shelvingloc">';
434
                        [%# If permanent location is defined, show description or code and             %]
440
                        [% IF Koha.Preference('UseDisplayModule') %]
435
                        [%# display current location in parentheses. If not, display current location. %]
441
                        // Use effective_location directly - API handles all logic
436
                        [%# Note that permanent location is a code, and location may be an authval.    %]
442
                        let loc_str = av_loc.get(row.effective_location) || row.effective_location;
443
444
                        // Style display items differently (those starting with "DISPLAY:")
445
                        if (row.effective_location && row.effective_location.startsWith && row.effective_location.startsWith('DISPLAY:')) {
446
                            nodes += '<span class="display-location" title="Item is currently on display">%s</span>'.format(escape_str(loc_str));
447
                        } else if ( row.permanent_location && row.permanent_location != row.location ) {
448
                            let permanent_loc_str = av_loc.get(row.permanent_location);
449
                            nodes += '%s (%s)'.format(escape_str(permanent_loc_str), escape_str(loc_str));
450
                        } else {
451
                            nodes += escape_str(loc_str);
452
                        }
453
                        [% ELSE %]
454
                        [%# Standard location logic when Display module is disabled %]
437
                        let loc_str = row._strings.location ? row._strings.location.str : row.location;
455
                        let loc_str = row._strings.location ? row._strings.location.str : row.location;
456
438
                        if ( row.permanent_location && row.permanent_location != row.location ) {
457
                        if ( row.permanent_location && row.permanent_location != row.location ) {
439
                            let permanent_loc_str = av_loc.get(row.permanent_location);
458
                            let permanent_loc_str = av_loc.get(row.permanent_location);
440
                            nodes += '%s (%s)'.format(escape_str(permanent_loc_str), escape_str(loc_str));
459
                            nodes += '%s (%s)'.format(escape_str(permanent_loc_str), escape_str(loc_str));
441
                        } else {
460
                        } else {
442
                            nodes += escape_str(loc_str);
461
                            nodes += escape_str(loc_str);
443
                        }
462
                        }
463
                        [% END %]
444
                        nodes += '</span>';
464
                        nodes += '</span>';
445
                        return nodes;
465
                        return nodes;
446
                    }
466
                    }
Lines 601-606 Link Here
601
                                }
621
                                }
602
                            }
622
                            }
603
                        [% END %]
623
                        [% END %]
624
625
                        [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
626
                            $.ajax({
627
                                url: '/api/v1/displays',
628
                                async: false,
629
                                method: 'GET',
630
                                headers: { 'x-koha-embed': 'display_items' },
631
                                success: displays => {
632
                                    displays.forEach(display => {
633
                                        display.display_items.forEach(display_item => {
634
                                            if (display_item.itemnumber === row.item_id)
635
                                                nodes += '<span class="holding_status on_display">%s</span>'.format(_("DISPLAY: %s")).format('<a href="/cgi-bin/koha/display/displays/%s">%s</a>').format(display.display_id, display.display_name);
636
                                        });
637
                                    });
638
                                },
639
                                error: error => {
640
                                    console.error(error);
641
                                }
642
                            });
643
                        [% END %]
644
604
                            if ( status == 'available' ) {
645
                            if ( status == 'available' ) {
605
                                nodes += ' <span>%s</span>'.format(_("Available"))
646
                                nodes += ' <span>%s</span>'.format(_("Available"))
606
                            }
647
                            }
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc (+21 lines)
Lines 51-56 Link Here
51
    [%- CASE 'coursereserves' -%]
51
    [%- CASE 'coursereserves' -%]
52
        <span class="main_permission coursereserves_permission">Course reserves</span>
52
        <span class="main_permission coursereserves_permission">Course reserves</span>
53
        <span class="permissioncode">([% name | html %])</span>
53
        <span class="permissioncode">([% name | html %])</span>
54
    [%- CASE 'displays' -%]
55
        <span class="main_permission displays_permission">Display module</span>
56
        <span class="permissioncode">([% name | html %])</span>
54
    [%- CASE 'plugins' -%]
57
    [%- CASE 'plugins' -%]
55
        <span class="main_permission plugins_permission">Koha plugins</span>
58
        <span class="main_permission plugins_permission">Koha plugins</span>
56
        <span class="permissioncode">([% name | html %])</span>
59
        <span class="permissioncode">([% name | html %])</span>
Lines 511-516 Link Here
511
    [%- CASE 'manage_courses' -%]
514
    [%- CASE 'manage_courses' -%]
512
        <span class="sub_permission manage_courses_subpermission"> Add, edit and delete courses </span>
515
        <span class="sub_permission manage_courses_subpermission"> Add, edit and delete courses </span>
513
        <span class="permissioncode">([% name | html %])</span>
516
        <span class="permissioncode">([% name | html %])</span>
517
    [%- CASE 'add_display' -%]
518
        <span class="sub_permission add_display_subpermission"> Add displays </span>
519
        <span class="permissioncode">([% name | html %])</span>
520
    [%- CASE 'edit_display' -%]
521
        <span class="sub_permission edit_display_subpermission"> Edit displays </span>
522
        <span class="permissioncode">([% name | html %])</span>
523
    [%- CASE 'delete_display' -%]
524
        <span class="sub_permission delete_display_subpermission"> Delete displays </span>
525
        <span class="permissioncode">([% name | html %])</span>
526
    [%- CASE 'add_items_to_display' -%]
527
        <span class="sub_permission add_items_to_display_subpermission"> Add items to displays </span>
528
        <span class="permissioncode">([% name | html %])</span>
529
    [%- CASE 'add_items_to_display_from_any_libraries' -%]
530
        <span class="sub_permission add_items_to_display_from_any_libraries_subpermission"> Add items to displays from any libraries </span>
531
        <span class="permissioncode">([% name | html %])</span>
532
    [%- CASE 'remove_items_from_display' -%]
533
        <span class="sub_permission remove_items_from_display_subpermission"> Remove items from displays </span>
534
        <span class="permissioncode">([% name | html %])</span>
514
    [%- CASE 'configure' -%]
535
    [%- CASE 'configure' -%]
515
        <span class="sub_permission configure_subpermission"> Configure plugins </span>
536
        <span class="sub_permission configure_subpermission"> Configure plugins </span>
516
        <span class="permissioncode">([% name | html %])</span>
537
        <span class="permissioncode">([% name | html %])</span>
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/waiting_holds.inc (-1 / +1 lines)
Lines 83-89 Link Here
83
                </td>
83
                </td>
84
                <td>[% Branches.GetName( reserveloo.item.homebranch ) | html %]</td>
84
                <td>[% Branches.GetName( reserveloo.item.homebranch ) | html %]</td>
85
                <td>[% Branches.GetName( reserveloo.item.holdingbranch ) | html %][% IF (reserveloo.desk_id  ) %], [% reserveloo.desk.desk_name | html %][% END %]</td>
85
                <td>[% Branches.GetName( reserveloo.item.holdingbranch ) | html %][% IF (reserveloo.desk_id  ) %], [% reserveloo.desk.desk_name | html %][% END %]</td>
86
                <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => reserveloo.item.location) | html %]</td>
86
                <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => reserveloo.item.effective_location ) | html %]</td>
87
                <td>[% reserveloo.item.itemcallnumber | html %]</td>
87
                <td>[% reserveloo.item.itemcallnumber | html %]</td>
88
                <td>[% reserveloo.item.copynumber | html %]</td>
88
                <td>[% reserveloo.item.copynumber | html %]</td>
89
                <td>[% reserveloo.item.enumchron | html %]</td>
89
                <td>[% reserveloo.item.enumchron | html %]</td>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/library_groups.tt (-2 / +22 lines)
Lines 152-157 Link Here
152
                                    Is local float group
152
                                    Is local float group
153
                                </label>
153
                                </label>
154
                            </p>
154
                            </p>
155
                            <p>
156
                                <label>
157
                                    <input type="checkbox" name="ft_display_group" id="add-group-modal-ft_display_group" value="1" />
158
                                    Is display group
159
                                </label>
160
                            </p>
155
                        </div>
161
                        </div>
156
                    </div>
162
                    </div>
157
                </div>
163
                </div>
Lines 235-240 Link Here
235
                                    Is local float group
241
                                    Is local float group
236
                                </label>
242
                                </label>
237
                            </p>
243
                            </p>
244
                            <p>
245
                                <label>
246
                                    <input type="checkbox" id="edit-group-modal-ft_display_group" name="ft_display_group" value="1" />
247
                                    Is display group
248
                                </label>
249
                            </p>
238
                        </div>
250
                        </div>
239
                    </div>
251
                    </div>
240
                </div>
252
                </div>
Lines 331-337 Link Here
331
                var ft_search_groups_staff = $(this).data("groupFt_search_groups_staff");
343
                var ft_search_groups_staff = $(this).data("groupFt_search_groups_staff");
332
                var ft_local_hold_group = $(this).data("groupFt_local_hold_group");
344
                var ft_local_hold_group = $(this).data("groupFt_local_hold_group");
333
                var ft_local_float_group = $(this).data("groupFt_local_float_group");
345
                var ft_local_float_group = $(this).data("groupFt_local_float_group");
334
                edit_group(id, parent_id, title, description, ft_hide_patron_info, ft_search_groups_opac, ft_search_groups_staff, ft_local_hold_group, ft_limit_item_editing, ft_local_float_group);
346
                var ft_display_group = $(this).data("groupFt_display_group");
347
                edit_group(id, parent_id, title, description, ft_hide_patron_info, ft_search_groups_opac, ft_search_groups_staff, ft_local_hold_group, ft_limit_item_editing, ft_local_float_group, ft_display_group);
335
            });
348
            });
336
349
337
            $(".delete-group").on("click", function (e) {
350
            $(".delete-group").on("click", function (e) {
Lines 368-373 Link Here
368
            $("#add-group-modal-ft_search_groups_staff").prop("checked", false);
381
            $("#add-group-modal-ft_search_groups_staff").prop("checked", false);
369
            $("#add-group-modal-ft_local_hold_group").prop("checked", false);
382
            $("#add-group-modal-ft_local_hold_group").prop("checked", false);
370
            $("#add-group-modal-ft_local_float_group").prop("checked", false);
383
            $("#add-group-modal-ft_local_float_group").prop("checked", false);
384
            $("#add-group-modal-ft_display_group").prop("checked", false);
371
            if (parent_id) {
385
            if (parent_id) {
372
                $("#root-group-features-add").hide();
386
                $("#root-group-features-add").hide();
373
            } else {
387
            } else {
Lines 376-382 Link Here
376
            $("#add-group-modal").modal("show");
390
            $("#add-group-modal").modal("show");
377
        }
391
        }
378
392
379
        function edit_group(id, parent_id, title, description, ft_hide_patron_info, ft_search_groups_opac, ft_search_groups_staff, ft_local_hold_group, ft_limit_item_editing, ft_local_float_group) {
393
        function edit_group(id, parent_id, title, description, ft_hide_patron_info, ft_search_groups_opac, ft_search_groups_staff, ft_local_hold_group, ft_limit_item_editing, ft_local_float_group, ft_display_group) {
380
            $("#edit-group-modal-id").val(id);
394
            $("#edit-group-modal-id").val(id);
381
            $("#edit-group-modal-title").val(title);
395
            $("#edit-group-modal-title").val(title);
382
            $("#edit-group-modal-description").val(description);
396
            $("#edit-group-modal-description").val(description);
Lines 387-392 Link Here
387
                $("#edit-group-modal-ft_search_groups_staff").prop("checked", false);
401
                $("#edit-group-modal-ft_search_groups_staff").prop("checked", false);
388
                $("#edit-group-modal-ft_local_hold_group").prop("checked", false);
402
                $("#edit-group-modal-ft_local_hold_group").prop("checked", false);
389
                $("#edit-group-modal-ft_local_float_group").prop("checked", false);
403
                $("#edit-group-modal-ft_local_float_group").prop("checked", false);
404
                $("#edit-group-modal-ft_display_group").prop("checked", false);
390
                $("#root-group-features-edit").hide();
405
                $("#root-group-features-edit").hide();
391
            } else {
406
            } else {
392
                $("#edit-group-modal-ft_hide_patron_info").prop("checked", ft_hide_patron_info ? true : false);
407
                $("#edit-group-modal-ft_hide_patron_info").prop("checked", ft_hide_patron_info ? true : false);
Lines 395-400 Link Here
395
                $("#edit-group-modal-ft_search_groups_staff").prop("checked", ft_search_groups_staff ? true : false);
410
                $("#edit-group-modal-ft_search_groups_staff").prop("checked", ft_search_groups_staff ? true : false);
396
                $("#edit-group-modal-ft_local_hold_group").prop("checked", ft_local_hold_group ? true : false);
411
                $("#edit-group-modal-ft_local_hold_group").prop("checked", ft_local_hold_group ? true : false);
397
                $("#edit-group-modal-ft_local_float_group").prop("checked", ft_local_float_group ? true : false);
412
                $("#edit-group-modal-ft_local_float_group").prop("checked", ft_local_float_group ? true : false);
413
                $("#edit-group-modal-ft_display_group").prop("checked", ft_display_group ? true : false);
398
                $("#root-group-features-edit").show();
414
                $("#root-group-features-edit").show();
399
            }
415
            }
400
416
Lines 455-460 Link Here
455
                    [% IF group.ft_local_float_group %]
471
                    [% IF group.ft_local_float_group %]
456
                        <li>Is local float group</li>
472
                        <li>Is local float group</li>
457
                    [% END %]
473
                    [% END %]
474
                    [% IF group.ft_display_group %]
475
                        <li>Is display group</li>
476
                    [% END %]
458
                </ul>
477
                </ul>
459
            [% END %]
478
            [% END %]
460
        </td>
479
        </td>
Lines 486-491 Link Here
486
                                data-group-ft_local_hold_group="[% group.ft_local_hold_group | html %]"
505
                                data-group-ft_local_hold_group="[% group.ft_local_hold_group | html %]"
487
                                data-group-ft_limit_item_editing="[% group.ft_limit_item_editing | html %]"
506
                                data-group-ft_limit_item_editing="[% group.ft_limit_item_editing | html %]"
488
                                data-group-ft_local_float_group="[% group.ft_local_float_group | html %]"
507
                                data-group-ft_local_float_group="[% group.ft_local_float_group | html %]"
508
                                data-group-ft_display_group="[% group.ft_display_group | html %]"
489
                            >
509
                            >
490
                                <i class="fa-solid fa-pencil" aria-hidden="true"></i> Edit
510
                                <i class="fa-solid fa-pencil" aria-hidden="true"></i> Edit
491
                            </a>
511
                            </a>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref (+7 lines)
Lines 1342-1347 Circulation: Link Here
1342
                  1: Use
1342
                  1: Use
1343
                  0: "Don't use"
1343
                  0: "Don't use"
1344
            - "course reserves."
1344
            - "course reserves."
1345
    Display module:
1346
        -
1347
            - pref: UseDisplayModule
1348
              choices:
1349
                  1: Use
1350
                  0: "Don't use"
1351
            - "the display module for managing item displays."
1345
    Batch checkout:
1352
    Batch checkout:
1346
        -
1353
        -
1347
            - pref: BatchCheckouts
1354
            - pref: BatchCheckouts
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref (+6 lines)
Lines 84-89 Logging: Link Here
84
                  1: Log
84
                  1: Log
85
                  0: "Don't log"
85
                  0: "Don't log"
86
            - information from cron jobs.
86
            - information from cron jobs.
87
        -
88
            - pref: DisplayItemsLog
89
              choices:
90
                  1: Log
91
                  0: "Don't log"
92
            - when displays are created, edited, deleted, or when items are added to or removed from displays.
87
        -
93
        -
88
            - pref: ReportsLog
94
            - pref: ReportsLog
89
              choices:
95
              choices:
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt (-2 / +6 lines)
Lines 243-249 Link Here
243
                                        [% FOREACH ITEM_RESULT IN BIBLIO_RESULT.ITEM_RESULTS %]
243
                                        [% FOREACH ITEM_RESULT IN BIBLIO_RESULT.ITEM_RESULTS %]
244
                                            <p>
244
                                            <p>
245
                                                [% Branches.GetName(ITEM_RESULT.holdingbranch) | html %]
245
                                                [% Branches.GetName(ITEM_RESULT.holdingbranch) | html %]
246
                                                <span class="shelvingloc"> [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ITEM_RESULT.location ) | html %] </span>
246
                                                <span class="shelvingloc">
247
                                                    [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ITEM_RESULT.effective_location ) | html %]
248
                                                </span>
247
                                                [% IF ( ITEM_RESULT.itemcallnumber ) %]
249
                                                [% IF ( ITEM_RESULT.itemcallnumber ) %]
248
                                                    ([% ITEM_RESULT.itemcallnumber | html %])
250
                                                    ([% ITEM_RESULT.itemcallnumber | html %])
249
                                                [% END %]
251
                                                [% END %]
Lines 337-343 Link Here
337
                                                        <span class="callnumber">[% ITEM_RESULT.itemcallnumber | html %]</span>
339
                                                        <span class="callnumber">[% ITEM_RESULT.itemcallnumber | html %]</span>
338
                                                    </strong>
340
                                                    </strong>
339
                                                    [% Branches.GetName(ITEM_RESULT.holdingbranch) | html %]
341
                                                    [% Branches.GetName(ITEM_RESULT.holdingbranch) | html %]
340
                                                    <span class="shelvingloc"> [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ITEM_RESULT.location ) | html %] </span>
342
                                                    <span class="shelvingloc">
343
                                                        [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ITEM_RESULT.effective_location ) | html %]
344
                                                    </span>
341
                                                </span>
345
                                                </span>
342
                                            </div>
346
                                            </div>
343
                                        [% END %]
347
                                        [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt (+324 lines)
Lines 2368-2374 Link Here
2368
        $(".delete-comment").on("click", function(){
2368
        $(".delete-comment").on("click", function(){
2369
            return confirm( _("Are you sure you want to delete this comment?") );
2369
            return confirm( _("Are you sure you want to delete this comment?") );
2370
        });
2370
        });
2371
2372
        [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
2373
        // Display functionality
2374
        let availableDisplays = [];
2375
        let displayItemsTable = null;
2376
        let selectedDisplayItems = [];
2377
2378
        // Load displays on page load
2379
        $(document).ready(function() {
2380
            // Load available displays for dropdown
2381
            $.ajax({
2382
                url: '/api/v1/displays',
2383
                method: 'GET',
2384
                headers: { 'x-koha-embed': 'display_items' },
2385
                success: function(displays) {
2386
                    availableDisplays = displays.filter(display => display.enabled);
2387
                    updateDisplayDropdown();
2388
                    updateDisplaySelect();
2389
                },
2390
                error: function() {
2391
                    $('#display-dropdown').html('<li class="text-center text-muted">Failed to load displays</li>');
2392
                }
2393
            });
2394
        });
2395
2396
        function updateDisplayDropdown() {
2397
            const dropdown = $('#display-dropdown');
2398
            if (availableDisplays.length === 0) {
2399
                dropdown.html('<li class="dropdown-item text-muted">No active displays available</li>');
2400
                return;
2401
            }
2402
2403
            let html = '';
2404
            availableDisplays.forEach(display => {
2405
                html += `<li><a class="dropdown-item" href="#" data-display-id="${display.display_id}" onclick="openDisplayModal(${display.display_id})">${display.display_name}</a></li>`;
2406
            });
2407
            dropdown.html(html);
2408
        }
2409
2410
        function updateDisplaySelect() {
2411
            // Update display select
2412
            const displaySelect = $('#display-select');
2413
            let selectHtml = '<option value="">Select a display</option>';
2414
            availableDisplays.forEach(display => {
2415
                selectHtml += `<option value="${display.display_id}">${display.display_name}</option>`;
2416
            });
2417
            displaySelect.html(selectHtml);
2418
        }
2419
2420
        function initializeDisplayItemsTable() {
2421
            if (displayItemsTable && displayItemsTable.DataTable) {
2422
                displayItemsTable.DataTable().destroy();
2423
                displayItemsTable = null;
2424
            }
2425
2426
            selectedDisplayItems = [];
2427
2428
            // Use the same API endpoint and embed options as the main items table
2429
            let item_table_url = "/api/v1/biblios/[% biblionumber | uri %]/items?";
2430
            let embed = ["+strings,_status,home_library,holding_library"];
2431
2432
            displayItemsTable = $("#display-items-table").kohaTable({
2433
                ajax: { url: item_table_url },
2434
                embed: embed,
2435
                order: [[1, 'asc']], // Sort by barcode
2436
                autoWidth: false,
2437
                paging: false,
2438
                searching: true,
2439
                info: false,
2440
                columns: [
2441
                    {
2442
                        data: "me.item_id",
2443
                        searchable: false,
2444
                        orderable: false,
2445
                        render: function (data, type, row, meta) {
2446
                            return `<input type="checkbox" class="display-item-checkbox" value="${row.item_id}" data-item-id="${row.item_id}">`;
2447
                        }
2448
                    },
2449
                    {
2450
                        data: "me.external_id",
2451
                        searchable: true,
2452
                        orderable: true,
2453
                        render: function (data, type, row, meta) {
2454
                            return escape_str(row.external_id || 'No barcode');
2455
                        }
2456
                    },
2457
                    {
2458
                        data: "me.holding_library_id",
2459
                        searchable: true,
2460
                        orderable: true,
2461
                        render: function (data, type, row, meta) {
2462
                            return escape_str(row._strings.holding_library_id ? row._strings.holding_library_id.str : row.holding_library_id);
2463
                        }
2464
                    },
2465
                    {
2466
                        data: "me.home_library_id",
2467
                        searchable: true,
2468
                        orderable: true,
2469
                        render: function (data, type, row, meta) {
2470
                            return escape_str(row._strings.home_library_id ? row._strings.home_library_id.str : row.home_library_id);
2471
                        }
2472
                    },
2473
                    {
2474
                        [% IF Koha.Preference('UseDisplayModule') %]
2475
                        data: "me.effective_location",
2476
                        searchable: false,
2477
                        orderable: false,
2478
                        [% ELSE %]
2479
                        data: "me.location",
2480
                        searchable: true,
2481
                        orderable: true,
2482
                        [% END %]
2483
                        render: function (data, type, row, meta) {
2484
                            [% IF Koha.Preference('UseDisplayModule') %]
2485
                            // Get the display name for effective location
2486
                            let effective_loc_str = av_loc.get(row.effective_location) || row.effective_location;
2487
                            return escape_str(effective_loc_str || '');
2488
                            [% ELSE %]
2489
                            let loc_str = row._strings.location ? row._strings.location.str : row.location;
2490
                            return escape_str(loc_str || '');
2491
                            [% END %]
2492
                        }
2493
                    },
2494
                    {
2495
                        data: "me.collection_code",
2496
                        searchable: true,
2497
                        orderable: true,
2498
                        render: function (data, type, row, meta) {
2499
                            return escape_str(row._strings.collection_code ? row._strings.collection_code.str : row.collection_code);
2500
                        }
2501
                    },
2502
                    {
2503
                        data: "me.callnumber",
2504
                        searchable: true,
2505
                        orderable: true,
2506
                        render: function (data, type, row, meta) {
2507
                            return escape_str(row.callnumber || '');
2508
                        }
2509
                    },
2510
                    {
2511
                        data: "",
2512
                        searchable: false,
2513
                        orderable: false,
2514
                        render: function (data, type, row, meta) {
2515
                            let status = '';
2516
                            if (row._status && row._status.length > 0) {
2517
                                status = row._status.map(s => s.replace(/_/g, ' ')).join(', ');
2518
                            } else {
2519
                                status = 'Available';
2520
                            }
2521
                            return escape_str(status);
2522
                        }
2523
                    }
2524
                ],
2525
                [% IF Koha.Preference('UseDisplayModule') %]
2526
                rowCallback: function(row, data) {
2527
                    // Hide items that are already on displays (effective_location starts with "DISPLAY:")
2528
                    if (data.effective_location && data.effective_location.startsWith && data.effective_location.startsWith('DISPLAY:')) {
2529
                        $(row).hide();
2530
                        return;
2531
                    }
2532
                    $(row).show();
2533
                },
2534
                [% END %]
2535
                drawCallback: function(settings) {
2536
                    // Handle individual checkbox changes
2537
                    $('.display-item-checkbox').off('change').on('change', function() {
2538
                        const itemId = parseInt($(this).val());
2539
                        if ($(this).is(':checked')) {
2540
                            if (!selectedDisplayItems.includes(itemId)) {
2541
                                selectedDisplayItems.push(itemId);
2542
                            }
2543
                        } else {
2544
                            selectedDisplayItems = selectedDisplayItems.filter(id => id !== itemId);
2545
                        }
2546
                        updateSelectAllState();
2547
                    });
2548
2549
                    // Handle select all checkbox
2550
                    $('#select-all-display-items').off('change').on('change', function() {
2551
                        const isChecked = $(this).is(':checked');
2552
                        $('.display-item-checkbox').prop('checked', isChecked);
2553
2554
                        if (isChecked) {
2555
                            selectedDisplayItems = [];
2556
                            $('.display-item-checkbox').each(function() {
2557
                                selectedDisplayItems.push(parseInt($(this).val()));
2558
                            });
2559
                        } else {
2560
                            selectedDisplayItems = [];
2561
                        }
2562
                    });
2563
                }
2564
            });
2565
        }
2566
2567
        function updateSelectAllState() {
2568
            const totalCheckboxes = $('.display-item-checkbox').length;
2569
            const checkedCheckboxes = $('.display-item-checkbox:checked').length;
2570
2571
            if (checkedCheckboxes === 0) {
2572
                $('#select-all-display-items').prop('indeterminate', false).prop('checked', false);
2573
            } else if (checkedCheckboxes === totalCheckboxes) {
2574
                $('#select-all-display-items').prop('indeterminate', false).prop('checked', true);
2575
            } else {
2576
                $('#select-all-display-items').prop('indeterminate', true);
2577
            }
2578
        }
2579
2580
        function openDisplayModal(displayId = null) {
2581
            if (displayId) {
2582
                $('#display-select').val(displayId);
2583
            }
2584
            // Initialize the DataTable when the modal is opened
2585
            initializeDisplayItemsTable();
2586
            $('#addToDisplayModal').modal('show');
2587
        }
2588
2589
        // Clear date button functionality
2590
        $('#clear-date').on('click', function() {
2591
            $('#date-remove').val('');
2592
        });
2593
2594
        // Form submission
2595
        $('#addToDisplayForm').on('submit', function(e) {
2596
            e.preventDefault();
2597
2598
            const displayId = $('#display-select').val();
2599
            const removeDate = $('#date-remove').val();
2600
2601
            if (!displayId) {
2602
                alert('Please select a display');
2603
                return;
2604
            }
2605
2606
            if (selectedDisplayItems.length === 0) {
2607
                alert('Please select at least one item');
2608
                return;
2609
            }
2610
2611
            $('#add-to-display-btn').prop('disabled', true).text('Adding...');
2612
2613
            // Add each item to the display
2614
            let promises = selectedDisplayItems.map(itemId => {
2615
                const data = {
2616
                    display_id: parseInt(displayId),
2617
                    itemnumber: parseInt(itemId),
2618
                    biblionumber: [% biblionumber | html %],
2619
                    date_added: new Date().toISOString().split('T')[0]
2620
                };
2621
                if (removeDate) {
2622
                    data.date_remove = removeDate;
2623
                }
2624
2625
                return $.ajax({
2626
                    url: '/api/v1/display/items',
2627
                    method: 'POST',
2628
                    contentType: 'application/json',
2629
                    data: JSON.stringify(data)
2630
                });
2631
            });
2632
2633
            Promise.all(promises).then(() => {
2634
                alert(`Successfully added ${selectedDisplayItems.length} item(s) to display`);
2635
                $('#addToDisplayModal').modal('hide');
2636
                $('#addToDisplayForm')[0].reset();
2637
                selectedDisplayItems = [];
2638
2639
                // Safely refresh modal table
2640
                try {
2641
                    if (displayItemsTable && displayItemsTable.DataTable) {
2642
                        displayItemsTable.DataTable().draw();
2643
                    }
2644
                } catch (e) {
2645
                    // Modal table refresh failed - not critical
2646
                }
2647
2648
                // Safely refresh the main items table to show updated locations
2649
                try {
2650
                    if (typeof build_items_table === 'function') {
2651
                        $('.items_table').each(function() {
2652
                            let table_id = $(this).attr('id').replace('_table', '');
2653
                            build_items_table(table_id, false, { destroy: true });
2654
                        });
2655
                    }
2656
                } catch (e) {
2657
                    // Main table refresh failed - reload page as fallback
2658
                    window.location.reload();
2659
                }
2660
            }).catch((error) => {
2661
                console.error('Error adding items to display:', error);
2662
                alert('Failed to add some items to display. Please try again.');
2663
            }).finally(() => {
2664
                $('#add-to-display-btn').prop('disabled', false).text('Add to display');
2665
            });
2666
        });
2667
2668
        // Clean up when modal is hidden
2669
        $('#addToDisplayModal').on('hidden.bs.modal', function() {
2670
            if (displayItemsTable && displayItemsTable.DataTable) {
2671
                displayItemsTable.DataTable().destroy();
2672
                displayItemsTable = null;
2673
            }
2674
            selectedDisplayItems = [];
2675
            $('#addToDisplayForm')[0].reset();
2676
        });
2677
        [% END %]
2371
    </script>
2678
    </script>
2372
    [% CoverImagePlugins | $raw %]
2679
    [% CoverImagePlugins | $raw %]
2373
[% END # /jsinclude %]
2680
[% END # /jsinclude %]
2681
2682
[% BLOCK cssinclude %]
2683
    <style>
2684
        .display-location {
2685
            font-weight: bold;
2686
            color: #d9534f;
2687
        }
2688
        .display-location::before {
2689
            content: "📺 ";
2690
            font-size: 0.8em;
2691
        }
2692
        .original-location {
2693
            font-size: 0.9em;
2694
            font-style: italic;
2695
        }
2696
    </style>
2697
[% END %]
2374
[% INCLUDE 'intranet-bottom.inc' %]
2698
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt (-2 / +15 lines)
Lines 187-196 Link Here
187
                                [% IF ( ITEM_DAT.displaycopy ) %]
187
                                [% IF ( ITEM_DAT.displaycopy ) %]
188
                                    <li class="copynumber"><span class="label">Copy number:</span> [% ITEM_DAT.copyvol | html %]&nbsp;</li>
188
                                    <li class="copynumber"><span class="label">Copy number:</span> [% ITEM_DAT.copyvol | html %]&nbsp;</li>
189
                                [% END %]
189
                                [% END %]
190
                                [% IF ( ITEM_DAT.location ) %]
190
                                [% IF ( ITEM_DAT.effective_location ) %]
191
                                    <li class="location">
191
                                    <li class="location">
192
                                        <span class="label">Shelving location:</span>
192
                                        <span class="label">Shelving location:</span>
193
                                        [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ITEM_DAT.location ) | html %]
193
                                        [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ITEM_DAT.effective_location ) | html %]
194
                                    </li>
195
                                [% END %]
196
                                [% IF ( ITEM_DAT.displays ) %]
197
                                    <li class="displays" class="nowrap">
198
                                        [% IF ITEM_DAT.displays.size > 1 %]
199
                                            <span class="label">In displays:</span>
200
                                        [% ELSE %]
201
                                            <span class="label">In display:</span>
202
                                        [% END %]
203
                                        [% FOR display IN ITEM_DAT.displays %]
204
                                            <a href="/cgi-bin/koha/display/displays/[% display.display_id | url %]">[% display.display_name | html %]</a>
205
                                            [% UNLESS loop.last %], [% END %]
206
                                        [% END %]
194
                                    </li>
207
                                    </li>
195
                                [% END %]
208
                                [% END %]
196
                                [% IF ( ITEM_DAT.replacementprice ) %]
209
                                [% IF ( ITEM_DAT.replacementprice ) %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt (-2 / +13 lines)
Lines 826-833 Link Here
826
                                                                    [% IF ( items_loo.branchname ) %]
826
                                                                    [% IF ( items_loo.branchname ) %]
827
                                                                        [% items_loo.branchname | html %]
827
                                                                        [% items_loo.branchname | html %]
828
                                                                    [% END %]
828
                                                                    [% END %]
829
                                                                    [% IF ( items_loo.location ) %]
829
                                                                    [% IF ( items_loo.effective_location ) %]
830
                                                                        <span class="shelvingloc">[% items_loo.location | html %]</span>
830
                                                                        <span class="shelvingloc">[% items_loo.effective_location | html %]</span>
831
                                                                    [% END %]
831
                                                                    [% END %]
832
                                                                    [% IF ( items_loo.collectioncode ) %]
832
                                                                    [% IF ( items_loo.collectioncode ) %]
833
                                                                        <span class="ccode">[% items_loo.collectioncode | html %]</span>
833
                                                                        <span class="ccode">[% items_loo.collectioncode | html %]</span>
Lines 855-860 Link Here
855
                                                                        [% IF ( items_loo.notforloan ) %]
855
                                                                        [% IF ( items_loo.notforloan ) %]
856
                                                                            [% items_loo.notforloan | html %]
856
                                                                            [% items_loo.notforloan | html %]
857
                                                                        [% END %]
857
                                                                        [% END %]
858
                                                                        [% IF ( items_loo.displays ) %]
859
                                                                            [% IF items_loo.displays.size > 1 %]
860
                                                                                <span>In displays:</span>
861
                                                                            [% ELSE %]
862
                                                                                <span>In display:</span>
863
                                                                            [% END %]
864
                                                                            [% FOR display IN items_loo.displays %]
865
                                                                                <a href="/cgi-bin/koha/display/displays/[% display.display_id | url %]">[% display.display_name | html %]</a>
866
                                                                                [% UNLESS loop.last %], [% END %]
867
                                                                            [% END %]
868
                                                                        [% END %]
858
                                                                        <span class="item_count">[% items_loo.count | html %]</span>
869
                                                                        <span class="item_count">[% items_loo.count | html %]</span>
859
                                                                    </div>
870
                                                                    </div>
860
                                                                    <!-- /.result_item_details -->
871
                                                                    <!-- /.result_item_details -->
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt (+5 lines)
Lines 5-10 Link Here
5
[% USE KohaDates %]
5
[% USE KohaDates %]
6
[% USE Price %]
6
[% USE Price %]
7
[% USE Item %]
7
[% USE Item %]
8
[% USE AuthorisedValues %]
8
[% USE TablesSettings %]
9
[% USE TablesSettings %]
9
[% PROCESS 'i18n.inc' %]
10
[% PROCESS 'i18n.inc' %]
10
[% INCLUDE 'doc-head-open.inc' %]
11
[% INCLUDE 'doc-head-open.inc' %]
Lines 213-218 Link Here
213
                                        <td class="[% can_mod | html %]" data-order="[% item.$attribute | html %]">[% item.$attribute | $Price %]</td>
214
                                        <td class="[% can_mod | html %]" data-order="[% item.$attribute | html %]">[% item.$attribute | $Price %]</td>
214
                                    [% ELSIF item.$attribute && attribute == 'itemcallnumber' %]
215
                                    [% ELSIF item.$attribute && attribute == 'itemcallnumber' %]
215
                                        <td class="[% can_mod | html %]" data-order="[% item.cn_sort | html %]">[% item.$attribute | html %]</td>
216
                                        <td class="[% can_mod | html %]" data-order="[% item.cn_sort | html %]">[% item.$attribute | html %]</td>
217
                                    [% ELSIF attribute == 'location' %]
218
                                        <td class="[% can_mod | html %]">
219
                                            [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.effective_location ) | html %]
220
                                        </td>
216
                                    [% ELSE %]
221
                                    [% ELSE %]
217
                                        <td class="[% can_mod | html %]">[% item.$attribute | html %]</td>
222
                                        <td class="[% can_mod | html %]">[% item.$attribute | html %]</td>
218
                                    [% END %]
223
                                    [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/article-requests.tt (-6 / +6 lines)
Lines 273-280 Link Here
273
                                <td class="ar-collection">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => ar.item.ccode ) | html %]</td>
273
                                <td class="ar-collection">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => ar.item.ccode ) | html %]</td>
274
                                <td class="ar-itemtype">[% ItemTypes.GetDescription( ar.item.effective_itemtype ) | html %]</td>
274
                                <td class="ar-itemtype">[% ItemTypes.GetDescription( ar.item.effective_itemtype ) | html %]</td>
275
                                <td class="ar-callnumber">
275
                                <td class="ar-callnumber">
276
                                    [% IF ar.item.location %]
276
                                    [% IF ar.item.effective_location %]
277
                                        <em>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ar.item.location ) | html %]</em>
277
                                        <em>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ar.item.effective_location ) | html %]</em>
278
                                    [% END %]
278
                                    [% END %]
279
279
280
                                    [% ar.item.itemcallnumber | html %]
280
                                    [% ar.item.itemcallnumber | html %]
Lines 380-387 Link Here
380
                                <td class="ar-collection">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => ar.item.ccode ) | html %]</td>
380
                                <td class="ar-collection">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => ar.item.ccode ) | html %]</td>
381
                                <td class="ar-itemtype">[% ItemTypes.GetDescription( ar.item.effective_itemtype ) | html %]</td>
381
                                <td class="ar-itemtype">[% ItemTypes.GetDescription( ar.item.effective_itemtype ) | html %]</td>
382
                                <td class="ar-callnumber">
382
                                <td class="ar-callnumber">
383
                                    [% IF ar.item.location %]
383
                                    [% IF ar.item.effective_location %]
384
                                        <em>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ar.item.location ) | html %]</em>
384
                                        <em>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ar.item.effective_location ) | html %]</em>
385
                                    [% END %]
385
                                    [% END %]
386
386
387
                                    [% ar.item.itemcallnumber | html %]
387
                                    [% ar.item.itemcallnumber | html %]
Lines 484-491 Link Here
484
                                <td class="ar-collection">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => ar.item.ccode ) | html %]</td>
484
                                <td class="ar-collection">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => ar.item.ccode ) | html %]</td>
485
                                <td class="ar-itemtype">[% ItemTypes.GetDescription( ar.item.effective_itemtype ) | html %]</td>
485
                                <td class="ar-itemtype">[% ItemTypes.GetDescription( ar.item.effective_itemtype ) | html %]</td>
486
                                <td class="ar-callnumber">
486
                                <td class="ar-callnumber">
487
                                    [% IF ar.item.location %]
487
                                    [% IF ar.item.effective_location %]
488
                                        <em>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ar.item.location ) | html %]</em>
488
                                        <em>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => ar.item.effective_location ) | html %]</em>
489
                                    [% END %]
489
                                    [% END %]
490
490
491
                                    [% ar.item.itemcallnumber | html %]
491
                                    [% ar.item.itemcallnumber | html %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/branchtransfers.tt (-1 / +1 lines)
Lines 273-279 Link Here
273
                                    >[% trsfitemloo.item.barcode | html %]</a
273
                                    >[% trsfitemloo.item.barcode | html %]</a
274
                                ></td
274
                                ></td
275
                            >
275
                            >
276
                            <td class="tf-location"><span class="shelvingloc">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => trsfitemloo.item.location ) | html %]</span></td>
276
                            <td class="tf-location"><span class="shelvingloc">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => trsfitemloo.item.effective_location ) | html %]</span></td>
277
                            <td class="tf-itemcallnumber">[% trsfitemloo.item.itemcallnumber | html %]</td>
277
                            <td class="tf-itemcallnumber">[% trsfitemloo.item.itemcallnumber | html %]</td>
278
                            <td class="tf-itemtype">[% ItemTypes.GetDescription( trsfitemloo.item.effective_itemtype ) | html %]</td>
278
                            <td class="tf-itemtype">[% ItemTypes.GetDescription( trsfitemloo.item.effective_itemtype ) | html %]</td>
279
                            <td class="tf-ccode">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => trsfitemloo.item.ccode ) | html %]</td>
279
                            <td class="tf-ccode">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => trsfitemloo.item.ccode ) | html %]</td>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/on-site_checkouts.tt (-1 / +1 lines)
Lines 63-69 Link Here
63
                                <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% item.biblionumber | uri %]&amp;itemnumber=[% item.itemnumber | uri %]#item[% item.itemnumber | uri %]">[% item.barcode | html %]</a>
63
                                <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% item.biblionumber | uri %]&amp;itemnumber=[% item.itemnumber | uri %]#item[% item.itemnumber | uri %]">[% item.barcode | html %]</a>
64
                            </td>
64
                            </td>
65
                            <td>[% Branches.GetName(item.branchcode) | html %]</td>
65
                            <td>[% Branches.GetName(item.branchcode) | html %]</td>
66
                            <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.location ) | html %]</td>
66
                            <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => (item.effective_location || item.location) ) | html %]</td>
67
                        </tr>
67
                        </tr>
68
                    [% END %]
68
                    [% END %]
69
                </tbody>
69
                </tbody>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tt (-1 / +3 lines)
Lines 144-150 Link Here
144
                                            >
144
                                            >
145
                                            <td>[% Branches.GetName( overdueloo.homebranchcode ) | html %]</td>
145
                                            <td>[% Branches.GetName( overdueloo.homebranchcode ) | html %]</td>
146
                                            <td>[% Branches.GetName( overdueloo.holdingbranchcode ) | html %]</td>
146
                                            <td>[% Branches.GetName( overdueloo.holdingbranchcode ) | html %]</td>
147
                                            <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => overdueloo.location ) | html %]</td>
147
                                            <td>
148
                                                [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => overdueloo.effective_location ) | html %]
149
                                            </td>
148
                                            <td data-order="[% overdueloo.datelastborrowed | html %]">[% overdueloo.datelastborrowed | $KohaDates %]</td>
150
                                            <td data-order="[% overdueloo.datelastborrowed | html %]">[% overdueloo.datelastborrowed | $KohaDates %]</td>
149
                                            <td
151
                                            <td
150
                                                ><a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% overdueloo.biblionumber | uri %]&amp;itemnumber=[% overdueloo.itemnum | uri %]#item[% overdueloo.itemnum | uri %]"
152
                                                ><a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% overdueloo.biblionumber | uri %]&amp;itemnumber=[% overdueloo.itemnum | uri %]#item[% overdueloo.itemnum | uri %]"
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingbookings.tt (-2 / +2 lines)
Lines 235-241 Link Here
235
                    }
235
                    }
236
                },
236
                },
237
                {
237
                {
238
                    "data": "item.location",
238
                    "data": "item.effective_location",
239
                    "title": _("Location"),
239
                    "title": _("Location"),
240
                    "searchable": false,
240
                    "searchable": false,
241
                    "orderable": false,
241
                    "orderable": false,
Lines 244-250 Link Here
244
                            if ( row.item.checked_out_date ) {
244
                            if ( row.item.checked_out_date ) {
245
                                return _("On loan, due: ") + $date(row.item.checked_out_date);
245
                                return _("On loan, due: ") + $date(row.item.checked_out_date);
246
                            } else {
246
                            } else {
247
                                return row.item._strings.location.str;
247
                                return row.item._strings.effective_location.str;
248
                            }
248
                            }
249
                        } else {
249
                        } else {
250
                                return null;
250
                                return null;
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingreserves.tt (-2 / +22 lines)
Lines 83-88 Link Here
83
                                    <th>Earliest hold date</th>
83
                                    <th>Earliest hold date</th>
84
                                    <th>Hold notes</th>
84
                                    <th>Hold notes</th>
85
                                    <th class="string-sort">Pickup location</th>
85
                                    <th class="string-sort">Pickup location</th>
86
                                    [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
87
                                        <th class="no-sort">Displays</th>
88
                                    [% END %]
86
                                    <th class="no-sort">Action</th>
89
                                    <th class="no-sort">Action</th>
87
                                </tr>
90
                                </tr>
88
                            </thead>
91
                            </thead>
Lines 184-191 Link Here
184
                                        </td>
187
                                        </td>
185
                                        <td>
188
                                        <td>
186
                                            <ul>
189
                                            <ul>
187
                                                [% FOREACH loc IN hold_info.locations %]
190
                                                [% FOREACH effective_location IN hold_info.effective_locations %]
188
                                                    <li>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => loc ) | html %]</li>
191
                                                    <li>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => effective_location ) | html %]</li>
189
                                                [% END %]
192
                                                [% END %]
190
                                            </ul>
193
                                            </ul>
191
                                        </td>
194
                                        </td>
Lines 199-204 Link Here
199
                                        <td data-order="[% hold.reservedate | html %]"> [% hold.reservedate | $KohaDates %] in [% Branches.GetName ( hold.branchcode ) | html %] </td>
202
                                        <td data-order="[% hold.reservedate | html %]"> [% hold.reservedate | $KohaDates %] in [% Branches.GetName ( hold.branchcode ) | html %] </td>
200
                                        <td>[% hold.reservenotes | html %]</td>
203
                                        <td>[% hold.reservenotes | html %]</td>
201
                                        <td> [% Branches.GetName ( hold.branchcode ) | html %] </td>
204
                                        <td> [% Branches.GetName ( hold.branchcode ) | html %] </td>
205
                                        [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
206
                                            <td>
207
                                                [% IF ( hold_info.displays ) %]
208
                                                    [% IF hold_info.displays.size > 1 %]
209
                                                        <span>In displays:</span>
210
                                                    [% ELSE %]
211
                                                        <span>In display:</span>
212
                                                    [% END %]
213
                                                    [% FOR display IN hold_info.displays %]
214
                                                        <a href="/cgi-bin/koha/display/displays/[% display.display_id | url %]">[% display.display_name | html %]</a>
215
                                                        [% UNLESS loop.last %], [% END %]
216
                                                    [% END %]
217
                                                [% ELSE %]
218
                                                    <em>Not in any displays</em>
219
                                                [% END %]
220
                                            </td>
221
                                        [% END %]
202
                                        <td>
222
                                        <td>
203
                                            <form name="cancelReserve" action="/cgi-bin/koha/circ/pendingreserves.pl" method="post">
223
                                            <form name="cancelReserve" action="/cgi-bin/koha/circ/pendingreserves.pl" method="post">
204
                                                [% INCLUDE 'csrf-token.inc' %]
224
                                                [% INCLUDE 'csrf-token.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt (-1 / +8 lines)
Lines 267-272 Link Here
267
            </div>
267
            </div>
268
        [% END %]
268
        [% END %]
269
269
270
        [% IF RemovedFromDisplay %]
271
            <div id="removed_from_display" class="alert alert-info">
272
                <h3>Item removed from display</h3>
273
                <p>This item has been removed from the display: <strong>[% RemovedFromDisplay.display_name | html %]</strong></p>
274
            </div>
275
        [% END %]
276
270
        [% IF ( errmsgloop ) %]
277
        [% IF ( errmsgloop ) %]
271
            <div class="alert alert-warning audio-alert-warning">
278
            <div class="alert alert-warning audio-alert-warning">
272
                <h3>Check in message</h3>
279
                <h3>Check in message</h3>
Lines 1383-1389 Link Here
1383
                            [%- END -%]
1390
                            [%- END -%]
1384
                        </td>
1391
                        </td>
1385
                        <td class="ci-shelvinglocation">
1392
                        <td class="ci-shelvinglocation">
1386
                            <span class="shelvingloc">[% checkin.item_location | html %]</span>
1393
                            <span class="shelvingloc"> [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => checkin.item.effective_location ) | html %] </span>
1387
                        </td>
1394
                        </td>
1388
                        <td class="ci-callnumber"> [% checkin.item.itemcallnumber | html %] </td>
1395
                        <td class="ci-callnumber"> [% checkin.item.itemcallnumber | html %] </td>
1389
                        <td class="ci-dateaccessioned"> [% checkin.item.dateaccessioned | $KohaDates %] </td>
1396
                        <td class="ci-dateaccessioned"> [% checkin.item.dateaccessioned | $KohaDates %] </td>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/view_holdsqueue.tt (-1 / +32 lines)
Lines 121-126 Link Here
121
                                                <th class="hq-patroncategory">Patron category</th>
121
                                                <th class="hq-patroncategory">Patron category</th>
122
                                                <th class="hq-sendto">Send to</th>
122
                                                <th class="hq-sendto">Send to</th>
123
                                                <th class="hq-date">Date</th>
123
                                                <th class="hq-date">Date</th>
124
                                                [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
125
                                                    <th class="hq-displays">Displays</th>
126
                                                [% END %]
124
                                                <th class="hq-notes">Notes</th>
127
                                                <th class="hq-notes">Notes</th>
125
                                            </tr>
128
                                            </tr>
126
                                            <tr>
129
                                            <tr>
Lines 204-209 Link Here
204
                                                        <input type="text" placeholder="Date" />
207
                                                        <input type="text" placeholder="Date" />
205
                                                    </span>
208
                                                    </span>
206
                                                </td>
209
                                                </td>
210
                                                [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
211
                                                    <td class="hq-displays">
212
                                                        <span class="filter_column filter_text">
213
                                                            <input type="text" placeholder="Displays" />
214
                                                        </span>
215
                                                    </td>
216
                                                [% END %]
207
                                                <td class="hq-notes">
217
                                                <td class="hq-notes">
208
                                                    <span class="filter_column filter_text">
218
                                                    <span class="filter_column filter_text">
209
                                                        <input type="text" placeholder="Notes" />
219
                                                        <input type="text" placeholder="Notes" />
Lines 240-246 Link Here
240
                                                    <td class="hq-holdingbranch">[% Branches.GetName( itemsloo.holdingbranch ) | html %]</td>
250
                                                    <td class="hq-holdingbranch">[% Branches.GetName( itemsloo.holdingbranch ) | html %]</td>
241
                                                    <td class="hq-homebranch">[% Branches.GetName( itemsloo.item.homebranch ) | html %]</td>
251
                                                    <td class="hq-homebranch">[% Branches.GetName( itemsloo.item.homebranch ) | html %]</td>
242
                                                    <td class="hq-collection">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => itemsloo.item.ccode ) | html %]</td>
252
                                                    <td class="hq-collection">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => itemsloo.item.ccode ) | html %]</td>
243
                                                    <td class="hq-location">[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => itemsloo.item.location ) | html %]</td>
253
                                                    <td class="hq-location">
254
                                                        [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => itemsloo.item.effective_location ) | html %]
255
                                                    </td>
244
                                                    <td class="hq-itemtype">[% ItemTypes.GetDescription( itemsloo.item.effective_itemtype ) | html %]</td>
256
                                                    <td class="hq-itemtype">[% ItemTypes.GetDescription( itemsloo.item.effective_itemtype ) | html %]</td>
245
                                                    <td class="hq-callnumber"><span class="itemcallnumber">[% itemsloo.item.itemcallnumber | html %]</span></td>
257
                                                    <td class="hq-callnumber"><span class="itemcallnumber">[% itemsloo.item.itemcallnumber | html %]</span></td>
246
                                                    <td class="hq-copynumber">[% itemsloo.item.copynumber | html %]</td>
258
                                                    <td class="hq-copynumber">[% itemsloo.item.copynumber | html %]</td>
Lines 287-292 Link Here
287
                                                    <td class="hq-patroncategory">[% itemsloo.patron.category.description | html %] ([% itemsloo.patron.categorycode | html %])</td>
299
                                                    <td class="hq-patroncategory">[% itemsloo.patron.category.description | html %] ([% itemsloo.patron.categorycode | html %])</td>
288
                                                    <td class="hq-sendto">[% Branches.GetName( itemsloo.pickbranch ) | html %]</td>
300
                                                    <td class="hq-sendto">[% Branches.GetName( itemsloo.pickbranch ) | html %]</td>
289
                                                    <td class="hq-date" data-order="[% itemsloo.reservedate | html %]">[% itemsloo.reservedate | $KohaDates %]</td>
301
                                                    <td class="hq-date" data-order="[% itemsloo.reservedate | html %]">[% itemsloo.reservedate | $KohaDates %]</td>
302
                                                    [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
303
                                                        <td>
304
                                                            [% FOREACH itemsdisplay IN itemsdisplays %]
305
                                                                [% IF (itemsloo.itemnumber == itemsdisplay.itemnumber) %]
306
                                                                    [% IF itemsdisplay.displays.size > 1 %]
307
                                                                        <span>In displays:</span>
308
                                                                    [% ELSE %]
309
                                                                        <span>In display:</span>
310
                                                                    [% END %]
311
                                                                    [% FOREACH display IN itemsdisplay.displays %]
312
                                                                        <a href="/cgi-bin/koha/display/displays/[% display.display_id | url %]">[% display.display_name | html %]</a>
313
                                                                        [% UNLESS loop.last %], [% END %]
314
                                                                    [% END %]
315
                                                                [% ELSE %]
316
                                                                    <span><em>Item not in display</em></span>
317
                                                                [% END %]
318
                                                            [% END %]
319
                                                        </td>
320
                                                    [% END %]
290
                                                    <td class="hq-notes">[% itemsloo.notes | html %]</td>
321
                                                    <td class="hq-notes">[% itemsloo.notes | html %]</td>
291
                                                </tr>
322
                                                </tr>
292
                                            [% END %]
323
                                            [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/display/display-home.tt (+36 lines)
Line 0 Link Here
1
[% USE raw %]
2
[% USE To %]
3
[% USE Asset %]
4
[% USE Koha %]
5
[% USE KohaDates %]
6
[% USE TablesSettings %]
7
[% USE AuthorisedValues %]
8
[% SET footerjs = 1 %]
9
[% PROCESS 'i18n.inc' %]
10
[% INCLUDE 'doc-head-open.inc' %]
11
<title> Displays &rsaquo; Koha </title>
12
[% INCLUDE 'doc-head-close.inc' %]
13
</head>
14
15
<body id="display_home" class="display">
16
[% WRAPPER 'header.inc' %]
17
    [% INCLUDE 'display-search.inc' %]
18
[% END %]
19
20
<div id="display"></div>
21
22
[% MACRO jsinclude BLOCK %]
23
    [% INCLUDE 'calendar.inc' %]
24
    [% INCLUDE 'datatables.inc' %]
25
    [% INCLUDE 'js-date-format.inc' %]
26
    [% INCLUDE 'js-biblio-format.inc' %]
27
    <script>
28
        const authorised_value_categories = [% To.json(AuthorisedValues.GetCategories()) | $raw %].map(c => c.category);
29
        const db_columns = [% To.json(db_columns) | $raw %];
30
        const api_mappings = [% To.json(api_mappings) | $raw %];
31
32
        const csrf_token = "[% Koha.GenerateCSRF | $raw %]";
33
    </script>
34
    [% Asset.js("js/vue/dist/display.js") | $raw %]
35
[% END %]
36
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt (+6 lines)
Lines 167-172 Link Here
167
                            </li>
167
                            </li>
168
                        [% END %]
168
                        [% END %]
169
169
170
                        [% IF Koha.Preference('UseDisplayModule') && CAN_user_displays %]
171
                            <li>
172
                                <a class="icon_general icon_display" href="/cgi-bin/koha/display/display-home.pl"><i class="fa-solid fa-fw fa-image-portrait"></i>Displays</a>
173
                            </li>
174
                        [% END %]
175
170
                        [% IF ( CAN_user_tools || CAN_user_clubs ) %]
176
                        [% IF ( CAN_user_tools || CAN_user_clubs ) %]
171
                            <li>
177
                            <li>
172
                                <a class="icon_general icon_tools" href="/cgi-bin/koha/tools/tools-home.pl"><i class="fa fa-fw fa-wrench"></i>Tools</a>
178
                                <a class="icon_general icon_tools" href="/cgi-bin/koha/tools/tools-home.pl"><i class="fa fa-fw fa-wrench"></i>Tools</a>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/recalls/recalls_to_pull.tt (-2 / +2 lines)
Lines 111-118 Link Here
111
                                </td>
111
                                </td>
112
                                <td class="recall-locations">
112
                                <td class="recall-locations">
113
                                    <ul>
113
                                    <ul>
114
                                        [% FOREACH loc IN recall.locations %]
114
                                        [% FOREACH location IN recall.locations %]
115
                                            <li>[% AuthorisedValues.GetByCode('LOC', loc) | html %]</li>
115
                                            <li>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => location ) | html %]</li>
116
                                        [% END %]
116
                                        [% END %]
117
                                    </ul>
117
                                    </ul>
118
                                </td>
118
                                </td>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/itemslost.tt (-1 / +3 lines)
Lines 126-132 Link Here
126
                                <td>[% ItemTypes.GetDescription(item.effective_itemtype) | html %]</td>
126
                                <td>[% ItemTypes.GetDescription(item.effective_itemtype) | html %]</td>
127
                                <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => item.ccode ) | html %]</td>
127
                                <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => item.ccode ) | html %]</td>
128
                                <td>[% Branches.GetName(item.holdingbranch) | html %]</td>
128
                                <td>[% Branches.GetName(item.holdingbranch) | html %]</td>
129
                                <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.location ) | html %]</td>
129
                                <td>
130
                                    [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.effective_location ) | html %]
131
                                </td>
130
                                <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.notforloan', authorised_value => item.notforloan ) | html %] </td><td>[% item.itemnotes | $raw %]</td>
132
                                <td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.notforloan', authorised_value => item.notforloan ) | html %] </td><td>[% item.itemnotes | $raw %]</td>
131
                            </tr>
133
                            </tr>
132
                        [% END %]
134
                        [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tags/list.tt (-1 / +3 lines)
Lines 96-102 Link Here
96
                                                >[% FOREACH item IN title.items %]
96
                                                >[% FOREACH item IN title.items %]
97
                                                    <li>
97
                                                    <li>
98
                                                        [% Branches.GetName(item.holdingbranch) | html %]
98
                                                        [% Branches.GetName(item.holdingbranch) | html %]
99
                                                        <span class="shelvingloc"> [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.location ) | html %] </span>
99
                                                            <span class="shelvingloc">
100
                                                                [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.effective_location ) | html %]
101
                                                            </span>
100
                                                        [% IF ( item.itemcallnumber ) %]
102
                                                        [% IF ( item.itemcallnumber ) %]
101
                                                            ([% item.itemcallnumber | html %])
103
                                                            ([% item.itemcallnumber | html %])
102
                                                        [% END %]
104
                                                        [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/viewlog.tt (-1 / +1 lines)
Lines 123-129 Link Here
123
                            [% ELSE %]
123
                            [% ELSE %]
124
                                <label for="moduleALL" class="viewlog"><input type="checkbox" id="moduleALL" name="modules" value="" /> All</label>
124
                                <label for="moduleALL" class="viewlog"><input type="checkbox" id="moduleALL" name="modules" value="" /> All</label>
125
                            [% END %]
125
                            [% END %]
126
                            [% FOREACH modx IN [ 'AUTH' 'CATALOGUING' 'AUTHORITIES' 'MEMBERS' 'ACQUISITIONS' 'SERIAL' 'HOLDS' 'ILL' 'CIRCULATION' 'CLAIMS' 'FINES' 'SYSTEMPREFERENCE' 'CRONJOBS', 'REPORTS', 'SEARCHENGINE', 'NOTICES', 'NEWS', 'RECALLS', 'SUGGESTION', 'TRANSFERS' ] %]
126
                            [% FOREACH modx IN [ 'AUTH' 'CATALOGUING' 'AUTHORITIES' 'MEMBERS' 'ACQUISITIONS' 'SERIAL' 'HOLDS' 'ILL' 'CIRCULATION' 'CLAIMS' 'DISPLAYS' 'FINES' 'SYSTEMPREFERENCE' 'CRONJOBS', 'REPORTS', 'SEARCHENGINE', 'NOTICES', 'NEWS', 'RECALLS', 'SUGGESTION', 'TRANSFERS' ] %]
127
                                [% IF modules.grep(modx).size %]
127
                                [% IF modules.grep(modx).size %]
128
                                    <label for="module[% modx | html %]" class="viewlog"
128
                                    <label for="module[% modx | html %]" class="viewlog"
129
                                        ><input type="checkbox" id="module[% modx | html %]" name="modules" value="[% modx | html %]" checked="checked" /> [% PROCESS translate_log_module module=modx %]</label
129
                                        ><input type="checkbox" id="module[% modx | html %]" name="modules" value="[% modx | html %]" checked="checked" /> [% PROCESS translate_log_module module=modx %]</label
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/shelves.tt (-2 / +4 lines)
Lines 388-395 Link Here
388
                                        [% FOREACH item IN itemsloo.ITEM_RESULTS %]
388
                                        [% FOREACH item IN itemsloo.ITEM_RESULTS %]
389
                                            <li>
389
                                            <li>
390
                                                [% Branches.GetName(item.holdingbranch) | html %]
390
                                                [% Branches.GetName(item.holdingbranch) | html %]
391
                                                [% IF ( item.location ) %]
391
                                                [% IF ( item.effective_location ) %]
392
                                                    <span class="shelvingloc"> [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.location ) | html %] </span>
392
                                                    <span class="shelvingloc">
393
                                                        [% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => item.effective_location ) | html %]
394
                                                    </span>
393
                                                [% END %]
395
                                                [% END %]
394
                                                [% IF ( item.itemcallnumber ) %]
396
                                                [% IF ( item.itemcallnumber ) %]
395
                                                    [<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=%22[% item.itemcallnumber | uri %]%22">[% item.itemcallnumber | html %]</a>]
397
                                                    [<a href="/cgi-bin/koha/catalogue/search.pl?idx=callnum&amp;q=%22[% item.itemcallnumber | uri %]%22">[% item.itemcallnumber | html %]</a>]
(-)a/recalls/recalls_to_pull.pl (-2 / +1 lines)
Lines 98-104 if ( $op eq 'list' ) { Link Here
98
                    push( @copynumbers, $item->copynumber )         if ( $item->copynumber );
98
                    push( @copynumbers, $item->copynumber )         if ( $item->copynumber );
99
                    push( @enumchrons,  $item->enumchron )          if ( $item->enumchron );
99
                    push( @enumchrons,  $item->enumchron )          if ( $item->enumchron );
100
                    push( @itemtypes,   $item->effective_itemtype ) if ( $item->effective_itemtype );
100
                    push( @itemtypes,   $item->effective_itemtype ) if ( $item->effective_itemtype );
101
                    push( @locations,   $item->location )           if ( $item->location );
101
                    push( @locations,   $item->effective_location ) if ( $item->effective_location );
102
                    push( @libraries,   $item->holdingbranch )      if ( $item->holdingbranch );
102
                    push( @libraries,   $item->holdingbranch )      if ( $item->holdingbranch );
103
                }
103
                }
104
            }
104
            }
105
- 

Return to bug 14962