Files
hotel/js/admin/slips.js
2026-08-25 13:17:00 +05:30

281 lines
10 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() {
$("#date_from").datepicker({
showOtherMonths: true,
dateFormat: 'yy-mm-dd',
onClose: function() {
let dateFrom = $('#date_from').val().trim();
let dateTo = $('#date_to').val().trim();
if (dateFrom >= dateTo) {
let objDateToMin = $.datepicker.parseDate('yy-mm-dd', dateFrom);
objDateToMin.setDate(objDateToMin.getDate());
$('#date_to').datepicker('option', 'minDate', objDateToMin);
}
},
});
$("#date_to").datepicker({
showOtherMonths: true,
dateFormat: 'yy-mm-dd',
beforeShow: function() {
let dateFrom = $('#date_from').val().trim();
if (typeof dateFrom != 'undefined' && dateFrom != '') {
let objDateToMin = $.datepicker.parseDate('yy-mm-dd', dateFrom);
objDateToMin.setDate(objDateToMin.getDate());
$('#date_to').datepicker('option', 'minDate', objDateToMin);
}
},
});
$('.change_status').on('click', function (e) {
e.preventDefault();
var id_order_slip = $.trim($(this).closest('tr').find('td[data-key="id_order_slip"]').text());
processupdate(id_order_slip, $(this).attr('href'))
return false;
});
function processupdate(id_order_slip, link)
{
confirmDelete(id_order_slip).then((toUpdate) => {
if (toUpdate) {
window.location = link;
}
});
}
function confirmDelete(id_order_slip)
{
return new Promise((resolve) => {
$.ajax({
type: 'POST',
url: admin_order_slip_tab_link,
dataType: 'JSON',
cache: false,
data: {
ajax: true,
action: 'initSlipStatusModal',
id_order_slip: id_order_slip
},
success: function(result) {
if (result.success && result.modalHtml) {
$('#moduleConfirmUpdate').remove();
$('#footer').next('.bootstrap').append(result.modalHtml);
$('#moduleConfirmUpdate').modal('show');
$('#moduleConfirmUpdate .process_update').click(() => {
resolve(true);
});
$('#moduleConfirmUpdate .btn-close').click(() => {
resolve(false);
});
} else {
resolve(true);
}
},
complete: function() {
$(".loading_overlay").hide();
}
});
});
}
var allBookings = [];
var currencySign = '';
if (typeof $.fn.chosen !== 'undefined') {
$('select[name="id_order"]').chosen('destroy').chosen({
width: '100%',
search_contains: true
});
$('select[name="id_room_type"]').chosen({
width: '100%',
search_contains: true
});
$('select[name="id_booking_detail"]').chosen({
width: '100%',
search_contains: true
});
}
$('select[name="id_order"]').on('change', function () {
var idOrder = $(this).val();
var $roomTypeSelect = $('select[name="id_room_type"]');
var $bookingSelect = $('select[name="id_booking_detail"]');
allBookings = [];
$roomTypeSelect.empty().trigger('chosen:updated');
$bookingSelect.empty().trigger('chosen:updated');
if (!idOrder) {
$('#order-info').hide();
$('#order-view-link').hide();
$('#booking-total-slip-amount').text('-');
$('#booking-slip-ids').html('');
$('#booking-slip-ids-wrapper').hide();
$('#order-total-amount').text('-');
$('#order-total-amount-wrapper').hide();
$('#order-total-paid').text('-');
$('#order-total-paid-wrapper').hide();
$('#order-total-return').text('-');
$('#order-total-return-wrapper').hide();
return;
}
var selectedLabel = $('select[name="id_order"] option:selected').text();
$('#order-info').text(selectedLabel).show();
$('#order-view-link')
.attr('href', admin_order_view_link + '&id_order=' + idOrder + '&vieworder')
.show();
$.ajax({
url: admin_order_slip_tab_link,
type: 'POST',
dataType: 'json',
data: {
ajax: 1,
action: 'GetBookingDetails',
id_order: idOrder
},
success: function (response) {
allBookings = response.bookings || [];
currencySign = response.currency.sign;
var totalSlipAmount = parseFloat(response.total_slip_amount || 0);
$('#booking-total-slip-amount').text(currencySign + ' ' + totalSlipAmount.toFixed(2));
var orderTotalAmount = parseFloat(response.order_total_amount || 0);
$('#order-total-amount').text(currencySign + ' ' + orderTotalAmount.toFixed(2));
$('#order-total-amount-wrapper').show();
var orderTotalPaid = parseFloat(response.order_total_paid || 0);
$('#order-total-paid').text(currencySign + ' ' + orderTotalPaid.toFixed(2));
$('#order-total-paid-wrapper').show();
var orderRefundedAmount = parseFloat(response.order_refunded_amount || 0);
$('#order-total-return').text(currencySign + ' ' + orderRefundedAmount.toFixed(2));
$('#order-total-return-wrapper').show();
var slipIds = response.slip_ids || [];
if (slipIds.length) {
var links = slipIds.map(function (id) {
var href = admin_order_slip_tab_link
+ '&order_slipFilter_id_order_slip=' + id
+ '&submitFilterorder_slip=1';
return '<a href="' + href + '">#' + id + '</a>';
});
$('#booking-slip-ids').html(links.join(', '));
$('#booking-slip-ids-wrapper').show();
} else {
$('#booking-slip-ids').html('');
$('#booking-slip-ids-wrapper').hide();
}
$('#credit_slip_amount')
.closest('.input-group')
.find('.input-group-addon, .input-group-text')
.text(currencySign);
var addedRoomTypes = {};
$.each(allBookings, function (_, booking) {
if (!addedRoomTypes[booking.id_product]) {
addedRoomTypes[booking.id_product] = true;
$roomTypeSelect.append($('<option>', {
value: booking.id_product,
text: booking.room_type_name
}));
}
});
$roomTypeSelect.trigger('chosen:updated');
if (restoreRoomTypeId > 0) {
$roomTypeSelect.val(restoreRoomTypeId).trigger('chosen:updated');
restoreRoomTypeId = 0;
}
$roomTypeSelect.trigger('change');
},
error: function (_, status, error) {
console.error('[CreditSlip] AJAX error:', status, error);
}
});
});
$('select[name="id_room_type"]').on('change', function () {
var idProduct = $(this).val();
var $bookingSelect = $('select[name="id_booking_detail"]');
$bookingSelect.empty();
if (!idProduct) {
$bookingSelect.trigger('chosen:updated');
return;
}
var filtered = $.grep(allBookings, function (booking) {
return String(booking.id_product) === String(idProduct);
});
$.each(filtered, function (_, booking) {
$bookingSelect.append($('<option>', {
value: booking.id,
text: booking.room_num + ' | ' + booking.date_from.substring(0, 10) + ' - ' + booking.date_to.substring(0, 10)
}));
});
$bookingSelect.trigger('chosen:updated');
if (restoreBookingDetailId > 0) {
$bookingSelect.val(restoreBookingDetailId).trigger('chosen:updated');
restoreBookingDetailId = 0;
}
$bookingSelect.trigger('change');
});
$('select[name="id_booking_detail"]').on('change', function () {
var idBooking = $(this).val();
var booking = $.grep(allBookings, function (b) {
return String(b.id) === String(idBooking);
})[0];
if (booking) {
var roomCost = parseFloat(booking.total_price_tax_incl);
var serviceCost = parseFloat(booking.extra_service_total_price_tax_incl || 0);
var total = roomCost + serviceCost;
$('#booking-room-amount').text(currencySign + ' ' + roomCost.toFixed(2));
$('#booking-service-amount').text(currencySign + ' ' + serviceCost.toFixed(2));
$('#booking-amount').text(currencySign + ' ' + total.toFixed(2));
} else {
$('#booking-room-amount').text('-');
$('#booking-service-amount').text('-');
$('#booking-amount').text('-');
}
});
if ($('select[name="id_order"]').val()) {
$('select[name="id_order"]').trigger('change');
}
});