commit 09/02/2026

This commit is contained in:
2026-02-10 17:05:39 +07:00
parent e18976ace3
commit 546f2e27af
24 changed files with 1205 additions and 384 deletions

File diff suppressed because one or more lines are too long

View File

@@ -21,7 +21,7 @@ dtLog = null;
function fill_logtablebody(vv) {
dtLog.clear();
if (!Array.isArray(vv) || vv.length === 0) {
$('#btnExport').prop('disabled', true);
//$('#btnExport').prop('disabled', true);
return;
}
dtLog.rows.add(vv);
@@ -29,7 +29,7 @@ function fill_logtablebody(vv) {
$('#tablesize').text("Table Size: " + vv.length);
$('#btnExport').prop('disabled', false);
//$('#btnExport').prop('disabled', false);
}
/**
@@ -43,8 +43,10 @@ function reloadLogs(APIURL = "Log/", date, filter) {
date: date,
filter: filter
})
console.log("Loading logs with params: " + params.toString());
window.logdata = [];
fetchAPI(APIURL + "List?" + params.toString(), "GET", {}, null, (okdata) => {
console.log("Logs loaded: " + okdata.length);
if (Array.isArray(okdata)) {
window.logdata.push(...okdata);
fill_logtablebody(window.logdata);
@@ -54,16 +56,33 @@ function reloadLogs(APIURL = "Log/", date, filter) {
});
}
datepicker = null;
$btnGet = null;
$(document).ready(function () {
console.log("log.js ready");
let selectedlogdate = "";
let logfilter = "";
let APIURL = "Log/";
$btnGet = $('#btnGet');
datepicker = new Litepicker({
element: document.getElementById('logdate'),
format: 'DD/MM/YYYY',
lang: 'en-US',
autoApply: true,
singleMode: true,
startDate: new Date(),
onSelect: (date) => {
selectedlogdate = date.format('DD/MM/YYYY');
console.log("Selected date: " + selectedlogdate);
}
})
if (dtLog === null) {
dtLog = new DataTable('#logtable', {
dom: 'Bfrtip',
data: [],
pageLength: 25,
columns: [
@@ -72,36 +91,42 @@ $(document).ready(function () {
{ title: "Time", data: "timenya" },
{ title: "Machine", data: "machine" },
{ title: "Description", data: "description" }
]
],
buttons: ['print', 'pdf', 'excel']
});
}
if (!$('#logdate').val()) {
const today = new Date();
const dd = String(today.getDate()).padStart(2, '0');
const mm = String(today.getMonth() + 1).padStart(2, '0');
const yyyy = today.getFullYear();
$('#logdate').val(`${yyyy}-${mm}-${dd}`);
selectedlogdate = `${dd}-${mm}-${yyyy}`;
reloadLogs(APIURL, selectedlogdate, logfilter);
}
$('#logdate').off('change').on('change', function () {
const selected = $(this).val();
if (selected) {
const [year, month, day] = selected.split('-');
selectedlogdate = `${day}-${month}-${year}`;
reloadLogs(APIURL, selectedlogdate, logfilter);
// findalldate is checkbox, if checked will disable datepicker
$('#findalldate').off('change').on('change', function () {
if ($(this).is(':checked')) {
datepicker.disabled = true;
selectedlogdate = "alldate";
console.log("Find all date checked, omitting date filter");
} else {
datepicker.disabled = false;
const date = datepicker.getDate();
selectedlogdate = date.format('DD/MM/YYYY');
console.log("Find all date unchecked, selected date: " + selectedlogdate);
}
});
$('#searchfilter').off('input').on('input', function () {
logfilter = $(this).val();
//reloadLogs(APIURL, selectedlogdate, logfilter);
});
$btnGet.click(function () {
let checked = $('#findalldate').is(':checked');
if (checked && logfilter.trim() === "") {
alert("Please enter a filter when 'Find All Date' is checked to avoid large data load.");
return;
}
//$(this).data('selectedlogdate', selectedlogdate);
//$(this).data('logfilter', logfilter);
reloadLogs(APIURL, selectedlogdate, logfilter);
});
$('#btnExport').off('click').on('click', function () {
DoExport(APIURL, "log.xlsx", { date: selectedlogdate, filter: logfilter });
});
selectedlogdate = datepicker.getDate().format('DD/MM/YYYY');
console.log("Initial selected date: " + selectedlogdate);
$btnGet.trigger('click'); // load logs on page load
});

View File

@@ -22,6 +22,15 @@ window.schedulebankdata = [];
window.selectedschedulerow = null;
dtScheduleBank = null;
dtTodaySchedule = null;
function fill_todayscheduletablebody(vv) {
dtTodaySchedule.clear();
if (!Array.isArray(vv) || vv.length === 0) return;
dtTodaySchedule.rows.add(vv);
dtTodaySchedule.draw();
}
/**
* Fill schedulebank table body with values
@@ -117,7 +126,19 @@ function reloadTimerBank(APIURL = "ScheduleBank/") {
});
}
function reloadTodaySchedule(APIURL = "ScheduleBank/") {
fetchAPI(APIURL + "TodaySchedule", "GET", {}, null, (okdata) => {
if (Array.isArray(okdata)) {
console.log("Today's Schedule: ", okdata);
fill_todayscheduletablebody(okdata);
}
}, (errdata) => {
alert("Error loading today's schedule : " + errdata.message);
});
}
dayViewMode = 'all'; // all, everyday, monday, tuesday, wednesday, thursday, friday, saturday, sunday
scheduledate = null; // Litepicker instance for schedule date selection
$(document).ready(function () {
console.log("schedulebank.js loaded successfully");
@@ -169,6 +190,26 @@ $(document).ready(function () {
});
}
if (dtTodaySchedule === null) {
dtTodaySchedule = new DataTable('#todaytable', {
dom: 'Bfrtip',
data: [],
pageLength: 25,
columns: [
{ title: "No", data: "index" },
{ title: "Description", data: "description" },
{ title: "Day", data: "day" },
{ title: "Time", data: "time" },
{ title: "Message", data: "soundpath" },
{ title: "Repeat", data: "repeat" },
{ title: "Enable", data: "enable" },
{ title: "Broadcast Zones", data: "broadcastZones" },
{ title: "Language", data: "language" }
],
buttons: ['print', 'pdf']
});
}
$.fn.dataTable.ext.search.push(function (settings, data, dataIndex, rowData) {
if (settings.nTable.id !== 'schedulebanktable') return true;
switch (dayViewMode) {
@@ -223,16 +264,30 @@ $(document).ready(function () {
let $weeklyselect = $schedulemodal.find('#weeklyselect');
// radio button for specific date
let $schedulespecialdate = $schedulemodal.find('#schedulespecialdate');
scheduledate = new Litepicker({
element: document.getElementById('scheduledate'),
format: 'DD/MM/YYYY',
lang: 'en-US',
autoApply: true,
singleMode: true,
startDate: new Date(),
onSelect: (date) => {
console.log("Selected special date: " + date.format('DD/MM/YYYY'));
}
})
// date input
let $scheduledate = $schedulemodal.find('#scheduledate');
//let $scheduledate = $schedulemodal.find('#scheduledate');
// select2 for language
let $languageselect = $schedulemodal.find('#languageselect');
$schedulespecialdate.off('change').on('change', function () {
if ($(this).is(':checked')) {
$scheduledate.prop('disabled', false);
//$scheduledate.prop('disabled', false);
scheduledate.disabled = false
} else {
$scheduledate.prop('disabled', true);
//$scheduledate.prop('disabled', true);
scheduledate.disabled = true
}
});
@@ -261,7 +316,8 @@ $(document).ready(function () {
dropdownParent: $('#schedulemodal')
});
$scheduledate.prop('disabled', true).val('');
//$scheduledate.prop('disabled', true).val('');
scheduledate.disabled = true;
$schedulezones.empty().select2({
data: window.BroadcastZoneList.map(zone => ({ id: zone.description, text: zone.description })),
placeholder: 'Select broadcast zones',
@@ -284,24 +340,28 @@ $(document).ready(function () {
$scheduleeveryday.off('change').on('change', function () {
if ($(this).is(':checked')) {
$weeklyselect.prop('disabled', true);
$scheduledate.prop('disabled', true);
//$scheduledate.prop('disabled', true);
scheduledate.disabled = true;
}
});
$scheduleweekly.off('change').on('change', function () {
if ($(this).is(':checked')) {
$weeklyselect.prop('disabled', false);
$scheduledate.prop('disabled', true);
//$scheduledate.prop('disabled', true);
scheduledate.disabled = true;
}
});
$schedulespecialdate.off('change').on('change', function () {
if ($(this).is(':checked')) {
$weeklyselect.prop('disabled', true);
$scheduledate.prop('disabled', false);
//$scheduledate.prop('disabled', false);
scheduledate.disabled = false;
}
});
}
reloadTimerBank(APIURL);
reloadTodaySchedule(APIURL);
reloadBroadcastZones();
getLanguages();
getScheduledDays();
@@ -309,6 +369,7 @@ $(document).ready(function () {
$btnClear.click(() => {
DoClear(APIURL, "Timerbank", (okdata) => {
reloadTimerBank(APIURL);
reloadTodaySchedule(APIURL);
alert("Success clear schedulebank : " + okdata.message);
}, (errdata) => {
alert("Error clear schedulebank : " + errdata.message);
@@ -317,7 +378,9 @@ $(document).ready(function () {
});
$btnAdd.click(() => {
$schedulemodal.modal('show');
clearScheduleModal();
$scheduleeveryday.prop('checked', true).trigger('click');
$schedulemodal.off('click.scheduleclose').on('click.scheduleclose', '#scheduleclose', function () {
$schedulemodal.modal('hide');
@@ -333,7 +396,7 @@ $(document).ready(function () {
if ($scheduleeveryday.is(':checked')) {
_Day = "Everyday";
} else if ($schedulespecialdate.is(':checked')) {
_Day = Convert_input_date_to_string($scheduledate.val());
_Day = Convert_input_date_to_string(scheduledate.getDate().format('DD/MM/YYYY'));
} else if ($scheduleweekly.is(':checked')) {
_Day = $weeklyselect.val();
}
@@ -363,6 +426,7 @@ $(document).ready(function () {
fetchAPI(APIURL + "Add", "POST", {}, scheduleObj, (okdata) => {
reloadTimerBank(APIURL);
reloadTodaySchedule(APIURL);
alert("Success add schedule: " + okdata.message);
}, (errdata) => {
alert("Error add schedule: " + errdata.message);
@@ -393,6 +457,7 @@ $(document).ready(function () {
if (confirm(`Are you sure to delete schedule [${sr.index}] Description=${sr.description}?`)) {
fetchAPI(APIURL + "DeleteByIndex/" + sr.index, "DELETE", {}, null, (okdata) => {
reloadTimerBank(APIURL);
reloadTodaySchedule(APIURL);
alert("Success delete schedule : " + okdata.message);
}, (errdata) => {
alert("Error delete schedule : " + errdata.message);
@@ -438,7 +503,8 @@ $(document).ready(function () {
$weeklyselect.val(null).trigger('change');
$weeklyselect.prop('disabled', true);
$scheduledate.prop('disabled', true);
//$scheduledate.prop('disabled', true);
scheduledate.disabled = true;
break;
case 'Sunday':
case 'Monday':
@@ -452,7 +518,8 @@ $(document).ready(function () {
$weeklyselect.val(sr.Day).trigger('change');
$weeklyselect.prop('disabled', false);
$scheduledate.prop('disabled', true);
//$scheduledate.prop('disabled', true);
scheduledate.disabled = true;
break;
default:
console.log("Assuming special date for Day: ", sr.Day);
@@ -461,8 +528,10 @@ $(document).ready(function () {
if (/^\d{2}\/\d{2}\/\d{4}$/.test(sr.Day)) {
$schedulespecialdate.prop('checked', true);
$scheduledate.val(Convert_string_to_input_date(sr.Day));
$scheduledate.prop('disabled', false);
//$scheduledate.val(Convert_string_to_input_date(sr.Day));
// $scheduledate.prop('disabled', false);
scheduledate.setDate(dayjs(sr.Day,'DD/MM/YYYY'));
scheduledate.disabled = false;
$weeklyselect.val(null).trigger('change');
$weeklyselect.prop('disabled', true);
@@ -484,7 +553,8 @@ $(document).ready(function () {
Day = "Everyday";
} else if ($schedulespecialdate.is(':checked')) {
// convert date from yyyy-mm-dd to dd/mm/yyyy
Day = Convert_input_date_to_string($scheduledate.val());
//Day = Convert_input_date_to_string($scheduledate.val());
Day = scheduledate.getDate().format('DD/MM/YYYY');
} else if ($scheduleweekly.is(':checked')) {
Day = $weeklyselect.val();
}
@@ -516,6 +586,7 @@ $(document).ready(function () {
fetchAPI(APIURL + "UpdateByIndex/" + sr.index, "PATCH", {}, scheduleObj, (okdata) => {
alert("Success edit schedule: " + okdata.message);
reloadTimerBank(APIURL);
reloadTodaySchedule(APIURL);
}, (errdata) => {
alert("Error edit schedule: " + errdata.message);
});
@@ -537,6 +608,7 @@ $(document).ready(function () {
$btnImport.click(() => {
DoImport(APIURL, (okdata) => {
reloadTimerBank(APIURL);
reloadTodaySchedule(APIURL);
alert("Success import schedulebank from XLSX : " + okdata.message);
}, (errdata) => {
alert("Error importing schedulebank from XLSX : " + errdata.message);