klnodekb/routes/employee.js

5864 lines
201 KiB
JavaScript

// 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');
var generator = require('generate-password');
const apiVehicle=require('../js/vehicleApi');
//const employee = require('../models/employee');
//const { data } = require('pdfkit/js/reference');
//const passport = require('passport');
const {exportWorktime}=require('../public/js/export_db');
const munkaszunet=['2021.01.01','2021.03.15','2021.04.02','2021.04.05','2021.05.24','2021.08.20','2021.11.01','2021.12.24','2021.12.26',
'2022.01.01','2022.03.14','2022.03.15','2022.04.15','2022.04.18','2022.06.06',
'2023.01.01','2023.03.15','2023.04.07','2023.04.09','2023.04.10','2023.05.29','2023.10.23','2023.11.01','2023.12.25','2023.12.26'];
const emailFelado='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'
}
});*/
// 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;
case 'ACCESSQR': // Bejelentezés QR kóddal
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);
}
});
}
// 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: 'Munkanyílvántartó ú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);
}
});
});
// 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);
}
});
});
// Ú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 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!');
}
})
})
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
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);
}
});
}
// 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
function sumOfMonth(employee_id,mindate,callback)
{
getWorkTimeListById(employee_id,mindate,function(err,wt){
if (err)
{
console.log(err);
callback(err);
}
else {
var workDays=[];
wt.forEach(function(element)
{
var hoursToday=0;
var drName='';
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 dr=wt.rd.find(element => element.date==drDate)
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.fullHours+=element.workHours;
}
else
{
if (typeof dr==='undefined')
{
drName='';
}
else
{
/*dr.forEach(function(elem){
drName+=elem.name;
})*/
drName=dr;
//drName=dr.name;
}
// Még nincs ilyen nap, hozzáadjuk
workDays.push({
date:element.date,
isMunkaszunet:false,
isHoliday:false,
isSickpay:false,
isWeekend:isWeekend,
state:element.state,
location:element.location,
notes:element.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
});
}
})
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
},
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();
}
}
})
}
});
}
}
})
});
// Munkaidő lekérdezés
/*function getWorkTimeListById(employeeId,mindate,callback)
{
var date = new Date();
var query={};
// Ehavi esedékes
var firstDay= moment(mindate,"YYYY.MM").startOf('month').format("YYYY.MM.DD.");
var lastDay = moment(mindate,"YYYY.MM").endOf('month').format("YYYY.MM.DD.");
//query={$and:[{'state':'ENDED','date': {$gte : firstDay,$lte: lastDay},'employeeId': employeeId}]};
query={$and:[{'date': {$gte : firstDay,$lte: lastDay},'employeeId': employeeId}]};
WorkingTime.find(query,null,function(err, wt){
if (err)
{
callback(err);
}
else {
callback(null,wt);
}
});
}*/
function getWorkTimeListById(employeeId,mindate,callback)
{
var date = new Date();
var query={};
// Ehavi esedékes
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 dr_firstDay= moment(mindate,"YYYY.MM").startOf('month').format("YYYY.MM.DD");
var dr_lastDay = moment(mindate,"YYYY.MM").endOf('month').format("YYYY.MM.DD");
//query={$and:[{'state':'ENDED','date': {$gte : firstDay,$lte: lastDay},'employeeId': employeeId}]};
query={$and:[{'date': {$gte : firstDay,$lte: lastDay},'employeeId': employeeId}]};
WorkingTime.find(query,null,function(err, wt){
if (err)
{
callback(err);
}
else {
Work.aggregate([
{$unwind: '$dailyReport'},
{
"$match":{
"dailyReport.employeeList": mongo.ObjectId(employeeId)
},
},
{"$match": {"dailyReport.date": {$gte: dr_firstDay, $lte: dr_lastDay} }},
{$group: { _id: '$dailyReport._id','name': {$first: '$title'},'wid': {$first: '$_id'},'date': {$first: '$dailyReport.date'}}},
], function(err,dr){
if (err)
{
callback(err);
}else
{
wt.rd=dr;
callback(null,wt);
}
})
}
});
}
/*
*/
function getDateRangeSickPay(startDate, endDate,mindate, dateFormat) {
var dates = [],
//selectedMonth=moment(mindate,'YYYY.DD').month();
start=moment(startDate,'DD.MM.YYYY')
end = moment(endDate,'DD.MM.YYYY');
diff = end.diff(start, 'days')+1;
if(!start.isValid() || !end.isValid() || diff <= 0) {
return;
}
for(var i = 0; i < diff; i++) {
//dates.push(start.format(dateFormat));
// wt.date;wt.workhours;wt.timeArrive;wt.timeGetaway;wt.locations
// wdays.locations.push({arriveLoc:element.location,getawayLoc:element.locationStop});
/* date:'2020.09.24.'
fullHours:527
hours:527
isWeekend:false
location:'Szentpeterszeg'
locations:(1) [{…}]
notes:'-'
overTime:0
startStop:(1) [{…}]
__proto__:Object
0:{arriveLoc: 'Szentpeterszeg', getawayLoc: 'Szentpeterszeg'}
length:1
__proto__:Array(0)
0:{start: '2020.09.24. 7:18', stop: '2020.09.24. 16:05'}
length:1*/
if (moment(start).format('YYYY.MM')===mindate)
{
//workDays.push({date:element.date,isWeekend:isWeekend,location:element.location,notes:element.notes,locations:[{arriveLoc:element.location,getawayLoc:element.locationStop}],startStop:[{start:element.timeArrive,stop:element.timeGetaway}],fullHours:element.workHours,hours:0,overTime:0});
dates.push({date:start.format(dateFormat),isSickpay:true})
}
start.add(1,'d');
}
return dates;
};
function getDateRange(startDate, endDate,mindate, dateFormat) {
var dates = [],
//selectedMonth=moment(mindate,'YYYY.DD').month();
start=moment(startDate,'DD.MM.YYYY')
end = moment(endDate,'DD.MM.YYYY');
diff = end.diff(start, 'days')+1;
if(!start.isValid() || !end.isValid() || diff <= 0) {
return;
}
for(var i = 0; i < diff; i++) {
//dates.push(start.format(dateFormat));
// wt.date;wt.workhours;wt.timeArrive;wt.timeGetaway;wt.locations
// wdays.locations.push({arriveLoc:element.location,getawayLoc:element.locationStop});
/* date:'2020.09.24.'
fullHours:527
hours:527
isWeekend:false
location:'Szentpeterszeg'
locations:(1) [{…}]
notes:'-'
overTime:0
startStop:(1) [{…}]
__proto__:Object
0:{arriveLoc: 'Szentpeterszeg', getawayLoc: 'Szentpeterszeg'}
length:1
__proto__:Array(0)
0:{start: '2020.09.24. 7:18', stop: '2020.09.24. 16:05'}
length:1*/
if (moment(start).format('YYYY.MM')===mindate)
{
//workDays.push({date:element.date,isWeekend:isWeekend,location:element.location,notes:element.notes,locations:[{arriveLoc:element.location,getawayLoc:element.locationStop}],startStop:[{start:element.timeArrive,stop:element.timeGetaway}],fullHours:element.workHours,hours:0,overTime:0});
dates.push({date:start.format(dateFormat),isHoliday:true})
}
start.add(1,'d');
}
return dates;
};
// Szabadság szűrés egy munkavállalóra dátum vég alapján.
function getHolidayListById(employeeId,dateEndsWith,mindate,callback)
{
Employee.aggregate([
{ $match: {_id: mongo.ObjectId(employeeId)}},
{ $unwind: '$holidayData'},
{ $match: {$or:[{'holidayData.start_date': {$regex: dateEndsWith, $options:'/g/'}},{'holidayData.end_date': {$regex: dateEndsWith, $options:'/g/'}}]}},
//{ $group: {_id: '$_id', list: {$push: {'start_date':'$holidayData.start_date', 'end_date':'$holidayData.end_date'}}}}
{ $group: {_id: '$_id', list: {$push: '$holidayData'}}}
], function(err,results){
if (err)
{
console.log(err);
callback(err);
}
else {
var days=[];
if (results.length>0)
{
console.log(results);
results[0].list.forEach(element=>{
var subDay=getDateRange(element.start_date,element.end_date,mindate,'YYYY.MM.DD');
days.push.apply(days,subDay);
})
}
//console.log(days);
callback(null,days);
}
})
}
// Táppénz szűrés egy munkavállalóra dátum vég alapján.
function getSickpayListById(employeeId,dateEndsWith,mindate,callback)
{
Employee.aggregate([
{ $match: {_id: mongo.ObjectId(employeeId)}},
{ $unwind: '$sickpayData'},
{ $match: {$or:[{'sickpayData.start_date': {$regex: dateEndsWith, $options:'/g/'}},{'sickpayData.end_date': {$regex: dateEndsWith, $options:'/g/'}}]}},
{ $group: {_id: '$_id', list: {$push: '$sickpayData'}}}
], function(err,results){
if (err)
{
console.log(err);
callback(err);
}
else {
var days=[];
if (results.length>0)
{
console.log(results);
results[0].list.forEach(element=>{
var subDay=getDateRangeSickPay(element.start_date,element.end_date,mindate,'YYYY.MM.DD');
days.push.apply(days,subDay);
})
}
//console.log(days);
callback(null,days);
}
})
}
// 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);
}
});
});
// Munkaszüneti napok
function getMunkaszunet(cmonth)
{
var t=[];
munkaszunet.forEach(function(a){
if (moment(a,'YYYY.MM.DD').isSame(moment(cmonth,'YYYY.MM'), 'month')) //true if dates are in the same month
{
t.push(moment(a,'YYYY.MM.DD').format('YYYY.MM.DD.'));
}
})
//{date: '2021.01.06', isHoliday: true}
//console.log(t);
return t;
}
// Havi munkaidők lekérdezése egymunkavállalóra AJAX Route
router.get('/details2/:id/:mindate', utils.ensureAuthenticated, function(req, res) {
getHolidayListById(req.params.id,moment(req.params.mindate,'YYYY.MM').format('MM.YYYY'),req.params.mindate,function(err,holidaysArray){
if (err)
{
console.log("Holiday Err: "+err);
}
else
{
sumOfMonth(req.params.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;
if (element.fullHours>=600)
{
element.overTime=element.fullHours-element.hours;
}
else
{
element.overTime=0;
}
}
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.fullWorkHours+=(element.hours+element.overTime);
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.fullWorkHours+=(element.hours+element.overTime);
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.fullHours;
month.fullWorkHours+=(element.hours+element.overTime);
//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
});
// 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', function(req, res) {
androidApi.apiEmployee(req.params.apiKey,function(err,resp){
if (err){
console.log(err);
return;
}
else
{
if (resp==null) {res.send({'result':'Error'}); return;}
getHolidayListById(resp.id,moment(req.params.mindate,'YYYY.MM').format('MM.YYYY'),req.params.mindate,function(err,holidaysArray){
if (err)
{
console.log("Holiday Err: "+err);
}
else
{
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 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 || 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 (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'}]);
}
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, 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: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'}]);
}
}//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'},
/*function(currentPage, pageCount) {
// you can apply any logic and return any valid pdfmake element
return { text: 'Nyomtatva: '+Date(), alignment: (currentPage % 2) ? 'left' : 'right' };
},*/
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'
},
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 day = moment(element.date,'YYYY.MM.DD.').day();
if (element.dailyReport!='') drShift='\r\n'; else drShift='';
drShift='';
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
{
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'}]);
}
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'}]);
}
}
});
// 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'}]//,
/* {text:''},
{text: convertMinsToHrsMins(month.fullWorkHours+(weekend.Saturday.fullWorkHours*1.5)+(weekend.Sunday.fullWorkHours*2)), 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'},
/*function(currentPage, pageCount) {
// you can apply any logic and return any valid pdfmake element
return { text: 'Nyomtatva: '+Date(), alignment: (currentPage % 2) ? 'left' : 'right' };
},*/
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;
}
/*weekend.workHours+=element.hours;
weekend.overTime+=element.overTime;
weekend.fullWorkHours+=element.fullHours;
weekend.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(5, '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(5, '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;
//'_id':'5cc0394bec573424a8f79059'
Employee.find({'konyvelesre':'on'}, function(err,res){
var fileList=[];
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,function(err,sickpaysArray){
if (err)
{
console.log("Sickpay Err: "+err);
}
else
{
getHolidayListById(element._id,moment(calcdate,'YYYY.MM').format('MM.YYYY'),calcdate,function(err,holidaysArray){
if (err)
{
console.log("Holiday Err: "+err);
}
else
{
gatAccessDetails(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
{
printPage(element,som,month,weekend,calcdate,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);
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(); }
}
});
}
});
}
});
//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)
{
gatAccessDetails(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', function(req,res){
getSickpayListById(req.params.uid,moment(req.params.mindate,'YYYY.MM').format('MM.YYYY'),req.params.mindate,function(err,sickpaysArray){
if (err)
{
console.log("Sickpay Err: "+err);
}
else
{
getHolidayListById(req.params.uid,moment(req.params.mindate,'YYYY.MM').format('MM.YYYY'),req.params.mindate,function(err,holidaysArray){
if (err)
{
console.log("Holiday Err: "+err);
}
else
{
gatAccessDetails(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
{
printPage(employee,som,month,weekend,req.params.mindate,holidaysArray,sickpaysArray, 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){
// Client side pdf
res.send(data);
});
}
}
})
}
});
}//else
});
}
});
});
module.exports = router;