klnodekb/routes/articles.js

831 lines
23 KiB
JavaScript

const express = require('express');
const router = express.Router();
const numeral = require('numeral');
var fse = require('fs-extra');
var Promise = require('bluebird');
// Bring in article module
let Article = require('../models/article');
let Work=require('../models/works');
let KifCert = require('../models/kifcerts');
var logging=require('../js/helpers');
// User Model
let User = require('../models/user');
var utils = require('../js/utils');
const path = require('path');
var multer = require( 'multer' );
const uuidv4 = require('uuid/v4');
var mv = require('mv');
var ad=false;
var Encoder = require("code-128-encoder");
var Jimp = require("jimp");
var idCounter=0;
var findQuery = Article.find({}).sort({deviceCounter : -1}).limit(1);
var deviceDate= new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '');
var findWorkQuery = Work.find({}).sort({workCounter : -1}).limit(1);
// Új berendezés sorszám generálása
var getNextWorkId=function(callback)
{
// Find last id
var cnt=0;
var findWorkQuery = a.Work.find({}).sort({workCounter : -1}).limit(1);
findWorkQuery.exec(function(err, maxResult){
if (err) {
return callback(err);
}
if (maxResult[0]===undefined)
{
console.log('workCounter undefined...');
cnt=0;
}
else {
cnt=maxResult[0].deviceCounter;
console.log('WorkID: ' + cnt.toString());
}
cnt++;
console.log('Új WorkID: ' + cnt.toString());
callback(null, cnt);
});
}
// Új berendezés sorszám generálása
function getNextDevId(callback)
{
// Find last id
var findQuery = Article.find({'deviceDate': {$gte: new Date().getFullYear()}}).sort({deviceCounter : -1}).limit(1);
var cnt=0;
findQuery.exec(function(err, maxResult){
if (err) {
return callback(err);
}
if (maxResult[0]===undefined)
{
console.log('deviceCounter undefined...');
cnt=0;
}
else {
cnt=maxResult[0].deviceCounter;
}
cnt++;
console.log('Új DevID: ' + cnt.toString());
callback(null, cnt);
});
}
// Delete article
/*
router.post('/delete/:id',utils.ensureAuthenticated, function(req,res){
var id = req.params.id;
Article.findOneAndRemove({_id: id}, function(err){
if(err) {
console.log('Picsa >>'+err);
return res.status(500).send();
}
else {
req.flash('success','Berendezés sikeresen törölve!');
res.redirect('/');
console.log('Picsa >>'+ id);
}
});
});*/
// Delete Article
router.delete('/:mode/:id', function(req, res){
/* if(!req.user._id){
res.status(500).send();
}*/
if (req.params.mode==='A')
{
var ObjectId = require('mongoose').Types.ObjectId;
let query = {_id:req.params.id}
Article.findById(req.params.id, function(err, article){ // Megkeressük a berendezést
Work.findOneAndUpdate({}, { $pull:{'devicesArray': new ObjectId(req.params.id)}}, function (err, docs){ // Megkeressük melyik munkába vettük fel
if (err)
{
console.log(err);
}else {
logging.logAppend("Berendezés törölve.",req.user,article.id,Article.db.name,'ARTICLEREMOVE');
Article.remove(query, function(err){ // Töröljük a berendezést is
if(err){
console.log(err);
}
res.send('Success');
});
}
});
});
}
if (req.params.mode==='F')
{
console.log("File Törölve:" +id);
}
});
// Storage file name to id
var storage = multer.diskStorage({
destination: function (request, file, callback) {
callback(null, './uploads');
},
filename: function (request, file, callback) {
if (file.mimetype.startsWith('image/'))
{
const newFilename = `${uuidv4()}${path.extname(file.originalname)}`;
callback(null, newFilename);
}
else
{
file.fieldname='doc';
callback(null, file.originalname)
}
console.log(file);
//callback(null, file.originalname)
}
});
var upload = multer({storage: storage}).array('photo', 20);
// Add Devices ToRoute
router.get('/addTo/:id', utils.ensureAuthenticated,function (req,res) {
var devId =new Date().getFullYear() ;
// Find last id
console.log('Keres');
var fileObjs=[];
getNextDevId(function(err,did){
if(err)
{
console.log('Hiba: getNextDevId');
}
else {
devId+='/'+numeral(did).format('000');
idCounter=did;
res.render('add_articleTo', {
title: 'Berendezés Felvétele',
deviceID: devId,
workNum: currentWorkNumber,
workID: req.params.id,
userName: req.user.name
});
}
});
});
// Add To Work Submit POST Route
router.post('/addTo/:id',utils.ensureAuthenticated, function(req,res){
req.checkBody('title','Berendezés megnevezése kötelező!').notEmpty();
req.checkBody('workNumber','Munkaszám megadása kötelező!').notEmpty();
req.checkBody('deviceNumber','Berendezés gyártási szám kötelező!').notEmpty();
req.checkBody('workSign','Berendezés jel megadása kötelező!').notEmpty();
// Get errors
let errors = req.validationErrors();
var devId =new Date().getFullYear() ;
if(errors)
{
getNextDevId(function(err,did){
if(err)
{
console.log('Hiba: getNextDevId');
}
else {
devId+='/'+numeral(did).format('000');
idCounter=did;
res.render('add_articleTo', {
title: 'Berendezés Hozzáadása',
errors:errors,
deviceID: devId,
workNum: currentWorkNumber,
workID: req.params.id,
userName: req.user.name
});
}
});
} else {
let article=new Article();
article.title = req.body.title;
article.author = req.user._id;//req.body.author;
article.body = req.body.body;
article.workNumber = req.body.workNumber;
article.workSign = req.body.workSign;
article.deviceNumber=req.body.deviceNumber;
article.deviceCounter=idCounter;
article.deviceDate=deviceDate;
article.filePath='filedata/'+req.params.id+'/'+article._id;
article.save(function(err){
if(err){
console.log(err);
return;
}else{
Work.update( // Hozzáadjuk a munkához a devId-t, majd mentjük a devicet!
{"_id": req.params.id},
{"$push": {"devicesArray": article}},
function(err)
{
if (err)
{
console.log(err);
return;
}
else {
logging.logAppend("Berendezés hozzáadva.",req.user,article.id,Article.db.name,'ARTICLEADD');
// Berendezés könyvtár létrehozása
fse.mkdirs('/'+article.filePath, function(err){
if (err) return console.error(err);
console.log("Könyvtár létrehozva! ->"+article.filePath);
});
//req.flash('success','Berendezés sikeresen hozzáadva');
if (req.body.action==='save')
{
req.flash('success','Berendezés sikeresen hozzáadva.');
res.redirect('/work/'+req.params.id);
}
if (req.body.action==='saveAndNew')
{
req.flash('success','Berendezés sikeresen hozzáadva.');
res.redirect('/articles/addTo/'+req.params.id);
}
}
}
);
}
});
}
});
router.get('/view/*/:file',utils.ensureAuthenticated, function(req, res) {
//response.render('upload');
// console.log('Path:'+req.params[0]+'/'+req.params.file);
res.sendFile('/'+req.params[0]+'/'+req.params.file);
});
// Add Route
router.get('/add', utils.ensureAuthenticated, function (req,res) {
var devId =new Date().getFullYear() ;
// Find last id
console.log('Keres');
getNextDevId(function(err,did){
if(err)
{
console.log('Hiba: getNextDevId');
}
else {
devId+='/'+numeral(did).format('000');
idCounter=did;
res.render('add_article', {
title: 'Berendezés Felvétele',
deviceID: devId,
workNum: currentWorkNumber,
workID: req.params.id,
userName: req.user.name
});
}
});
/*findQuery.exec(function(err, maxResult){
if (err) {
console.log(err);
res.send('404',"Az oldal nem található!");
}
if (maxResult[0]===undefined)
{
console.log('deviceCounter undefined...');
idCounter=0;
}
else {
idCounter=maxResult[0].deviceCounter;
//} do stuff with maxResult[0]
}
idCounter++;
console.log('Kész ' +idCounter);
devId+='/'+numeral('idCounter').format('000');
res.render('add_article', {
title: 'Berendezés Felvétele',
deviceID: devId
});
console.log('Hozzáadás');
});*/
});
// Add Submit POST Route
router.post('/add', utils.ensureAuthenticated,function(req,res){
req.checkBody('title','Berendezés megnevezése kötelező!').notEmpty();
req.checkBody('workNumber','Munkaszám megadása kötelező!').notEmpty();
req.checkBody('deviceNumber','Berendezés gyártási szám kötelező!').notEmpty();
req.checkBody('workSign','Berendezés jel megadása kötelező!').notEmpty();
// Get errors
let errors = req.validationErrors();
if(errors)
{
res.render('add_article', {
title: 'Berendezés Felvétele',
errors:errors
})
} else {
let article=new Article();
article.title = req.body.title;
article.author = req.user._id;//req.body.author;
article.body = req.body.body;
article.workNumber = req.body.workNumber;
article.workSign = req.body.workSign;
article.deviceNumber=req.body.deviceNumber;
article.deviceDate=deviceDate;
article.deviceCounter=idCounter;
article.save(function(err){
if(err){
console.log(err);
return;
}else{
req.flash('success','Berendezés sikeresen hozzáadva');
res.redirect('/');
}
});
}
});
// Get Works By WorkNumber
router.get('/getDeviceByNumber/:nr',utils.ensureAuthenticated, function(req, res) {
var dnr=req.params.nr.replace('_','/');
if (dnr==null)
{
res.send({'device':null,'work':null,'status':200});
}
else
{
Article.findOne({'deviceNumber':dnr},function(err,article){
if (err)
{
res.send({'device':null,'work':null,'status':200});
}
else
{
if (article)
{
// Device keresése a munkákban
Work.findOne({'devicesArray':{$in:[article._id]}}).exec(function (err, foundWork) {
if (err)
{
res.send({'device':null,'work':null,'status':200});
}
else
{
res.send({'device':article,'work':foundWork,'status':200});
}
});
}
else
{
//req.flash('error','Nem található berendezés!');
res.send({'device':null,'work':null,'status':200});
}
}
})
}
});
// Admin check
function checkUserAdmin2(req,callback)
{
// Find last id
if(req.user)
{
//console.log(req.user);
if(req.user.username==='admisJacica' & req.user.auth==='ADMIN')
{
callback(null, true);
}
else {
callback(null, false);
}
}
}
// Gyártmánykísérő Bizonylat generálás
router.post('/gyartmanykisero/:aid/:wid', utils.ensureAuthenticated,function (req,res) {
console.log('Gyartmanykisero Generálás!');
var dt = new Date();
var bornDate= dt.toISOString().replace(/T/, ' ').replace(/\..+/, '');
let query = {_id:req.params.id}
console.log('Update!'+req.params.id);
// CERT
Work.findById(req.params.wid,function(err,work){
if (err)
{
console.log(err);
}
else
{
Article.findById(req.params.aid,function(err,article){
if (err)
{
console.log(err);
}
else
{
console.log(article.title);
var deviceDate= new Date().toISOString().replace(/-/g, '.').substring(0,10);
const PizZip = require("pizzip");
var Docxtemplater = require('docxtemplater');
var fs = require('fs');
var path = require('path');
//Load the docx file as a binary
var content = fs
.readFileSync(__dirname+'/../docs/templates/gyartmanykiserotemplate.docx', 'binary');
var zip = new PizZip(content);
var encoder=new Encoder();
var barcode=encoder.encode(article.deviceNumber);
var doc = new Docxtemplater();
var separation=req.body.separationText;
doc.loadZip(zip);
var year=new Date().getFullYear();
console.log(barcode);
//set the templateVariables
doc.setData({
munkamegnevezes: work.title,
bermegnevezes: article.title,
munkaszam: article.workNumber,
berjele: article.workSign,
gyartasiszam: article.deviceNumber,
mezoszam: separation,
barcode: barcode,
datum: deviceDate,
});
try {
// render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
console.log('Generálás kész!');
doc.render();
}
catch (error) {
var e = {
message: error.message,
name: error.name,
stack: error.stack,
properties: error.properties,
}
console.log(JSON.stringify({error: e}));
// The error thrown here contains additional information when logged with JSON.stringify (it contains a property object).
throw error;
}
var buf = doc.getZip()
.generate({type: 'nodebuffer'});
fs.writeFileSync(__dirname+'/../docs/gyartmanykisero.docx', buf);
//req.flash('success','Berendezés sikeresen hozzáadva');
var fname=article.deviceNumber.replace('/','_')+'_gyártmánykísérő.docx';
res.download(path.normalize(__dirname+'/../docs/gyartmanykisero.docx'),fname);
/* docxConverter(__dirname+'/../docs/gyartmanykisero.docx',__dirname+'/../docs/gyartmanykisero.pdf',function(err,result){
if(err){
console.log(err);
}
console.log('result'+result);
res.sendFile(path.normalize(__dirname+'/../docs/gyartmanykisero.pdf'));
//res.download(path.normalize(__dirname+'/../docs/gyartmanykisero.pdf'),article.title+'_gyártmánykísérő.pdf')
});*/
}
})
}
})
});
// Edit Single Article
router.get('/edit/:id/:wid', utils.ensureAuthenticated,function(req,res){
Article.findById(req.params.id,function(err,article)
{
var ad=false;
checkUserAdmin2(req,function(err,res){ad=res;})
res.render('edit_article', {
title: 'Berendezés módosítás',
article: article,
rot:ad,
wid:req.params.wid
//artice: workSign
});
});
});
// Update Submit Post routes
router.post('/edit/:id/:wid', utils.ensureAuthenticated,function(req,res){
let article = {};
/* req.checkBody('title','Berendezés megnevezése kötelező!').notEmpty();
req.checkBody('workNumber','Munkaszám megadása kötelező!').notEmpty();
req.checkBody('deviceNumber','Berendezés gyártási szám kötelező!').notEmpty();
req.checkBody('workSign','Berendezés jel megadása kötelező!').notEmpty();
*/
article.title = req.body.title;
article.author = req.body.author;
article.body = req.body.body;
article.workNumber = req.body.workNumber;
article.workSign = req.body.workSign;
article.deviceNumber=req.body.deviceNumber;
article.deviceCounter=idCounter;
let query = {_id:req.params.id}
Article.update(query, article, function(err){
if(err){
console.log(err);
return;
}else{
logging.logAppend("Berendezés módosítva.",req.user,article.id,Article.db.name,'ARTICLEEDIT');
req.flash('success','Berendezés adatok sikeresen szerkesztve');
res.redirect('/articles/'+req.params.id+'/'+req.params.wid);
}
});
//}
});
// Get Single Articlel wrom work
router.get('/:id/:wid',utils.ensureAuthenticated,function(req,res){
/*
io.on('connection', function(socket) {
console.log('Client connected...');
socket.join('sessionId');
socket.on('join', function(data) {
console.log(data);
socket.emit('messages', 'Hello from server');
});
});*/
Article.findById(req.params.id,function(err,article)
{
User.findById(article.author, function(err,user){
var wid=req.params.wid;
const testFolder = '/'+article.filePath;
const fs = require('fs');
var admin=false;
var type;
//
console.log(testFolder);
var fileObjs=[];
var docObjs=[];
// var type='img';
fs.readdir(testFolder, (err, files) => {
//files.forEach(file => {
// console.log(file);
//});
if (err) console.log(err);
else
{
files.forEach(element => {
// Képek átméretezése
var a=path.extname(element).toLowerCase();
var ico;
if (!element.startsWith('th',0))
{
// allowed Doc types
if (a==='.doc' || a==='.docx' || a==='.xls' || a==='.xlsx' || a==='.pdf' || a==='.mpc')
{
if (a.toLowerCase()==='.mpc')
{
ico='/weid.jpg';
}
else
if (a.toLowerCase()==='.pdf')
{
ico='/pdf.jpg';
}
else
if (a.toLowerCase()==='.xls' || a.toLowerCase()==='.xlsx')
{
ico='/excel.png';
}
else
if (a.toLowerCase()==='.doc' || a.toLowerCase()==='.docx')
{
ico='/word.png';
}
docObjs.push({filen: element,ico:ico, extension: a});
}
// allowed Imagec types
if (a==='.jpg' || a==='.jpeg' || a==='.png')
{
ico='/articles/view/'+article.filePath+'/'+element;
fileObjs.push({filen: element,ico:ico, extension: a});
}
}
});
}
if(req.user)
{
checkUserAdmin2(req,function(err,res){
admin=res;
console.log(admin);
});
}
KifCert.find({deviceId: article.id},function(err,certs)
{
//console.log(certs);
if (err)
{
res.render('article', {
article: article,
author: 'Nem tudni',
rot: admin,
workId: wid,
fileObjs:fileObjs,
docObjs: docObjs,
certs: certs,
});
}else {
res.render('article', {
article: article,
author: user.name,
rot: admin,
workId: wid,
fileObjs:fileObjs,
docObjs: docObjs,
certs: certs
});
}
});
})
});
});
});
var fs = Promise.promisifyAll(require('fs'));
function moveFiles(srcDir, destDir) {
return fs.readdirAsync(srcDir).map(function(file) {
var destFile = path.join(destDir, file);
console.log(destFile);
return fs.renameAsync(path.join(srcDir, file), destFile).then(function() {
return destFile;
});
});
}
router.post('/upload/:id/:wid', function(request, response) {
var total = request.headers['content-length'];
// var progress = 0;
/*request.on('data', function (chunk) {
progress += chunk.length;
var perc = parseInt((progress / total) * 100);
// console.log('percent complete: ' + perc + '%\n');
io.on('connection', function(socket) {
socket.emit('messages', perc );
});
status = perc;
});*/
upload(request, response, function(err) {
if(err) {
console.log('Error Occured'+err);
return;
}
//Generating thumbnails
// get the temporary location of the file
var srcDir = './uploads/';//+request.files[0].filename;
// set where the file should actually exists - in this case it is in the "images" directory
var destDir = '/'+request.body.destPath ;//+request.files[0].filename;
// move the file from the temporary location to the intended location
// Könyvtár létrehozása ha nem létezik
if (!fs.existsSync(destDir)){
fs.mkdirSync(destDir, { recursive: true });
}
fs.access(destDir, function(err) {
if (err && err.code === 'ENOENT') {
fs.mkdir(destDir);
}
// Fájlok másolása a munkakönyvtárba
moveFiles(path.join(".", srcDir), destDir).then(function(files) {
// all done here
// logging.logAppend("Fájl feltöltés.",req.user,req.params.id,Article.db.name,'UPLOAD');
request.flash('success','Fájlok sikeresen feltöltve');
console.log('fasza');
}).catch(function(err) {
// error here
request.flash('error','Feltöltés sikertelen');
console.log('hiba'+err);
});
});
response.redirect('/articles/'+request.params.id+'/'+request.params.wid);
console.log('Photo Uploaded');
})
});
router.delete('/deleteFile/:id/:wid/:fname', function(request, response) {
var fpath="/filedata/"+request.params.id+"/"+request.params.wid+"/"+request.params.fname;
fse.stat(fpath, function(err,stats){
if (err)
{
request.flash('error','Fájl eltávolítás sikertelen');
response.redirect('/articles/');
return;
}
fse.unlink(fpath,function(err){
if (err)
{
request.flash('error','Fájl eltávolítás sikertelen');
response.redirect('/articles/');
return;
}
request.flash('success','Fájl eltávolítás sikeres');
//response.redirect('/articles/');
// res.redirect('/articles/'+req.params.id+'/'+req.params.wid);
response.send('Success');
});
});
console.log('Fájl törölve');
});
module.exports = router;