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

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/bookings/list.tt (-6 / +77 lines)
Lines 73-78 Link Here
73
    <script>
73
    <script>
74
        dayjs.extend(window.dayjs_plugin_isSameOrBefore);
74
        dayjs.extend(window.dayjs_plugin_isSameOrBefore);
75
    </script>
75
    </script>
76
    [% Asset.js("js/additional-fields.js") | $raw %]
76
    [% Asset.js("js/modals/place_booking.js") | $raw %]
77
    [% Asset.js("js/modals/place_booking.js") | $raw %]
77
    [% Asset.js("js/cancel_booking_modal.js") | $raw %]
78
    [% Asset.js("js/cancel_booking_modal.js") | $raw %]
78
    [% Asset.js("js/combobox.js") | $raw %]
79
    [% Asset.js("js/combobox.js") | $raw %]
Lines 91-101 Link Here
91
            });
92
            });
92
            var bookings = $.ajax({
93
            var bookings = $.ajax({
93
                url: '/api/v1/biblios/%s/bookings?_per_page=-1'.format(biblionumber),
94
                url: '/api/v1/biblios/%s/bookings?_per_page=-1'.format(biblionumber),
94
                headers: { 'x-koha-embed': 'patron' },
95
                headers: { 'x-koha-embed': ['patron', 'extended_attributes'] },
95
                dataType: 'json',
96
                dataType: 'json',
96
                type: 'GET',
97
                type: 'GET',
97
            });
98
            });
98
99
            var extended_attribute_types;
100
            var authorised_values;
101
            AdditionalFields.fetchAndProcessExtendedAttributes("booking")
102
                .then(types => {
103
                    extended_attribute_types = types;
104
                    const catArray = Object.values(types)
105
                        .map(attr => attr.authorised_value_category_name)
106
                        .filter(Boolean);
107
                    return AdditionalFields.fetchAndProcessAuthorizedValues(catArray);
108
                })
109
                .then(values => {
110
                    authorised_values = values;
111
                });
