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

(-)a/koha-tmpl/intranet-tmpl/prog/js/datatables.js (-4 / +9 lines)
Lines 828-834 function _dt_on_visibility(add_filters, table_node, table_dt){ Link Here
828
    }
828
    }
829
}
829
}
830
830
831
function _dt_add_filters(table_node, table_dt) {
831
function _dt_add_filters(table_node, table_dt, filters_options = {}) {
832
    $(table_node).find('thead tr').clone().appendTo( $(table_node).find('thead') );
832
    $(table_node).find('thead tr').clone().appendTo( $(table_node).find('thead') );
833
833
834
    $(table_node).find('thead tr:eq(1) th').each( function (i) {
834
    $(table_node).find('thead tr:eq(1) th').each( function (i) {
Lines 837-850 function _dt_add_filters(table_node, table_dt) { Link Here
837
        $(this).data('th-id', i);
837
        $(this).data('th-id', i);
838
        if ( is_searchable ) {
838
        if ( is_searchable ) {
839
            let input_type = 'input';
839
            let input_type = 'input';
840
            if ( $(this).data('filter') ) {
840
            if ( $(this).data('filter') || filters_options.hasOwnProperty(i)) {
841
                input_type = 'select'
841
                input_type = 'select'
842
                let filter_type = $(this).data('filter');
842
                let filter_type = $(this).data('filter');
843
                var existing_search = table_dt.column(i).search();
843
                let existing_search = table_dt.column(i).search();
844
                let select = $('<select><option value=""></option></select');
844
                let select = $('<select><option value=""></option></select');
845
845
846
                // FIXME eval here is bad and dangerous, how do we workaround that?
846
                // FIXME eval here is bad and dangerous, how do we workaround that?
847
                $(eval(filter_type)).each(function(){
847
                if ( !filters_options.hasOwnProperty(i) ) {
848
                    filters_options[i] = eval(filter_type)
849
                } else if ( typeof filters_options[i] === "function" ) {
850
                    filters_options[i] = filters_options[i]()
851
                }
852
                $(filters_options[i]).each(function(){
848
                    let o = $('<option value="%s">%s</option>'.format(this._id, this._str));
853
                    let o = $('<option value="%s">%s</option>'.format(this._id, this._str));
849
                    if ( existing_search === this._id ) {
854
                    if ( existing_search === this._id ) {
850
                        o.prop("selected", "selected");
855
                        o.prop("selected", "selected");
(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue (-20 / +21 lines)
Lines 88-93 export default { Link Here
88
                url: () => this.table_url(),
88
                url: () => this.table_url(),
89
                table_settings: this.agreement_table_settings,
89
                table_settings: this.agreement_table_settings,
90
                add_filters: true,
90
                add_filters: true,
91
                filters_options: {
92
                    1: () =>
93
                        this.vendors.map(e => {
94
                            e["_id"] = e["id"]
95
                            e["_str"] = e["name"]
96
                            return e
97
                        }),
98
                    3: () => this.map_av_dt_filter("av_agreement_statuses"),
99
                    4: () =>
100
                        this.map_av_dt_filter("av_agreement_closure_reasons"),
101
                    5: [
102
                        { _id: 0, _str: _("No") },
103
                        { _id: 1, _str: _("Yes") },
104
                    ],
105
                    6: () =>
106
                        this.map_av_dt_filter(
107
                            "av_agreement_renewal_priorities"
108
                        ),
109
                },
91
                actions: {
110
                actions: {
92
                    0: ["show"],
111
                    0: ["show"],
93
                    "-1": ["edit", "delete"],
112
                    "-1": ["edit", "delete"],
Lines 100-106 export default { Link Here
100
            vm.before_route_entered = true // FIXME This is ugly, but we need to distinguish when it's used as main component or child component (from EHoldingsEBSCOPAckagesShow for instance)
119
            vm.before_route_entered = true // FIXME This is ugly, but we need to distinguish when it's used as main component or child component (from EHoldingsEBSCOPAckagesShow for instance)
101
            if (!vm.building_table) {
120
            if (!vm.building_table) {
102
                vm.building_table = true
121
                vm.building_table = true
103
                vm.getAgreements().then(() => vm.initialized = true)
122
                vm.getAgreements().then(() => (vm.initialized = true))
104
            }
123
            }
105
        })
124
        })
106
    },
125
    },
Lines 473-501 export default { Link Here
473
        getTableColumns: function () {
492
        getTableColumns: function () {
474
            let get_lib_from_av = this.get_lib_from_av
493
            let get_lib_from_av = this.get_lib_from_av
475
            let escape_str = this.escape_str
494
            let escape_str = this.escape_str
476
            window["vendors"] = this.vendors.map(e => {
477
                e["_id"] = e["id"]
478
                e["_str"] = e["name"]
479
                return e
480
            })
481
            let vendors_map = this.vendors.reduce((map, e) => {
495
            let vendors_map = this.vendors.reduce((map, e) => {
482
                map[e.id] = e
496
                map[e.id] = e
483
                return map
497
                return map
484
            }, {})
498
            }, {})
485
            let avs = [
486
                "av_agreement_statuses",
487
                "av_agreement_closure_reasons",
488
                "av_agreement_renewal_priorities",
489
            ]
490
            let c = this
491
            avs.forEach(function (av_cat) {
492
                window[av_cat] = c.map_av_dt_filter(av_cat)
493
            })
494
499
495
            window["av_agreement_is_perpetual"] = [
496
                { _id: 0, _str: _("No") },
497
                { _id: 1, _str: _("Yes") },
498
            ]
499
            return [
500
            return [
500
                {
501
                {
501
                    title: __("Name"),
502
                    title: __("Name"),
Lines 518-524 export default { Link Here
518
                    orderable: true,
519
                    orderable: true,
519
                    render: function (data, type, row, meta) {
520
                    render: function (data, type, row, meta) {
520
                        return row.vendor_id != undefined
521
                        return row.vendor_id != undefined
521
                            ? escape_str(vendors_map[row.vendor_id].name)
522
                            ? row.vendor_id //escape_str(vendors_map[row.vendor_id].name)
522
                            : ""
523
                            : ""
523
                    },
524
                    },
524
                },
525
                },
(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/KohaTable.vue (-2 / +5 lines)
Lines 120-126 export default { Link Here
120
        let dt = this.$refs.table.dt()
120
        let dt = this.$refs.table.dt()
121
        let table_node = dt.table().node()
121
        let table_node = dt.table().node()
122
        if (this.add_filters) {
122
        if (this.add_filters) {
123
            _dt_add_filters(table_node, dt)
123
            _dt_add_filters(table_node, dt, this.filters_options)
124
        }
124
        }
125
125
126
        dt.on("column-visibility.dt", function () {
126
        dt.on("column-visibility.dt", function () {
Lines 189-194 export default { Link Here
189
            type: Boolean,
189
            type: Boolean,
190
            required: false,
190
            required: false,
191
        },
191
        },
192
        filters_options: {
193
            type: Object,
194
            required: false,
195
        },
192
    },
196
    },
193
}
197
}
194
</script>
198
</script>
195
- 

Return to bug 33066