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 / +115 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-if="initialized" class="dialog message">
19
            <div v-else-if="initialized" 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 } 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)
39
45
40
        return {
46
        return {
41
            vendors,
47
            vendors,
42
            get_lib_from_av,
48
            get_lib_from_av,
43
            map_av_dt_filter,
49
            map_av_dt_filter,
44
            table_id,
50
            table,
45
            setConfirmationDialog,
51
            setConfirmationDialog,
46
            setMessage,
52
            setMessage,
53
            escape_str,
54
            eholdings_packages_table_settings,
47
        }
55
        }
48
    },
56
    },
49
    data: function () {
57
    data: function () {
58
        let filters = this.filters
50
        return {
59
        return {
51
            package_count: [],
60
            package_count: [],
52
            initialized: false,
61
            initialized: false,
53
            filters: {
62
            tableOptions: {
54
                package_name: this.$route.query.package_name || "",
63
                columns: this.getTableColumns(),
55
                content_type: this.$route.query.content_type || "",
64
                url: "/api/v1/erm/eholdings/local/packages",
65
                options: { embed: "resources+count,vendor.name" },
66
                table_settings: this.eholdings_packages_table_settings,
67
                add_filters: true,
68
                filters_options: {
69
                    1: () =>
70
                        this.vendors.map(e => {
71
                            e["_id"] = e["id"]
72
                            e["_str"] = e["name"]
73
                            return e
74
                        }),
75
                    2: () => this.map_av_dt_filter("av_package_types"),
76
                    3: () => this.map_av_dt_filter("av_package_content_types"),
77
                },
78
                actions: {
79
                    0: ["show"],
80
                    "-1": ["edit", "delete"],
81
                },
56
            },
82
            },
57
        }
83
        }
58
    },
84
    },
59
    beforeRouteEnter(to, from, next) {
85
    beforeRouteEnter(to, from, next) {
60
        next(vm => {
86
        next(vm => {
61
            vm.getPackageCount().then(() => vm.build_datatable())
87
            vm.getPackageCount().then(() => (vm.initialized = true))
62
        })
88
        })
63
    },
89
    },
