commit 11/09/2025

This commit is contained in:
2025-09-11 16:03:33 +07:00
parent 34fc71cfbc
commit b692e2c2c9
8 changed files with 767 additions and 211 deletions

View File

@@ -323,7 +323,7 @@ let ws = null;
function sendCommand(command, data) {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify({ command, data }));
}
}
}
/**
@@ -356,12 +356,12 @@ function fetchAPI(endpoint, method, headers = {}, body = null, cbOK, cbError) {
}
return response.json();
})
.then(data => {
.then(data => {
//console.log("fetchAPI: received data", data);
cbOK(data);
})
.catch(error => {
// console.error('There was a problem with the fetch operation:', error);
// console.error('There was a problem with the fetch operation:', error);
cbError(error);
});
}
@@ -379,7 +379,7 @@ function reloadSoundBank(APIURL) {
fill_soundbanktablebody(soundbankdata);
}
}, (errdata) => {
alert("Error loading soundbank: " + errdata.message);
alert("Error loading soundbank : " + errdata.message);
});
}
@@ -396,7 +396,7 @@ function reloadMessageBank(APIURL) {
fill_messagebanktablebody(messagebankdata);
}
}, (errdata) => {
alert("Error loading messagebank: " + errdata.message);
alert("Error loading messagebank : " + errdata.message);
});
}
@@ -413,7 +413,7 @@ function reloadLanguageBank(APIURL) {
fill_languagebanktablebody(languagebankdata);
}
}, (errdata) => {
alert("Error loading languagebank: " + errdata.message);
alert("Error loading languagebank : " + errdata.message);
});
}
@@ -425,12 +425,12 @@ function reloadTimerBank(APIURL) {
schedulebankdata = [];
fetchAPI(APIURL + "List", "GET", {}, null, (okdata) => {
if (Array.isArray(okdata)) {
schedulebankdata = okdata.data;
schedulebankdata = okdata;
selectedschedulerow = null;
fill_schedulebanktablebody(schedulebankdata);
}
}, (errdata) => {
alert("Error loading schedulebank: " + errdata.message);
alert("Error loading schedulebank : " + errdata.message);
});
}
@@ -447,9 +447,12 @@ function reloadLogs(APIURL, date, filter) {
})
fetchAPI(APIURL + "List?" + params.toString(), "GET", {}, null, (okdata) => {
//console.log("Logs data received", okdata);
fill_logtablebody(okdata);
if (Array.isArray(okdata)) {
logdata = okdata;
fill_logtablebody(okdata);
}
}, (errdata) => {
alert("Error loading logs: " + errdata.message);
alert("Error loading logs : " + errdata.message);
});
}
@@ -469,7 +472,7 @@ function regetSoundbankFiles(APIURL = "SoundBank/") {
select2results.results = soundbankfiles.map((item, index) => ({ id: index + 1, text: item }));
} else console.log("regetSoundbankFiles: okdata is not array");
}, (errdata) => {
alert("Error loading soundbank files: " + errdata.message);
alert("Error loading soundbank files : " + errdata.message);
});
}
@@ -485,7 +488,7 @@ function getVoiceTypes() {
//console.log("Loaded " + voiceTypes.length + " voice types : " + voiceTypes.join(", "));
} else console.log("getVoiceTypes: okdata is not array");
}, (errdata) => {
alert("Error loading voice types: " + errdata.message);
alert("Error loading voice types : " + errdata.message);
});
}
@@ -501,7 +504,7 @@ function getCategories() {
//console.log("Loaded " + categories.length + " categories : " + categories.join(", "));
} else console.log("getCategories: okdata is not array");
}, (errdata) => {
alert("Error loading categories: " + errdata.message);
alert("Error loading categories : " + errdata.message);
});
}
@@ -517,7 +520,7 @@ function getLanguages() {
//console.log("Loaded " + languages.length + " languages : " + languages.join(", ") );
} else console.log("getLanguages: okdata is not array");
}, (errdata) => {
alert("Error loading languages: " + errdata.message);
alert("Error loading languages : " + errdata.message);
});
}
@@ -533,7 +536,7 @@ function getScheduledDays() {
//console.log("Loaded " + scheduledays.length + " scheduled days : " + scheduledays.join(", ") );
} else console.log("getScheduledDays: okdata is not array");
}, (errdata) => {
alert("Error loading scheduled days: " + errdata.message);
alert("Error loading scheduled days : " + errdata.message);
});
}
@@ -729,7 +732,8 @@ $(document).ready(function () {
reloadSoundBank(APIURL);
$('#findsoundbank').on('input', function () {
let searchTerm = $(this).val().trim().toLowerCase();
if (searchTerm.length>0){
if (searchTerm.length > 0) {
selectedsoundrow = null;
let filtered = soundbankdata.filter(item => item.description.toLowerCase().includes(searchTerm) || item.tag.toLowerCase().includes(searchTerm) || item.path.toLowerCase().includes(searchTerm));
fill_soundbanktablebody(filtered);
} else {
@@ -739,14 +743,12 @@ $(document).ready(function () {
});
$btnClear.click(() => {
DoClear(APIURL, "Soundbank", (okdata) => {
alert("Success clear soundbank" + okdata.message);
soundbankdata = []
selectedsoundrow = null;
fill_soundbanktablebody(soundbankdata);
reloadSoundBank(APIURL);
alert("Success clear soundbank : " + okdata.message);
}, (errdata) => {
alert("Error clear soundbank: " + errdata.message);
alert("Error clear soundbank : " + errdata.message);
});
});
$btnAdd.click(() => {
$('.js-example-basic-single').select2({
@@ -779,12 +781,10 @@ $(document).ready(function () {
}
if (confirm(`Are you sure to delete soundbank [${sb.index}] Description=${sb.description} Tag=${sb.tag}?`)) {
fetchAPI(APIURL + "DeleteByIndex/" + sb.index, "DELETE", {}, null, (okdata) => {
alert("Success delete soundbank" + okdata.message);
soundbankdata = soundbankdata.filter(item => item.index !== sb.index);
selectedsoundrow = null;
fill_soundbanktablebody(soundbankdata);
reloadSoundBank(APIURL);
alert("Success delete soundbank : " + okdata.message);
}, (errdata) => {
alert("Error delete soundbank: " + errdata.message);
alert("Error delete soundbank : " + errdata.message);
});
}
}
@@ -813,17 +813,18 @@ $(document).ready(function () {
}
});
$btnExport.click(() => {
DoExport(APIURL, "soundbank.xlsx",{});
DoExport(APIURL, "soundbank.xlsx", {});
});
$btnImport.click(() => {
DoImport(APIURL, (okdata) => {
reloadSoundBank(APIURL);
alert("Success import soundbank : " + okdata.message);
}, (errdata) => {
alert("Error importing soundbank from XLSX: " + errdata.message);
alert("Error importing soundbank from XLSX : " + errdata.message);
});
});
} else {
console.error("Error loading soundbank content:", xhr.status, xhr.statusText);
console.error("Error loading soundbank content : ", xhr.status, xhr.statusText);
}
});
@@ -845,19 +846,30 @@ $(document).ready(function () {
$btnRemove.prop('disabled', true);
$btnEdit.prop('disabled', true);
let APIURL = "MessageBank/";
let $findmessage = $('#findmessage');
$findmessage.on('input', function () {
let searchTerm = $findmessage.val().toLowerCase();
if (searchTerm.length > 0) {
selectedmessagerow = null;
let filtered = messagebankdata.filter(item => item.description.toLowerCase().includes(searchTerm) || item.message_Detail.toLowerCase().includes(searchTerm) || item.message_TAGS.toLowerCase().includes(searchTerm));
fill_messagebanktablebody(filtered);
} else {
selectedmessagerow = null;
fill_messagebanktablebody(messagebankdata);
}
});
reloadMessageBank(APIURL);
$btnClear.click(() => {
DoClear(APIURL, "Messagebank", (okdata) => {
alert("Success clear messagebank" + okdata.message);
messagebankdata = []
selectedmessagerow = null;
fill_messagebanktablebody(messagebankdata);
reloadMessageBank(APIURL);
alert("Success clear messagebank : " + okdata.message);
}, (errdata) => {
alert("Error clear messagebank: " + errdata.message);
alert("Error clear messagebank : " + errdata.message);
});
});
$btnAdd.click(() => {
let $modal = $('#messagebankmodal');
@@ -892,12 +904,10 @@ $(document).ready(function () {
if (confirm(`Are you sure to delete messagebank [${mb.index}] Description=${mb.description}? ANN_ID=${mb.aNN_ID} Language=${mb.language} Voice_Type=${mb.voice_Type} `)) {
fetchAPI(APIURL + "DeleteByIndex/" + mb.index, "DELETE", {}, null, (okdata) => {
alert("Success delete messagebank" + okdata.message);
messagebankdata = messagebankdata.filter(item => item.index !== mb.index);
selectedmessagerow = null;
fill_messagebanktablebody(messagebankdata);
reloadMessageBank(APIURL);
alert("Success delete messagebank : " + okdata.message);
}, (errdata) => {
alert("Error delete messagebank: " + errdata.message);
alert("Error delete messagebank : " + errdata.message);
});
}
}
@@ -921,17 +931,18 @@ $(document).ready(function () {
}
});
$btnExport.click(() => {
DoExport(APIURL, "messagebank.xlsx",{});
DoExport(APIURL, "messagebank.xlsx", {});
});
$btnImport.click(() => {
DoImport(APIURL, (okdata) => {
reloadMessageBank(APIURL);
alert("Success import messagebank : " + okdata.message);
}, (errdata) => {
alert("Error importing messagebank from XLSX: " + errdata.message);
alert("Error importing messagebank from XLSX : " + errdata.message);
});
});
} else {
console.error("Error loading messagebank content:", xhr.status, xhr.statusText);
console.error("Error loading messagebank content : ", xhr.status, xhr.statusText);
}
});
@@ -953,33 +964,54 @@ $(document).ready(function () {
$btnRemove.prop('disabled', true);
$btnEdit.prop('disabled', true);
let APIURL = "LanguageLink/";
let $findlanguage = $('#findlanguage');
let $modal = $('#languagemodal');
let $langid = $modal.find('#languagelinkindex');
let $langtag = $modal.find('#languagelinktag');
let $cbInd = $modal.find('#langId');
let $cbLocal = $modal.find('#langLocal');
let $cbEn = $modal.find('#langEn');
let $cbArb = $modal.find('#langArb');
let $cbJap = $modal.find('#langJap');
let $cbChi = $modal.find('#langChi');
function clearLanguageModal() {
$langid.prop('disabled', true).val('');
$langtag.val('');
$cbInd.prop('checked', false);
$cbLocal.prop('checked', false);
$cbEn.prop('checked', false);
$cbArb.prop('checked', false);
$cbJap.prop('checked', false);
$cbChi.prop('checked', false);
}
$findlanguage.on('input', function () {
let searchTerm = $findlanguage.val().toLowerCase();
if (searchTerm.length > 0) {
selectedlanguagerow = null;
let filtered = languagebankdata.filter(item => item.tag.toLowerCase().includes(searchTerm) || item.language.toLowerCase().includes(searchTerm));
fill_languagebanktablebody(filtered);
} else {
selectedlanguagerow = null;
fill_languagebanktablebody(languagebankdata);
}
});
reloadLanguageBank(APIURL);
$btnClear.click(() => {
DoClear(APIURL, "LanguageLink", (okdata) => {
alert("Success clear languageLink" + okdata.message);
languagebankdata = []
selectedlanguagerow = null;
fill_languagebanktablebody(languagebankdata);
reloadLanguageBank(APIURL);
alert("Success clear languageLink : " + okdata.message);
}, (errdata) => {
alert("Error clear languagebank: " + errdata.message);
alert("Error clear languageLink : " + errdata.message);
});
});
$btnAdd.click(() => {
// show modal with id 'languagemodal'
let $modal = $('#languagemodal');
$modal.modal('show');
let $langtag = $modal.find('#languagelinktag');
let $cbInd = $modal.find('#langId');
let $cbLocal = $modal.find('#langLocal');
let $cbEn = $modal.find('#langEn');
let $cbArb = $modal.find('#langArb');
let $cbJap = $modal.find('#langJap');
let $cbChi = $modal.find('#langChi');
clearLanguageModal();
// save button click event
$modal.off('click.languagelinksave').on('click.languagelinksave', '#languagelinksave', function () {
@@ -1007,10 +1039,10 @@ $(document).ready(function () {
language: langString
}
fetchAPI(APIURL + "Add", "POST", {}, ll, (okdata) => {
alert("Success add language" + okdata.message);
alert("Success add language : " + okdata.message);
reloadLanguageBank(APIURL);
}, (errdata) => {
alert("Error add language: " + errdata.message);
alert("Error add language : " + errdata.message);
});
$modal.modal('hide');
@@ -1032,12 +1064,10 @@ $(document).ready(function () {
}
if (confirm(`Are you sure to delete language [${ll.index}] Tag=${ll.tag} Language=${ll.language}?`)) {
fetchAPI(APIURL + "DeleteByIndex/" + ll.index, "DELETE", {}, null, (okdata) => {
alert("Success delete language" + okdata.message);
languagebankdata = languagebankdata.filter(item => item.index !== ll.index);
selectedlanguagerow = null;
fill_languagebanktablebody(languagebankdata);
reloadLanguageBank(APIURL);
alert("Success delete language : " + okdata.message);
}, (errdata) => {
alert("Error delete language: " + errdata.message);
alert("Error delete language : " + errdata.message);
});
}
}
@@ -1052,15 +1082,8 @@ $(document).ready(function () {
language: cells.eq(2).text()
}
if (confirm(`Are you sure to edit language [${ll.index}] Tag=${ll.tag} Language=${ll.language}?`)) {
let $modal = $('#languagemodal');
let $cbInd = $modal.find('#langId');
let $cbLocal = $modal.find('#langLocal');
let $cbEn = $modal.find('#langEn');
let $cbArb = $modal.find('#langArb');
let $cbJap = $modal.find('#langJap');
let $cbChi = $modal.find('#langChi');
let $langtag = $modal.find('#languagelinktag');
let $langid = $modal.find('#languagelinkindex');
clearLanguageModal();
$langid.val(ll.index);
$langtag.val(ll.tag);
let langs = ll.language.toUpperCase().split(';');
@@ -1099,10 +1122,10 @@ $(document).ready(function () {
ll.tag = tag;
ll.language = langString;
fetchAPI(APIURL + "UpdateByIndex/" + ll.index, "PATCH", {}, ll, (okdata) => {
alert("Success edit language" + okdata.message);
reloadLanguageBank(APIURL);
alert("Success edit language : " + okdata.message);
}, (errdata) => {
alert("Error edit language: " + errdata.message);
alert("Error edit language : " + errdata.message);
});
$modal.modal('hide');
@@ -1117,19 +1140,20 @@ $(document).ready(function () {
}
});
$btnExport.click(() => {
DoExport(APIURL, "languagebank.xlsx",{});
DoExport(APIURL, "languagebank.xlsx", {});
});
$btnImport.click(() => {
DoImport(APIURL, (okdata) => {
reloadLanguageBank(APIURL);
alert("Success import languagebank : " + okdata.message);
}, (errdata) => {
alert("Error importing languagebank from XLSX: " + errdata.message);
alert("Error importing languagebank from XLSX : " + errdata.message);
});
});
} else {
console.error("Error loading language content:", xhr.status, xhr.statusText);
console.error("Error loading language content : ", xhr.status, xhr.statusText);
}
});
})
@@ -1151,21 +1175,156 @@ $(document).ready(function () {
$btnRemove.prop('disabled', true);
let APIURL = "ScheduleBank/";
let $schedulemodal = $('#schedulemodal');
// text input
let $scheduleid = $schedulemodal.find('#scheduleid');
// text input
let $scheduledescription = $schedulemodal.find('#scheduledescription');
// number input 0-23
let $schedulehour = $schedulemodal.find('#schedulehour');
// number input 0-59
let $scheduleminute = $schedulemodal.find('#scheduleminute');
// text input
let $schedulesoundpath = $schedulemodal.find('#schedulesoundpath');
// number input 0-5
let $schedulerepeat = $schedulemodal.find('#schedulerepeat');
// checkbox
let $scheduleenable = $schedulemodal.find('#scheduleenable');
// div for list of checkboxes
let $schedulezones = $schedulemodal.find('#schedulezones');
// radio button for everyday
let $scheduleeveryday = $schedulemodal.find('#scheduleeveryday');
// radio button for weekdays
let $schedulesunday = $schedulemodal.find('#schedulesunday');
let $schedulemonday = $schedulemodal.find('#schedulemonday');
let $scheduletuesday = $schedulemodal.find('#scheduletuesday');
let $schedulewednesday = $schedulemodal.find('#schedulewednesday');
let $schedulethursday = $schedulemodal.find('#schedulethursday');
let $schedulefriday = $schedulemodal.find('#schedulefriday');
let $schedulesaturday = $schedulemodal.find('#schedulesaturday');
// radio button for specific date
let $schedulespecialdate = $schedulemodal.find('#schedulespecialdate');
// date input
let $scheduledate = $schedulemodal.find('#scheduledate');
$schedulespecialdate.on('change', function () {
if ($(this).is(':checked')) {
$scheduledate.prop('disabled', false);
} else {
$scheduledate.prop('disabled', true);
}
});
function clearScheduleModal() {
$scheduleid.prop('disabled', true).val('');
$scheduledescription.val('');
$schedulehour.val('0');
$scheduleminute.val('0');
$schedulesoundpath.val('');
$schedulerepeat.val('0');
$scheduleenable.prop('checked', true);
$scheduleeveryday.prop('checked', false);
$schedulesunday.prop('checked', false);
$schedulemonday.prop('checked', false);
$scheduletuesday.prop('checked', false);
$schedulewednesday.prop('checked', false);
$schedulethursday.prop('checked', false);
$schedulefriday.prop('checked', false);
$schedulesaturday.prop('checked', false);
$schedulespecialdate.prop('checked', false);
$scheduledate.prop('disabled', true).val('');
}
let $findschedule = $('#findschedule');
$findschedule.on('input', function () {
let searchTerm = $findschedule.val().toLowerCase();
if (searchTerm.length > 0) {
selectedtimerow = null;
let filtered = schedulebankdata.filter(item => item.description.toLowerCase().includes(searchTerm) || item.soundpath.toLowerCase().includes(searchTerm) || item.broadcastZones.toLowerCase().includes(searchTerm));
fill_schedulebanktablebody(filtered);
} else {
selectedtimerow = null;
fill_schedulebanktablebody(schedulebankdata);
}
});
reloadTimerBank(APIURL);
$btnClear.click(() => {
DoClear(APIURL, "Timerbank", (okdata) => {
alert("Success clear schedulebank" + okdata.message);
schedulebankdata = []
selectedschedulerow = null;
fill_schedulebanktablebody(schedulebankdata);
reloadTimerBank(APIURL);
alert("Success clear schedulebank : " + okdata.message);
}, (errdata) => {
alert("Error clear schedulebank: " + errdata.message);
alert("Error clear schedulebank : " + errdata.message);
});
});
$btnAdd.click(() => {
//TODO form add timer
$schedulemodal.modal('show');
clearScheduleModal();
$schedulemodal.off('click.scheduleclose').on('click.scheduleclose', '#scheduleclose', function () {
$schedulemodal.modal('hide');
});
$schedulemodal.off('click.schedulesave').on('click.schedulesave', '#schedulesave', function () {
// Gather form values
const Description = $scheduledescription.val();
const Soundpath = $schedulesoundpath.val();
const Repeat = parseInt($schedulerepeat.val(), 10);
const Enable = $scheduleenable.is(':checked');
// Collect selected days
let Day = "";
if ($scheduleeveryday.is(':checked')) {
Day = "Everyday";
} else if ($schedulespecialdate.is(':checked')) {
Day = $scheduledate.val();
} else {
if ($schedulesunday.is(':checked')) Day = "Sunday";
if ($schedulemonday.is(':checked')) Day = "Monday";
if ($scheduletuesday.is(':checked')) Day = "Tuesday";
if ($schedulewednesday.is(':checked')) Day = "Wednesday";
if ($schedulethursday.is(':checked')) Day = "Thursday";
if ($schedulefriday.is(':checked')) Day = "Friday";
if ($schedulesaturday.is(':checked')) Day = "Saturday";
}
// Broadcast zones (assuming comma-separated string)
const BroadcastZones = $schedulezones.val();
// Validate required fields
if (!Description || !Soundpath || Day === "") {
alert("Description, sound path, and day are required.");
return;
}
// Format time as HH:mm
const hour = parseInt($schedulehour.val(), 10);
const minute = parseInt($scheduleminute.val(), 10);
const Time = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;
// Prepare object
const scheduleObj = {
Description,
Day,
Time,
Soundpath,
Repeat,
Enable,
BroadcastZones
};
fetchAPI(APIURL + "Add", "POST", {}, scheduleObj, (okdata) => {
alert("Success add schedule: " + okdata.message);
reloadTimerBank(APIURL);
}, (errdata) => {
alert("Error add schedule: " + errdata.message);
});
$schedulemodal.modal('hide');
});
});
$btnRemove.click(() => {
if (selectedtimerow) {
@@ -1184,12 +1343,10 @@ $(document).ready(function () {
}
if (confirm(`Are you sure to delete schedule [${sr.index}] Description=${sr.description}?`)) {
fetchAPI(APIURL + "DeleteByIndex/" + sr.index, "DELETE", {}, null, (okdata) => {
alert("Success delete schedule" + okdata.message);
schedulebankdata = schedulebankdata.filter(item => item.index !== sr.index);
selectedtimerow = null;
fill_schedulebanktablebody(schedulebankdata);
reloadTimerBank(APIURL);
alert("Success delete schedule : " + okdata.message);
}, (errdata) => {
alert("Error delete schedule: " + errdata.message);
alert("Error delete schedule : " + errdata.message);
});
}
}
@@ -1210,22 +1367,124 @@ $(document).ready(function () {
language: cells.eq(8).text()
}
if (confirm(`Are you sure to edit schedule [${sr.index}] Description=${sr.description}?`)) {
//TODO send edit command
$schedulemodal.modal('show');
// fill the form with existing data
$scheduleid.val(sr.index);
$scheduledescription.val(sr.description);
let [hour, minute] = sr.time.split(':').map(num => parseInt(num, 10));
$schedulehour.val(hour.toString());
$scheduleminute.val(minute.toString());
$schedulesoundpath.val(sr.soundpath);
$schedulerepeat.val(sr.repeat.toString());
$scheduleenable.prop('checked', sr.enable.toLowerCase() === 'true');
switch (sr.day) {
case 'Everyday':
$scheduleeveryday.click();
break;
case 'Sunday':
$schedulesunday.click();
break;
case 'Monday':
$schedulemonday.click();
break;
case 'Tuesday':
$scheduletuesday.click();
break;
case 'Wednesday':
$schedulewednesday.click();
break;
case 'Thursday':
$schedulethursday.click();
break;
case 'Friday':
$schedulefriday.click();
break;
case 'Saturday':
$schedulesaturday.click();
break;
default:
// check if the day is in format dd/mm/yyyy
// and set the special date radio button and date input
if (/^\d{2}\/\d{2}\/\d{4}$/.test(sr.day)) {
$schedulespecialdate.click();
$scheduledate.val(sr.day);
}
}
$schedulemodal.off('click.scheduleclose').on('click.scheduleclose', '#scheduleclose', function () {
$schedulemodal.modal('hide');
});
$schedulemodal.off('click.schedulesave').on('click.schedulesave', '#schedulesave', function () {
// Gather form values
const Description = $scheduledescription.val();
const Soundpath = $schedulesoundpath.val();
const Repeat = parseInt($schedulerepeat.val(), 10);
const Enable = $scheduleenable.is(':checked');
// Collect selected days
let Day = "";
if ($scheduleeveryday.is(':checked')) {
Day = "Everyday";
} else if ($schedulespecialdate.is(':checked')) {
Day = $scheduledate.val();
} else {
if ($schedulesunday.is(':checked')) Day = "Sunday";
if ($schedulemonday.is(':checked')) Day = "Monday";
if ($scheduletuesday.is(':checked')) Day = "Tuesday";
if ($schedulewednesday.is(':checked')) Day = "Wednesday";
if ($schedulethursday.is(':checked')) Day = "Thursday";
if ($schedulefriday.is(':checked')) Day = "Friday";
if ($schedulesaturday.is(':checked')) Day = "Saturday";
}
// Broadcast zones (assuming comma-separated string)
const BroadcastZones = $schedulezones.val();
// Validate required fields
if (!Description || !Soundpath || Day === "") {
alert("Description, sound path, and day are required.");
return;
}
// Format time as HH:mm
const hour = parseInt($schedulehour.val(), 10);
const minute = parseInt($scheduleminute.val(), 10);
const Time = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;
// Prepare object
const scheduleObj = {
Description,
Day,
Time,
Soundpath,
Repeat,
Enable,
BroadcastZones
};
fetchAPI(APIURL + "UpdateByIndex/" + sr.index, "PATCH", {}, scheduleObj, (okdata) => {
alert("Success edit schedule: " + okdata.message);
reloadTimerBank(APIURL);
}, (errdata) => {
alert("Error edit schedule: " + errdata.message);
});
$schedulemodal.modal('hide');
});
}
}
});
$btnExport.click(() => {
DoExport(APIURL, "schedulebank.xlsx",{});
DoExport(APIURL, "schedulebank.xlsx", {});
});
$btnImport.click(() => {
DoImport(APIURL, (okdata) => {
reloadTimerBank(APIURL);
alert("Success import schedulebank from XLSX : " + okdata.message);
}, (errdata) => {
alert("Error importing schedulebank from XLSX: " + errdata.message);
alert("Error importing schedulebank from XLSX : " + errdata.message);
});
});
} else {
console.error("Error loading timer content:", xhr.status, xhr.statusText);
console.error("Error loading timer content : ", xhr.status, xhr.statusText);
}
});
})
@@ -1267,7 +1526,7 @@ $(document).ready(function () {
reloadLogs(APIURL, selectedlogdate, logfilter);
});
$btnExport.off('click').on('click', function () {
DoExport(APIURL, "log.xlsx",{date:selectedlogdate,filter:logfilter});
DoExport(APIURL, "log.xlsx", { date: selectedlogdate, filter: logfilter });
});
} else {