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

(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesList.vue (-230 / +134 lines)
Lines 8-14 Link Here
8
                id="package_list_result"
8
                id="package_list_result"
9
                class="page-section"
9
                class="page-section"
10
            >
10
            >
11
                <table :id="table_id"></table>
11
                <KohaTable
12
                    ref="table"
13
                    v-bind="tableOptions"
14
                    @show="doShow"
15
                    @edit="doEdit"
16
                    @delete="doDelete"
17
                ></KohaTable>
12
            </div>
18
            </div>
13
            <div v-else class="dialog message">
19
            <div v-else class="dialog message">
14
                {{ $__("There are no packages defined") }}
20
                {{ $__("There are no packages defined") }}
Lines 19-28 Link Here
19
25
20
<script>
26
<script>
21
import Toolbar from "./EHoldingsLocalPackagesToolbar.vue"
27
import Toolbar from "./EHoldingsLocalPackagesToolbar.vue"
22
import { inject, createVNode, render } from "vue"
28
import { inject, ref, reactive } from "vue"
23
import { storeToRefs } from "pinia"
29
import { storeToRefs } from "pinia"
24
import { APIClient } from "../../fetch/api-client.js"
30
import { APIClient } from "../../fetch/api-client.js"
25
import { useDataTable } from "../../composables/datatables"
31
import { useDataTable } from "../../composables/datatables"
32
import KohaTable from "../KohaTable.vue"
26
33
27
export default {
34
export default {
28
    setup() {
35
    setup() {
Lines 34-64 export default { Link Here
34
41
35
        const { setConfirmationDialog, setMessage } = inject("mainStore")
42
        const { setConfirmationDialog, setMessage } = inject("mainStore")
36
43
37
        const table_id = "package_list"
44
        const table = ref()
38
        useDataTable(table_id)
45
        const filters = reactive({
46
            package_name: "",
47
            content_type: "",
48
        })
39
49
40
        return {
50
        return {
41
            vendors,
51
            vendors,
42
            get_lib_from_av,
52
            get_lib_from_av,
43
            map_av_dt_filter,
53
            map_av_dt_filter,
44
            table_id,
54
            table,
55
            filters,
45
            setConfirmationDialog,
56
            setConfirmationDialog,
46
            setMessage,
57
            setMessage,
58
            escape_str,
59
            eholdings_packages_table_settings,
47
        }
60
        }
48
    },
61
    },
49
    data: function () {
62
    data: function () {
63
        this.filters = {
64
            package_name: this.$route.query.package_name || "",
65
            content_type: this.$route.query.content_type || "",
66
        }
67
        let filters = this.filters
50
        return {
68
        return {
51
            package_count: 0,
69
            package_count: 0,
52
            initialized: false,
70
            initialized: false,
53
            filters: {
71
            tableOptions: {
54
                package_name: this.$route.query.package_name || "",
72
                columns: this.getTableColumns(),
55
                content_type: this.$route.query.content_type || "",
73
                url: "/api/v1/erm/eholdings/local/packages",
74
                options: {
75
                    embed: "resources+count,vendor.name",
76
                    searchCols: [
77
                        { search: filters.package_name },
78
                        null,
79
                        null,
80
                        { search: filters.content_type },
81
                        null,
82
                        null,
83
                    ],
84
                },
85
                table_settings: this.eholdings_packages_table_settings,
86
                add_filters: true,
87
                filters_options: {
88
                    1: () =>
89
                        this.vendors.map(e => {
90
                            e["_id"] = e["id"]
91
                            e["_str"] = e["name"]
92
                            return e
93
                        }),
94
                    2: () => this.map_av_dt_filter("av_package_types"),
95
                    3: () => this.map_av_dt_filter("av_package_content_types"),
96
                },
97
                actions: {
98
                    0: ["show"],
99
                    "-1": ["edit", "delete"],
100
                },
56
            },
101
            },
57
        }
102
        }
58
    },
103
    },
59
    beforeRouteEnter(to, from, next) {
104
    beforeRouteEnter(to, from, next) {
60
        next(vm => {
105
        next(vm => {
61
            vm.getPackageCount().then(() => vm.build_datatable())
106
            vm.getPackageCount().then(() => (vm.initialized = true))
62
        })
107
        })
63
    },
108
    },
64
    methods: {
109
    methods: {
Lines 67-334 export default { Link Here
67
            await client.localPackages.count().then(
112
            await client.localPackages.count().then(
68
                count => {
113
                count => {
69
                    this.package_count = count
114
                    this.package_count = count
70
                    this.initialized = true
71
                },
115
                },
72
                error => {}
116
                error => {}
73
            )
117
            )
74
        },
118
        },
75
        show_package: function (package_id) {
119
        doShow: function (erm_package, dt, event) {
120
            event.preventDefault()
76
            this.$router.push(
121
            this.$router.push(
77
                "/cgi-bin/koha/erm/eholdings/local/packages/" + package_id
122
                "/cgi-bin/koha/erm/eholdings/local/packages/" +
123
                    erm_package.package_id
78
            )
124
            )
79
        },
125
        },
80
        edit_package: function (package_id) {
126
        doEdit: function (erm_package, dt, event) {
81
            this.$router.push(
127
            this.$router.push(
82
                "/cgi-bin/koha/erm/eholdings/local/packages/edit/" + package_id
128
                "/cgi-bin/koha/erm/eholdings/local/packages/edit/" +
129
                    erm_package.package_id
83
            )
130
            )
84
        },
131
        },
85
        delete_package: function (package_id, package_name) {
132
        doDelete: function (erm_package, dt, event) {
86
            this.setConfirmationDialog(
133
            this.setConfirmationDialog(
87
                {
134
                {
88
                    title: this.$__(
135
                    title: this.$__(
89
                        "Are you sure you want to remove this package?"
136
                        "Are you sure you want to remove this package?"
90
                    ),
137
                    ),
91
                    message: package_name,
138
                    message: erm_package.name,
92
                    accept_label: this.$__("Yes, delete"),
139
                    accept_label: this.$__("Yes, delete"),
93
                    cancel_label: this.$__("No, do not delete"),
140
                    cancel_label: this.$__("No, do not delete"),
94
                },
141
                },
95
                () => {
142
                () => {
96
                    const client = APIClient.erm
143
                    const client = APIClient.erm
97
                    client.localPackages.delete(package_id).then(
144
                    client.localPackages.delete(erm_package.package_id).then(
98
                        success => {
145
                        success => {
99
                            this.setMessage(
146
                            this.setMessage(
100
                                this.$__("Local package %s deleted").format(
147
                                this.$__("Local package %s deleted").format(
101
                                    package_name
148
                                    erm_package.name
102
                                ),
149
                                ),
103
                                true
150
                                true
104
                            )
151
                            )
105
                            $("#" + this.table_id)
152
                            dt.draw()
106
                                .DataTable()
107
                                .ajax.url(
108
                                    "/api/v1/erm/eholdings/local/packages"
109
                                )
110
                                .draw()
111
                        },
153
                        },
112
                        error => {}
154
                        error => {}
113
                    )
155
                    )
114
                }
156
                }
115
            )
157
            )
116
        },
158
        },
117
        build_datatable: function () {
159
        getTableColumns: function () {
118
            let show_package = this.show_package
119
            let edit_package = this.edit_package
120
            let delete_package = this.delete_package
121
            let get_lib_from_av = this.get_lib_from_av
160
            let get_lib_from_av = this.get_lib_from_av
122
            let map_av_dt_filter = this.map_av_dt_filter
161
            let escape_str = this.escape_str
123
            let filters = this.filters
162
            return [
124
            let table_id = this.table_id
125
126
            window["vendors"] = this.vendors.map(e => {
127
                e["_id"] = e["id"]
128
                e["_str"] = e["name"]
129
                return e
130
            })
131
            let avs = ["av_package_types", "av_package_content_types"]
132
            avs.forEach(function (av_cat) {
133
                window[av_cat] = map_av_dt_filter(av_cat)
134
            })
135
136
            $("#" + table_id).kohaTable(
137
                {
163
                {
138
                    ajax: {
164
                    title: __("Name"),
139
                        url: "/api/v1/erm/eholdings/local/packages",
165
                    data: "me.package_id:me.name",
166
                    searchable: true,
167
                    orderable: true,
168
                    render: function (data, type, row, meta) {
169
                        return (
170
                            '<a href="/cgi-bin/koha/erm/eholdings/local/packages/' +
171
                            row.package_id +
172
                            '" class="show">' +
173
                            escape_str(row.name) +
174
                            "</a>"
175
                        )
140
                    },
176
                    },
141
                    embed: ["resources+count", "vendor.name"],
177
                },
142
                    order: [[0, "asc"]],
178
                {
143
                    autoWidth: false,
179
                    title: __("Vendor"),
144
                    searchCols: [
180
                    data: "vendor_id",
145
                        { search: filters.package_name },
181
                    searchable: true,
146
                        null,
182
                    orderable: true,
147
                        null,
183
                    render: function (data, type, row, meta) {
148
                        { search: filters.content_type },
184
                        return row.vendor ? escape_str(row.vendor.name) : ""
149
                        null,
185
                    },
150
                        null,
186
                },
151
                    ],
187
                {
152
                    columns: [
188
                    title: __("Type"),
153
                        {
189
                    data: "package_type",
154
                            title: __("Name"),
190
                    searchable: true,
155
                            data: "me.package_id:me.name",
191
                    orderable: true,
156
                            searchable: true,
192
                    render: function (data, type, row, meta) {
157
                            orderable: true,
193
                        return escape_str(
158
                            render: function (data, type, row, meta) {
194
                            get_lib_from_av(
159
                                // Rendering done in drawCallback
195
                                "av_package_types",
160
                                return ""
196
                                row.package_type
161
                            },
197
                            )
162
                        },
163
                        {
164
                            title: __("Vendor"),
165
                            data: "vendor_id",
166
                            searchable: true,
167
                            orderable: true,
168
                            render: function (data, type, row, meta) {
169
                                return row.vendor
170
                                    ? escape_str(row.vendor.name)
171
                                    : ""
172
                            },
173
                        },
174
                        {
175
                            title: __("Type"),
176
                            data: "package_type",
177
                            searchable: true,
178
                            orderable: true,
179
                            render: function (data, type, row, meta) {
180
                                return escape_str(
181
                                    get_lib_from_av(
182
                                        "av_package_types",
183
                                        row.package_type
184
                                    )
185
                                )
186
                            },
187
                        },
188
                        {
189
                            title: __("Content type"),
190
                            data: "content_type",
191
                            searchable: true,
192
                            orderable: true,
193
                            render: function (data, type, row, meta) {
194
                                return escape_str(
195
                                    get_lib_from_av(
196
                                        "av_package_content_types",
197
                                        row.content_type
198
                                    )
199
                                )
200
                            },
201
                        },
202
                        {
203
                            title: __("Created on"),
204
                            data: "created_on",
205
                            searchable: false,
206
                            orderable: true,
207
                            render: function (data, type, row, meta) {
208
                                return $date(row.created_on)
209
                            },
210
                        },
211
                        {
212
                            title: __("Notes"),
213
                            data: "notes",
214
                            searchable: true,
215
                            orderable: true,
216
                            render: function (data, type, row, meta) {
217
                                return row.notes
218
                            },
219
                        },
220
                        {
221
                            title: __("Actions"),
222
                            data: function (row, type, val, meta) {
223
                                return '<div class="actions"></div>'
224
                            },
225
                            className: "actions noExport",
226
                            searchable: false,
227
                            orderable: false,
228
                        },
229
                    ],
230
                    drawCallback: function (settings) {
231
                        var api = new $.fn.dataTable.Api(settings)
232
233
                        $.each(
234
                            $(this).find("td .actions"),
235
                            function (index, e) {
236
                                let tr = $(this).parent().parent()
237
                                let package_id = api.row(tr).data().package_id
238
                                let package_name = api.row(tr).data().name
239
                                let editButton = createVNode(
240
                                    "a",
241
                                    {
242
                                        class: "btn btn-default btn-xs",
243
                                        role: "button",
244
                                        onClick: () => {
245
                                            edit_package(package_id)
246
                                        },
247
                                    },
248
                                    [
249
                                        createVNode("i", {
250
                                            class: "fa fa-pencil",
251
                                            "aria-hidden": "true",
252
                                        }),
253
                                        __("Edit"),
254
                                    ]
255
                                )
256
257
                                let deleteButton = createVNode(
258
                                    "a",
259
                                    {
260
                                        class: "btn btn-default btn-xs",
261
                                        role: "button",
262
                                        onClick: () => {
263
                                            delete_package(
264
                                                package_id,
265
                                                package_name
266
                                            )
267
                                        },
268
                                    },
269
                                    [
270
                                        createVNode("i", {
271
                                            class: "fa fa-trash",
272
                                            "aria-hidden": "true",
273
                                        }),
274
                                        __("Delete"),
275
                                    ]
276
                                )
277
278
                                let n = createVNode("span", {}, [
279
                                    editButton,
280
                                    " ",
281
                                    deleteButton,
282
                                ])
283
                                render(n, e)
284
                            }
285
                        )
198
                        )
286
199
                    },
287
                        $.each(
200
                },
288
                            $(this).find("tbody tr td:first-child"),
201
                {
289
                            function (index, e) {
202
                    title: __("Content type"),
290
                                let tr = $(this).parent()
203
                    data: "content_type",
291
                                let row = api.row(tr).data()
204
                    searchable: true,
292
                                if (!row) return // Happen if the table is empty
205
                    orderable: true,
293
                                let n = createVNode(
206
                    render: function (data, type, row, meta) {
294
                                    "a",
207
                        return escape_str(
295
                                    {
208
                            get_lib_from_av(
296
                                        role: "button",
209
                                "av_package_content_types",
297
                                        href:
210
                                row.content_type
298
                                            "/cgi-bin/koha/erm/eholdings/local/packages/" +
211
                            )
299
                                            row.package_id,
300
                                        onClick: e => {
301
                                            e.preventDefault()
302
                                            show_package(row.package_id)
303
                                        },
304
                                    },
305
                                    `${row.name} (#${row.package_id})`
306
                                )
307
                                render(n, e)
308
                            }
309
                        )
212
                        )
310
                    },
213
                    },
311
                    preDrawCallback: function (settings) {
214
                },
312
                        $("#" + table_id)
215
                {
313
                            .find("thead th")
216
                    title: __("Created on"),
314
                            .eq(1)
217
                    data: "created_on",
315
                            .attr("data-filter", "vendors")
218
                    searchable: false,
316
                        $("#" + table_id)
219
                    orderable: true,
317
                            .find("thead th")
220
                    render: function (data, type, row, meta) {
318
                            .eq(2)
221
                        return $date(row.created_on)
319
                            .attr("data-filter", "av_package_types")
320
                        $("#" + table_id)
321
                            .find("thead th")
322
                            .eq(3)
323
                            .attr("data-filter", "av_package_content_types")
324
                    },
222
                    },
325
                },
223
                },
326
                eholdings_packages_table_settings,
224
                {
327
                1
225
                    title: __("Notes"),
328
            )
226
                    data: "notes",
227
                    searchable: true,
228
                    orderable: true,
229
                    render: function (data, type, row, meta) {
230
                        return row.notes
231
                    },
232
                },
233
            ]
329
        },
234
        },
330
    },
235
    },
331
    components: { Toolbar },
236
    components: { Toolbar, KohaTable },
332
    name: "EHoldingsLocalPackagesList",
237
    name: "EHoldingsLocalPackagesList",
333
}
238
}
334
</script>
239
</script>
335
- 

Return to bug 33066