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

414 lines
16 KiB
JavaScript

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