Lines 5-11
let bookable_items,
Link Here
|
5 |
checkouts, |
5 |
checkouts, |
6 |
booking_id, |
6 |
booking_id, |
7 |
booking_item_id, |
7 |
booking_item_id, |
8 |
booking_patron; |
8 |
booking_patron, |
|
|
9 |
booking_itemtype_id; |
9 |
|
10 |
|
10 |
function containsAny(integers1, integers2) { |
11 |
function containsAny(integers1, integers2) { |
11 |
// Create a hash set to store integers from the second array |
12 |
// Create a hash set to store integers from the second array |
Lines 25-30
function containsAny(integers1, integers2) {
Link Here
|
25 |
} |
26 |
} |
26 |
|
27 |
|
27 |
$("#placeBookingModal").on("show.bs.modal", function (e) { |
28 |
$("#placeBookingModal").on("show.bs.modal", function (e) { |
|
|
29 |
|
28 |
// Get context |
30 |
// Get context |
29 |
let button = $(e.relatedTarget); |
31 |
let button = $(e.relatedTarget); |
30 |
let biblionumber = button.data("biblionumber"); |
32 |
let biblionumber = button.data("biblionumber"); |
Lines 128-133
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
128 |
placeholder: __("Search for a patron"), |
130 |
placeholder: __("Search for a patron"), |
129 |
}); |
131 |
}); |
130 |
|
132 |
|
|
|
133 |
// Lead and Trail days syncing |
134 |
let leadDays = 0; |
135 |
let trailDays = 0; |
136 |
function setBufferDays() { |
137 |
let rules_url = "/api/v1/circulation_rules"; |
138 |
$.ajax({ |
139 |
url: rules_url, |
140 |
type: "GET", |
141 |
dataType: "json", |
142 |
data: { |
143 |
category: booking_patron.category_id, |
144 |
itemtype: booking_itemtype_id, |
145 |
branchcode: pickup_library_id, |
146 |
rules: [ 'bookings_lead_period', 'bookings_trail_period' ] |
147 |
}, |
148 |
success: function (response) { |
149 |
leadDays = response.bookings_lead_period; |
150 |
trailDays = response.bookings_trail_period; |
151 |
}, |
152 |
error: function (xhr, status, error) { |
153 |
console.log("Circulation rules fetch failed: ", error); |
154 |
}, |
155 |
}); |
156 |
} |
157 |
|
131 |
// Pickup location select2 |
158 |
// Pickup location select2 |
132 |
let pickup_url = "/api/v1/biblios/" + biblionumber + "/pickup_locations"; |
159 |
let pickup_url = "/api/v1/biblios/" + biblionumber + "/pickup_locations"; |
133 |
$("#pickup_library_id").select2({ |
160 |
$("#pickup_library_id").select2({ |
Lines 172-178
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
172 |
|
199 |
|
173 |
$pickupSelect.prop("disabled", false); |
200 |
$pickupSelect.prop("disabled", false); |
174 |
|
201 |
|
175 |
// If pickup_library alread exists, pre-select |
202 |
// If pickup_library already exists, pre-select |
176 |
if (pickup_library_id) { |
203 |
if (pickup_library_id) { |
177 |
$pickupSelect.val(pickup_library_id).trigger("change"); |
204 |
$pickupSelect.val(pickup_library_id).trigger("change"); |
178 |
} else { |
205 |
} else { |
Lines 244-249
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
244 |
if ($bookingItemtypeSelect.data("loaded")) { |
271 |
if ($bookingItemtypeSelect.data("loaded")) { |
245 |
$bookingItemtypeSelect.prop("disabled", false); |
272 |
$bookingItemtypeSelect.prop("disabled", false); |
246 |
} |
273 |
} |
|
|
274 |
|
275 |
// Populate circulation rules |
276 |
setBufferDays(); |
247 |
}); |
277 |
}); |
248 |
|
278 |
|
249 |
// Adopt periodPicker |
279 |
// Adopt periodPicker |
Lines 524-530
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
524 |
|
554 |
|
525 |
// Setup listener for itemtype select2 |
555 |
// Setup listener for itemtype select2 |
526 |
$("#booking_itemtype").on("select2:select", function (e) { |
556 |
$("#booking_itemtype").on("select2:select", function (e) { |
527 |
effective_itemtype = e.params.data.id |
557 |
booking_itemtype_id = e.params.data.id |
528 |
? e.params.data.id |
558 |
? e.params.data.id |
529 |
: null; |
559 |
: null; |
530 |
|
560 |
|
Lines 533-539
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
533 |
let option = $(this); |
563 |
let option = $(this); |
534 |
if (option.val() != 0) { |
564 |
if (option.val() != 0) { |
535 |
let item_itemtype = option.data("itemtype"); |
565 |
let item_itemtype = option.data("itemtype"); |
536 |
if (item_itemtype == effective_itemtype) { |
566 |
if (item_itemtype == booking_itemtype_id) { |
537 |
if ( |
567 |
if ( |
538 |
option.data("available") && |
568 |
option.data("available") && |
539 |
option.data("pickup") |
569 |
option.data("pickup") |
Lines 546-551
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
546 |
} |
576 |
} |
547 |
}); |
577 |
}); |
548 |
$("#booking_item_id").trigger("change.select2"); |
578 |
$("#booking_item_id").trigger("change.select2"); |
|
|
579 |
|
580 |
// update buffer days |
581 |
setBufferDays(); |
549 |
}); |
582 |
}); |
550 |
|
583 |
|
551 |
// Setup listener for item select2 |
584 |
// Setup listener for item select2 |
Lines 582-587
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
582 |
// handle itemtype picker |
615 |
// handle itemtype picker |
583 |
if (booking_item_id != 0) { |
616 |
if (booking_item_id != 0) { |
584 |
let itemtype = e.params.data.element.dataset.itemtype; |
617 |
let itemtype = e.params.data.element.dataset.itemtype; |
|
|
618 |
booking_itemtype_id = itemtype; |
585 |
|
619 |
|
586 |
$("#booking_itemtype").val(itemtype); |
620 |
$("#booking_itemtype").val(itemtype); |
587 |
$("#booking_itemtype").trigger("change.select2"); |
621 |
$("#booking_itemtype").trigger("change.select2"); |
Lines 590-595
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
590 |
$("#booking_itemtype").prop("disabled", false); |
624 |
$("#booking_itemtype").prop("disabled", false); |
591 |
} |
625 |
} |
592 |
|
626 |
|
|
|
627 |
// update buffer days |
628 |
setBufferDays(); |
629 |
|
593 |
// redraw pariodPicker taking selected item into account |
630 |
// redraw pariodPicker taking selected item into account |
594 |
periodPicker.redraw(); |
631 |
periodPicker.redraw(); |
595 |
}); |
632 |
}); |
Lines 760-767
$("#placeBookingModal").on("show.bs.modal", function (e) {
Link Here
|
760 |
} |
797 |
} |
761 |
|
798 |
|
762 |
// Add hints for days before the start range and after the end range |
799 |
// Add hints for days before the start range and after the end range |
763 |
const leadDays = 2; |
|
|
764 |
const trailDays = 3; |
765 |
periodPicker.calendarContainer.addEventListener( |
800 |
periodPicker.calendarContainer.addEventListener( |
766 |
"mouseover", |
801 |
"mouseover", |
767 |
function (event) { |
802 |
function (event) { |
Lines 1089-1094
$("#placeBookingModal").on("hidden.bs.modal", function (e) {
Link Here
|
1089 |
// Reset itemtype select |
1124 |
// Reset itemtype select |
1090 |
$("#booking_itemtype").val(0).trigger("change"); |
1125 |
$("#booking_itemtype").val(0).trigger("change"); |
1091 |
$("#booking_itemtype").prop("disabled", true); |
1126 |
$("#booking_itemtype").prop("disabled", true); |
|
|
1127 |
booking_itemtype_id = undefined; |
1092 |
|
1128 |
|
1093 |
// Reset pickup library select |
1129 |
// Reset pickup library select |
1094 |
$("#pickup_library_id").val(null).trigger("change"); |
1130 |
$("#pickup_library_id").val(null).trigger("change"); |
1095 |
- |
|
|