Bug 32932: Update router to use object references - agreements
[koha.git] / koha-tmpl / intranet-tmpl / prog / js / vue / components / ERM / LicensesList.vue
1 <template>
2     <div v-if="!initialized">{{ $__("Loading") }}</div>
3     <div v-else id="licenses_list">
4         <Toolbar />
5         <div v-if="license_count > 0" class="page-section">
6             <KohaTable
7                 ref="table"
8                 v-bind="tableOptions"
9                 @show="doShow"
10                 @edit="doEdit"
11                 @delete="doDelete"
12             ></KohaTable>
13         </div>
14         <div v-else class="dialog message">
15             {{ $__("There are no licenses defined") }}
16         </div>
17     </div>
18 </template>
19
20 <script>
21 import Toolbar from "./LicensesToolbar.vue"
22 import { inject, ref } from "vue"
23 import { storeToRefs } from "pinia"
24 import { APIClient } from "../../fetch/api-client.js"
25 import KohaTable from "../KohaTable.vue"
26
27 export default {
28     setup() {
29         const vendorStore = inject("vendorStore")
30         const { vendors } = storeToRefs(vendorStore)
31
32         const AVStore = inject("AVStore")
33         const { get_lib_from_av, map_av_dt_filter } = AVStore
34
35         const { setConfirmationDialog, setMessage } = inject("mainStore")
36
37         const table = ref()
38
39         return {
40             vendors,
41             get_lib_from_av,
42             map_av_dt_filter,
43             table,
44             setConfirmationDialog,
45             setMessage,
46             license_table_settings,
47         }
48     },
49     data: function () {
50         return {
51             license_count: 0,
52             initialized: false,
53             tableOptions: {
54                 columns: this.getTableColumns(),
55                 url: "/api/v1/erm/licenses",
56                 options: { embed: "vendor" },
57                 table_settings: this.license_table_settings,
58                 add_filters: true,
59                 filters_options: {
60                     1: () =>
61                         this.vendors.map(e => {
62                             e["_id"] = e["id"]
63                             e["_str"] = e["name"]
64                             return e
65                         }),
66                     3: () => this.map_av_dt_filter("av_license_types"),
67                     4: () => this.map_av_dt_filter("av_license_statuses"),
68                 },
69                 actions: {
70                     0: ["show"],
71                     "-1": ["edit", "delete"],
72                 },
73             },
74         }
75     },
76     beforeRouteEnter(to, from, next) {
77         next(vm => {
78             vm.getLicenseCount().then(() => (vm.initialized = true))
79         })
80     },
81     methods: {
82         async getLicenseCount() {
83             const client = APIClient.erm
84             await client.licenses.count().then(
85                 count => {
86                     this.license_count = count
87                 },
88                 error => {}
89             )
90         },
91         doShow: function ({ license_id }, dt, event) {
92             event.preventDefault()
93             this.$router.push({ name: "LicensesShow", params: { license_id } })
94         },
95         doEdit: function ({ license_id }, dt, event) {
96             this.$router.push({
97                 name: "LicensesFormAddEdit",
98                 params: { license_id },
99             })
100         },
101         doDelete: function (license, dt, event) {
102             this.setConfirmationDialog(
103                 {
104                     title: this.$__(
105                         "Are you sure you want to remove this license?"
106                     ),
107                     message: license.name,
108                     accept_label: this.$__("Yes, delete"),
109                     cancel_label: this.$__("No, do not delete"),
110                 },
111                 () => {
112                     const client = APIClient.erm
113                     client.licenses.delete(license.license_id).then(
114                         success => {
115                             this.setMessage(
116                                 this.$__("License %s deleted").format(
117                                     license.name
118                                 ),
119                                 true
120                             )
121                             dt.draw()
122                         },
123                         error => {}
124                     )
125                 }
126             )
127         },
128         getTableColumns: function () {
129             let get_lib_from_av = this.get_lib_from_av
130
131             return [
132                 {
133                     title: __("Name"),
134                     data: "me.license_id:me.name",
135                     searchable: true,
136                     orderable: true,
137                     render: function (data, type, row, meta) {
138                         return (
139                             '<a href="/cgi-bin/koha/erm/licenses/' +
140                             row.license_id +
141                             '" class="show">' +
142                             escape_str(`${row.name} (#${row.license_id})`) +
143                             "</a>"
144                         )
145                     },
146                 },
147                 {
148                     title: __("Vendor"),
149                     data: "vendor_id",
150                     searchable: true,
151                     orderable: true,
152                     render: function (data, type, row, meta) {
153                         return row.vendor_id != undefined
154                             ? '<a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=' +
155                                   row.vendor_id +
156                                   '">' +
157                                   escape_str(row.vendor.name) +
158                                   "</a>"
159                             : ""
160                     },
161                 },
162
163                 {
164                     title: __("Description"),
165                     data: "description",
166                     searchable: true,
167                     orderable: true,
168                 },
169                 {
170                     title: __("Type"),
171                     data: "type",
172                     searchable: true,
173                     orderable: true,
174                     render: function (data, type, row, meta) {
175                         return escape_str(
176                             get_lib_from_av("av_license_types", row.type)
177                         )
178                     },
179                 },
180                 {
181                     title: __("Status"),
182                     data: "status",
183                     searchable: true,
184                     orderable: true,
185                     render: function (data, type, row, meta) {
186                         return escape_str(
187                             get_lib_from_av("av_license_statuses", row.status)
188                         )
189                     },
190                 },
191                 {
192                     title: __("Started on"),
193                     data: "started_on",
194                     searchable: true,
195                     orderable: true,
196                     render: function (data, type, row, meta) {
197                         return $date(row.started_on)
198                     },
199                 },
200                 {
201                     title: __("Ended on"),
202                     data: "ended_on",
203                     searchable: true,
204                     orderable: true,
205                     render: function (data, type, row, meta) {
206                         return $date(row.ended_on)
207                     },
208                 },
209             ]
210         },
211     },
212     props: {
213         av_license_types: Array,
214         av_license_statuses: Array,
215     },
216     components: { Toolbar, KohaTable },
217     name: "LicensesList",
218 }
219 </script>