⚠ 0 receipt(s) waiting to sync to Google Sheets. Connect to internet and click Sync.
Receipt Details
✎ Editing receipt — saving will overwrite this record.
Live Preview
SOLAR PHASE ENERGY PVT. LTD.
Solar EPC · BESS · SCADA · Rooftop & Commercial Solar · Kota, Rajasthan
ADVANCE MONEY RECEIPT
Receipt No.
--
Date
--
Received with thanks from
--
₹ --
--
Payment Mode--
Cheque No.--
Towards--
Project--
A/C Name: Solar Phase Energy Private Limited Bank: ICICI Bank, Talwandi, Kota | A/C No: 153905001044 | IFSC: ICIC0001539 GSTIN: 08ABECS8916K1ZS
This is a computer-generated receipt.
All Receipts
No receipts yet.
Total Received
₹0
0 receipts
This Month
₹0
0 receipts
Pending
₹0
0 receipts
Unsynced
0
in queue
Client-wise Summary
No data yet.
Monthly Collections
No data yet.
✅ Google Sheets Setup
Follow these 5 steps once. After that every receipt auto-syncs to your Google Sheet permanently.
Create a new Google Sheet
Go to sheets.google.com → click Blank. Name it Solar Phase Receipt Ledger.
Open Apps Script
In your Sheet: click Extensions → Apps Script. A new tab opens with a code editor.
Paste the script below
Delete everything in the editor, paste this code, then click Save (disk icon).
function doPost(e) {
try {
// Accept both raw JSON body and form-encoded payload field
var raw = (e.postData && e.postData.contents) ? e.postData.contents : '';
var data;
try { data = JSON.parse(raw); } catch(ex) {
var p = e.parameter && e.parameter.payload ? e.parameter.payload : raw;
data = JSON.parse(p);
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Ledger') || ss.insertSheet('Ledger');
// Add header if sheet is empty
if (sheet.getLastRow() === 0) {
var headers = ['Receipt No.','Date','Client Name','Amount (Rs.)','Payment Mode',
'Cheque/Ref No.','Purpose','Project','Status','Notes','Synced At'];
sheet.appendRow(headers);
sheet.getRange(1,1,1,headers.length).setBackground('#1a6b3a')
.setFontColor('#ffffff').setFontWeight('bold').setFontSize(10);
sheet.setFrozenRows(1);
sheet.setColumnWidth(1,130); sheet.setColumnWidth(3,180);
sheet.setColumnWidth(6,130); sheet.setColumnWidth(7,220);
sheet.setColumnWidth(8,150); sheet.setColumnWidth(11,160);
}
// Check for duplicate receipt number
var col1 = sheet.getRange(2,1,Math.max(sheet.getLastRow()-1,1),1).getValues();
for (var i=0; i<col1.length; i++) {
if (col1[i][0] === data.rno) {
return ContentService.createTextOutput(
JSON.stringify({status:'duplicate',message:'Receipt already exists'})
).setMimeType(ContentService.MimeType.JSON);
}
}
// Append new row
var row = [
data.rno, data.date, data.name, data.amount, data.mode,
data.ref||'', data.purpose, data.project||'', data.status,
data.notes||'', new Date().toLocaleString('en-IN')
];
sheet.appendRow(row);
// Color-code status cell
var lastRow = sheet.getLastRow();
var statusCell = sheet.getRange(lastRow, 9);
if (data.status === 'paid') statusCell.setBackground('#e8f5ee').setFontColor('#145530');
else if (data.status === 'pending') statusCell.setBackground('#faeeda').setFontColor('#633806');
else statusCell.setBackground('#fee2e2').setFontColor('#991b1b');
// Amount cell formatting
sheet.getRange(lastRow,4).setNumberFormat('#,##0');
return ContentService.createTextOutput(
JSON.stringify({status:'success',row:lastRow})
).setMimeType(ContentService.MimeType.JSON);
} catch(err) {
return ContentService.createTextOutput(
JSON.stringify({status:'error',message:err.toString()})
).setMimeType(ContentService.MimeType.JSON);
}
}
function doGet(e) {
return ContentService.createTextOutput(
JSON.stringify({status:'ok',message:'Solar Phase Receipt Sync Active'})
).setMimeType(ContentService.MimeType.JSON);
}
Deploy as Web App
Click Deploy → New deployment.
• Type: Web app
• Execute as: Me
• Who has access: Anyone
Click Deploy → Authorize → Copy the Web App URL.
Paste the URL below and Save
The URL looks like: https://script.google.com/macros/s/AKfyc.../exec
⚙ App Settings
Paste your deployed Web App URL here
Data Backup & Restore
Re-sync All pushes every receipt to Google Sheets (safe — skips duplicates). Backup JSON saves a local copy you can restore into this app on any device.