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

(-)a/ill/ill-requests.pl (-8 / +1 lines)
Lines 217-228 if ( $backends_available ) { Link Here
217
            exit;
217
            exit;
218
        };
218
        };
219
    } elsif ( $op eq 'illlist') {
219
    } elsif ( $op eq 'illlist') {
220
        # Display all current ILLs
221
        my $requests = $illRequests->search();
222
223
        $template->param(
224
            requests => $requests
225
        );
226
220
227
        # If we receive a pre-filter, make it available to the template
221
        # If we receive a pre-filter, make it available to the template
228
        my $possible_filters = ['borrowernumber'];
222
        my $possible_filters = ['borrowernumber'];
Lines 255-262 $template->param( Link Here
255
    backends   => $backends,
249
    backends   => $backends,
256
    media      => [ "Book", "Article", "Journal" ],
250
    media      => [ "Book", "Article", "Journal" ],
257
    query_type => $op,
251
    query_type => $op,
258
    branches   => Koha::Libraries->search,
252
    branches   => Koha::Libraries->search
259
    here_link  => "/cgi-bin/koha/ill/ill-requests.pl"
260
);
253
);
261
254
262
output_html_with_http_headers( $cgi, $cookie, $template->output );
255
output_html_with_http_headers( $cgi, $cookie, $template->output );
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/ill/ill-requests.tt (-141 / +49 lines)
Lines 2-7 Link Here
2
[% USE Koha %]
2
[% USE Koha %]
3
[% USE KohaDates %]
3
[% USE KohaDates %]
4
4
5
[% columns = [ 'metadata_Author', 'metadata_Title', 'borrowername', 'biblio_id', 'library', 'status', 'updated', 'illrequest_id', 'action' ] %]
6
7
[% BLOCK translate_column %]
8
[%-  SWITCH column -%]
9
[%-  CASE 'metadata_Author' -%]Author
10
[%-  CASE 'metadata_Title'  -%]Title
11
[%-  CASE 'borrowername'    -%]Patron
12
[%-  CASE 'biblio_id'       -%]Biblio ID
13
[%-  CASE 'library'         -%]Library
14
[%-  CASE 'status'          -%]Status
15
[%-  CASE 'updated'         -%]Updated on
16
[%-  CASE 'illrequest_id'   -%]Request number
17
[%-  END -%]
18
[% END %]
19
5
[% INCLUDE 'doc-head-open.inc' %]
20
[% INCLUDE 'doc-head-open.inc' %]
6
<title>Koha &rsaquo; ILL requests  &rsaquo;</title>
21
<title>Koha &rsaquo; ILL requests  &rsaquo;</title>
7
[% INCLUDE 'doc-head-close.inc' %]
22
[% INCLUDE 'doc-head-close.inc' %]
Lines 18-25 Link Here
18
        var ignore = [
33
        var ignore = [
19
            'accessurl',
34
            'accessurl',
20
            'backend',
35
            'backend',
36
            'branchcode',
21
            'completed',
37
            'completed',
22
            'branch',
23
            'capabilities',
38
            'capabilities',
24
            'cost',
39
            'cost',
25
            'medium',
40
            'medium',
Lines 45-51 Link Here
45
            'metadata_Title',
60
            'metadata_Title',
46
            'borrowername',
61
            'borrowername',
47
            'biblio_id',
62
            'biblio_id',
48
            'branchcode',
63
            'library',
49
            'status',
64
            'status',
50
            'updated',
65
            'updated',
51
            'illrequest_id',
66
            'illrequest_id',
Lines 98-120 Link Here
98
        core.map(function(thisCore) {
113
        core.map(function(thisCore) {
99
            allCols[thisCore] = 1;
114
            allCols[thisCore] = 1;
100
        });
115
        });
101
        var unionColumns = function(row) {
102
            Object.keys(row).forEach(function(col) {
103
                if (ignore.indexOf(col) == -1) {
104
                    allCols[col] = 1;
105
                }
106
            });
107
        };
108
109
        // Some rows may not have fields that other rows have,
110
        // so make sure all rows have the same fields
111
        var fillMissing = function(row) {
112
            Object.keys(allCols).forEach(function(thisCol) {
113
                row[thisCol] = (!row.hasOwnProperty(thisCol)) ?
114
                    null :
115
                    row[thisCol];
116
            });
117
        };
118
116
119
        // Strip the expand prefix if it exists, we do this for display
117
        // Strip the expand prefix if it exists, we do this for display
120
        var stripPrefix = function(value) {
118
        var stripPrefix = function(value) {
Lines 134-139 Link Here
134
                '</a>';
132
                '</a>';
135
        };
133
        };
136
134
135
        // Our 'render' function for the library name
136
        var createLibrary = function(data, type, row) {
137
            return row.library.branchname;
138
        };
139
137
        // Render function for request ID
140
        // Render function for request ID
138
        var createRequestId = function(data, type, row) {
141
        var createRequestId = function(data, type, row) {
139
            return row.id_prefix + row.illrequest_id;
142
            return row.id_prefix + row.illrequest_id;
Lines 149-176 Link Here
149
                switch( status_name ) {
152
                switch( status_name ) {
150
                    case "New request":
153
                    case "New request":
151
                        return _("New request");
154
                        return _("New request");
152
                        break;
153
                    case "Requested":
155
                    case "Requested":
154
                        return _("Requested");
156
                        return _("Requested");
155
                        break;
156
                    case "Requested from partners":
157
                    case "Requested from partners":
157
                        return _("Requested from partners");
158
                        return _("Requested from partners");
158
                        break;
159
                    case "Request reverted":
159
                    case "Request reverted":
160
                        return _("Request reverted");
160
                        return _("Request reverted");
161
                        break;
162
                    case "Queued request":
161
                    case "Queued request":
163
                        return _("Queued request");
162
                        return _("Queued request");
164
                        break;
165
                    case "Cancellation requested":
163
                    case "Cancellation requested":
166
                        return _("Cancellation requested");
164
                        return _("Cancellation requested");
167
                        break;
168
                    case "Completed":
165
                    case "Completed":
169
                        return _("Completed");
166
                        return _("Completed");
170
                        break;
171
                    case "Delete request":
167
                    case "Delete request":
172
                        return _("Delete request");
168
                        return _("Delete request");
173
                        break;
174
                    default:
169
                    default:
175
                        return status_name;
170
                        return status_name;
176
                }
171
                }
Lines 209-227 Link Here
209
            biblio_id: {
204
            biblio_id: {
210
                name: _("Biblio ID")
205
                name: _("Biblio ID")
211
            },
206
            },
212
            branchcode: {
207
            library: {
213
                name: _("Library")
208
                name: _("Library"),
209
                func: createLibrary
214
            }
210
            }
215
        };
211
        };
216
212
217
        // Helper for handling prefilter column names
218
        function toColumnName(myVal) {
219
            return myVal
220
                .replace(/^filter/, '')
221
                .replace(/([A-Z])/g, "_$1")
222
                .replace(/^_/,'').toLowerCase();
223
        }
224
225
        // Toggle request attributes in Illview
213
        // Toggle request attributes in Illview
226
        $('#toggle_requestattributes').on('click', function(e) {
214
        $('#toggle_requestattributes').on('click', function(e) {
227
            e.preventDefault();
215
            e.preventDefault();
Lines 248-254 Link Here
248
        // Get our data from the API and process it prior to passing
236
        // Get our data from the API and process it prior to passing
249
        // it to datatables
237
        // it to datatables
250
        var ajax = $.ajax(
238
        var ajax = $.ajax(
251
            '/api/v1/illrequests?embed=metadata,patron,capabilities,branch'
239
            '/api/v1/illrequests?embed=metadata,patron,capabilities,library'
252
            ).done(function() {
240
            ).done(function() {
253
                var data = JSON.parse(ajax.responseText);
241
                var data = JSON.parse(ajax.responseText);
254
                // Make a copy, we'll be removing columns next and need
242
                // Make a copy, we'll be removing columns next and need
Lines 260-293 Link Here
260
                // of all column names
248
                // of all column names
261
                $.each(dataCopy, function(k, row) {
249
                $.each(dataCopy, function(k, row) {
262
                    expandExpand(row);
250
                    expandExpand(row);
263
                    unionColumns(row);
264
                });
251
                });
252
265
                // Append any extra columns we need to tag on
253
                // Append any extra columns we need to tag on
266
                if (extra.length > 0) {
254
                if (extra.length > 0) {
267
                    extra.forEach(function(thisExtra) {
255
                    extra.forEach(function(thisExtra) {
268
                        allCols[thisExtra] = 1;
256
                        allCols[thisExtra] = 1;
269
                    });
257
                    });
270
                }
258
                }
271
                // Different requests will have different columns,
272
                // make sure they all have the same
273
                $.each(dataCopy, function(k, row) {
274
                    fillMissing(row);
275
                });
276
259
277
                // Assemble an array of column definitions for passing
260
                // Assemble an array of column definitions for passing
278
                // to datatables
261
                // to datatables
279
                var colData = [];
262
                var colData = [];
280
                Object.keys(allCols).forEach(function(thisCol) {
263
                Object.keys(allCols).forEach(function(thisCol) {
281
                    // We may have defined a pretty name for this column
282
                    var colName = (
283
                        specialCols.hasOwnProperty(thisCol) &&
284
                        specialCols[thisCol].hasOwnProperty('name')
285
                    ) ?
286
                        specialCols[thisCol].name :
287
                        thisCol;
288
                    // Create the table header for this column
289
                    var str = '<th>' + stripPrefix(colName) + '</th>';
290
                    $(str).appendTo('#illview-header');
291
                    // Create the base column object
264
                    // Create the base column object
292
                    var colObj = {
265
                    var colObj = {
293
                        name: thisCol,
266
                        name: thisCol,
Lines 306-389 Link Here
306
                    colData.push(colObj);
279
                    colData.push(colObj);
307
                });
280
                });
308
281
309
                // Create the toggle links for all metadata fields
310
                var links = [];
311
                expanded.metadata.forEach(function(thisExpanded) {
312
                    if (core.indexOf(thisExpanded) == -1) {
313
                        links.push(
314
                            '<a href="#" class="toggle-vis" data-column="' +
315
                            thisExpanded + '">' + stripPrefix(thisExpanded) +
316
                            '</a>'
317
                        );
318
                    }
319
                });
320
                $('#column-toggle').append(links.join(' | '));
321
322
                // Initialise the datatable
282
                // Initialise the datatable
323
                var myTable = $('#ill-requests').DataTable($.extend(true, {}, dataTablesDefaults, {
283
                $('#ill-requests').DataTable($.extend(true, {}, dataTablesDefaults, {
324
                    aoColumnDefs: [  // Last column shouldn't be sortable or searchable
284
                    'aoColumnDefs': [  // Last column shouldn't be sortable or searchable
325
                        {
285
                        {
326
                            aTargets: [ 'action' ],
286
                            'aTargets': [ 'action' ],
327
                            bSortable: false,
287
                            'bSortable': false,
328
                            bSearchable: false
288
                            'bSearchable': false
329
                        },
289
                        },
330
                    ],
290
                    ],
331
                    aaSorting: [[ 6, 'desc' ]], // Default sort, updated descending
291
                    'aaSorting': [[ 6, 'desc' ]], // Default sort, updated descending
332
                    processing: true, // Display a message when manipulating
292
                    'processing': true, // Display a message when manipulating
333
                    language: {
293
                    'iDisplayLength': 10, // 10 results per page
334
                        loadingRecords: "Please wait - loading requests...",
294
                    'sPaginationType': "full_numbers", // Pagination display
335
                        zeroRecords: "No requests were found"
295
                    'deferRender': true, // Improve performance on big datasets
336
                    },
296
                    'data': dataCopy,
337
                    iDisplayLength: 10, // 10 results per page
297
                    'columns': colData,
338
                    sPaginationType: "full_numbers", // Pagination display
298
                    'originalData': data // Enable render functions to access
339
                    deferRender: true, // Improve performance on big datasets
340
                    data: dataCopy,
341
                    columns: colData,
342
                    originalData: data // Enable render functions to access
343
                                       // our original data
299
                                       // our original data
344
                }));
300
                }));
345
346
                // Reset columns to default
347
                var resetColumns = function() {
348
                    Object.keys(allCols).forEach(function(thisCol) {
349
                        myTable.column(thisCol + ':name').visible(core.indexOf(thisCol) != -1);
350
                    });
351
                    myTable.columns.adjust().draw(false);
352
                };
353
354
                // Handle the click event on a toggle link
355
                $('a.toggle-vis').on('click', function(e) {
356
                    e.preventDefault();
357
                    var column = myTable.column(
358
                        $(this).data('column') + ':name'
359
                    );
360
                    column.visible(!column.visible());
361
                });
362
363
                // Reset column toggling
364
                $('#reset-toggle').click(function() {
365
                    resetColumns();
366
                });
367
368
                // Handle a prefilter request and do the prefiltering
369
                var filters = $('#ill-requests').data();
370
                if (typeof filters !== 'undefined') {
371
                    var filterNames = Object.keys(filters).filter(
372
                        function(thisData) {
373
                            return thisData.match(/^filter/);
374
                        }
375
                    );
376
                    filterNames.forEach(function(thisFilter) {
377
                        var filterName = toColumnName(thisFilter) + ':name';
378
                        var regex = '^'+filters[thisFilter]+'$';
379
                        myTable.columns(filterName).search(regex, true, false);
380
                    });
381
                    myTable.draw();
382
                }
383
384
                // Initialise column hiding
385
                resetColumns();
386
387
            }
301
            }
388
        );
302
        );
389
303
Lines 464-471 Link Here
464
                  [% END %]
378
                  [% END %]
465
                    <!-- Start of GENERIC_EMAIL case -->
379
                    <!-- Start of GENERIC_EMAIL case -->
466
                    [% IF whole.value.partners %]
380
                    [% IF whole.value.partners %]
467
                       [% ill_url = here_link _ "?method=illview&illrequest_id=" _ request.illrequest_id %]
381
                       [% ill_url = "/cgi-bin/koha/ill/ill-requests.pl?method=illview&illrequest_id=" _ request.illrequest_id %]
468
                        <form method="POST" action=[% here_link %]>
382
                        <form method="POST" action="/cgi-bin/koha/ill/ill-requests.pl">
469
                            <fieldset class="rows">
383
                            <fieldset class="rows">
470
                                <legend>Interlibrary loan request details</legend>
384
                                <legend>Interlibrary loan request details</legend>
471
                                <ol>
385
                                <ol>
Lines 516-522 Link Here
516
                <!-- generic_confirm ends here -->
430
                <!-- generic_confirm ends here -->
517
431
518
                [% ELSIF query_type == 'edit_action' %]
432
                [% ELSIF query_type == 'edit_action' %]
519
                    <form method="POST" action=[% here_link %]>
433
                    <form method="POST" action="/cgi-bin/koha/ill/ill-requests.pl">
520
                        <fieldset class="rows">
434
                        <fieldset class="rows">
521
                            <legend>Request details</legend>
435
                            <legend>Request details</legend>
522
                            <ol>
436
                            <ol>
Lines 700-717 Link Here
700
                    <div id="results">
614
                    <div id="results">
701
                        <h3>Details for all requests</h3>
615
                        <h3>Details for all requests</h3>
702
616
703
                        <div id="column-toggle">
617
                        <table id="ill-requests">
704
                            Toggle additional columns:
705
                        </div>
706
                        <div id="reset-toggle"><a href="#">Reset toggled columns</a></div>
707
708
                        <table
709
                            [% FOREACH filter IN prefilters %]
710
                            data-filter-[% filter.name %]="[% filter.value %]"
711
                            [% END %]
712
                            id="ill-requests">
713
                            <thead>
618
                            <thead>
714
                                <tr id="illview-header"></tr>
619
                                <tr id="illview-header">
620
                                [% FOR column IN columns %]
621
                                    <th>[% PROCESS translate_column column=column %]</th>
622
                                [% END %]
623
                                </tr>
715
                            </thead>
624
                            </thead>
716
                            <tbody id="illview-body">
625
                            <tbody id="illview-body">
717
                            </tbody>
626
                            </tbody>
718
- 

Return to bug 7317