99
            $.when(items, bookings).then(
112
            $.when(items, bookings).then(
100
                function(items, bookings){
113
                function(items, bookings){
101
                    var itemsSet = new vis.DataSet([{
114
                    var itemsSet = new vis.DataSet([{
Lines 123-128 Link Here
123
                            pickup_library: booking.pickup_library_id,
136
                            pickup_library: booking.pickup_library_id,
124
                            start: dayjs(booking.start_date).toDate(),
137
                            start: dayjs(booking.start_date).toDate(),
125
                            end: dayjs(booking.end_date).toDate(),
138
                            end: dayjs(booking.end_date).toDate(),
139
                            extended_attributes: booking.extended_attributes,
126
                            content: !isActive ? `<s>${patronContent}</s>` : patronContent,
140
                            content: !isActive ? `<s>${patronContent}</s>` : patronContent,
127
                            [% IF CAN_user_circulate_manage_bookings %]
141
                            [% IF CAN_user_circulate_manage_bookings %]
128
                            editable: booking.status !== "cancelled" ? { remove: true, updateTime: true } : false,
142
                            editable: booking.status !== "cancelled" ? { remove: true, updateTime: true } : false,
Lines 190-196 Link Here
190
                            // set end datetime hours and minutes to the end of the day
204
                            // set end datetime hours and minutes to the end of the day
191
                            let endDate = dayjs(data.end).endOf('day');
205
                            let endDate = dayjs(data.end).endOf('day');
192
206
193
                            $('#placeBookingModal').modal('show', $('<button data-booking="'+data.id+'"  data-biblionumber="[% biblionumber | uri %]"  data-itemnumber="'+data.group+'" data-patron="'+data.patron+'" data-pickup_library="'+data.pickup_library+'" data-start_date="'+startDate.toISOString()+'" data-end_date="'+endDate.toISOString()+'">'));
207
                            // Get the current booking to preserve extended attributes
208
                            let currentBooking = bookingsSet.get(data.id);
209
                            let extendedAttributes = currentBooking.extended_attributes || [];
210
211
                            $('#placeBookingModal').modal('show', $(`<button
212
                                data-booking="${data.id}"
213
                                data-biblionumber="[% biblionumber | uri %]"
214
                                data-itemnumber="${data.group}"
215
                                data-patron="${data.patron}"
216
                                data-pickup_library="${data.pickup_library}"
217
                                data-start_date="${startDate.toISOString()}"
218
                                data-end_date="${endDate.toISOString()}"
219
                                data-extended_attributes='${JSON.stringify(extendedAttributes.map(attribute => ({
220
                                    field_id: attribute.field_id,
221
                                    value: attribute.value
222
                                })))}'
223
                            >`));
194
                            $('#placeBookingModal').on('hide.bs.modal', function(e) {
224
                            $('#placeBookingModal').on('hide.bs.modal', function(e) {
195
                                if (update_success) {
225
                                if (update_success) {
196
                                    update_success = 0;
226
                                    update_success = 0;
Lines 246-252 Link Here
246
                "embed": [
276
                "embed": [
247
                    "item",
277
                    "item",
248
                    "patron",
278
                    "patron",
249
                    "pickup_library"
279
                    "pickup_library",
280
                    "extended_attributes",
250
                ],
281
                ],
251
                "columns": [{
282
                "columns": [{
252
                    "data": "booking_id",
283
                    "data": "booking_id",
Lines 366-371 Link Here
366
                        return $date(row.end_date);
397
                        return $date(row.end_date);
367
                    }
398
                    }
368
                },
399
                },
400
                {
401
                    data: "extended_attributes",
402
                    title: _("Additional fields"),
403
                    searchable: false,
404
                    orderable: false,
405
                    render: function (data, type, row, meta) {
406
                        return AdditionalFields.renderExtendedAttributesValues(
407
                            data,
408
                            extended_attribute_types,
409
                            authorised_values,
410
                            row.booking_id
411
                        ).join("<br>");
412
                    },
413
                },
369
                {
414
                {
370
                    "data": "",
415
                    "data": "",
371
                    "title": _("Actions"),
416
                    "title": _("Actions"),
Lines 377-384 Link Here
377
                        let is_cancelled = row.status === "cancelled";
422
                        let is_cancelled = row.status === "cancelled";
378
                        [% IF CAN_user_circulate_manage_bookings %]
423
                        [% IF CAN_user_circulate_manage_bookings %]
379
                        if (!is_cancelled) {
424
                        if (!is_cancelled) {
380
                            result += '<button type="button" class="btn btn-default btn-xs edit-action" data-bs-toggle="modal" data-bs-target="#placeBookingModal" data-booking="%s" data-biblionumber="%s" data-itemnumber="%s" data-patron="%s" data-pickup_library="%s" data-start_date="%s" data-end_date="%s"><i class="fa fa-pencil" aria-hidden="true"></i> %s</button>'.format(row.booking_id, biblionumber, row.item_id,  row.patron_id, row.pickup_library_id, row.start_date, row.end_date, _("Edit"));
425
                            result += `
381
                            result += '<button type="button" class="btn btn-default btn-xs cancel-action" data-bs-toggle="modal" data-bs-target="#cancelBookingModal" data-booking="%s"><i class="fa fa-trash" aria-hidden="true"></i> %s</button>'.format(row.booking_id, _("Cancel"));
426
                                <button type="button" class="btn btn-default btn-xs edit-action"
427
                                    data-bs-toggle="modal"
428
                                    data-bs-target="#placeBookingModal"
429
                                    data-booking="${row.booking_id}"
430
                                    data-biblionumber="${biblionumber}"
431
                                    data-itemnumber="${row.item_id}"
432
                                    data-patron="${row.patron_id}"
433
                                    data-pickup_library="${row.pickup_library_id}"
434
                                    data-start_date="${row.start_date}"
435
                                    data-end_date="${row.end_date}"
436
                                    data-extended_attributes='${JSON.stringify(row.extended_attributes
437
                                        .filter(attribute => attribute.record_id == row.booking_id)
438
                                        .map(attribute => ({
439
                                            field_id: attribute.field_id,
440
                                            value: attribute.value
441
                                        })
442
                                    ))}'
443
                                >
444
                                    <i class="fa fa-pencil" aria-hidden="true"></i> ${_("Edit")}
445
                                </button>`;
446
                            result += `
447
                                <button type="button" class="btn btn-default btn-xs cancel-action"
448
                                    data-bs-toggle="modal"
449
                                    data-bs-target="#cancelBookingModal"
450
                                    data-booking="${row.booking_id}">
451
                                    <i class="fa fa-trash" aria-hidden="true"></i> ${_("Cancel")}
452
                                </button>`;
382
                        }
453
                        }
383
                        [% END %]
454
                        [% END %]
384
                        return result;
455
                        return result;
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/ISBDdetail.tt (+1 lines)
Lines 85-90 Link Here
85
    [% INCLUDE 'calendar.inc' %]
85
    [% INCLUDE 'calendar.inc' %]
86
    [% INCLUDE 'select2.inc' %]
86
    [% INCLUDE 'select2.inc' %]
87
    [% Asset.js("js/catalog.js") | $raw %]
87
    [% Asset.js("js/catalog.js") | $raw %]
88
    [% Asset.js("js/additional-fields.js") | $raw %]
88
    [% Asset.js("js/modals/place_booking.js") | $raw %]
89
    [% Asset.js("js/modals/place_booking.js") | $raw %]
89
    [% Asset.js("js/browser.js") | $raw %]
90
    [% Asset.js("js/browser.js") | $raw %]
90
    [% IF ( Koha.Preference('CatalogConcerns') ) %]
91
    [% IF ( Koha.Preference('CatalogConcerns') ) %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/MARCdetail.tt (+1 lines)
Lines 209-214 Link Here
209
    [% INCLUDE 'calendar.inc' %]
209
    [% INCLUDE 'calendar.inc' %]
210
    [% INCLUDE 'select2.inc' %]
210
    [% INCLUDE 'select2.inc' %]
211
    [% Asset.js("js/catalog.js") | $raw %]
211
    [% Asset.js("js/catalog.js") | $raw %]
212
    [% Asset.js("js/additional-fields.js") | $raw %]
212
    [% Asset.js("js/modals/place_booking.js") | $raw %]
213
    [% Asset.js("js/modals/place_booking.js") | $raw %]
213
    [% Asset.js("js/browser.js") | $raw %]
214
    [% Asset.js("js/browser.js") | $raw %]
214
    [% IF ( Koha.Preference('CatalogConcerns') ) %]
215
    [% IF ( Koha.Preference('CatalogConcerns') ) %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt (+1 lines)
Lines 1712-1717 Link Here
1712
    [% INCLUDE 'js-patron-format.inc' %]
1712
    [% INCLUDE 'js-patron-format.inc' %]
1713
    [% INCLUDE 'js-biblio-format.inc' %]
1713
    [% INCLUDE 'js-biblio-format.inc' %]
1714
    [% Asset.js("js/browser.js") | $raw %]
1714
    [% Asset.js("js/browser.js") | $raw %]
1715
    [% Asset.js("js/additional-fields.js") | $raw %]
1715
    [% Asset.js("js/modals/place_booking.js") | $raw %]
1716
    [% Asset.js("js/modals/place_booking.js") | $raw %]
1716
    <script>
1717
    <script>
1717
        var browser;
1718
        var browser;
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/imageviewer.tt (+1 lines)
Lines 139-144 Link Here
139
    [% INCLUDE 'calendar.inc' %]
139
    [% INCLUDE 'calendar.inc' %]
140
    [% INCLUDE 'select2.inc' %]
140
    [% INCLUDE 'select2.inc' %]
141
    [% Asset.js("js/catalog.js") | $raw %]
141
    [% Asset.js("js/catalog.js") | $raw %]
142
    [% Asset.js("js/additional-fields.js") | $raw %]
142
    [% Asset.js("js/modals/place_booking.js") | $raw %]
143
    [% Asset.js("js/modals/place_booking.js") | $raw %]
143
    [% IF ( Koha.Preference('CatalogConcerns') ) %]
144
    [% IF ( Koha.Preference('CatalogConcerns') ) %]
144
        <script>
145
        <script>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/labeledMARCdetail.tt (+1 lines)
Lines 98-103 Link Here
98
    [% INCLUDE 'calendar.inc' %]
98
    [% INCLUDE 'calendar.inc' %]
99
    [% INCLUDE 'select2.inc' %]
99
    [% INCLUDE 'select2.inc' %]
100
    [% Asset.js("js/catalog.js") | $raw %]
100
    [% Asset.js("js/catalog.js") | $raw %]
101
    [% Asset.js("js/additional-fields.js") | $raw %]
101
    [% Asset.js("js/modals/place_booking.js") | $raw %]
102
    [% Asset.js("js/modals/place_booking.js") | $raw %]
102
    [% Asset.js("js/browser.js") | $raw %]
103
    [% Asset.js("js/browser.js") | $raw %]
103
    [% IF ( Koha.Preference('CatalogConcerns') ) %]
104
    [% IF ( Koha.Preference('CatalogConcerns') ) %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt (+1 lines)
Lines 577-582 Link Here
577
    [% INCLUDE 'calendar.inc' %]
577
    [% INCLUDE 'calendar.inc' %]
578
    [% INCLUDE 'select2.inc' %]
578
    [% INCLUDE 'select2.inc' %]
579
    [% Asset.js("js/catalog.js") | $raw %]
579
    [% Asset.js("js/catalog.js") | $raw %]
580
    [% Asset.js("js/additional-fields.js") | $raw %]
580
    [% Asset.js("js/modals/place_booking.js") | $raw %]
581
    [% Asset.js("js/modals/place_booking.js") | $raw %]
581
    [% Asset.js("js/browser.js") | $raw %]
582
    [% Asset.js("js/browser.js") | $raw %]
582
    [% Asset.js("js/checkout_renewals_modal.js") | $raw %]
583
    [% Asset.js("js/checkout_renewals_modal.js") | $raw %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (+1 lines)
Lines 1098-1103 Link Here
1098
    [% END %]
1098
    [% END %]
1099
    [% Asset.js("js/holds.js") | $raw %]
1099
    [% Asset.js("js/holds.js") | $raw %]
1100
    [% INCLUDE 'calendar.inc' %]
1100
    [% INCLUDE 'calendar.inc' %]
1101
    [% Asset.js("js/additional-fields.js") | $raw %]
1101
    [% Asset.js("js/cancel_booking_modal.js") | $raw %]
1102
    [% Asset.js("js/cancel_booking_modal.js") | $raw %]
1102
    [% Asset.js("js/combobox.js") | $raw %]
1103
    [% Asset.js("js/combobox.js") | $raw %]
1103
    [% INCLUDE 'js-biblio-format.inc' %]
1104
    [% INCLUDE 'js-biblio-format.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingbookings.tt (-2 / +32 lines)
Lines 116-124 Link Here
116
    [% INCLUDE 'js-biblio-format.inc' %]
116
    [% INCLUDE 'js-biblio-format.inc' %]
117
    [% INCLUDE 'js-date-format.inc' %]
117
    [% INCLUDE 'js-date-format.inc' %]
118
    [% INCLUDE 'js-patron-format.inc' %]
118
    [% INCLUDE 'js-patron-format.inc' %]
119
    [% Asset.js("js/additional-fields.js") | $raw %]
119
    <script>
120
    <script>
120
        let table_settings = [% TablesSettings.GetTableSettings( 'circ', 'bookings', 'bookings-to-collect', 'json' ) | $raw %];
121
        let table_settings = [% TablesSettings.GetTableSettings( 'circ', 'bookings', 'bookings-to-collect', 'json' ) | $raw %];
121
        $(document).ready(function() {
122
        $(document).ready(function() {
123
            var extended_attribute_types;
124
            var authorised_values;
125
            AdditionalFields.fetchAndProcessExtendedAttributes("booking")
126
                .then(types => {
127
                    extended_attribute_types = types;
128
                    const catArray = Object.values(types)
129
                        .map(attr => attr.authorised_value_category_name)
130
                        .filter(Boolean);
131
                    return AdditionalFields.fetchAndProcessAuthorizedValues(catArray);
132
                })
133
                .then(values => {
134
                    authorised_values = values;
135
                });
122
136
123
            let additional_filters = {
137
            let additional_filters = {
124
                start_date: function() {
138
                start_date: function() {
Lines 174-180 Link Here
174
                    "item+strings",
188
                    "item+strings",
175
                    "item.checkout",
189
                    "item.checkout",
176
                    "patron",
190
                    "patron",
177
                    "pickup_library"
191
                    "pickup_library",
192
                    "extended_attributes"
178
                ],
193
                ],
179
                "order": [[ 7, "asc" ]],
194
                "order": [[ 7, "asc" ]],
180
                "columns": [{
195
                "columns": [{
Lines 268-274 Link Here
268
                    "render": function(data, type, row, meta) {
283
                    "render": function(data, type, row, meta) {
269
                        return $date(row.start_date) + ' - ' + $date(row.end_date);
284
                        return $date(row.start_date) + ' - ' + $date(row.end_date);
270
                    }
285
                    }
271
                }]
286
                },
287
                {
288
                    data: "extended_attributes",
289
                    title: _("Additional fields"),
290
                    searchable: false,
291
                    orderable: false,
292
                    render: function (data, type, row, meta) {
293
                        return AdditionalFields.renderExtendedAttributesValues(
294
                            data,
295
                            extended_attribute_types,
296
                            authorised_values,
297
                            row.booking_id
298
                        ).join("<br>");
299
                    },
300
                },
301
                ]
272
            }, table_settings, 1, additional_filters, filters_options);
302
            }, table_settings, 1, additional_filters, filters_options);
273
303
274
            /** Date filtering */
304
            /** Date filtering */
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt (+1 lines)
Lines 780-785 Link Here
780
    [% END %]
780
    [% END %]
781
    [% Asset.js("js/holds.js") | $raw %]
781
    [% Asset.js("js/holds.js") | $raw %]
782
    [% INCLUDE 'calendar.inc' %]
782
    [% INCLUDE 'calendar.inc' %]
783
    [% Asset.js("js/additional-fields.js") | $raw %]
783
    [% Asset.js("js/cancel_booking_modal.js") | $raw %]
784
    [% Asset.js("js/cancel_booking_modal.js") | $raw %]
784
    [% Asset.js("js/combobox.js") | $raw %]
785
    [% Asset.js("js/combobox.js") | $raw %]
785
    [% INCLUDE 'js-biblio-format.inc' %]
786
    [% INCLUDE 'js-biblio-format.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/js/modals/place_booking.js (-3 / +40 lines)
Lines 7-12 let bookable_items, Link Here
7
    booking_patron,
7
    booking_patron,
8
    booking_itemtype_id;
8
    booking_itemtype_id;
9
9
10
// Initialize AdditionalFields module
11
const additionalFields = AdditionalFields.init({
12
    containerId: "booking_extended_attributes",
13
    resourceType: "booking",
14
    selectors: {
15
        repeatableFieldClass: "repeatable-field",
16
        inputClass: "extended-attribute",
17
        fieldPrefix: "extended_attributes",
18
    },
19
});
20
10
function containsAny(integers1, integers2) {
21
function containsAny(integers1, integers2) {
11
    // Create a hash set to store integers from the second array
22
    // Create a hash set to store integers from the second array
12
    let integerSet = {};
23
    let integerSet = {};
Lines 35-40 $("#placeBookingModal").on("show.bs.modal", function (e) { Link Here
35
    booking_item_id = button.data("itemnumber");
46
    booking_item_id = button.data("itemnumber");
36
    let start_date = button.data("start_date");
47
    let start_date = button.data("start_date");
37
    let end_date = button.data("end_date");
48
    let end_date = button.data("end_date");
49
    let extended_attributes = button.data("extended_attributes");
38
50
39
    // Get booking id if this is an edit
51
    // Get booking id if this is an edit
40
    booking_id = button.data("booking");
52
    booking_id = button.data("booking");
Lines 47-52 $("#placeBookingModal").on("show.bs.modal", function (e) { Link Here
47
        $("#booking_id").val("");
59
        $("#booking_id").val("");
48
    }
60
    }
49
61
62
    additionalFields
63
        .fetchExtendedAttributes("booking")
64
        .then(response =>
65
            additionalFields.renderExtendedAttributes(
66
                response,
67
                extended_attributes
68
            )
69
        );
70
50
    // Patron select2
71
    // Patron select2
51
    $("#booking_patron_id").kohaSelect({
72
    $("#booking_patron_id").kohaSelect({
52
        dropdownParent: $(".modal-content", "#placeBookingModal"),
73
        dropdownParent: $(".modal-content", "#placeBookingModal"),
Lines 332-337 $("#placeBookingModal").on("show.bs.modal", function (e) { Link Here
332
                biblionumber +
353
                biblionumber +
333
                "&_per_page=-1" +
354
                "&_per_page=-1" +
334
                '&q={"status":{"-in":["new","pending","active"]}}',
355
                '&q={"status":{"-in":["new","pending","active"]}}',
356
            headers: {
357
                "x-koha-embed": ["extended_attributes"],
358
            },
335
            dataType: "json",
359
            dataType: "json",
336
            type: "GET",
360
            type: "GET",
337
        });
361
        });
Lines 1047-1053 $("#placeBookingModal").on("show.bs.modal", function (e) { Link Here
1047
                    booking_item_id,
1071
                    booking_item_id,
1048
                    start_date,
1072
                    start_date,
1049
                    end_date,
1073
                    end_date,
1050
                    periodPicker
1074
                    periodPicker,
1075
                    extended_attributes
1051
                );
1076
                );
1052
            },
1077
            },
1053
            function (jqXHR, textStatus, errorThrown) {
1078
            function (jqXHR, textStatus, errorThrown) {
Lines 1060-1066 $("#placeBookingModal").on("show.bs.modal", function (e) { Link Here
1060
            booking_item_id,
1085
            booking_item_id,
1061
            start_date,
1086
            start_date,
1062
            end_date,
1087
            end_date,
1063
            periodPicker
1088
            periodPicker,
1089
            extended_attributes
1064
        );
1090
        );
1065
    }
1091
    }
1066
});
1092
});
Lines 1070-1076 function setFormValues( Link Here
1070
    booking_item_id,
1096
    booking_item_id,
1071
    start_date,
1097
    start_date,
1072
    end_date,
1098
    end_date,
1073
    periodPicker
1099
    periodPicker,
1100
    extended_attributes
1074
) {
1101
) {
1075
    // If passed patron, pre-select
1102
    // If passed patron, pre-select
1076
    if (patron_id) {
1103
    if (patron_id) {
Lines 1123-1128 function setFormValues( Link Here
1123
    if (booking_item_id) {
1150
    if (booking_item_id) {
1124
        $("#booking_item_id").val(booking_item_id).trigger("change");
1151
        $("#booking_item_id").val(booking_item_id).trigger("change");
1125
    }
1152
    }
1153
1154
    // If passed extended attributes, set them
1155
    if (extended_attributes) {
1156
        additionalFields.setValues(extended_attributes);
1157
    }
1126
}
1158
}
1127
1159
1128
$("#placeBookingForm").on("submit", function (e) {
1160
$("#placeBookingForm").on("submit", function (e) {
Lines 1146-1151 $("#placeBookingForm").on("submit", function (e) { Link Here
1146
                biblio_id: biblio_id,
1178
                biblio_id: biblio_id,
1147
                item_id: item_id != 0 ? item_id : null,
1179
                item_id: item_id != 0 ? item_id : null,
1148
                patron_id: $("#booking_patron_id").find(":selected").val(),
1180
                patron_id: $("#booking_patron_id").find(":selected").val(),
1181
                extended_attributes: additionalFields.getValues(),
1149
            })
1182
            })
1150
        );
1183
        );
1151
1184
Lines 1215-1220 $("#placeBookingForm").on("submit", function (e) { Link Here
1215
                biblio_id: biblio_id,
1248
                biblio_id: biblio_id,
1216
                item_id: item_id != 0 ? item_id : null,
1249
                item_id: item_id != 0 ? item_id : null,
1217
                patron_id: $("#booking_patron_id").find(":selected").val(),
1250
                patron_id: $("#booking_patron_id").find(":selected").val(),
1251
                extended_attributes: additionalFields.getValues(),
1218
            }),
1252
            }),
1219
        });
1253
        });
1220
1254
Lines 1300-1303 $("#placeBookingModal").on("hidden.bs.modal", function (e) { Link Here
1300
    $("#booking_start_date").val("");
1334
    $("#booking_start_date").val("");
1301
    $("#booking_end_date").val("");
1335
    $("#booking_end_date").val("");
1302
    $("#booking_id").val("");
1336
    $("#booking_id").val("");
1337
1338
    // Clear additional fields
1339
    additionalFields.clear();
1303
});
1340
});
(-)a/koha-tmpl/intranet-tmpl/prog/js/tables/bookings.js (-2 / +31 lines)
Lines 26-38 $(document).ready(function () { Link Here
26
        };
26
        };
27
27
28
        if (!bookings_table) {
28
        if (!bookings_table) {
29
            var extended_attribute_types;
30
            var authorised_values;
31
            AdditionalFields.fetchAndProcessExtendedAttributes("booking")
32
                .then(types => {
33
                    extended_attribute_types = types;
34
                    const catArray = Object.values(types)
35
                        .map(attr => attr.authorised_value_category_name)
36
                        .filter(Boolean);
37
                    return AdditionalFields.fetchAndProcessAuthorizedValues(
38
                        catArray
39
                    );
40
                })
41
                .then(values => {
42
                    authorised_values = values;
43
                });
44
29
            var bookings_table_url = "/api/v1/bookings";
45
            var bookings_table_url = "/api/v1/bookings";
30
            bookings_table = $("#bookings_table").kohaTable(
46
            bookings_table = $("#bookings_table").kohaTable(
31
                {
47
                {
32
                    ajax: {
48
                    ajax: {
33
                        url: bookings_table_url,
49
                        url: bookings_table_url,
34
                    },
50
                    },
35
                    embed: ["biblio", "item", "patron"],
51
                    embed: ["biblio", "item", "patron", "extended_attributes"],
36
                    columns: [
52
                    columns: [
37
                        {
53
                        {
38
                            data: "booking_id",
54
                            data: "booking_id",
Lines 94-99 $(document).ready(function () { Link Here
94
                                return $date(row.end_date);
110
                                return $date(row.end_date);
95
                            },
111
                            },
96
                        },
112
                        },
113
                        {
114
                            data: "extended_attributes",
115
                            title: _("Additional fields"),
116
                            searchable: false,
117
                            orderable: false,
118
                            render: function (data, type, row, meta) {
119
                                return AdditionalFields.renderExtendedAttributesValues(
120
                                    data,
121
                                    extended_attribute_types,
122
                                    authorised_values,
123
                                    row.booking_id
124
                                ).join("<br>");
125
                            },
126
                        },
97
                        {
127
                        {
98
                            data: "",
128
                            data: "",
99
                            title: __("Actions"),
129
                            title: __("Actions"),
100
- 

Return to bug 37829