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

Return to bug 33066