// const axios = require("axios"); // const { splitSite } = require("../middlewares"); // const db = require("../models"); // const ExcelTemplate = db.exceltemplate; // var XlsxTemplate = require('xlsx-template'); // var fs = require('fs'); // var multer = require('multer'); // const path = require('path'); // var libre = require('libreoffice-convert'); // exports.createPDFFromSheetTemplateName = (req, res) => { // console.log('what', __dirname.replace('/controllers', '')); // var inputData = req.query.inputData; // var excelTemplateName = req.query.excelTemplateName; // // var transportationId = req.body.transportationId;d // // var transportationName = req.body.transportationName; // ExcelTemplate.find({name: excelTemplateName}).then((data) => { // try { // if (data && data.length > 0) { // var excelTemplate = data[0] || {}; // var templateExcel = `${__dirname.replace('/controllers', '')}${excelTemplate?.file[0]?.url}`; // var outputFileRandom = Math.ceil(Math.random() * 100000000); // var outputFile = `/tmp/${excelTemplate.name}_${outputFileRandom}.xlsx`; // var data = fs.readFileSync(templateExcel, 'binary'); // var template = new XlsxTemplate(data); // var events = JSON.parse(inputData)?.events; // for (var i = 0; i < events.length; i++) { // var pageNumber = i + 2; // var event = events[i]; // // template.copySheet(1, pageNumber); // template.copySheet(1, event.client_name); // // console.log('>>> template substitute:', pageNumber, event); // template.substitute(pageNumber, event); // } // template.deleteSheet(1); // var newData = template.generate(); // fs.writeFileSync(outputFile, newData, 'binary'); // var outputFilename = outputFile || {}; // var outputPdfPath = outputFilename.substr(0, outputFilename.length - 5) + '.pdf'; // console.log('outputPDF:', outputPdfPath); // var extend = 'pdf'; // 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 xlsx 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: "Sheet Template doesn't exist" // }) // } // } catch(e) { // console.log(e); // } // }).catch(err => { // res.status(500).send({ // success: false, // message: "Error Geting docs" // }); // }); // } // exports.createSheetFromTemplateName = (req, res) => { // console.log('what', __dirname.replace('/controllers', '')); // var inputData = req.query.inputData; // console.log('inputData', inputData); // var excelTemplateName = req.query.excelTemplateName; // // var transportationId = req.body.transportationId; // // var transportationName = req.body.transportationName; // ExcelTemplate.find({name: excelTemplateName}).then((data) => { // try { // if (data && data.length > 0) { // var excelTemplate = data[0] || {}; // console.log('template', excelTemplate); // var templateExcel = `${__dirname.replace('/controllers', '')}${excelTemplate?.file[0]?.url}`; // var outputFileRandom = Math.ceil(Math.random() * 100000000); // var outputFile = `/tmp/${excelTemplate.name}_${outputFileRandom}.xlsx`; // var data = fs.readFileSync(templateExcel, 'binary'); // var template = new XlsxTemplate(data); // var events = JSON.parse(inputData)?.events; // console.log('events',events) // for (var i = 0; i < events.length; i++) { // var pageNumber = i + 2; // var event = events[i]; // // template.copySheet(1, pageNumber); // template.copySheet(1, event.client_name); // // console.log('>>> template substitute:', pageNumber, event); // template.substitute(pageNumber, event); // } // template.deleteSheet(1); // var newData = template.generate(); // fs.writeFileSync(outputFile, newData, 'binary'); // console.log('test'); // res.download(outputFile, (error) => { // if (error) { // console.log('Error in downloading excel') // } // }) // console.log('Download finish'); // } else { // res.status(404).send({ // success: false, // message: "excel Template doesn't exist" // }) // } // } catch(e) { // console.log(e); // } // }).catch(err => { // res.status(500).send({ // success: false, // message: "Error Geting excels" // }); // }); // // 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 ExcelTemplate = db.exceltemplate; const Event = db.calendar_event; const Customer = db.customer; const Client = db.client; const Resource = db.resource; var XlsxTemplate = require('xlsx-template'); var fs = require('fs'); var multer = require('multer'); const path = require('path'); var libre = require('libreoffice-convert'); const moment = require('moment-timezone'); exports.createPDFFromSheetTemplateName = (req, res) => { console.log('what', __dirname.replace('/controllers', '')); var inputData = JSON.parse(req.query.inputData); const eventIds = inputData?.eventIds; console.log('eventIds',eventIds); var excelTemplateName = req.query.excelTemplateName; console.log('template', excelTemplateName); Event.find({ '_id': { $in: eventIds } }).then((events) => { Resource.find({}).then((resources) => { Customer.find({}).then((customers) => { Client.find({}).then((clients) => { const docData = {events: []}; for (const event of events) { const customerModels = event?.data?.customer ? customers: clients; const customerId = event?.data?.customer ? event?.data?.customer : event?.target_uuid; const customer = customerModels.find((customerModel) => customerModel?.id === customerId || customerModel?._id === customerId || customerModel?.name === event?.data?.client_name ); let pharmacyInfo = 'This patient has no contracted pharmacy.\n' + 'Please give the prescription directly to the patient'; const pharmacy = resources.find(r => (r.id === customer?.pharmacy_id)) || resources.find(r => (r.name?.toLowerCase() === event?.data?.client_pharmacy?.toLowerCase())); if (pharmacy) { pharmacyInfo = `${pharmacy?.name} @ ${pharmacy?.address} \n` + `phone:${pharmacy?.phone} fax:${pharmacy?.fax}`; } else { if (event?.data?.client_pharmacy) { pharmacyInfo = 'Pharmacy: ' + event?.data?.client_pharmacy; } } const nameShow = event?.data?.customer ? `${event?.data?.client_name} ${customer?.name_cn}` : `${customer?.name_cn}` const clientName = (!!customer?.name_cn && !!event?.data?.client_name && nameShow) || customer?.name_cn || (customer?.lastname && customer?.firstname && `${customer?.lastname}, ${customer?.firstname}`) || event?.data?.client_name; docData.events.push({ event_time: moment(event?.start_time).format('MM/DD/YYYY hh:mm A'), client_name: event?.data?.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?.replaceAll('\n', ' '), //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, // notes: event.data.notes, other: event.data.other, pharmacy_info: pharmacyInfo, client_preferred_name: customer?.name_cn, member_type: customer?.type, disability: (customer?.disability === true) ? 'Yes' : (event?.data?.disability || 'No') }); } // var transportationId = req.body.transportationId;d // var transportationName = req.body.transportationName; ExcelTemplate.find({name: excelTemplateName}).then((data) => { try { if (data && data.length > 0) { var excelTemplate = data[0] || {}; var templateExcel = `${__dirname.replace('/controllers', '')}${excelTemplate?.file[0]?.url}`; var outputFileRandom = Math.ceil(Math.random() * 100000000); var outputFile = `/tmp/${excelTemplate.name}_${outputFileRandom}.xlsx`; var data = fs.readFileSync(templateExcel, 'binary'); var template = new XlsxTemplate(data); var eventDatas = docData.events; for (var i = 0; i < eventDatas.length; i++) { var pageNumber = i + 2; var eventData = eventDatas[i]; // template.copySheet(1, pageNumber); template.copySheet(1, eventData.client_name); // console.log('>>> template substitute:', pageNumber, event); template.substitute(pageNumber, eventData); } template.deleteSheet(1); var newData = template.generate(); fs.writeFileSync(outputFile, newData, 'binary'); var outputFilename = outputFile || {}; var outputPdfPath = outputFilename.substr(0, outputFilename.length - 5) + '.pdf'; console.log('outputPDF:', outputPdfPath); var extend = 'pdf'; 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 xlsx 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: "Sheet Template doesn't exist" }) } } catch(e) { console.log(e); } }).catch(err => { res.status(500).send({ success: false, message: "Error Geting docs" }); }); }) }) }); }) } exports.createSheetFromTemplateName = (req, res) => { console.log('what', __dirname.replace('/controllers', '')); var inputData = JSON.parse(req.query.inputData); const eventIds = inputData?.eventIds; var excelTemplateName = req.query.excelTemplateName; Event.find({ '_id': { $in: eventIds } }).then((events) => { Resource.find({}).then((resources) => { Customer.find({}).then((customers) => { Client.find({}).then((clients) => { const docData = {events: []}; for (const event of events) { const customerModels = event?.data?.customer ? customers: clients; const customerId = event?.data?.customer ? event?.data?.customer : event?.target_uuid; const customer = customerModels.find((customerModel) => customerModel?.id === customerId || customerModel?._id === customerId || customerModel?.name === event?.data?.client_name ); let pharmacyInfo = 'This patient has no contracted pharmacy.\n' + 'Please give the prescription directly to the patient'; const pharmacy = resources.find(r => (r.id === customer?.pharmacy_id)) || resources.find(r => (r.name?.toLowerCase() === event?.data?.client_pharmacy?.toLowerCase())); if (pharmacy) { pharmacyInfo = `${pharmacy?.name} @ ${pharmacy?.address} \n` + `phone:${pharmacy?.phone} fax:${pharmacy?.fax}`; } else { if (event?.data?.client_pharmacy) { pharmacyInfo = 'Pharmacy: ' + event?.data?.client_pharmacy; } } const clientName = (customer?.name_cn && event?.data?.client_name && `${event?.data?.client_name} ${customer?.name_cn}`) || customer?.name_cn || (customer?.lastname && customer?.firstname && `${customer?.lastname}, ${customer?.firstname}`) || event?.data?.client_name; docData.events.push({ event_time: moment(event?.start_time).format('MM/DD/YYYY hh:mm A'), client_name: event?.data?.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?.replaceAll('\n', ' '), //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, // notes: event.data.notes, other: event.data.other, pharmacy_info: pharmacyInfo, client_preferred_name: customer?.name_cn, member_type: customer?.type, disability: (customer?.disability === true) ? 'Yes' : (event?.data?.disability || 'No') }); } // var transportationId = req.body.transportationId;d // var transportationName = req.body.transportationName; ExcelTemplate.find({name: excelTemplateName}).then((data) => { try { if (data && data.length > 0) { var excelTemplate = data[0] || {}; var templateExcel = `${__dirname.replace('/controllers', '')}${excelTemplate?.file[0]?.url}`; var outputFileRandom = Math.ceil(Math.random() * 100000000); var outputFile = `/tmp/${excelTemplate.name}_${outputFileRandom}.xlsx`; var data = fs.readFileSync(templateExcel, 'binary'); var template = new XlsxTemplate(data); var eventDatas = docData.events; for (var i = 0; i < eventDatas.length; i++) { var pageNumber = i + 2; var eventData = eventDatas[i]; // template.copySheet(1, pageNumber); template.copySheet(1, eventData.client_name); // console.log('>>> template substitute:', pageNumber, event); template.substitute(pageNumber, eventData); } template.deleteSheet(1); var newData = template.generate(); fs.writeFileSync(outputFile, newData, 'binary'); console.log('test'); res.download(outputFile, (error) => { if (error) { console.log('Error in downloading excel') } }) console.log('Download finish'); } else { res.status(404).send({ success: false, message: "Sheet Template doesn't exist" }) } } catch(e) { console.log(e); } }).catch(err => { res.status(500).send({ success: false, message: "Error Geting docs" }); }); }) }) }); }) }