HAMAssetReservationUtils
Thu Nov 16 2023 11:29:32 GMT+0000 (Coordinated Universal Time)
Saved by
@mathiasVDD
#javascript
var HAMAssetReservationUtils = Class.create();
HAMAssetReservationUtils.prototype = {
initialize: function () { },
isLoanerAssetAvailableBetweenDates: function (model, location, fromStartDate, toReturnDate, leadTime) { // eslint-disable-line
var assetsAvailable = new sn_hamp.HampLoanerUtils().getFunctioningLoanerAssetsCount(location, model);
if (assetsAvailable === 0) { return false; }
var startDate = String(fromStartDate);
var returnDate = String(toReturnDate);
var leadTimeInDays = parseInt(leadTime, 10);
var preparationStartDate = HampLoanerUtils.getPreparationStartDate(startDate, leadTimeInDays);
var overlappingOrdersStartDates = [preparationStartDate];
var overlappingOrdersEndDates = [returnDate];
var overlappingOrdersGq = new global.GlideQuery('sn_hamp_loaner_asset_order')
.where('model', model)
.where('location', location)
.where('is_waitlisted', false)
.where('stage', '!=', HampLoanerUtils.STAGE_COMPLETED)
.where('stage', '!=', HampLoanerUtils.STAGE_CANCELLED);
overlappingOrdersGq = HampLoanerUtils.addLoanerOrdersOverlapQuery(
overlappingOrdersGq,
startDate,
returnDate,
leadTimeInDays,
true /* isGlideQuery */
);
overlappingOrdersGq.select('preparation_start_date', 'return_date')
.forEach(function (loanerOrder) {
overlappingOrdersStartDates.push(loanerOrder.preparation_start_date);
overlappingOrdersEndDates.push(loanerOrder.return_date);
});
overlappingOrdersStartDates.sort();
overlappingOrdersEndDates.sort();
var totalRequests = overlappingOrdersStartDates.length;
var assetsReturned = 0;
var assetsDeparted = 0;
var assetsNeeded = 0;
while ((assetsDeparted < totalRequests) && (assetsReturned < totalRequests)) {
if (overlappingOrdersStartDates[assetsDeparted] <= overlappingOrdersEndDates[assetsReturned]) {
assetsNeeded += 1;
assetsDeparted += 1;
} else if (overlappingOrdersStartDates[assetsDeparted] > overlappingOrdersEndDates[assetsReturned]) {
assetsNeeded -= 1;
assetsReturned += 1;
}
if (assetsNeeded > assetsAvailable) {
return false;
}
}
return true;
},
type: 'HAMAssetReservationUtils',
};
content_copyCOPY
Comments