worldshine-redesign/app/controllers/doctemplate.controller.js
2025-04-14 16:29:36 -04:00

471 lines
18 KiB
JavaScript

// const axios = require("axios");
// const { splitSite } = require("../middlewares");
// const db = require("../models");
// const DocTemplate = db.doctemplate
// var multer = require('multer');
// var PizZip = require('pizzip');
// var Docxtemplater = require('docxtemplater');
// var fs = require('fs');
// const path = require('path');
// // const docxConverter = require('docx-pdf');
// var libre = require('libreoffice-convert');
// exports.createPDFFromDocTemplateName = (req, res) => {
// console.log('what', __dirname.replace('/controllers', ''));
// var inputData = req.query.inputData;
// var docTemplateName = req.query.docTemplateName;
// // var transportationId = req.body.transportationId;d
// // var transportationName = req.body.transportationName;
// DocTemplate.find({name: docTemplateName}).then((data) => {
// try {
// if (data && data.length > 0) {
// var docTemplate = data[0] || {};
// var templateDoc = `${__dirname.replace('/controllers', '')}${docTemplate?.file[0]?.url}`;
// var outputFileRandom = Math.ceil(Math.random() * 100000000);
// var outputFile = `/tmp/${docTemplate.name}_${outputFileRandom}.docx`;
// var content = fs.readFileSync(templateDoc, 'binary');
// var zip = new PizZip(content);
// var doc = new Docxtemplater(zip, {
// paragraphLoop: true,
// linebreaks: true,
// });
// try {
// // render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
// doc.render(JSON.parse(inputData));
// } catch (error) {
// // The error thrown here contains additional information when logged with JSON.stringify (it contains a properties object containing all suberrors).
// function replaceErrors(key, value) {
// if (value instanceof Error) {
// return Object.getOwnPropertyNames(value).reduce(function(error, key) {
// error[key] = value[key];
// return error;
// }, {});
// }
// return value;
// }
// console.log(JSON.stringify({error: error}, replaceErrors));
// if (error.properties && error.properties.errors instanceof Array) {
// const errorMessages = error.properties.errors.map(function (error) {
// return error.properties.explanation;
// }).join("\n");
// console.log('errorMessages', errorMessages);
// // errorMessages is a humanly readable message looking like this :
// // 'The tag beginning with "foobar" is unopened'
// }
// // callback && callback(error, null, { message:'error in creating doc from template' });
// }
// // save doc to output file
// var buf = doc.getZip().generate({type: 'nodebuffer'});
// // buf is a nodejs buffer, you can either write it to a file or do anything else with it.
// fs.writeFileSync(outputFile, buf);
// var outputFilename = outputFile || {};
// var outputPdfPath = outputFilename.substr(0, outputFilename.length - 5) + '.pdf';
// console.log('outputPDF:', outputPdfPath);
// var extend = 'pdf';
// // Read file
// // var outputFilename = outputFile || {};
// // console.log('filename', `/tmp/${docTemplate.name}_${outputFileRandom}.docx`)
// // docxConverter(path.resolve(`/tmp/${docTemplate.name}_${outputFileRandom}.docx`), path.resolve(`/tmp/${docTemplate.name}_${outputFileRandom}.pdf`), (err, result) => {
// // if (err) console.log(err);
// // else {
// // console.log('res', res);
// // res.download(result, (error) => {
// // console.log('Download PDF error')
// // })
// // }
// // });
// var infile = fs.readFileSync(outputFile);
// // Convert it to pdf format with undefined filter (see Libreoffice doc about filter)
// try {
// libre.convert(infile, extend, undefined, (err, done) => {
// if (err) {
// console.log('Error converting file:', err);
// }
// // Here in done you have pdf file which you can save or transfer in another stream
// fs.writeFileSync(outputPdfPath, done);
// console.log('Conver docx to pdf, Done.');
// res.download(outputPdfPath, function(error) {
// if (error) {
// console.log('Error in sending download file ${outputPdfPath}');
// }
// });
// });
// } catch (e) {
// console.log(e);
// }
// } else {
// res.status(404).send({
// success: false,
// message: "Docs Template doesn't exist"
// })
// }
// } catch(e) {
// console.log(e);
// }
// }).catch(err => {
// res.status(500).send({
// success: false,
// message: "Error Geting docs"
// });
// });
// }
// exports.createDocFromDocTemplateName = (req, res) => {
// console.log('what', __dirname.replace('/controllers', ''));
// // var inputData = req.query.inputData;
// var inputData = req.body.inputData;
// var docTemplateName = req.body.docTemplateName;
// DocTemplate.find({name: docTemplateName}).then((data) => {
// console.log(data);
// try {
// if (data && data.length > 0) {
// var docTemplate = data[0] || {};
// var templateDoc = `${__dirname.replace('/controllers', '')}${docTemplate?.file[0]?.url}`;
// var outputFileRandom = Math.ceil(Math.random() * 100000000);
// var outputFile = `/tmp/${docTemplate.name}_${outputFileRandom}.docx`;
// var content = fs.readFileSync(templateDoc, 'binary');
// var zip = new PizZip(content);
// var doc = new Docxtemplater(zip, {
// paragraphLoop: true,
// linebreaks: true,
// });
// try {
// // render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
// doc.render(JSON.parse(inputData));
// } catch (error) {
// // The error thrown here contains additional information when logged with JSON.stringify (it contains a properties object containing all suberrors).
// function replaceErrors(key, value) {
// if (value instanceof Error) {
// return Object.getOwnPropertyNames(value).reduce(function(error, key) {
// error[key] = value[key];
// return error;
// }, {});
// }
// return value;
// }
// console.log(JSON.stringify({error: error}, replaceErrors));
// if (error.properties && error.properties.errors instanceof Array) {
// const errorMessages = error.properties.errors.map(function (error) {
// return error.properties.explanation;
// }).join("\n");
// console.log('errorMessages', errorMessages);
// // errorMessages is a humanly readable message looking like this :
// // 'The tag beginning with "foobar" is unopened'
// }
// // callback && callback(error, null, { message:'error in creating doc from template' });
// }
// // save doc to output file
// var buf = doc.getZip().generate({type: 'nodebuffer'});
// // buf is a nodejs buffer, you can either write it to a file or do anything else with it.
// fs.writeFileSync(outputFile, buf);
// var outputFilename = outputFile || {};
// res.send(outputFilename, (error) => {
// if (error) {
// console.log('Error in downloading excel')
// }
// });
// console.log('Doc Download Completes')
// } else {
// res.status(404).send({
// success: false,
// message: "Docs Template doesn't exist"
// })
// }
// } catch(e) {
// console.log(e);
// }
// }).catch(err => {
// res.status(500).send({
// success: false,
// message: "Error Geting docs"
// });
// });
// // ids.forEach(id => {
// // CalendarEvent.findByIdAndUpdate(id, {link_event_uuid: transportationId,
// // link_event_name: transportationName}, { useFindAndModify: false })
// // .then(data => {
// // if (!data) {
// // res.status(404).send({
// // message: `Cannot update Event with id=${id}. Maybe Event was not found!`
// // });
// // } else res.send({ success: true, message: "Event was updated successfully." });
// // })
// // .catch(err => {
// // res.status(500).send({
// // success: false,
// // message: "Error updating Event with id=" + id
// // });
// // });
// // })
// }
const axios = require("axios");
const { splitSite } = require("../middlewares");
const db = require("../models");
const DocTemplate = db.doctemplate;
const Event = db.calendar_event;
var multer = require('multer');
var PizZip = require('pizzip');
var Docxtemplater = require('docxtemplater');
var fs = require('fs');
const path = require('path');
// const docxConverter = require('docx-pdf');
var libre = require('libreoffice-convert');
const moment = require("moment-timezone");
exports.createPDFFromDocTemplateName = (req, res) => {
console.log('what', __dirname.replace('/controllers', ''));
var inputData = JSON.parse(req.query.inputData);
var docTemplateName = req.query.docTemplateName;
const eventIds =inputData?.eventIds;
Event.find({ '_id': { $in: eventIds } }).then((events) => {
const docData = {
events: []
};
events.forEach((event) => {
docData.events.push({
event_time: moment(event.start_time).format('hh:mm A MM/DD/YYYY dddd'),
client_name: event.data.client_name || '',
client_status: '会员',
//client_dob: event.data.client_birth_date || '',
//client_pcp: event.data.client_pcp || '',
//client_pharmacy: event.data.client_pharmacy || '',
client_seating: event.data.client_seating || '',
doctor_name: event.data.resource_name || '',
//doctor_phone: event.data.resource_phone || '',
doctor_contact: event.data.resource_contact || '',
doctor_address: event.data.resource_address || '',
//title: event.title || '',
description: event.description || '',
interpreter: event.data.interpreter || '',
//fasting: event.data.fasting || '',
//confirmed: event.data.confirmed,
//new_patient: event.data.new_patient,
//doc_order: event.data.doc_order,
//need_id: event.data.need_id,
//need_med_list: event.data.need_med_list,
reason: event.data.reason || '',
other: event.data.other || ''
});
});
// var transportationId = req.body.transportationId;d
// var transportationName = req.body.transportationName;
DocTemplate.find({name: docTemplateName}).then((data) => {
try {
if (data && data.length > 0) {
var docTemplate = data[0] || {};
var templateDoc = `${__dirname.replace('/controllers', '')}${docTemplate?.file[0]?.url}`;
var outputFileRandom = Math.ceil(Math.random() * 100000000);
var outputFile = `/tmp/${docTemplate.name}_${outputFileRandom}.docx`;
var content = fs.readFileSync(templateDoc, 'binary');
var zip = new PizZip(content);
var doc = new Docxtemplater(zip, {
paragraphLoop: true,
linebreaks: true,
});
try {
// render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
doc.render(docData);
} catch (error) {
// The error thrown here contains additional information when logged with JSON.stringify (it contains a properties object containing all suberrors).
function replaceErrors(key, value) {
if (value instanceof Error) {
return Object.getOwnPropertyNames(value).reduce(function(error, key) {
error[key] = value[key];
return error;
}, {});
}
return value;
}
console.log(JSON.stringify({error: error}, replaceErrors));
if (error.properties && error.properties.errors instanceof Array) {
const errorMessages = error.properties.errors.map(function (error) {
return error.properties.explanation;
}).join("\n");
console.log('errorMessages', errorMessages);
// errorMessages is a humanly readable message looking like this :
// 'The tag beginning with "foobar" is unopened'
}
// callback && callback(error, null, { message:'error in creating doc from template' });
}
// save doc to output file
var buf = doc.getZip().generate({type: 'nodebuffer'});
// buf is a nodejs buffer, you can either write it to a file or do anything else with it.
fs.writeFileSync(outputFile, buf);
var outputFilename = outputFile || {};
var outputPdfPath = outputFilename.substr(0, outputFilename.length - 5) + '.pdf';
console.log('outputPDF:', outputPdfPath);
var extend = 'pdf';
// Read file
// var outputFilename = outputFile || {};
// console.log('filename', `/tmp/${docTemplate.name}_${outputFileRandom}.docx`)
// docxConverter(path.resolve(`/tmp/${docTemplate.name}_${outputFileRandom}.docx`), path.resolve(`/tmp/${docTemplate.name}_${outputFileRandom}.pdf`), (err, result) => {
// if (err) console.log(err);
// else {
// console.log('res', res);
// res.download(result, (error) => {
// console.log('Download PDF error')
// })
// }
// });
var infile = fs.readFileSync(outputFile);
// Convert it to pdf format with undefined filter (see Libreoffice doc about filter)
try {
libre.convert(infile, extend, undefined, (err, done) => {
if (err) {
console.log('Error converting file:', err);
}
// Here in done you have pdf file which you can save or transfer in another stream
fs.writeFileSync(outputPdfPath, done);
console.log('Conver docx to pdf, Done.');
res.download(outputPdfPath, function(error) {
if (error) {
console.log('Error in sending download file ${outputPdfPath}');
}
});
});
} catch (e) {
console.log(e);
}
} else {
res.status(404).send({
success: false,
message: "Docs Template doesn't exist"
})
}
} catch(e) {
console.log(e);
}
}).catch(err => {
res.status(500).send({
success: false,
message: "Error Geting docs"
});
});
})
}
exports.createDocFromDocTemplateName = (req, res) => {
console.log('what', __dirname.replace('/controllers', ''));
var inputData = JSON.parse(req.query.inputData);
const eventIds = inputData?.eventIds;
var docTemplateName = req.query.docTemplateName;
Event.find({ '_id': { $in: eventIds } }).then((events) => {
const docData = {
events: []
};
events.forEach((event) => {
docData.events.push({
event_time: moment(event.start_time).format('hh:mm A MM/DD/YYYY dddd'),
client_name: event.data.client_name || '',
client_status: '会员',
//client_dob: event.data.client_birth_date || '',
//client_pcp: event.data.client_pcp || '',
//client_pharmacy: event.data.client_pharmacy || '',
client_seating: event.data.client_seating || '',
doctor_name: event.data.resource_name || '',
//doctor_phone: event.data.resource_phone || '',
doctor_contact: event.data.resource_contact || '',
doctor_address: event.data.resource_address || '',
//title: event.title || '',
description: event.description || '',
interpreter: event.data.interpreter || '',
//fasting: event.data.fasting || '',
//confirmed: event.data.confirmed,
//new_patient: event.data.new_patient,
//doc_order: event.data.doc_order,
//need_id: event.data.need_id,
//need_med_list: event.data.need_med_list,
reason: event.data.reason || '',
other: event.data.other || ''
});
});
DocTemplate.find({name: docTemplateName}).then((data) => {
try {
if (data && data.length > 0) {
var docTemplate = data[0] || {};
var templateDoc = `${__dirname.replace('/controllers', '')}${docTemplate?.file[0]?.url}`;
var outputFileRandom = Math.ceil(Math.random() * 100000000);
var outputFile = `/tmp/${docTemplate.name}_${outputFileRandom}.docx`;
var content = fs.readFileSync(templateDoc, 'binary');
var zip = new PizZip(content);
var doc = new Docxtemplater(zip, {
paragraphLoop: true,
linebreaks: true,
});
try {
// render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
doc.render(docData);
} catch (error) {
// The error thrown here contains additional information when logged with JSON.stringify (it contains a properties object containing all suberrors).
function replaceErrors(key, value) {
if (value instanceof Error) {
return Object.getOwnPropertyNames(value).reduce(function(error, key) {
error[key] = value[key];
return error;
}, {});
}
return value;
}
console.log(JSON.stringify({error: error}, replaceErrors));
if (error.properties && error.properties.errors instanceof Array) {
const errorMessages = error.properties.errors.map(function (error) {
return error.properties.explanation;
}).join("\n");
console.log('errorMessages', errorMessages);
// errorMessages is a humanly readable message looking like this :
// 'The tag beginning with "foobar" is unopened'
}
// callback && callback(error, null, { message:'error in creating doc from template' });
}
// save doc to output file
var buf = doc.getZip().generate({type: 'nodebuffer'});
// buf is a nodejs buffer, you can either write it to a file or do anything else with it.
fs.writeFileSync(outputFile, buf);
var outputFilename = outputFile || {};
res.download(outputFilename, (error) => {
if (error) {
console.log('Error in downloading excel')
}
});
console.log('Doc Download Completes')
} else {
res.status(404).send({
success: false,
message: "Docs Template doesn't exist"
})
}
} catch(e) {
console.log(e);
}
}).catch(err => {
res.status(500).send({
success: false,
message: "Error Geting docs"
});
});
});
}