SiPeMas NU

Sistem Pendataan Masjid Nahdlatul Ulama

Lembaga Ta'mir Masjid NU Tingkat Ranting

* Masukkan URL dari hasil deploy Google Apps Script Anda. Lihat tab "Panduan" untuk instruksi lengkap.

+

Input Data Masjid

📋

Daftar Masjid

0
Total
0
Sertifikat
0
Belum Surat
Filter:
🕌

Belum ada data masjid

Silakan masukkan URL Apps Script dan tambah data baru

📊 Laporan & Statistik

0
Total Masjid
0
Masjid Jami'
0
Musholla
0
Ikrar Wakaf

Status Sertifikasi Tanah Wakaf

✅ Sertifikat Wakaf NU 0%
📝 Ikrar Wakaf 0%
❌ Belum Ada Surat 0%

LAPORAN DATA MASJID

Lembaga Ta'mir Masjid NU - Tingkat Ranting

No Nama Masjid Jenis Alamat Ketua Takmir Status Tanah

📖 Panduan Setup Google Apps Script

1 Buat Google Spreadsheet Baru

  1. Buka Google Sheets
  2. Buat spreadsheet baru dengan nama "Data Masjid NU"
  3. Buat header di baris pertama (A1:F1): Timestamp | Nama Masjid | Jenis | Alamat | Ketua Takmir | Status Tanah

2 Buat Google Apps Script

  1. Di spreadsheet, klik menu Extensions → Apps Script
  2. Hapus semua kode default
  3. Copy-paste kode berikut:
// ==========================================
// KODE GOOGLE APPS SCRIPT - SiPeMas NU
// ==========================================
// PENTING: Buat script ini dari dalam Spreadsheet
// (Extensions > Apps Script) agar otomatis terhubung
// Script ini otomatis menggunakan SHEET PERTAMA

// Handle GET Request - Mengambil semua data
function doGet(e) {
  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    // Mengambil sheet pertama (apapun namanya)
    const sheet = ss.getSheets()[0];
    
    if (!sheet) {
      return ContentService
        .createTextOutput(JSON.stringify({ 
          success: false, 
          error: 'Spreadsheet tidak memiliki sheet!' 
        }))
        .setMimeType(ContentService.MimeType.JSON);
    }
    
    const data = sheet.getDataRange().getValues();
    
    if (data.length <= 1) {
      return ContentService
        .createTextOutput(JSON.stringify({ success: true, data: [] }))
        .setMimeType(ContentService.MimeType.JSON);
    }
    
    const headers = data[0];
    const rows = data.slice(1);
    
    const result = rows
      .filter(row => row.some(cell => cell !== ''))
      .map((row, index) => {
        let obj = { id: index + 1 };
        headers.forEach((header, i) => {
          obj[header] = row[i] || '';
        });
        return obj;
      });
    
    return ContentService
      .createTextOutput(JSON.stringify({ success: true, data: result }))
      .setMimeType(ContentService.MimeType.JSON);
      
  } catch (error) {
    return ContentService
      .createTextOutput(JSON.stringify({ 
        success: false, 
        error: error.message 
      }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}

// Handle POST Request - Menambah data baru
function doPost(e) {
  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    // Mengambil sheet pertama (apapun namanya)
    const sheet = ss.getSheets()[0];
    
    if (!sheet) {
      return ContentService
        .createTextOutput(JSON.stringify({ 
          success: false, 
          error: 'Spreadsheet tidak memiliki sheet!' 
        }))
        .setMimeType(ContentService.MimeType.JSON);
    }
    
    const data = JSON.parse(e.postData.contents);
    
    const timestamp = new Date().toLocaleString('id-ID', { 
      timeZone: 'Asia/Jakarta' 
    });
    
    const newRow = [
      timestamp,
      data.namaMasjid,
      data.jenisMasjid,
      data.alamat,
      data.ketuaTakmir,
      data.statusTanah
    ];
    
    sheet.appendRow(newRow);
    
    return ContentService
      .createTextOutput(JSON.stringify({ 
        success: true, 
        message: 'Data berhasil disimpan!' 
      }))
      .setMimeType(ContentService.MimeType.JSON);
      
  } catch (error) {
    return ContentService
      .createTextOutput(JSON.stringify({ 
        success: false, 
        error: error.message 
      }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}

// Fungsi untuk setup header otomatis
function setupHeaders() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  // Mengambil sheet pertama
  const sheet = ss.getSheets()[0];
  
  const headers = [
    'Timestamp', 
    'Nama Masjid', 
    'Jenis', 
    'Alamat', 
    'Ketua Takmir', 
    'Status Tanah'
  ];
  
  sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
  sheet.getRange(1, 1, 1, headers.length)
    .setBackground('#009900')
    .setFontColor('#ffffff')
    .setFontWeight('bold');
  
  // Beri nama sheet
  sheet.setName('Data Masjid');
  
  Logger.log('Header berhasil dibuat!');
}

// Test function
function testDoGet() {
  const result = doGet();
  Logger.log(result.getContent());
}

3 Jalankan Setup Header (Opsional)

  1. Setelah paste kode, pilih fungsi setupHeaders dari dropdown
  2. Klik tombol ▶️ Run
  3. Izinkan akses jika diminta (Review Permissions → pilih akun → Allow)
  4. Header akan otomatis dibuat dengan format yang benar ✅

💡 Tips: Fungsi ini otomatis membuat header dengan warna hijau NU!

4 Deploy sebagai Web App

  1. Klik tombol Deploy → New deployment
  2. Klik ikon ⚙️ → pilih "Web app"
  3. Isi konfigurasi:
    • Description: "SiPeMas NU API"
    • Execute as: Me
    • Who has access: Anyone
  4. Klik Deploy
  5. Klik Authorize access dan izinkan
  6. Copy Web app URL yang muncul

5 Gunakan Aplikasi

  1. Kembali ke tab "Aplikasi"
  2. Paste URL Web App ke kolom yang tersedia
  3. Klik "Simpan URL"
  4. Mulai input data masjid! 🎉

⚠️ Catatan Penting:

  • Setiap kali mengubah kode, Anda harus deploy ulang dengan versi baru
  • Pastikan header spreadsheet sesuai: Timestamp, Nama Masjid, Jenis, Alamat, Ketua Takmir, Status Tanah
  • Jika error "Authorization required", klik Review Permissions dan izinkan akses