// NOTE: @OnlyCurrentDoc tag hataya gaya hai taaki doosri sheets update ho sakein.
function testRun() {
// Deployment se pehle ek baar is function ko 'Run' karna zaroori hai
// Taaki Google baaki sheets ko edit karne ki permission maang sake.
var ss = SpreadsheetApp.getActiveSpreadsheet();
Logger.log("All Permissions Granted for Master Console!");
}
function doGet(e) {
// ==========================================
// 1. LIVE STATUS UPDATE LOGIC (Action Router)
// ==========================================
if (e && e.parameter && e.parameter.action === 'updateStatus') {
return handleStatusUpdate(e.parameter.module, e.parameter.id, e.parameter.status);
}
// ==========================================
// 2. DATA FETCHING LOGIC (For Dashboard Load)
// ==========================================
var masterSS = SpreadsheetApp.getActiveSpreadsheet();
function getChannelOperations() {
var sheet = masterSS.getSheetByName("Operations");
if (!sheet) return [];
var data = sheet.getDataRange().getDisplayValues();
var result = [];
for (var i = 1; i < data.length; i++) {
result.push({
date: data[i][0] || "",
sellerWa: data[i][1] || "",
status: data[i][3] || "PENDING",
channelId: data[i][4] || "",
purchasePrice: data[i][23] || 0, // Col X (23)
soldDate: data[i][24] || "" // Col Y (24)
});
}
return result;
}
function getChannelFinance() {
var sheet = masterSS.getSheetByName("Finance");
if (!sheet) return [];
var data = sheet.getDataRange().getDisplayValues();
var result = [];
for (var i = 1; i < data.length; i++) {
result.push({
date: data[i][0] || "",
channelId: data[i][1] || "General",
category: data[i][2] || "",
type: data[i][3] || "",
amountIn: data[i][4] || 0,
amountOut: data[i][5] || 0,
remarks: data[i][6] || ""
});
}
return result;
}
function getEscrowChannels() {
var sheet = masterSS.getSheetByName("PTSDeals");
if (!sheet) return [];
var data = sheet.getDataRange().getDisplayValues();
var result = [];
for (var i = 1; i < data.length; i++) {
result.push({
date: data[i][0] || "",
channelName: data[i][2] || "",
wa: data[i][3] || "",
fee: data[i][11] || 0,
utr: data[i][12] || "",
status: data[i][13] || "PENDING"
});
}
return result;
}
function getEscrowItems() {
var sheet = masterSS.getSheetByName("PTSitems");
if (!sheet) return [];
var data = sheet.getDataRange().getDisplayValues();
var result = [];
for (var i = 1; i < data.length; i++) {
result.push({
date: data[i][0] || "",
itemName: data[i][2] || "",
wa: data[i][8] || "",
fee: data[i][9] || 0,
utr: data[i][10] || "",
status: data[i][11] || "PENDING"
});
}
return result;
}
function getSikkaTxns() {
var sheet = masterSS.getSheetByName("Sikka Transactions");
if (!sheet) return [];
var data = sheet.getDataRange().getDisplayValues();
var result = [];
for (var i = 1; i < data.length; i++) {
var reqType = data[i][3] ? data[i][3].toString().toUpperCase() : "";
var waPhone = data[i][2] || "";
var utrData = data[i][6] || "";
// Agar Withdrawal hai toh mobile number, warna Deposit hai toh UTR
var utrOrNumFinal = reqType.includes("WITHDRAW") ? waPhone : utrData;
result.push({
date: data[i][1] || "",
phone: waPhone,
reqType: data[i][3] || "",
amount: data[i][4] || 0,
status: data[i][5] || "PENDING",
utrOrNum: utrOrNumFinal
});
}
return result;
}
function getSikkaProfit() {
var sheet = masterSS.getSheetByName("Admin_Profit");
if (!sheet) return [];
var data = sheet.getDataRange().getDisplayValues();
var result = [];
for (var i = 1; i < data.length; i++) {
result.push({
date: data[i][4] || "", // Col E
profit: data[i][2] || 0 // Col C
});
}
return result;
}
// Final Master Payload
var payload = {
channelDeals: { operations: getChannelOperations(), finance: getChannelFinance() },
escrow: { channels: getEscrowChannels(), items: getEscrowItems() },
sikka: { transactions: getSikkaTxns(), profit: getSikkaProfit() }
};
return ContentService.createTextOutput(JSON.stringify(payload)).setMimeType(ContentService.MimeType.JSON);
}
// =========================================
// SOURCE SHEET UPDATE ENGINE (Live Edits)
// ==========================================
function handleStatusUpdate(module, targetId, newStatus) {
try {
var ssId, tabName, statusColIndex;
// Routing Logic
if (module === 'cd') {
ssId = '1zLtoIoTeWDYUY8RXSCESpPuSYf6jNkpGw_HRAKOMzJo';
tabName = 'New Channels';
statusColIndex = 4; // Col D (1-based index)
}
else if (module === 'ptsc') {
ssId = '1e9Wxh3cps3Bgw-9zCzZ7uA88gcLRK5YYlNs7t1-NoYg';
tabName = 'PTSDeals';
statusColIndex = 14; // Col N (1-based index)
}
else if (module === 'ptsi') {
ssId = '1e9Wxh3cps3Bgw-9zCzZ7uA88gcLRK5YYlNs7t1-NoYg';
tabName = 'PTSitems';
statusColIndex = 12; // Col L (1-based index)
}
else if (module === 'sikka') {
ssId = '1jx9_P3lr54pVZ0XMCUki2b82w6Ltgb4v5rT6zhNZM8s';
tabName = 'Transactions';
statusColIndex = 6; // Col F (1-based index)
}
var sourceSheet = SpreadsheetApp.openById(ssId).getSheetByName(tabName);
var data = sourceSheet.getDataRange().getValues();
var rowIndex = -1;
// Searching for the Exact Row in Original Sheet
for (var i = 1; i < data.length; i++) {
// Safe Data Fetching
var colC = data[i].length > 2 ? data[i][2].toString() : "";
var colE = data[i].length > 4 ? data[i][4].toString() : "";
var colG = data[i].length > 6 ? data[i][6].toString() : "";
var colK = data[i].length > 10 ? data[i][10].toString() : "";
var colM = data[i].length > 12 ? data[i][12].toString() : "";
if (module === 'sikka') {
if ((colG && colG === targetId) || (colC && colC === targetId)) { rowIndex = i + 1; break; }
} else if (module === 'cd') {
if (colE && colE === targetId) { rowIndex = i + 1; break; }
} else if (module === 'ptsc') {
if ((colM && colM === targetId) || (colC && colC === targetId)) { rowIndex = i + 1; break; }
} else if (module === 'ptsi') {
if ((colK && colK === targetId) || (colC && colC === targetId)) { rowIndex = i + 1; break; }
}
}
if (rowIndex !== -1) {
// Update Status in Original Sheet
sourceSheet.getRange(rowIndex, statusColIndex).setValue(newStatus);
// Bonus: Add "Sold Date" if Channel is marked "SOLD OUT"
if (module === 'cd' && newStatus.toString().toUpperCase() === "SOLD OUT") {
var today = new Date();
var formattedDate = ('0' + today.getDate()).slice(-2) + '/' + ('0' + (today.getMonth()+1)).slice(-2) + '/' + today.getFullYear();
sourceSheet.getRange(rowIndex, 25).setValue(formattedDate); // Col Y
}
return ContentService.createTextOutput(JSON.stringify({success: true})).setMimeType(ContentService.MimeType.JSON);
} else {
return ContentService.createTextOutput(JSON.stringify({success: false, error: "ID not found in Source Sheet"})).setMimeType(ContentService.MimeType.JSON);
}
} catch(e) {
return ContentService.createTextOutput(JSON.stringify({success: false, error: e.message})).setMimeType(ContentService.MimeType.JSON);
}
}