105 lines
2.4 KiB
JavaScript
105 lines
2.4 KiB
JavaScript
/**
|
|
* Copyright (c) 2026 Niolla
|
|
* All rights reserved.
|
|
*
|
|
* This source code is proprietary and confidential.
|
|
* Unauthorized copying, modification, distribution, or use
|
|
* of this file, via any medium, is strictly prohibited.
|
|
*/
|
|
|
|
// app/logic/documents/index.js
|
|
|
|
const registry = require("./registry");
|
|
|
|
const { generateExcel } = require("./engine/excel.engine");
|
|
const {
|
|
generatePdfFromPreCost,
|
|
generatePdfFromInvoice,
|
|
generatePdfFromDispatchNote,
|
|
generatePdfFromDeliveryNote,
|
|
generatePdfFromPO,
|
|
generatePdfFromCustomDocument,
|
|
generatePdfFromCreditNote,
|
|
} = require("../../utils/pdfGenerator");
|
|
|
|
const formatMeta = {
|
|
pdf: {
|
|
ext: "pdf",
|
|
mime: "application/pdf",
|
|
},
|
|
|
|
excel: {
|
|
ext: "xlsx",
|
|
mime:
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
},
|
|
};
|
|
|
|
const pdfGenerators = {
|
|
precost: generatePdfFromPreCost,
|
|
invoice: generatePdfFromInvoice,
|
|
dispatchnote: generatePdfFromDispatchNote,
|
|
deliverynote: generatePdfFromDeliveryNote,
|
|
po: generatePdfFromPO,
|
|
customdocument: generatePdfFromCustomDocument,
|
|
creditnote: generatePdfFromCreditNote,
|
|
};
|
|
|
|
const generateDocument = async (
|
|
document,
|
|
format,
|
|
data
|
|
) => {
|
|
document = document.toLowerCase().replace(/[\s_-]+/g, "");
|
|
format = format.toLowerCase();
|
|
|
|
const doc = registry[document];
|
|
|
|
if (!doc) {
|
|
const availableTypes = Object.keys(registry).join(", ");
|
|
throw new Error(`Unsupported document type: "${document}". Available types: ${availableTypes}`);
|
|
}
|
|
|
|
let fileBuffer;
|
|
|
|
if (format === "pdf") {
|
|
// Format the data using the template
|
|
const formattedData = await doc.pdfTemplate(data);
|
|
|
|
// Get the correct PDF generator for this document type
|
|
const pdfGenerator = pdfGenerators[document];
|
|
|
|
if (pdfGenerator) {
|
|
fileBuffer = await pdfGenerator(formattedData);
|
|
} else {
|
|
throw new Error(`No PDF generator found for document type: ${document}`);
|
|
}
|
|
}
|
|
|
|
else if (format === "excel") {
|
|
if (doc.excelBuilder) {
|
|
fileBuffer = await generateExcel(
|
|
doc.excelBuilder,
|
|
data
|
|
);
|
|
} else {
|
|
throw new Error(`Excel generation not supported for document type: ${document}`);
|
|
}
|
|
}
|
|
|
|
else {
|
|
throw new Error("Unsupported format");
|
|
}
|
|
|
|
const meta = formatMeta[format];
|
|
|
|
return {
|
|
fileBuffer,
|
|
fileName: `${document}-${Date.now()}.${meta.ext}`,
|
|
mimeType: meta.mime,
|
|
};
|
|
};
|
|
|
|
module.exports = {
|
|
generateDocument,
|
|
}; |