First Commit
This commit is contained in:
413
app/controllers/xlsxtemplate.controller.js
Normal file
413
app/controllers/xlsxtemplate.controller.js
Normal file
@@ -0,0 +1,413 @@
|
||||
// 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"
|
||||
});
|
||||
});
|
||||
|
||||
})
|
||||
})
|
||||
});
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user