Files
hotel/js/admin/reallocation.js
2026-01-21 17:17:38 +05:30

263 lines
12 KiB
JavaScript

/**
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License version 3.0
* that is bundled with this package in the file LICENSE.md
* It is also available through the world-wide-web at this URL:
* https://opensource.org/license/osl-3-0-php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to support@qloapps.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade this module to a newer
* versions in the future. If you wish to customize this module for your needs
* please refer to https://store.webkul.com/customisation-guidelines for more information.
*
* @author Webkul IN
* @copyright Since 2010 Webkul
* @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0
*/
$(document).ready(function() {
// For processing room reallocation and swapping
$(document).on('click', '.room_reallocate_swap', function(e) {
e.preventDefault();
RoomReallocationModal.show($(this));
});
$(document).on('hidden.bs.modal', '#room-reallocation-modal', function(){
location.reload();
});
/*For reallocating rooms in the modal*/
$(document).on('click', '#realloc_allocated_rooms', function(e){
$(".loading_overlay").show();
if (RoomReallocationModal.reallocate() == false) {
$(".loading_overlay").hide();
return false;
}
});
/*For swaping rooms in the modal*/
$(document).on('click', '#swap_allocated_rooms', function(){
$(".loading_overlay").show();
if (RoomReallocationModal.swap() == false) {
$(".loading_overlay").hide();
return false;
}
});
// change room type for reallocation
$(document).on("change", "#realloc_avail_room_type", function(e) {
e.preventDefault();
RoomReallocationModal.changeRoomType($(this));
});
});
// Modal object to handle room reallocation processes
const RoomReallocationModal = {
show: function(roomObj) {
var id_order = roomObj.data('id_order');
$(".loading_overlay").show();
$.ajax({
type: 'POST',
headers: {
"cache-control": "no-cache"
},
url: rooms_reallocation_url,
dataType: 'JSON',
cache: false,
data: 'ajax=true&id_order='+id_order+'&action=InitRoomReallocationModal',
success: function(result) {
if (result.hasError == 0 && result.modalHtml) {
$('.bootstrap').append(result.modalHtml);
$(".modal_id_htl_booking").val(roomObj.data('id_htl_booking'));
$("input.modal_curr_room_num").val(roomObj.data('room_num'));
$("span.modal_curr_room_num").text(roomObj.data('room_num') + ', ' + roomObj.data('room_type_name'));
$(".cust_name").text(roomObj.data('cust_name'));
$(".cust_email").text(roomObj.data('cust_email'));
$(".modal_curr_allotent_type").text(roomObj.data('allotment_type_label'));
if ((roomObj.data('comment') == '') || (roomObj.data('comment') == null)) {
$(".allotment_comment_block").hide();
} else {
$(".modal_curr_allotment_comment").text(roomObj.data('comment'));
}
// reset price difference fields
$("#reallocation_price_diff").val(0);
$("#reallocation_price_diff_block").hide();
$(".realloc_roomtype_change_message").hide();
// For Rooms Swapping
var json_arr_rm_swp = roomObj.data('avail_rm_swap');
if (json_arr_rm_swp != false && json_arr_rm_swp.length != 0) {
html = '<select class="form-control" name="swap_avail_rooms" id="swap_avail_rooms">';
$.each(json_arr_rm_swp, function(key,val) {
html += '<option class="swp_rm_opts" value="'+val.id_hotel_booking+'" >'+val.room_num+'</option>';
});
html += '</select>';
$(".swap_avail_rooms_container").empty().append(html);
} else {
$(".swap_avail_rooms_container").empty().text(no_swap_rm_avail_txt).addClass('text-danger');
$("#swap_room_tab .modal-footer").hide();
$("#swap_room_tab .room_remark").closest('.form-group').hide();
}
// For Rooms Reallocation
var json_arr_realloc_room_types = roomObj.data('avail_realloc_room_types');
if (json_arr_realloc_room_types != false && json_arr_realloc_room_types.length != 0) {
var idCurrentRoomType = roomObj.data('id_room_type');
var roomsTypesHtml = '<select data-id_htl_booking="' + roomObj.data('id_htl_booking') + '" class="form-control" name="realloc_avail_room_type" id="realloc_avail_room_type">';
$.each(json_arr_realloc_room_types, function(key, room_type) {
roomsTypesHtml += "<option rooms_available='" + JSON.stringify(room_type.rooms) + "' class='realloc_rm_type_opts' value='" + room_type.id_product + "'";
if (idCurrentRoomType == room_type.id_product) {
roomsTypesHtml += ' selected="selected"';
}
roomsTypesHtml += '>' + room_type.room_type_name + '</option>';
});
roomsTypesHtml += '</select>';
$(".realloc_avail_room_type_container").empty().append(roomsTypesHtml);
// if rooms are available for reallocation for the current room type then only select that room type
if (typeof json_arr_realloc_room_types[idCurrentRoomType] !== 'undefined') {
$('#realloc_avail_room_type option[value='+idCurrentRoomType+']').prop('selected', true);
setRoomsForReallocation(json_arr_realloc_room_types[idCurrentRoomType]['rooms']);
// if rooms are not available for reallocation for the current room type
// then select first room type in available room types and also price difference data
} else if (idFirstRoomType = Object.keys(json_arr_realloc_room_types)[0]) {
$('#realloc_avail_room_type option[value='+idFirstRoomType+']').prop('selected', true);
RoomReallocationModal.changeRoomType($("#realloc_avail_room_type"));
}
} else {
$(".realloc_avail_rooms_container").empty().text(no_realloc_rm_avail_txt).addClass('text-danger');
$(".realloc_avail_room_type_container").empty().text(no_realloc_rm_type_avail_txt).addClass('text-danger');
$("#reallocate_room_tab .modal-footer").hide();
}
$('#room-reallocation-modal').modal('show');
} else {
showErrorMessage(txtSomeErr);
}
},
complete: function() {
$(".loading_overlay").hide();
}
});
},
swap: function() {
$(".error_text").text('');
var room_to_swap = $('#swap_avail_rooms').val();
if (typeof room_to_swap == 'undefined' || room_to_swap == 0) {
$("#swap_sel_rm_err_p").text(slct_rm_err);
return false;
}
return true;
},
reallocate: function(reallocateBtnObj) {
$(".error_text").text('');
var room_to_reallocate = $('#realloc_avail_rooms').val();
var room_type_to_reallocate = $('#realloc_avail_room_type').val();
if (typeof room_type_to_reallocate == 'undefined' || room_type_to_reallocate == 0) {
$("#realloc_sel_rm_type_err_p").text(slct_rm_type_err);
return false;
}
if (typeof room_to_reallocate == 'undefined' || room_to_reallocate == 0) {
$("#realloc_sel_rm_err_p").text(slct_rm_err);
return false;
}
return true;
},
changeRoomType: function(roomTypeObj) {
$(".loading_overlay").show();
var idHotelBooking = roomTypeObj.data('id_htl_booking');
$("#reallocation_price_diff").val(0);
$("#reallocation_price_diff_block").hide();
if (parseInt(idHotelBooking) > 0) {
var optionSelected = roomTypeObj.find('option:selected');
var roomsAvailable = JSON.parse(optionSelected.attr('rooms_available'));
// set the rooms of the selceted room type
setRoomsForReallocation(roomsAvailable);
// send an ajax for fetching if price has changes in the new room type seleceted
$.ajax({
type: 'POST',
headers: {
"cache-control": "no-cache"
},
url: rooms_reallocation_url,
dataType: 'JSON',
cache: false,
data: {
id_htl_booking: idHotelBooking,
id_new_room_type: roomTypeObj.val(),
action: 'changeRoomTypeToReallocate',
ajax: true
},
success: function(result) {
if (result.success == 1) {
// has room type changed for reallocation
if (result.has_room_type_change == 1) {
$(".realloc_roomtype_change_message").show();
// has room type price changed for reallocation
if (result.has_price_changes == 1) {
$("#reallocation_price_diff").val(result.price_diff);
$("#reallocation_price_diff_block").show();
}
} else {
$(".realloc_roomtype_change_message").hide();
}
$('#room_type_change_info').empty();
if (result.is_changes_present == 1) {
}
} else if (typeof(result.error) != 'undefinded' && result.error) {
showErrorMessage(result.error);
} else {
showErrorMessage(txtSomeErr);
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
showErrorMessage(txtSomeErr);
},
complete: function() {
$(".loading_overlay").hide();
}
});
} else {
$(".loading_overlay").hide();
showErrorMessage(txtSomeErr);
return false;
}
},
close: function() {
$('#room-reallocation-modal').modal('hide');
},
submit: function() {
}
};
function setRoomsForReallocation(roomsAvailable)
{
if (typeof(roomsAvailable) != 'undefined' && roomsAvailable.length) {
var roomsHtml = '<select class="form-control" name="realloc_avail_rooms" id="realloc_avail_rooms">';
roomsHtml += '<option class="realloc_rm_opts" value="0">---- ' + select_room_txt + ' ----</option>';
$.each(roomsAvailable, function(key, roomInfo) {
roomsHtml += '<option class="realloc_rm_opts" value="' + roomInfo.id_room + '">' + roomInfo.room_num + '</option>';
});
roomsHtml += '</select>';
$(".realloc_avail_rooms_container").empty().append(roomsHtml);
} else {
$(".realloc_avail_rooms_container").empty().text(no_realloc_rm_avail_txt);
}
}