// Munkavállaló kezelés const express = require('express'); const router = express.Router(); var axios = require('axios'); // User Model let User = require('../models/user'); var utils = require('../js/utils'); const path = require('path'); let Employee = require('../models/employee'); let Holidays = require('../models/holidays'); let WorkingTime = require('../models/workingtime'); let DeviceRemote = require('../models/devices'); var formidable = require('formidable'); var csv = require("fast-csv"); var fs = require('fs'); const Moment = require('moment'); const MomentRange = require('moment-range'); const moment = MomentRange.extendMoment(Moment); var schedule = require('node-schedule'); var async = require('async'); // GEOCODING KISZOLGÁLÁS var NodeGeocoder = require('node-geocoder'); var nodemailer = require('nodemailer'); const bcrypt = require('bcryptjs'); var PdfPrinter=require('pdfmake'); let tracker=require('../js/tracker'); let androidApi=require('../js/androidApi') //var logging=require('../js/helpers'); const { EWOULDBLOCK } = require('constants'); const Net = require('net'); const { Console } = require('console'); const { mongo, Mongoose } = require('mongoose'); const { Buffer } = require('buffer'); const uuidAPIKey = require('uuid-apikey'); const e = require('express'); const { gmail } = require('googleapis/build/src/apis/gmail'); const user = require('../models/user'); let Work=require('../models/works'); let WorkReport = require('../models/workReportModel'); var generator = require('generate-password'); const apiVehicle=require('../js/vehicleApi'); const {printPage}=require('../print/printAccessDetailsEmp'); const {getAccessDetails,sumOfMonth,getMunkaszunet, getHolidayListById, getSickpayListById, oneDayCalculate}=require('../js/workTime'); //const employee = require('../models/employee'); //const { data } = require('pdfkit/js/reference'); //const passport = require('passport'); const {exportWorktime}=require('../public/js/export_db'); const emailFelado= 'no-reply.klportal@iotechnic.eu';//'klportal@outlook.com'; // Email Értesítő /*var transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'szamlaertesito@gmail.com', pass: 'IoSn1Pb1' } });*/ // KLELECTRO MAIL /*var transporter = nodemailer.createTransport({ host: 'mail.klelectro.hu', port: 465, secret: true, auth: { user: 'munkanyilvantarto@klelectro.hu', pass: 'IoSn1Pb1' } });*/ // BREVO MAIL var transporter = nodemailer.createTransport({ host: 'smtp-relay.brevo.com', port: 587, //secret: true, secure: false, auth: { user: '78718e001@smtp-brevo.com', pass: 'gav8nmwFYLGA4ZMR' } }); /* HOTMAIL MAIL var transporter = nodemailer.createTransport({ host: 'smtp-mail.outlook.com', port: 587, secret: true, auth: { user: 'klportal@outlook.com', pass: 'IoSn1Pb1' } });*/ /*Email Oauth kell var smtp = require('nodemailer-smtp-transport'); var generator = xoauth2.createXOAuth2Generator({ user: '..', clientId: '...', clientSecret: '...', refreshToken: '...', accessToken: '' }); generator.on('token', function(token){ console.info('new token', token.accessToken); // maybe you want to store this token }); transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, secure: true, auth: { user: 'szamlaertesito@gmail.com', pass: 'IoSn1Pb1' }, tls: { // do not fail on invalid certs rejectUnauthorized: false, }, } );*/ // **** TCP SERVER **** // const port = 8080; // Create a new TCP server. const server = new Net.Server(); // The server listens to a socket for a client to make a connection request. // Think of a socket as an end point. server.listen(port, function() { console.log(`Worktime Server listening on socket localhost:${port}`); }); exports.tcpClose=function(){ if (server.listening){ server.close(); } } // When a client requests a connection with the server, the server creates a new // socket dedicated to that client. server.on('connection', function(socket) { socket.setTimeout(60000); socket.on('timeout', () => { console.log('Connection closed by Server.'); socket.end(); }); socket.on('close',()=>{ console.log('Connection Closed by Client.') }) console.log('A new connection has been established from -> '+socket.remoteAddress+' : '+socket.remotePort); server.getConnections(function(err,count){ console.log('Connected Clients: '+count); }) // Now that a TCP connection has been established, the server can send data to // the client by writing to its socket. //socket.write('Hello, client.'); var ma=moment().format('DD.MM.YYYY'); // The server can also receive data from the client by reading from its socket. socket.on('data', function(chunk) { console.log('Payload -> '+chunk); try{ data = JSON.parse(chunk); } catch(e) { //console.log("JSON ERROR: "+e); socket.write(JSON.stringify({ status: 200, data: "Json Error" })); console.log("Json Error."); return; } if (!data.cmd) { socket.write(JSON.stringify({ status: 200, data: "Json Error" })); console.log("CMD Error."); return; } switch(data.cmd) { case 'GETALIVE': moment.locale('HU'); socket.write(JSON.stringify({ status: 200, data: moment().format('LT') })); break; case 'GETCITY': //var address={}; var city='Ismeretlen'; var response = { status : 200, data : 'INVALID QUERY' } if (!data.loc | !data.lat | !data.lon | !data.CID1 | !data.CID2 ) { socket.write(JSON.stringify(response)); return; } console.log('GETCITY '+moment().format('YYYY-MM-DD HH:mm')+' '+JSON.stringify(data,null,2)); //$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68 DeviceRemote.findOneAndUpdate({'imei':data.CID1,'ccid':data.CID2}, {$set:{'swRevision':data.REV}}, { returnNewDocument: true }, function(err,device){ if (err) { console.log("Device DB err:"+err); } else { if (device===null) { createLog("INVALID DEVICE",data);//JSON.stringify(data)); socket.write(JSON.stringify({ status: 200, data: 'Invalid device!' })); return; } if (!device) { //console.log('Invalid device!\r\n'); //console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n'); createLog("INVALID DEVICE",data);//JSON.stringify(data)); socket.write(JSON.stringify({ status: 200, data: 'Invalid device!' })); } else { console.log('DEVICE '+moment().format('YYYY-MM-DD HH:mm')+' '+device.name); if (data.loc==="G") // Ha a helyzet GPS által meghatározott { var spl=String(data.lat).split(':'); var NS=spl[0]; var LAT=spl[1]; var spl=String(data.lon).split(':'); var EW=spl[0]; var LON=spl[1]; var dec1=parseCoord(LAT,NS); var dec2=parseCoord(LON,EW); hereGeocoding({lat:dec1, lon:dec2}, function(err, resp) { // geocoder.reverse({lat:dec1, lon:dec2}, function(err, resp) { if (err) { console.log('Geocoding error!\r\n'+err); socket.write(JSON.stringify({ status: 200, data: 'GEOCODING ERROR!' })); } if (resp) { //address={'city':resp[0].city,'road':resp[0].streetName} city=resp.city;//resp[0].city; socket.write(JSON.stringify({ status: 200, data: city, //road: resp[0].streetName, })); // Utolsó pozíció mentése adatbázisba. apiVehicle.apiVehicleSetCity(device.vehicle_id,resp.city,device._id,dec1,dec2,function(err,re){ if(err) console.log(err); // else // console.log(re); }) /*DeviceRemote.findOneAndUpdate({'imei':data.CID1,'ccid':data.CID2}, {$set:{'lastCity':resp.city}},function(err,device){ if (err) { console.log("Device DB err:"+err); } });*/ } })//Geocoding end } else // GPS RTT if (data.loc==="G2") // Ha a helyzet GPS által meghatározott { /* var spl=String(data.lat).split(':'); var NS=spl[0]; var LAT=spl[1]; var spl=String(data.lon).split(':'); var EW=spl[0]; var LON=spl[1]; var dec1=parseCoord(LAT,NS); var dec2=parseCoord(LON,EW);*/ hereGeocoding({lat:data.lat, lon:data.lon}, function(err, resp) { // geocoder.reverse({lat:dec1, lon:dec2}, function(err, resp) { if (err) { console.log('Geocoding error!\r\n'+err); socket.write(JSON.stringify({ status: 200, data: 'GEOCODING ERROR!' })); } if (resp) { //address={'city':resp[0].city,'road':resp[0].streetName} city=resp.city;//resp[0].city; socket.write(JSON.stringify({ status: 200, data: city, //road: resp[0].streetName, })); // Utolsó pozíció mentése adatbázisba. apiVehicle.apiVehicleSetCity(device.vehicle_id,resp.city,device._id,data.lat,data.lon,function(err,re){ if(err) console.log(err); else { if (re.name) console.log(re.name); } }) /* DeviceRemote.findOneAndUpdate({'imei':data.CID1,'ccid':data.CID2}, {$set:{'lastCity':resp.city}},function(err,device){ if (err) { console.log("Device DB err:"+err); } }); */ } })//Geocoding end } else socket.write(JSON.stringify({ status: 200, data: 'Invalid modeinfo!' })); } } // socket.destroy(); }) break; case 'ACCESS': moment.locale('HU'); var response = { status : 200, data : 'INVALID QUERY' } if (!data.CID1 | !data.CID2) { //console.log("Invalid Client ID!"); createLog("INVALID CID",data);//JSON.stringify(data)); response.status=200; response.data='INVALID CLIENT ID'; socket.write(JSON.stringify(response)); break; } if (!data.LAT | !data.LON) { //console.log("Invalid Client POS!"); createLog("INVALID LOCATION ",data);//JSON.stringify(data)); response.status=200; response.data='INVALID LOCATION ID'; socket.write(JSON.stringify(response)); break; } //var address=getAddress(data.LAT,data.LON); DeviceRemote.findOne({imei:data.CID1,ccid:data.CID2}, function(err,device){ if (err) { console.log("Device DB err:"+err); } else { //if (!device.length) if (typeof device === 'undefined' || !device) { //console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n'); createLog("INVALID DEVICE",data);//JSON.stringify(data)); socket.write(JSON.stringify({ status: 200, data: 'Invalid device!' })); } else { if (!data.loc) { response.status=200; response.data='INVALID LOCATION'; socket.write(JSON.stringify(response)); } else { if (data.mode!='ARRIVAL' && data.mode!='GETAWAY' && data.mode!='FREEDOM' && data.mode!='SICKPAY') { response.status=200; response.data='INVALID MODE'; socket.write(JSON.stringify(response)); } else { //console.log(data.rfid); Employee.findOne({'accessCode':data.rfid},function(err,employee){ if(err) { response.status=200; response.data='DB ERROR 1'; socket.write(JSON.stringify(response)); } else { if (employee) { // Ha pozíció szöveges (fix telepítésű WiFi-nél) //Utca név is kell; //var addr=address.city+","+address.road+" "+address.number; getAddress(data.LAT,data.LON,data.loc,function(err,address){ if (err) { console.log("GeoAddress Error! "+err); // response.status=200; // response.data='GeoErr! '; //socket.write(JSON.stringify(response)); // return; // Nincs GPS!!!!!!!!!!!!!!!!!!!!!! addr=device.assignment; registerAccess(employee,addr,null,null,device,function(err,result){ //registerAccess(employee,data.loc,function(err,result){ if (err) { console.log(err); socket.write(JSON.stringify(err)); } else { checkIsHoliday(employee._id,ma,function(err,cb){ if (err) { console.log('Holiday Split Error: '+err); } else { socket.write(JSON.stringify(result)); } }) } }) } else { var addr=address.city+","+address.road+" "+address.number; /* if (data.loc==='G'){ var dec=convertDeg2Dec(data.LAT,data.LON); } else*/ if (data.loc==="G2"){ var dec={'latdec':data.LAT,'londec':data.LON} } else { var dec=convertDeg2Dec(data.LAT,data.LON); } registerAccess(employee,addr,dec.latdec,dec.londec,device,function(err,result){ //registerAccess(employee,data.loc,function(err,result){ if (err) { console.log(err); socket.write(JSON.stringify(err)); } else { //console.log('Access: '+JSON.stringify(result)); createLog("ACCESS",result);//JSON.stringify(result)); checkIsHoliday(employee._id,ma,function(err,cb){ if (err) { console.log('Holiday Split Error: '+err); } else { socket.write(JSON.stringify(result)); } }) } }) } }); } else { //console.log("Nincs munkavállaló ezzel az azonosítóval!"); createLog("INVALID CODE",data.rfid);//JSON.stringify(data.rfid)); response.status=200; response.data='INVALID CODE'; socket.write(JSON.stringify(response)); } } }) } } } } }); break; moment.locale('HU'); var response = { status : 200, data : 'INVALID QUERY' } if (!data.CID1 | !data.CID2) { //console.log("Invalid Client ID!"); createLog("INVALID CID",data);//JSON.stringify(data)); response.status=200; response.data='INVALID CLIENT ID'; socket.write(JSON.stringify(response)); break; } if (!data.LAT | !data.LON) { //console.log("Invalid Client POS!"); createLog("INVALID LOCATION ",data);//JSON.stringify(data)); response.status=200; response.data='INVALID LOCATION ID'; socket.write(JSON.stringify(response)); break; } //var address=getAddress(data.LAT,data.LON); DeviceRemote.findOne({imei:data.CID1,ccid:data.CID2}, function(err,device){ if (err) { console.log("Device DB err:"+err); } else { //if (!device.length) if (typeof device === 'undefined' || !device) { //console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n'); createLog("INVALID DEVICE",data);//JSON.stringify(data)); socket.write(JSON.stringify({ status: 200, data: 'Invalid device!' })); } else { if (!data.loc) { response.status=200; response.data='INVALID LOCATION'; socket.write(JSON.stringify(response)); } else { if (data.mode!='ARRIVAL' && data.mode!='GETAWAY' && data.mode!='FREEDOM' && data.mode!='SICKPAY') { response.status=200; response.data='INVALID MODE'; socket.write(JSON.stringify(response)); } else { //console.log(data.rfid); Employee.findOne({'qrCode':data.qrCode},function(err,employee){ if(err) { response.status=200; response.data='DB ERROR 1'; socket.write(JSON.stringify(response)); } else { if (employee) { // Ha pozíció szöveges (fix telepítésű WiFi-nél) //Utca név is kell; //var addr=address.city+","+address.road+" "+address.number; getAddress(data.LAT,data.LON,data.loc,function(err,address){ if (err) { console.log("GeoAddress Error! "+err); // response.status=200; // response.data='GeoErr! '; //socket.write(JSON.stringify(response)); // return; // Nincs GPS!!!!!!!!!!!!!!!!!!!!!! addr=device.assignment; registerAccess(employee,addr,null,null,device,function(err,result){ //registerAccess(employee,data.loc,function(err,result){ if (err) { console.log(err); socket.write(JSON.stringify(err)); } else { checkIsHoliday(employee._id,ma,function(err,cb){ if (err) { console.log('Holiday Split Error: '+err); } else { socket.write(JSON.stringify(result)); } }) } }) } else { var addr=address.city+","+address.road+" "+address.number; /* if (data.loc==='G'){ var dec=convertDeg2Dec(data.LAT,data.LON); } else*/ if (data.loc==="G2"){ var dec={'latdec':data.LAT,'londec':data.LON} } else { var dec=convertDeg2Dec(data.LAT,data.LON); } registerAccess(employee,addr,dec.latdec,dec.londec,device,function(err,result){ //registerAccess(employee,data.loc,function(err,result){ if (err) { console.log(err); socket.write(JSON.stringify(err)); } else { //console.log('Access: '+JSON.stringify(result)); createLog("ACCESS",result);//JSON.stringify(result)); checkIsHoliday(employee._id,ma,function(err,cb){ if (err) { console.log('Holiday Split Error: '+err); } else { socket.write(JSON.stringify(result)); } }) } }) } }); } else { //console.log("Nincs munkavállaló ezzel az azonosítóval!"); createLog("INVALID CODE",data.rfid);//JSON.stringify(data.rfid)); response.status=200; response.data='INVALID CODE'; socket.write(JSON.stringify(response)); } } }) } } } } }); break; case 'ACCESSNOGEO': // Bejelentkezés telefonról Ha a címadat már megvan moment.locale('HU'); var response = { status : 200, data : 'INVALID QUERY' } if (!data.CID1 | !data.CID2) { //console.log("Invalid Client ID!"); createLog("INVALID CID",data);//JSON.stringify(data)); response.status=200; response.data='INVALID CLIENT ID'; socket.write(JSON.stringify(response)); break; } if (!data.LAT | !data.LON) { //console.log("Invalid Client POS!"); createLog("INVALID LOCATION",data);//JSON.stringify(data)); response.status=200; response.data='INVALID LOCATION ID'; socket.write(JSON.stringify(response)); break; } //var address=getAddress(data.LAT,data.LON); DeviceRemote.find({imei:data.CID1,ccid:data.CID2}, function(err,device){ if (err) { console.log("Device DB err:"+err); } else { if (!device.length) { // console.log('Invalid device!\r\n'); //console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n'); createLog("INVALID DEVICE",data);//JSON.stringify(data)); socket.write(JSON.stringify({ status: 200, data: 'Invalid device!' })); } else { if (!data.address) { response.status=200; response.data='INVALID ADDRESS'; socket.write(JSON.stringify(response)); } else { if (data.mode!='ARRIVAL' && data.mode!='GETAWAY' && data.mode!='FREEDOM' && data.mode!='SICKPAY') { response.status=200; response.data='INVALID MODE'; socket.write(JSON.stringify(response)); } else { //console.log(data.rfid); Employee.findOne({'accessCode':data.rfid},function(err,employee){ if(err) { response.status=200; response.data='DB ERROR 1'; socket.write(JSON.stringify(response)); } else { if (employee) { // Ha pozíció szöveges (fix telepítésű WiFi-nél) registerAccess(employee,data.address,data.LAT,data.LON,device,function(err,result){ //registerAccess(employee,data.loc,function(err,result){ if (err) { console.log(err); socket.write(JSON.stringify(err)); } else { //console.log('Access: '+JSON.stringify(result)); createLog("ACCESS",result);//JSON.stringify(result)); checkIsHoliday(employee._id,ma,function(err,cb){ if (err) { console.log('Holiday Split Error: '+err); } else { socket.write(JSON.stringify(result)); } }) } }) } else { //console.log("Nincs munkavállaló ezzel az azonosítóval!"); createLog("INVALID CODE",data.rfid);//JSON.stringify(data.rfid)); response.status=200; response.data='INVALID CODE'; socket.write(JSON.stringify(response)); } } }) } } } } }); break; case 'ACCESSNOGEOQR': // Bejelentkezés telefonról QR kóddal Ha a címadat már megvan moment.locale('HU'); var response = { status : 200, data : 'INVALID QUERY' } if (!data.CID1 | !data.CID2) { //console.log("Invalid Client ID!"); createLog("INVALID CID",data);//JSON.stringify(data)); response.status=200; response.data='INVALID CLIENT ID'; socket.write(JSON.stringify(response)); break; } if (!data.LAT | !data.LON) { //console.log("Invalid Client POS!"); createLog("INVALID LOCATION",data);//JSON.stringify(data)); response.status=200; response.data='INVALID LOCATION ID'; socket.write(JSON.stringify(response)); break; } //var address=getAddress(data.LAT,data.LON); DeviceRemote.find({imei:data.CID1,ccid:data.CID2}, function(err,device){ if (err) { console.log("Device DB err:"+err); } else { if (!device.length) { // console.log('Invalid device!\r\n'); //console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n'); createLog("INVALID DEVICE",data);//JSON.stringify(data)); socket.write(JSON.stringify({ status: 200, data: 'Invalid device!' })); } else { if (!data.address) { response.status=200; response.data='INVALID ADDRESS'; socket.write(JSON.stringify(response)); } else { if (data.mode!='ARRIVAL' && data.mode!='GETAWAY' && data.mode!='FREEDOM' && data.mode!='SICKPAY') { response.status=200; response.data='INVALID MODE'; socket.write(JSON.stringify(response)); } else { //console.log(data.rfid); Employee.findOne({'qrCode':data.qrCode},function(err,employee){ if(err) { response.status=200; response.data='DB ERROR 1'; socket.write(JSON.stringify(response)); } else { if (employee) { // Ha pozíció szöveges (fix telepítésű WiFi-nél) registerAccess(employee,data.address,data.LAT,data.LON,device,function(err,result){ //registerAccess(employee,data.loc,function(err,result){ if (err) { console.log(err); socket.write(JSON.stringify(err)); } else { //console.log('Access: '+JSON.stringify(result)); createLog("ACCESS",result);//JSON.stringify(result)); checkIsHoliday(employee._id,ma,function(err,cb){ if (err) { console.log('Holiday Split Error: '+err); } else { socket.write(JSON.stringify(result)); } }) } }) } else { //console.log("Nincs munkavállaló ezzel az azonosítóval!"); createLog("INVALID CODE",data.rfid);//JSON.stringify(data.rfid)); response.status=200; response.data='INVALID CODE'; socket.write(JSON.stringify(response)); } } }) } } } } }); break; case 'NTRK': tracker.newTrack(data.id,function(err,result){ if (err) { socket.write(JSON.stringify({ status: 1, data: err })); } else { socket.write(JSON.stringify({ status: 200, data: result })); } }) break; case 'PTM': tracker.pushtelemetry(data.data,function(err,result){ if (err) { socket.write(JSON.stringify({ status: 1, data: err })); } else { socket.write(JSON.stringify({ status: 200, data: result })); } }) break; default: socket.write(JSON.stringify({ status: 200, data: "Cmd error" })); break; } }); // When the client requests to end the TCP connection with the server, the server // ends the connection. socket.on('end', function() { console.log('Closing connection with the client'); }); // Don't forget to catch error, for your own sake. socket.on('error', function(err) { console.log('Error: ${err}'); }); }); // **** END OF TCP SERVER **** // // Device Logging function createLog(logName,logMessage) { moment.locale('HU'); var fname='./deviceLog_'+moment().format('YYYY_MM_DD')+'.txt'; var logRegistry={}; logRegistry.LOG={'timeStamp':moment().format('YYYY.MM.DD HH:MM:SS'),'logName':logName,'logMessage':logMessage}; //console.log('Saving to: '+fname); fs.appendFile(fname, JSON.stringify(logRegistry)+',\r\n', function (err) { if (err) { console.log('DeviceLog Err: '+err); throw err; } /*else { console.log('Saved! '+fname); }*/ }); } // Szabadság email kiküldése function sendEmailHolidayNotify(employeeName,employeeMail,holiday) { var mailOptions = { from: emailFelado,// 'munkanyilvantarto@klelectro.hu', to: employeeMail, subject: 'Szabadság kiadás.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+employeeName+'!\n Az ön számára szabadság kiadása történt.\n\nSzabadság kezdete: '+holiday.start_date+'\nSzabadság vége: '+holiday.end_date+'\n'; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Szabadság módosítás email kiküldése function sendEmailHolidayResizeNotify(employeeName,employeeMail,holidayNew,holidayOld) { var mailOptions = { from: emailFelado,// 'munkanyilvantarto@klelectro.hu', to: employeeMail, subject: 'Szabadság módosítás.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+employeeName+'!\n Az Ön szabadsága módosításra került az alábbiak szerint.\n\n'+ 'Eredeti állapot:\n'+ 'Szabadság kezdete: '+moment(holidayOld.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+ 'Szabadság vége: '+moment(holidayOld.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+ 'Napok: '+holidayOld.duration+ 'Új állapot:\n'+ 'Szabadság kezdete: '+moment(holidayNew.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+ 'Szabadság vége: '+moment(holidayNew.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+ 'Napok: '+holidayNew.duration; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Szabadság áthelyezés email kiküldése function sendEmailHolidayDropNotify(employeeName,employeeMail,holidayNew,holidayOld) { var mailOptions = { from: emailFelado,// 'munkanyilvantarto@klelectro.hu', to: employeeMail, subject: 'Szabadság áthelyezés.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+employeeName+'!\n Az Ön szabadsága áthelyezésre került az alábbiak szerint.\n\n'+ 'Eredeti állapot:\n'+ 'Szabadság kezdete: '+moment(holidayOld.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+ 'Szabadság vége: '+moment(holidayOld.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+ 'Új állapot:\n'+ 'Szabadság kezdete: '+moment(holidayNew.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+ 'Szabadság vége: '+moment(holidayNew.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Regisztrációs email kiküldése function sendEmailRegisterNotify(employee,visiblePassword) { var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: employee.email, subject: 'Munkanyílvántartó regisztráció.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+employee.name+'!\n Ön sikeresen regisztrált a Munkaidő nyílvántartó rendszerbe.\nBelépési adatok:\nWeblap: www.klportal.eu\nFelhasználó név: '+employee.email+'\nJelszó: '+visiblePassword+'\n'; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Munkaidő törlése email kiküldése function sendEmailDeletedWorkingTimeNotify(employee,deletedWorkingTime) { var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: employee.email, subject: 'Munkanyílvántartó munkaidő törlése.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+employee.name+'!\nAz Ön alábbi munkaidő bejegyzése törlésre került.\n\n'+ deletedWorkingTime.timeArrive+' - '+deletedWorkingTime.location+'\n'+deletedWorkingTime.timeGetaway+' - '+deletedWorkingTime.locationStop+'\n'; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Regisztrációs email kiküldése function sendEmailNewPasswordNotify(employee,visiblePassword) { var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: employee.email, subject: 'KL Portal új jelszó.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+employee.name+'!\nÖn új jelszót kapott.\n\nBelépési adatok:\nWeblap: www.klportal.eu\nFelhasználó név: '+employee.email+'\nJelszó: '+visiblePassword+'\n'; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Belépés értesítő function sendEmailArriveNotify(employee,location,timeArrive) { var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: employee.email, subject: 'Munkanyílvántartó értesítés.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+employee.name+'!\n\nMunkaidő megkezdve ekkor: '+timeArrive+'\nEzen a helyszínen: '+location; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Kilépés értesítő function sendEmailGetavayNotify(employee,location,timeArrive,timeGetaway,worktime) { var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: employee.email, subject: 'Munkanyílvántartó értesítés.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+employee.name+'!\n\nMunkaidő megkezdve ekkor: '+timeArrive+'\nMunkaidő lezárva ekkor: '+timeGetaway+'\nEzen a helyszínen: '+location+'\nMunka órák: '+worktime; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Automatikus lezárás 48 óra után function sendEmailAutoGetavayNotify48(emp,timeArrive,timeGetaway,workTime,location) { var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: emp.email, subject: 'Munkanyílvántartó értesítés.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+emp.name+'!\n\nMunkaideje automatikusan lezárásra került 48 óra folyamatos munkaidő miatt.\n\nMunkaidő megkezdve ekkor: '+timeArrive+'\nMunkaidő lezárva ekkor: '+timeGetaway+'\nEzen a helyszínen: '+location+'\nMunka órák: '+workTime;; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } // Havi értesítő function sendEmailMonthlyNotify(employee,callback) { var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: employee.email, //to: 'klmuhely@gmail.com', subject: 'Munkanyílvántartó értesítés.', text: 'That was easy!', attachments: [ { filename: 'document.pdf', // <= Here: made sure file name match path: path.join('./'+employee._id+'_document.pdf'), // <= Here contentType: 'application/pdf' } ] }; mailOptions.text='Tisztelt '+employee.name+'!\n\nHavi munkaidő összesítőjét mellékletként csatoltuk.'; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); callback(error,null); } else { console.log('Email sent: ' + info.response); callback(null,info.response); } }); } // Havi értesítő Wrapped async function WrappedSendEmailMonthlyNotify(employee) { return new Promise((resolve,reject)=>{ var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: employee.email, subject: 'Munkanyílvántartó értesítés.', text: 'That was easy!', attachments: [ { filename: 'document.pdf', // <= Here: made sure file name match path: path.join('./'+employee._id+'_document.pdf'), // <= Here contentType: 'application/pdf' } ] }; mailOptions.text='Tisztelt '+employee.name+'!\n\nHavi munkaidő összesítőjét mellékletként csatoltuk.'; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); resolve(false); // or use rejcet(false) but then you will have to handle errors } else { console.log('Email sent: ' + info.response); resolve(true); } }); }); } // Havi értesítő mindenkié a könyvelésre function sendEmailMonthlyWorktime_all(attachments,callback) { moment.locale('HU'); calcdate=moment().subtract(5, 'days').format('YYYY.MM'); var mailOptions = { from: emailFelado,//'kutafaja@hotmail.com',//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: 'klmuhely@gmail.com', subject: 'Jelenléti ívek '+calcdate+' hó', text: 'That was easy!', attachments: attachments,//[ //attachments // {filename: 'document.pdf', path: '2021_01\\Gipsz Jakab_2021_01_jelenleti.pdf', contentType: 'application/pdf'}, //{filename: 'document.pdf', path: '2021_01\\Vincze József_2021_01_jelenleti.pdf', contentType: 'application/pdf'} //] }; mailOptions.text='Tisztelt címzett!\n\nA dolgozók havi munkaidő összesítőjét mellékletként csatoltuk.'; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); callback(error,null); } else { console.log('Email sent: ' + info.response); callback(null,info.response); } }); } // Új API key értesítő function sendEmailApiKey(employee,apiKey) { var mailOptions = { from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com', to: employee.email, subject: 'Munkanyílvántartó új APIkey.', text: 'That was easy!' }; mailOptions.text='Tisztelt '+employee.name+'!\n\nAz ön új APIkey kulcsa a következő: '+apiKey; transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); } /// AXIOS GEOCODING function hereGeocoding(coords,callback) { var baseUrl = "https://geocode.search.hereapi.com/v1/geocode"; var login = "O8ywD979YtZrQTdwKFT4RpVjI_BQEVumBR2EuMhI8B4"; var at=coords.lat+'%2C'+coords.lon; var fullurl="https://revgeocode.search.hereapi.com/v1/revgeocode?at="+at+"&lang=en-US&apikey="+login axios .get(fullurl) .then(res => { // console.log(`statusCode: ${res.status}`); // console.log(res.data.items[0].address.city+', '+res.data.items[0].address.street+' '+res.data.items[0].address.houseNumber); if (res.data.items[0].resultType == "houseNumber") { var address={'city':res.data.items[0].address.city,'road':res.data.items[0].address.street,'number':res.data.items[0].address.houseNumber} callback(null,address); } else { var address={'city':res.data.items[0].address.city,'road':res.data.items[0].address.street,'number':' '} callback(null,address); } }) .catch(error => { console.error(error); callback(error,null); }); } /// var options = { //provider: 'pickpoint', provider: 'here', // Optional depending on the providers httpAdapter: 'https', // Default //apiKey: 't5zdsHf3AXBsrR4oQ1th', // for Mapquest, OpenCage, Google Premier //apiKey:'AIzaSyALs3u439ZZgTJRhR6F7ObMecGHOiSdbl0', apiKey:'O8ywD979YtZrQTdwKFT4RpVjI_BQEVumBR2EuMhI8B4', zoom:18, 'accept-language': 'hu', formatter: 'json' // 'gpx', 'string', ... }; var geocoder = NodeGeocoder(options); // Ellenőrzi, hogy a tömb tartalmazza e az adott elemet, ha igen true-vel visszatér var contains = function(needle) { // Per spec, the way to identify NaN is that it is not equal to itself var findNaN = needle !== needle; var indexOf; if(!findNaN && typeof Array.prototype.indexOf === 'function') { indexOf = Array.prototype.indexOf; } else { indexOf = function(needle) { var i = -1, index = -1; for(i = 0; i < this.length; i++) { var item = this[i]; if((findNaN && item !== item) || item === needle) { index = i; break; } } return index; }; } return indexOf.call(this, needle) > -1; }; function getCityName(latitude,longitude){ var city="Ismeretlen"; geocoder.reverse({lat:latitude, lon:longitude}, function(err, res) { if (err) { return city; } if (res) { city=res[0].city; console.log('GeoData: '+city); return city; } else { console.log('GeoData: nincs eredmény'); return city; } }); } function getAddress(latitude,longitude,locmode,callback){ //var address={}; if (locmode==="G2") { hereGeocoding({lat:latitude, lon:longitude}, function(err, res) { if (err) { callback(err,null); //return city; } else { if (res) { console.log('GeoData: '+JSON.stringify(res)); //return address; callback(null,res); } else { console.log('GeoData: nincs eredmény'); //return null var address={'city':'Nincs Helyadat','road':' ','number':' '} callback(null,address); } } }); }else { var spl=String(latitude).split(':'); var NS=spl[0]; var LAT=spl[1]; var spl=String(longitude).split(':'); var EW=spl[0]; var LON=spl[1]; var dec1=parseCoord(LAT,NS); var dec2=parseCoord(LON,EW); hereGeocoding({lat:dec1, lon:dec2}, function(err, res) { if (err) { callback(err,null); //return city; } else { if (res) { /* if (typeof res[0].streetNumber==='undefined') { var address={'city':res[0].city,'road':res[0].streetName,'number':' '} } else { var address={'city':res[0].city,'road':res[0].streetName,'number':res[0].streetNumber} }*/ /* address.city=res[0].city; address.road=res[0].streetName; address.number=res[0].streetNumber;*/ console.log('GeoData: '+res); //return address; callback(null,res); } else { console.log('GeoData: nincs eredmény'); //return null var address={'city':'Nincs Helyadat','road':' ','number':' '} callback(null,address); } } }); } } function getAddressDMS(latitude,longitude,callback){ //var address={}; /* var spl=String(latitude).split(':'); var NS=spl[0]; var LAT=spl[1]; var spl=String(longitude).split(':'); var EW=spl[0]; var LON=spl[1]; var dec1=parseCoord(LAT,NS); var dec2=parseCoord(LON,EW);*/ hereGeocoding({lat:latitude, lon:longitude}, function(err, res) { if (err) { callback(err,null); //return city; } else { if (res) { console.log('GeoData: '+res); //return address; callback(null,res); } else { console.log('GeoData: nincs eredmény'); //return null var address={'city':'Nincs Helyadat','road':' ','number':' '} callback(null,address); } } }); } /*function getAddress(latitude,longitude,callback){ //var address={}; var spl=String(latitude).split(':'); var NS=spl[0]; var LAT=spl[1]; var spl=String(longitude).split(':'); var EW=spl[0]; var LON=spl[1]; var dec1=parseCoord(LAT,NS); var dec2=parseCoord(LON,EW); geocoder.reverse({lat:dec1, lon:dec2}, function(err, res) { if (err) { callback(err,null); //return city; } else { if (res) { if (typeof res[0].streetNumber==='undefined') { var address={'city':res[0].city,'road':res[0].streetName,'number':' '} } else { var address={'city':res[0].city,'road':res[0].streetName,'number':res[0].streetNumber} } console.log('GeoData: '+address); //return address; callback(null,address); } else { console.log('GeoData: nincs eredmény'); //return null var address={'city':'Nincs Helyadat','road':' ','number':' '} callback(null,address); } } }); }*/ function getCityNameGPS(ns,latitude,ew,longitude){ var city="Ismeretlen"; geocoder.reverse({lat:latitude, lon:longitude}, function(err, res) { if (err) { return city; } if (res) { city=res[0].city; console.log('GeoData: '+city); return city; } else { return city; console.log('GeoData: nincs eredmény'); } }); } function autoCloseWorkTime() { moment.locale('HU'); WorkingTime.find({'state':'STARTED'},function(err, wt){ if (err) { console.log(err); } else { console.log('Automatikus lezárás futtatva.'); // Megkezdett idő lezárása éjjfélkor wt.forEach(element => { let access={}; access.state='ENDED'; access.timeGetaway=moment().format('L')+' '+moment().format('LT'); access.locationStop=' '; access.latitudeE=' '; access.longitudeE=' '; var a = moment(element.timeArrive, "YYYY.MM.DD. HH:mm"); var b = moment(access.timeGetaway, "YYYY.MM.DD. HH:mm"); var workhours = b.diff(a, 'minutes') // =1 if (isNaN(workhours)) { workhours=0; } access.workHours=workhours; WorkingTime.updateOne({_id:element._id},access,function(err){ if (err) { console.log('DB ERROR 10'); } else { // Auto lezárás 48 óra után if ((element.accumulatedTime+workhours)>=2880) // Ha több mint 48 óra eltelt { /* Employee.findById(element.employeeId,function(err,emp) { if (err) { console.log(err); } else { sendEmailAutoGetavayNotify48(emp,element.timeArrive,access.timeGetaway,convertMinsToHrsMins(access.workHours),employee.location); } })*/ } else { // Ha még nem telt le a 48 óra, akkor újranyitjuk a munkaidőt console.log('Munkaidő automatikusan lezárva lezárva: '+element._id); // Új bejegyzés készítése ha éjfélkor lezártuk az előző napot let access=new WorkingTime(); access.accessMode='GETAWAY'; access.employeeId=element.employeeId; access.notes="-"; access.location=element.location; access.locationStop=' ';//element.location; access.date=moment().format('L'); access.day=moment().format('dddd'); access.timeArrive=moment().format('L')+' '+moment().format('LT'); access.state='STARTED'; access.accumulatedTime=element.accumulatedTime+workhours; // belejavítva. HALMOZOTT IDŐ HOZZÁADÁSA access.workHours=0; access.timeGetaway="-"; access.save(function(err){ if(err){ console.log('DB ERROR 11'); }else{ let emp={}; emp.workingtimeId=access._id; Employee.update({_id:element.employeeId},emp,function(err){ if (err) { console.log('DB ERROR 12'); } else { console.log('Munkavállaló státusz automatikusan módosítva:' +element.employeeId); // Update fasza! } }) } }); //////////////////// } } }); }); } }); } // Esemény indítása éjjfélkor var j = schedule.scheduleJob('0 0 0 * * * ', function(){ getLastWorkTime(function(err,lwt){ if (err) { console.log(err); return; } }) autoCloseWorkTime(); }); // Havi esemény indítása Minden hónap első napján 12 00 kor schedule.scheduleJob('0 0 12 1 * * ' var j2 = schedule.scheduleJob('0 0 7 1 * * ', function(){ moment.locale('HU'); calcdate=moment().subtract(1, 'days').format('YYYY.MM'); console.log("Értesítő küldve: "+calcdate); proba(calcdate); //monthlyNotify(calcdate); }); // Havi esemény indítása Minden hónap első napján 8 kor schedule.scheduleJob('0 0 12 1 * * ' var j3 = schedule.scheduleJob('0 0 8 1 * * ', function(){ moment.locale('HU'); calcdate=moment().subtract(1, 'days').format('YYYY.MM'); console.log("Összesített Értesítő küldve: "+calcdate); makeWorktimeAll(calcdate); }); // Auto lezárás adatbázisban is 48 óra után function autoCloseWorkingTime48(workingtime) { let access={}; moment.locale('HU'); access.state='ENDED'; access.timeGetaway=moment().format('L')+' '+moment().format('LT'); access.notes=workingtime.notes; access.locationStop=workingtime.location; access.latitudeE=workingtime.latitudeS; access.longitudeE=workingtime.longitudeS; var a = moment(workingtime.timeArrive, "YYYY.MM.DD. HH:mm"); var b = moment(access.timeGetaway, "YYYY.MM.DD. HH:mm"); var workhours = b.diff(a, 'minutes') // =1 if (isNaN(workhours)) { workhours=0; } access.workHours=workhours; if (access.notes) { access.notes+=' -> Automatikusan lezárva 48 óra után.'; } else { access.notes='Automatikusan lezárva 48 óra után.'; } WorkingTime.updateOne({_id:workingtime._id},access,function(err){ if (err) { console.log('Autoclose DB ERROR 1'); } else { /*let emp={}; emp.workingtimeId=access._id; Employee.update({_id:workingtime.employeeId},emp,function(err){ if (err) { console.log('Autoclose DB ERROR 2'); } else { console.log('Munkavállaló státusz automatikusan módosítva:' +workingtime.employeeId); // Update fasza! } }); */ Employee.findById(workingtime.employeeId,function(err,empl){ if (err) { console.log(err); } else { sendEmailAutoGetavayNotify48(empl,workingtime.timeArrive,access.timeGetaway,convertMinsToHrsMins(workingtime.accumulatedTime),workingtime.location); console.log('Munkaidő automatikusan lezárva lezárva: '+workingtime._id+' --> '+empl.name); } }) } }); } // Esemény indítása 5 percenként. var min5 = schedule.scheduleJob("*/5 * * * *", function() { //console.log('This runs every 5 minutes'); getLastWorkTime(function(err,lwt){ if (err) { console.log(err); return; } }) }); // Segéd funkciók function convertMinsToHrsMins(minutes) { var h = Math.floor(minutes / 60); var m = minutes % 60; h = h < 10 ? '0' + h : h; m = m < 10 ? '0' + m : m; return h + ':' + m; } function convertMinsToHrsMins_R(minutes) { var h = Math.floor(minutes / 60); var m = minutes % 60; if (m>=30) { h+=1; } h = h < 10 ? '0' + h : h; //m = m < 10 ? '0' + m : m; return h;// + ':' + m; } /* **************** EXPORT DB ************************/ // Adatbázis export // AJAX // Alkalmazotti lista lekérése router.get('/exportWorkTime/:userId', utils.ensureAuthenticated,exportWorktime); /* **************** EXPORT DB ************************/ // Új szabadság gantt // AJAX // Alkalmazotti lista lekérése router.get('/get_employee_list', utils.ensureAuthenticated,function(req,res){ Employee.find({}, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { //console.log(employee); var emps=[]; res.send(employee); } }); }); // Alkalmazotti lista lekérése ID alapján router.get('/get_employee_list/:id', utils.ensureAuthenticated,function(req,res){ Employee.findById(req.params.id, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { //console.log(employee); res.send(employee); } }); }); function sendResponse(res, action, tid, error) { if (action == "error") console.log(error); var result = { action: action }; if (tid !== undefined && tid !== null) result.tid = tid; res.send(result); } function getTask(data) { return { text: data.text, start_date: data.start_date.date("YYYY-MM-DD"), duration: data.duration, progress: data.progress || 0, parent: data.parent }; } // add a new task router.post("/data/task", function (req, res) { var task = getTask(req.body); let holiday=new Holidays(); console.log('Add'); /* db.query("INSERT INTO gantt_tasks(text, start_date, duration, progress, parent)" + " VALUES (?,?,?,?,?)", [task.text, task.start_date, task.duration, task.progress, task.parent]) .then (function (result) { sendResponse(res, "inserted", result.insertId); }) .catch(function(error) { sendResponse(res, "error", null, error); });*/ }); // Alkalmazott kiadott szabadság mentése ID alapján router.post('/update_employee_holidaysById', utils.ensureAuthenticated,function(req,res){ var emp={}; var response; //emp.vacationUsed= console.log(req.body.employeeId); console.log(req.body.content); emp.vacationUsed=req.body.content; Employee.updateOne({_id:req.body.employeeId},emp, function(err) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { sendResponse(res, "inserted", req.body.employeeId); } }); }); // Új Szabadság kiadása /*router.get('/holiday_add_gantt', utils.ensureAuthenticated,function(req,res){ Employee.find({}, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { //console.log(employee); res.render('employee_holiday_add_gantt2', { title: 'Szabadság kiadása2', employee: employee, user:req.user }); } }); });*/ // Szabadságok megjelenítése router.get('/holiday_view_ec', utils.ensureAuthenticated,function(req,res){ checkIsHoliday(mongo.ObjectId("5cc0394bec573424a8f79059"),"25.12.2020",function(err,cb){ }) Employee.find({}, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { //console.log(employee); res.render('employee_holiday_view_byc', { title: 'Szabadságok', employee: employee, user:req.user }); } }); }); // Kiadott szabadságok lekérése ID alapján AJAX router.get('/get_holidaysById/:id', utils.ensureAuthenticated,function(req,res){ Employee.findById(req.params.id, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { //console.log(employee); var hd=[]; employee.holidayData.forEach(function(element,i,array){ //console.log('l:'+i+' fl:'+employee.holidayData.length); //hd+=('[\''+element.start_date+'\',\''+element.end_date+'\']'); //if (i<(array.length-1)) hd+=','; hd.push([element.start_date,element.end_date]); }) //hd+=']'; res.send(hd); } }); }); // Szabadságok naptárba router.get("/holidays_byperson_calendar/:id/:year", async function(req, res){ console.log('GANTT3'); var data=[]; moment.locale('HU'); const empId=req.params.id const year=req.params.year const employees=await Employee.find({'konyvelesre':'on','isSubcontractor':{$ne:'on'}},null,{sort: {name: 1}} ); await employees.forEach(element => { //const color = generateColorHsl(element.name, saturationRange, lightnessRange); //const c=HSLToRGB(color.h,color.s,color.l); element.holidayData.forEach(hd=>{ if (moment(hd.start_date,'DD.MM.YYYY').format('YYYY')==year || moment(hd.end_date,'DD.MM.YYYY').format('YYYY')==year) { if (empId==element._id) { var task={ id:hd._id, start:moment(hd.start_date,'DD.MM.YYYY').startOf('day').format('YYYY-MM-DD HH:mm:SS'), end:moment(hd.end_date,'DD.MM.YYYY').endOf('day').format('YYYY-MM-DD HH:mm:SS'),//.add(1, 'days').toDate(),//.endOf('day').toDate(), title:element.name, allDay:true, eventBackgroundColor: '#378006',//rgb(c.r,c.g,c.b), color: '#378006', editable:true, display:'all', extendedProps: { employeeId:element._id, employeeName:element.name, employeeEmail:element.email, order:1, active: true, }, } } else { var task={ id:hd._id, start:moment(hd.start_date,'DD.MM.YYYY').startOf('day').format('YYYY-MM-DD HH:mm:SS'), end:moment(hd.end_date,'DD.MM.YYYY').endOf('day').format('YYYY-MM-DD HH:mm:SS'),//.endOf('day').toDate(), title:element.name, allDay:true, eventBackgroundColor: '#378006',//rgb(c.r,c.g,c.b), color: '#CDCDCD', display:'all', editable:false, extendedProps: { employeeId:element._id, employeeName:element.name, employeeEmail:element.email, order:0, active: false, }, } } data.push(task); } }) }); res.send(data); }); // Táppénz felvétele router.get('/sickpay_byperson/:id', utils.ensureAuthenticated,function(req,res){ Employee.findById(req.params.id, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { //console.log(employee); res.render('employee_sickpay_byperson', { title: 'Táppénz '+employee.name, employee: employee, user:req.user }); } }); }); router.post('/sickpay_byperson/:id', utils.ensureAuthenticated,function(req,res){ console.log(req.params.id); console.log(req.body); moment.locale('HU'); let startd = moment(req.body.sField, 'DD.MM.YYYY'); //Pick any format let endd = moment(req.body.eField, 'DD.MM.YYYY'); let dayCounter = endd.diff(startd,'days')+1; console.log("Táppénz: ",dayCounter); //display your total elapsed weekdays in the console! let hd ={ start_date: req.body.sField, end_date: req.body.eField, duration: dayCounter, }; //hd.id=hd._id; Employee.findByIdAndUpdate(req.params.id,{ $inc: {'sickpayUsed': dayCounter },$push: {sickpayData:hd}},function(error,success){ if (error) { console.log(error); } else { console.log(success); //sendEmailHolidayNotify(success.name,success.email,hd); res.redirect('/employee/sickpay_byperson/'+req.params.id); } }); }); router.get('/get_sickpayById/:id', utils.ensureAuthenticated,function(req,res){ Employee.findById(req.params.id, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { //console.log(employee); var hd=[]; employee.sickpayData.forEach(function(element,i,array){ //console.log('l:'+i+' fl:'+employee.holidayData.length); //hd+=('[\''+element.start_date+'\',\''+element.end_date+'\']'); //if (i<(array.length-1)) hd+=','; hd.push([element.start_date,element.end_date]); }) //hd+=']'; res.send(hd); } }); }); // Kiadott/meglévő szabadság lekérése Full Calendar router.get('/holidays_count/:uid', async function (req,res){ const result= await Employee.findById(req.params.uid); if (result) { res.setHeader('Content-Type', 'application/json'); res.send({'response':'ok','vacationYear':result.vacationYear,'vacationUsed': result.vacationUsed, 'vacationLeft':result.vacationYear-result.vacationUsed}); } else { res.setHeader('Content-Type', 'application/json'); res.send({'response':'Fail','message':'Sikertelen művelet!'}); } }); // Új Szabadság kiadása router.get('/holidays_byperson/:id', utils.ensureAuthenticated,function(req,res){ Employee.findById(req.params.id, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { //console.log(employee); res.render('employee_holidays_byperson', { title: 'Szabadságok '+employee.name, employee: employee, user:req.user }); } }); }); // Szabadság módosítása router.post('/holiday_resize_update', async function(req,res){ const hd_event=req.body.event; var a = moment(hd_event.start,'YYYY-MM-DD'); var b = moment(hd_event.end,'YYYY-MM-DD'); const hdOld_event=req.body.oldEvent; var c = moment(hdOld_event.start,'YYYY-MM-DD'); var d = moment(hdOld_event.end,'YYYY-MM-DD'); const empId=hd_event.extendedProps.employeeId; let hd ={ duration: b.diff(a, 'days'), // 1 start_date: a.format('DD.MM.YYYY'), end_date: b.subtract(1,'days').format('DD.MM.YYYY'), }; const hdOld ={ duration: d.diff(c, 'days'), // 1 start_date: c.format('DD.MM.YYYY'), end_date: d.subtract(1,'days').format('DD.MM.YYYY'), }; const kulombseg=hd.duration-hdOld.duration const result1=await Employee.findByIdAndUpdate(empId,{ $inc: {'vacationUsed': kulombseg }}, {new: true}) const result=await Employee.updateOne( {'_id':mongo.ObjectId(hd_event.extendedProps.employeeId),"holidayData._id":hd_event.id}, {$set:{'holidayData.$.start_date':hd.start_date,'holidayData.$.end_date':hd.end_date}}, ) if (result.ok) { console.log('Holiday Updated! '+hd_event.id); res.setHeader('Content-Type', 'application/json'); sendEmailHolidayResizeNotify(hd_event.extendedProps.employeeName,hd_event.extendedProps.employeeEmail,hd,hdOld) res.status(200).send({'response':'OK','message':'Sikeres módosítás!','vacationUsed':result1.vacationUsed,'vacationLeft':result1.vacationYear-result1.vacationUsed}); } else { console.log('Holiday Failed to Update! '+hd_event.id); res.setHeader('Content-Type', 'application/json'); res.send({'response':'Fail','message':'Sikertelen Módosítás!'}); } }) // Szabadság áthelyezése router.post('/holiday_drop_update', async function(req,res){ const hd_event=req.body.event; var a = moment(hd_event.start,'YYYY-MM-DD'); var b = moment(hd_event.end,'YYYY-MM-DD'); const hdOld_event=req.body.oldEvent; var c = moment(hdOld_event.start,'YYYY-MM-DD'); var d = moment(hdOld_event.end,'YYYY-MM-DD'); let hd ={ duration: b.diff(a, 'days'), // 1 start_date: a.format('DD.MM.YYYY'), end_date: b.subtract(1,'days').format('DD.MM.YYYY'), }; const hdOld ={ duration: d.diff(c, 'days'), // 1 start_date: c.format('DD.MM.YYYY'), end_date: d.subtract(1,'days').format('DD.MM.YYYY'), }; const result=await Employee.updateOne( {'_id':mongo.ObjectId(hd_event.extendedProps.employeeId),"holidayData._id":hd_event.id}, {$set:{'holidayData.$.start_date':hd.start_date,'holidayData.$.end_date':hd.end_date}}, ) if (result.ok) { console.log('Holiday Updated! '+hd_event.id); res.setHeader('Content-Type', 'application/json'); sendEmailHolidayDropNotify(hd_event.extendedProps.employeeName,hd_event.extendedProps.employeeEmail,hd,hdOld) res.status(200).send({'response':'OK','message':'Sikeres módosítás!'}); } else { console.log('Holiday Failed to Update! '+hd_event.id); res.setHeader('Content-Type', 'application/json'); res.send({'response':'Fail','message':'Sikertelen Módosítás!'}); } }) // Szabadság törlése Fullcalendar router.delete('/holiday_destroy/:uid/:hid',utils.ensureAuthenticated, async function(req,res){ console.log("Delete UID: "+req.params.uid); console.log("Delete HID: "+req.params.hid); const hd_event=req.body.event; moment.locale('HU'); let startd = moment(req.body.event.start, 'YYYY.MM.DD'); //Pick any format let endd = moment(req.body.event.end, 'YYYY.MM.DD'); let weekdayCounter = endd.diff(startd, 'days'); console.log('DIFF: '+weekdayCounter) // 1 const result= await Employee.updateOne({_id:req.params.uid}, { $pull:{ 'holidayData':{'_id':req.params.hid}, }, }) if (result.ok){ const r=await Employee.updateOne({_id:req.params.uid}, { $inc: {'vacationUsed': -weekdayCounter }, }) if (r.ok) { res.setHeader('Content-Type', 'application/json'); res.send({'response':'OK','message':'A szabadság sikeresen törölve!\n'+weekdayCounter+' nap jóváírva.'}); } else { res.setHeader('Content-Type', 'application/json'); res.send({'response':'Fail','message':'Sikertelen művelet!'}); } }else { res.setHeader('Content-Type', 'application/json'); res.send({'response':'Fail','message':'Sikertelen művelet!'}); } //}) }) // Szabadság törlése /* router.delete('/holidays_delete/:uid/:hid',utils.ensureAuthenticated,function(req,res){ console.log("Delete UID: "+req.params.uid); console.log("Delete HID: "+req.params.hid); Employee.updateOne({_id:req.params.uid}, { $pull:{ 'holidayData':{'_id':req.params.hid}, } },function(err){ if (err){ res.send('A törlés sikertelen!'); }else { res.send('A művelet sikeres!'); } }) })*/ // Szabadság kiadás full calendar router.post('/holidays_byperson_fc/:id', utils.ensureAuthenticated,function(req,res){ console.log(req.params.id); console.log(req.body); moment.locale('HU'); let startd = moment(req.body.sField, 'DD.MM.YYYY'); //Pick any format let endd = moment(req.body.eField, 'DD.MM.YYYY'); let weekdayCounter = 0; while (startd <= endd) { console.log(startd.format('ddd')); weekdayCounter++; //add 1 to your counter if its not a weekend day startd = moment(startd, 'DD.MM.YYYY').add(1, 'days'); //increment by one day } console.log("Hétköznapok",weekdayCounter); //display your total elapsed weekdays in the console! let hd ={ start_date: req.body.sField, end_date: req.body.eField, duration: weekdayCounter, }; //hd.id=hd._id; Employee.findByIdAndUpdate(req.params.id,{ $inc: {'vacationUsed': weekdayCounter },$push: {holidayData:hd}},function(error,success){ if (error) { console.log(error); res.setHeader('Content-Type', 'application/json'); res.send({'response':'Fail','message':'Sikertelen művelet!'}); } else { console.log(success); sendEmailHolidayNotify(success.name,success.email,hd); //res.redirect('/employee/holidays_byperson/'+req.params.id); res.setHeader('Content-Type', 'application/json'); res.send({'response':'OK','message':'A szabadság sikeresen kiírva!'}); } }); }); // Szabadság kiadás régi router.post('/holidays_byperson/:id', utils.ensureAuthenticated,function(req,res){ console.log(req.params.id); console.log(req.body); moment.locale('HU'); let startd = moment(req.body.sField, 'DD.MM.YYYY'); //Pick any format let endd = moment(req.body.eField, 'DD.MM.YYYY'); let weekdayCounter = 0; while (startd <= endd) { console.log(startd.format('ddd')); // if (startd.format('ddd') !== 'szo' && startd.format('ddd') !== 'vas'){ weekdayCounter++; //add 1 to your counter if its not a weekend day //} startd = moment(startd, 'DD.MM.YYYY').add(1, 'days'); //increment by one day } console.log("Hétköznapok",weekdayCounter); //display your total elapsed weekdays in the console! let hd ={ start_date: req.body.sField, end_date: req.body.eField, duration: weekdayCounter, }; //hd.id=hd._id; Employee.findByIdAndUpdate(req.params.id,{ $inc: {'vacationUsed': weekdayCounter },$push: {holidayData:hd}},function(error,success){ if (error) { console.log(error); } else { console.log(success); sendEmailHolidayNotify(success.name,success.email,hd); res.redirect('/employee/holidays_byperson/'+req.params.id); } }); }); // Holiday Gantt feltöltés router.get("/data", function(req, res){ console.log('GANTT'); var data3;//=[]; var tasks=[]; // Munkavállalók betöltése Employee.find({},function(err, data){ if (err) { console.log(err); } else { var i=0; data.forEach(element =>{ if (element.holidayData.length) { //eidx=element.holidayData[0]._id; //var i=0; element.holidayData.forEach(hd=>{ tasks.push({id:element._id,text:element.name,start_date:hd.start_date,end_date:hd.end_date,duration:hd.duration}); }) i++; } }) var data = [ {id:1, text:"Jacica", start_date:"22-09-2020",end_date:"02-10-2020", color:"red"}, {id:2, text:"Task #1", start_date:"02-09-2020",end_date:"12-09-2020", color:"blue"}, {id:3, text:"Task #2", start_date:"11-05-2020",end_date:"10-05-2020", color:"green"} ]; data.forEach(element=>{ var s=new Date(moment(element.start_date,'DD-MM-YYYY')); var e=new Date(moment(element.end_date,'DD-MM-YYYY')); element.start_date=s; element.end_date=e; }) console.log(data); res.send(data); } }) }); // GANTT kiszolgáló API router.put("/api/task/:id",function(req,res){ var sid=req.body_id;//.req.params.id; Holidays.findByIdAndUpdate(sid,req.body,function(err){//{$set:{'ganttData':req.body}},function(err){ console.log('Mire való!'); if (err) { console.log("DB ERROR"); } else { res.status(200).end(); } }) }) router.all(/api/,function(req,res,next){ console.log(`\n$(req.method} ${req.url} --> ${JSON.stringify(req.body,'\t',2)}`); console.log (req.method); if (req.method==='POST'){ // Task rögzítése //let holiday=new Holidays(); let hd ={ id: '0', text: req.body.text, start_date: req.body.start_date, end_date: req.body.end_date, parent: req.body.parent, duration: req.body.duration, progress: req.body.progress, render: 'Split'}; //hd.id=hd._id; Employee.findByIdAndUpdate(req.body.employee,{$push: {holidayData:hd}},function(error,success){ if (error) { console.log(error); } else { console.log(success); } }); //holiday.employee_id=req.body.employee; //Ha még nincs ilyen /*if (req.body.parent==='0') { holiday.id=req.body.employee; holiday.render='split'; holiday.parent='0'; } else { holiday.parent=req.body.parent;//req.body.employee; holiday.id=holiday._id;//req.body.employee; } holiday.text='Valami'; holiday.start_date=req.body.start_date; holiday.end_date=req.body.end_date; holiday.duration= 1; holiday.progress=0; holiday.save(function(err){ if (err) { console.log('DB error: Holidays'); } else { res.status(200).end(); } })*/ } res.status(200).end(); }) router.post('/holiday_add', utils.ensureAuthenticated,function(req,res){ }); // Új Munkavállaló router.get('/add', utils.ensureAuthenticated,function(req,res){ var password = generator.generate({ length: 10, numbers: true, symbols: true, }); //employee.password=hash; Employee.find({}, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { res.render('employee_add', { title: 'Új munkavállaló', employees: employee, user:req.user, newPwd:password, }); } }); }); function isUsernameTaken(username) { return Employee.count({'email': username }) .then((count) => { if (count > 0) { return true; } return false; }); } function isRFIDTaken(rfid) { return Employee.count({'accessCode': rfid }) .then((count) => { if (count > 0) { return true; } return false; }); } // Új munkavállaló mentése router.post('/add',utils.ensureAuthenticated,function(req,res){ req.checkBody('Name','Munkavállaló megnevezése kötelező!').notEmpty(); req.checkBody('Address','Cím megadása kötelező!').notEmpty(); req.checkBody('rfid','RFID azonosító megadása kötelező!').notEmpty(); req.checkBody('vacationYear','Éves szabadság megadása kötelező!').notEmpty(); req.checkBody('vacationUsed','Kiadott szabadság megadása kötelező!').notEmpty(); req.checkBody('email', 'Email megadása kötelező!').notEmpty(); req.checkBody('email', 'Nem valós email cím!').isEmail(); req.checkBody('password', 'Jelszó megadása kötelező!').notEmpty(); req.checkBody('password2', 'Jelszavak nem egyeznek!').equals(req.body.password); //req.checkBody('flagStudent','hahó').equals('BE').equals(req.body.flagSubcontractor); // Get errors let errors = req.validationErrors(); if(errors) { res.render('employee_add', { title: 'Új munkavállaló', error:errors, user:req.user, }) } else { let employee=new Employee(); var visiblePassword=req.body.password; employee.name=req.body.Name; employee.shortName=req.body.shortName; employee.author=req.user.id; employee.accessCode=req.body.rfid; employee.address=req.body.Address; employee.vacationYear=req.body.vacationYear; employee.vacationUsed=req.body.vacationUsed; employee.password=req.body.password; employee.email=req.body.email; employee.apiKey='-'; employee.uuid='-'; mobilePortalAccessEnabled=false; employee.isForeman=false; employee.isStudent=req.body.flagStudent; if (typeof req.body.flagStudent === 'undefined') employee.isStudent=false; employee.konyvelesre=req.body.flagKonyveles; employee.isSubcontractor=req.body.flagSubContractor; if (typeof req.body.flagSubContractor === 'undefined') employee.isSubcontractor=false; if (typeof req.body.flagKonyveles === 'undefined') employee.konyvelesre=null; employee.auth= 'Test', bcrypt.genSalt(10, function(err, salt){ bcrypt.hash(employee.password, salt, function(err, hash){ if(err){ console.log(err); } employee.password=hash; //employee.workingtimeId='0' isUsernameTaken(employee.email) .then((isTaken) => { if (isTaken) { req.flash('danger','Ez a felhasználónév már foglalt!'); res.render('employee_add', { title: 'Új munkavállaló', error:errors, user:req.user, }) } else { isRFIDTaken(employee.accessCode) .then((isTaken) => { if (isTaken) { req.flash('danger','Ez az RFID azonisító már foglalt!'); res.render('employee_add', { title: 'Új munkavállaló', error:errors, user:req.user, }) } else { employee.save(function(err){ if(err){ console.log(err); return; }else{ req.flash('success','Munkavállaló sikeresen felvéve'); sendEmailRegisterNotify(employee,visiblePassword); res.redirect('/employee/list'); } }); } }) } }); }); }); } }); // Munkavállaló szerkesztése router.get('/edit/:id', utils.ensureAuthenticated,function(req,res){ Employee.findById(req.params.id, function(err,employee) { if (err) { console.log(err); res.send('Hiba történt az oldal betöltése során. '); } else { res.render('employee_edit', { title: 'Munkavállalói adatok módosítása', employee: employee, }); } }); }); // Meglévő munkavállaló mentése router.post('/edit/:id', utils.ensureAuthenticated,function(req,res){ req.checkBody('Name','Munkavállaló megnevezése kötelező!').notEmpty(); req.checkBody('Address','Cím megadása kötelező!').notEmpty(); req.checkBody('rfid','RFID azonosító megadása kötelező!').notEmpty(); req.checkBody('vacationYear','Éves szabadság megadása kötelező!').notEmpty(); req.checkBody('vacationUsed','Kiadott szabadság megadása kötelező!').notEmpty(); // Get errors let errors = req.validationErrors(); if(errors) { res.render('employee_edit', { title: 'Munkavállalói adatok módosítása', user:req.user, errors:errors }) } else { let employee={}; employee.name=req.body.Name; employee.shortName=req.body.shortName; employee.author=req.user.id; employee.email=req.body.email; employee.accessCode=req.body.rfid; employee.address=req.body.Address; employee.vacationYear=req.body.vacationYear; employee.vacationUsed=req.body.vacationUsed; employee.konyvelesre=req.body.flagKonyveles; employee.mobilePortalAccessEnabled=Boolean(req.body.mobilePortalAccessEnabled); employee.isSubcontractor=req.body.flagSubContractor; employee.isStudent=req.body.flagStudent; employee.isForeman=Boolean(req.body.flagIsForeman); employee.emailNotifyFlags={arriving:Boolean(req.body.flagArrive), getaway:Boolean(req.body.flagGetaway), monthlySummary:Boolean(req.body.flagMonthlySum), holiday:Boolean(req.body.flagHoliday)}; let query = {_id:req.params.id} Employee.updateOne(query,employee,function(err){ if(err){ console.log(err); return; }else{ req.flash('success','Munkavállalói adatok sikeresen módosítva'); res.redirect('/employee/list'); /*res.render('employee_list', { title: 'Munkavállalók', employee: employee, user:req.user });*/ } }); } }); // Munkavállalók listázása router.get('/list', utils.ensureAuthenticated, function(req, res) { var admin=false; //proba(); Employee.find({} ,function(err, employees){ if (err) { console.log(err); } else { // lastId=articles.workNumber; res.render('employee_list', { title: 'Munkavállalók', employees: employees, // articles: workSign }); } }); }); // Munkaidő lekérdezés function getWorkTimeList_old(employeeId,mindate,callback) { var date = new Date(); var query={}; // Ehavi esedékes var title="Tárgyhavi esedékes bejövő számlák" var firstDay= moment(mindate,"YYYY.MM").startOf('month').format("YYYY.MM.DD"); var lastDay = moment(mindate,"YYYY.MM").endOf('month').format("YYYY.MM.DD"); var weekendDays=[]; var weekends=0; query={$and:[{'state':'ENDED','date': {$gte : firstDay,$lt: lastDay},'employeeId': employeeId}]}; WorkingTime.find(query,null,function(err, wt){ if (err) { callback(err); } else { var worktime=0; wt.forEach(element => { var day = moment(element.date,'YYYY.MM.DD.').day(); var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday if (isWeekend) { // Ha hétvége if (!contains.call(weekendDays,element.date)) { weekendDays.push(element.date); } } worktime+=element.workHours; var day = moment(element.date,'YYYY.MM.DD.').day(); }); weekends=weekendDays.length; callback(null,worktime,weekends,title); } }); } // Munkaidő lekérdezés function getWorkTimeList_old2(employeeId,mindate,callback) { var date = new Date(); var query={}; // Ehavi esedékes var title="Tárgyhavi esedékes bejövő számlák" var firstDay= moment(mindate,"YYYY.MM").startOf('month').format("YYYY.MM.DD"); var lastDay = moment(mindate,"YYYY.MM").endOf('month').format("YYYY.MM.DD"); var weekendDays=[]; var weekends=0; query={$and:[{'state':'ENDED','date': {$gte : firstDay,$lt: lastDay},'employeeId': employeeId}]}; WorkingTime.find(query,null,function(err, wt){ if (err) { callback(err); } else { var worktime=0; /* wt.forEach(element => { var day = moment(element.date,'YYYY.MM.DD.').day(); var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday if (isWeekend) { // Ha hétvége if (!contains.call(weekendDays,element.date)) { weekendDays.push(element.date); } } worktime+=element.workHours; var day = moment(element.date,'YYYY.MM.DD.').day(); });*/ var workDays=[]; var overTime=0; var monthWorkHours=0; var otToday= 0; wt.forEach(function(element) { var hoursToday=0; var day = moment(element.date,'YYYY.MM.DD.').day(); var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday if (isWeekend) { // Ha hétvége /* if (!contains.call(weekendDays,wt.date)) { weekendDays.push(wt.date); }*/ } else { /* if (element.workHours>540) { // A túlórát nem számoljuk a munkaidő közé monthWorkHours+= 540; } else { monthWorkHours+= element.workHours; }*/ // Ha hétköznap var wdays=workDays.find(e=>e.date===element.date); if (wdays) { // Már van ilyen nap //wdays.startStop.push({start:element.timeArrive,stop:element.timeGetaway}); //wdays.stop.push(element.timeGetaway); if (wdays.hours>540){ wdays.overtime+=wdays.hours-540; overTime+=wdays.hours-540; wdays.hours+=600; monthWorkHours+= 10; } else { wdays.hours+=element.workHours; monthWorkHours+= element.workHours; } } else { otToday=0; // Még nincs ilyen nap, hozzáadjuk if (element.workHours>540) { otToday=(element.workHours-540); overTime+=otToday; hoursToday=540; monthWorkHours+= 540; } else { hoursToday=element.workHours; monthWorkHours+= element.workHours; } workDays.push({date:element.date,location:element.location,notes:element.notes,startStop:[{start:element.timeArrive,stop:element.timeGetaway}],hours:hoursToday,overtime:otToday}); } } }) //console.log('All done!'); weekends=weekendDays.length; callback(null,monthWorkHours,weekends,title); } }); } // Munkaidő lekérdezés Eredeti /*function getWorkTimeList(employeeId,mindate,callback) { // Ehavi esedékes sumOfMonth(employeeId,mindate,function(err,som){ if (err) { console.log(err); } else { var weekend={days:0,overTime:0,workHours:0,fullHours:0}; var month={days:0,overTime:0,workHours:0,fullHours:0}; //var monthOverTime=0; //var monthWorkHours=0; som.forEach(function(element) { if (element.isWeekend) { // not implemented! // console.log('Not implemented!!!'); if (element.fullHours>540) { // A túlórát nem számoljuk a munkaidő közé element.hours=540; element.overTime=element.fullHours-element.hours; } else { element.hours=element.fullHours; element.overTime=0; } weekend.days+=1; weekend.workHours+=element.hours; weekend.overTime+=element.overTime; weekend.fullHours+=element.fullHours; } else { if (element.fullHours>540) { // A túlórát nem számoljuk a munkaidő közé element.hours=540; element.overTime=element.fullHours-element.hours; } else { element.hours=element.fullHours; element.overTime=0; } month.days+=1; month.workHours+=element.hours; month.overTime+=element.overTime; month.fullHours+=element.fullHours; //monthWorkHours+= element.hours; //monthOverTime+=element.overTime; // Ha hétköznap } }) //console.log('All done!'); //res.send({wd:som,monthWorkHours:monthWorkHours,monthOverTime:monthOverTime}); //callback(null,monthWorkHours,monthOverTime,weekends); callback(null,month,weekend); } }); }*/ // Munkaidő lekérdezés Új function getWorkTimeList(employeeId,mindate,callback) { // Ehavi esedékes sumOfMonth(employeeId,mindate,function(err,som){ if (err) { console.log(err); } else { var weekend={days:0,overTime:0,workHours:0,fullHours:0}; var month={days:0,overTime:0,workHours:0,fullHours:0}; //var monthOverTime=0; //var monthWorkHours=0; som.forEach(function(element) { // Napi idő kiszámítása var dayWorkHours=oneDayCalculate(element.fullHours); element.hours=dayWorkHours.workHours; element.overTime=dayWorkHours.overHours; if (element.isWeekend) { weekend.days+=1; weekend.workHours+=element.hours; weekend.overTime+=element.overTime; weekend.fullHours+=element.fullHours; } else { month.days+=1; month.workHours+=element.hours; month.overTime+=element.overTime; month.fullHours+=element.fullHours; // Ha hétköznap } }) //console.log('All done!'); //res.send({wd:som,monthWorkHours:monthWorkHours,monthOverTime:monthOverTime}); //callback(null,monthWorkHours,monthOverTime,weekends); callback(null,month,weekend); } }); } // Sorbarendezés var sortByProperty = function (property) { return function (x, y) { return ((x[property] === y[property]) ? 0 : ((x[property] > y[property]) ? 1 : -1)); }; }; // Havi munkaidők lekérdezése AJAX Route router.get('/worktimelist/:mindate', utils.ensureAuthenticated, function(req, res) { var wtList=[]; Employee.find({},function(err,emp){ // Havi ledolgozott órák listázása alkalmazottanként if (err) { console.log(err); } else { async.each(emp,function(element,next){ //console.log(' ------------------ '+req.params.mindate+' ---------------- ') getWorkTimeList(element._id,req.params.mindate,function(err,month,weekend){ if (err) { console.log(err); } else { if (element.workingtimeId){ // Ha már dolgozott WorkingTime.findById(element.workingtimeId,function(err,wtime){ if (wtime!=null){ if (wtime.state==='ENDED') wtime.state='VÉGZETT'; if (wtime.state==='STARTED') wtime.state='DOLGOZIK'; if (element.konyvelesre==='on') {//wtList.push({employeeId: element._id,device:"", isSubcontractor: element.isSubcontractor, isStudent: element.isStudent, state: wtime.state,location: wtime.location,name: element.name,vacationYear:element.vacationYear,vacationUsed:element.vacationUsed,weekend:weekend,redLetterDays:0, month:month}); DeviceRemote.findById(wtime.deviceId, function(err,device){ if (typeof device === undefined || !device ) { wtList.push({employeeId: element._id,device:"-", isSubcontractor: element.isSubcontractor, isStudent: element.isStudent, state: wtime.state,location: wtime.location,name: element.name,vacationYear:element.vacationYear,vacationUsed:element.vacationUsed,weekend:weekend,redLetterDays:0, month:month}); } else { wtList.push({employeeId: element._id,device:device.assignment, isSubcontractor: element.isSubcontractor, isStudent: element.isStudent, state: wtime.state,location: wtime.location,name: element.name,vacationYear:element.vacationYear,vacationUsed:element.vacationUsed,weekend:weekend,redLetterDays:0, month:month}); } next(); }) } else next(); } else { WorkingTime.find({employeeId: element._id}).sort({'_id':-1}).limit(1).exec(function(err,lastWt){ if (err){ console.log('Error: /worktimelist/:mindate'); } else { console.log('Wrong Key: '+element.name+' ---> '+element.workingtimeId+' Least key is: '+lastWt); } }) console.log(element.name+' ---> '+element.workingtimeId) } // next(); }) }else { next(); } //wtList.push({employeeId: element._id, state: element.state,name: element.name,vacationYear:element.vacationYear,vacationUsed:element.vacationUsed,weekends:0,redLetterDays:0, workHours:wt}); } //next(); }); }, function(err){ //console.log('All done!'); /*res.render('employee_access_list', { title: 'Munkaidő lista', wtList: wtList }); */ wtList.sort(sortByProperty('name')); res.send(wtList); }); } }) // Employee }); // FRISSÍTETT BLOKKOK // Egy havi munkaidő összegzés /*async function sumOfMonth(employee_id,mindate,callback) { var msz=getMunkaszunet(mindate); workReport=await getWorkReportById(employee_id,mindate)//.then(workReport=>{ // WorkReport Lekérése. getWorkTimeListById(employee_id,mindate,function(err,wt){ if (err) { console.log(err); callback(err); } else { var workDays=[]; wt.forEach(function(element) { var isMunkaszunet=false;//hoursToday=0; var drName=''; var dwr='' var day = moment(element.date,'YYYY.MM.DD.').day(); var drDate = moment(element.date,'YYYY.MM.DD.').format('YYYY.MM.DD'); var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday var latS=element.latitudeS; var lonS=element.longitudeS; var latE=element.latitudeE; var lonE=element.longitudeE; var workOnMunkaszunet=false; //var cNotes=""; //var notes=""; var wr={} if (workReport.length){ // wr=workReport.find(wrelement => wrelement.date===new Date(drDate)) workReport.forEach(function(wrelement){ ///console.log(`Itemdate: ${wrelement.date} CurrDate: ${new Date(drDate)}`) if (new Date(wrelement.date).getTime()===new Date(drDate).getTime()) { // console.log("Egyenlő!\n") wr=wrelement; } }) if (wr!={}) console.log(wr.date) } var dr=wt.rd.filter(element => element.date==drDate) if (typeof element.latitudeS==='undefined') latS='N/A' if (typeof element.longitudeS==='undefined') lonS='N/A' if (typeof element.latitudeE==='undefined') latE='N/A' if (typeof element.longitudeE==='undefined') lonE='N/A' // Ha hétköznap var wdays=workDays.find(e=>e.date===element.date); if (wdays) { // Már van ilyen nap wdays.startStop.push({id:element._id,start:element.timeArrive,stop:element.timeGetaway}); wdays.locations.push({ arriveLoc:element.location, getawayLoc:element.locationStop, arriveCoords:{lat:latS,lon:lonS}, getavayCoords:{lat:latE,lon:lonE} }); wdays.notes.push({userNote:element.notes, companyNote: element.company_notes}); wdays.fullHours+=element.workHours; } else { if (typeof wr==='undefined') { dwr=''; } else { dwr=wr; } if (typeof dr==='undefined') { drName=''; } else { drName=dr; } // Még nincs ilyen nap, hozzáadjuk const idxmsz=msz.indexOf(element.date); if (idxmsz!==-1) { isMunkaszunet=true; element.company_notes="Ünnep" workOnMunkaszunet=true; element.isMunkaszunet=true msz.splice(idxmsz, 1); } workDays.push({ date:element.date, isMunkaszunet:isMunkaszunet, workOnMunkaszunet:element.workOnMunkaszunet, isHoliday:false, isSickpay:false, isWeekend:isWeekend, state:element.state, location:element.location, notes:[{ userNote: element.notes, companyNote: element.company_notes ?? "-" }], companyNotes: element.company_notes ?? "", locations:[{ arriveLoc:element.location, getawayLoc:element.locationStop, arriveCoords:{lat:element.latitudeS,lon:element.longitudeS}, getavayCoords:{lat:element.latitudeE,lon:element.longitudeE} }], startStop:[{ id:element._id, start:element.timeArrive, stop:element.timeGetaway }], fullHours:element.workHours, hours:0, overTime:0, dailyReport:drName, workReport:dwr }); } }) msz.forEach(function(munkaszunet){ workDays.push({date:munkaszunet,isMunkaszunet:true,hours:480,overTime:0,Surrogate:0,startStop:[],locations:[],notes:[{userNote:'', companyNote: 'Ünnep'}]}) }) callback(null,workDays); } })//}) }*/ // Munkaidő kiolvasás ID alapján router.get('/getWorkingTimeById/:id',utils.ensureAuthenticated,function(req, res){ WorkingTime.findById(req.params.id,function(err,wt){ if (err) { console.log('workingTime Error'); } else { res.send(wt); } }) }); // Munkaidő módosítás ID alapján router.post('/setWorkingTimeById/:id',utils.ensureAuthenticated,function(req, res){ var id=1; var a = moment(req.body.dtPickerArrive,'YYYY-MM-DDTHH:mm'); var b = moment(req.body.dtPickerGetaway,'YYYY-MM-DDTHH:mm'); var workhours = b.diff(a, 'minutes') // =1 WorkingTime.findOneAndUpdate({'_id':req.body.idField,'employeeId':req.params.id},{ 'location':req.body.locStartField, 'locationStop':req.body.locStopField, 'latitudeS':req.body.latStartField, 'longitudeS':req.body.lonStartField, 'latitudeE':req.body.latStopField, 'longitudeE':req.body.lonStopField, 'timeArrive':moment(req.body.dtPickerArrive,'YYYY-MM-DDTHH:mm').format('YYYY.MM.DD. HH:mm'), 'timeGetaway':moment(req.body.dtPickerGetaway,'YYYY-MM-DDTHH:mm').format('YYYY.MM.DD. HH:mm'), 'date':moment(req.body.dtPickerArrive,'YYYY-MM-DDTHH:mm').format('YYYY.MM.DD.'), 'day':moment(req.body.dtPickerArrive,'YYYY-MM-DDTHH:mm').format('dddd'), 'workHours':workhours, 'company_notes':req.body.companyNotes }, function(err,result){ if (err) { req.flash('error','Módosítás sikertelen'); res.redirect('/employee/detailstemp/'+req.params.id); } req.flash('error','Módosításva: '+result); res.redirect('/employee/detailstemp/'+req.params.id); }) }); // Munkaidő törlése router.delete('/deleteWorktime/:id',utils.ensureAuthenticated, function(req,res){ var id = req.params.id; var deletedWorkingTime={}; // Megnézzük ez e az utolsó bejegyzés Employee.findOne({workingtimeId: id},function(err,element){ if (err){ // Valami hiba van console.log('Error: /deleteWorktime/:id'); } else { if (element ==typeof(undefined) || element==null){ // Nem ez az utolsó békén hagyjuk. console.log('Deleted Key: '+id+' ---> Nincs módosítás.'); WorkingTime.findById(id,function(err,result){ if (result){ deletedWorkingTime=result; Employee.findById(result.employeeId,function(err,empelement){ if (err){ console.log(err); } else { if (empelement) { sendEmailDeletedWorkingTimeNotify(empelement,deletedWorkingTime); } } }) } }) // Mostmár törölhetjük a bejegyzést WorkingTime.findOneAndRemove({_id: id}, function(err){ if(err) { //console.log('Picsa >>'+err); return res.status(500).send(); } else { req.flash('success','Bejegyzés sikeresen törölve!'); res.status(200).send(); } }); }else { // Mostmár törölhetjük a bejegyzést WorkingTime.findById(id,function(err,result){ deletedWorkingTime=result; sendEmailDeletedWorkingTimeNotify(element,deletedWorkingTime); }) WorkingTime.findOneAndRemove({_id: id}, function(err){ if(err) { //console.log('Picsa >>'+err); return res.status(500).send(); } else { // Ez az utolsó, törölve lesz. WorkingTime.find({"employeeId" : element._id}).sort({'_id':-1}).limit(1).exec(function(err,lastWt){ if (err){ console.log('Error in find lastwt '); return res.status(500).send(); } else { // Megvan az utolsó, ezt állítjuk vissza. if (lastWt.length>0) { var lastId=lastWt.length-1; var update={}; update.workingtimeId=lastWt[lastId]._id; Employee.findOneAndUpdate({'_id':element._id},update,function(err){ //element.save(function(err){ if (err){ console.log('Error in delete and update last worktime.'); } else { // Sikeres mentés console.log('Deleted Key: '+element.name+' ---> '+element.id+' Least key is: '+lastWt[lastId]._id+' Módosítva.'); req.flash('success','Bejegyzés sikeresen törölve!'); res.status(200).send(); } }) } else { console.log('Valami nem fasza a munkaidő törlése során.'); return res.status(500).send(); } } }) } }); } } }) }); /* */ // Utolsó 4 munkaidő listázása function getLastCardAccess(id,callback) { /*WorkingTime.find({'employeeId':id,'state':'ENDED'}).sort({ _id: -1 }).limit(4).exec(function(err, data){ if (err) { console.log(err); callback(err,null); } else { callback(null,data); console.log('Last 4 entry: '+data) } });*/ Employee.findById(id,function(err,emp){ if (err) { console.log(err); callback(err); } else { WorkingTime.findOne({'_id':emp.workingtimeId},function(err,wt){ if (err) { console.log(err); callback(err); } else { callback(null,wt); } }) } }) } // Legutolsó munkaidő hossz ellenőrzése function getLastWorkTime(callback) { var empNeedToClose=[]; //query={$and:[{'state':'STARTED'},{'accumulatedTime': {$gte : 28}}]}; //2880 WorkingTime.find({'state':'STARTED'},function(err, emp){ if (err) { console.log(err); callback(err); } else { if (emp.length) { let d2 = moment(new Date()); var bar = new Promise((resolve, reject) => { emp.forEach((element,index,array)=>{ let d1 = moment(element.timeArrive,'YYYY.MM.DD. HH.mm'); let hours = (element.accumulatedTime+d2.diff(d1, 'minutes')); if (hours>=2880) { element.accumulatedTime+=d2.diff(d1, 'minutes') empNeedToClose.push(element); getLastCardAccess(element.employeeId,function(err,data){console.log(data.timeArrive)}); autoCloseWorkingTime48(element); } if (index === array.length -1) resolve(); }); //callback(null,empNeedToClose); }); bar.then(() => { callback(null,empNeedToClose); }); } else { callback(null,empNeedToClose); } } }); } var getWorkdaysCount=function(startDate,endDate) { moment.locale('HU'); let startd = moment(startDate, 'DD.MM.YYYY'); //Pick any format let endd = moment(endDate, 'DD.MM.YYYY'); let weekdayCounter = 0; while (startd <= endd) { console.log(startd.format('ddd')); if (startd.format('ddd') !== 'szo' && startd.format('ddd') !== 'vas'){ weekdayCounter++; //add 1 to your counter if its not a weekend day } startd = moment(startd, 'DD.MM.YYYY').add(1, 'days'); //increment by one day } //console.log("Hétköznapok",weekdayCounter); //display your total elapsed weekdays in the console! return weekdayCounter; } // Szabadság darabolása, ha szükséges. Visszatér z új intervallummal var holidaySplit=function(holidayDate, holidayStart,holidayEnd) { const rng = moment().range(moment('00:00 '+holidayStart,'HH:MM DD.MM.YYYY'), moment('23:59 '+holidayEnd,'HH:MM DD.MM.YYYY')); const sub=moment().range(moment('00:00 '+holidayDate,'HH:MM DD.MM.YYYY').subtract(1), moment('23:59 '+holidayDate,'HH:MM DD.MM.YYYY').add(1,'hour')); const er=rng.subtract(sub); if (er.length>0) console.log(moment(er[0].start).format('DD.MM.YYYY')+' - '+moment(er[0].end).format('DD.MM.YYYY')); if (er.length>1) console.log(moment(er[1].start).format('DD.MM.YYYY')+' - '+moment(er[1].end).format('DD.MM.YYYY')); return er; } // A megadott napot ellenőrzi a szabadságban és ha szerepel kiveszi // Ha szabadság alatt bejön a faszi, visszakapja azt a napot :D function checkIsHoliday(employeeId,mindate,callback) { Employee.findById(employeeId,function(err,emp){ if (err) { callback(err,null); } else { if (emp) { //console.log(emp.holidayData); emp.holidayData.forEach((element,index,array)=>{ var range= moment.range(moment(element.start_date,'DD.MM.YYYY'), moment(element.end_date,'DD.MM.YYYY')); if (range.contains(moment(mindate,'DD.MM.YYYY'))) { // A szabadságok között szerepel a megadott nap, ezért kivonjuk belőlle. /*console.log(range); var sd=moment.range(moment(mindate,'DD.MM.YYYY').subtract(1, "days"),moment(mindate,'DD.MM.YYYY').add(1,'days')); console.log(sd); var nr=range.subtract(sd); */ nr=holidaySplit(mindate,element.start_date,element.end_date); console.log(nr); if (nr.length===0) { /*collection.update( { _id: id }, { $pull: { 'contact.phone': { number: '+1786543589455' } } } );*/ console.log(element._id); Employee.findOneAndUpdate({'_id': employeeId}, {'$pull': { 'holidayData': {'_id':element._id} } }, function(err) { console.log(err); }); Employee.findByIdAndUpdate(employeeId,{ $inc: {'vacationUsed': -1 }},function(error,success){ if (error) { console.log(error); } else { console.log('Szabadság tördelve 1 nap jóváírva.'); } }); } if (nr.length>0) { Employee.findOneAndUpdate({'_id': employeeId,'holidayData._id': element._id}, {'$set': { 'holidayData.$.start_date': moment(nr[0].start).format('DD.MM.YYYY'), 'holidayData.$.end_date': moment(nr[0].end).format('DD.MM.YYYY'), 'holidayData.$.duration': getWorkdaysCount(nr[0].start,nr[0].end) }}, function(err) { console.log(err); }); Employee.findByIdAndUpdate(employeeId,{ $inc: {'vacationUsed': -1 }},function(error,success){ if (error) { console.log(error); } else { console.log('Szabadság tördelve 1 nap jóváírva.'); } }); } if(nr.length===2) { let hd ={ start_date: moment(nr[1].start).format('DD.MM.YYYY'), end_date: moment(nr[1].end).format('DD.MM.YYYY'), duration: getWorkdaysCount(nr[1].start,nr[1].end), }; /* Employee.findByIdAndUpdate(employeeId,{ $inc: {'vacationUsed': -1 },$push: {holidayData:hd}},function(error,success){ if (error) { console.log(error); } else { console.log('Szabadság tördelve 1 nap jóváírva.'); } });*/ } /* nr.forEach((n,index,array)=>{ console.log(moment(n.start).format('DD.MM.YYYY')+' - '+moment(n.end).format('DD.MM.YYYY')); }); console.log(range);*/ } }); } callback(null,null); } }) } router.get('/tst',utils.ensureAuthenticated,function(req,res){ hereGeocoding({lat:47.2378035, lon:21.620256},function(err,result){ if (err) { console.log(err); } else { console.log(result); } }); /* geocoder.reverse({lat:47.2378035, lon:21.620256}, function(err, resp) { if (err) { console.log('Geocoding error!\r\n'+err); } if (resp) { //address={'city':resp[0].city,'road':resp[0].streetName} city=resp[0].city; } })*///Geocoding end /*getLastWorkTime(function(err,lwt){ if (err) { console.log(err); return; } //autoCloseWorkTime(); res.send(JSON.stringify(lwt,null,4)); })*/ //proba('2021.05'); /*autoCloseWorkTime(); req.flash('success','Munkaidő lezárás futtatva!'); res.redirect('/');*/ }) // Havi munkaidők lekérdezése egymunkavállalóra AJAX Route router.get('/details/:id/:mindate', utils.ensureAuthenticated, function(req, res) { getWorkTimeListById(req.params.id,req.params.mindate,function(err,wt){ if (err) { console.log(err); } else { //console.log('All done!'); res.send(wt); } }); }); // Havi munkaidők lekérdezése egymunkavállalóra AJAX Route router.get('/details2/:id/:mindate', utils.ensureAuthenticated, async function(req, res) { var holidaysArray=await getHolidayListById(req.params.id,moment(req.params.mindate,'YYYY.MM').format('MM.YYYY'),req.params.mindate)//,function(err,holidaysArray){ var sickpaysArray=await getSickpayListById(req.params.id,moment(req.params.mindate,'YYYY.MM').format('MM.YYYY'),req.params.mindate) sumOfMonth(req.params.id,req.params.mindate,function(err,som){ if (err) { console.log(err); } else { var month={overTime:0,workHours:0,fullWorkHours:0,sickPays:0}; var weekend={ Saturday:{overTime:0,workHours:0,fullWorkHours:0,days:0,Surrogate:0}, Sunday:{overTime:0,workHours:0,fullWorkHours:0,days:0,Surrogate:0} } som.forEach(function(element) { var hoursToday=0; var day = moment(element.date,'YYYY.MM.DD.').day(); /********************************* */ /********************************** */ //if (!element.isMunkaszunet || element.workOnMunkaszunet==true) // { const notLast=element.startStop.length > 0 if (element.state=="ENDED")//element.startStop[element.startStop.length-1].stop!='-') { // Napi idő kiszámítása var dayWorkHours=oneDayCalculate(element.fullHours); element.lunchtime=dayWorkHours.lunchtime; if (element.isWeekend) { if (day===6) // Szombat { element.hours=(dayWorkHours.workHours); element.overTime=(dayWorkHours.overHours); element.Surrogate=Math.ceil((element.hours+element.overTime)*0.5); weekend.Saturday.workHours+=(element.hours*1.5); weekend.Saturday.overTime+=(element.overTime*1.5); weekend.Saturday.fullWorkHours+=((element.hours+element.overTime)*1.5); weekend.Saturday.days+=1; weekend.Saturday.Surrogate+=element.Surrogate; } if (day===0) // Vasárnap { element.hours=dayWorkHours.workHours; element.overTime=dayWorkHours.overHours; element.Surrogate=(element.hours+element.overTime) weekend.Sunday.workHours+=element.hours; weekend.Sunday.overTime+=element.overTime; weekend.Sunday.fullWorkHours+=(element.hours+element.overTime); weekend.Sunday.days+=1; weekend.Sunday.Surrogate+=element.Surrogate; } } else { // Ha hétköznap element.hours=dayWorkHours.workHours;//element.hours=540; element.overTime=dayWorkHours.overHours;//element.fullHours-element.hours element.Surrogate=0; month.workHours+=element.hours; month.overTime+=element.overTime; month.fullWorkHours+=(element.hours+element.overTime); } // is Weekend } else { element.lunchtime=60; element.Surrogate=0; } ////} //else //{ //Munkaszüneti nap // } }) //console.log('All done!'); var ja; var msz=getMunkaszunet(req.params.mindate); if (som.length>0) { ja = som.concat(holidaysArray); ja=ja.concat(sickpaysArray); } else { ja=holidaysArray; } ja.sort(function(a, b) { return moment(a.date,'YYYY.MM.DD') - moment(b.date,'YYYY.MM.DD'); }); // Munkaszüneti napok ellenőrzése és kijelzése month.sickPays=sickpaysArray.length res.send({wd:ja,munkaszunet:msz,month:month,weekend:weekend}); } }); //}); // End of Holiday list }); // Nyomtatás router.get('/print', utils.ensureAuthenticated, function(req, res) { var dt = new Date(); var fonts = { Roboto: { normal: 'public/fonts/Roboto-Regular.ttf', bold: 'public/fonts/Roboto-Medium.ttf', italics: 'public/fonts/Roboto-Italic.ttf', bolditalics: 'public/fonts/Roboto-MediumItalic.ttf' } }; var PdfPrinter = require('pdfmake/src/printer'); var printer = new PdfPrinter(fonts); Invoice.find({},null,{sort: {expiryDate: -1}} ,function(err, invoices){ if (err) { console.log(err); } else { var data=printPage(invoices, function(err,data){ // Client side pdf pdfMake.createPdf(data).open(); // Server side pdf /*var pdfDoc = printer.createPdfKitDocument(data); pdfDoc.pipe(fs.createWriteStream(__dirname+'/../docs/tables.pdf')); pdfDoc.end(); res.download(path.normalize(__dirname+'/../docs/tables.pdf'),'számlalista_összes.pdf'); */ }); } }); }); // Munkavállalók munkaidő listázása router.get('/accesslist', utils.ensureAuthenticated, function(req, res) { var admin=false; res.render('employee_access_list', { title: 'Munkaidő lista', cuserid: req.user._id // articles: workSign }); /*WorkingTime.aggregate([ { "$lookup": { "from": "employees", "localField": "employeeId", "foreignField": "_id", "as": "employee_data" } }]).exec((err,workingtime)=>{ // WorkingTime.find({} ,function(err, workingtime){ if (err) { console.log(err); } else {*/ // lastId=articles.workNumber; /* var wtList=[]; Employee.find({},function(err,emp){ // Havi ledolgozott órák listázása alkalmazottanként if (err) { console.log(err); } else { async.each(emp,function(element,next){ getWorkTimeList(element._id,moment().format('YYYY.MM.DD'),function(err,wt, pageTitle){ if (err) { console.log(err); } else { wtList.push({employeeId: element._id, name: element.name,vacation:0,weekends:0,redLetterDays:0, workHours:wt}); } next(); }); }, function(err){ res.render('employee_access_list', { title: 'Munkaidő lista', wtList: wtList, // articles: workSign }); }); } }) */ /* } });*/ }); // New Api key router.get('/newApiKey/:id', utils.ensureAuthenticated,function (req, res) { //calling.aFunction(); var apikey=uuidAPIKey.create(); console.log(req.params.id); let employee={}; employee.apiKey=apikey.apiKey; employee.uuid=apikey.uuid; let query = {_id:req.params.id} Employee.findOneAndUpdate(query,employee,{ returnNewDocument: true },function(err,document){ if(err){ console.log(err); return; }else{ sendEmailApiKey(document,apikey.apiKey) //console.log(document.name); res.send({'new API key is:': apikey.apiKey}); } }); }); // New Api key router.get('/newPassword/:id', utils.ensureAuthenticated,function (req, res) { //calling.aFunction(); let employee={}; var password = generator.generate({ length: 10, numbers: true, symbols: true, }); bcrypt.genSalt(10, function(err, salt){ bcrypt.hash(password, salt, function(err, hash){ if(err){ console.log(err); res.send({'result': 'error'}); } else { employee.password=hash; let query = {_id:req.params.id} Employee.findOneAndUpdate(query,employee,{ returnNewDocument: true },function(err,document){ if(err){ console.log(err); res.send({'result': 'error'}); }else{ sendEmailNewPasswordNotify(document,password) //console.log(document.name); res.send({'result': 'success'}); } }); } }); }); }); // Get employee list android router.get('/androidList/:uid', function (req, res) { //calling.aFunction(); androidApi.apiEmployee(req.params.uid,function(err,resp){ if(err){ console.log(err); return; }else{ //sendEmailApiKey(document,apikey.apiKey) //console.log(document.name); res.send(resp); } }); }); // Havi munkaidők lekérdezése egymunkavállalóra AJAX Route router.get('/androidAccessList/:apiKey/:mindate', async function(req, res) { var resp=await androidApi.apiEmployee(req.params.apiKey)//,function(err,resp){ if (resp==null) {res.send({'result':'Error'}); return;} var holidaysArray=await getHolidayListById(resp.id,moment(req.params.mindate,'YYYY.MM').format('MM.YYYY'),req.params.mindate);//,function(err,holidaysArray){ if (holidaysArray) { androidApi.apiSumOfMonth(resp.id,req.params.mindate,function(err,som){ if (err) { console.log(err); } else { var month={overTime:0,workHours:0,fullWorkHours:0}; var weekend={ Saturday:{overTime:0,workHours:0,fullWorkHours:0,days:0}, Sunday:{overTime:0,workHours:0,fullWorkHours:0,days:0} } //var monthOverTime=0; //var monthWorkHours=0; som.forEach(function(element) { var hoursToday=0; var day = moment(element.date,'YYYY.MM.DD.').day(); if (element.startStop[element.startStop.length-1].stop!='-') { if (element.isWeekend) { if (element.fullHours>540) { // A túlórát nem számoljuk a munkaidő közé element.hours=540; element.overTime=element.fullHours-element.hours; } else { element.hours=element.fullHours; element.overTime=0; } if (day===6) // Szombat { weekend.Saturday.workHours+=element.hours; weekend.Saturday.overTime+=element.overTime; weekend.Saturday.fullWorkHours+=element.fullHours; weekend.Saturday.days+=1; } if (day===0) // Vasárnap { weekend.Sunday.workHours+=element.hours; weekend.Sunday.overTime+=element.overTime; weekend.Sunday.fullWorkHours+=element.fullHours; weekend.Sunday.days+=1; } } else { if (element.fullHours>540) { // A túlórát nem számoljuk a munkaidő közé element.hours=540; element.overTime=element.fullHours-element.hours; } else { element.hours=element.fullHours; element.overTime=0; } month.workHours+=element.hours; month.overTime+=element.overTime; month.fullWorkHours+=element.fullHours; //monthWorkHours+= element.hours; //monthOverTime+=element.overTime; // Ha hétköznap } } }) //console.log('All done!'); var ja; if (som.length>0) ja = som.concat(holidaysArray); else ja=holidaysArray; ja.sort(function(a, b) { return moment(a.date,'YYYY.MM.DD') - moment(b.date,'YYYY.MM.DD'); }); // Munkaszüneti napok ellenőrzése és kijelzése var msz=getMunkaszunet(req.params.mindate); res.send({wd:ja,munkaszunet:msz,month:month,weekend:weekend}); } }); } //}); // End of Holiday list // } // }); }); // Munkavállalók adatainak lekérése ID alapján router.get('/persondata/:id', utils.ensureAuthenticated, function(req, res) { var admin=false; Employee.findById(req.params.id,function(err,employee) { if (err) { console.log(err); } else { res.send(employee); } }); }) // Szabadságok lekérés middleware function getHolidays(req, res, next) { // Process the data received in req.body // instead of res.redirect('/'); console.log('Holyday ID: '+req.params.id); Holidays.find({id:req.params.id} ,function(err, employeeHolidays){ if (err) { console.log(err); } else { req.employeeHolidays = employeeHolidays; // console.log(employeeHolidays); return next(); } }); } // Munkavállalók munkaidő listázása emberenként router.get('/detailstemp/:id', utils.ensureAuthenticated,getHolidays, function(req, res) { //var admin=false; Employee.findById(req.params.id,function(err,employee) { if (err) { console.log(err); } else { res.render('employee_access_details', { title: 'Jelenléti ív '+employee.name, employee: employee, holidays: req.employeeHolidays, userIsAdmin: req.user.isAdmin //workingtime: workingtime, }); } }); /* Employee.findById(req.params.id,function(err,employee) { if (err) { console.log(err); } else { WorkingTime.find({'employeeId':employee._id} ,function(err, workingtime){ if (err) { console.log(err); } else { res.render('employee_access_details', { title: 'Jelenléti ív '+employee.name, workingtime: workingtime, }); } }) } // WorkingTime.find({} ,function(err, workingtime){ });*/ }); // Életjel router.get('/alive', function(req,res){ var response = { status : 200, data : 'INVALID QUERY' } moment.locale('HU'); response.status=200; response.data=moment().format('LT'); res.send(response); }); function convertDeg2Dec(latitude,longitude) { var spl=String(latitude).split(':'); var NS=spl[0]; var LAT=spl[1]; var spl=String(longitude).split(':'); var EW=spl[0]; var LON=spl[1]; var dec1=parseCoord(LAT,NS); var dec2=parseCoord(LON,EW); return {latdec:dec1,londec:dec2}; } function parseCoord(coord, dir) { // Latitude can go from 0 to 90; longitude can go from -180 to 180. if (coord === '') return null; var n, sgn = 1; switch (dir) { case 'S': sgn = -1; case 'N': n = 2; break; case 'W': sgn = -1; case 'E': n = 3; break; } /* * Mathematically, but more expensive and not numerical stable: * * raw = 4807.038 * deg = Math.floor(raw / 100) * * dec = (raw - (100 * deg)) / 60 * res = deg + dec // 48.1173 */ return sgn * (parseFloat(coord.slice(0, n)) + parseFloat(coord.slice(n)) / 60); } router.post('/getLocationInfo',function(req,res){ var city='Ismeretlen'; var response = { status : 200, data : 'INVALID QUERY' } if (!req.body) { res.send(response); return; } if (!req.body.location) { res.send(response); return; } if (!req.body.lat) { res.send(response); return; } if (!req.body.lon) { res.send(response); return; } if (!req.body.clientID1) { res.send(response); return; } if (!req.body.clientID2) { res.send(response); return; } if (req.body.location==="0") // Ha a hlyzet GSM által meghatározott { // Lekérjük a város nevét hereGeocoding({lat:req.body.lat, lon:req.body.lon}, function(err, resp) { // geocoder.reverse({lat:req.body.lat, lon:req.body.lon}, function(err, resp) { if (err) { response.status=200; response.data='GEOCODING ERROR!'; console.log('Geocoding error!'); res.send(response); } if (resp) { city=resp.city;//resp[0].city; response.status=200; response.data=city; res.send(response); } })//Geocoding end } else { //$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68 if (req.body.location==="G") // Ha a helyzet GPS által meghatározott { var spl=String(req.body.lat).split(':'); var NS=spl[0]; var LAT=spl[1]; var spl=String(req.body.lon).split(':'); var EW=spl[0]; var LON=spl[1]; var dec1=parseCoord(LAT,NS); var dec2=parseCoord(LON,EW); // console.log("NS: "+NS+" - "+LAT+"\r\nEW: "+EW+" - "+LON); // console.log("DEC: "+dec1+" - "+dec2); // response.status=200; // response.data="city"; // Lekérjük a város nevét hereGeocoding({lat:dec1, lon:dec2}, function(err, resp) { // geocoder.reverse({lat:dec1, lon:dec2}, function(err, resp) { if (err) { response.status=200; response.data='GEOCODING ERROR!'; console.log('Geocoding error!\r\n'+err); res.send(response); } if (resp) { city=resp.city//resp[0].city; response.status=200; response.data=city; res.send(response); } })//Geocoding end //res.send(response); } } }) // Esemény rögzítése adatbázisba function registerAccess(employee,city,lat,lon,device, callback) { console.log("ACCESS: "+employee.name+" City: "+city+" WTID: "+employee.workingtimeId); const newQrCode = uuidAPIKey.create().uuid;//crypto.randomBytes(16).toString('hex'); // Ha van megkezdett munkaidő beolvassuk if (employee.workingtimeId) { //console.log("CITY: "+city); // Ha megvan a munkavállaló, beolvassuk az utolsó bejegzést WorkingTime.findById(employee.workingtimeId,function(err,wt) { if (err) { var err={'status':200,'error':'DB ERROR 2'}; callback(err); /*response.status=200; response.data='DB ERROR 2'; res.send(response);*/ } else { if (!wt){ console.log("WTNULLERROR "+employee.name); } // Munkaidő megkezdve if (wt.state==='STARTED') { let access={}; access.state='ENDED'; access.timeGetaway=moment().format('L')+' '+moment().format('LT'); access.mode="GETAWAY"; access.locationStop=city; access.latitudeE=lat; access.longitudeE=lon; access.deviceId=device._id; var a = moment(wt.timeArrive, "YYYY.MM.DD. HH:mm"); var b = moment(access.timeGetaway, "YYYY.MM.DD. HH:mm"); var workhours = b.diff(a, 'minutes') // =1 if (isNaN(workhours)) { workhours=0; } access.accumulatedTime=0; access.accumulatedTime=wt.accumulatedTime+workhours; // belejavítva. HALMOZOTT IDŐ HOZZÁADÁSA access.workHours=workhours; access.vehicleId=device.vehicle_id; WorkingTime.updateOne({_id:wt._id},access,function(err){ if (err) { var err={'status':200,'error':'DB ERROR 3'}; callback(err); //callback('DB ERROR 3'); /*response.status=200; response.data='DB ERROR 3'; res.send(response); */ } else { //console.log('Munkaidő lezárva'); let emp={}; if (employee.emailNotifyFlags.getaway) { sendEmailGetavayNotify(employee,city,wt.timeArrive,access.timeGetaway,convertMinsToHrsMins(access.workHours)); } emp.qrCode=newQrCode; Employee.updateOne({_id:employee._id},emp,function(err){ if (err) { var err={'status':200,'error':'DB ERROR 4'}; callback(err); // callback('DB ERROR 4'); /* response.status=200; response.data='DB ERROR 4'; res.send(response); */ } else { //console.log('Munkavállaló státusz módosítva'); /*response.status=200; response.data='VALID CODE'; response.employeeName=employee.name; response.message='TAVOZAS'; response.city=city; response.worktime=workhours; response.datetime=moment().format('LT'); res.send(response);*/ let response={}; response.status=200; response.data='VALID CODE'; response.employeeName=employee.name; response.message='TÁVOZÁS'; response.city=city; response.worktime=convertMinsToHrsMins(workhours); response.datetime=moment().format('LT'); callback(null,response); // Update fasza! } }) // Update fasza! } }) } else { let access=new WorkingTime(); access.accessMode='ARRIVAL';//req.body.mode; access.employeeId=employee.id; access.notes="-"; access.date=moment().format('L'); access.day=moment().format('dddd'); access.location=city;//req.body.location; access.locationStop=' '; access.latitudeS=lat; access.longitudeS=lon; access.accumulatedTime=0; // belejavítva. HALMOZOTT IDŐ HOZZÁADÁSA access.timeArrive=moment().format('L')+' '+moment().format('LT'); access.state='STARTED'; access.workHours=0; access.timeGetaway="-"; access.deviceId=device._id; access.vehicleId=device.vehicle_id; access.save(function(err){ if(err){ var err={'status':200,'error':'DB ERROR 5'}; callback(err); //callback('DB ERROR 5'); /*response.status=200; response.data='DB ERROR 5'; res.send(response);*/ }else{ let emp={}; if (employee.emailNotifyFlags.arriving) { sendEmailArriveNotify(employee,city,access.timeArrive); } emp.workingtimeId=access._id; emp.qrCode=newQrCode; Employee.updateOne({_id:employee._id},emp,function(err){ if (err) { var err={'status':200,'error':'DB ERROR 6'}; callback(err); //callback('DB ERROR 6'); /* response.status=200; response.data='DB ERROR 6'; res.send(response); */ } else { //console.log('Munkavállaló státusz módosítva'); /*response.status=200; response.data='VALID CODE'; response.employeeName=employee.name; response.message='ERKEZES'; response.city=city; response.worktime=''; response.datetime=moment().format('LT'); res.send(response); */ let response={}; response.status=200; response.data='VALID CODE'; response.employeeName=employee.name; response.message='ÉRKEZÉS'; response.city=city; response.worktime=''; response.datetime=moment().format('LT'); callback(null,response); // Update fasza! } }) } }); } } }); } else { // Nincs megkezdett munkaidő let access=new WorkingTime(); access.accessMode='ARRIVAL';//req.body.mode; access.employeeId=employee.id; access.notes="-"; access.date=moment().format('L'); access.day=moment().format('dddd'); //access.location=city;//req.body.location; access.locationStop=' ';//city; access.latitudeS=lat; access.longitudeS=lon; access.accumulatedTime=0; // belejavítva. HALMOZOTT IDŐ HOZZÁADÁSA access.timeArrive=moment().format('L')+' '+moment().format('LT'); access.state='STARTED'; access.timeGetaway="-"; access.deviceId=device._id; access.vehicleId=device.vehicle_id; if (employee.emailNotifyFlags.arriving) { sendEmailArriveNotify(employee,city,access.timeArrive); } access.save(function(err){ if(err){ var err={'status':200,'error':'DB ERROR 7'}; callback(err); //callback('DB ERROR 7'); /* response.status=200; response.data='DB ERROR 5'; res.send(response);*/ }else{ let emp={}; emp.workingtimeId=access._id; emp.qrCode=newQrCode; Employee.updateOne({_id:employee._id},emp,function(err){ if (err) { var err={'status':200,'error':'DB ERROR 8'}; callback(err); //callback('DB ERROR 8'); /*response.status=200; response.data='DB ERROR 6'; res.send(response);*/ } else { //console.log('Munkavállaló státusz módosítva'); /*response.status=200; response.data='VALID CODE'; response.employeeName=employee.name; response.message='ERKEZES'; response.datetime=moment().format('LT'); res.send(response);*/ let response={}; response.status=200; response.data='VALID CODE'; response.employeeName=employee.name; response.message='ÉRKEZÉS'; response.worktime=''; response.city=city; response.datetime=moment().format('LT'); callback(null,response); // Update fasza! } }) } }); } } // Esemény rögzítése router.post('/access', async function(req,res){ var response = { status : 200, data : 'INVALID QUERY' } var city='Ismeretlen'; console.log(JSON.stringify(req.body)) moment.locale('HU'); if (req.body) { if (!req.body.clientID1 || !req.body.clientID2) { //console.log("Invalid Client ID!"); createLog('INVALID CLIENT ID',req.body.clientID1+" "+req.body.clientID2); response.status=200; response.data='INVALID CLIENT ID'; res.send(response); } else { if (!req.body.location) { response.status=200; response.data='INVALID LOCATION'; res.send(response); } else { if (req.body.mode!='ARRIVAL' && req.body.mode!='GETAWAY' && req.body.mode!='FREEDOM' && req.body.mode!='SICKPAY') { response.status=200; response.data='INVALID MODE'; res.send(response); } else { const device=await DeviceRemote.findOne({imei:req.body.clientID1,ccid:req.body.clientID2})//, function(err,device){ console.log(device) if (typeof device === 'undefined' || !device ) { response.status=200; response.data='INVALID DEVICE'; //res.status(200).send('INVALID DEVICE!'); res.send(response); } else { Employee.findOne({'accessCode':req.body.rfid},function(err,employee){ if(err) { response.status=200; response.data='DB ERROR 1'; res.send(response); } else { if (employee) { if (req.body.location==="0") // Ha a hlyzet GSM által meghatározott { // Lekérjük a város nevét //geocoder.reverse({lat:req.body.latitude, lon:req.body.longitude}, function(err, resp) { hereGeocoding({lat:req.body.latitude, lon:req.body.longitude}, function(err, resp) { if (err) { /*response.status=200; response.data='GEOCODING ERROR!'; res.send(response);*/ //console.log('Geocoding error!'); createLog('GEOCODING ERROR','LAT:'+req.body.latitude+' LON:'+req.body.longitude); registerAccess(employee,'Ismeretlen',null,null,device,function(err,result){ if (err) { console.log(err); res.send(err); } else { checkIsHoliday(employee._id,moment().format('DD.MM.YYYY'),function(err,cb){ if (err) { console.log('Holiday Split Error: '+err); res.send(result); } else { res.send(result); } }); } }) } if (resp) { city=resp.city;//resp[0].city; registerAccess(employee,city,req.body.latitude,req.body.longitude,device,function(err,result){ if (err) { console.log(err); res.send(err); } else { checkIsHoliday(employee._id,moment().format('DD.MM.YYYY'),function(err,cb){ if (err) { console.log('Holiday Split Error: '+err); res.send(result); } else { res.send(result); } }); } }) } })//Geocoding end } else { // Ha pozíció szöveges (fix telepítésű WiFi-nél) registerAccess(employee,req.body.location,47.2449371,21.6238858,device,function(err,result){ if (err) { console.log(err); res.send(err); } else { checkIsHoliday(employee._id,moment().format('DD.MM.YYYY'),function(err,cb){ if (err) { console.log('Holiday Split Error: '+err); res.send(result); } else { res.send(result); } }); } }) } } else { //console.log("Nincs munkavállaló ezzel az azonosítóval!"); createLog('INVALID CODE',req.body.rfid); response.status=200; response.data='INVALID CODE'; res.send(response); } }//else }) } } } } } else { response.status=200; response.data='INVALID QUERY'; res.send(response); } }); // Nyomtatási kép generálás /*function printPage(employee,som,month,weekend,mindate,holidaysArray,sickpaysArray,callback) { var dt = new Date(); var item=[]; var i=1; var namePostfix=""; var drShift=""; // Munkaszüneti napok ellenőrzése és kijelzése var msz=getMunkaszunet(mindate); moment.locale('hu'); if (employee.isStudent==='on') namePostfix='Diák'; if (som.length>0) ja = som.concat(holidaysArray); else ja=holidaysArray; if (ja.length>0) jc=ja.concat(sickpaysArray); else jc=sickpaysArray; ja=jc; ja.sort(function(a, b) { return moment(a.date,'YYYY.MM.DD') - moment(b.date,'YYYY.MM.DD'); }); item.push(['Dátum', {text:'Nap', alignment: 'rleft'}, {text:'Helyszín', alignment: 'center'}, {text:'Érkezés', alignment: 'center'}, {text:'Távozás', alignment: 'center'},{text:'Órák', alignment: 'center'},{text:'Túlóra', alignment: 'center'},'Megjegyzés']); ja.forEach(element => { var arrives=""; var getaways=""; var locs=""; var dreportList=''; var workReport=''; var wrShift=''; var day = moment(element.date,'YYYY.MM.DD.').day(); var notes=""; if (element.dailyReport!='') drShift='\r\n'; else drShift=''; drShift=''; if (element.dailyReport) { element.dailyReport.forEach(drelem=>{ dreportList+= drelem.name.substring(0,60) +'\r\n'; drShift+='\r\n'; }) } if (element.isHoliday || element.isSickpay) { var txt=''; if (element.isHoliday) txt='Szabadság'; if (element.isSickpay) txt='Táppénz'; item.push([ {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableDataHo'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableDataHo', alignment: 'right'}, //{text:element.expiryDate, italics: true, color: 'gray'}, {text:' --- ', style:'tableDataHo', alignment: 'center'}, {text:'--:--', style:'tableDataHo', alignment: 'center'}, {text:'--:--', style:'tableDataHo', alignment: 'center'}, //{text:element.state, italics: true, color: 'gray'}, {text:'--:--', style:'tableDataHo', alignment: 'center'}, {text:'--:--', style:'tableDataHo', alignment: 'center'}, {text: txt, style:'tableDataHo', alignment: 'left'}]); } else { if (Object.keys(element.workReport).length!=0){ workReport=element.workReport.wt+' '+element.workReport.wf; wrShift='\r\n' } element.notes.forEach(note=>{ notes+=note.userNote+' '+note.companyNote }) if (element.isWeekend) { // Hétvége element.startStop.forEach(interval=>{ arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n"; if (interval.stop==='-') { getaways+='-\r\n'; } else { getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n"; } }) item.push([//{text:i, style:'tableData', alignment: 'right'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableDataWe'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableDataWe', alignment: 'right'}, //{text:element.expiryDate, italics: true, color: 'gray'}, {text:dreportList+workReport+"\r\n"+element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableDataWe', alignment: 'center'}, {text:drShift+wrShift+arrives, style:'tableDataWe', alignment: 'center'}, {text:drShift+wrShift+getaways, style:'tableDataWe', alignment: 'center'}, //{text:element.state, italics: true, color: 'gray'}, {text:drShift+wrShift+convertMinsToHrsMins(element.hours), style:'tableDataWe', alignment: 'center'}, {text:drShift+wrShift+convertMinsToHrsMins(element.overTime), style:'tableDataWe', alignment: 'center'}, //{text:element.notes, style:'tableDataWe', alignment: 'left'}]); {text:drShift+wrShift+notes, style:'tableDataWe', alignment: 'left'}]); } else { // Hétköznap element.startStop.forEach(interval=>{ arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n"; if (interval.stop==='-') { getaways+='-\r\n'; } else { getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n"; } }) element.locations.forEach(interval=>{ locs+=interval.arriveLoc+' - '+interval.getawayLoc+"\r\n"; }) item.push([//{text:i, style:'tableData', alignment: 'right'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableData'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableData', alignment: 'left'}, //{text:element.expiryDate, italics: true, color: 'gray'}, [{text:dreportList+workReport+"\r\n", style:'dailyReport'},{text:locs, style:'tableDataLoc', alignment: 'center'}], //{text:element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableData', alignment: 'center'}, {text:drShift+wrShift+arrives, style:'tableData', alignment: 'center'}, {text:drShift+wrShift+getaways, style:'tableData', alignment: 'center'}, //{text:element.state, italics: true, color: 'gray'}, {text:drShift+wrShift+convertMinsToHrsMins(element.hours), style:'tableData', alignment: 'center'}, {text:drShift+wrShift+convertMinsToHrsMins(element.overTime), style:'tableData', alignment: 'center'}, //{text:element.notes, style:'tableData', alignment: 'left'}]); {text:drShift+wrShift+notes, style:'tableDataWe', alignment: 'left'}]); } }//else }); // playground requires you to assign document definition to a variable called dd var bodySum=[]; var mszn=""; var eszn=""; if (msz.length) { bodySum=[ [{text: 'Megnevezés', style: 'tableHeader'}, {text: 'Normál', style: 'tableHeader', alignment: 'right'}, {text: 'Túlóra', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen', style: 'tableHeader', alignment: 'right'}, {text: 'Pótlék', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen Pótlékkal', style: 'tableHeader', alignment: 'right'}], [{text: 'Munkaszüneti napokra elszámolt órák:'}, {text: convertMinsToHrsMins((msz.length*480)), alignment: 'right'},{text:''}, {text: convertMinsToHrsMins((msz.length*480)), alignment: 'right'},{text:'', alignment: 'right'},{text: convertMinsToHrsMins((msz.length*480)), alignment: 'right'}], [{text: 'Szabadságra elszámolt órák:'}, {text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'}, {text: ''}, {text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'},{text: ''},{text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'}], [{text: 'Munkanapok:'}, {text: convertMinsToHrsMins(month.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(month.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'},{text:'', alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'}], [{text: 'Szombat:'}, {text: convertMinsToHrsMins(weekend.Saturday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.fullWorkHours), alignment: 'right'},{text:'50%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Saturday.fullWorkHours*1.5)), alignment: 'right'}], [{text: 'Vasárnap:'}, {text: convertMinsToHrsMins(weekend.Sunday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.fullWorkHours), alignment: 'right'},{text:'100%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Sunday.fullWorkHours*2)), alignment: 'right'}], [{text: 'Összesen:'},{text: convertMinsToHrsMins(weekend.Saturday.workHours+weekend.Sunday.workHours+month.workHours+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.overTime+weekend.Sunday.overTime+month.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours+weekend.Saturday.fullWorkHours+weekend.Sunday.fullWorkHours+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'}, {text:''}, {text: convertMinsToHrsMins(month.fullWorkHours+(weekend.Saturday.fullWorkHours*1.5)+(weekend.Sunday.fullWorkHours*2)+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'}] ]; mszn='Munkaszüneti napok: '+msz+'\n\n'; eszn='\n\nElszámolt szabadság: '+holidaysArray.length+' nap\n'; }else { bodySum=[ [{text: 'Megnevezés', style: 'tableHeader'}, {text: 'Normál', style: 'tableHeader', alignment: 'right'}, {text: 'Túlóra', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen', style: 'tableHeader', alignment: 'right'}, {text: 'Pótlék', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen Pótlékkal', style: 'tableHeader', alignment: 'right'}], [{text: 'Szabadságra elszámolt órák:'}, {text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'}, {text: ''}, {text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'},{text: ''},{text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'}], [{text: 'Munkanapok:'}, {text: convertMinsToHrsMins(month.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(month.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'},{text:'', alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'}], [{text: 'Szombat:'}, {text: convertMinsToHrsMins(weekend.Saturday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.fullWorkHours), alignment: 'right'},{text:'50%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Saturday.fullWorkHours*1.5)), alignment: 'right'}], [{text: 'Vasárnap:'}, {text: convertMinsToHrsMins(weekend.Sunday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.fullWorkHours), alignment: 'right'},{text:'100%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Sunday.fullWorkHours*2)), alignment: 'right'}], [{text: 'Összesen:'},{text: convertMinsToHrsMins(weekend.Saturday.workHours+weekend.Sunday.workHours+month.workHours+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.overTime+weekend.Sunday.overTime+month.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours+weekend.Saturday.fullWorkHours+weekend.Sunday.fullWorkHours+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'}, {text:''}, {text: convertMinsToHrsMins(month.fullWorkHours+(weekend.Saturday.fullWorkHours*1.5)+(weekend.Sunday.fullWorkHours*2)+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'}] ]; eszn='\n\nElszámolt szabadság: '+holidaysArray.length+' nap\n'; } var dd = { pageOrientation: 'landscape', footer: function(currentPage, pageCount) { return {text: currentPage.toString() + ' / ' + pageCount, alignment: 'center'}}, //header: {text: 'Jelenléti ív '+employee.name, style: 'header'}, content: [ { alignment: 'justify', columns: [ {text: 'Jelenléti ív '+employee.name+' '+namePostfix, style: 'header'}, {text: mindate, style: 'datum'} ] }, { style: 'tableExample', table: { //widths: [20, 'auto', 80, 80,'*','*','*'], // widths: [20, '*', 70, 70,50,'auto','auto'], widths: [40, 50, 'auto', 60,60,50,50,'*'], body: [], } }, { stack:[ { text: 'Összesítés: '+employee.name+' '+mindate, style: 'subheader' }, { style: 'tableExample', table: { widths: ['auto', 60,60,60,60,60], headerRows: 1, body: bodySum }, layout: 'noBorders' }, eszn, mszn, { text:'Összesen normál munkaórák pótlékokkal (kerekítve): '+convertMinsToHrsMins_R((weekend.Saturday.workHours*1.5)+(weekend.Sunday.workHours*2)+ month.workHours+(msz.length*480)+(holidaysArray.length*480)), //' óra. Hétvégi pótlékkal: '+convertMinsToHrsMins((weekend.Saturday.workHours*1.5)+(weekend.Sunday.workHours*2)+ // month.workHours+(msz.length*480)+(holidaysArray.length*480))+' óra.', style: 'subheader' }, { text:'Összesen túlórák: '+convertMinsToHrsMins((weekend.Saturday.overTime*1.5)+(weekend.Sunday.overTime*2)+month.overTime)+' óra.', style: 'subheader' }, { text:'Összesen kifizetendő óra (kerekítve): '+convertMinsToHrsMins_R((weekend.Saturday.fullWorkHours*1.5)+(weekend.Sunday.fullWorkHours*2)+month.fullWorkHours+(msz.length*480)+(holidaysArray.length*480))+' óra.', //' Kerekítve: '+convertMinsToHrsMins_R((weekend.Saturday.fullWorkHours*1.5)+(weekend.Sunday.fullWorkHours*2)+month.fullWorkHours+(msz.length*480)+(holidaysArray.length*480))+' óra.', style: 'subheader' } ], unbreakable: true, id:'signature' } ], pageBreakBefore: function(currentNode, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage) { //check if signature part is completely on the last page, add pagebreak if not if (currentNode.id === 'signature' && (currentNode.pageNumbers.length != 1 || currentNode.pageNumbers[0] != currentNode.pages)) { return true; } //check if last paragraph is entirely on a single page, add pagebreak if not else if (currentNode.id === 'closingParagraph' && currentNode.pageNumbers.length != 1) { return true; } return false; }, styles: { header: { fontSize: 18, bold: true, fillColor: '#eeeeee', margin: [0, 0, 0, 10] }, dailyReport: { fontSize: 9, bold: true, fillColor: '#494', 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' }, tableDataLoc: { bold: false, fontSize: 8, italics: true, color: 'green' }, tableDataWe: { bold: false, fontSize: 10, italics: true, fillColor: '#eeffee', color: 'red' }, tableDataHo: { bold: false, fontSize: 10, italics: true, fillColor: '#eeeeff', color: 'red' } }, defaultStyle: { // alignment: 'justify' } }; dd.content[1].table.body=item; //pdf.createPdf(dd).open(); callback(null,dd); // ... }*/ // Nyomtatási kép generálás Alvállalkozó /*function printPageContractor(employee,som,month,weekend,mindate,holidaysArray,callback) { var dt = new Date(); var item=[]; var i=1; var drShift=""; // Munkaszüneti napok ellenőrzése és kijelzése //var msz=getMunkaszunet(mindate); moment.locale('hu'); if (som.length>0) ja = som.concat(holidaysArray); else ja=holidaysArray; ja.sort(function(a, b) { return moment(a.date,'YYYY.MM.DD') - moment(b.date,'YYYY.MM.DD'); }); item.push(['Dátum', {text:'Nap', alignment: 'right'}, {text:'Helyszín', alignment: 'center'}, {text:'Érkezés', alignment: 'center'}, {text:'Távozás', alignment: 'center'},{text:'Órák', alignment: 'center'},{text:'Túlóra', alignment: 'center'},'Megjegyzés']); ja.forEach(element => { var arrives=""; var getaways=""; var locs=""; var dreportList=''; var notes=""; var day = moment(element.date,'YYYY.MM.DD.').day(); if (element.dailyReport!='') drShift='\r\n'; else drShift=''; drShift=''; if (element.dailyReport) { element.dailyReport.forEach(drelem=>{ dreportList+= drelem.name.substring(0,60) +'\r\n'; drShift+='\r\n'; }) } if (element.isHoliday) { item.push([ {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableDataHo'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableDataHo', alignment: 'right'}, //{text:element.expiryDate, italics: true, color: 'gray'}, {text:' --- ', style:'tableDataHo', alignment: 'center'}, {text:'--:--', style:'tableDataHo', alignment: 'center'}, {text:'--:--', style:'tableDataHo', alignment: 'center'}, //{text:element.state, italics: true, color: 'gray'}, {text:'--:--', style:'tableDataHo', alignment: 'center'}, {text:'--:--', style:'tableDataHo', alignment: 'center'}, {text:'Szabadság', style:'tableDataHo', alignment: 'left'}]); } else { element.notes.forEach(note=>{ notes+=note.userNote+' '+note.companyNote }) if (element.isWeekend) { // Hétvége element.startStop.forEach(interval=>{ arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n"; if (interval.stop==='-') { getaways+='-\r\n'; } else { getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n"; } }) item.push([//{text:i, style:'tableData', alignment: 'right'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableDataWe'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableDataWe', alignment: 'right'}, //{text:element.expiryDate, italics: true, color: 'gray'}, {text:dreportList+"\r\n"+element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableDataWe', alignment: 'center'}, {text:drShift+arrives, style:'tableDataWe', alignment: 'center'}, {text:drShift+getaways, style:'tableDataWe', alignment: 'center'}, //{text:element.state, italics: true, color: 'gray'}, {text:drShift+convertMinsToHrsMins(element.hours), style:'tableDataWe', alignment: 'center'}, {text:drShift+convertMinsToHrsMins(element.overTime), style:'tableDataWe', alignment: 'center'}, //{text:element.notes, style:'tableDataWe', alignment: 'left'}]); {text:drShift+notes, style:'tableDataWe', alignment: 'left'}]); } else { // Hétköznap element.startStop.forEach(interval=>{ arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n"; if (interval.stop==='-') { getaways+='-\r\n'; } else { getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n"; } }) element.locations.forEach(interval=>{ locs+=interval.arriveLoc+' - '+interval.getawayLoc+"\r\n"; }) item.push([//{text:i, style:'tableData', alignment: 'right'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableData'}, {text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableData', alignment: 'right'}, //{text:element.expiryDate, italics: true, color: 'gray'}, [{text:dreportList, style:'dailyReport'},{text:locs, style:'tableData', alignment: 'center'}], //{text:element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableData', alignment: 'center'}, {text:drShift+arrives, style:'tableData', alignment: 'center'}, {text:drShift+getaways, style:'tableData', alignment: 'center'}, //{text:locs, style:'tableData', alignment: 'center'}, //{text:element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableData', alignment: 'center'}, // {text:arrives, style:'tableData', alignment: 'center'}, // {text:getaways, style:'tableData', alignment: 'center'}, //{text:element.state, italics: true, color: 'gray'}, {text:drShift+convertMinsToHrsMins(element.hours), style:'tableData', alignment: 'center'}, {text:drShift+convertMinsToHrsMins(element.overTime), style:'tableData', alignment: 'center'}, //{text:element.notes, style:'tableData', alignment: 'left'}]); {text:drShift+notes, style:'tableDataWe', alignment: 'left'}]); } } }); // playground requires you to assign document definition to a variable called dd var bodySum=[]; bodySum=[ [{text: 'Megnevezés', style: 'tableHeader'}, {text: 'Normál', style: 'tableHeader', alignment: 'right'}, {text: 'Túlóra', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen', style: 'tableHeader', alignment: 'right'}],//, {text: 'Pótlék', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen Pótlékkal', style: 'tableHeader', alignment: 'right'}], [{text: 'Munkanapok:'}, {text: convertMinsToHrsMins(month.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(month.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'}],//{text:'', alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'}], [{text: 'Szombat:'}, {text: convertMinsToHrsMins(weekend.Saturday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.fullWorkHours), alignment: 'right'}],//{text:'50%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Saturday.fullWorkHours*1.5)), alignment: 'right'}], [{text: 'Vasárnap:'}, {text: convertMinsToHrsMins(weekend.Sunday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.fullWorkHours), alignment: 'right'}],//{text:'100%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Sunday.fullWorkHours*2)), alignment: 'right'}], [{text: 'Összesen:'},{text: convertMinsToHrsMins(weekend.Saturday.workHours+weekend.Sunday.workHours+month.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.overTime+weekend.Sunday.overTime+month.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours+weekend.Saturday.fullWorkHours+weekend.Sunday.fullWorkHours), alignment: 'right'}]//, ]; var dd = { pageOrientation: 'landscape', footer: function(currentPage, pageCount) { return {text: currentPage.toString() + ' / ' + pageCount, alignment: 'center'}}, //header: {text: 'Jelenléti ív '+employee.name, style: 'header'}, content: [ { alignment: 'justify', columns: [ {text: 'Jelenléti ív '+employee.name+' Alvállalkozó', style: 'header'}, {text: mindate, style: 'datum'} ] }, { style: 'tableExample', table: { //widths: [20, 'auto', 80, 80,'*','*','*'], // widths: [20, '*', 70, 70,50,'auto','auto'], widths: [40, 50, 'auto', 60,60,50,50,'*'], body: [], } }, { stack:[ { text: 'Összesítés: '+employee.name+' '+mindate, style: 'subheader' }, { style: 'tableExample', table: { widths: ['auto', 60,60,60,60,60], headerRows: 1, body: bodySum }, layout: 'noBorders' }, { text:'Összesen normál munkaórák (kerekítve): '+convertMinsToHrsMins_R((weekend.Saturday.workHours)+(weekend.Sunday.workHours)+month.workHours)+' óra.', //' Kerekítve: '+convertMinsToHrsMins_R((weekend.Saturday.workHours)+(weekend.Sunday.workHours)+month.workHours)+' óra.', style: 'subheader' }, { text:'Összesen túlórák: '+convertMinsToHrsMins((weekend.Saturday.overTime)+(weekend.Sunday.overTime)+month.overTime)+' óra.', style: 'subheader' }, { text:'Összesen kifizetendő óra (kerekítve): '+convertMinsToHrsMins_R((weekend.Saturday.fullWorkHours)+(weekend.Sunday.fullWorkHours)+month.fullWorkHours)+' óra.', //' Kerekítve: '+convertMinsToHrsMins_R((weekend.Saturday.fullWorkHours)+(weekend.Sunday.fullWorkHours)+month.fullWorkHours)+' óra.', style: 'subheader' } ], unbreakable: true, id:'signature' } ], pageBreakBefore: function(currentNode, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage) { //check if signature part is completely on the last page, add pagebreak if not if (currentNode.id === 'signature' && (currentNode.pageNumbers.length != 1 || currentNode.pageNumbers[0] != currentNode.pages)) { return true; } //check if last paragraph is entirely on a single page, add pagebreak if not else if (currentNode.id === 'closingParagraph' && currentNode.pageNumbers.length != 1) { return true; } return false; }, styles: { header: { fontSize: 18, bold: true, fillColor: '#eeeeee', margin: [0, 0, 0, 10] }, dailyReport: { fontSize: 9, bold: true, fillColor: '#494', 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' }, tableDataHo: { bold: false, fontSize: 10, italics: true, fillColor: '#eeeeff', color: 'red' } }, defaultStyle: { // alignment: 'justify' } }; dd.content[1].table.body=item; //pdf.createPdf(dd).open(); callback(null,dd); // ... }*/ //'/employee/details2/' // Havi munkaidők lekérdezése egymunkavállalóra AJAX Route /*function gatAccessDetails(id,mindate, callback) { sumOfMonth(id,mindate,function(err,som){ if (err) { console.log(err); callback(err); } else { var month={overTime:0,workHours:0,fullWorkHours:0}; //var weekend={overTime:0,workHours:0,fullWorkHours:0,days:0}; var weekend={ Saturday:{overTime:0,workHours:0,fullWorkHours:0,days:0}, Sunday:{overTime:0,workHours:0,fullWorkHours:0,days:0} } //var monthOverTime=0; //var monthWorkHours=0; som.forEach(function(element) { var hoursToday=0; var day = moment(element.date,'YYYY.MM.DD.').day(); if (element.isWeekend) { // not implemented! //console.log('Not implemented!!!'); if (element.fullHours>540) { // A túlórát nem számoljuk a munkaidő közé element.hours=540; if (element.fullHours>=600) { element.overTime=element.fullHours-element.hours; } else { element.overTime=0; } //element.overTime=element.fullHours-element.hours; } else { element.hours=element.fullHours; element.overTime=0; } if (day===6) // Szombat { weekend.Saturday.workHours+=element.hours; weekend.Saturday.overTime+=element.overTime; weekend.Saturday.fullWorkHours+=(element.hours+element.overTime);//element.fullHours; weekend.Saturday.days+=1; } if (day===0) // Vasárnap { weekend.Sunday.workHours+=element.hours; weekend.Sunday.overTime+=element.overTime; weekend.Sunday.fullWorkHours+=(element.hours+element.overTime);//element.fullHours; weekend.Sunday.days+=1; } } else { if (element.fullHours>540) { // A túlórát nem számoljuk a munkaidő közé element.hours=540; //element.overTime=element.fullHours-element.hours; if (element.fullHours>=600) { element.overTime=element.fullHours-element.hours; } else { element.overTime=0; } } else { element.hours=element.fullHours; element.overTime=0; } month.workHours+=element.hours; month.overTime+=element.overTime; month.fullWorkHours+=(element.hours+element.overTime);//element.fullHours; //monthWorkHours+= element.hours; //monthOverTime+=element.overTime; // Ha hétköznap } }) //console.log('All done!'); //res.send({wd:som,month:month,weekend:weekend}); callback(null,som,month,weekend); } }); };*/ function validateEmail(email) { const re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(email); } // Saját jelenléti ívek kiküldése nyomógombra router.get('/WTALL2',utils.ensureAuthenticated,function(req,res){ moment.locale('HU'); calcdate=moment().subtract(10, 'days').format('YYYY.MM'); console.log("Értesítő küldve: "+calcdate); proba(calcdate); req.flash('success','Generálva!'); res.redirect('/'); }) // Jelenléti ív összeállítása összes munkavállalóra router.get('/WTALL',utils.ensureAuthenticated,function(req,res){ moment.locale('HU'); calcdate=moment().subtract(10, 'days').format('YYYY.MM'); console.log("Összesített Értesítő küldve: "+calcdate); makeWorktimeAll(calcdate); req.flash('success','Generálva!'); res.redirect('/'); }) function sleep(millis) { return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, millis); }); } /* async function makeWorktimeAll(calcdate) { var num=0; // let promises=[]; //'_id':'5cc0394bec573424a8f79059' var res=await Employee.find({'konyvelesre':'on'})//, function(err,res){ var fileList=[]; console.log("Kőnyvelésre jelölt: "+res.length); var msz=getMunkaszunet(calcdate); //var bar=new Promise((resolve,reject)=>{ //for (var [index,element] of res.entries()){ //res.forEach((element,index,array) =>async function(){ var promises=res.map(async function(element){ //sleep(3000); return async function(element){ const sickpaysArray=await getSickpayListById(element._id,moment(calcdate,'YYYY.MM').format('MM.YYYY'),calcdate)//,function(err,sickpaysArray){ const holidaysArray= await getHolidayListById(element._id,moment(calcdate,'YYYY.MM').format('MM.YYYY'),calcdate)//,function(err,holidaysArray){ getAccessDetails(element._id,calcdate,function(err,som,month,weekend) { if(err) { console.log(err); } else { if ((som.length>0) && (element.konyvelesre==='on')) { if (element.isSubcontractor===null) // Alkalmazott { var data= printPage(element,som,month,weekend,calcdate,holidaysArray,sickpaysArray,msz)//, function(err,data){ var fonts = { Roboto: { normal: 'public/fonts/Roboto-Regular.ttf', bold: 'public/fonts/Roboto-Medium.ttf', italics: 'public/fonts/Roboto-Italic.ttf', bolditalics: 'public/fonts/Roboto-MediumItalic.ttf' } }; var printer = new PdfPrinter(fonts); var pdfDoc = printer.createPdfKitDocument(data, options); var cdir=calcdate.replace('.','_'); if (!fs.existsSync('./'+cdir)) { fs.mkdir('./'+cdir,(err)=>{ console.log(err); }); } fileList.push( { filename: element.name+'_'+cdir+'_jelenleti.pdf', // <= Here: made sure file name match path: path.join('./'+cdir+'/'+element.name+'_'+cdir+'_jelenleti.pdf'), // <= Here contentType: 'application/pdf' } ); pdfDoc.pipe(fs.createWriteStream('./'+cdir+'/'+element.name+'_'+cdir+'_jelenleti.pdf')); pdfDoc.flushPages(); pdfDoc.end(); num++; // }); } if (element.isSubcontractor==='on') // Alvállalkozó { printPageContractor(element,som,month,weekend,calcdate,holidaysArray, function(err,data){ var fonts = { Roboto: { normal: 'public/fonts/Roboto-Regular.ttf', bold: 'public/fonts/Roboto-Medium.ttf', italics: 'public/fonts/Roboto-Italic.ttf', bolditalics: 'public/fonts/Roboto-MediumItalic.ttf' } }; var printer = new PdfPrinter(fonts); var pdfDoc = printer.createPdfKitDocument(data, options); var cdir=calcdate.replace('.','_'); if (!fs.existsSync('./'+cdir)) { fs.mkdir('./'+cdir,(err)=>{ console.log(err); }); } fileList.push( { filename: element.name+'_'+cdir+'_jelenleti.pdf', // <= Here: made sure file name match path: path.join('./'+cdir+'/'+element.name+'_'+cdir+'_jelenleti.pdf'), // <= Here contentType: 'application/pdf' } ); pdfDoc.pipe(fs.createWriteStream('./'+cdir+'/'+element.name+'_'+cdir+'_jelenleti.pdf')); pdfDoc.flushPages(); pdfDoc.end(); num++; }); } } else { console.log("Nincs mit küldeni! ---> "+element.name); } if (index === array.length -1) { sleep(2000); resolve(); console.log('Num employees: '+num); } //return fileList } }); } // }); // }); //if (index === array.length -1) resolve(); }); // Foreach // }); // Promise Promise.all(promises).then(function(){ console.log("Kész "+fileList) }) bar.then(()=>{ sleep(10000).then(()=>{ console.log('Num employees: '+num); sendEmailMonthlyWorktime_all(fileList,function(err,res) { if (err) { console.log(err); } else { } }) }); }); //} // else // }) } */ async function makeWorktimeAll(calcdate) { var num=0; //'_id':'5cc0394bec573424a8f79059' Employee.find({'konyvelesre':'on'}, function(err,res){ var fileList=[]; var msz=getMunkaszunet(calcdate); if (err) { console.log('ERR'); } else { console.log("Kőnyvelésre jelölt: "+res.length); var bar=new Promise((resolve,reject)=>{ res.forEach((element,index,array) =>{ sleep(3000); getSickpayListById(element._id,moment(calcdate,'YYYY.MM').format('MM.YYYY'),calcdate).then(function(sickpaysArray){ getHolidayListById(element._id,moment(calcdate,'YYYY.MM').format('MM.YYYY'),calcdate).then(function(holidaysArray){ getAccessDetails(element._id,calcdate,function(err,som,month,weekend) { if(err) { console.log(err); } else { if ((som.length>0) && (element.konyvelesre==='on')) { if (element.isSubcontractor===null) // Alkalmazott { var data= printPage(element,som,month,weekend,calcdate,holidaysArray,sickpaysArray,msz)//.then(function(data){ var fonts = { Roboto: { normal: 'public/fonts/Roboto-Regular.ttf', bold: 'public/fonts/Roboto-Medium.ttf', italics: 'public/fonts/Roboto-Italic.ttf', bolditalics: 'public/fonts/Roboto-MediumItalic.ttf' } }; var printer = new PdfPrinter(fonts); var pdfDoc = printer.createPdfKitDocument(data, options); var cdir=calcdate.replace('.','_'); if (!fs.existsSync('./'+cdir)) { fs.mkdir('./'+cdir,(err)=>{ console.log(err); }); } fileList.push( { filename: element.name+'_'+cdir+'_jelenleti.pdf', // <= Here: made sure file name match path: path.join('./'+cdir+'/'+element.name+'_'+cdir+'_jelenleti.pdf'), // <= Here contentType: 'application/pdf' } ); pdfDoc.pipe(fs.createWriteStream('./'+cdir+'/'+element.name+'_'+cdir+'_jelenleti.pdf')); pdfDoc.flushPages(); pdfDoc.end(); num++; // }); } if (element.isSubcontractor==='on') // Alvállalkozó { //printPageContractor(element,som,month,weekend,calcdate,holidaysArray, function(err,data){ var data= printPage(element,som,month,weekend,calcdate,holidaysArray,sickpaysArray,msz) var fonts = { Roboto: { normal: 'public/fonts/Roboto-Regular.ttf', bold: 'public/fonts/Roboto-Medium.ttf', italics: 'public/fonts/Roboto-Italic.ttf', bolditalics: 'public/fonts/Roboto-MediumItalic.ttf' } }; var printer = new PdfPrinter(fonts); var pdfDoc = printer.createPdfKitDocument(data, options); var cdir=calcdate.replace('.','_'); if (!fs.existsSync('./'+cdir)) { fs.mkdir('./'+cdir,(err)=>{ console.log(err); }); } fileList.push( { filename: element.name+'_'+cdir+'_jelenleti.pdf', // <= Here: made sure file name match path: path.join('./'+cdir+'/'+element.name+'_'+cdir+'_jelenleti.pdf'), // <= Here contentType: 'application/pdf' } ); pdfDoc.pipe(fs.createWriteStream('./'+cdir+'/'+element.name+'_'+cdir+'_jelenleti.pdf')); pdfDoc.flushPages(); pdfDoc.end(); num++; //}); } } else { console.log("Nincs mit küldeni! ---> "+element.name); } if (index === array.length -1) {sleep(2000);resolve(); } } }); // } }); // } }); //if (index === array.length -1) resolve(); }); // Foreach }); // Promise bar.then(()=>{ sleep(10000).then(()=>{ console.log('Num employees: '+num); sendEmailMonthlyWorktime_all(fileList,function(err,res) { if (err) { console.log(err); } else { } }) }); }); } // else }) } function proba(calcdate) { //'_id':'5cc0394bec573424a8f79059' Employee.find({}, function(err,res){ if (err) { console.log('ERR'); } else { //res.forEach(element =>{ res.forEach(function(element,index){ sleep(500); if (element.emailNotifyFlags.monthlySummary===true) { if (validateEmail(element.email)) { setTimeout(() => { sendMonthlyNotify(element,calcdate,function(err,res) { if (err) { console.log("Monthly mail error: "+err); } }); }, 1000 * index); } else { console.log("Hibás emailcím! :"+element.name) } } else { console.log("Havi összesítű küldése nincs engedélyezve! :"+element.name); } }) } }) } /*function monthlyNotify(calcdate) { async _ =>{ //'_id':'5cc0394bec573424a8f79059' Employee.find({}, function(err,res){ if (err) { console.log('ERR'); } else { for (const element of res){ if (element.emailNotifyFlags.monthlySummary===true) { if (validateEmail(element.email)) { await WrappedSendEmailMonthlyNotify(element) } else { console.log("Hibás emailcím! :"+element.name) } } else { console.log("Havi összesítű küldése nincs engedélyezve! :"+element.name); } } } }) } }*/ function sendMonthlyNotify(employee, monthNumber,callback) { getAccessDetails(employee._id,monthNumber,function(err,som,month,weekend){ if(err) { console.log(err); } else { if (som.length>0) { if (employee.isSubcontractor===null) // Alkalmazott { getSickpayListById(employee._id,moment(monthNumber,'YYYY.MM').format('MM.YYYY'),monthNumber,function(err,sickpaysArray){ if (err) { console.log("Sickpay Err: "+err); } else { getHolidayListById(employee._id,moment(monthNumber,'YYYY.MM').format('MM.YYYY'),monthNumber,function(err,holidaysArray){ if (err) { console.log("Holiday Err: "+err); } else { printPage(employee,som,month,weekend,monthNumber,holidaysArray,sickpaysArray, function(err,data){ var fonts = { Roboto: { normal: 'public/fonts/Roboto-Regular.ttf', bold: 'public/fonts/Roboto-Medium.ttf', italics: 'public/fonts/Roboto-Italic.ttf', bolditalics: 'public/fonts/Roboto-MediumItalic.ttf' } }; var printer = new PdfPrinter(fonts); var pdfDoc = printer.createPdfKitDocument(data, options); pdfDoc.pipe(fs.createWriteStream('./'+employee._id+'_document.pdf')); pdfDoc.flushPages(); pdfDoc.end(); sendEmailMonthlyNotify(employee, function(err,res){ callback(err,res); }); }); } }); } }); } if (employee.isSubcontractor==='on') // Alvállalkozó { getSickpayListById(employee._id,moment(monthNumber,'YYYY.MM').format('MM.YYYY'),monthNumber,function(err,sickpaysArray){ if (err) { console.log("Sickpay Err: "+err); } else { getHolidayListById(employee._id,moment(monthNumber,'YYYY.MM').format('MM.YYYY'),monthNumber,function(err,holidaysArray){ if (err) { console.log("Holiday Err: "+err); } else { printPageContractor(employee,som,month,weekend,monthNumber,holidaysArray, function(err,data){ var fonts = { Roboto: { normal: 'public/fonts/Roboto-Regular.ttf', bold: 'public/fonts/Roboto-Medium.ttf', italics: 'public/fonts/Roboto-Italic.ttf', bolditalics: 'public/fonts/Roboto-MediumItalic.ttf' } }; var printer = new PdfPrinter(fonts); var pdfDoc = printer.createPdfKitDocument(data, options); pdfDoc.pipe(fs.createWriteStream('./'+employee._id+'_document.pdf')); pdfDoc.flushPages(); pdfDoc.end(); sendEmailMonthlyNotify(employee, function(err,res){ callback(err,res); }); }); }}); // Holiday end }}); // ickpay end } } else { console.log("Nincs mit küldeni!"); } } }); } // Nyomtatás router.get('/print/:uid/:mindate', async function(req,res){ var sickpaysArray=await getSickpayListById(req.params.uid,moment(req.params.mindate,'YYYY.MM').format('MM.YYYY'),req.params.mindate)//,function(err,sickpaysArray){ var holidaysArray=await getHolidayListById(req.params.uid,moment(req.params.mindate,'YYYY.MM').format('MM.YYYY'),req.params.mindate)//,function(err,holidaysArray){ var msz=getMunkaszunet(req.params.mindate); getAccessDetails(req.params.uid,req.params.mindate,function(err,som,month,weekend){ //getInvoices(req.params.url ,"", function(err,invoices,title) { //console.log(invoices); if(err) { console.log(err); } else { Employee.findById(req.params.uid,function(err,employee){ if (err) { console.log(err); // Hiba } else { if (employee.isSubcontractor===null) // Alkalmazott { const data= printPage(employee,som,month,weekend,req.params.mindate,holidaysArray,sickpaysArray,msz)// function(err,data){ // Client side pdf res.send(data); } if (employee.isSubcontractor==='on') // Alvállalkozó { //printPageContractor(employee,som,month,weekend,req.params.mindate,holidaysArray, function(err,data){ const data= printPage(employee,som,month,weekend,req.params.mindate,holidaysArray,sickpaysArray,msz) // Client side pdf res.send(data); //}); } } }) } }); }); module.exports = router;