145 lines
4.6 KiB
JavaScript
145 lines
4.6 KiB
JavaScript
function processSpecificFolder() {
|
|
const DATED_FOLDER_ID = "";
|
|
const API_URL = "https://pft2pftr.williambr.uno/process-pdf";
|
|
|
|
const datedFolder = DriveApp.getFolderById(DATED_FOLDER_ID);
|
|
processPdfFilesInFolder(datedFolder, API_URL);
|
|
}
|
|
|
|
function processNewPdfs() {
|
|
// 1. Configuration
|
|
const ACTIVE_PROVIDERS_FOLDER_ID = "12Ppr39dN-mdzRKMxBhABgFkWmfMX_f7O";
|
|
const API_URL = "https://pft2pftr.williambr.uno/process-pdf";
|
|
|
|
// Set cutoff date to May 1, 2026
|
|
const CUTOFF_DATE = new Date(2026, 5, 1); // Note: Month is 0-indexed (4 = May)
|
|
|
|
const activeProvidersFolder = DriveApp.getFolderById(ACTIVE_PROVIDERS_FOLDER_ID);
|
|
const providerFolders = activeProvidersFolder.getFolders();
|
|
|
|
// 2. Loop through Provider Folders (e.g., NP jeong, Dr Santos)
|
|
while (providerFolders.hasNext()) {
|
|
const providerFolder = providerFolders.next();
|
|
Logger.log("Scanning provider folder: " + providerFolder.getName());
|
|
|
|
const dateFolders = providerFolder.getFolders();
|
|
|
|
// 3. Loop through Date Folders (e.g., 05.21.2026)
|
|
while (dateFolders.hasNext()) {
|
|
const dateFolder = dateFolders.next();
|
|
const folderName = dateFolder.getName();
|
|
const folderDate = parseFolderNameAsDate(folderName);
|
|
|
|
// Skip if the folder name is not a valid date format
|
|
if (!folderDate) {
|
|
Logger.log(" Skipping folder (Not a valid MM.DD.YYYY date): " + folderName);
|
|
continue;
|
|
}
|
|
|
|
// 4. Date Filter: Check if folder is 05.01.2026 or newer
|
|
if (folderDate >= CUTOFF_DATE) {
|
|
Logger.log(" Processing valid date folder: " + folderName);
|
|
processPdfFilesInFolder(dateFolder, API_URL);
|
|
} else {
|
|
Logger.log(" Skipping older folder: " + folderName);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Converts "05.21.2026" string format into a real JavaScript Date object
|
|
function parseFolderNameAsDate(folderName) {
|
|
const parts = folderName.split(".");
|
|
if (parts.length !== 3) return null;
|
|
|
|
const month = parseInt(parts[0], 10) - 1; // 0-indexed months
|
|
const day = parseInt(parts[1], 10);
|
|
const year = parseInt(parts[2], 10);
|
|
|
|
if (isNaN(month) || isNaN(day) || isNaN(year)) return null;
|
|
|
|
return new Date(year, month, day);
|
|
}
|
|
|
|
// Processes the actual PDF files inside the matching date folders
|
|
function processPdfFilesInFolder(folder, apiUrl) {
|
|
const files = folder.getFiles();
|
|
|
|
while (files.hasNext()) {
|
|
const file = files.next();
|
|
|
|
if (file.getMimeType() === MimeType.PDF) {
|
|
if (file.getDescription() === "API_REPORT_PROCESSED") {
|
|
Logger.log("Skipping " + file.getName() + " - already processed.");
|
|
continue; // Skip to the next file
|
|
}
|
|
sendAndOverwritePdf(file, apiUrl);
|
|
}
|
|
}
|
|
}
|
|
|
|
function getPdfPageCount(file) {
|
|
try {
|
|
const blob = file.getBlob();
|
|
const data = blob.getDataAsString();
|
|
const matches = data.match(/\/Type\s*\/Pages[\s\S]*?\/Count\s*(\d+)/g);
|
|
|
|
if (matches && matches.length > 0) {
|
|
const countMatch = matches[matches.length - 1].match(/\/Count\s*(\d+)/);
|
|
if (countMatch) {
|
|
return parseInt(countMatch, 10);
|
|
}
|
|
}
|
|
return -1;
|
|
} catch (e) {
|
|
Logger.log("Error reading page count for " + file.getName() + ": " + e.message);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
function sendAndOverwritePdf(file, apiUrl) {
|
|
const fileId = file.getId();
|
|
const fileName = file.getName();
|
|
|
|
try {
|
|
const pdfBlob = file.getBlob();
|
|
const formData = { "file": pdfBlob };
|
|
const options = {
|
|
"method": "POST",
|
|
"payload": formData,
|
|
"muteHttpExceptions": true
|
|
};
|
|
|
|
Logger.log(" Sending " + fileName + " to API...");
|
|
const response = UrlFetchApp.fetch(apiUrl, options);
|
|
|
|
if (response.getResponseCode() !== 200) {
|
|
Logger.log(" API Error for " + fileName + ": " + response.getContentText());
|
|
return;
|
|
}
|
|
|
|
const responseBlob = response.getBlob();
|
|
if (responseBlob.getContentType() !== MimeType.PDF) {
|
|
Logger.log(" Skipping overwrite. API did not return a valid PDF.");
|
|
return;
|
|
}
|
|
|
|
const updateUrl = "https://www.googleapis.com/upload/drive/v3/files/" + fileId + "?uploadType=media";
|
|
const updateOptions = {
|
|
"method": "PATCH",
|
|
"headers": {
|
|
"Authorization": "Bearer " + ScriptApp.getOAuthToken(),
|
|
"Content-Type": MimeType.PDF
|
|
},
|
|
"payload": responseBlob.getBytes()
|
|
};
|
|
|
|
UrlFetchApp.fetch(updateUrl, updateOptions);
|
|
file.setDescription("API_REPORT_PROCESSED");
|
|
Logger.log(" Successfully processed and overwritten: " + fileName);
|
|
|
|
} catch (e) {
|
|
Logger.log(" Failed to process file " + fileName + ": " + e.message);
|
|
}
|
|
}
|