|
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 |
- |
|
|