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;