Registration Form Master Code
// --- CONFIGURATION ---
const SPREADSHEET_ID = "1olMkkaJ0kocLUwq9IxPn0Uacqi87dmNSwMVa7FiKdjM";
const SHEET_NAME = "Sheet1";
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index')
.setTitle('Olympiad Registration 2026')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
.addMetaTag('viewport', 'width=device-width, initial-scale=1');
}
// स्थानों का डेटा (HTML इसे लोड करेगा)
function getLocationData() {
return {
"Agra": [ "Ahmedia Hanafia Inter College", "Ratan Muni Jain Inter College", "Saghir Fatima Mohammadia Inter College", "Raja Balwant Singh Inter College" ],
"Aligarh": [ "Babu Lal Jain Inter College", "Chiranjilal Girls Inter College", "DAV Inter College", "Dharam Samaj Inter College", "Shri Maheshwar Girls Inter College", "Raghuveer Sahay Inter College", "Ratan Prem DAV Inter College", "Uday Singh Jain Kanya Inter College", "SMB Inter College" ],
"Amroha": [ "Aley Ahmad Girls Inter College", "AW Faiz-e-aam Inter College", "JS Hindu Inter College", "AKK Inter College", "I.M. Inter College" ],
"Ayodhya": [ "SSSV Boys Inter College", "Maharaja Inter College", "MPLL Adarsh Inter College" ],
"Bareilly": [ "Sahu Gopi Nath Girls Inter College", "F.R. Islamia Inter College", "Islamia Girls Inter College", "Shri Subhash Inter College", "Ram Bharose Girls Inter College" ],
"Budaun": [ "HS Islamia Inter College", "Sigler Girls Inter College", "Kedarnath Mahila Inter College", "Parwati Arya Kanya Sanskrit Inter College", "Nagar Palika Kanya Inter College", "Shree Krishna Inter College" ],
"Bulandshahr": [ "Muslim Inter College", "Shiv Charan Inter College", "JP Janta Inter College", "FB Muslim Girls Inter College", "ASKRA Inter College", "SMJEC Inter College" ],
"Dadri": [ "Rana Sangram Singh Inter College", "Vastraj Bharat Swatantra Inter College" ],
"Etawah": [ "SD Inter College", "Sitala Prasad Sorabal Girls Inter College", "Hindu Vidyalaya Inter College" ],
"Farrukhabad": [ "Swami Ramananda Balika Inter College", "Narayan Arya Kanya Pathshala Inter College", "Bhartiya Pathshala Inter College", "MM Kanodiya Girls Inter College", "Mahaveer Inter College" ],
"Firozabad": [ "Chotey Lal Inter College", "Rewati Devi Girls Inter College", "Shri Gopinath Inter College", "S.R.K Inter College" ],
"Gonda": [ "Sarju PD Kanya Inter College", "Shaheed e Azam Sardar Bhagat Singh Inter College", "Shri Gandhi Vidyalaya Inter College" ],
"Gorakhpur": [ "Janta Inter College", "Patel Smarak Inter College", "M.P.P Arya Kanya Inter College" ],
"Hapur": [ "Arya Kanya Pathshala Inter College", "C.T.C Inter College", "Ram Niwas Inter College" ],
"Hathras": [ "Kanya Inter College", "Kirodi Lal Jain Inter College", "Nehru Smarak BD Inter College", "Shri Ramchandra Agrawal Girls Inter College", "Shri Rambag Inter College", "U.C. Kausik Adarsh Vidya Niketan Inter College" ],
"Kasganj": [ "BAV Inter College", "Shri Ganesh Inter College", "Sumant Kumar Maheshwari Inter College", "Azad Gandhi Inter College" ],
"Lakhimpur": [ "GV Inter College", "Abul Kalam Azad Girls Inter College", "BD Arya Kanya Inter College", "PK Inter College", "JP Inter College", "Guru Nanak Inter College", "Krishak Samaj Inter College", "Raja Lone Singh Inter College" ],
"Lucknow": [ "Bakshi ka Talab Inter College", "Aminabad Inter College", "Kastoorba Kanya Inter College", "Navyug Kanya Vidyalaya Inter College" ],
"Mainpuri": [ "Shri Chitra Gupt Inter College", "Christian Inter College", "Nar Singh Yadav Inter College" ],
"Mathura": [ "Champa Saran Agrawal Inter College", "Islamia Inter College", "Phool Katori Devi Kanya Inter College", "Prem Devi Girls Inter College", "Jawahar Vidyalaya Inter College" ],
"Meerut": [ "Ismail Girls Inter College", "Raghunath Girls Inter College", "Dev Nagri Inter College", "Khalsa Kanya Inter College", "Jaswant Mills Inter College" ],
"Moradabad": [ "Parker Inter College", "Hewett Muslim Inter College", "Hindu Model Inter College", "Methodist Girls Inter College", "Maharaja Agrasen Inter College", "Pratap Singh Hindu Kanya Inter College", "Abdul Salam Muslim Girls Inter College" ],
"Muzaffarnagar": [ "Jain Kanya Inter College", "Vedic Putri Pathshala Inter College", "S.D Inter College" ],
"Prayagraj": [ "Arya Kanya Inter College", "Majidia Islamia Inter College", "Lala Manmohan Das Inter College", "Mahila Gram Inter College" ],
"Saharanpur": [ "JV Jain Inter College", "SAM Inter College", "Islamia Inter College" ],
"Sambhal": [ "FR Inter College", "Bhartiya Municipal Girls Inter College", "Brij Ratan Arya Kanya Inter College", "Shankar Bhushan Sharan Janta Inter College", "Acharya Muktesh HRS Inter College", "ZU Inter College", "Hind Inter College" ],
"Shahjahanpur": [ "Vivekananda Library", "Vinoba Bhave Inter College", "Marwari E-Pathshala", "National Girls Inter College", "Guru Nanak Pathshala Kanya High School", "Seth Siya Ram Inter College", "Arya Mahila Inter College", "Powayan Inter College", "SP Hindu Inter College", "Arya Kanya Pathshala Inter College" ],
"Sikandrabad": [ "Jain Inter College", "Agrasen Inter College", "Shri Swami Dayal Bhatnagar Girls Inter College", "MS Inter College" ],
"Sitapur": [ "Municipal Inter College", "Hindu Kanya Pathshala Inter College", "Raja Raghuwar Dayal Inter College", "Arya Kanya Inter College", "Shri Gandhi Vidyalaya Inter College" ],
"Varanasi": [ "Shri Vallabh Vidya Peeth Inter College", "Shri Agrasen Kanya Inter College", "Arya Mahila Inter College", "Uday Pratap Inter College", "Rani Morar Inter College" ]
};
}
function processForm(data) {
const lock = LockService.getScriptLock();
try {
// 30 सेकंड तक इंतज़ार करें ताकि एक समय में एक ही रोल नंबर जनरेट हो
lock.waitLock(30000);
const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME) || ss.insertSheet(SHEET_NAME);
// Header setup
if (sheet.getLastRow() === 0) {
sheet.appendRow(["Timestamp", "District", "Lab Name", "Student Name", "Class", "Olympiad Level", "Father", "Mother", "Mobile", "Submitted By", "Roll Number"]);
}
// --- Validation Logic ---
const curClass = parseInt(data.studentClass);
const level = parseInt(data.olympiadLevel);
if ((level === 6 && curClass > 7) || (level === 7 && curClass > 8) || (level === 8 && curClass > 9)) {
return { status: "error", message: `पात्र नहीं: कक्षा ${curClass} के छात्र Level ${level} के लिए आवेदन नहीं कर सकते।` };
}
// --- Duplicate Student Check & Roll Number Collection ---
const rows = sheet.getDataRange().getValues();
const studentName = data.studentName.toUpperCase().trim();
const fatherName = data.fatherName.toUpperCase().trim();
const mobile = data.contact.toString().trim();
const existingRollNumbers = new Set();
for (let i = 1; i < rows.length; i++) {
if (rows[i][3].toString().toUpperCase() === studentName &&
rows[i][6].toString().toUpperCase() === fatherName &&
rows[i][8].toString() === mobile) {
return { status: "error", message: "Duplicate: यह छात्र पहले से पंजीकृत है।" };
}
if (rows[i][10]) {
existingRollNumbers.add(rows[i][10].toString());
}
}
// --- Unique Roll Number Generation ---
let rollNumber;
// Keep generating until unique: Level + Class + 4 Random Digits
do {
const uniqueID = Math.floor(1000 + Math.random() * 9000);
rollNumber = `${level}${curClass}${uniqueID}`;
} while (existingRollNumbers.has(rollNumber));
// --- Append Data (Converted to Uppercase) ---
sheet.appendRow([
new Date(),
data.labLocation.toUpperCase(),
data.labName.toUpperCase(),
studentName,
curClass,
level,
fatherName,
data.motherName.toUpperCase(),
mobile,
data.submittedBy.toUpperCase(),
rollNumber
]);
return { status: "success", rollNumber: rollNumber };
} catch (e) {
return { status: "error", message: "System Error: " + e.toString() };
} finally {
// लॉक को रिलीज़ करें
lock.releaseLock();
}
}
function searchRollNumber(mobile) {
try {
const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
if (!sheet) return [];
const rows = sheet.getDataRange().getValues();
const results = [];
for (let i = 1; i < rows.length; i++) {
if (rows[i][8].toString() === mobile.trim()) {
results.push({ name: rows[i][3], roll: rows[i][10] });
}
}
return results;
} catch (e) { return []; }
}