Student Image

ระบบเก็บเงินห้องเรียน

แดชบอร์ด

นักเรียนทั้งหมด

0

ยอดเก็บวันนี้

฿0.00

ยอดรวมทั้งหมด

฿0.00

นักเรียนที่ยังไม่จ่ายเงินวันนี้

ปฏิทินการเก็บเงิน

อา.
จ.
อ.
พ.
พฤ.
ศ.
ส.

จัดการนักเรียน

รูป เลขที่ รหัสนักเรียน ชื่อ-สกุล เบอร์โทร จัดการ

บันทึกการฝากเงิน

รายงานยอดค้างชำระ

ยอดค้างชำระรวมทั้งหมด

฿0.00

ถอนเงิน

สร้างรายการถอนเงินใหม่

ประวัติการถอนเงิน

การตั้งค่า (Admin)

จัดการผู้ใช้งาน

ตั้งค่าระบบทั่วไป

จัดการวันหยุด (งดเก็บเงิน)

โซนอันตราย (Danger Zone)

การรีเซ็ตข้อมูลจะ ลบประวัติการฝากเงินและการถอนเงินทั้งหมด ออกจากระบบอย่างถาวร (รายชื่อนักเรียน การตั้งค่า และวันหยุดจะยังคงอยู่)

อันนี้ไฟล์ code.gs /** * @OnlyCurrentDoc * * The main server-side script for the Classroom Money Management system. * Handles all logic, data processing, and communication with Google Sheets. * Final Version: Optimized for HIGH SPEED loading and robust error handling. */ // ================================================================= // GLOBAL CONFIGURATION // ================================================================= var SS = SpreadsheetApp.getActiveSpreadsheet(); var USER_SHEET; var STUDENT_SHEET; var DEPOSIT_SHEET; var SETTINGS_SHEET; var YEAR_SHEET; var HOLIDAY_SHEET; var WITHDRAWAL_SHEET; // ================================================================= // AUTOMATIC SETUP & WEB APP ENTRY POINT // ================================================================= function setupSpreadsheet() { SS.setSpreadsheetTimeZone("Asia/Bangkok"); var allSheetNames = SS.getSheets().map(function(s) { return s.getName(); }); var requiredSheets = [ { name: 'Users', headers: ['username', 'password_hash', 'salt', 'name', 'role', 'status'] }, { name: 'Students', headers: ['student_id', 'student_number', 'student_code', 'imageId', 'first_name', 'last_name', 'is_active', 'phone'] }, { name: 'Deposits', headers: ['deposit_id', 'student_id', 'deposit_date', 'amount'] }, { name: 'Settings', headers: ['key', 'value'], initialData: [['default_deposit_amount', '20'], ['system_admin_name', 'ผู้ดูแลระบบ'], ['existing_balance', '0'], ['collection_start_date', '2025-07-21']] }, { name: 'AcademicYears', headers: ['year', 'status'], initialData: [[new Date().getFullYear() + 543, 'active']] }, { name: 'Holidays', headers: ['date'] }, { name: 'Withdrawals', headers: ['withdrawal_id', 'date', 'amount', 'reason'] } ]; requiredSheets.forEach(function(reqSheet) { if (allSheetNames.indexOf(reqSheet.name) === -1) { var newSheet = SS.insertSheet(reqSheet.name); newSheet.getRange(1, 1, 1, reqSheet.headers.length).setValues([reqSheet.headers]).setFontWeight('bold'); if (reqSheet.initialData) { newSheet.getRange(2, 1, reqSheet.initialData.length, reqSheet.initialData[0].length).setValues(reqSheet.initialData); } } }); USER_SHEET = SS.getSheetByName('Users'); STUDENT_SHEET = SS.getSheetByName('Students'); DEPOSIT_SHEET = SS.getSheetByName('Deposits'); SETTINGS_SHEET = SS.getSheetByName('Settings'); YEAR_SHEET = SS.getSheetByName('AcademicYears'); HOLIDAY_SHEET = SS.getSheetByName('Holidays'); WITHDRAWAL_SHEET = SS.getSheetByName('Withdrawals'); }