// 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" }); }); }); }