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

(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/ill-list-table-strings.inc (+2 lines)
Lines 3-7 Link Here
3
    var ill_manage = _("Manage request");
3
    var ill_manage = _("Manage request");
4
    var ill_manage_select_backend_first = _("Select a backend first");
4
    var ill_manage_select_backend_first = _("Select a backend first");
5
    var ill_all_statuses = _("All statuses");
5
    var ill_all_statuses = _("All statuses");
6
    var ill_all_status_aliases = _("All status aliases");
7
    var ill_status_aliases = _("Status aliases");
6
</script>
8
</script>
7
<!-- / ill-list-table-strings.inc -->
9
<!-- / ill-list-table-strings.inc -->
(-)a/koha-tmpl/intranet-tmpl/prog/js/ill-list-table.js (-46 / +95 lines)
Lines 94-105 $(document).ready(function() { Link Here
94
        "-or": function(){
94
        "-or": function(){
95
            let patron = $("#illfilter_patron").val();
95
            let patron = $("#illfilter_patron").val();
96
            let status = $("#illfilter_status").val();
96
            let status = $("#illfilter_status").val();
97
            let status_alias = $("#illfilter_status_alias").val();
97
            let filters = [];
98
            let filters = [];
98
            let patron_sub_or = [];
99
            let patron_sub_or = [];
99
            let status_sub_or = [];
100
            let status_sub_or = [];
100
            let subquery_and = [];
101
            let subquery_and = [];
101
102
102
            if (!patron && !status) return "";
103
            if (!patron && !status && !status_alias) return "";
103
104
104
            if(patron){
105
            if(patron){
105
                const patron_search_fields = "me.borrowernumber,patron.cardnumber,patron.firstname,patron.surname";
106
                const patron_search_fields = "me.borrowernumber,patron.cardnumber,patron.firstname,patron.surname";
Lines 118-130 $(document).ready(function() { Link Here
118
            }
119
            }
119
120
120
            if(status){
121
            if(status){
121
                const status_search_fields = "me.status,me.status_av";
122
                subquery_and.push( {"me.status":{"=": status }});
122
                status_search_fields.split(',').forEach(function(attr){
123
            }
123
                    status_sub_or.push({
124
            if(status_alias){
124
                        [attr]:{"=": status }
125
                subquery_and.push({"me.status_alias":{"=": status_alias }});
125
                    });
126
                });
127
                subquery_and.push(status_sub_or);
128
            }
126
            }
129
127
130
            filters.push({"-and": subquery_and});
128
            filters.push({"-and": subquery_and});
Lines 432-468 $(document).ready(function() { Link Here
432
        $('#illfilter_form > fieldset > ol > li:nth-child(6) > span > a').click();
430
        $('#illfilter_form > fieldset > ol > li:nth-child(6) > span > a').click();
433
        $('#illfilter_form > fieldset > ol > li:nth-child(7) > span > a').click();
431
        $('#illfilter_form > fieldset > ol > li:nth-child(7) > span > a').click();
434
432
435
        disableStatusFilter();
436
437
        redrawTable();
433
        redrawTable();
438
    }
434
    }
439
435
440
    function populateStatusFilter(backend) {
436
    function addStatusOptions(statuses){
441
        $.ajax({
437
        $('#illfilter_status').children().remove();
442
            type: "GET",
438
        $('#illfilter_status').append(
443
            url: "/api/v1/ill/backends/"+backend,
439
            '<option value="">'+ill_all_statuses+'</option>'
444
            headers: {
440
        );
445
                'x-koha-embed': 'statuses+strings'
441
        statuses.sort((a, b) => a.str.localeCompare(b.str)).forEach(function(status) {
446
            },
442
            $('#illfilter_status').append(
447
            success: function(response){
443
                '<option value="' + status.code  +
448
                let statuses = response.statuses
444
                '">' + status.str +  '</option>'
449
                $('#illfilter_status').append(
445
            );
450
                    '<option value="">'+ill_all_statuses+'</option>'
446
        });
447
    }
448
449
    function addStatusAliasOptions(status_aliases){
450
        $('#illfilter_status_alias').parent().remove();
451
        if (status_aliases.length !== 0) {
452
            $('#illfilter_status').parent().after(function() {
453
            return '<li><label for="illfilter_status_alias">'+ill_status_aliases+':</label> <select name="illfilter_status_alias" id="illfilter_status_alias"></select></li>';
454
            });
455
            $('#illfilter_status_alias').append(
456
                '<option value="">'+ill_all_status_aliases+'</option>'
457
            );
458
            status_aliases.sort((a, b) => a.str.localeCompare(b.str)).forEach(function (status_alias) {
459
                $('#illfilter_status_alias').append(
460
                    '<option value="' + status_alias.code +
461
                    '">' + status_alias.str + '</option>'
451
                );
462
                );
452
                statuses.sort((a, b) => a.str.localeCompare(b.str)).forEach(function(status) {
463
            });
453
                    $('#illfilter_status').append(
464
        }
454
                        '<option value="' + status.code  +
465
    }
455
                        '">' + status.str +  '</option>'
466
456
                    );
467
    function populateStatusFilter(params) {
457
                });
468
        if(params.backend_statuses){
469
            if(params.backend_statuses.statuses){
470
                addStatusOptions(params.backend_statuses.statuses);
458
            }
471
            }
459
        });
472
            if(params.backend_statuses.status_aliases){
473
                addStatusAliasOptions(params.backend_statuses.status_aliases);
474
            }
475
        }else if(params.backend){
476
            let backend_id = params.backend || "";
477
            $.ajax({
478
                type: "GET",
479
                url: "/api/v1/ill/backends/"+backend_id,
480
                headers: {
481
                    'x-koha-embed': 'statuses+strings'
482
                },
483
                success: function(response){
484
                    addStatusOptions(response.statuses.filter(status => status.type == 'ill_status'));
485
                    addStatusAliasOptions(response.statuses.filter(status => status.type == 'av'));
486
                }
487
            });
488
        }
460
    }
489
    }
461
490
462
    function populateBackendFilter() {
491
    function populateBackendFilter() {
463
        $.ajax({
492
        $.ajax({
464
            type: "GET",
493
            type: "GET",
465
            url: "/api/v1/ill/backends",
494
            url: "/api/v1/ill/backends",
495
            headers: {
496
                'x-koha-embed': 'statuses+strings'
497
            },
466
            success: function(backends){
498
            success: function(backends){
467
                backends.sort((a, b) => a.ill_backend_id.localeCompare(b.ill_backend_id)).forEach(function(backend) {
499
                backends.sort((a, b) => a.ill_backend_id.localeCompare(b.ill_backend_id)).forEach(function(backend) {
468
                    $('#illfilter_backend').append(
500
                    $('#illfilter_backend').append(
Lines 470-502 $(document).ready(function() { Link Here
470
                        '">' + backend.ill_backend_id +  '</option>'
502
                        '">' + backend.ill_backend_id +  '</option>'
471
                    );
503
                    );
472
                });
504
                });
473
            }
474
        });
475
    }
476
505
477
    function disableStatusFilter() {
506
                let all_existing_statuses = [];
478
        $('#illfilter_status').children().remove();
507
                backends.forEach((backend) => {
479
        $("#illfilter_status").attr('title', ill_manage_select_backend_first);
508
                    let existing_statuses = backend.statuses;
480
        $('#illfilter_status').prop("disabled", true);
509
                    existing_statuses.filter(status => status.type == 'ill_status').forEach((existing_status) => {
481
    }
510
                        let index = all_existing_statuses.map(function(e) { return e.code; }).indexOf(existing_status.code) || false;
511
                        if(index == -1){
512
                            all_existing_statuses.push(existing_status);
513
                        }
514
                    });
515
                });
482
516
483
    function enableStatusFilter() {
517
                let all_existing_status_aliases = [];
484
        $('#illfilter_status').children().remove();
518
                backends.forEach((backend) => {
485
        $("#illfilter_status").attr('title', '');
519
                    let existing_status_aliases = backend.statuses;
486
        $('#illfilter_status').prop("disabled", false);
520
                    existing_status_aliases.filter(status => status.type == 'av').forEach((existing_status_aliases) => {
521
                        let index = all_existing_status_aliases.map(function(e) { return e.code; }).indexOf(existing_status_aliases.code) || false;
522
                        if(index == -1){
523
                            all_existing_status_aliases.push(existing_status_aliases);
524
                        }
525
                    });
526
                });
527
528
                populateStatusFilter(
529
                    { backend_statuses:
530
                        {
531
                            statuses      : all_existing_statuses,
532
                            status_aliases: all_existing_status_aliases
533
                        }
534
                    }
535
                )
536
537
            }
538
        });
487
    }
539
    }
488
540
489
    $('#illfilter_backend').change(function() {
541
    $('#illfilter_backend').change(function() {
490
        var selected_backend = $('#illfilter_backend option:selected').val();
542
        var selected_backend = $('#illfilter_backend option:selected').val();
491
        if (selected_backend && selected_backend.length > 0) {
543
        if (selected_backend && selected_backend.length > 0) {
492
            populateStatusFilter(selected_backend);
544
            populateStatusFilter( { backend : selected_backend } );
493
            enableStatusFilter();
545
        } else{
494
        } else {
546
            populateBackendFilter();
495
            disableStatusFilter();
496
        }
547
        }
497
    });
548
    });
498
549
499
    disableStatusFilter();
500
    populateBackendFilter();
550
    populateBackendFilter();
501
551
502
    // Clear all filters
552
    // Clear all filters
503
- 

Return to bug 34431