@@ -, +, @@
whitespace
---
.../en/modules/catalogue/labeledMARCdetail.tt | 2 +-
.../prog/js/place_booking_modal.js | 76 +++++++++----------
2 files changed, 39 insertions(+), 39 deletions(-)
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/labeledMARCdetail.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/labeledMARCdetail.tt
@@ -46,7 +46,7 @@
[% IF ( unknownbiblionumber ) %]
The record you requested does not exist ([% biblionumber | html %]).
[% ELSE %]
-
+
[% INCLUDE 'cat-toolbar.inc' %]
--- a/koha-tmpl/intranet-tmpl/prog/js/place_booking_modal.js
+++ a/koha-tmpl/intranet-tmpl/prog/js/place_booking_modal.js
@@ -121,7 +121,7 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
dataType: 'json',
type: 'GET'
});
-
+
// Fetch list of existing bookings
let bookingsFetch = $.ajax({
url: '/api/v1/bookings?biblio_id=' + biblionumber,
@@ -135,7 +135,7 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
dataType: 'json',
type: 'GET'
});
-
+
// Update item select2 and period flatpickr
$.when(itemsFetch, bookingsFetch, checkoutsFetch).then(
function(itemsFetch,bookingsFetch, checkoutsFetch){
@@ -157,7 +157,7 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
};
bookings.unshift(booking);
}
-
+
// Item select2
$("#booking_item_id").select2({
dropdownParent: $(".modal-content", "#placeBookingModal"),
@@ -166,13 +166,13 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
minimumResultsForSearch: 20,
placeholder: __("Select item")
});
-
+
// Update flatpickr mode
periodPicker.set('mode', 'range');
-
+
// Total bookable items
let bookable = 0;
-
+
for (item of bookable_items) {
bookable++;
// Populate item select (NOTE: Do we still need this check for pre-existing select option here?)
@@ -183,29 +183,29 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
$('#booking_item_id').append(newOption);
}
}
-
+
// Set disable function for periodPicker
let disableExists = periodPicker.config.disable.filter(f => f.name === 'dateDisable');
if ( disableExists.length === 0 ) {
periodPicker.config.disable.push(function dateDisable(date){
-
+
// set local copy of selectedDates
let selectedDates = periodPicker.selectedDates;
-
+
// set booked counter
let booked = 0;
-
+
// reset the unavailable items array
let unavailable_items = [];
-
+
// reset the biblio level bookings array
let biblio_bookings = [];
-
+
// disable dates before selected date
if (!selectedDates[1] && (selectedDates[0] && selectedDates[0] > date)) {
return true;
}
-
+
// iterate existing bookings
for (booking of bookings) {
@@ -216,10 +216,10 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
let start_date = flatpickr.parseDate(booking.start_date);
let end_date = flatpickr.parseDate(booking.end_date);
-
+
// patron has selected a start date (end date checks)
if (selectedDates[0]) {
-
+
// new booking start date is between existing booking start and end dates
if (selectedDates[0] >= start_date && selectedDates[0] <= end_date) {
if (booking.item_id) {
@@ -232,7 +232,7 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
}
}
}
-
+
// new booking end date would be between existing booking start and end dates
else if (date >= start_date && date <= end_date) {
if (booking.item_id) {
@@ -245,7 +245,7 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
}
}
}
-
+
// new booking would span existing booking
else if (selectedDates[0] <= start_date && date >= end_date) {
if (booking.item_id) {
@@ -258,12 +258,12 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
}
}
}
-
+
// new booking would not conflict
else {
continue;
}
-
+
// check that there are available items
// available = all bookable items - booked items - booked biblios
let total_available = bookable_items.length - unavailable_items.length - biblio_bookings.length;
@@ -271,26 +271,26 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
return true;
}
}
-
+
// patron has not yet selected a start date (start date checks)
else if (date <= end_date && date >= start_date) {
-
+
// same item, disable date
if (booking.item_id && booking.item_id == booking_item_id) {
return true;
}
-
+
// count all clashes, both item and biblio level
booked++;
if (booked == bookable) {
return true;
}
-
+
// FIXME: The above is not intelligent enough to spot
// cases where an item must be used for a biblio level booking
// due to all other items being booking within the biblio level
// booking period... we end up with a clash
- // To reproduce:
+ // To reproduce:
// * One bib with two bookable items.
// * Add item level booking
// * Add biblio level booking that extends one day beyond the item level booking
@@ -301,15 +301,15 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
}
});
};
-
+
// Setup listener for item select2
$('#booking_item_id').on('select2:select', function(e) {
booking_item_id = e.params.data.id ? e.params.data.id : null;
-
+
// redraw pariodPicker taking selected item into account
periodPicker.redraw();
});
-
+
// Set onChange for flatpickr
let changeExists = periodPicker.config.onChange.filter(f => f.name ==='periodChange');
if(changeExists.length === 0) {
@@ -321,7 +321,7 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
let picker_end = dayjs(selectedDates[1]).endOf('day');
$('#booking_start_date').val(picker_start.toISOString());
$('#booking_end_date').val(picker_end.toISOString());
-
+
// set available items in select2
let booked_items = bookings.filter(function(booking) {
let start_date = flatpickr.parseDate(booking.start_date);
@@ -360,18 +360,18 @@ $('#placeBookingModal').on('show.bs.modal', function(e) {
}
});
};
-
+
// Enable flatpickr now we have date function populated
periodPicker.redraw();
$("#period_fields :input").prop('disabled', false);
-
+
// Redraw select with new options and enable
$('#booking_item_id').trigger('change');
$("#booking_item_id").prop("disabled", false);
// Set the flag to indicate that data has been fetched
dataFetched = true;
-
+
// Set form values
setFormValues(patron_id,booking_item_id,start_date,end_date,periodPicker);
},
@@ -459,7 +459,7 @@ $("#placeBookingForm").on('submit', function(e) {
"patron_id": $('#booking_patron_id').find(':selected').val()
})
);
-
+
posting.done(function(data) {
// Update bookings store for subsequent bookings
bookings.push(data);
@@ -485,17 +485,17 @@ $("#placeBookingForm").on('submit', function(e) {
});
timeline.focus(data.booking_id);
}
-
+
// Update bookings counts
$('.bookings_count').html(parseInt($('.bookings_count').html(), 10)+1);
// Set feedback
- $('#transient_result').replaceWith('
'+_("Booking successfully placed")+'
');
+ $('#transient_result').replaceWith(''+_("Booking successfully placed")+'
');
// Close modal
$('#placeBookingModal').modal('hide');
});
-
+
posting.fail(function(data) {
$('#booking_result').replaceWith(''+_("Failure")+'
');
});
@@ -513,7 +513,7 @@ $("#placeBookingForm").on('submit', function(e) {
"patron_id": $('#booking_patron_id').find(':selected').val()
})
});
-
+
putting.done(function(data) {
update_success = 1;
@@ -544,12 +544,12 @@ $("#placeBookingForm").on('submit', function(e) {
}
// Set feedback
- $('#transient_result').replaceWith(''+_("Booking successfully updated")+'
');
+ $('#transient_result').replaceWith(''+_("Booking successfully updated")+'
');
// Close modal
$('#placeBookingModal').modal('hide');
});
-
+
putting.fail(function(data) {
$('#booking_result').replaceWith(''+__("Failure")+'
');
});
--