Memeriksa Koneksi...
Dokumentasi Klinis Apotek & Cloud Database Sync
Akun Demo Default:
Username: admin | Password: 123
Solusi koneksi terputus: Pastikan Web App diset ke "Execute as: Me" dan "Who has access: Anyone".
function doPost(e) {
try {
var contents = JSON.parse(e.postData.contents);
var action = contents.action;
var data = contents.data;
var ss = SpreadsheetApp.getActiveSpreadsheet();
getOrCreateSheet(ss, "Pengkajian");
getOrCreateSheet(ss, "PIO");
getOrCreateSheet(ss, "Konseling");
getOrCreateSheet(ss, "CekKesehatan");
getOrCreateSheet(ss, "Pasien");
if (action === "getAllData") {
return responseJSON({
status: "success",
data: {
pengkajian: getSheetData(ss, "Pengkajian"),
pio: getSheetData(ss, "PIO"),
konseling: getSheetData(ss, "Konseling"),
cekKesehatan: getSheetData(ss, "CekKesehatan"),
pasien: getSheetData(ss, "Pasien")
}
});
}
if (action === "savePengkajian") { saveToSheet(ss, "Pengkajian", data); return responseJSON({ status: "success" }); }
if (action === "deletePengkajian") { deleteFromSheet(ss, "Pengkajian", data.id); return responseJSON({ status: "success" }); }
if (action === "savePIO") { saveToSheet(ss, "PIO", data); return responseJSON({ status: "success" }); }
if (action === "deletePIO") { deleteFromSheet(ss, "PIO", data.id); return responseJSON({ status: "success" }); }
if (action === "saveKonseling") { saveToSheet(ss, "Konseling", data); return responseJSON({ status: "success" }); }
if (action === "deleteKonseling") { deleteFromSheet(ss, "Konseling", data.id); return responseJSON({ status: "success" }); }
if (action === "saveCekKesehatan") { saveToSheet(ss, "CekKesehatan", data); return responseJSON({ status: "success" }); }
if (action === "deleteCekKesehatan") { deleteFromSheet(ss, "CekKesehatan", data.id); return responseJSON({ status: "success" }); }
if (action === "savePasien") { saveToSheet(ss, "Pasien", data); return responseJSON({ status: "success" }); }
return responseJSON({ status: "error", message: "Unknown action" });
} catch (err) {
return responseJSON({ status: "error", message: err.toString() });
}
}
function doGet(e) {
return ContentService.createTextOutput("ApoCare Pro Backend Active").setMimeType(ContentService.MimeType.TEXT);
}
function responseJSON(obj) {
return ContentService.createTextOutput(JSON.stringify(obj)).setMimeType(ContentService.MimeType.JSON);
}
function getOrCreateSheet(ss, name) {
var sheet = ss.getSheetByName(name);
if (!sheet) { sheet = ss.insertSheet(name); }
return sheet;
}
function getSheetData(ss, sheetName) {
var sheet = ss.getSheetByName(sheetName);
var data = sheet.getDataRange().getValues();
if (data.length <= 1) return [];
var headers = data[0];
var result = [];
for (var i = 1; i < data.length; i++) {
var row = data[i];
var obj = {};
for (var j = 0; j < headers.length; j++) {
var val = row[j];
if (headers[j] === "checklist" || headers[j] === "materi") {
try { val = JSON.parse(val); } catch(e) {}
}
obj[headers[j]] = val;
}
result.push(obj);
}
return result;
}
function saveToSheet(ss, sheetName, item) {
var sheet = ss.getSheetByName(sheetName);
var data = sheet.getDataRange().getValues();
var headers = [];
if (data.length === 0 || data[0].length === 0) {
headers = Object.keys(item);
sheet.appendRow(headers);
} else {
headers = data[0];
}
var existingRowIndex = -1;
var idColIndex = headers.indexOf("id");
if (idColIndex !== -1 && data.length > 1) {
for (var i = 1; i < data.length; i++) {
if (String(data[i][idColIndex]) === String(item.id)) { existingRowIndex = i + 1; break; }
}
}
var rowData = headers.map(function(h) {
var val = item[h] !== undefined ? item[h] : "";
if (typeof val === "object") val = JSON.stringify(val);
return val;
});
if (existingRowIndex !== -1) {
sheet.getRange(existingRowIndex, 1, 1, rowData.length).setValues([rowData]);
} else {
sheet.appendRow(rowData);
}
}
function deleteFromSheet(ss, sheetName, itemId) {
var sheet = ss.getSheetByName(sheetName);
var data = sheet.getDataRange().getValues();
if (data.length <= 1) return;
var headers = data[0];
var idColIndex = headers.indexOf("id");
if (idColIndex === -1) return;
for (var i = 1; i < data.length; i++) {
if (String(data[i][idColIndex]) === String(itemId)) { sheet.deleteRow(i + 1); break; }
}
}
Apakah Anda yakin ingin menghapus data ini dari database?
Arahkan kamera ke barcode/QR resep digital