/*
KODE BACKEND GOOGLE APPS SCRIPT (Code.gs)
Sistem Database & API untuk LabShift RSUD SMJ 1 Pro
Versi 1.0.1 - Production Ready
*/
function setupAwal() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ["ATLM", "Shifts", "TukarShift", "MasterShift", "AuditLog"];
sheets.forEach(function(sheetName) {
var sheet = ss.getSheetByName(sheetName);
if (!sheet) {
sheet = ss.insertSheet(sheetName);
}
});
ss.getSheetByName("ATLM").getRange("A1:F1").setValues([["ID", "NIP", "Nama", "Unit", "WhatsApp", "Status"]]);
ss.getSheetByName("Shifts").getRange("A1:C1").setValues([["AtlmId", "Tanggal", "ShiftCode"]]);
ss.getSheetByName("TukarShift").getRange("A1:G1").setValues([["ID", "Pemohon", "Jenis", "Tanggal", "Pengganti", "Alasan", "Status"]]);
ss.getSheetByName("MasterShift").getRange("A1:C1").setValues([["Kode", "Nama", "Jam"]]);
ss.getSheetByName("AuditLog").getRange("A1:C1").setValues([["Waktu", "User", "Aksi"]]);
SpreadsheetApp.flush();
}
function doGet(e) { return handleRequest(e); }
function doPost(e) { return handleRequest(e); }
function handleRequest(e) {
var lock = LockService.getScriptLock();
try {
lock.waitLock(10000);
var params = e && e.parameter ? e.parameter : {};
var action = params.action;
if (e && e.postData && e.postData.contents) {
try {
var payload = JSON.parse(e.postData.contents);
if (payload.action) action = payload.action;
} catch(err) {}
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (action === "get_all") {
return ContentService.createTextOutput(JSON.stringify({
status: "success",
data: {
atlm: readSheetData(ss.getSheetByName("ATLM")),
shifts: readShiftData(ss.getSheetByName("Shifts")),
tukarShift: readSheetData(ss.getSheetByName("TukarShift")),
masterShift: readSheetData(ss.getSheetByName("MasterShift")),
auditLog: readSheetData(ss.getSheetByName("AuditLog"))
}
})).setMimeType(ContentService.MimeType.JSON);
}
return ContentService.createTextOutput(JSON.stringify({
status: "success",
message: "Permintaan berhasil diterima."
})).setMimeType(ContentService.MimeType.JSON);
} catch (err) {
return ContentService.createTextOutput(JSON.stringify({
status: "error",
message: err.toString()
})).setMimeType(ContentService.MimeType.JSON);
} finally {
try { lock.releaseLock(); } catch(ex) {}
}
}
function readSheetData(sheet) {
if (!sheet) return [];
var rows = sheet.getDataRange().getValues();
if (rows.length <= 1) return [];
var headers = rows[0];
var result = [];
for (var i = 1; i < rows.length; i++) {
var obj = {};
for (var j = 0; j < headers.length; j++) {
obj[headers[j]] = rows[i][j];
}
result.push(obj);
}
return result;
}
function readShiftData(sheet) {
if (!sheet) return {};
var rows = sheet.getDataRange().getValues();
if (rows.length <= 1) return {};
var shiftsObj = {};
for (var i = 1; i < rows.length; i++) {
var key = rows[i][0] + "_" + rows[i][1];
shiftsObj[key] = rows[i][2];
}
return shiftsObj;
}