Compare commits

...

3 Commits

  1. 21
      migrations/20210325163147-addNewColumn.js
  2. 15
      migrations/20210325170616-changeCodeMelliType.js
  3. 4
      models/user.js
  4. 1
      package.json
  5. 51
      routes/users.js
  6. 24
      services/user.js
  7. BIN
      template/Hform4.docx
  8. 17
      tools/docxtemp.js

@ -0,0 +1,21 @@
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return Promise.all([
queryInterface.addColumn('Users', 'healthCenter', {
type: Sequelize.STRING,
allowNull: true,
}),
queryInterface.addColumn('Users', 'healthCenterCity', {
type: Sequelize.STRING,
allowNull: true,
}),
]);
},
down: (queryInterface) => {
return Promise.all([queryInterface.removeColumn('Users', 'healthCenter'),
queryInterface.removeColumn('Users', 'healthCenterCity')]);
},
};

@ -0,0 +1,15 @@
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return Promise.all([
queryInterface.changeColumn('Users', 'codeMelli', {
type: Sequelize.STRING,
}),
]);
},
down: (queryInterface) => {
return Promise.all([queryInterface.changeColumn('Users', 'codeMelli')]);
},
};

@ -17,7 +17,7 @@ module.exports = (sequelize, DataTypes) => {
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
fatherName: DataTypes.STRING,
codeMelli: DataTypes.BIGINT,
codeMelli: DataTypes.STRING,
workUnit: DataTypes.STRING,
workUnitCode: DataTypes.INTEGER,
address: DataTypes.TEXT,
@ -28,6 +28,8 @@ module.exports = (sequelize, DataTypes) => {
writtenOrderNumber: DataTypes.INTEGER,
writtenOrderDate: DataTypes.DATE,
deadline: DataTypes.INTEGER,
healthCenter: DataTypes.STRING,
healthCenterCity: DataTypes.STRING,
deadlineUnit: {
type: DataTypes.STRING,
defaultValue: 'روز'

@ -14,6 +14,7 @@
"http-errors": "~1.6.3",
"jalali-moment": "^3.3.10",
"morgan": "~1.9.1",
"persianjs": "^0.4.0",
"pg": "^8.5.1",
"pizzip": "^3.0.6",
"sequelize": "^6.5.0"

@ -6,22 +6,42 @@ var path = require('path');
router.post('/add', function (req, res) {
let flag = false;
let emptyFieldsArray =[]
const userInfo = {
firstName: req.body.firstName,
lastName: req.body.lastName,
fatherName: req.body.fatherName,
codeMelli: req.body.codeMelli,
workUnit: req.body.workUnit,
workUnitCode: req.body.workUnitCode,
address: req.body.address,
obligationNumber: req.body.obligationNumber,
obligationDate: req.body.obligationDate,
requestNumber: req.body.requestNumber,
requestDate: req.body.requestDate,
writtenOrderNumber: req.body.writtenOrderNumber,
writtenOrderDate: req.body.writtenOrderDate,
deadline: req.body.deadline
firstName: req.body.firstName.trim(),
lastName: req.body.lastName.trim(),
fatherName: req.body.fatherName.trim(),
codeMelli: req.body.codeMelli.trim(),
workUnit: req.body.workUnit.trim(),
workUnitCode: req.body.workUnitCode.trim(),
address: req.body.address.trim(),
obligationNumber: req.body.obligationNumber.trim(),
obligationDate: req.body.obligationDate.trim(),
requestNumber: req.body.requestNumber.trim(),
requestDate: req.body.requestDate.trim(),
writtenOrderNumber: req.body.writtenOrderNumber.trim(),
writtenOrderDate: req.body.writtenOrderDate.trim(),
deadline: req.body.deadline.trim(),
deadlineUnit: req.body.deadlineUnit.trim(),
healthCenter: req.body.healthCenter.trim(),
healthCenterCity: req.body.healthCenterCity.trim()
}
for (const key in userInfo) {
if (!userInfo[key] || !userInfo[key].trim()) {
emptyFieldsArray.push(key)
flag = true
}
}
if(flag){
res.status(406).send({
success: false,
emptyFields : emptyFieldsArray,
error: `پر کردن همه فیلدها الزامی است`
})
}else {
userServeice.addUser(userInfo)
.then((result) => {
res.status(200).send({
@ -46,6 +66,8 @@ router.post('/add', function (req, res) {
}
})
}
});
router.post('/complete/form', function (req, res) {
@ -57,6 +79,7 @@ router.post('/complete/form', function (req, res) {
})
})
.catch(err => {
console.log(err);
if (err.eText) {
if (typeof err.eText !== 'string') {
err.eText = err.eText.toString()

@ -1,5 +1,6 @@
const models = require('../models')
const jalali = require("jalali-moment");
const persianjs = require('persianjs')
const docxTemp = require('../tools/docxtemp')
@ -56,11 +57,26 @@ methods.completeForm =(userId)=>{
.then(user=>{
let userInfo = user
userInfo.fullName = user.firstName + ' ' + user.lastName
userInfo.deadlineAndUnit = user.deadline + ' ' + user.deadlineUnit
userInfo.obligationDate = jalali( user.obligationDate, 'YYYY/MM/DD').locale('fa').format('YYYY/MM/DD')
userInfo.requestDate = jalali( user.requestDate, 'YYYY/MM/DD').locale('fa').format('YYYY/MM/DD')
userInfo.writtenOrderDate = jalali( user.writtenOrderDate, 'YYYY/MM/DD').locale('fa').format('YYYY/MM/DD')
userInfo.codeMelli = persianjs(user.codeMelli).englishNumber().toString();
userInfo.workUnitCode = persianJs(user.workUnitCode).englishNumber().toString();
userInfo.obligationNumber = persianJs(user.obligationNumber).englishNumber().toString();
userInfo.requestNumber = persianJs(user.requestNumber).englishNumber().toString();
userInfo.writtenOrderNumber = persianJs(user.writtenOrderNumber).englishNumber().toString();
userInfo.deadline = persianJs(user.deadline).englishNumber().toString();
userInfo.deadlineAndUnit = userInfo.deadline + ' ' + userInfo.deadlineUnit
userInfo.obligationDate = jalali( user.obligationDate, 'YYYY/MM/DD').locale('fa').format('DD/MM/YYYY')
userInfo.requestDate = jalali( user.requestDate, 'YYYY/MM/DD').locale('fa').format('DD/MM/YYYY')
userInfo.writtenOrderDate = jalali( user.writtenOrderDate, 'YYYY/MM/DD').locale('fa').format('DD/MM/YYYY')
userInfo.obligationDate = persianJs(user.obligationDate).englishNumber().toString();
userInfo.requestDate = persianJs(user.requestDate).englishNumber().toString();
userInfo.writtenOrderDate = persianJs(user.writtenOrderDate).englishNumber().toString();
return docxTemp(userInfo, userInfo.fileName)
}).then(link=>{

Binary file not shown.

@ -30,8 +30,16 @@ function errorHandler(error) {
throw error;
}
module.exports = function (userInfo, fileName) {
module.exports = function (templateInfo, fileName) {
return new Promise((resolve, reject) => {
for (const key in templateInfo) {
if (!templateInfo[key]) {
throw({
eCode: 406,
eText: 'empty fields'
})
}
}
let content = fs.readFileSync(path.resolve(__dirname, `../template/${fileName}`), 'binary');
let zip = new PizZip(content);
let doc;
@ -39,10 +47,11 @@ module.exports = function (userInfo, fileName) {
try {
doc = new Docxtemplater(zip);
} catch (error) {
errorHandler(error);
}
doc.setData(userInfo);
doc.setData(templateInfo);
try {
doc.render()
@ -53,8 +62,8 @@ module.exports = function (userInfo, fileName) {
let buf = doc.getZip().generate({
type: 'nodebuffer'
});
fs.writeFileSync(path.resolve(__dirname, `../public/files/${userInfo.firstName}-${userInfo.lastName}-${fileName}`), buf);
resolve(`http://localhost:3000/users/download/${userInfo.firstName}-${userInfo.lastName}-${fileName}`)
fs.writeFileSync(path.resolve(__dirname, `../public/files/${templateInfo.firstName}-${templateInfo.lastName}-${fileName}`), buf);
resolve(`http://localhost:3000/users/download/${templateInfo.firstName}-${templateInfo.lastName}-${fileName}`)
.catch(err => {
reject({

Loading…
Cancel
Save