2 <div v-if="!initialized">{{ $t("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 {{ $t("There are no licenses defined") }}
13 import Toolbar from "./LicensesToolbar.vue"
14 import { createVNode, render } from 'vue'
15 import { useVendorStore } from "../../stores/vendors"
16 import { useAVStore } from "../../stores/authorised_values"
17 import { storeToRefs } from "pinia"
18 import { fetchLicenses } from "../../fetch"
19 import { useDataTable } from "../../composables/datatables"
23 const vendorStore = useVendorStore()
24 const { vendors } = storeToRefs(vendorStore)
26 const AVStore = useAVStore()
27 const { get_lib_from_av, map_av_dt_filter } = AVStore
29 const table_id = "license_list"
30 useDataTable(table_id)
45 beforeRouteEnter(to, from, next) {
47 vm.getLicenses().then(() => vm.build_datatable())
52 const licenses = await fetchLicenses()
53 this.licenses = licenses
54 this.initialized = true
56 show_license: function (license_id) {
57 this.$router.push("/cgi-bin/koha/erm/licenses/" + license_id)
59 edit_license: function (license_id) {
60 this.$router.push("/cgi-bin/koha/erm/licenses/edit/" + license_id)
62 delete_license: function (license_id) {
63 this.$router.push("/cgi-bin/koha/erm/licenses/delete/" + license_id)
65 build_datatable: function () {
67 let show_license = this.show_license
68 let edit_license = this.edit_license
69 let delete_license = this.delete_license
70 let get_lib_from_av = this.get_lib_from_av
71 let map_av_dt_filter = this.map_av_dt_filter
72 let default_search = this.$route.query.q
73 let table_id = this.table_id
75 window['vendors'] = this.vendors.map(e => {
80 let vendors_map = this.vendors.reduce((map, e) => {
84 let avs = ['av_license_types', 'av_license_statuses']
85 avs.forEach(function (av_cat) {
86 window[av_cat] = map_av_dt_filter(av_cat)
89 $('#' + table_id).kohaTable({
91 "url": "/api/v1/erm/licenses",
94 search: { search: default_search },
97 render: function (data, type, row, meta) {
98 if (type == 'display') {
99 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 ? escape_str(vendors_map[row.vendor_id].name) : ""
126 title: __("Description"),
136 render: function (data, type, row, meta) {
137 return escape_str(get_lib_from_av("av_license_types", row.type))
145 render: function (data, type, row, meta) {
146 return escape_str(get_lib_from_av("av_license_statuses", row.status))
150 title: __("Started on"),
154 render: function (data, type, row, meta) {
155 return $date(row.started_on)
159 title: __("Ended on"),
163 render: function (data, type, row, meta) {
164 return $date(row.ended_on)
168 title: __("Actions"),
169 data: function (row, type, val, meta) {
170 return '<div class="actions"></div>'
172 className: "actions noExport",
177 drawCallback: function (settings) {
179 var api = new $.fn.dataTable.Api(settings)
181 $.each($(this).find("td .actions"), function (index, e) {
182 let tr = $(this).parent().parent()
183 let license_id = api.row(tr).data().license_id
184 let editButton = createVNode("a", {
185 class: "btn btn-default btn-xs", role: "button", onClick: () => {
186 edit_license(license_id)
189 [createVNode("i", { class: "fa fa-pencil", 'aria-hidden': "true" }), __("Edit")])
191 let deleteButton = createVNode("a", {
192 class: "btn btn-default btn-xs", role: "button", onClick: () => {
193 delete_license(license_id)
196 [createVNode("i", { class: "fa fa-trash", 'aria-hidden': "true" }), __("Delete")])
198 let n = createVNode('span', {}, [editButton, " ", deleteButton])
202 $.each($(this).find("tbody tr td:first-child"), function (index, e) {
203 let tr = $(this).parent()
204 let row = api.row(tr).data()
205 if (!row) return // Happen if the table is empty
206 let n = createVNode("a", {
209 show_license(row.license_id)
212 `${row.name} (#${row.license_id})`
217 preDrawCallback: function (settings) {
218 $("#" + table_id).find("thead th").eq(1).attr('data-filter', 'vendors')
219 $("#" + table_id).find("thead th").eq(3).attr('data-filter', 'av_license_types')
220 $("#" + table_id).find("thead th").eq(4).attr('data-filter', 'av_license_statuses')
223 }, license_table_settings, 1)
227 av_license_types: Array,
228 av_license_statuses: Array,
230 components: { Toolbar },
231 name: "LicensesList",