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

(-)a/koha-tmpl/intranet-tmpl/prog/js/modals/place_booking.js (-27 / +71 lines)
Lines 7-12 let bookable_items, Link Here
7
    booking_item_id,
7
    booking_item_id,
8
    booking_patron;
8
    booking_patron;
9
9
10
function containsAny(integers1, integers2) {
11
    // Create a hash set to store integers from the second array
12
    let integerSet = {};
13
    for (let i = 0; i < integers2.length; i++) {
14
        integerSet[integers2[i]] = true;
15
    }
16
17
    // Check if any integer from the first array exists in the hash set
18
    for (let i = 0; i < integers1.length; i++) {
19
        if (integerSet[integers1[i]]) {
20
            return true; // Found a match, return true
21
        }
22
    }
23
24
    return false; // No match found
25
}
26
10
$("#placeBookingModal").on("show.bs.modal", function (e) {
27
$("#placeBookingModal").on("show.bs.modal", function (e) {
11
    // Get context
28
    // Get context
12
    let button = $(e.relatedTarget);
29
    let button = $(e.relatedTarget);
Lines 120-125 $("#placeBookingModal").on("show.bs.modal", function (e) { Link Here
120
        allowClear: false,
137
        allowClear: false,
121
        placeholder: __("Pickup location"),
138
        placeholder: __("Pickup location"),
122
    });
139
    });
140
    function setLocationsPicker(response) {
141
        let $pickupSelect = $("#pickup_library_id");
142
        let bookableItemnumbers = bookable_items.map(function(object) { return object.item_id; });
143
        $pickupSelect.empty();
144
145
        $.each(response, function(index, pickup_location) {
146
            if (containsAny(pickup_location.pickup_items, bookableItemnumbers)) {
147
                let option = $(
148
                    '<option value="' +
149
                    pickup_location.library_id +
150
                    '">' +
151
                    pickup_location.name +
152
                    "</option>"
153
                );
154
155
                option.attr(
156
                    "data-needs_override",
157
                    pickup_location.needs_override
158
                );
159
                option.attr(
160
                    "data-pickup_items",
161
                    pickup_location.pickup_items.join(",")
162
                );
163
164
                $pickupSelect.append(option);
165
            }
166
        });
167
168
        $pickupSelect.prop("disabled", false);
169
        $pickupSelect.val(null).trigger("change");
170
    }
123
171
124
    // Item select2
172
    // Item select2
125
    $("#booking_item_id").select2({
173
    $("#booking_item_id").select2({
Lines 135-141 $("#placeBookingModal").on("show.bs.modal", function (e) { Link Here
135
        booking_patron = e.params.data;
183
        booking_patron = e.params.data;
136
184
137
        // Fetch pickup locations and enable picker
185
        // Fetch pickup locations and enable picker
138
        let $pickupSelect = $("#pickup_library_id");
139
        $.ajax({
186
        $.ajax({
140
            url: pickup_url,
187
            url: pickup_url,
141
            type: "GET",
188
            type: "GET",
Lines 146-176 $("#placeBookingModal").on("show.bs.modal", function (e) { Link Here
146
                patron_id: booking_patron.patron_id,
193
                patron_id: booking_patron.patron_id,
147
            },
194
            },
148
            success: function (response) {
195
            success: function (response) {
149
                $pickupSelect.empty();
196
                if (dataFetched === true) {
150
197
                    setLocationsPicker(response);
151
                $.each(response, function (index, pickup_location) {
198
152
                    let option = $(
199
                } else {
153
                        '<option value="' +
200
                    var interval = setInterval(function() {
154
                            pickup_location.library_id +
201
                        if (dataFetched === true) {
155
                            '">' +
202
                            // Data is fetched, execute the callback and stop the interval
156
                            pickup_location.name +
203
                            setLocationsPicker(response);
157
                            "</option>"
204
                            clearInterval(interval);
158
                    );
205
                        }
159
206
                    }, 100);
160
                    option.attr(
207
                };
161
                        "data-needs_override",
162
                        pickup_location.needs_override
163
                    );
164
                    option.attr(
165
                        "data-pickup_items",
166
                        pickup_location.pickup_items.join(",")
167
                    );
168
169
                    $pickupSelect.append(option);
170
                });
171
172
                $pickupSelect.prop("disabled", false);
173
                $pickupSelect.val(null).trigger("change");
174
            },
208
            },
175
            error: function (xhr, status, error) {
209
            error: function (xhr, status, error) {
176
                console.log("Pickup location fetch failed: ", error);
210
                console.log("Pickup location fetch failed: ", error);
Lines 820-833 $("#placeBookingForm").on("submit", function (e) { Link Here
820
});
854
});
821
855
822
$("#placeBookingModal").on("hidden.bs.modal", function (e) {
856
$("#placeBookingModal").on("hidden.bs.modal", function (e) {
857
858
    // Reset patron select
823
    $("#booking_patron_id").val(null).trigger("change");
859
    $("#booking_patron_id").val(null).trigger("change");
824
    $("#booking_patron_id").empty();
860
    $("#booking_patron_id").empty();
861
    $("#booking_patron_id").prop("disabled", false);
825
    booking_patron = undefined;
862
    booking_patron = undefined;
863
864
    // Restet item select
826
    $("#booking_item_id").val(0).trigger("change");
865
    $("#booking_item_id").val(0).trigger("change");
866
    $("#booking_item_id").prop("disabled", true);
867
868
    // Reset pickup library select
827
    $("#pickup_library_id").val(null).trigger("change");
869
    $("#pickup_library_id").val(null).trigger("change");
828
    $("#pickup_library_id").empty();
870
    $("#pickup_library_id").empty();
829
    $("#pickup_library_id").prop("disabled", true);
871
    $("#pickup_library_id").prop("disabled", true);
872
873
    // Reset booking period picker
830
    $("#period").get(0)._flatpickr.clear();
874
    $("#period").get(0)._flatpickr.clear();
875
    $("#period").prop("disabled", true);
831
    $("#booking_start_date").val("");
876
    $("#booking_start_date").val("");
832
    $("#booking_end_date").val("");
877
    $("#booking_end_date").val("");
833
    $("#booking_id").val("");
878
    $("#booking_id").val("");
834
- 

Return to bug 36120