//console.log('Hello world!'); const express=require('express'); const https = require('https'); var http = require('http'); const path= require('path'); const mongoose=require('mongoose'); const bodyParser=require('body-parser'); const numeral = require('numeral'); const expressValidator = require('express-validator'); const flash = require('connect-flash'); const session = require('express-session'); const passport = require('passport'); const config = require('./config/database'); var fse = require('fs-extra'); var utils = require('./js/utils'); var logging=require('./js/helpers'); const moment = require('moment'); let DailyReport = require('./models/dailyreport_model'); let Employee = require('./models/employee'); //const capi=require('./js/calendarApi'); //var gitVersion = require('git-tag-version'); const { mongo } = require('mongoose'); var PdfPrinter=require('pdfmake'); //const util = require('util'); //var currentWorkNumber=0; const { XMLParser, XMLBuilder, XMLValidator} = require("fast-xml-parser/src/fxp"); const { apiSaveReport, apiGetReport, apiGetReportList, apiGetUsers, apiGetReportDates, apiUpdateReport } = require('./js/workReport.js'); let WorkReport = require('./models/workReportModel'); moment.locale('HU'); const fss = require('fs'); global.currentWorkNumber=0; mongoose.Promise = global.Promise; var os = require('os'); console.log(os.type()); if (os.type()==='Windows_NT') { mongoose.connect('mongodb://admin:MarkoSn1Pb1@iotechnic.eu:27017/nodekb', { useFindAndModify: false , useNewUrlParser: true,useUnifiedTopology: true }) .then(() => { console.log('Connected to MongoDB'); }).catch((error) => { console.error('Error connecting to MongoDB:', error); }); } else { mongoose.connect('mongodb://admin:MarkoSn1Pb1@localhost/nodekb', { useFindAndModify: false , useNewUrlParser: true,useUnifiedTopology: true }) .then(() => { console.log('Connected to MongoDB'); }).catch((error) => { console.error('Error connecting to MongoDB:', error); }); } //mongoose.connect('mongodb://nodeUser:Kutafaja1234@localhost/nodekb',{ useMongoClient: true,useFindAndModify: false , useNewUrlParser: true,useUnifiedTopology: true }); //mongoose.connect('mongodb://admin:MarkoSn1Pb1@iotechnic.eu:27017/nodekb',{ useMongoClient: true }); let db = mongoose.connection; //var fsa = require("fs-iconv"); //import * as fss from 'fs-iconv'; //autoIncrement.initialize(mongoose.connection); //const sql=require('./js/sqlexpress'); //TEST // set globals // Check for DB errors db.on('error', function(err) { console.log(err); }); // Check connection db.once('openUri', function(){ console.log('Connected to MongoDB') }); // Init app const app = express(); //var server=require('http').createServer(app); //global.io = require('socket.io')(server); // Bring in models let Article = require('./models/article') let Work=require('./models/works') let User = require('./models/user'); let KifCert = require('./models/kifcerts'); let Log = require('./models/logmodel'); let Item = require('./models/item'); let Pdata = require('./models/pdata'); let Component= require('./models/component'); require('./js/cmHelper') //let Tool = require('./models/tool') var wCounter=0; var findWorkQuery = Work.find({'workNumber': /EMSZ/,'workDate': {$gte: new Date().getFullYear()} }).sort({workNumber : -1}).limit(1); var utils = require('./js/utils'); function ensureExists(path, mask, cb) { if (typeof mask == 'function') { // allow the `mask` parameter to be optional cb = mask; mask = 0o777; } fs.mkdir(path, mask, function(err) { if (err) { if (err.code == 'EEXIST') cb(null); // ignore the error if the folder already exists else cb(err); // something else went wrong } else cb(null); // successfully created folder }); } /* // Utolsó munkaszám function getLastWorkNumber(callback){ var yr= new Date().getFullYear(); Work.find({'workNumber': {"$ne": 'EMSZ'},'workNumber': {$gte: yr} }).sort({workNumber : -1}).limit(1).exec(function(err, maxResult){ if (err) { return callback(err); } if (maxResult[0]===undefined) { console.log('workCounter undefined...'); cnt=0; } else { var wk=maxResult[0]; console.log('Utoljára felvett munka: ' + wk.workNumber); callback(null, wk); } console.log('Error, invalid work' ); callback('Error, invalid work', null); }); }*/ // Új munka sorszám generálása function getNextWorkId(callback) { // Find last id var yr= new Date().getFullYear(); var cnt=0; var a = new Pdata(); /* a.workCounter=0; a.save(function(err){ if(err){ console.log(err); return; } });*/ /* Pdata.findOne({},function(err,obj) { if (err) { console.log('Hiba a pdata keresése közben.'); return callback(err); } console.log('Pdata: '+obj); var wid=obj.workCounter+1; console.log('Új WorkID: ' + wid.toString()); callback(null, wid); });*/ // findWorkQuery.exec(function(err, maxResult){ Work.find({'workNumber': {"$ne": 'EMSZ'},'workNumber': {$gte: yr} }).sort({workNumber : -1}).limit(1).exec(function(err, maxResult){ if (err) { return callback(err); } if (maxResult[0]===undefined) { console.log('workCounter undefined...'); cnt=0; } else { if (maxResult[0].workCounter==undefined) { cnt=1; } else { cnt=maxResult[0].workCounter; } console.log(maxResult[0].workCounter); } cnt++; console.log('Új WorkID: ' + cnt.toString()); callback(null, cnt); }); } // Load view engine app.set('views',path.join(__dirname,'views')); app.set('view engine','pug'); // Body parser MW // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) // parse application/json app.use(bodyParser.json()) // Set Public folder app.use(express.static(path.join(__dirname, 'node_modules/pdfmake'))); app.use(express.static(path.join(__dirname, 'node_modules/inputmask'))); app.use(express.static(path.join(__dirname, 'node_modules/lightpick'))); app.use('/fullcalendar',express.static(path.join(__dirname, 'node_modules/@fullcalendar'))); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'media'))); app.use(express.static(path.join(__dirname, 'docs'))); app.use(express.static(path.join(__dirname, '/views/Modals'))); app.use(flash()); // Express session middlevare app.use(session({ secret: 'keyboard cat', resave: true, saveUninitialized: true })) // Express messages middleware app.use(require('connect-flash')()); app.use(function (req, res, next) { res.locals.messages = require('express-messages')(req, res); next(); }); app.use(expressValidator({ errorformatter: function(param, msg, value){ var namescape = param.split('.') , root = namespace.shift() , formParam = root; while(namespace.length){ formParam += '[' + namespace.shift() + ']'; } return { param : formParam, msg: msg, value: value }; } })); // Passport Config require('./config/passport')(passport); // Passport Middleware app.use(passport.initialize()); app.use(passport.session()); app.get('*', function(req, res, next){ res.locals.user = req.user || null; next(); }); // 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); } } } app.get('/apiGetQRCode/:apiKey',function(req,res){ apiGetQRCode(req.params.apiKey,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) app.get('/apiGetWorkState/:apiKey',function(req,res){ apiGetWorkState(req.params.apiKey,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) app.get('/apiworklist/:apiKey',function(req,res){ apiGetWorkList(req.params.apiKey,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) app.get('/apiCheckDevice/:deviceId',function(req,res){ apiCheckDevice(req.params.deviceId,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) app.post('/apiRequestAPIkey',function(req,res){ if (!req.body.username) { res.status(404); res.send('Hiányzó felhasználó név!'); return; } if (!req.body.password) { res.status(404); res.send('Hiányzó jelszó!'); return; } apiRequestAPIkey(req.body.username,req.body.password,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) app.post('/apiRegisterDevice',function(req,res){ if (!req.body.deviceId) { res.status(404); res.send('Hiányzó eszköz azonosító!'); return; } if (!req.body.username) { res.status(404); res.send('Hiányzó felhasználó név!'); return; } if (!req.body.password) { res.status(404); res.send('Hiányzó jelszó!'); return; } if (!req.body.deviceType) { res.status(404); res.send('Hiányzó eszköz típus!'); return; } apiRegisterDevice(req.body.deviceId,req.body.username,req.body.password,req.body.deviceType,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) app.get('/apiemployee/:apiKey',function(req,res){ apiEmployee(req.params.apiKey,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { if (w){ res.setHeader('Content-Type', 'application/json'); res.send(w); } else { //res.setHeader('Content-Type', 'application/json'); res.sendStatus(401); } } }) }) app.get('/apiemployeelist/:apiKey',function(req,res){ apiGetEmployeeList(req.params.apiKey,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) app.get('/apiGetDailyReport/:apiKey',function(req,res){ apiGetDailyReport(req.params.apiKey,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) app.get('/apiGetAllReport/:apiKey',function(req,res){ apiGetAllReport(req.params.apiKey,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) app.get('/apiGetAllWork/:apiKey',function(req,res){ apiGetWorkList(req.params.apiKey,function(err,w){ if (err) { res.setHeader('Content-Type', 'application/json'); res.send(err); } else { res.setHeader('Content-Type', 'application/json'); res.send(w); } }) }) // Napi jelentés mentése app.post('/apiPostDailyReport/:apiKey',function(req,res){ console.log('APIKEY: '+req.params.apiKey); var response; apiEmployee(req.body.userApiKey,function(err,foreman){ if (foreman) { /* console.log(req.body.selectedworks); console.log(req.body.worktitle); console.log(req.body);*/ var employeeList=[]; employeeList.push(req.body.employeeList); console.log(req.body) var dr={ 'date': req.body.date, 'foremanId': foreman.id, 'workTitle': req.body.msg, 'employeeList':req.body.employeeList } Work.updateOne({'_id':req.body.workId}, { $push: {'dailyReport':dr}}, function(err,rep) { if (err) { console.log(err); } else { res.setHeader('Content-Type', 'application/json'); res.send({'response':'OK'}); } } ); } else { res.setHeader('Content-Type', 'application/json'); res.send({'response':'Fail','message':'Invalid ApiKey'}); } }) //emp.vacationUsed= }) // Munka lista lekérése és szűrése AJAX CALL app.get('/filter', utils.ensureAuthenticated, async function(req, res) { //console.log(req.query.year.value); const year=new RegExp("^"+req.query.year); const condition=new RegExp(req.query.condition); var query={ $or:[ {"megrendelo": { "$regex": condition, "$options": "i" }}, {$and: [ {"workDate": { "$regex": year, "$options": "i" }}, {"title":{ "$regex": condition, "$options": "i" }} ] },{$and: [ {"workDate": { "$regex": year, "$options": "i" }}, {"poNumber":{ "$regex": condition, "$options": "i" }} ] } ] }; var works=await Work.find(query,null,{sort: {workNumber: -1}})// ,function(err, works){ if (!works) { console.log('ERR:'+err); } var workrReportCount= await WorkReport.aggregate( [ {$unwind: '$workFlow'}, {"$project": { "_id":"$workFlow._id", "wid":"$workId", "el":"$workFlow.employeeList", "count": {$size:"$workFlow.employeeList"}, } }, { $group: { _id: '$wid', 'workName': {$push:'$count'} } },{ $project: { total: { $reduce: { input: "$workName", initialValue: 0, in: { $add: ["$$value", "$$this"] } } } } } ] ) // Server side table generation var drCount=''; var wrCount=''; var tr=''; works.forEach((work,index,array) =>{ var dr=work.dailyReport; var wc=0; var etemp=""; var wrc=findById(workrReportCount,work._id) if (wrc) { work.wrc=wrc.total*8 } else { work.wrc=0; } dr.forEach((el,index,arr)=>{ wc+=el.employeeList.length; }); work.wc=wc*8; var megrendelo=work.megrendelo || '-' //for (var i = 0; i < works.length; i++) { var po='-'; // var work=works[i]; var state=""; if (work.poNumber!=undefined) po=work.poNumber; if (work.state==='Opened') state=''; else state='' if (work.enaploTemplate) { etemp=''; } if (work.wc>0) drCount= '' + work.wc+''; else drCount='' + work.wc+''; if (work.wrc>0) wrCount= '' + work.wrc+''; else wrCount='' + work.wrc+''; tr+=''+(index+1)+''+ etemp+ //img(src='enaplo.png', width='16px', height='16px',style='text-align:center;vertical-align: middle',data-original-title='Enapló köteles' data-toggle='tooltip' data-placement='bottom' data-container='body')'+ '' +megrendelo+''+ ''+ work.title+''+ '' + moment(work.workDate).format('YYYY.MM.DD') + ''+ state+ '' + work.workNumber+''+ drCount+ wrCount+ '' + po+''+ '' + work.devicesArray.length+'' }); res.send(tr); // } //}); }); var charToByte = exports.charToByte = function charToByte(c) { return c.charCodeAt(0) < 128 ? c.charCodeAt(0) // This is english alphabet : c.charCodeAt(0) - 0x0e01 /* Utf8 ก */ + 161; /* Window-874 ก*/ }; var toByteArray = exports.toByteArray = function toByteArray(s) { return s.split('').map(function (c) { return charToByte(c); }); }; var utf8ToAnsi = exports.utf8ToAnsi = function utf8ToAnsi(s) { return toByteArray(s).map(function (c) { return String.fromCharCode(c); }).reduce(function (converted, c) { return converted + c; }); }; // Generate enaplo XML app.get('/work/generateXML/:wid/:drid',utils.ensureAuthenticated,function(req,res){ Work.findById(req.params.wid,function(err,work){ if (work.dailyReport) { const key=Object.keys(work.dailyReport).find(rep=>work.dailyReport[rep].id===req.params.drid); var enDate=work.dailyReport[key].date; //console.log(work.dailyReport[key].date); //console.log(work.dailyReport[key].workTitle);// find({_id:req.params.drid}, function(err,res){ //const enaplodata={azonosito:null}; if (work.enaploTemplate) { const options = { attrPrefix: "a_", textNodeName: "t_", ignoreAttributes : false, textNodeConversion: true, textAttrConversion: true , attributeNamePrefix: 'a_', }; const parser = new XMLParser(options); let json = parser.parse(work.enaploTemplate); //enaplodata.azonosito=json.file.nyomtatvanyok.nyomtatvany.nyomtatvanyinformacio.nyomtatvanyazonosito; var resul=[]; resul= json.file.nyomtatvanyok.nyomtatvany.mezok.mezo; // Napi dátum /*resul.find(item=>item.a_eazon==='0_0A0001D008A').t_=moment(enDate,'YYYY.MM.DD').format('YYYYMMDD'); resul.find(item=>item.a_eazon==='0_0A0001E001A').t_=moment(enDate,'YYYY.MM.DD').format('YYYYMMDD'); resul.find(item=>item.a_eazon==='0_0B0001D008A').t_=moment(enDate,'YYYY.MM.DD').format('YYYYMMDD'); resul.find(item=>item.a_eazon==='0_0C0001D008A').t_=moment(enDate,'YYYY.MM.DD').format('YYYYMMDD');*/ //resul.find(item=>item.a_eazon==='0_0D0001D008A').t_=moment(enDate,'YYYY.MM.DD').format('YYYYMMDD'); //const fs = require('fs'); var enaploContent={}; var resztvevok=[]; enaploContent.workName=work.title; enaploContent.docName=json.file.nyomtatvanyok.nyomtatvany.nyomtatvanyinformacio.nyomtatvanyazonosito;// "OENY_ENAPLO_NAPI_370826709_2021_1513_53-5"; enaploContent.nyomtatvanyVerzio=json.file.nyomtatvanyok.nyomtatvany.nyomtatvanyinformacio.nyomtatvanyverzio; enaploContent.programVerzio=json.file.nyomtatvanyok.abev.programverzio; enaploContent.docId=json.file.nyomtatvanyok.nyomtatvany.nyomtatvanyinformacio.nyomtatvanyazonosito;//"OENY_ENAPLO_NAPI_370826709_2021_1513_53-5"; enaploContent.naploAzonosito=resul.find(item=>item.a_eazon==='0_0A0001D001A').t_; enaploContent.alnaploAzonosito=resul.find(item=>item.a_eazon==='0_0A0001D003A').t_; enaploContent.enaploAzonositoNev=resul.find(item=>item.a_eazon==='0_0A0001D002A').t_; enaploContent.enaploAlnaploNev=resul.find(item=>item.a_eazon==='0_0A0001D004A').t_; enaploContent.feltoltoNUJ=resul.find(item=>item.a_eazon==='0_0A0001D005A').t_; enaploContent.feltoltoNev=resul.find(item=>item.a_eazon==='0_0A0001D006A').t_; enaploContent.epitesiHelyszin=resul.find(item=>item.a_eazon==='0_0A0001D007A').t_; enaploContent.munkaidoKezdeteHH="7"; enaploContent.munkaidoVégeHH="16"; enaploContent.bejegyzesDatuma=moment(enDate,'YYYY.MM.DD').format('YYYYMMDD'); enaploContent.bejegyzesIdopont="10"; enaploContent.jelentesSzovege=work.dailyReport[key].workTitle; resztvevok.push({"szakma":"Épületvillamossági szerelő, villanyszerelő","szama":work.dailyReport[key].employeeList.length}); enaploContent.resztvevok=resztvevok; generateXML(enaploContent, function(result){ //const fs = require('fs'); fse.outputFile(path.normalize(__dirname+'/../enaplo/enContent.xml'), result.result, function(err) { if(err) { return console.log(err); } var fn="EN_"+enaploContent.workName+"_"+enaploContent.bejegyzesDatuma+".frm.enyk"; const destfilename = fn.replaceAll(" ", "_"); res.download(path.normalize(__dirname+'/../enaplo/enContent.xml'),destfilename); console.log("The file was saved!"); }); // Set disposition and send it. }); /*var enaploContent=""; enaploContent+="$ny_azon="+json.file.nyomtatvanyok.nyomtatvany.nyomtatvanyinformacio.nyomtatvanyazonosito+"\n"; enaploContent+="$sorok_száma=26\n" enaploContent+="$d_lapok_száma=1\n$d_lap1=NAPI_JELENTÉSEK,1\n" enaploContent+="$info=\n" enaploContent+="8="+moment(enDate,'YYYY.MM.DD').format('YYYYMMDD')+"\n"; enaploContent+="10=X\n"; enaploContent+="167=Épületvillamossági szerelő, villanyszerelő\n"; enaploContent+="168="+work.dailyReport[key].employeeList.length+"\n"; enaploContent+="236=7\n"; enaploContent+="237=0\n"; enaploContent+="238=17\n"; enaploContent+="239=0\n"; enaploContent+="217[1]=9\n"; enaploContent+="218[1]=0\n"; enaploContent+="219[1]="+work.dailyReport[key].workTitle+"\n"; enaploContent+="234[1]=napi jelentés\n"; enaploContent+="303[1]=Kivitelező - napijelentésért felelős\n"; const buffer = Buffer.from(enaploContent, 'latin1') var str = utf8ToAnsi(enaploContent);*/ // fsa.saveFile("c:/tmp/test"+moment(enDate,'YYYY.MM.DD').format('YYYYMMDD')+'.imp',enaploContent,{encoding:'win1251'}); /*fss.writeFile("c:/tmp/test"+moment(enDate,'YYYY.MM.DD').format('YYYYMMDD')+'.imp', str, function(err) { //const builder=XMLBuilder(); //const xmlContent=builder.build(json); console.log("OK.."); //enaplodata.project=resul.find(item=>item.a_eazon==='0_0C0001D002A').t_; //enaplodata.helyszin=resul.find(item=>item.a_eazon==='0_0B0001D007A').t_; //enaplodata.munka=resul.find(item=>item.a_eazon==='0_0DXXXXD004A').t_; }); */ } } }); console.log('HAHA'); // var data={result:'HAHA'}; // res.send(data); }); function findById(array, id) { return array.find(item => { const a=String(item._id) const b=String(id) //if (a===b)console.log(`IDS A: ${a} B: ${b}`) return a===b;}); } // Works Route app.get('/', utils.ensureAuthenticated,async function(req, res) { var admin=false; //var ver=gitVersion(); //capi.apiCalendar(); if (req.user.isEmployee) { res.redirect('/employee/accesslist'); return; } var works=await Work.find({},null,{sort: {workNumber: -1}})// ,function(err, works){ if (!works) { console.log(err); } // else { var workrReportCount= await WorkReport.aggregate( [ {$unwind: '$workFlow'}, {"$project": { "_id":"$workFlow._id", "wid":"$workId", "el":"$workFlow.employeeList", "count": {$size:"$workFlow.employeeList"}, } }, { $group: { _id: '$wid', 'workName': {$push:'$count'} } },{ $project: { total: { $reduce: { input: "$workName", initialValue: 0, in: { $add: ["$$value", "$$this"] } } } } } ] ) works.forEach((element,index,array) =>{ var dr=element.dailyReport; var wrc=findById(workrReportCount,element._id) var wc=0; dr.forEach((el,index,arr)=>{ wc+=el.employeeList.length; }); element.wc=wc*8; if (wrc) { element.wrc=wrc.total*8 } else { element.wrc=0; } }); //--------------------------------- res.render('index', { title: 'Munkák', works: works, rot: req.user.isAdmin, }); // } //else }); //}); // Works Route app.get('/work/layout_table',utils.ensureAuthenticated, function(req, res) { res.render('layout_table', { title: 'Munkák' // articles: workSign }); }); // Edit Work Route app.get('/work/edit/:id', utils.ensureAuthenticated,function (req,res) { Work.findById(req.params.id,function(err,work){ if(err) { console.log(err); } else { var wnE=work.workNumber.substring(0,4); var wnY=work.workNumber.substring(5,9); var wnN=work.workNumber.substring(10,14); res.render('edit_work', { title: work.title+' módosítása:', work: work, wCustom: wnE, wYear: wnY, wNumber: wnN }); } }); }); // Enapló minta feltöltése // Update Work data app.post('/work/enaploUpload/:id', utils.ensureAuthenticated,function(req,res){ let query = {_id:req.params.id} var XMLdata = req.body;// req.body; // var result = XMLdata.substring(1, XMLdata.length-1); //console.log(XMLdata.xml); if (XMLValidator.validate(XMLdata.xml)===true){ Work.findByIdAndUpdate(req.params.id,{ $set: {enaploTemplate:XMLdata.xml}}, function(err){ if(err){ console.log(err); return; }else{ //console.log(Work.db.name); //logging.logAppend("Munka módosítása.",req.user,req.params.id,Work.db.name,'WORKEDIT'); req.flash('success','e-napló minta sikeresen feltöltve.'); res.send('Success'); // XMLDocument(XMLdata.xml); } }); } else res.send('ERR!'); /* Work.findByIdAndUpdate(req.params.id,{$set:{'enaplodata':req.body.title,'body':req.body.body,'poNumber':req.body.ponumber,}}, function(err){ if(err){ console.log(err); return; }else{ console.log(Work.db.name); logging.logAppend("Munka módosítása.",req.user,work.id,Work.db.name,'WORKEDIT'); req.flash('success',work.title+' adatai sikeresen szerkesztve'); res.redirect('/work/'+req.params.id); } });*/ }); // Update Work data app.get('/work/close/:id', utils.ensureAuthenticated,function(req,res){ Work.findByIdAndUpdate(req.params.id,{$set:{'state':'Closed'}}, function(err){ if(err){ console.log(err); return; }else{ // console.log(Work.db.name); // logging.logAppend("Munka Lezárása.",req.user,work.id,Work.db.name,'WORKEDIT'); req.flash('success',req.body.title+' sikeresen Lezárva'); res.redirect('/work/'+req.params.id); } }); console.log("Test"); //} }); // Update Work data app.post('/work/edit/:id', utils.ensureAuthenticated,function(req,res){ let work = {}; let query = {_id:req.params.id} work.title = req.body.title; work.author = req.user._id; work.body = req.body.body; work.poNumber=req.body.ponumber; //work.ganttData.duration=req.body.duration; // Work.update(query, work,{$set:{'ganttData.duration':req.body.duration}}, function(err){ Work.findByIdAndUpdate(req.params.id,{$set:{'title':req.body.title,'body':req.body.body,'poNumber':req.body.ponumber,}}, function(err){ if(err){ console.log(err); return; }else{ console.log(Work.db.name); logging.logAppend("Munka módosítása.",req.user,work.id,Work.db.name,'WORKEDIT'); req.flash('success',work.title+' adatai sikeresen szerkesztve'); res.redirect('/work/'+req.params.id); } }); //} }); // Copy Work Route app.get('/work/copy/:id', utils.ensureAuthenticated,function (req,res) { var dt = new Date(); var devId; var wnY=dt.getFullYear(); var workDate= dt.toISOString().replace(/T/, ' ').replace(/\..+/, ''); // Find last id console.log('Keres'); var admin=false; if(req.user) { checkUserAdmin2(req,function(err,res){ admin=res; console.log(admin); }); } Work.findById(req.params.id,function(err,work){ if(err) { req.flash('error','Nem található munka!');// Katt a megtekintéshez.'); console.log('Nem található munka! workID:'+req.param.id); devId=numeral(wid).format('0000'); wCounter=wid; res.render('copy_work', { title: 'Munka másolása', workN: devId, workDate: workDate, dateYear: wnY, rot:admin }); } else { getNextWorkId(function(err,wid){ if(err) { console.log('Hiba: getNextDevId'); } else { //console.log('Kész W' +wid); devId=numeral(wid).format('0000'); wCounter=wid; res.render('copy_work', { title: 'Munka másolása', workN: devId, work: work, workDate: workDate, dateYear: wnY, rot:admin }); } }) }; }); }); // Add Work Route app.get('/work/add', utils.ensureAuthenticated,function (req,res) { var dt = new Date(); var devId; var wnY=dt.getFullYear(); var workDate= dt.toISOString().replace(/T/, ' ').replace(/\..+/, ''); // Find last id console.log('Keres'); var admin=false; if(req.user) { checkUserAdmin2(req,function(err,res){ admin=res; console.log(admin); }); } getNextWorkId(function(err,wid){ if(err) { console.log('Hiba: getNextDevId'); } else { //console.log('Kész W' +wid); devId=numeral(wid).format('0000'); wCounter=wid; res.render('add_work', { title: 'Munka Felvétele', workN: devId, workDate: workDate, dateYear: wnY, duration: 5, rot:admin }); } }); }); // Add Work Submit POST Route app.post('/works/add', utils.ensureAuthenticated,function(req,res){ req.checkBody('title','Munka megnevezése kötelező!').notEmpty(); req.checkBody('workNumber','Munkaszám formátuma nem megfelelő: pl.: 0001').matches('^[0-9][0-9][0-9][0-9]$');//.notEmpty(); // req.checkBody('author','Létrehozó nevének megadása kötelező!').notEmpty(); // req.check('workNumber','Munkaszám fotrmátumnak meg kell felllnie: ÉÉÉÉ/####').matches('^\d{3}$'); //req.checkBody('workSign','Berendezés jel megadása kötelező!').notEmpty(); var dt = new Date(); var wnY=dt.getFullYear(); // Get errors let errors = req.validationErrors(); if(errors) { var admin=false; if(req.user) { checkUserAdmin2(req,function(err,res){ admin=res; console.log(admin); }); } //var devId =numeral(wid).format('0000'); var workDate= dt.toISOString().replace(/T/, ' ').replace(/\..+/, ''); res.render('add_work', { title: 'Munka Felvétele', errors:errors, //workN: workN, user:req.user, workDate: workDate, dateYear: wnY, duration: 5, rot:admin }) } else { let work=new Work(); work.title = req.body.title; work.author = req.user._id; work.body = req.body.body; work.poNumber=req.body.ponumber; if (req.body.workNumberE==="EMSZ") { work.workNumber = "EMSZ-"+req.body.workNumberY+"/"+ req.body.workNumber; work.workCounter=wCounter; } else { work.workNumber = req.body.workNumberY+"/"+ req.body.workNumber; work.workCounter=req.body.workNumber; } console.log(work.workNumber); work.workDate= req.body.workDate; // Munka státusza work.state='Opened'; // Nyitva // Ütemterv work.ganttData.id=work._id; work.ganttData.text=work.title; work.ganttData.start_date=moment().format('DD-MM-YYYY'); work.ganttData.duration=5;//req.body.duration; work.ganttData.progress=0; //db.users.findOne({"username" : {$regex : ".*son.*"}}); Work.findOne({'workNumber': work.workNumber}, function(err,wn) // Megnézzük van e már { if (err){ console.log(err); } else { if (wn) { console.log("Már van ilyen munka"); req.flash('danger','A '+work.workNumber+' munkaszám már foglalt!'); res.redirect('/work/add'); } else { work.save(function(err){ if(err){ console.log(err); return; }else{ // Munka könyvtár létrehozása logging.logAppend("Munka hozzáadása.",req.user,work.id,Work.db.name,'WORKADD'); fse.mkdirs('/filedata/'+work._id, function(err){ if (err) return console.error(err); console.log("Könyvtár létrehozva! ->"+"/filedata/"+work._id); }); req.flash('success','Munka sikeresen felvéve.'); res.redirect('/'); } }); } } }); } }); // Get Single Work app.get('/work/:id',utils.ensureAuthenticated,function(req,res){ Work.findById(req.params.id, function(err,work) // Munka keresése sz ID-je alapján { if (err) { req.flash('danger','A '+req.params.id+' bejegyzés nem található az adatbázisban!'); res.redirect('/'); } else { const enaplodata={azonosito:null}; if (work.enaploTemplate) { const options = { attrPrefix: "a_", textNodeName: "t_", ignoreAttributes : false, textNodeConversion: true, textAttrConversion: true , attributeNamePrefix: 'a_', }; const parser = new XMLParser(options); const json = parser.parse(work.enaploTemplate); enaplodata.azonosito=json.file.nyomtatvanyok.nyomtatvany.nyomtatvanyinformacio.nyomtatvanyazonosito; var resul=[]; resul= json.file.nyomtatvanyok.nyomtatvany.mezok.mezo; enaplodata.project=resul.find(item=>item.a_eazon==='0_0C0001D002A').t_; enaplodata.helyszin=resul.find(item=>item.a_eazon==='0_0B0001D007A').t_; enaplodata.munka=resul.find(item=>item.a_eazon==='0_0DXXXXD004A').t_; } //console.log(`First book: `, json.catalog.book[0]); currentWorkNumber=work.workNumber; //console.log(work.devicesArray); Article.find({ '_id': { $in: work.devicesArray //mongoose.Types.ObjectId("5a5a0dd6a0bc231270e9fe91"), //mongoose.Types.ObjectId('4ed3f117a844e0471100000d'), //mongoose.Types.ObjectId('4ed3f18132f50c491100000e') } }, function(err, docs) { User.findById(work.author, function(err,user){ if (err) { res.render('work', { work: work, articles: docs, author: 'Ismeretlen' }); }else { Work.aggregate([ {$match:{'_id' : work._id}}, {$unwind: '$dailyReport'}, {$unwind: {path:'$dailyReport.employeeList',preserveNullAndEmptyArrays:true}}, // { $group: {_id: '$dailyReport._id', list: {$push: '$dailyReport.employeeList'},'date': {$first: '$dailyReport.date'},'title': {$first: '$dailyReport.workTitle'}}}, {"$lookup": { "localField": "dailyReport.employeeList", "from": "employees", "foreignField": "_id", "as": "books" }}, {$unwind: {path:'$books',preserveNullAndEmptyArrays:true}}, { $group: {_id: '$dailyReport._id','foreman':{$first: '$dailyReport.foremanId'}, list: {$push: '$books'},'date': {$first: '$dailyReport.date'},'title': {$first: '$dailyReport.workTitle'}}}, { $sort : { 'date' : -1 } } ]).exec((err,results)=>{ res.render('work', { dailyReports:results, work: work, articles: docs, author: user.name, enaplodata:enaplodata }); }); } }); } ); } }); }); // Napi jelentések nyomtatása // Get Single Work app.get('/print_report/:id',utils.ensureAuthenticated,function(req,res){ var PdfPrinter=require('pdfmake'); printWork(req.params.id,function(err,data) // Munka keresése sz ID-je alapján { if (err) { req.flash('danger','A '+req.params.id+' bejegyzés nem található az adatbázisban!'); res.redirect('/'); } else { res.send(data); } }); }); // Napi jelentés Nyomtatási kép generálás function printWork(id,callback) { var item=[]; var wName=""; var poNumber=""; var wNumber=""; moment.locale('hu'); item.push([ {text:'#', alignment: 'left'},{text:'Dátum', alignment: 'center'}, {text:'Jelentés', alignment: 'center'}, {text:'Résztvevők', alignment: 'center'}]); var bar = new Promise((resolve, reject) => { Work.aggregate([ {$match:{'_id' : mongo.ObjectId(id)}}, {$unwind: '$dailyReport'}, {$unwind: '$dailyReport.employeeList'}, // { $group: {_id: '$dailyReport._id', list: {$push: '$dailyReport.employeeList'},'date': {$first: '$dailyReport.date'},'title': {$first: '$dailyReport.workTitle'}}}, {"$lookup": { "localField": "dailyReport.employeeList", "from": "employees", "foreignField": "_id", "as": "books" }}, {$unwind: '$books'}, { $group: {_id: '$dailyReport._id','workNumber':{$first:'$workNumber'},'poNumber':{$first:'$poNumber'},'workName':{$first:'$title'},'foreman':{$first: '$dailyReport.foremanId'}, list: {$push: '$books'},'date': {$first: '$dailyReport.date'},'title': {$first: '$dailyReport.workTitle'}}}, { $sort : { 'date' : -1 } } ]).exec((err,results)=>{ wName=results[0].workName; poNumber=results[0].poNumber; wNumber=results[0].workNumber; results.forEach((report,index,array)=>{ var emps=""; report.list.forEach((empl,idx,arr)=>{ emps=emps+empl.name+'\r\n'; }) item.push([ {text: index+1, style:'tableData'}, {text: report.date, style:'tableData', alignment: 'center'}, {text: report.title, style:'tableData', alignment: 'center'}, {text: emps, style:'tableData', alignment: 'center'}, ]); if (index === array.length -1) resolve(); }) }); }); bar.then(() => { // playground requires you to assign document definition to a variable called dd var dd = { pageSize: 'A3', pageOrientation: 'landscape', pageMargins: [ 20, 20, 20, 100 ], //header: 'dsadad', footer: function(currentPage, pageCount) { return { height: 30, stack:[ {text:currentPage.toString() + ' of ' + pageCount, alignment: 'center'}, { columns: [ { image: 'data:image/png;base64,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 \ Q9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcm \ RmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczppcHRjRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veG \ FwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6cGx1cz0iaHR0cDovL25zLnVzZXBsdXMub3JnL2xkZi94bXAvMS4wLyIKICAgIHhtbG5zOkdJTVA9Imh0dH \ A6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY2 \ 9tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6MWYwNzU0MGItZjE2Yy00OTk5LWE5NmUtMjdlNDJkYzIwYzI0IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjRhMTRkZTAxLTg5ZjctNGE1YS1iMDE4LTc0NDBiN2U2OT \ diYSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjRjNWJkMTQzLTI2MzYtNGY4OC1iZTQ0LTVjNjQxNmQ5YjY5NCIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2NDQ5MD \ kwNjY1MTI1MzMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yMiIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPGlwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogIC \ AgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICA8aXB0Y0V4dDpMb2NhdGlvblNob3duPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgPGlwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICAgPHJkZj \ pCYWcvPgogICA8L2lwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICA8aXB0Y0V4dDpSZWdpc3RyeUlkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6UmVnaXN0cnlJZD4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgIC \ AgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODI4MzE2YmQtMTE2NC00ZTMyLTg2MTktNjQ1YTI1MzY4MTVlIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wID \ IuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTAyLTE1VDA4OjExOjA2Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICAgPHBsdXM6SW1hZ2VTdXBwbGllcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlU3VwcG \ xpZXI+CiAgIDxwbHVzOkltYWdlQ3JlYXRvcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlQ3JlYXRvcj4KICAgPHBsdXM6Q29weXJpZ2h0T3duZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpDb3B5cmlnaHRPd25lcj4KICAgPHBsdXM6TGljZW5zb3 \ I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpMaWNlbnNvcj4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA \ ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC \ AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC \ AgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PqRF/SkAAAo3aUNDUHNSR0IgSUVDNjE5NjYtMi4xAABIiZ2Wd1RT2RaHz703vVCSEIqU0GtoUgJIDb1IkS4qMQkQSsCQACI2RFRwRFGRpggyKOCAo0ORsSKKhQFRsesEGUTUcX \ AUG5ZJZK0Z37x5782b3x/3fmufvc/dZ+991roAkPyDBcJMWAmADKFYFOHnxYiNi2dgBwEM8AADbADgcLOzQhb4RgKZAnzYjGyZE/gXvboOIPn7KtM/jMEA/5+UuVkiMQBQmIzn8vjZXBkXyTg9V5wlt0/JmLY0Tc4wSs4iWYIyVpNz8ixbfPaZZQ858zKEPBnLc87iZf \ Dk3CfjjTkSvoyRYBkX5wj4uTK+JmODdEmGQMZv5LEZfE42ACiS3C7mc1NkbC1jkigygi3jeQDgSMlf8NIvWMzPE8sPxc7MWi4SJKeIGSZcU4aNkxOL4c/PTeeLxcwwDjeNI+Ix2JkZWRzhcgBmz/xZFHltGbIiO9g4OTgwbS1tvijUf138m5L3dpZehH/uGUQf+MP2V3 \ 6ZDQCwpmW12fqHbWkVAF3rAVC7/YfNYC8AirK+dQ59cR66fF5SxOIsZyur3NxcSwGfaykv6O/6nw5/Q198z1K+3e/lYXjzkziSdDFDXjduZnqmRMTIzuJw+Qzmn4f4Hwf+dR4WEfwkvogvlEVEy6ZMIEyWtVvIE4gFmUKGQPifmvgPw/6k2bmWidr4EdCWWAKlIRpAfh \ 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', width: 100, // alignment: 'center', margin:[20,0,0,0] }, {width: '*',text:'iotechnic.eu Munkaidő és munkanyílvántartó rendszer. www.iotechnic.eu', alignment: 'center'}, {width: '20%',text: 'YYYY.MM.DD', alignment: 'center'}, ] }, ] } }, content: [ { alignment: 'justify', columns: [ {text: 'Munka Jelentés ', style: 'header'}, ] }, { stack:[ {text: 'Megnevezés: '+ wName }, {text: 'Munkaszám: '+wNumber}, {text: 'PO: '+poNumber}, ] }, { style: 'tableExample', table: { //widths: [20, 'auto', 80, 80,'*','*','*'], // widths: [20, '*', 70, 70,50,'auto','auto'], widths: [20, 70,'auto', 100], body: [], }, layout: { fillColor: function (rowIndex, node, columnIndex) { return (rowIndex % 2 === 0) ? '#CCCCCC' : null; } }, }, ], styles: { header: { fontSize: 18, bold: true, fillColor: '#eeeeee', margin: [0, 0, 0, 10] }, footerBrandText:{ fontSize: 12, bold: false, fillColor: '#eeeeee', alignment: 'center' }, datum: { fontSize: 18, bold: true, fillColor: '#eeeeee', alignment: 'right' }, subheader: { fontSize: 16, bold: true, fillColor: '#eeeeee', margin: [0, 10, 0, 5] }, tableExample: { margin: [0, 5, 0, 15] }, tableHeader: { bold: true, fontSize: 10, fillColor: '#eeeeee', color: 'red' }, tableData: { bold: false, fontSize: 10, italics: true, color: 'green' }, tableDataWe: { bold: false, fontSize: 10, italics: true, fillColor: '#eeffee', color: 'red' } }, defaultStyle: { // alignment: 'justify' } }; dd.content[2].table.body=item; //pdf.createPdf(dd).open(); callback(null,dd); // ... }); } // Napi műhely jelentések nyomtatása // Get Single Work app.get('/print_workreport/:id',utils.ensureAuthenticated,async function(req,res){ var PdfPrinter=require('pdfmake'); res.setHeader('Content-Type', 'application/json'); try{ var wtSum=0; const reports=await WorkReport.find({workId: mongoose.Types.ObjectId(req.params.id)}) const workHeader=await Work.findOne({"_id":mongoose.Types.ObjectId(req.params.id)},{poNumber:1,workNumber:1,megrendelo:1}) const workTimesSum=await WorkReport.aggregate( [ { $match: { 'workId': mongoose.Types.ObjectId(req.params.id)} }, {$unwind: '$workFlow'}, {$unwind: '$workFlow.employeeList'}, {$group: {_id: '$workFlow.EmployeeList', count:{$sum:1}}}, { "$limit": 1 }, {"$project": {"_id":0, "count": 1,} } ] ) if (workTimesSum.length>0) wtSum=workTimesSum[0].count*8 var data=await printWorkReport(reports,workHeader) console.log(JSON.stringify(data)); // fss.writeFile(path.normalize('d:\\test.json'), JSON.stringify(data)); res.send(data); //res.send({'response':'ok','reports':reports, 'workTimesSum':wtSum}); }catch(err){ res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message}); } }) // Műhely Napi jelentés Nyomtatási kép generálás async function printWorkReport(reports, workHeader) { var item=[]; var wName=workHeader; var i=0; moment.locale('hu'); item.push([ {text:'#', alignment: 'left'},{text:'Dátum', alignment: 'center'}, {text:'Munkafolyamat', alignment: 'center'}, {text:'Résztvevők', alignment: 'center'}]); wName=reports[0].workTitle; reports.forEach((report,index)=>{ report.workFlow.forEach((wf,idx)=>{ var emps=""; wf.employeeList.forEach((employee,ind)=>{ emps=emps+employee.name+'\r\n'; i++; }) item.push([ {id:i,text: index+1, style:'tableData',rowSpan: report.workFlow.length}, {text: moment(report.date).format('YYYY.MM.DD'), style:'tableData', alignment: 'center',rowSpan: report.workFlow.length}, {text: wf.Title, style:'tableData', alignment: 'center'}, {text: emps, style:'tableData', alignment: 'center'}, ]); }) }) // playground requires you to assign document definition to a variable called dd var dd = { pageSize: 'A4', pageOrientation: 'portrait',//'landscape', pageMargins: [ 20, 20, 20, 40 ], keepWithHeaderRows: true, info: { title: 'Műhelymunkák', author: 'IO-Technic Munkanyílvántartó', subject: 'Műhely munkák naplója', keywords: 'Napló', }, /* pageBreakBefore: function(currentNode, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage) { return currentNode.id === 6 && followingNodesOnPage.length != 0; },*/ pageBreakBefore: function(currentNode, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage) { return currentNode.startPosition.top >= 150; }, //header: 'dsadad', footer: function(currentPage, pageCount){ return { height: 30, stack:[ {text:currentPage.toString() + ' / ' + pageCount.toString(), alignment: 'center'}, { columns: [ {width: '*',text:'IO-Technic Munkaidő és munkanyílvántartó rendszer. www.iotechnic.eu', alignment: 'center'}, {width: '20%',text: new Date().toString(), alignment: 'center'}, ] }, ] } }, content: [ { alignment: 'justify', columns: [ {text: 'Munka Jelentés ', style: 'header'}, ] }, { stack:[ {text: 'Megnevezés: '+ wName ,style:workHeader}, {text: 'Megrendelő: '+workHeader.megrendelo,style:workHeader }, {text: 'Munkaszám: '+workHeader.workNumber,style:workHeader}, {text: 'PO: '+workHeader.poNumber,style:workHeader}, ] }, { width: auto, style: 'tableExample', table: { headerRows: 1, //dontBreakRows: true, //widths: [20, 'auto', 80, 80,'*','*','*'], // widths: [20, '*', 70, 70,50,'auto','auto'], widths: [20, 70,'*', 100], body: item,//[], }, layout: { fillColor: function (rowIndex, node, columnIndex) { return (rowIndex % 2 === 0) ? '#CCCCCC' : null; } }, } ], styles: { header: { fontSize: 18, bold: true, fillColor: '#eeeeee', margin: [0, 0, 0, 10] }, footerBrandText:{ fontSize: 12, bold: false, fillColor: '#eeeeee', alignment: 'center' }, datum: { fontSize: 18, bold: true, fillColor: '#eeeeee', alignment: 'right' }, subheader: { fontSize: 16, bold: true, fillColor: '#eeeeee', margin: [0, 10, 0, 5] }, tableExample: { margin: [0, 5, 0, 15] }, tableHeader: { bold: true, fontSize: 10, fillColor: '#eeeeee', color: 'red' }, workHeader: { bold: false, fontSize: 10, italics: true, color: 'blue' }, tableData: { bold: false, fontSize: 10, italics: true, color: 'green' }, tableDataWe: { bold: false, fontSize: 10, italics: true, fillColor: '#eeffee', color: 'red' } }, defaultStyle: { // alignment: 'justify' } }; // dd.content[2].table.body=item; //pdf.createPdf(dd).open(); // callback(null,dd); // ... return dd; } // Nyomtatási kép generálás function printPage(year,condition,callback) { var item=[]; var query={$or:[{$and:[{"workDate": { "$regex": year, "$options": "i" }},{"title":{ "$regex": condition, "$options": "i" }}]},{$and:[{"workDate": { "$regex": year, "$options": "i" }},{"poNumber":{ "$regex": condition, "$options": "i" }}]}]}; // Work.find(query,null,{sort: {workNumber: -1}} ,function(err, works){ moment.locale('hu'); item.push([ {text:'Munkaszám', alignment: 'left'},{text:'Megnevezés', alignment: 'left'}, {text:'Státusz', alignment: 'center'}, {text:'PO', alignment: 'center'}]); var bar = new Promise((resolve, reject) => { Work.find(query,null,{sort: {workNumber: -1}} ,function(err,wk){ wk.forEach((element,index,array) =>{ var stat= '-'; if (element.state==='Opened') stat = 'Folyamatban'; else if (element.state==='Closed') stat = 'Lezárva'; var pon= '-'; if (element.poNumber) pon=element.poNumber; item.push([ {text: element.workNumber, style:'tableData'}, {text: element.title, style:'tableData', alignment: 'left'}, {text: stat, style:'tableData', alignment: 'center'}, {text: pon, style:'tableData', alignment: 'center'}, ]); if (index === array.length -1) resolve(); }) }) }); bar.then(() => { // playground requires you to assign document definition to a variable called dd var dd = { pageSize: 'A3', pageOrientation: 'portrait', footer: function(currentPage, pageCount) { return {text: currentPage.toString() + ' / ' + pageCount, alignment: 'center'}}, content: [ { alignment: 'justify', columns: [ {text: 'Munkaszámok ', style: 'header'} ] }, { style: 'tableExample', table: { //widths: [20, 'auto', 80, 80,'*','*','*'], // widths: [20, '*', 70, 70,50,'auto','auto'], widths: [70, 'auto', 100, 100], body: [], }, layout: { fillColor: function (rowIndex, node, columnIndex) { return (rowIndex % 2 === 0) ? '#CCCCCC' : null; } }, }, ], styles: { header: { fontSize: 18, bold: true, fillColor: '#eeeeee', margin: [0, 0, 0, 10] }, datum: { fontSize: 18, bold: true, fillColor: '#eeeeee', alignment: 'right' }, subheader: { fontSize: 16, bold: true, fillColor: '#eeeeee', margin: [0, 10, 0, 5] }, tableExample: { margin: [0, 5, 0, 15] }, tableHeader: { bold: true, fontSize: 10, fillColor: '#eeeeee', color: 'red' }, tableData: { bold: false, fontSize: 10, italics: true, color: 'green' }, tableDataWe: { bold: false, fontSize: 10, italics: true, fillColor: '#eeffee', color: 'red' } }, defaultStyle: { // alignment: 'justify' } }; dd.content[1].table.body=item; //pdf.createPdf(dd).open(); callback(null,dd); // ... }); } // Nyomtatás app.get('/print', function(req,res){ printPage(req.query.year,req.query.condition,function(err,data){ // Client side pdf res.send(data); }); }); //Devices Route app.get('/devices', utils.ensureAuthenticated,function(req, res) { Article.find({}, function(err, articles){ if (err) { console.log(err); } else { // lastId=articles.workNumber; res.render('devicesView', { title: 'Berendezés gyártási számok', articles: articles // articles: workSign }); } }); }); //Background.route app.get('/media/:file', function(req, res) { // lastId=articles.workNumber; res.send('/media/backimg.png'); }); app.route('/workreport').post(apiSaveReport); app.route('/workreportUpdate').post(apiUpdateReport); app.route('/workreportUserList').get(apiGetUsers); app.route('/workreport/:id').get(apiGetReport); app.route('/workreportList/:id').get(apiGetReportList); app.route('/workreportDates/:id').get(apiGetReportDates); // Route Files app.locals.moment = require('moment'); //app.use('/articles', articles); let articles = require('./routes/articles'); let invoices = require('./routes/invoices'); let users = require('./routes/users'); let warehouse = require('./routes/warehouse'); let client = require('./routes/client'); let receipts = require('./routes/receipts'); let employee = require('./routes/employee'); let employeeHolidays = require('./routes/employeeHolidays'); let gantt = require('./routes/gantt'); let gantt_holidays = require('./routes/gantt_holidays'); let devices_rfid = require('./routes/devices_rfid'); //let tools = require('./routes/tools'); let certificates_kif = require('./routes/certificates_kif'); let certificates_tr = require('./routes/certificates_tr'); let certificates_mc = require('./routes/certificates_mc'); let components=require('./routes/components'); let components_base=require('./routes/components_base'); let bid=require('./routes/bid'); let vehicles=require('./routes/vehicles'); let quotes=require('./routes/quotes'); let workReport=require('./routes/workReport'); const { date } = require('jszip/lib/defaults'); const { apiGetWorkList, apiGetEmployeeList, apiGetDailyReport, apiEmployee, apiGetAllReport, apiCheckDevice, apiRegisterDevice,apiRequestAPIkey, apiGetQRCode,apiGetWorkState } = require('./js/androidApi'); const { string } = require('jszip/lib/support'); const { generateXML } = require('./js/enaploGen'); const { auto } = require('async'); app.use('/devicesrfid', devices_rfid); app.use('/vehicles', vehicles); app.use('/gantt', gantt); app.use('/gantt_holidays', gantt_holidays); app.use('/articles', articles); app.use('/invoices', invoices); app.use('/users', users); app.use('/warehouse', warehouse); app.use('/client', client); // Raktárak app.use('/receipts', receipts); // Bevételezések app.use('/employee', employee); // Munkavállalók app.use('/employeeHolidays', employeeHolidays); // Munkavállalók app.use('/bid', bid); // Árajánlatok //app.use('/tools', tools); app.use('/certificates_kif',certificates_kif); app.use('/certificates_tr',certificates_tr); app.use('/certificates_mc',certificates_mc); app.use('/components',components); app.use('/components_base',components_base); app.use('/quotes',quotes); app.use('/workReport',workReport); // Kábel mérési jegyzőkönyv //apkUpdater.enable(app, '/anyUpdateServerRoute'); /* app.delete('/devices/:id',utils.ensureAuthenticated,function(req,res){ let query = { _id:req.params.id} console.log('Miafasz?'); Article.remove(query, function(err){ if(err) { console.log(err); } res.send('Success'); }) }); */ /* io.on('connection', function(client) { console.log('Client connected...'); client.on('join', function(data) { console.log(data); client.emit('messages', 'Hello from server'); }); });*/ /*const options = { key: fss.readFileSync('certs/server/my_server_key.pem'), cert: fss.readFileSync('certs/server/my_server_crt.pem') }; var server = https.createServer(options, app); const port = 80; server.listen(port, () => { console.log("server starting on port : " + port) });*/ /*https.createServer({ key: fss.readFileSync('certs/server.key'), cert: fss.readFileSync('certs/server.cert') }, app).listen(443, () => { console.log('Listening...') }) http.createServer(app).listen(80);*/ /*process.on('exit', function(){ employee.tcpClose(); })*/ // Binding the event to the eventhandler app.listen(80,function functionName() { console.log('Server elindult a 80-es porton.'); }); //module.exports = app; /* server.listen(80,function functionName() { console.log('Server elindult a 80-es porton.'); });*/ //3. lecke 9:58 // DO NOT DO app.listen() unless we're testing this directly /*if (require.main === module) { app.listen(80); } // Instead do export the app: module.exports = app;*/