Langkah Mudah Menghubungkan:
- Buka Google Spreadsheet baru di Google Drive Anda.
- Klik menu Ekstensi (Extensions) > Apps Script.
- Hapus semua kode bawaan, lalu tempel kode di bawah ini.
- Klik tombol Deploy (Terapkan) > New Deployment (Deployment baru).
- Pilih tipe: Web App.
- Ubah Who has access (Siapa yang memiliki akses) menjadi: Anyone (Siapa saja).
- Salin Web App URL yang dihasilkan dan tempel pada isian di bawah.
function doPost(e) {
var lock = LockService.getScriptLock();
lock.tryLock(10000);
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetNota = ss.getSheetByName("Laporan_Nota");
var sheetDetail = ss.getSheetByName("Detail_Item");
// Inisialisasi Sheet Laporan_Nota jika belum ada
if (!sheetNota) {
sheetNota = ss.insertSheet("Laporan_Nota");
sheetNota.appendRow(["Timestamp", "Tanggal Nota", "No. Nota", "Supplier", "Metode Bayar", "Jumlah Macam Barang", "Total Qty Fisik", "Grand Total (Rp)", "Catatan"]);
sheetNota.getRange("A1:I1").setFontWeight("bold").setBackground("#E2E8F0");
sheetNota.setFrozenRows(1);
}
// Inisialisasi Sheet Detail_Item jika belum ada
if (!sheetDetail) {
sheetDetail = ss.insertSheet("Detail_Item");
sheetDetail.appendRow(["Timestamp", "Tanggal Nota", "No. Nota", "Supplier", "Nama Barang", "Kategori", "Jumlah (Qty)", "Satuan", "Harga Satuan (Rp)", "Subtotal (Rp)"]);
sheetDetail.getRange("A1:J1").setFontWeight("bold").setBackground("#E2E8F0");
sheetDetail.setFrozenRows(1);
}
var data = JSON.parse(e.postData.contents);
var now = new Date();
// 1. Simpan Rekap Nota
sheetNota.appendRow([
now,
data.date,
data.invoice,
data.supplier,
data.paymentMethod,
data.items.length,
data.totalQuantity,
data.grandTotal,
data.notes || ""
]);
// 2. Simpan Detail Masing-masing Barang
data.items.forEach(function(item) {
sheetDetail.appendRow([
now,
data.date,
data.invoice,
data.supplier,
item.name,
item.category,
item.quantity,
item.unit,
item.price,
item.subtotal
]);
});
return ContentService.createTextOutput(JSON.stringify({
status: "success",
message: "Data nota & detail berhasil disimpan!"
})).setMimeType(ContentService.MimeType.JSON);
} catch (error) {
return ContentService.createTextOutput(JSON.stringify({
status: "error",
message: error.toString()
})).setMimeType(ContentService.MimeType.JSON);
} finally {
lock.releaseLock();
}
}
function doGet() {
return ContentService.createTextOutput("Endpoint Google Apps Script Aktif & Siap Menerima Data.");
}