Bug 34587: Remove counter files from API embedding to improve performance
[koha.git] / koha-tmpl / intranet-tmpl / prog / js / vue / components / ERM / UsageStatisticsDataProvidersCounterLogs.vue
1 <template>
2     <div v-if="!initialized">{{ $__("Loading") }}</div>
3     <div v-else id="counter_logs_list">
4         <div v-if="counter_files_count > 0" class="page-section">
5             <KohaTable
6                 ref="table"
7                 v-bind="tableOptions"
8                 @delete="delete_counter_file"
9                 @download="download_counter_file"
10             ></KohaTable>
11         </div>
12         <div v-else-if="initialized" class="dialog message">
13             {{ $__("There are no import logs defined") }}
14         </div>
15     </div>
16 </template>
17
18 <script>
19 import { APIClient } from "../../fetch/api-client.js"
20 import { inject, ref } from "vue"
21 import KohaTable from "../KohaTable.vue"
22
23 export default {
24     setup() {
25         const { setConfirmationDialog, setMessage } = inject("mainStore")
26
27         const table = ref()
28
29         return {
30             table,
31             setConfirmationDialog,
32             setMessage,
33         }
34     },
35     data: function () {
36         return {
37             counter_files_count: 0,
38             initialized: false,
39             before_route_entered: false,
40             building_table: false,
41             tableOptions: {
42                 columns: this.getTableColumns(),
43                 options: {},
44                 url: () => this.table_url(),
45                 table_settings: this.counter_log_table_settings,
46                 add_filters: true,
47                 filters_options: {},
48                 actions: {
49                     0: ["show"],
50                     "-1": [
51                         {
52                             download: {
53                                 text: this.$__("Download"),
54                                 icon: "fa fa-download",
55                             },
56                         },
57                         "delete",
58                     ],
59                 },
60             },
61         }
62     },
63     methods: {
64         async getCounterFiles() {
65             const client = APIClient.erm
66             await client.counter_files
67                 .count({
68                     usage_data_provider_id:
69                         this.$route.params.usage_data_provider_id,
70                 })
71                 .then(
72                     count => {
73                         this.counter_files_count = count
74                         this.initialized = true
75                     },
76                     error => {}
77                 )
78         },
79         table_url() {
80             let url = `/api/v1/erm/counter_logs?usage_data_provider_id=${this.$route.params.usage_data_provider_id}`
81             return url
82         },
83         download_counter_file(counter_log, dt, event) {
84             window.location.href =
85                 "/api/v1/erm/counter_files/" +
86                 counter_log.counter_files_id +
87                 "/file/content"
88         },
89         delete_counter_file(counter_log, dt, event) {
90             this.setConfirmationDialog(
91                 {
92                     title: this.$__(
93                         "Are you sure you want to remove this file?"
94                     ),
95                     message: counter_log.filename,
96                     accept_label: this.$__("Yes, delete"),
97                     cancel_label: this.$__("No, do not delete"),
98                 },
99                 () => {
100                     const client = APIClient.erm
101                     client.counter_files
102                         .delete(counter_log.counter_files_id)
103                         .then(
104                             success => {
105                                 this.setMessage(
106                                     this.$__("File %s deleted").format(
107                                         counter_log.filename
108                                     ),
109                                     true
110                                 )
111                                 dt.draw()
112                             },
113                             error => {}
114                         )
115                 }
116             )
117         },
118         getTableColumns() {
119             return [
120                 {
121                     title: __("Filename"),
122                     data: "filename",
123                     searchable: true,
124                     orderable: true,
125                 },
126                 {
127                     title: __("Import date"),
128                     render: function (data, type, row, meta) {
129                         const date = row.importdate.substr(0, 10)
130                         const time = row.importdate.substr(11, 8)
131                         return `${date} ${time}`
132                     },
133                     searchable: true,
134                     orderable: true,
135                 },
136                 {
137                     title: __("Imported by"),
138                     render: function (data, type, row, meta) {
139                         const importer = row.borrowernumber
140                             ? `<a href="http://localhost:8081/cgi-bin/koha/members/moremember.pl?borrowernumber=${row.borrowernumber}">Borrowernumber ${row.borrowernumber}</a>`
141                             : "Cronjob"
142                         return importer
143                     },
144                     searchable: true,
145                     orderable: true,
146                 },
147             ]
148         },
149     },
150     mounted() {
151         if (!this.building_table) {
152             this.building_table = true
153             this.getCounterFiles()
154         }
155     },
156     components: { KohaTable },
157     name: "UsageStatisticsTitlesList",
158 }
159 </script>
160
161 <style scoped>
162 #title_list {
163     display: table;
164 }
165 </style>