Lines 110-177
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
110 |
placeholder: __("Search for a patron"), |
110 |
placeholder: __("Search for a patron"), |
111 |
}); |
111 |
}); |
112 |
|
112 |
|
113 |
$("#booking_patron_id").on("select2:select", function (e) { |
|
|
114 |
booking_patron = e.params.data; |
115 |
$("#pickup_library_id").prop("disabled", false); |
116 |
}); |
117 |
|
118 |
// Pickup location select2 |
113 |
// Pickup location select2 |
119 |
let pickup_url = "/api/v1/biblios/" + biblionumber + "/pickup_locations"; |
114 |
let pickup_url = "/api/v1/biblios/" + biblionumber + "/pickup_locations"; |
120 |
$("#pickup_library_id").kohaSelect({ |
115 |
$("#pickup_library_id").select2({ |
121 |
dropdownParent: $(".modal-content", "#placeBookingModal"), |
116 |
dropdownParent: $(".modal-content", "#placeBookingModal"), |
122 |
width: "50%", |
117 |
width: "50%", |
123 |
dropdownAutoWidth: true, |
118 |
dropdownAutoWidth: true, |
|
|
119 |
minimumResultsForSearch: 10, |
124 |
allowClear: false, |
120 |
allowClear: false, |
125 |
ajax: { |
121 |
placeholder: __("Pickup location"), |
|
|
122 |
}); |
123 |
|
124 |
// Item select2 |
125 |
$("#booking_item_id").select2({ |
126 |
dropdownParent: $(".modal-content", "#placeBookingModal"), |
127 |
width: "50%", |
128 |
dropdownAutoWidth: true, |
129 |
minimumResultsForSearch: 10, |
130 |
allowClear: false, |
131 |
}); |
132 |
|
133 |
// Patron selection triggers |
134 |
$("#booking_patron_id").on("select2:select", function (e) { |
135 |
booking_patron = e.params.data; |
136 |
|
137 |
// Fetch pickup locations and enable picker |
138 |
let $pickupSelect = $("#pickup_library_id"); |
139 |
$.ajax({ |
126 |
url: pickup_url, |
140 |
url: pickup_url, |
127 |
delay: 300, // wait 300 milliseconds before triggering the request |
141 |
type: "GET", |
128 |
cache: true, |
|
|
129 |
dataType: "json", |
142 |
dataType: "json", |
130 |
data: function (params) { |
143 |
data: { |
131 |
var search_term = params.term === undefined ? "" : params.term; |
144 |
_order_by: "name", |
132 |
var query = { |
145 |
_per_page: "-1", |
133 |
q: JSON.stringify({ |
146 |
patron_id: booking_patron.patron_id, |
134 |
name: { "-like": "%" + search_term + "%" }, |
|
|
135 |
}), |
136 |
_order_by: "name", |
137 |
_page: params.page, |
138 |
}; |
139 |
query["patron_id"] = booking_patron.patron_id; |
140 |
return query; |
141 |
}, |
147 |
}, |
142 |
processResults: function (data) { |
148 |
success: function (response) { |
143 |
var results = []; |
149 |
$pickupSelect.empty(); |
144 |
data.results.forEach(function (pickup_location) { |
150 |
|
145 |
results.push({ |
151 |
$.each(response, function (index, pickup_location) { |
146 |
id: pickup_location.library_id.escapeHtml(), |
152 |
let option = $( |
147 |
text: pickup_location.name.escapeHtml(), |
153 |
'<option value="' + |
148 |
needs_override: pickup_location.needs_override, |
154 |
pickup_location.library_id + |
149 |
pickup_items: pickup_location.pickup_items, |
155 |
'">' + |
150 |
}); |
156 |
pickup_location.name + |
|
|
157 |
"</option>" |
158 |
); |
159 |
|
160 |
option.attr( |
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); |
151 |
}); |
170 |
}); |
152 |
return { |
171 |
|
153 |
results: results, |
172 |
$pickupSelect.prop("disabled", false); |
154 |
pagination: { more: data.pagination.more }, |
173 |
$pickupSelect.val(null).trigger("change"); |
155 |
}; |
|
|
156 |
}, |
174 |
}, |
157 |
}, |
175 |
error: function (xhr, status, error) { |
158 |
templateResult: function (state) { |
176 |
console.log("Pickup location fetch failed: ", error); |
159 |
var $text; |
177 |
}, |
160 |
if (state.needs_override === true) { |
178 |
}); |
161 |
$text = $( |
179 |
|
162 |
"<span>" + |
180 |
// Enable item selection if item data is also fetched |
163 |
state.text + |
181 |
let $bookingItemSelect = $("#booking_item_id"); |
164 |
'</span> <span style="float:right;" title="' + |
182 |
$bookingItemSelect.data("patron", true); |
165 |
__( |
183 |
if ($bookingItemSelect.data("loaded")) { |
166 |
"This pickup location is not allowed according to circulation rules" |
184 |
$bookingItemSelect.prop("disabled", false); |
167 |
) + |
185 |
} |
168 |
'"><i class="fa fa-exclamation-circle" aria-hidden="true"></i></span>' |
|
|
169 |
); |
170 |
} else { |
171 |
$text = $("<span>" + state.text + "</span>"); |
172 |
} |
173 |
return $text; |
174 |
}, |
175 |
}); |
186 |
}); |
176 |
|
187 |
|
177 |
// Adopt periodPicker |
188 |
// Adopt periodPicker |
Lines 224-238
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
224 |
bookings.unshift(booking); |
235 |
bookings.unshift(booking); |
225 |
} |
236 |
} |
226 |
|
237 |
|
227 |
// Item select2 |
|
|
228 |
$("#booking_item_id").select2({ |
229 |
dropdownParent: $(".modal-content", "#placeBookingModal"), |
230 |
width: "50%", |
231 |
dropdownAutoWidth: true, |
232 |
minimumResultsForSearch: 20, |
233 |
placeholder: __("Select item"), |
234 |
}); |
235 |
|
236 |
// Update flatpickr mode |
238 |
// Update flatpickr mode |
237 |
periodPicker.set("mode", "range"); |
239 |
periodPicker.set("mode", "range"); |
238 |
|
240 |
|
Lines 254-263
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
254 |
false, |
256 |
false, |
255 |
false |
257 |
false |
256 |
); |
258 |
); |
257 |
newOption.setAttribute( |
259 |
newOption.setAttribute("data-available", true); |
258 |
"data-available", |
|
|
259 |
true |
260 |
); |
261 |
|
260 |
|
262 |
// Append it to the select |
261 |
// Append it to the select |
263 |
$("#booking_item_id").append(newOption); |
262 |
$("#booking_item_id").append(newOption); |
Lines 450-469
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
450 |
? e.params.data.id |
449 |
? e.params.data.id |
451 |
: null; |
450 |
: null; |
452 |
|
451 |
|
|
|
452 |
// Disable invalid pickup locations |
453 |
$("#pickup_library_id > option").each(function () { |
454 |
let option = $(this); |
455 |
if (booking_item_id == 0) { |
456 |
option.prop("disabled", false); |
457 |
} else { |
458 |
let valid_items = String( |
459 |
option.data("pickup_items") |
460 |
) |
461 |
.split(",") |
462 |
.map(Number); |
463 |
if ( |
464 |
valid_items.includes(parseInt(booking_item_id)) |
465 |
) { |
466 |
option.prop("disabled", false); |
467 |
} else { |
468 |
option.prop("disabled", true); |
469 |
} |
470 |
} |
471 |
}); |
472 |
$("#pickup_library_id").trigger("change.select2"); |
473 |
|
474 |
// Disable patron selection change |
475 |
$("#booking_patron_id").prop("disabled", true); |
476 |
|
453 |
// redraw pariodPicker taking selected item into account |
477 |
// redraw pariodPicker taking selected item into account |
454 |
periodPicker.redraw(); |
478 |
periodPicker.redraw(); |
455 |
}); |
479 |
}); |
456 |
|
480 |
|
457 |
// Setup listener for pickup location select2 |
481 |
// Setup listener for pickup location select2 |
458 |
$("#pickup_library_id").on("select2:select", function (e) { |
482 |
$("#pickup_library_id").on("select2:select", function (e) { |
459 |
let valid_items = e.params.data.pickup_items; |
483 |
let valid_items = |
460 |
valid_items.push(0); |
484 |
e.params.data.element.dataset.pickup_items.split(","); |
|
|
485 |
valid_items.push("0"); |
461 |
|
486 |
|
462 |
// Disable items not available at the pickup location |
487 |
// Disable items not available at the pickup location |
463 |
$("#booking_item_id > option").each(function () { |
488 |
$("#booking_item_id > option").each(function () { |
464 |
let option = $(this); |
489 |
let option = $(this); |
465 |
let item_id = option.val(); |
490 |
let item_id = option.val(); |
466 |
if (valid_items.includes(parseInt(item_id))) { |
491 |
if (valid_items.includes(item_id)) { |
467 |
option.attr("data-pickup", true); |
492 |
option.attr("data-pickup", true); |
468 |
if (option.data("available")) { |
493 |
if (option.data("available")) { |
469 |
option.prop("disabled", false); |
494 |
option.prop("disabled", false); |
Lines 474-479
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
474 |
} |
499 |
} |
475 |
}); |
500 |
}); |
476 |
$("#booking_item_id").trigger("change.select2"); |
501 |
$("#booking_item_id").trigger("change.select2"); |
|
|
502 |
|
503 |
// Disable patron selection change |
504 |
$("#booking_patron_id").prop("disabled", true); |
477 |
}); |
505 |
}); |
478 |
|
506 |
|
479 |
// Set onChange for flatpickr |
507 |
// Set onChange for flatpickr |
Lines 564-571
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
564 |
$("#period_fields :input").prop("disabled", false); |
592 |
$("#period_fields :input").prop("disabled", false); |
565 |
|
593 |
|
566 |
// Redraw select with new options and enable |
594 |
// Redraw select with new options and enable |
567 |
$("#booking_item_id").trigger("change"); |
595 |
let $bookingItemSelect = $("#booking_item_id"); |
568 |
$("#booking_item_id").prop("disabled", false); |
596 |
$bookingItemSelect.trigger("change"); |
|
|
597 |
$bookingItemSelect.data("loaded", true); |
598 |
if ($bookingItemSelect.data("patron")) { |
599 |
$bookingItemSelect.prop("disabled", false); |
600 |
} |
569 |
|
601 |
|
570 |
// Set the flag to indicate that data has been fetched |
602 |
// Set the flag to indicate that data has been fetched |
571 |
dataFetched = true; |
603 |
dataFetched = true; |
572 |
- |
|
|