fix
All checks were successful
Build And Deploy Main / build-and-deploy (push) Successful in 32s

This commit is contained in:
2026-03-12 14:13:16 -04:00
parent e2c00597e7
commit 87e306838b
3 changed files with 30 additions and 4 deletions

View File

@@ -2,6 +2,7 @@ const { splitSite } = require("../middlewares");
const db = require("../models"); const db = require("../models");
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const crypto = require("crypto");
const moment = require("moment-timezone"); const moment = require("moment-timezone");
const archiver = require("archiver"); const archiver = require("archiver");
const { PDFDocument } = require("pdf-lib"); const { PDFDocument } = require("pdf-lib");
@@ -343,8 +344,7 @@ exports.exportRouteReportZip = async (req, res) => {
const templateBytes = fs.readFileSync(templatePath); const templateBytes = fs.readFileSync(templatePath);
const unicodeFontBytes = fs.readFileSync(unicodeFontPath); const unicodeFontBytes = fs.readFileSync(unicodeFontPath);
const filenameDate = (date || "").replace(/\//g, "-"); const zipName = `${crypto.randomBytes(8).toString("hex")}.zip`;
const zipName = `route_report_${filenameDate || "date"}.zip`;
res.setHeader("Content-Type", "application/zip"); res.setHeader("Content-Type", "application/zip");
res.setHeader("Content-Disposition", `attachment; filename="${zipName}"`); res.setHeader("Content-Disposition", `attachment; filename="${zipName}"`);

View File

@@ -25,6 +25,18 @@ const RoutesDashboard = () => {
return fallback; return fallback;
} }
}; };
const getZipFilenameFromHeaders = (headers, fallback = `route_report_${Date.now()}.zip`) => {
const rawHeader = headers?.['content-disposition'] || headers?.['Content-Disposition'] || '';
const match = rawHeader.match(/filename\*?=(?:UTF-8'')?\"?([^\";]+)\"?/i);
if (match?.[1]) {
try {
return decodeURIComponent(match[1]);
} catch (_err) {
return match[1];
}
}
return fallback;
};
const HIDDEN_CUSTOMER_TYPE_FILTER_VALUES = ['transferred', 'deceased', 'discharged']; const HIDDEN_CUSTOMER_TYPE_FILTER_VALUES = ['transferred', 'deceased', 'discharged'];
const navigate = useNavigate(); const navigate = useNavigate();
const dispatch = useDispatch(); const dispatch = useDispatch();
@@ -919,10 +931,11 @@ const RoutesDashboard = () => {
const selectedDateText = getDateString(targetDate); const selectedDateText = getDateString(targetDate);
const response = await ReportService.exportRouteReportZip(selectedDateText); const response = await ReportService.exportRouteReportZip(selectedDateText);
const blob = new Blob([response.data], { type: 'application/zip' }); const blob = new Blob([response.data], { type: 'application/zip' });
const downloadName = getZipFilenameFromHeaders(response?.headers);
const downloadUrl = window.URL.createObjectURL(blob); const downloadUrl = window.URL.createObjectURL(blob);
const link = document.createElement('a'); const link = document.createElement('a');
link.href = downloadUrl; link.href = downloadUrl;
link.setAttribute('download', `route_report_${selectedDateText.replace(/\//g, '-')}.zip`); link.setAttribute('download', downloadName);
document.body.appendChild(link); document.body.appendChild(link);
link.click(); link.click();
link.remove(); link.remove();

View File

@@ -20,6 +20,18 @@ const RoutesHistory = () => {
return fallback; return fallback;
} }
}; };
const getZipFilenameFromHeaders = (headers, fallback = `route_report_${Date.now()}.zip`) => {
const rawHeader = headers?.['content-disposition'] || headers?.['Content-Disposition'] || '';
const match = rawHeader.match(/filename\*?=(?:UTF-8'')?\"?([^\";]+)\"?/i);
if (match?.[1]) {
try {
return decodeURIComponent(match[1]);
} catch (_err) {
return match[1];
}
}
return fallback;
};
const navigate = useNavigate(); const navigate = useNavigate();
const dispatch = useDispatch(); const dispatch = useDispatch();
const inboundRoutes = useSelector(selectHistoryInboundRoutes); const inboundRoutes = useSelector(selectHistoryInboundRoutes);
@@ -85,10 +97,11 @@ const RoutesHistory = () => {
const selectedDateText = getDateString(selectedDate); const selectedDateText = getDateString(selectedDate);
const response = await ReportService.exportRouteReportZip(selectedDateText); const response = await ReportService.exportRouteReportZip(selectedDateText);
const blob = new Blob([response.data], { type: 'application/zip' }); const blob = new Blob([response.data], { type: 'application/zip' });
const downloadName = getZipFilenameFromHeaders(response?.headers);
const downloadUrl = window.URL.createObjectURL(blob); const downloadUrl = window.URL.createObjectURL(blob);
const link = document.createElement('a'); const link = document.createElement('a');
link.href = downloadUrl; link.href = downloadUrl;
link.setAttribute('download', `route_report_${selectedDateText.replace(/\//g, '-')}.zip`); link.setAttribute('download', downloadName);
document.body.appendChild(link); document.body.appendChild(link);
link.click(); link.click();
link.remove(); link.remove();