-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCódigo no borrar.js
More file actions
158 lines (138 loc) · 5.36 KB
/
Código no borrar.js
File metadata and controls
158 lines (138 loc) · 5.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
function buscarYGuardarLiberaciones() {
// --------------------------------------------------
// 1) CONFIGURACIONES
// --------------------------------------------------
var SPREADSHEET_ID = "1RUXFgyGT2nFNRfU41-W9IVaGFnTw8VpfJDO2FI0Cslo"; // Reemplaza con tu ID de Spreadsheet
var SHEET_NAME = "Liberaciones"; // Nombre de la hoja/pestaña
var FOLDER_ID = "1clf-Bt8LTjEuSH5pX8KXkcCF7CGAkzRo"; // ID de la carpeta en Drive
// --------------------------------------------------
// 2) OBTENER OBJETOS Y VALIDAR
// --------------------------------------------------
try {
var ss = SpreadsheetApp.openById(SPREADSHEET_ID);
var sheet = ss.getSheetByName(SHEET_NAME);
var folder = DriveApp.getFolderById(FOLDER_ID);
if (!sheet || !folder) {
throw new Error("No se pudo acceder a la hoja o la carpeta especificada");
}
} catch (e) {
Logger.log("Error de inicialización: " + e.toString());
return;
}
// --------------------------------------------------
// 3) DEFINIR LA BÚSQUEDA EN GMAIL (RANGO DE FECHAS)
// --------------------------------------------------
var AFTER_DATE = "2024/01/01";
var BEFORE_DATE = "2024/12/25";
var query = 'has:attachment filename:pdf subject:"Liberación Pedido"'
+ ' after:' + AFTER_DATE
+ ' before:' + BEFORE_DATE;
// Obtenemos los hilos que coinciden con la búsqueda
var threads = GmailApp.search(query);
var totalThreads = threads.length;
if (totalThreads >= 500) {
Logger.log("!!! ADVERTENCIA: Se alcanzó el límite de 500 resultados !!!");
}
// --------------------------------------------------
// 4) RECORRER LOS CORREOS Y SUS ADJUNTOS
// --------------------------------------------------
var contador = 0;
var errores = 0;
threads.forEach(function(thread) {
try {
var messages = thread.getMessages();
messages.forEach(function(message) {
var attachments = message.getAttachments();
attachments.forEach(function(attachment) {
var fileName = attachment.getName();
if (fileName.startsWith("Liberación Pedido") && fileName.toLowerCase().endsWith(".pdf")) {
procesarArchivo(attachment, fileName, message, folder, sheet);
contador++;
}
});
});
} catch (e) {
Logger.log("Error procesando hilo: " + e.toString());
errores++;
}
});
// --------------------------------------------------
// 8) LOG FINAL
// --------------------------------------------------
Logger.log("Procesamiento completado:");
Logger.log("- Total de PDFs procesados: " + contador);
Logger.log("- Total de errores: " + errores);
}
function procesarArchivo(attachment, fileName, message, folder, sheet) {
try {
// --------------------------------------------------
// 5) REVISAR SI EL ARCHIVO YA EXISTE EN DRIVE
// --------------------------------------------------
var resultado = verificarDuplicado(folder, fileName, attachment);
// --------------------------------------------------
// 6) OBTENER LOS DATOS DEL CORREO
// --------------------------------------------------
var asunto = message.getSubject();
var fecha = Utilities.formatDate(message.getDate(), "GMT-5", "yyyy-MM-dd HH:mm");
var remitente = message.getFrom();
var cuerpo = obtenerCuerpoFormateado(message);
// --------------------------------------------------
// 7) GUARDAR EN LA HOJA "Liberaciones"
// --------------------------------------------------
sheet.appendRow([
asunto, // Col A
fecha, // Col B
remitente, // Col C
cuerpo, // Col D
fileName, // Col E
resultado.url // Col F
]);
if (resultado.status === "nuevo") {
Logger.log("Archivo nuevo procesado: " + fileName);
} else {
Logger.log(resultado.message);
}
} catch (e) {
Logger.log("Error procesando archivo " + fileName + ": " + e.toString());
}
}
function verificarDuplicado(folder, fileName, attachment) {
try {
var existingFiles = folder.searchFiles('title = "' + fileName + '"');
if (existingFiles.hasNext()) {
var existingFile = existingFiles.next();
return {
status: "duplicado",
message: "El archivo ya existe en Drive: " + fileName,
url: existingFile.getUrl()
};
} else {
var newFile = folder.createFile(attachment);
return {
status: "nuevo",
message: "Archivo creado exitosamente",
url: newFile.getUrl()
};
}
} catch (error) {
Logger.log("Error al verificar duplicado: " + error.toString());
return {
status: "error",
message: "Error al procesar el archivo: " + error.toString(),
url: "ERROR: No se pudo procesar el archivo"
};
}
}
function obtenerCuerpoFormateado(message) {
try {
return message.getPlainBody()
.replace(/[\r\n]+/g, ' ') // Reemplaza saltos de línea con espacios
.replace(/\s+/g, ' ') // Normaliza espacios múltiples
.trim() // Elimina espacios al inicio y final
.substring(0, 200) // Limita a 200 caracteres
+ (message.getPlainBody().length > 200 ? "..." : "");
} catch (e) {
Logger.log("Error al obtener el cuerpo del mensaje: " + e.toString());
return "No se pudo obtener el contenido del mensaje";
}
}