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 822-828 function _dt_on_visibility(add_filters, table_node, table_dt){ Link Here
822
    }
822
    }
823
}
823
}
824
824
825
function _dt_add_filters(table_node, table_dt) {
825
function _dt_add_filters(table_node, table_dt, filters_options = {}) {
826
    $(table_node).find('thead tr').clone().appendTo( $(table_node).find('thead') );
826
    $(table_node).find('thead tr').clone().appendTo( $(table_node).find('thead') );
827
827
828
    $(table_node).find('thead tr:eq(1) th').each( function (i) {
828
    $(table_node).find('thead tr:eq(1) th').each( function (i) {
Lines 831-844 function _dt_add_filters(table_node, table_dt) { Link Here
831
        $(this).data('th-id', i);
831
        $(this).data('th-id', i);
832
        if ( is_searchable ) {
832
        if ( is_searchable ) {
833
            let input_type = 'input';
833
            let input_type = 'input';
834
            if ( $(this).data('filter') ) {
834
            if ( $(this).data('filter') || filters_options.hasOwnProperty(i)) {
835
                input_type = 'select'
835
                input_type = 'select'
836
                let filter_type = $(this).data('filter');
836
                let filter_type = $(this).data('filter');
837
                var existing_search = table_dt.column(i).search();
837
                let existing_search = table_dt.column(i).search();
838
                let select = $('<select><option value=""></option></select');
838
                let select = $('<select><option value=""></option></select');
839
839
840
                // FIXME eval here is bad and dangerous, how do we workaround that?
840
                // FIXME eval here is bad and dangerous, how do we workaround that?
841
                $(eval(filter_type)).each(function(){
841
                if ( !filters_options.hasOwnProperty(i) ) {
842
                    filters_options[i] = eval(filter_type)
843
                } else if ( typeof filters_options[i] === "function" ) {
844
                    filters_options[i] = filters_options[i]()
845
                }
846
                $(filters_options[i]).each(function(){
842
                    let o = $('<option value="%s">%s</option>'.format(this._id, this._str));
847
                    let o = $('<option value="%s">%s</option>'.format(this._id, this._str));
843
                    if ( existing_search === this._id ) {
848
                    if ( existing_search === this._id ) {
844
                        o.prop("selected", "selected");
849
                        o.prop("selected", "selected");
(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue (-20 / +21 lines)
Lines 98-103 export default { Link Here
98
                url: () => this.table_url(),
98
                url: () => this.table_url(),
99
                table_settings: this.agreement_table_settings,
99
                table_settings: this.agreement_table_settings,
100
                add_filters: true,
100
                add_filters: true,
101
                filters_options: {
102
                    1: () =>
103
                        this.vendors.map(e => {
104
                            e["_id"] = e["id"]
105
                            e["_str"] = e["name"]
106
                            return e
107
                        }),
108
                    3: () => this.map_av_dt_filter("av_agreement_statuses"),
109
                    4: () =>
110
                        this.map_av_dt_filter("av_agreement_closure_reasons"),
111
                    5: [
112
                        { _id: 0, _str: _("No") },
113
                        { _id: 1, _str: _("Yes") },
114
                    ],
115
                    6: () =>
116
                        this.map_av_dt_filter(
117
                            "av_agreement_renewal_priorities"
118
                        ),
119
                },
101
                actions: {
120
                actions: {
102
                    0: ["show"],
121
                    0: ["show"],
103
                    "-1": ["edit", "delete"],
122
                    "-1": ["edit", "delete"],
Lines 110-116 export default { Link Here
110
            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)
129
            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)
111
            if (!vm.building_table) {
130
            if (!vm.building_table) {
112
                vm.building_table = true
131
                vm.building_table = true
113
                vm.getAgreements().then(() => vm.initialized = true)
132
                vm.getAgreements().then(() => (vm.initialized = true))
114
            }
133
            }
115
        })
134
        })
116
    },
135
    },
Lines 492-520 export default { Link Here
492
        getTableColumns: function () {
511
        getTableColumns: function () {
493
            let get_lib_from_av = this.get_lib_from_av
512
            let get_lib_from_av = this.get_lib_from_av
494
            let escape_str = this.escape_str
513
            let escape_str = this.escape_str
495
            window["vendors"] = this.vendors.map(e => {
496
                e["_id"] = e["id"]
497
                e["_str"] = e["name"]
498
                return e
499
            })
500
            let vendors_map = this.vendors.reduce((map, e) => {
514
            let vendors_map = this.vendors.reduce((map, e) => {
501
                map[e.id] = e
515
                map[e.id] = e
502
                return map
516
                return map
503
            }, {})
517
            }, {})
504
            let avs = [
505
                "av_agreement_statuses",
506
                "av_agreement_closure_reasons",
507
                "av_agreement_renewal_priorities",
508
            ]
509
            let c = this
510
            avs.forEach(function (av_cat) {
511
                window[av_cat] = c.map_av_dt_filter(av_cat)
512
            })
513
518
514
            window["av_agreement_is_perpetual"] = [
515
                { _id: 0, _str: _("No") },
516
                { _id: 1, _str: _("Yes") },
517
            ]
518
            return [
519
            return [
519
                {
520
                {
520
                    title: __("Name"),
521
                    title: __("Name"),
Lines 537-543 export default { Link Here
537
                    orderable: true,
538
                    orderable: true,
538
                    render: function (data, type, row, meta) {
539
                    render: function (data, type, row, meta) {
539
                        return row.vendor_id != undefined
540
                        return row.vendor_id != undefined
540
                            ? escape_str(vendors_map[row.vendor_id].name)
541
                            ? row.vendor_id //escape_str(vendors_map[row.vendor_id].name)
541
                            : ""
542
                            : ""
542
                    },
543
                    },
543
                },
544
                },
(-)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