64
    methods: {
90
    methods: {
Lines 67-334 export default { Link Here
67
            await client.localPackages.count().then(
93
            await client.localPackages.count().then(
68
                count => {
94
                count => {
69
                    this.package_count = count
95
                    this.package_count = count
70
                    this.initialized = true
71
                },
96
                },
72
                error => {}
97
                error => {}
73
            )
98
            )
74
        },
99
        },
75
        show_package: function (package_id) {
100
        doShow: function (erm_package, dt, event) {
101
            event.preventDefault()
76
            this.$router.push(
102
            this.$router.push(
77
                "/cgi-bin/koha/erm/eholdings/local/packages/" + package_id
103
                "/cgi-bin/koha/erm/eholdings/local/packages/" +
104
                    erm_package.package_id
78
            )
105
            )
79
        },
106
        },
80
        edit_package: function (package_id) {
107
        doEdit: function (erm_package, dt, event) {
81
            this.$router.push(
108
            this.$router.push(
82
                "/cgi-bin/koha/erm/eholdings/local/packages/edit/" + package_id
109
                "/cgi-bin/koha/erm/eholdings/local/packages/edit/" +
110
                    erm_package.package_id
83
            )
111
            )
84
        },
112
        },
85
        delete_package: function (package_id, package_name) {
113
        doDelete: function (erm_package, dt, event) {
86
            this.setConfirmationDialog(
114
            this.setConfirmationDialog(
87
                {
115
                {
88
                    title: this.$__(
116
                    title: this.$__(
89
                        "Are you sure you want to remove this package?"
117
                        "Are you sure you want to remove this package?"
90
                    ),
118
                    ),
91
                    message: package_name,
119
                    message: erm_package.name,
92
                    accept_label: this.$__("Yes, delete"),
120
                    accept_label: this.$__("Yes, delete"),
93
                    cancel_label: this.$__("No, do not delete"),
121
                    cancel_label: this.$__("No, do not delete"),
94
                },
122
                },
95
                () => {
123
                () => {
96
                    const client = APIClient.erm
124
                    const client = APIClient.erm
97
                    client.localPackages.delete(package_id).then(
125
                    client.localPackages.delete(erm_package.package_id).then(
98
                        success => {
126
                        success => {
99
                            this.setMessage(
127
                            this.setMessage(
100
                                this.$__("Local package %s deleted").format(
128
                                this.$__("Local package %s deleted").format(
101
                                    package_name
129
                                    erm_package.name
102
                                ),
130
                                ),
103
                                true
131
                                true
104
                            )
132
                            )
105
                            $("#" + this.table_id)
133
                            dt.draw()
106
                                .DataTable()
107
                                .ajax.url(
108
                                    "/api/v1/erm/eholdings/local/packages"
109
                                )
110
                                .draw()
111
                        },
134
                        },
112
                        error => {}
135
                        error => {}
113
                    )
136
                    )
114
                }
137
                }
115
            )
138
            )
116
        },
139
        },
117
        build_datatable: function () {
140
        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
141
            let get_lib_from_av = this.get_lib_from_av
122
            let map_av_dt_filter = this.map_av_dt_filter
142
            let escape_str = this.escape_str
123
            let filters = this.filters
143
            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
                {
144
                {
138
                    ajax: {
145
                    title: __("Name"),
139
                        url: "/api/v1/erm/eholdings/local/packages",
146
                    data: "me.package_id:me.name",
147
                    searchable: true,
148
                    orderable: true,
149
                    render: function (data, type, row, meta) {
150
                        return (
151
                            '<a href="/cgi-bin/koha/erm/eholdings/local/packages/' +
152
                            row.package_id +
153
                            '" class="show">' +
154
                            escape_str(row.name) +
155
                            "</a>"
156
                        )
140
                    },
157
                    },
141
                    embed: ["resources+count", "vendor.name"],
158
                },
142
                    order: [[0, "asc"]],
159
                {
143
                    autoWidth: false,
160
                    title: __("Vendor"),
144
                    searchCols: [
161
                    data: "vendor_id",
145
                        { search: filters.package_name },
162
                    searchable: true,
146
                        null,
163
                    orderable: true,
147
                        null,
164
                    render: function (data, type, row, meta) {
148
                        { search: filters.content_type },
165
                        return row.vendor ? escape_str(row.vendor.name) : ""
149
                        null,
166
                    },
150
                        null,
167
                },
151
                    ],
168
                {
152
                    columns: [
169
                    title: __("Type"),
153
                        {
170
                    data: "package_type",
154
                            title: __("Name"),
171
                    searchable: true,
155
                            data: "me.package_id:me.name",
172
                    orderable: true,
156
                            searchable: true,
173
                    render: function (data, type, row, meta) {
157
                            orderable: true,
174
                        return escape_str(
158
                            render: function (data, type, row, meta) {
175
                            get_lib_from_av(
159
                                // Rendering done in drawCallback
176
                                "av_package_types",
160
                                return ""
177
                                row.package_type
161
                            },
178
                            )
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
                        )
179
                        )
286
180
                    },
287
                        $.each(
181
                },
288
                            $(this).find("tbody tr td:first-child"),
182
                {
289
                            function (index, e) {
183
                    title: __("Content type"),
290
                                let tr = $(this).parent()
184
                    data: "content_type",
291
                                let row = api.row(tr).data()
185
                    searchable: true,
292
                                if (!row) return // Happen if the table is empty
186
                    orderable: true,
293
                                let n = createVNode(
187
                    render: function (data, type, row, meta) {
294
                                    "a",
188
                        return escape_str(
295
                                    {
189
                            get_lib_from_av(
296
                                        role: "button",
190
                                "av_package_content_types",
297
                                        href:
191
                                row.content_type
298
                                            "/cgi-bin/koha/erm/eholdings/local/packages/" +
192
                            )
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
                        )
193
                        )
310
                    },
194
                    },
311
                    preDrawCallback: function (settings) {
195
                },
312
                        $("#" + table_id)
196
                {
313
                            .find("thead th")
197
                    title: __("Created on"),
314
                            .eq(1)
198
                    data: "created_on",
315
                            .attr("data-filter", "vendors")
199
                    searchable: false,
316
                        $("#" + table_id)
200
                    orderable: true,
317
                            .find("thead th")
201
                    render: function (data, type, row, meta) {
318
                            .eq(2)
202
                        return $date(row.created_on)
319
                            .attr("data-filter", "av_package_types")
203
                    },
320
                        $("#" + table_id)
204
                },
321
                            .find("thead th")
205
                {
322
                            .eq(3)
206
                    title: __("Notes"),
323
                            .attr("data-filter", "av_package_content_types")
207
                    data: "notes",
208
                    searchable: true,
209
                    orderable: true,
210
                    render: function (data, type, row, meta) {
211
                        return row.notes
324
                    },
212
                    },
325
                },
213
                },
326
                eholdings_packages_table_settings,
214
            ]
327
                1
328
            )
329
        },
215
        },
330
    },
216
    },
331
    components: { Toolbar },
217
    components: { Toolbar, KohaTable },
332
    name: "EHoldingsLocalPackagesList",
218
    name: "EHoldingsLocalPackagesList",
333
}
219
}
334
</script>
220
</script>
335
- 

Return to bug 33066