compare template tags with received fields

master
shoaibalmasi 4 years ago
parent beda488d84
commit 3d416fb96b
  1. 1
      package.json
  2. 50
      tools/docxtemp.js

@ -13,6 +13,7 @@
"express": "~4.16.1", "express": "~4.16.1",
"http-errors": "~1.6.3", "http-errors": "~1.6.3",
"jalali-moment": "^3.3.10", "jalali-moment": "^3.3.10",
"lodash": "^4.17.21",
"morgan": "~1.9.1", "morgan": "~1.9.1",
"persianjs": "^0.4.0", "persianjs": "^0.4.0",
"pg": "^8.5.1", "pg": "^8.5.1",

@ -2,6 +2,7 @@ const PizZip = require('pizzip');
const Docxtemplater = require('docxtemplater'); const Docxtemplater = require('docxtemplater');
const fs = require('fs'); const fs = require('fs');
const path = require('path'); const path = require('path');
const _ = require("lodash");
// The error object contains additional information when logged with JSON.stringify (it contains a properties object containing all suberrors). // The error object contains additional information when logged with JSON.stringify (it contains a properties object containing all suberrors).
function replaceErrors(key, value) { function replaceErrors(key, value) {
@ -30,26 +31,69 @@ function errorHandler(error) {
throw error; throw error;
} }
class InspectModule {
constructor() {
this.inspect = {};
}
set(obj) {
if (obj.inspect) {
this.inspect = _.merge({}, this.inspect, obj.inspect);
}
}
}
const getTags = function (postParsed) {
return postParsed.filter(function (part) {
return part.type === "placeholder";
}).reduce(function (tags, part) {
tags[part.value] = {};
if (part.subparsed) {
tags[part.value] = getTags(part.subparsed);
}
return tags;
}, {});
}
module.exports = function (templateInfo, fileName) { module.exports = function (templateInfo, fileName) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
//check empty fields
for (const key in templateInfo) { for (const key in templateInfo) {
if (!templateInfo[key]) { if (!templateInfo[key]) {
throw({ throw({
eCode: 406, eCode: 406,
eText: 'empty fields' eText: 'هیچ یک از فیلدها نباید خالی باشند'
}) })
} }
} }
let content = fs.readFileSync(path.resolve(__dirname, `../template/${fileName}`), 'binary'); let content = fs.readFileSync(path.resolve(__dirname, `../template/${fileName}`), 'binary');
let zip = new PizZip(content); let zip = new PizZip(content);
let doc; let doc;
let inspectModule = new InspectModule();
try { try {
doc = new Docxtemplater(zip); doc = new Docxtemplater(zip,{
modules: [inspectModule]
});
} catch (error) { } catch (error) {
errorHandler(error); errorHandler(error);
} }
let postParsed = inspectModule.inspect.postparsed;
let tags = Object.keys(getTags(postParsed))
let templateInfoKeys = Object.keys(templateInfo)
//compare template tags and received fields from client(templateInfo)
for(let i = 0; i < tags.length; i++){
if(!templateInfoKeys.includes(tags[i]) ){
throw({
eCode: 406,
eText: 'اطلاعات وارد شده ناقص است'
})
};
};
doc.setData(templateInfo); doc.setData(templateInfo);

Loading…
Cancel
Save