View | Details | Raw Unified | Return to bug 33066
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue (-300 lines)
Lines 208-512 export default { Link Here
208
            }
208
            }
209
            this.$refs.table.redraw(this.table_url())
209
            this.$refs.table.redraw(this.table_url())
210
        },
210
        },
211
        build_datatable: function () {
212
            let show_agreement = this.show_agreement
213
            let edit_agreement = this.edit_agreement
214
            let delete_agreement = this.delete_agreement
215
            let select_agreement = this.select_agreement
216
            let get_lib_from_av = this.get_lib_from_av
217
            let map_av_dt_filter = this.map_av_dt_filter
218
            let datatable_url = this.datatable_url
219
            let default_search = this.$route.query.q
220
            let actions = this.before_route_entered ? "edit_delete" : "select"
221
            let filters = this.filters
222
            let table_id = this.table_id
223
            let logged_in_user = this.logged_in_user
224
225
            window["vendors"] = this.vendors.map(e => {
226
                e["_id"] = e["id"]
227
                e["_str"] = e["name"]
228
                return e
229
            })
230
            let vendors_map = this.vendors.reduce((map, e) => {
231
                map[e.id] = e
232
                return map
233
            }, {})
234
            let avs = [
235
                "av_agreement_statuses",
236
                "av_agreement_closure_reasons",
237
                "av_agreement_renewal_priorities",
238
            ]
239
            avs.forEach(function (av_cat) {
240
                window[av_cat] = map_av_dt_filter(av_cat)
241
            })
242
243
            window["av_agreement_is_perpetual"] = [
244
                { _id: 0, _str: _("No") },
245
                { _id: 1, _str: _("Yes") },
246
            ]
247
248
            let additional_filters = {
249
                "user_roles.user_id": function () {
250
                    return filters.by_mine ? logged_in_user.borrowernumber : ""
251
                },
252
            }
253
            const table = $("#" + table_id).kohaTable(
254
                {
255
                    ajax: {
256
                        url: datatable_url,
257
                    },
258
                    embed: ["user_roles"],
259
                    order: [[0, "asc"]],
260
                    autoWidth: false,
261
                    search: { search: default_search },
262
                    columnDefs: [
263
                        {
264
                            targets: [0, 2],
265
                            render: function (data, type, row, meta) {
266
                                if (type == "display") {
267
                                    return escape_str(data)
268
                                }
269
                                return data
270
                            },
271
                        },
272
                    ],
273
                    columns: [
274
                        {
275
                            title: __("Name"),
276
                            data: "me.agreement_id:me.name",
277
                            searchable: true,
278
                            orderable: true,
279
                            render: function (data, type, row, meta) {
280
                                // Rendering done in drawCallback
281
                                return ""
282
                            },
283
                        },
284
                        {
285
                            title: __("Vendor"),
286
                            data: "vendor_id",
287
                            searchable: true,
288
                            orderable: true,
289
                            render: function (data, type, row, meta) {
290
                                return row.vendor_id != undefined
291
                                    ? escape_str(
292
                                          vendors_map[row.vendor_id].name
293
                                      )
294
                                    : ""
295
                            },
296
                        },
297
                        {
298
                            title: __("Description"),
299
                            data: "description",
300
                            searchable: true,
301
                            orderable: true,
302
                        },
303
                        {
304
                            title: __("Status"),
305
                            data: "status",
306
                            searchable: true,
307
                            orderable: true,
308
                            render: function (data, type, row, meta) {
309
                                return escape_str(
310
                                    get_lib_from_av(
311
                                        "av_agreement_statuses",
312
                                        row.status
313
                                    )
314
                                )
315
                            },
316
                        },
317
                        {
318
                            title: __("Closure reason"),
319
                            data: "closure_reason",
320
                            searchable: true,
321
                            orderable: true,
322
                            render: function (data, type, row, meta) {
323
                                return escape_str(
324
                                    get_lib_from_av(
325
                                        "av_agreement_closure_reasons",
326
                                        row.closure_reason
327
                                    )
328
                                )
329
                            },
330
                        },
331
                        {
332
                            title: __("Is perpetual"),
333
                            data: "is_perpetual",
334
                            searchable: true,
335
                            orderable: true,
336
                            render: function (data, type, row, meta) {
337
                                return escape_str(
338
                                    row.is_perpetual ? _("Yes") : _("No")
339
                                )
340
                            },
341
                        },
342
                        {
343
                            title: __("Renewal priority"),
344
                            data: "renewal_priority",
345
                            searchable: true,
346
                            orderable: true,
347
                            render: function (data, type, row, meta) {
348
                                return escape_str(
349
                                    get_lib_from_av(
350
                                        "av_agreement_renewal_priorities",
351
                                        row.renewal_priority
352
                                    )
353
                                )
354
                            },
355
                        },
356
                        {
357
                            title: __("Actions"),
358
                            data: function (row, type, val, meta) {
359
                                return '<div class="actions"></div>'
360
                            },
361
                            className: "actions noExport",
362
                            searchable: false,
363
                            orderable: false,
364
                        },
365
                    ],
366
                    drawCallback: function (settings) {
367
                        var api = new $.fn.dataTable.Api(settings)
368
369
                        if (actions == "edit_delete") {
370
                            $.each(
371
                                $(this).find("td .actions"),
372
                                function (index, e) {
373
                                    let tr = $(this).parent().parent()
374
                                    let agreement_id = api
375
                                        .row(tr)
376
                                        .data().agreement_id
377
                                    let agreement_name = api.row(tr).data().name
378
                                    let editButton = createVNode(
379
                                        "a",
380
                                        {
381
                                            class: "btn btn-default btn-xs",
382
                                            role: "button",
383
                                            onClick: () => {
384
                                                edit_agreement(agreement_id)
385
                                            },
386
                                        },
387
                                        [
388
                                            createVNode("i", {
389
                                                class: "fa fa-pencil",
390
                                                "aria-hidden": "true",
391
                                            }),
392
                                            __("Edit"),
393
                                        ]
394
                                    )
395
396
                                    let deleteButton = createVNode(
397
                                        "a",
398
                                        {
399
                                            class: "btn btn-default btn-xs",
400
                                            role: "button",
401
                                            onClick: () => {
402
                                                delete_agreement(
403
                                                    agreement_id,
404
                                                    agreement_name
405
                                                )
406
                                            },
407
                                        },
408
                                        [
409
                                            createVNode("i", {
410
                                                class: "fa fa-trash",
411
                                                "aria-hidden": "true",
412
                                            }),
413
                                            __("Delete"),
414
                                        ]
415
                                    )
416
417
                                    let n = createVNode("span", {}, [
418
                                        editButton,
419
                                        " ",
420
                                        deleteButton,
421
                                    ])
422
                                    render(n, e)
423
                                }
424
                            )
425
                        } else {
426
                            $.each(
427
                                $(this).find("td .actions"),
428
                                function (index, e) {
429
                                    let tr = $(this).parent().parent()
430
                                    let agreement_id = api
431
                                        .row(tr)
432
                                        .data().agreement_id
433
                                    let selectButton = createVNode(
434
                                        "a",
435
                                        {
436
                                            class: "btn btn-default btn-xs",
437
                                            role: "button",
438
                                            onClick: () => {
439
                                                select_agreement(agreement_id)
440
                                            },
441
                                        },
442
                                        [
443
                                            createVNode("i", {
444
                                                class: "fa fa-check",
445
                                                "aria-hidden": "true",
446
                                            }),
447
                                            __("Select"),
448
                                        ]
449
                                    )
450
451
                                    let n = createVNode("span", {}, [
452
                                        selectButton,
453
                                    ])
454
                                    render(n, e)
455
                                }
456
                            )
457
                        }
458
459
                        $.each(
460
                            $(this).find("tbody tr td:first-child"),
461
                            function (index, e) {
462
                                let tr = $(this).parent()
463
                                let row = api.row(tr).data()
464
                                if (!row) return // Happen if the table is empty
465
                                let n = createVNode(
466
                                    "a",
467
                                    {
468
                                        role: "button",
469
                                        onClick: () => {
470
                                            show_agreement(row.agreement_id)
471
                                        },
472
                                    },
473
                                    `${row.name} (#${row.agreement_id})`
474
                                )
475
                                render(n, e)
476
                            }
477
                        )
478
                    },
479
                    preDrawCallback: function (settings) {
480
                        $("#" + table_id)
481
                            .find("thead th")
482
                            .eq(1)
483
                            .attr("data-filter", "vendors")
484
                        $("#" + table_id)
485
                            .find("thead th")
486
                            .eq(3)
487
                            .attr("data-filter", "av_agreement_statuses")
488
                        $("#" + table_id)
489
                            .find("thead th")
490
                            .eq(4)
491
                            .attr("data-filter", "av_agreement_closure_reasons")
492
                        $("#" + table_id)
493
                            .find("thead th")
494
                            .eq(5)
495
                            .attr("data-filter", "av_agreement_is_perpetual")
496
                        $("#" + table_id)
497
                            .find("thead th")
498
                            .eq(6)
499
                            .attr(
500
                                "data-filter",
501
                                "av_agreement_renewal_priorities"
502
                            )
503
                    },
504
                },
505
                agreement_table_settings,
506
                1,
507
                additional_filters
508
            )
509
        },
510
        getTableColumns: function () {
211
        getTableColumns: function () {
511
            let get_lib_from_av = this.get_lib_from_av
212
            let get_lib_from_av = this.get_lib_from_av
512
            let escape_str = this.escape_str
213
            let escape_str = this.escape_str
513
- 

Return to bug 33066