2 <div v-if="!initialized">{{ $__("Loading") }}</div>
3 <div v-else-if="licenses" id="licenses_list">
5 <table v-if="licenses.length" :id="table_id"></table>
6 <div v-else-if="initialized" class="dialog message">
7 {{ $__("There are no licenses defined") }}
13 import Toolbar from "./LicensesToolbar.vue"
14 import { inject, createVNode, render } from "vue"
15 import { storeToRefs } from "pinia"
16 import { fetchLicenses } from "../../fetch"
17 import { useDataTable } from "../../composables/datatables"
21 const vendorStore = inject("vendorStore")
22 const { vendors } = storeToRefs(vendorStore)
24 const AVStore = inject("AVStore")
25 const { get_lib_from_av, map_av_dt_filter } = AVStore
27 const table_id = "license_list"
28 useDataTable(table_id)
43 beforeRouteEnter(to, from, next) {
45 vm.getLicenses().then(() => vm.build_datatable())
50 const licenses = await fetchLicenses()
51 this.licenses = licenses
52 this.initialized = true
54 show_license: function (license_id) {
55 this.$router.push("/cgi-bin/koha/erm/licenses/" + license_id)
57 edit_license: function (license_id) {
58 this.$router.push("/cgi-bin/koha/erm/licenses/edit/" + license_id)
60 delete_license: function (license_id) {
61 this.$router.push("/cgi-bin/koha/erm/licenses/delete/" + license_id)
63 build_datatable: function () {
64 let show_license = this.show_license
65 let edit_license = this.edit_license
66 let delete_license = this.delete_license
67 let get_lib_from_av = this.get_lib_from_av
68 let map_av_dt_filter = this.map_av_dt_filter
69 let default_search = this.$route.query.q
70 let table_id = this.table_id
72 window["vendors"] = this.vendors.map(e => {
77 let vendors_map = this.vendors.reduce((map, e) => {
81 let avs = ["av_license_types", "av_license_statuses"]
82 avs.forEach(function (av_cat) {
83 window[av_cat] = map_av_dt_filter(av_cat)
86 $("#" + table_id).kohaTable(
89 url: "/api/v1/erm/licenses",
92 search: { search: default_search },
96 render: function (data, type, row, meta) {
97 if (type == "display") {
98 return escape_str(data)
107 data: "me.license_id:me.name",
110 render: function (data, type, row, meta) {
111 // Rendering done in drawCallback
120 render: function (data, type, row, meta) {
121 return row.vendor_id != undefined
123 vendors_map[row.vendor_id].name
130 title: __("Description"),
140 render: function (data, type, row, meta) {
154 render: function (data, type, row, meta) {
157 "av_license_statuses",
164 title: __("Started on"),
168 render: function (data, type, row, meta) {
169 return $date(row.started_on)
173 title: __("Ended on"),
177 render: function (data, type, row, meta) {
178 return $date(row.ended_on)
182 title: __("Actions"),
183 data: function (row, type, val, meta) {
184 return '<div class="actions"></div>'
186 className: "actions noExport",
191 drawCallback: function (settings) {
192 var api = new $.fn.dataTable.Api(settings)
195 $(this).find("td .actions"),
196 function (index, e) {
197 let tr = $(this).parent().parent()
198 let license_id = api.row(tr).data().license_id
199 let editButton = createVNode(
202 class: "btn btn-default btn-xs",
205 edit_license(license_id)
210 class: "fa fa-pencil",
211 "aria-hidden": "true",
217 let deleteButton = createVNode(
220 class: "btn btn-default btn-xs",
223 delete_license(license_id)
228 class: "fa fa-trash",
229 "aria-hidden": "true",
235 let n = createVNode("span", {}, [
245 $(this).find("tbody tr td:first-child"),
246 function (index, e) {
247 let tr = $(this).parent()
248 let row = api.row(tr).data()
249 if (!row) return // Happen if the table is empty
255 show_license(row.license_id)
258 `${row.name} (#${row.license_id})`
264 preDrawCallback: function (settings) {
268 .attr("data-filter", "vendors")
272 .attr("data-filter", "av_license_types")
276 .attr("data-filter", "av_license_statuses")
279 license_table_settings,
285 av_license_types: Array,
286 av_license_statuses: Array,
288 components: { Toolbar },
289 name: "LicensesList",