first commit
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
/**
|
||||
* 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,
|
||||
};
|
||||
Reference in New Issue
Block a user