/** * GEO GESTIÓN HUMANA - BACKEND API * Este script conecta el Hosting con Google Sheets. */ const SPREADSHEET_ID = SpreadsheetApp.getActiveSpreadsheet().getId(); const SHEET_NAME = "Respuestas de formulario 1"; // Asegúrate de que este sea el nombre exacto de tu hoja /** * Función que responde a las peticiones GET (Lectura de datos) */ function doGet(e) { try { const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME); const data = sheet.getDataRange().getValues(); const headers = data[0]; const rows = data.slice(1); // Convertimos las filas en objetos JSON para que el Frontend los entienda fácilmente const jsonData = rows.map((row, index) => { let obj = {}; // Asignamos una ID única basada en la fila para poder actualizarla luego obj['id'] = "ID-" + (index + 2); // Mapeo manual basado en las columnas de tu formulario // Ajusta los índices [0, 1, 2...] si el orden de tus columnas cambia obj['timestamp'] = row[0] ? Utilities.formatDate(new Date(row[0]), "GMT-5", "yyyy-MM-dd HH:mm") : ""; obj['email'] = row[1]; obj['responsable'] = row[2]; // Quien solicita obj['unidad'] = row[3]; obj['colaborador'] = row[4]; // Nombre del empleado obj['tipo'] = row[5]; obj['descripcion'] = row[6]; obj['archivo'] = row[7]; // URL del Drive // Columnas de gestión (las que el analista llena en la app) // Asumimos que están al final de la fila obj['revisadoPor'] = row[8] || ""; obj['respuesta'] = row[9] || ""; obj['estado'] = row[10] || "PENDIENTE"; return obj; }); return ContentService.createTextOutput(JSON.stringify({ status: 'success', data: jsonData })).setMimeType(ContentService.MimeType.JSON); } catch (error) { return ContentService.createTextOutput(JSON.stringify({ status: 'error', message: error.toString() })).setMimeType(ContentService.MimeType.JSON); } } /** * Función que responde a las peticiones POST (Escritura de datos) */ function doPost(e) { try { const params = JSON.parse(e.postData.contents); const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME); // Extraemos el número de fila del ID (Ej: "ID-5" -> fila 5) const rowNumber = parseInt(params.id.split('-')[1]); if (isNaN(rowNumber)) throw new Error("ID de fila inválido"); // Actualizamos las celdas de gestión // Ajusta los números de columna (9, 10, 11) según donde quieras guardar en tu hoja sheet.getRange(rowNumber, 9).setValue(params.revisadoPor); sheet.getRange(rowNumber, 10).setValue(params.respuesta); sheet.getRange(rowNumber, 11).setValue(params.estado); return ContentService.createTextOutput(JSON.stringify({ status: 'success', message: 'Registro actualizado correctamente' })).setMimeType(ContentService.MimeType.JSON); } catch (error) { return ContentService.createTextOutput(JSON.stringify({ status: 'error', message: error.toString() })).setMimeType(ContentService.MimeType.JSON); } }