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

(-)a/Koha/REST/V1/Illrequests.pm (-16 / +13 lines)
Lines 58-79 sub list { Link Here
58
    # Get all requests
58
    # Get all requests
59
    my @requests = Koha::Illrequests->as_list;
59
    my @requests = Koha::Illrequests->as_list;
60
60
61
    # Create new "formatted" columns for each date column
62
    # that needs formatting
63
    foreach $req(@requests) {
64
        foreach my $field(@format_dates) {
65
            if (defined $req->{$field}) {
66
                $req->{$field . "_formatted"} = format_sqldatetime(
67
                    $req->{$field},
68
                    undef,
69
                    undef,
70
                    1
71
                );
72
            }
73
        }
74
75
    }
76
77
    # Identify patrons & branches that
61
    # Identify patrons & branches that
78
    # we're going to need and get them
62
    # we're going to need and get them
79
    my $to_fetch = {
63
    my $to_fetch = {
Lines 128-133 sub list { Link Here
128
    foreach my $req(@requests) {
112
    foreach my $req(@requests) {
129
        my $to_push = $req->unblessed;
113
        my $to_push = $req->unblessed;
130
        $to_push->{id_prefix} = $req->id_prefix;
114
        $to_push->{id_prefix} = $req->id_prefix;
115
        # Create new "formatted" columns for each date column
116
        # that needs formatting
117
        foreach my $field(@format_dates) {
118
            if (defined $to_push->{$field}) {
119
                $to_push->{$field . "_formatted"} = format_sqldatetime(
120
                    $to_push->{$field},
121
                    undef,
122
                    undef,
123
                    1
124
                );
125
            }
126
        }
127
131
        foreach my $p(@{$patron_arr}) {
128
        foreach my $p(@{$patron_arr}) {
132
            if ($p->{borrowernumber} == $req->borrowernumber) {
129
            if ($p->{borrowernumber} == $req->borrowernumber) {
133
                $to_push->{patron} = {
130
                $to_push->{patron} = {
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/ill/ill-requests.tt (-520 / +22 lines)
Lines 7-524 Link Here
7
[% INCLUDE 'doc-head-open.inc' %]
7
[% INCLUDE 'doc-head-open.inc' %]
8
<title>Koha &rsaquo; ILL requests</title>
8
<title>Koha &rsaquo; ILL requests</title>
9
[% INCLUDE 'doc-head-close.inc' %]
9
[% INCLUDE 'doc-head-close.inc' %]
10
[% Asset.js("lib/jquery/plugins/jquery.checkboxes.min.js") | $raw %]
11
[% Asset.css("css/datatables.css") | $raw %]
10
[% Asset.css("css/datatables.css") | $raw %]
12
[% INCLUDE 'datatables.inc' %]
13
[% INCLUDE 'calendar.inc' %]
14
<script type="text/javascript">
15
    //<![CDATA[
16
    $(document).ready(function() {
17
18
        // Illview Datatable setup
19
20
        var table;
21
22
        // Filters that are active
23
        var activeFilters = {};
24
25
        // Fields we don't want to display
26
        var ignore = [
27
            'accessurl',
28
            'backend',
29
            'branchcode',
30
            'completed',
31
            'capabilities',
32
            'cost',
33
            'medium',
34
            'notesopac',
35
            'notesstaff',
36
            'replied'
37
        ];
38
39
        // Fields we need to expand (flatten)
40
        var expand = [
41
            'metadata',
42
            'patron'
43
        ];
44
45
        // Expanded fields
46
        // This is auto populated
47
        var expanded = {};
48
49
        // The core fields that should be displayed first
50
        var core = [
51
            'metadata_author',
52
            'metadata_title',
53
            'borrowername',
54
            'patron_cardnumber',
55
            'biblio_id',
56
            'library',
57
            'status',
58
            'placed',
59
            'placed_formatted',
60
            'updated',
61
            'updated_formatted',
62
            'illrequest_id',
63
            'comments',
64
            'action' // Action should always be last
65
        ];
66
67
        // Filterable columns
68
        var filterable = {
69
            status: {
70
                prep: function(tableData, oData) {
71
                    var uniques = {};
72
                    tableData.forEach(function(row) {
73
                        var resolvedName = getStatusName(
74
                            oData[0].capabilities[row.status].name
75
                        );
76
                        uniques[resolvedName] = 1
77
                    });
78
                    Object.keys(uniques).sort().forEach(function(unique) {
79
                        $('#illfilter_status').append(
80
                            '<option value="' + unique  +
81
                            '">' + unique +  '</option>'
82
                        );
83
                    });
84
                },
85
                listener: function() {
86
                    var me = 'status';
87
                    $('#illfilter_status').change(function() {
88
                        var sel = $('#illfilter_status option:selected').val();
89
                        if (sel && sel.length > 0) {
90
                            activeFilters[me] = function() {
91
                                table.column(6).search(sel);
92
                            }
93
                        } else {
94
                            if (activeFilters.hasOwnProperty(me)) {
95
                                delete activeFilters[me];
96
                            }
97
                        }
98
                    });
99
                },
100
                clear: function() {
101
                    $('#illfilter_status').val('');
102
                }
103
            },
104
            pickupBranch: {
105
                prep: function(tableData, oData) {
106
                    var uniques = {};
107
                    tableData.forEach(function(row) {
108
                        uniques[row.library.branchname] = 1
109
                    });
110
                    Object.keys(uniques).sort().forEach(function(unique) {
111
                        $('#illfilter_branchname').append(
112
                            '<option value="' + unique  +
113
                            '">' + unique +  '</option>'
114
                        );
115
                    });
116
                },
117
                listener: function() {
118
                    var me = 'pickupBranch';
119
                    $('#illfilter_branchname').change(function() {
120
                        var sel = $('#illfilter_branchname option:selected').val();
121
                        if (sel && sel.length > 0) {
122
                            activeFilters[me] = function() {
123
                                table.column(5).search(sel);
124
                            }
125
                        } else {
126
                            if (activeFilters.hasOwnProperty(me)) {
127
                                delete activeFilters[me];
128
                            }
129
                        }
130
                    });
131
                },
132
                clear: function() {
133
                    $('#illfilter_branchname').val('');
134
                }
135
            },
136
            barcode: {
137
                listener: function() {
138
                    var me = 'barcode';
139
                    $('#illfilter_barcode').change(function() {
140
                        var val = $('#illfilter_barcode').val();
141
                        if (val && val.length > 0) {
142
                            activeFilters[me] = function() {
143
                                table.column(3).search(val);
144
                            }
145
                        } else {
146
                            if (activeFilters.hasOwnProperty(me)) {
147
                                delete activeFilters[me];
148
                            }
149
                        }
150
                    });
151
                },
152
                clear: function() {
153
                    $('#illfilter_barcode').val('');
154
                }
155
            },
156
            dateModified: {
157
                clear: function() {
158
                    $('#illfilter_datemodified_start, #illfilter_datemodified_end').val('');
159
                }
160
            },
161
            datePlaced: {
162
                clear: function() {
163
                    $('#illfilter_dateplaced_start, #illfilter_dateplaced_end').val('');
164
                }
165
            }
166
        };
167
168
        // Remove any fields we're ignoring
169
        var removeIgnore = function(dataObj) {
170
            dataObj.forEach(function(thisRow) {
171
                ignore.forEach(function(thisIgnore) {
172
                    if (thisRow.hasOwnProperty(thisIgnore)) {
173
                        delete thisRow[thisIgnore];
174
                    }
175
                });
176
            });
177
        };
178
179
        // Expand any fields we're expanding
180
        var expandExpand = function(row) {
181
            expand.forEach(function(thisExpand) {
182
                if (row.hasOwnProperty(thisExpand)) {
183
                    if (!expanded.hasOwnProperty(thisExpand)) {
184
                        expanded[thisExpand] = [];
185
                    }
186
                    var expandObj = row[thisExpand];
187
                    Object.keys(expandObj).forEach(
188
                        function(thisExpandCol) {
189
                            var expColName = thisExpand + '_' + thisExpandCol;
190
                            // Keep a list of fields that have been expanded
191
                            // so we can create toggle links for them
192
                            if (expanded[thisExpand].indexOf(expColName) == -1) {
193
                                expanded[thisExpand].push(expColName);
194
                            }
195
                            expandObj[expColName] =
196
                                expandObj[thisExpandCol];
197
                            delete expandObj[thisExpandCol];
198
                        }
199
                    );
200
                    $.extend(true, row, expandObj);
201
                    delete row[thisExpand];
202
                }
203
            });
204
        };
205
206
        // Build a de-duped list of all column names
207
        var allCols = {};
208
        core.map(function(thisCore) {
209
            allCols[thisCore] = 1;
210
        });
211
212
        // Strip the expand prefix if it exists, we do this for display
213
        var stripPrefix = function(value) {
214
            expand.forEach(function(thisExpand) {
215
                var regex = new RegExp(thisExpand + '_', 'g');
216
                value = value.replace(regex, '');
217
            });
218
            return value;
219
        };
220
221
        // Our 'render' function for borrowerlink
222
        var createPatronLink = function(data, type, row) {
223
            var patronLink = '<a title="' + _("View borrower details") + '" ' +
224
                'href="/cgi-bin/koha/members/moremember.pl?' +
225
                'borrowernumber='+row.borrowernumber+'">';
226
                if ( row.patron_firstname ) {
227
                    patronLink = patronLink + row.patron_firstname + ' ';
228
                }
229
                patronLink = patronLink + row.patron_surname + '</a>';
230
            return patronLink
231
        };
232
233
        // Our 'render' function for biblio_id
234
        var createBiblioLink = function(data, type, row) {
235
            return (row.biblio_id) ?
236
                '<a title="' + _("View biblio details") + '" ' +
237
                'href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=' +
238
                row.biblio_id + '">' +
239
                row.biblio_id +
240
                '</a>' : '';
241
        };
242
243
        // Our 'render' function for the library name
244
        var createLibrary = function(data, type, row) {
245
            return row.library.branchname;
246
        };
247
248
        // Render function for request ID
249
        var createRequestId = function(data, type, row) {
250
            return row.id_prefix + row.illrequest_id;
251
        };
252
253
        // Render function for request status
254
        var createStatus = function(data, type, row, meta) {
255
            var origData = meta.settings.oInit.originalData;
256
            if (origData.length > 0) {
257
                var status_name = meta.settings.oInit.originalData[0].capabilities[
258
                    row.status
259
                ].name;
260
                return getStatusName(status_name);
261
            } else {
262
                return '';
263
            }
264
        };
265
266
        var getStatusName = function(origName) {
267
            switch( origName ) {
268
                case "New request":
269
                    return _("New request");
270
                case "Requested":
271
                    return _("Requested");
272
                case "Requested from partners":
273
                    return _("Requested from partners");
274
                case "Request reverted":
275
                    return _("Request reverted");
276
                case "Queued request":
277
                    return _("Queued request");
278
                case "Cancellation requested":
279
                    return _("Cancellation requested");
280
                case "Completed":
281
                    return _("Completed");
282
                case "Delete request":
283
                    return _("Delete request");
284
                default:
285
                    return origName;
286
            }
287
        };
288
289
        // Render function for creating a row's action link
290
        var createActionLink = function(data, type, row) {
291
            return '<a class="btn btn-default btn-sm" ' +
292
                'href="/cgi-bin/koha/ill/ill-requests.pl?' +
293
                'method=illview&amp;illrequest_id=' +
294
                row.illrequest_id +
295
                '">' + _("Manage request") + '</a>';
296
        };
297
298
        // Columns that require special treatment
299
        var specialCols = {
300
            action: {
301
                name: '',
302
                func: createActionLink
303
            },
304
            borrowername: {
305
                name: _("Patron"),
306
                func: createPatronLink
307
            },
308
            illrequest_id: {
309
                name: _("Request number"),
310
                func: createRequestId
311
            },
312
            status: {
313
                name: _("Status"),
314
                func: createStatus
315
            },
316
            biblio_id: {
317
                name: _("Bibliograpic record ID"),
318
                func: createBiblioLink
319
            },
320
            library: {
321
                name: _("Library"),
322
                func: createLibrary
323
            },
324
            updated: {
325
                name: _("Updated on"),
326
            },
327
            patron_cardnumber: {
328
                name: _("Patron barcode")
329
            }
330
        };
331
332
        // Toggle request attributes in Illview
333
        $('#toggle_requestattributes').on('click', function(e) {
334
            e.preventDefault();
335
            $('#requestattributes').toggleClass('content_hidden');
336
        });
337
338
        // Toggle new comment form in Illview
339
        $('#toggle_addcomment').on('click', function(e) {
340
            e.preventDefault();
341
            $('#addcomment').toggleClass('content_hidden');
342
        });
343
344
        // Filter partner list
345
        $('#partner_filter').keyup(function() {
346
            var needle = $('#partner_filter').val();
347
            $('#partners > option').each(function() {
348
                var regex = new RegExp(needle, 'i');
349
                if (
350
                    needle.length == 0 ||
351
                    $(this).is(':selected') ||
352
                    $(this).text().match(regex)
353
                ) {
354
                    $(this).show();
355
                } else {
356
                    $(this).hide();
357
                }
358
            });
359
        });
360
361
        // Display the modal containing request supplier metadata
362
        $('#ill-request-display-metadata').on('click', function(e) {
363
            e.preventDefault();
364
            $('#dataPreview').modal({show:true});
365
        });
366
367
        // Get our data from the API and process it prior to passing
368
        // it to datatables
369
        var ajax = $.ajax(
370
            '/api/v1/illrequests?embed=metadata,patron,capabilities,library,comments'
371
            ).done(function() {
372
                var data = JSON.parse(ajax.responseText);
373
                // Make a copy, we'll be removing columns next and need
374
                // to be able to refer to data that has been removed
375
                var dataCopy = $.extend(true, [], data);
376
                // Remove all columns we're not interested in
377
                removeIgnore(dataCopy);
378
                // Expand columns that need it and create an array
379
                // of all column names
380
                $.each(dataCopy, function(k, row) {
381
                    expandExpand(row);
382
                });
383
384
                // Assemble an array of column definitions for passing
385
                // to datatables
386
                var colData = [];
387
                Object.keys(allCols).forEach(function(thisCol) {
388
                    // Create the base column object
389
                    var colObj = {
390
                        name: thisCol,
391
                        className: thisCol,
392
                        defaultContent: ''
393
                    };
394
                    // We may need to process the data going in this
395
                    // column, so do it if necessary
396
                    if (
397
                        specialCols.hasOwnProperty(thisCol) &&
398
                        specialCols[thisCol].hasOwnProperty('func')
399
                    ) {
400
                        colObj.render = specialCols[thisCol].func;
401
                    } else {
402
                        colObj.data = thisCol;
403
                    }
404
                    colData.push(colObj);
405
                });
406
407
                // Initialise the datatable
408
                table = $('#ill-requests').DataTable($.extend(true, {}, dataTablesDefaults, {
409
                    'aoColumnDefs': [
410
                        { // Last column shouldn't be sortable or searchable
411
                            'aTargets': [ 'actions' ],
412
                            'bSortable': false,
413
                            'bSearchable': false
414
                        },
415
                        { // Hide the two date columns we use just for sorting
416
                            'aTargets': [ 'placed', 'updated' ],
417
                            'bVisible': false,
418
                            'bSearchable': true
419
                        },
420
                        { // When sorting 'placed', we want to use the
421
                          // unformatted column
422
                          'aTargets': [ 'placed_formatted'],
423
                          'iDataSort': 7
424
                        },
425
                        { // When sorting 'updated', we want to use the
426
                          // unformatted column
427
                          'aTargets': [ 'updated_formatted'],
428
                          'iDataSort': 9
429
                        }
430
                    ],
431
                    'aaSorting': [[ 9, 'desc' ]], // Default sort, updated descending
432
                    'processing': true, // Display a message when manipulating
433
                    'iDisplayLength': 10, // 10 results per page
434
                    'sPaginationType': "full_numbers", // Pagination display
435
                    'deferRender': true, // Improve performance on big datasets
436
                    'data': dataCopy,
437
                    'columns': colData,
438
                    'originalData': data, // Enable render functions to access
439
                                          // our original data
440
                    'initComplete': function() {
441
442
                        // Prepare any filter elements that need it
443
                        for (var el in filterable) {
444
                            if (filterable.hasOwnProperty(el)) {
445
                                if (filterable[el].hasOwnProperty('prep')) {
446
                                    filterable[el].prep(dataCopy, data);
447
                                }
448
                                if (filterable[el].hasOwnProperty('listener')) {
449
                                    filterable[el].listener();
450
                                }
451
                            }
452
                        }
453
454
                    }
455
                }));
456
457
                // Custom date range filtering
458
                $.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
459
                    var placedStart = $('#illfilter_dateplaced_start').datepicker('getDate');
460
                    var placedEnd = $('#illfilter_dateplaced_end').datepicker('getDate');
461
                    var modifiedStart = $('#illfilter_datemodified_start').datepicker('getDate');
462
                    var modifiedEnd = $('#illfilter_datemodified_end').datepicker('getDate');
463
                    var rowPlaced = data[7] ? new Date(data[7]) : null;
464
                    var rowModified = data[9] ? new Date(data[9]) : null;
465
                    var placedPassed = true;
466
                    var modifiedPassed = true;
467
                    if (placedStart && rowPlaced && rowPlaced < placedStart) {
468
                        placedPassed = false
469
                    };
470
                    if (placedEnd && rowPlaced && rowPlaced > placedEnd) {
471
                        placedPassed = false;
472
                    }
473
                    if (modifiedStart && rowModified && rowModified < modifiedStart) {
474
                        modifiedPassed = false
475
                    };
476
                    if (modifiedEnd && rowModified && rowModified > modifiedEnd) {
477
                        modifiedPassed = false;
478
                    }
479
480
                    return placedPassed && modifiedPassed;
481
482
                });
483
484
            }
485
        );
486
487
        var clearSearch = function() {
488
            table.search('').columns().search('');
489
            activeFilters = {};
490
            for (var filter in filterable) {
491
                if (
492
                    filterable.hasOwnProperty(filter) &&
493
                    filterable[filter].hasOwnProperty('clear')
494
                ) {
495
                    filterable[filter].clear();
496
                }
497
            }
498
            table.draw();
499
        };
500
501
        // Apply any search filters, or clear any previous
502
        // ones
503
        $('#illfilter_form').submit(function(event) {
504
            event.preventDefault();
505
            table.search('').columns().search('');
506
            for (var active in activeFilters) {
507
                if (activeFilters.hasOwnProperty(active)) {
508
                    activeFilters[active]();
509
                }
510
            }
511
            table.draw();
512
        });
513
514
        // Clear all filters
515
        $('#clear_search').click(function() {
516
            clearSearch();
517
        });
518
519
    });
520
    //]]>
521
</script>
522
</head>
11
</head>
523
12
524
<body id="illrequests" class="ill">
13
<body id="illrequests" class="ill">
Lines 970-975 Link Here
970
                                    <th class="updated_formatted">Updated on</th>
459
                                    <th class="updated_formatted">Updated on</th>
971
                                    <th>Request number</th>
460
                                    <th>Request number</th>
972
                                    <th>Comments</th>
461
                                    <th>Comments</th>
462
                                    <th class="patron_cardnumber">Patron barcode</th>
973
                                    <th class="actions"></th>
463
                                    <th class="actions"></th>
974
                                </tr>
464
                                </tr>
975
                            </thead>
465
                            </thead>
Lines 995-1000 Link Here
995
[% MACRO jsinclude BLOCK %]
485
[% MACRO jsinclude BLOCK %]
996
    [% INCLUDE 'datatables.inc' %]
486
    [% INCLUDE 'datatables.inc' %]
997
    [% INCLUDE 'calendar.inc' %]
487
    [% INCLUDE 'calendar.inc' %]
488
    [% Asset.js("lib/jquery/plugins/jquery.checkboxes.min.js") | $raw %]
998
    <script>
489
    <script>
999
        $(document).ready(function() {
490
        $(document).ready(function() {
1000
491
Lines 1031-1040 Link Here
1031
522
1032
            // The core fields that should be displayed first
523
            // The core fields that should be displayed first
1033
            var core = [
524
            var core = [
1034
                'metadata_Author',
525
                'metadata_author',
1035
                'metadata_Title',
526
                'metadata_title',
1036
                'borrowername',
527
                'borrowername',
1037
                'patron_cardnumber',
1038
                'biblio_id',
528
                'biblio_id',
1039
                'library',
529
                'library',
1040
                'status',
530
                'status',
Lines 1043-1048 Link Here
1043
                'updated',
533
                'updated',
1044
                'updated_formatted',
534
                'updated_formatted',
1045
                'illrequest_id',
535
                'illrequest_id',
536
                'comments',
537
                'patron_cardnumber',
1046
                'action'
538
                'action'
1047
            ];
539
            ];
1048
540
Lines 1070-1076 Link Here
1070
                            var sel = $('#illfilter_status option:selected').val();
562
                            var sel = $('#illfilter_status option:selected').val();
1071
                            if (sel && sel.length > 0) {
563
                            if (sel && sel.length > 0) {
1072
                                activeFilters[me] = function() {
564
                                activeFilters[me] = function() {
1073
                                    table.column(6).search(sel);
565
                                    table.column(5).search(sel);
1074
                                }
566
                                }
1075
                            } else {
567
                            } else {
1076
                                if (activeFilters.hasOwnProperty(me)) {
568
                                if (activeFilters.hasOwnProperty(me)) {
Lines 1102-1108 Link Here
1102
                            var sel = $('#illfilter_branchname option:selected').val();
594
                            var sel = $('#illfilter_branchname option:selected').val();
1103
                            if (sel && sel.length > 0) {
595
                            if (sel && sel.length > 0) {
1104
                                activeFilters[me] = function() {
596
                                activeFilters[me] = function() {
1105
                                    table.column(5).search(sel);
597
                                    table.column(4).search(sel);
1106
                                }
598
                                }
1107
                            } else {
599
                            } else {
1108
                                if (activeFilters.hasOwnProperty(me)) {
600
                                if (activeFilters.hasOwnProperty(me)) {
Lines 1122-1128 Link Here
1122
                            var val = $('#illfilter_barcode').val();
614
                            var val = $('#illfilter_barcode').val();
1123
                            if (val && val.length > 0) {
615
                            if (val && val.length > 0) {
1124
                                activeFilters[me] = function() {
616
                                activeFilters[me] = function() {
1125
                                    table.column(3).search(val);
617
                                    table.column(12).search(val);
1126
                                }
618
                                }
1127
                            } else {
619
                            } else {
1128
                                if (activeFilters.hasOwnProperty(me)) {
620
                                if (activeFilters.hasOwnProperty(me)) {
Lines 1303-1308 Link Here
1303
                $('#requestattributes').toggleClass('content_hidden');
795
                $('#requestattributes').toggleClass('content_hidden');
1304
            });
796
            });
1305
797
798
            // Toggle new comment form in Illview
799
            $('#toggle_addcomment').on('click', function(e) {
800
                e.preventDefault();
801
                $('#addcomment').toggleClass('content_hidden');
802
            });
803
1306
            // Filter partner list
804
            // Filter partner list
1307
            $('#partner_filter').keyup(function() {
805
            $('#partner_filter').keyup(function() {
1308
                var needle = $('#partner_filter').val();
806
                var needle = $('#partner_filter').val();
Lines 1388-1393 Link Here
1388
                              // unformatted column
886
                              // unformatted column
1389
                              'aTargets': [ 'updated_formatted'],
887
                              'aTargets': [ 'updated_formatted'],
1390
                              'iDataSort': 9
888
                              'iDataSort': 9
889
                            },
890
                            {
891
                              'aTargets': [ 'patron_cardnumber' ],
892
                              'bVisible': false,
893
                              'bSearchable': true
1391
                            }
894
                            }
1392
                        ],
895
                        ],
1393
                        'aaSorting': [[ 9, 'desc' ]], // Default sort, updated descending
896
                        'aaSorting': [[ 9, 'desc' ]], // Default sort, updated descending
Lines 1421-1428 Link Here
1421
                        var placedEnd = $('#illfilter_dateplaced_end').datepicker('getDate');
924
                        var placedEnd = $('#illfilter_dateplaced_end').datepicker('getDate');
1422
                        var modifiedStart = $('#illfilter_datemodified_start').datepicker('getDate');
925
                        var modifiedStart = $('#illfilter_datemodified_start').datepicker('getDate');
1423
                        var modifiedEnd = $('#illfilter_datemodified_end').datepicker('getDate');
926
                        var modifiedEnd = $('#illfilter_datemodified_end').datepicker('getDate');
1424
                        var rowPlaced = data[7] ? new Date(data[7]) : null;
927
                        var rowPlaced = data[6] ? new Date(data[6]) : null;
1425
                        var rowModified = data[9] ? new Date(data[9]) : null;
928
                        var rowModified = data[8] ? new Date(data[8]) : null;
1426
                        var placedPassed = true;
929
                        var placedPassed = true;
1427
                        var modifiedPassed = true;
930
                        var modifiedPassed = true;
1428
                        if (placedStart && rowPlaced && rowPlaced < placedStart) {
931
                        if (placedStart && rowPlaced && rowPlaced < placedStart) {
1429
- 

Return to bug 20600