ภาพรวมฟาร์ม
📅 —
ยอดขาย (บาท)
รายรับ vs รายจ่าย (เดือนนี้)
การขายล่าสุด
สัดส่วนชนิดเห็ด
🔔 แจ้งเตือน
ผลผลิตรายวัน (30 วัน)
ผลผลิตแต่ละล็อต
กำไร-ขาดทุน รายเดือน
ต้นทุนแยกหมวด
ต้นทุนต่อกิโลกรัม vs ราคาขาย
ยอดขายรายเดือน
รายได้แต่ละชนิดเห็ด
ตารางสรุปรายเดือน
| เดือน | ยอดขาย (กก.) | รายได้ | รายจ่าย | กำไร | % กำไร |
|---|
🍄 ชนิดเห็ด
🏪 ข้อมูลฟาร์ม
🗂 หมวดรายจ่าย
☁️ Google Sheets Sync
📖 วิธีตั้งค่า Apps Script
1
เปิด sheets.google.com → สร้าง Spreadsheet ใหม่ชื่อ "เห็ดทอง ฟาร์ม"
สร้าง Sheet ย่อย 4 แผ่น: Sales, Income, Expenses, Stock
2
ไปที่ Extensions → Apps Script → ลบโค้ดเดิมออก → วางโค้ดนี้:
const SS = SpreadsheetApp.getActiveSpreadsheet();
function doGet(e) { return handle(e); }
function doPost(e) { return handle(e); }
function handle(e) {
const action = (e.parameter||{}).action;
const sheet = (e.parameter||{}).sheet;
try {
let result;
if (action === 'ping') {
result = { ok:true, msg:'connected', farm:'เห็ดทอง ฟาร์ม' };
} else if (action === 'read') {
const ws = SS.getSheetByName(sheet);
const data = ws.getDataRange().getValues();
const hdrs = data[0];
const rows = data.slice(1)
.map(r => { const o={}; hdrs.forEach((h,i)=>o[h]=r[i]); return o; })
.filter(r => r.id);
result = { ok:true, data:rows };
} else if (action === 'write') {
const ws = SS.getSheetByName(sheet);
const payload = JSON.parse(e.postData.contents);
const rows = payload.rows || [];
const hdrs = ws.getRange(1,1,1,ws.getLastColumn()).getValues()[0];
if (ws.getLastRow() > 1)
ws.getRange(2,1,ws.getLastRow()-1,ws.getLastColumn()).clearContent();
if (rows.length > 0)
ws.getRange(2,1,rows.length,hdrs.length)
.setValues(rows.map(r => hdrs.map(h => r[h]??'')));
result = { ok:true, count:rows.length };
}
return out(result);
} catch(err) {
return out({ ok:false, error:err.message });
}
}
function initHeaders() {
const sheets = {
Sales: ['id','date','type','weight','price','total','customer','note'],
Income: ['id','date','cat','desc','amount'],
Expenses: ['id','date','cat','desc','amount'],
Stock: ['id','type','qty','date','cost','yield','status','note'],
Harvest: ['id','date','lotId','type','weight','round','quality','note']
};
Object.entries(sheets).forEach(([name, hdrs]) => {
let ws = SS.getSheetByName(name);
if (!ws) ws = SS.insertSheet(name);
ws.getRange(1,1,1,hdrs.length).setValues([hdrs]);
ws.getRange(1,1,1,hdrs.length)
.setBackground('#1c2a0e').setFontColor('#c9933a').setFontWeight('bold');
});
}
function out(data) {
return ContentService
.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}
3
กด Run → initHeaders() เพื่อสร้างหัวตารางอัตโนมัติ
จะมี popup ขอ Permission → กด Allow
4
กด Deploy → New deployment → Web app
Execute as: Me · Who has access: Anyone → Deploy → คัดลอก URL
5
วาง URL ที่ได้ในช่องด้านบน → กด เชื่อมต่อ
💾 จัดการข้อมูล
ข้อมูลทั้งหมดเก็บใน localStorage
ซิงค์กับ Google Sheets เมื่อตั้งค่าแล้ว