Sisa Kas Global
Rp •••••••
Mode Offline
Rp •••••••
Pilih & hubungkan database cloud per perangkat ini
Salin kode ini ke Google Sheets kamu (Ekstensi → Apps Script):
function doGet(e) { return handleRequest(e); }
function doPost(e) { return handleRequest(e); }
function handleRequest(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var contents = e.postData ? JSON.parse(e.postData.contents) : {};
var action = contents.action || e.parameter.action || 'get';
if (sheet.getLastRow() === 0) {
sheet.appendRow(['ID', 'Tanggal', 'Tipe', 'Nominal', 'Keterangan']);
}
var lock = LockService.getScriptLock();
lock.tryLock(10000);
try {
if (action === 'get') {
var rows = sheet.getDataRange().getValues();
var result = [];
for (var i = 1; i < rows.length; i++) {
if (rows[i][0]) {
result.push({
id: String(rows[i][0]),
date: rows[i][1] instanceof Date ? formatDate(rows[i][1]) : String(rows[i][1]),
type: String(rows[i][2]),
amount: Number(rows[i][3]),
description: String(rows[i][4])
});
}
}
return respondJSON({ status: 'success', data: result });
}
if (action === 'add') {
var newTx = contents.data;
var newId = newTx.id || String(Date.now());
sheet.appendRow([newId, newTx.date, newTx.type, newTx.amount, newTx.description]);
return respondJSON({ status: 'success', id: newId });
}
if (action === 'batch_add') {
var items = contents.data || [];
if (items.length > 0) {
var rowsToAdd = [];
for (var k = 0; k < items.length; k++) {
var it = items[k];
var itId = it.id || String(Date.now() + Math.random());
rowsToAdd.push([itId, it.date, it.type, it.amount, it.description]);
}
var startRow = sheet.getLastRow() + 1;
sheet.getRange(startRow, 1, rowsToAdd.length, 5).setValues(rowsToAdd);
}
return respondJSON({ status: 'success', count: items.length });
}
if (action === 'update') {
var updated = contents.data;
var data = sheet.getDataRange().getValues();
for (var r = 1; r < data.length; r++) {
if (String(data[r][0]) === String(updated.id)) {
sheet.getRange(r + 1, 1, 1, 5).setValues([[updated.id, updated.date, updated.type, updated.amount, updated.description]]);
return respondJSON({ status: 'success' });
}
}
return respondJSON({ status: 'error', message: 'ID tidak ditemukan' });
}
if (action === 'delete') {
var delId = contents.id;
var data = sheet.getDataRange().getValues();
for (var r = 1; r < data.length; r++) {
if (String(data[r][0]) === String(delId)) {
sheet.deleteRow(r + 1);
return respondJSON({ status: 'success' });
}
}
return respondJSON({ status: 'error', message: 'ID tidak ditemukan' });
}
} catch (err) {
return respondJSON({ status: 'error', message: err.toString() });
} finally {
lock.releaseLock();
}
return respondJSON({ status: 'error', message: 'Aksi tidak dikenal' });
}
function formatDate(d) {
var year = d.getFullYear();
var month = ('0' + (d.getMonth() + 1)).slice(-2);
var day = ('0' + d.getDate()).slice(-2);
return year + '-' + month + '-' + day;
}
function respondJSON(obj) {
return ContentService.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}
Langkah Deploy di Google Sheets:
Set limit maksimal pengeluaran per bulan
Yakin ingin melanjutkan?