6278 lines
216 KiB
JavaScript
6278 lines
216 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');
|
|
let WorkReport = require('../models/workReportModel');
|
|
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',
|
|
'2024.01.01','2024.03.15','2024.03.29','2024.04.01','2024.05.01','2024.05.20','2024.08.20','2024.10.23','2024.11.01','2024.12.24','2024.12.25','2024.12.26','2024.12.27'];
|
|
|
|
const emailFelado= 'no-reply.klportal@iotechnic.eu';//'klportal@outlook.com';
|
|
// Email Értesítő
|
|
/*var transporter = nodemailer.createTransport({
|
|
service: 'gmail',
|
|
auth: {
|
|
user: 'szamlaertesito@gmail.com',
|
|
pass: 'IoSn1Pb1'
|
|
}
|
|
});*/
|
|
// KLELECTRO MAIL
|
|
/*var transporter = nodemailer.createTransport({
|
|
host: 'mail.klelectro.hu',
|
|
port: 465,
|
|
secret: true,
|
|
auth: {
|
|
user: 'munkanyilvantarto@klelectro.hu',
|
|
pass: 'IoSn1Pb1'
|
|
}
|
|
});*/
|
|
// BREVO MAIL
|
|
var transporter = nodemailer.createTransport({
|
|
host: 'smtp-relay.brevo.com',
|
|
port: 587,
|
|
//secret: true,
|
|
secure: false,
|
|
auth: {
|
|
user: '78718e001@smtp-brevo.com',
|
|
pass: 'gav8nmwFYLGA4ZMR'
|
|
}
|
|
});
|
|
|
|
/* HOTMAIL MAIL
|
|
var transporter = nodemailer.createTransport({
|
|
host: 'smtp-mail.outlook.com',
|
|
port: 587,
|
|
secret: true,
|
|
auth: {
|
|
user: 'klportal@outlook.com',
|
|
pass: 'IoSn1Pb1'
|
|
}
|
|
});*/
|
|
/*Email Oauth kell
|
|
var smtp = require('nodemailer-smtp-transport');
|
|
var generator = xoauth2.createXOAuth2Generator({
|
|
user: '..',
|
|
clientId: '...',
|
|
clientSecret: '...',
|
|
refreshToken: '...',
|
|
accessToken: ''
|
|
});
|
|
generator.on('token', function(token){
|
|
console.info('new token', token.accessToken);
|
|
// maybe you want to store this token
|
|
});
|
|
|
|
transporter = nodemailer.createTransport({
|
|
host: 'smtp.gmail.com',
|
|
port: 465,
|
|
secure: true,
|
|
auth: {
|
|
user: 'szamlaertesito@gmail.com',
|
|
pass: 'IoSn1Pb1'
|
|
},
|
|
tls: {
|
|
// do not fail on invalid certs
|
|
rejectUnauthorized: false,
|
|
},
|
|
}
|
|
);*/
|
|
// **** TCP SERVER **** //
|
|
const port = 8080;
|
|
// Create a new TCP server.
|
|
const server = new Net.Server();
|
|
// The server listens to a socket for a client to make a connection request.
|
|
// Think of a socket as an end point.
|
|
server.listen(port, function() {
|
|
console.log(`Worktime Server listening on socket localhost:${port}`);
|
|
});
|
|
|
|
exports.tcpClose=function(){
|
|
if (server.listening){
|
|
server.close();
|
|
}
|
|
}
|
|
// When a client requests a connection with the server, the server creates a new
|
|
// socket dedicated to that client.
|
|
server.on('connection', function(socket) {
|
|
socket.setTimeout(60000);
|
|
socket.on('timeout', () => {
|
|
console.log('Connection closed by Server.');
|
|
socket.end();
|
|
});
|
|
socket.on('close',()=>{
|
|
console.log('Connection Closed by Client.')
|
|
})
|
|
console.log('A new connection has been established from -> '+socket.remoteAddress+' : '+socket.remotePort);
|
|
server.getConnections(function(err,count){
|
|
|
|
console.log('Connected Clients: '+count);
|
|
})
|
|
// Now that a TCP connection has been established, the server can send data to
|
|
// the client by writing to its socket.
|
|
//socket.write('Hello, client.');
|
|
var ma=moment().format('DD.MM.YYYY');
|
|
// The server can also receive data from the client by reading from its socket.
|
|
socket.on('data', function(chunk) {
|
|
console.log('Payload -> '+chunk);
|
|
try{
|
|
data = JSON.parse(chunk);
|
|
|
|
} catch(e)
|
|
{
|
|
//console.log("JSON ERROR: "+e);
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: "Json Error"
|
|
}));
|
|
console.log("Json Error.");
|
|
return;
|
|
}
|
|
if (!data.cmd)
|
|
{
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: "Json Error"
|
|
}));
|
|
console.log("CMD Error.");
|
|
return;
|
|
}
|
|
|
|
switch(data.cmd)
|
|
{
|
|
case 'GETALIVE':
|
|
moment.locale('HU');
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: moment().format('LT')
|
|
}));
|
|
break;
|
|
|
|
case 'GETCITY':
|
|
//var address={};
|
|
var city='Ismeretlen';
|
|
var response = {
|
|
status : 200,
|
|
data : 'INVALID QUERY'
|
|
}
|
|
if (!data.loc | !data.lat | !data.lon | !data.CID1 | !data.CID2 )
|
|
{
|
|
socket.write(JSON.stringify(response));
|
|
return;
|
|
}
|
|
console.log('GETCITY '+moment().format('YYYY-MM-DD HH:mm')+' '+JSON.stringify(data,null,2));
|
|
//$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68
|
|
DeviceRemote.findOneAndUpdate({'imei':data.CID1,'ccid':data.CID2},
|
|
{$set:{'swRevision':data.REV}},
|
|
{ returnNewDocument: true },
|
|
function(err,device){
|
|
if (err)
|
|
{
|
|
console.log("Device DB err:"+err);
|
|
|
|
}
|
|
else
|
|
{
|
|
if (device===null)
|
|
{
|
|
createLog("INVALID DEVICE",data);//JSON.stringify(data));
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: 'Invalid device!'
|
|
}));
|
|
return;
|
|
}
|
|
if (!device)
|
|
{
|
|
//console.log('Invalid device!\r\n');
|
|
//console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n');
|
|
createLog("INVALID DEVICE",data);//JSON.stringify(data));
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: 'Invalid device!'
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
console.log('DEVICE '+moment().format('YYYY-MM-DD HH:mm')+' '+device.name);
|
|
if (data.loc==="G") // Ha a helyzet GPS által meghatározott
|
|
{
|
|
var spl=String(data.lat).split(':');
|
|
var NS=spl[0];
|
|
var LAT=spl[1];
|
|
var spl=String(data.lon).split(':');
|
|
var EW=spl[0];
|
|
var LON=spl[1];
|
|
var dec1=parseCoord(LAT,NS);
|
|
var dec2=parseCoord(LON,EW);
|
|
hereGeocoding({lat:dec1, lon:dec2}, function(err, resp) {
|
|
// geocoder.reverse({lat:dec1, lon:dec2}, function(err, resp) {
|
|
|
|
if (err)
|
|
{
|
|
|
|
console.log('Geocoding error!\r\n'+err);
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: 'GEOCODING ERROR!'
|
|
}));
|
|
|
|
}
|
|
if (resp)
|
|
{
|
|
//address={'city':resp[0].city,'road':resp[0].streetName}
|
|
city=resp.city;//resp[0].city;
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: city,
|
|
//road: resp[0].streetName,
|
|
}));
|
|
// Utolsó pozíció mentése adatbázisba.
|
|
apiVehicle.apiVehicleSetCity(device.vehicle_id,resp.city,device._id,dec1,dec2,function(err,re){
|
|
if(err)
|
|
console.log(err);
|
|
// else
|
|
// console.log(re);
|
|
})
|
|
/*DeviceRemote.findOneAndUpdate({'imei':data.CID1,'ccid':data.CID2},
|
|
{$set:{'lastCity':resp.city}},function(err,device){
|
|
if (err)
|
|
{
|
|
console.log("Device DB err:"+err);
|
|
}
|
|
});*/
|
|
}
|
|
})//Geocoding end
|
|
|
|
|
|
} else
|
|
|
|
// GPS RTT
|
|
if (data.loc==="G2") // Ha a helyzet GPS által meghatározott
|
|
{
|
|
/* var spl=String(data.lat).split(':');
|
|
var NS=spl[0];
|
|
var LAT=spl[1];
|
|
var spl=String(data.lon).split(':');
|
|
var EW=spl[0];
|
|
var LON=spl[1];
|
|
var dec1=parseCoord(LAT,NS);
|
|
var dec2=parseCoord(LON,EW);*/
|
|
hereGeocoding({lat:data.lat, lon:data.lon}, function(err, resp) {
|
|
// geocoder.reverse({lat:dec1, lon:dec2}, function(err, resp) {
|
|
|
|
if (err)
|
|
{
|
|
|
|
console.log('Geocoding error!\r\n'+err);
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: 'GEOCODING ERROR!'
|
|
}));
|
|
|
|
}
|
|
if (resp)
|
|
{
|
|
//address={'city':resp[0].city,'road':resp[0].streetName}
|
|
city=resp.city;//resp[0].city;
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: city,
|
|
//road: resp[0].streetName,
|
|
}));
|
|
// Utolsó pozíció mentése adatbázisba.
|
|
apiVehicle.apiVehicleSetCity(device.vehicle_id,resp.city,device._id,data.lat,data.lon,function(err,re){
|
|
if(err)
|
|
console.log(err);
|
|
else
|
|
{
|
|
if (re.name)
|
|
console.log(re.name);
|
|
}
|
|
})
|
|
/* DeviceRemote.findOneAndUpdate({'imei':data.CID1,'ccid':data.CID2},
|
|
{$set:{'lastCity':resp.city}},function(err,device){
|
|
if (err)
|
|
{
|
|
console.log("Device DB err:"+err);
|
|
}
|
|
}); */
|
|
}
|
|
})//Geocoding end
|
|
|
|
|
|
}
|
|
else
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: 'Invalid modeinfo!'
|
|
}));
|
|
}
|
|
}
|
|
// socket.destroy();
|
|
})
|
|
break;
|
|
|
|
case 'ACCESS':
|
|
moment.locale('HU');
|
|
var response = {
|
|
status : 200,
|
|
data : 'INVALID QUERY'
|
|
}
|
|
if (!data.CID1 | !data.CID2)
|
|
{
|
|
//console.log("Invalid Client ID!");
|
|
createLog("INVALID CID",data);//JSON.stringify(data));
|
|
response.status=200;
|
|
response.data='INVALID CLIENT ID';
|
|
socket.write(JSON.stringify(response));
|
|
break;
|
|
}
|
|
if (!data.LAT | !data.LON)
|
|
{
|
|
//console.log("Invalid Client POS!");
|
|
createLog("INVALID LOCATION ",data);//JSON.stringify(data));
|
|
response.status=200;
|
|
response.data='INVALID LOCATION ID';
|
|
socket.write(JSON.stringify(response));
|
|
break;
|
|
}
|
|
//var address=getAddress(data.LAT,data.LON);
|
|
DeviceRemote.findOne({imei:data.CID1,ccid:data.CID2}, function(err,device){
|
|
if (err)
|
|
{
|
|
console.log("Device DB err:"+err);
|
|
}
|
|
else
|
|
{
|
|
//if (!device.length)
|
|
if (typeof device === 'undefined' || !device)
|
|
{
|
|
//console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n');
|
|
createLog("INVALID DEVICE",data);//JSON.stringify(data));
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: 'Invalid device!'
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (!data.loc)
|
|
{
|
|
response.status=200;
|
|
response.data='INVALID LOCATION';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
if (data.mode!='ARRIVAL' && data.mode!='GETAWAY' && data.mode!='FREEDOM' && data.mode!='SICKPAY')
|
|
{
|
|
response.status=200;
|
|
response.data='INVALID MODE';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
//console.log(data.rfid);
|
|
Employee.findOne({'accessCode':data.rfid},function(err,employee){
|
|
|
|
if(err)
|
|
{
|
|
response.status=200;
|
|
response.data='DB ERROR 1';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
// Ha pozíció szöveges (fix telepítésű WiFi-nél)
|
|
//Utca név is kell;
|
|
//var addr=address.city+","+address.road+" "+address.number;
|
|
getAddress(data.LAT,data.LON,data.loc,function(err,address){
|
|
|
|
if (err)
|
|
{
|
|
console.log("GeoAddress Error! "+err);
|
|
// response.status=200;
|
|
// response.data='GeoErr! ';
|
|
//socket.write(JSON.stringify(response));
|
|
// return;
|
|
// Nincs GPS!!!!!!!!!!!!!!!!!!!!!!
|
|
addr=device.assignment;
|
|
registerAccess(employee,addr,null,null,device,function(err,result){
|
|
//registerAccess(employee,data.loc,function(err,result){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
socket.write(JSON.stringify(err));
|
|
}
|
|
else
|
|
{
|
|
checkIsHoliday(employee._id,ma,function(err,cb){
|
|
if (err)
|
|
{
|
|
console.log('Holiday Split Error: '+err);
|
|
}
|
|
else
|
|
{
|
|
socket.write(JSON.stringify(result));
|
|
}
|
|
})
|
|
|
|
}
|
|
})
|
|
}
|
|
else
|
|
{
|
|
|
|
|
|
var addr=address.city+","+address.road+" "+address.number;
|
|
/* if (data.loc==='G'){
|
|
var dec=convertDeg2Dec(data.LAT,data.LON);
|
|
}
|
|
else*/
|
|
if (data.loc==="G2"){
|
|
var dec={'latdec':data.LAT,'londec':data.LON}
|
|
}
|
|
else
|
|
{
|
|
var dec=convertDeg2Dec(data.LAT,data.LON);
|
|
}
|
|
registerAccess(employee,addr,dec.latdec,dec.londec,device,function(err,result){
|
|
//registerAccess(employee,data.loc,function(err,result){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
socket.write(JSON.stringify(err));
|
|
}
|
|
else
|
|
{
|
|
//console.log('Access: '+JSON.stringify(result));
|
|
createLog("ACCESS",result);//JSON.stringify(result));
|
|
checkIsHoliday(employee._id,ma,function(err,cb){
|
|
if (err)
|
|
{
|
|
console.log('Holiday Split Error: '+err);
|
|
}
|
|
else
|
|
{
|
|
socket.write(JSON.stringify(result));
|
|
}
|
|
})
|
|
|
|
}
|
|
})
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
//console.log("Nincs munkavállaló ezzel az azonosítóval!");
|
|
createLog("INVALID CODE",data.rfid);//JSON.stringify(data.rfid));
|
|
response.status=200;
|
|
response.data='INVALID CODE';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
|
|
}
|
|
})
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
|
|
moment.locale('HU');
|
|
var response = {
|
|
status : 200,
|
|
data : 'INVALID QUERY'
|
|
}
|
|
if (!data.CID1 | !data.CID2)
|
|
{
|
|
//console.log("Invalid Client ID!");
|
|
createLog("INVALID CID",data);//JSON.stringify(data));
|
|
response.status=200;
|
|
response.data='INVALID CLIENT ID';
|
|
socket.write(JSON.stringify(response));
|
|
break;
|
|
}
|
|
if (!data.LAT | !data.LON)
|
|
{
|
|
//console.log("Invalid Client POS!");
|
|
createLog("INVALID LOCATION ",data);//JSON.stringify(data));
|
|
response.status=200;
|
|
response.data='INVALID LOCATION ID';
|
|
socket.write(JSON.stringify(response));
|
|
break;
|
|
}
|
|
//var address=getAddress(data.LAT,data.LON);
|
|
DeviceRemote.findOne({imei:data.CID1,ccid:data.CID2}, function(err,device){
|
|
if (err)
|
|
{
|
|
console.log("Device DB err:"+err);
|
|
}
|
|
else
|
|
{
|
|
//if (!device.length)
|
|
if (typeof device === 'undefined' || !device)
|
|
{
|
|
//console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n');
|
|
createLog("INVALID DEVICE",data);//JSON.stringify(data));
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: 'Invalid device!'
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (!data.loc)
|
|
{
|
|
response.status=200;
|
|
response.data='INVALID LOCATION';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
if (data.mode!='ARRIVAL' && data.mode!='GETAWAY' && data.mode!='FREEDOM' && data.mode!='SICKPAY')
|
|
{
|
|
response.status=200;
|
|
response.data='INVALID MODE';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
//console.log(data.rfid);
|
|
Employee.findOne({'qrCode':data.qrCode},function(err,employee){
|
|
|
|
if(err)
|
|
{
|
|
response.status=200;
|
|
response.data='DB ERROR 1';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
// Ha pozíció szöveges (fix telepítésű WiFi-nél)
|
|
//Utca név is kell;
|
|
//var addr=address.city+","+address.road+" "+address.number;
|
|
getAddress(data.LAT,data.LON,data.loc,function(err,address){
|
|
|
|
if (err)
|
|
{
|
|
console.log("GeoAddress Error! "+err);
|
|
// response.status=200;
|
|
// response.data='GeoErr! ';
|
|
//socket.write(JSON.stringify(response));
|
|
// return;
|
|
// Nincs GPS!!!!!!!!!!!!!!!!!!!!!!
|
|
addr=device.assignment;
|
|
registerAccess(employee,addr,null,null,device,function(err,result){
|
|
//registerAccess(employee,data.loc,function(err,result){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
socket.write(JSON.stringify(err));
|
|
}
|
|
else
|
|
{
|
|
checkIsHoliday(employee._id,ma,function(err,cb){
|
|
if (err)
|
|
{
|
|
console.log('Holiday Split Error: '+err);
|
|
}
|
|
else
|
|
{
|
|
socket.write(JSON.stringify(result));
|
|
}
|
|
})
|
|
|
|
}
|
|
})
|
|
}
|
|
else
|
|
{
|
|
|
|
|
|
var addr=address.city+","+address.road+" "+address.number;
|
|
/* if (data.loc==='G'){
|
|
var dec=convertDeg2Dec(data.LAT,data.LON);
|
|
}
|
|
else*/
|
|
if (data.loc==="G2"){
|
|
var dec={'latdec':data.LAT,'londec':data.LON}
|
|
}
|
|
else
|
|
{
|
|
var dec=convertDeg2Dec(data.LAT,data.LON);
|
|
}
|
|
registerAccess(employee,addr,dec.latdec,dec.londec,device,function(err,result){
|
|
//registerAccess(employee,data.loc,function(err,result){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
socket.write(JSON.stringify(err));
|
|
}
|
|
else
|
|
{
|
|
//console.log('Access: '+JSON.stringify(result));
|
|
createLog("ACCESS",result);//JSON.stringify(result));
|
|
checkIsHoliday(employee._id,ma,function(err,cb){
|
|
if (err)
|
|
{
|
|
console.log('Holiday Split Error: '+err);
|
|
}
|
|
else
|
|
{
|
|
socket.write(JSON.stringify(result));
|
|
}
|
|
})
|
|
|
|
}
|
|
})
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
//console.log("Nincs munkavállaló ezzel az azonosítóval!");
|
|
createLog("INVALID CODE",data.rfid);//JSON.stringify(data.rfid));
|
|
response.status=200;
|
|
response.data='INVALID CODE';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
|
|
}
|
|
})
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
case 'ACCESSNOGEO': // Bejelentkezés telefonról Ha a címadat már megvan
|
|
moment.locale('HU');
|
|
var response = {
|
|
status : 200,
|
|
data : 'INVALID QUERY'
|
|
}
|
|
if (!data.CID1 | !data.CID2)
|
|
{
|
|
//console.log("Invalid Client ID!");
|
|
createLog("INVALID CID",data);//JSON.stringify(data));
|
|
response.status=200;
|
|
response.data='INVALID CLIENT ID';
|
|
socket.write(JSON.stringify(response));
|
|
break;
|
|
}
|
|
if (!data.LAT | !data.LON)
|
|
{
|
|
//console.log("Invalid Client POS!");
|
|
createLog("INVALID LOCATION",data);//JSON.stringify(data));
|
|
response.status=200;
|
|
response.data='INVALID LOCATION ID';
|
|
socket.write(JSON.stringify(response));
|
|
break;
|
|
}
|
|
//var address=getAddress(data.LAT,data.LON);
|
|
DeviceRemote.find({imei:data.CID1,ccid:data.CID2}, function(err,device){
|
|
if (err)
|
|
{
|
|
console.log("Device DB err:"+err);
|
|
}
|
|
else
|
|
{
|
|
if (!device.length)
|
|
{
|
|
// console.log('Invalid device!\r\n');
|
|
//console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n');
|
|
createLog("INVALID DEVICE",data);//JSON.stringify(data));
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: 'Invalid device!'
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (!data.address)
|
|
{
|
|
response.status=200;
|
|
response.data='INVALID ADDRESS';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
if (data.mode!='ARRIVAL' && data.mode!='GETAWAY' && data.mode!='FREEDOM' && data.mode!='SICKPAY')
|
|
{
|
|
response.status=200;
|
|
response.data='INVALID MODE';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
//console.log(data.rfid);
|
|
Employee.findOne({'accessCode':data.rfid},function(err,employee){
|
|
|
|
if(err)
|
|
{
|
|
response.status=200;
|
|
response.data='DB ERROR 1';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
// Ha pozíció szöveges (fix telepítésű WiFi-nél)
|
|
|
|
|
|
|
|
registerAccess(employee,data.address,data.LAT,data.LON,device,function(err,result){
|
|
//registerAccess(employee,data.loc,function(err,result){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
socket.write(JSON.stringify(err));
|
|
}
|
|
else
|
|
{
|
|
//console.log('Access: '+JSON.stringify(result));
|
|
createLog("ACCESS",result);//JSON.stringify(result));
|
|
checkIsHoliday(employee._id,ma,function(err,cb){
|
|
if (err)
|
|
{
|
|
console.log('Holiday Split Error: '+err);
|
|
}
|
|
else
|
|
{
|
|
socket.write(JSON.stringify(result));
|
|
}
|
|
})
|
|
|
|
}
|
|
})
|
|
|
|
}
|
|
else
|
|
{
|
|
//console.log("Nincs munkavállaló ezzel az azonosítóval!");
|
|
createLog("INVALID CODE",data.rfid);//JSON.stringify(data.rfid));
|
|
response.status=200;
|
|
response.data='INVALID CODE';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
|
|
}
|
|
})
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
case 'ACCESSNOGEOQR': // Bejelentkezés telefonról QR kóddal Ha a címadat már megvan
|
|
moment.locale('HU');
|
|
var response = {
|
|
status : 200,
|
|
data : 'INVALID QUERY'
|
|
}
|
|
if (!data.CID1 | !data.CID2)
|
|
{
|
|
//console.log("Invalid Client ID!");
|
|
createLog("INVALID CID",data);//JSON.stringify(data));
|
|
response.status=200;
|
|
response.data='INVALID CLIENT ID';
|
|
socket.write(JSON.stringify(response));
|
|
break;
|
|
}
|
|
if (!data.LAT | !data.LON)
|
|
{
|
|
//console.log("Invalid Client POS!");
|
|
createLog("INVALID LOCATION",data);//JSON.stringify(data));
|
|
response.status=200;
|
|
response.data='INVALID LOCATION ID';
|
|
socket.write(JSON.stringify(response));
|
|
break;
|
|
}
|
|
//var address=getAddress(data.LAT,data.LON);
|
|
DeviceRemote.find({imei:data.CID1,ccid:data.CID2}, function(err,device){
|
|
if (err)
|
|
{
|
|
console.log("Device DB err:"+err);
|
|
}
|
|
else
|
|
{
|
|
if (!device.length)
|
|
{
|
|
// console.log('Invalid device!\r\n');
|
|
//console.log(ma+' Invalid device! RAW: '+JSON.stringify(data)+'\r\n');
|
|
createLog("INVALID DEVICE",data);//JSON.stringify(data));
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: 'Invalid device!'
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
if (!data.address)
|
|
{
|
|
response.status=200;
|
|
response.data='INVALID ADDRESS';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
if (data.mode!='ARRIVAL' && data.mode!='GETAWAY' && data.mode!='FREEDOM' && data.mode!='SICKPAY')
|
|
{
|
|
response.status=200;
|
|
response.data='INVALID MODE';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
//console.log(data.rfid);
|
|
Employee.findOne({'qrCode':data.qrCode},function(err,employee){
|
|
|
|
if(err)
|
|
{
|
|
response.status=200;
|
|
response.data='DB ERROR 1';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
// Ha pozíció szöveges (fix telepítésű WiFi-nél)
|
|
|
|
|
|
|
|
registerAccess(employee,data.address,data.LAT,data.LON,device,function(err,result){
|
|
//registerAccess(employee,data.loc,function(err,result){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
socket.write(JSON.stringify(err));
|
|
}
|
|
else
|
|
{
|
|
//console.log('Access: '+JSON.stringify(result));
|
|
createLog("ACCESS",result);//JSON.stringify(result));
|
|
checkIsHoliday(employee._id,ma,function(err,cb){
|
|
if (err)
|
|
{
|
|
console.log('Holiday Split Error: '+err);
|
|
}
|
|
else
|
|
{
|
|
socket.write(JSON.stringify(result));
|
|
}
|
|
})
|
|
|
|
}
|
|
})
|
|
|
|
}
|
|
else
|
|
{
|
|
//console.log("Nincs munkavállaló ezzel az azonosítóval!");
|
|
createLog("INVALID CODE",data.rfid);//JSON.stringify(data.rfid));
|
|
response.status=200;
|
|
response.data='INVALID CODE';
|
|
socket.write(JSON.stringify(response));
|
|
}
|
|
|
|
}
|
|
})
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
case 'NTRK':
|
|
tracker.newTrack(data.id,function(err,result){
|
|
if (err)
|
|
{
|
|
socket.write(JSON.stringify({
|
|
status: 1,
|
|
data: err
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: result
|
|
}));
|
|
}
|
|
})
|
|
break;
|
|
case 'PTM':
|
|
tracker.pushtelemetry(data.data,function(err,result){
|
|
if (err)
|
|
{
|
|
socket.write(JSON.stringify({
|
|
status: 1,
|
|
data: err
|
|
}));
|
|
}
|
|
else
|
|
{
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: result
|
|
}));
|
|
}
|
|
})
|
|
break;
|
|
default:
|
|
socket.write(JSON.stringify({
|
|
status: 200,
|
|
data: "Cmd error"
|
|
}));
|
|
break;
|
|
}
|
|
|
|
});
|
|
|
|
// When the client requests to end the TCP connection with the server, the server
|
|
// ends the connection.
|
|
socket.on('end', function() {
|
|
console.log('Closing connection with the client');
|
|
});
|
|
|
|
// Don't forget to catch error, for your own sake.
|
|
socket.on('error', function(err) {
|
|
console.log('Error: ${err}');
|
|
});
|
|
});
|
|
|
|
// **** END OF TCP SERVER **** //
|
|
|
|
// Device Logging
|
|
function createLog(logName,logMessage)
|
|
{
|
|
moment.locale('HU');
|
|
var fname='./deviceLog_'+moment().format('YYYY_MM_DD')+'.txt';
|
|
var logRegistry={};
|
|
logRegistry.LOG={'timeStamp':moment().format('YYYY.MM.DD HH:MM:SS'),'logName':logName,'logMessage':logMessage};
|
|
//console.log('Saving to: '+fname);
|
|
fs.appendFile(fname, JSON.stringify(logRegistry)+',\r\n', function (err) {
|
|
if (err)
|
|
{ console.log('DeviceLog Err: '+err);
|
|
throw err;
|
|
}
|
|
/*else
|
|
{
|
|
console.log('Saved! '+fname);
|
|
}*/
|
|
});
|
|
}
|
|
|
|
// Szabadság email kiküldése
|
|
function sendEmailHolidayNotify(employeeName,employeeMail,holiday)
|
|
{
|
|
|
|
var mailOptions = {
|
|
from: emailFelado,// 'munkanyilvantarto@klelectro.hu',
|
|
to: employeeMail,
|
|
subject: 'Szabadság kiadás.',
|
|
text: 'That was easy!'
|
|
};
|
|
|
|
mailOptions.text='Tisztelt '+employeeName+'!\n Az ön számára szabadság kiadása történt.\n\nSzabadság kezdete: '+holiday.start_date+'\nSzabadság vége: '+holiday.end_date+'\n';
|
|
transporter.sendMail(mailOptions, function(error, info){
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
console.log('Email sent: ' + info.response);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Szabadság módosítás email kiküldése
|
|
function sendEmailHolidayResizeNotify(employeeName,employeeMail,holidayNew,holidayOld)
|
|
{
|
|
|
|
var mailOptions = {
|
|
from: emailFelado,// 'munkanyilvantarto@klelectro.hu',
|
|
to: employeeMail,
|
|
subject: 'Szabadság módosítás.',
|
|
text: 'That was easy!'
|
|
};
|
|
|
|
mailOptions.text='Tisztelt '+employeeName+'!\n Az Ön szabadsága módosításra került az alábbiak szerint.\n\n'+
|
|
'Eredeti állapot:\n'+
|
|
'Szabadság kezdete: '+moment(holidayOld.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
|
|
'Szabadság vége: '+moment(holidayOld.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
|
|
'Napok: '+holidayOld.duration+
|
|
'Új állapot:\n'+
|
|
'Szabadság kezdete: '+moment(holidayNew.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
|
|
'Szabadság vége: '+moment(holidayNew.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
|
|
'Napok: '+holidayNew.duration;
|
|
|
|
transporter.sendMail(mailOptions, function(error, info){
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
console.log('Email sent: ' + info.response);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Szabadság áthelyezés email kiküldése
|
|
function sendEmailHolidayDropNotify(employeeName,employeeMail,holidayNew,holidayOld)
|
|
{
|
|
|
|
var mailOptions = {
|
|
from: emailFelado,// 'munkanyilvantarto@klelectro.hu',
|
|
to: employeeMail,
|
|
subject: 'Szabadság áthelyezés.',
|
|
text: 'That was easy!'
|
|
};
|
|
|
|
mailOptions.text='Tisztelt '+employeeName+'!\n Az Ön szabadsága áthelyezésre került az alábbiak szerint.\n\n'+
|
|
'Eredeti állapot:\n'+
|
|
'Szabadság kezdete: '+moment(holidayOld.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
|
|
'Szabadság vége: '+moment(holidayOld.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
|
|
'Új állapot:\n'+
|
|
'Szabadság kezdete: '+moment(holidayNew.start_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n'+
|
|
'Szabadság vége: '+moment(holidayNew.end_date,'DD-MM-YYYY').format('YYYY.MM.DD')+'\n';
|
|
transporter.sendMail(mailOptions, function(error, info){
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
console.log('Email sent: ' + info.response);
|
|
}
|
|
});
|
|
}
|
|
// Regisztrációs email kiküldése
|
|
function sendEmailRegisterNotify(employee,visiblePassword)
|
|
{
|
|
|
|
var mailOptions = {
|
|
from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com',
|
|
to: employee.email,
|
|
subject: 'Munkanyílvántartó regisztráció.',
|
|
text: 'That was easy!'
|
|
};
|
|
|
|
mailOptions.text='Tisztelt '+employee.name+'!\n Ön sikeresen regisztrált a Munkaidő nyílvántartó rendszerbe.\nBelépési adatok:\nWeblap: www.klportal.eu\nFelhasználó név: '+employee.email+'\nJelszó: '+visiblePassword+'\n';
|
|
transporter.sendMail(mailOptions, function(error, info){
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
console.log('Email sent: ' + info.response);
|
|
}
|
|
});
|
|
}
|
|
// Munkaidő törlése email kiküldése
|
|
function sendEmailDeletedWorkingTimeNotify(employee,deletedWorkingTime)
|
|
{
|
|
|
|
var mailOptions = {
|
|
from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com',
|
|
to: employee.email,
|
|
subject: 'Munkanyílvántartó munkaidő törlése.',
|
|
text: 'That was easy!'
|
|
};
|
|
|
|
mailOptions.text='Tisztelt '+employee.name+'!\nAz Ön alábbi munkaidő bejegyzése törlésre került.\n\n'+
|
|
deletedWorkingTime.timeArrive+' - '+deletedWorkingTime.location+'\n'+deletedWorkingTime.timeGetaway+' - '+deletedWorkingTime.locationStop+'\n';
|
|
transporter.sendMail(mailOptions, function(error, info){
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
console.log('Email sent: ' + info.response);
|
|
}
|
|
});
|
|
}
|
|
// Regisztrációs email kiküldése
|
|
function sendEmailNewPasswordNotify(employee,visiblePassword)
|
|
{
|
|
|
|
var mailOptions = {
|
|
from: emailFelado,//'munkanyilvantarto@klelectro.hu',//'szamlaertesito@gmail.com',
|
|
to: employee.email,
|
|
subject: '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);
|
|
}
|
|
});
|
|
});
|
|
|
|
// Szabadságok naptárba
|
|
router.get("/holidays_byperson_calendar/:id/:year", async function(req, res){
|
|
console.log('GANTT3');
|
|
var data=[];
|
|
moment.locale('HU');
|
|
const empId=req.params.id
|
|
const year=req.params.year
|
|
const employees=await Employee.find({'konyvelesre':'on','isSubcontractor':{$ne:'on'}},null,{sort: {name: 1}} );
|
|
|
|
await employees.forEach(element => {
|
|
|
|
//const color = generateColorHsl(element.name, saturationRange, lightnessRange);
|
|
//const c=HSLToRGB(color.h,color.s,color.l);
|
|
element.holidayData.forEach(hd=>{
|
|
if (moment(hd.start_date,'DD.MM.YYYY').format('YYYY')==year || moment(hd.end_date,'DD.MM.YYYY').format('YYYY')==year)
|
|
{
|
|
if (empId==element._id)
|
|
{
|
|
var task={
|
|
id:hd._id,
|
|
|
|
start:moment(hd.start_date,'DD.MM.YYYY').startOf('day').format('YYYY-MM-DD HH:mm:SS'),
|
|
end:moment(hd.end_date,'DD.MM.YYYY').endOf('day').format('YYYY-MM-DD HH:mm:SS'),//.add(1, 'days').toDate(),//.endOf('day').toDate(),
|
|
title:element.name,
|
|
allDay:true,
|
|
eventBackgroundColor: '#378006',//rgb(c.r,c.g,c.b),
|
|
color: '#378006',
|
|
editable:true,
|
|
display:'all',
|
|
extendedProps: {
|
|
employeeId:element._id,
|
|
employeeName:element.name,
|
|
employeeEmail:element.email,
|
|
order:1,
|
|
active: true,
|
|
},
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var task={
|
|
id:hd._id,
|
|
|
|
start:moment(hd.start_date,'DD.MM.YYYY').startOf('day').format('YYYY-MM-DD HH:mm:SS'),
|
|
end:moment(hd.end_date,'DD.MM.YYYY').endOf('day').format('YYYY-MM-DD HH:mm:SS'),//.endOf('day').toDate(),
|
|
title:element.name,
|
|
allDay:true,
|
|
eventBackgroundColor: '#378006',//rgb(c.r,c.g,c.b),
|
|
color: '#CDCDCD',
|
|
display:'all',
|
|
editable:false,
|
|
extendedProps: {
|
|
employeeId:element._id,
|
|
employeeName:element.name,
|
|
employeeEmail:element.email,
|
|
order:0,
|
|
active: false,
|
|
},
|
|
}
|
|
}
|
|
data.push(task);
|
|
}
|
|
})
|
|
|
|
});
|
|
res.send(data);
|
|
|
|
});
|
|
// Táppénz felvétele
|
|
router.get('/sickpay_byperson/:id', utils.ensureAuthenticated,function(req,res){
|
|
|
|
Employee.findById(req.params.id, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
res.send('Hiba történt az oldal betöltése során. ');
|
|
}
|
|
else
|
|
{
|
|
//console.log(employee);
|
|
res.render('employee_sickpay_byperson', {
|
|
title: 'Táppénz '+employee.name,
|
|
employee: employee,
|
|
user:req.user
|
|
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
router.post('/sickpay_byperson/:id', utils.ensureAuthenticated,function(req,res){
|
|
console.log(req.params.id);
|
|
console.log(req.body);
|
|
moment.locale('HU');
|
|
let startd = moment(req.body.sField, 'DD.MM.YYYY'); //Pick any format
|
|
let endd = moment(req.body.eField, 'DD.MM.YYYY');
|
|
let dayCounter = endd.diff(startd,'days')+1;
|
|
|
|
console.log("Táppénz: ",dayCounter); //display your total elapsed weekdays in the console!
|
|
|
|
let hd ={
|
|
start_date: req.body.sField,
|
|
end_date: req.body.eField,
|
|
|
|
duration: dayCounter,
|
|
|
|
};
|
|
//hd.id=hd._id;
|
|
Employee.findByIdAndUpdate(req.params.id,{ $inc: {'sickpayUsed': dayCounter },$push: {sickpayData:hd}},function(error,success){
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
console.log(success);
|
|
//sendEmailHolidayNotify(success.name,success.email,hd);
|
|
res.redirect('/employee/sickpay_byperson/'+req.params.id);
|
|
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
router.get('/get_sickpayById/:id', utils.ensureAuthenticated,function(req,res){
|
|
|
|
Employee.findById(req.params.id, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
res.send('Hiba történt az oldal betöltése során. ');
|
|
}
|
|
else
|
|
{
|
|
//console.log(employee);
|
|
var hd=[];
|
|
employee.sickpayData.forEach(function(element,i,array){
|
|
//console.log('l:'+i+' fl:'+employee.holidayData.length);
|
|
//hd+=('[\''+element.start_date+'\',\''+element.end_date+'\']');
|
|
//if (i<(array.length-1)) hd+=',';
|
|
hd.push([element.start_date,element.end_date]);
|
|
})
|
|
|
|
//hd+=']';
|
|
res.send(hd);
|
|
}
|
|
});
|
|
});
|
|
|
|
// Kiadott/meglévő szabadság lekérése Full Calendar
|
|
router.get('/holidays_count/:uid', async function (req,res){
|
|
const result= await Employee.findById(req.params.uid);
|
|
if (result)
|
|
{
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send({'response':'ok','vacationYear':result.vacationYear,'vacationUsed': result.vacationUsed, 'vacationLeft':result.vacationYear-result.vacationUsed});
|
|
}
|
|
else
|
|
{
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send({'response':'Fail','message':'Sikertelen művelet!'});
|
|
}
|
|
});
|
|
|
|
// Új Szabadság kiadása
|
|
router.get('/holidays_byperson/:id', utils.ensureAuthenticated,function(req,res){
|
|
|
|
Employee.findById(req.params.id, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
res.send('Hiba történt az oldal betöltése során. ');
|
|
}
|
|
else
|
|
{
|
|
//console.log(employee);
|
|
res.render('employee_holidays_byperson', {
|
|
title: 'Szabadságok '+employee.name,
|
|
employee: employee,
|
|
user:req.user
|
|
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// Szabadság módosítása
|
|
router.post('/holiday_resize_update', async function(req,res){
|
|
|
|
const hd_event=req.body.event;
|
|
var a = moment(hd_event.start,'YYYY-MM-DD');
|
|
var b = moment(hd_event.end,'YYYY-MM-DD');
|
|
const hdOld_event=req.body.oldEvent;
|
|
var c = moment(hdOld_event.start,'YYYY-MM-DD');
|
|
var d = moment(hdOld_event.end,'YYYY-MM-DD');
|
|
|
|
const empId=hd_event.extendedProps.employeeId;
|
|
let hd ={
|
|
duration: b.diff(a, 'days'), // 1
|
|
start_date: a.format('DD.MM.YYYY'),
|
|
end_date: b.subtract(1,'days').format('DD.MM.YYYY'),
|
|
};
|
|
|
|
const hdOld ={
|
|
duration: d.diff(c, 'days'), // 1
|
|
start_date: c.format('DD.MM.YYYY'),
|
|
end_date: d.subtract(1,'days').format('DD.MM.YYYY'),
|
|
};
|
|
|
|
const kulombseg=hd.duration-hdOld.duration
|
|
|
|
const result1=await Employee.findByIdAndUpdate(empId,{ $inc: {'vacationUsed': kulombseg }}, {new: true})
|
|
const result=await Employee.updateOne(
|
|
{'_id':mongo.ObjectId(hd_event.extendedProps.employeeId),"holidayData._id":hd_event.id},
|
|
{$set:{'holidayData.$.start_date':hd.start_date,'holidayData.$.end_date':hd.end_date}},
|
|
)
|
|
if (result.ok)
|
|
{
|
|
console.log('Holiday Updated! '+hd_event.id);
|
|
res.setHeader('Content-Type', 'application/json');
|
|
sendEmailHolidayResizeNotify(hd_event.extendedProps.employeeName,hd_event.extendedProps.employeeEmail,hd,hdOld)
|
|
res.status(200).send({'response':'OK','message':'Sikeres módosítás!','vacationUsed':result1.vacationUsed,'vacationLeft':result1.vacationYear-result1.vacationUsed});
|
|
|
|
}
|
|
else
|
|
{
|
|
console.log('Holiday Failed to Update! '+hd_event.id);
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send({'response':'Fail','message':'Sikertelen Módosítás!'});
|
|
}
|
|
|
|
})
|
|
|
|
// Szabadság áthelyezése
|
|
router.post('/holiday_drop_update', async function(req,res){
|
|
|
|
const hd_event=req.body.event;
|
|
var a = moment(hd_event.start,'YYYY-MM-DD');
|
|
var b = moment(hd_event.end,'YYYY-MM-DD');
|
|
const hdOld_event=req.body.oldEvent;
|
|
var c = moment(hdOld_event.start,'YYYY-MM-DD');
|
|
var d = moment(hdOld_event.end,'YYYY-MM-DD');
|
|
|
|
|
|
let hd ={
|
|
duration: b.diff(a, 'days'), // 1
|
|
start_date: a.format('DD.MM.YYYY'),
|
|
end_date: b.subtract(1,'days').format('DD.MM.YYYY'),
|
|
};
|
|
|
|
const hdOld ={
|
|
duration: d.diff(c, 'days'), // 1
|
|
start_date: c.format('DD.MM.YYYY'),
|
|
end_date: d.subtract(1,'days').format('DD.MM.YYYY'),
|
|
};
|
|
|
|
const result=await Employee.updateOne(
|
|
{'_id':mongo.ObjectId(hd_event.extendedProps.employeeId),"holidayData._id":hd_event.id},
|
|
{$set:{'holidayData.$.start_date':hd.start_date,'holidayData.$.end_date':hd.end_date}},
|
|
)
|
|
if (result.ok)
|
|
{
|
|
console.log('Holiday Updated! '+hd_event.id);
|
|
res.setHeader('Content-Type', 'application/json');
|
|
sendEmailHolidayDropNotify(hd_event.extendedProps.employeeName,hd_event.extendedProps.employeeEmail,hd,hdOld)
|
|
res.status(200).send({'response':'OK','message':'Sikeres módosítás!'});
|
|
|
|
}
|
|
else
|
|
{
|
|
console.log('Holiday Failed to Update! '+hd_event.id);
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send({'response':'Fail','message':'Sikertelen Módosítás!'});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
// Szabadság törlése Fullcalendar
|
|
router.delete('/holiday_destroy/:uid/:hid',utils.ensureAuthenticated, async function(req,res){
|
|
console.log("Delete UID: "+req.params.uid);
|
|
console.log("Delete HID: "+req.params.hid);
|
|
const hd_event=req.body.event;
|
|
moment.locale('HU');
|
|
let startd = moment(req.body.event.start, 'YYYY.MM.DD'); //Pick any format
|
|
let endd = moment(req.body.event.end, 'YYYY.MM.DD');
|
|
let weekdayCounter = endd.diff(startd, 'days');
|
|
console.log('DIFF: '+weekdayCounter) // 1
|
|
|
|
const result= await Employee.updateOne({_id:req.params.uid},
|
|
{
|
|
$pull:{
|
|
'holidayData':{'_id':req.params.hid},
|
|
},
|
|
|
|
})
|
|
if (result.ok){
|
|
const r=await Employee.updateOne({_id:req.params.uid},
|
|
{
|
|
$inc: {'vacationUsed': -weekdayCounter },
|
|
})
|
|
if (r.ok)
|
|
{
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send({'response':'OK','message':'A szabadság sikeresen törölve!\n'+weekdayCounter+' nap jóváírva.'});
|
|
}
|
|
else
|
|
{
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send({'response':'Fail','message':'Sikertelen művelet!'});
|
|
}
|
|
}else
|
|
{
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send({'response':'Fail','message':'Sikertelen művelet!'});
|
|
}
|
|
//})
|
|
|
|
})
|
|
|
|
// Szabadság törlése
|
|
/*
|
|
router.delete('/holidays_delete/:uid/:hid',utils.ensureAuthenticated,function(req,res){
|
|
console.log("Delete UID: "+req.params.uid);
|
|
console.log("Delete HID: "+req.params.hid);
|
|
Employee.updateOne({_id:req.params.uid},
|
|
{
|
|
$pull:{
|
|
'holidayData':{'_id':req.params.hid},
|
|
}
|
|
},function(err){
|
|
if (err){
|
|
res.send('A törlés sikertelen!');
|
|
}else
|
|
{
|
|
res.send('A művelet sikeres!');
|
|
}
|
|
})
|
|
|
|
})*/
|
|
// Szabadság kiadás full calendar
|
|
router.post('/holidays_byperson_fc/:id', utils.ensureAuthenticated,function(req,res){
|
|
console.log(req.params.id);
|
|
console.log(req.body);
|
|
moment.locale('HU');
|
|
let startd = moment(req.body.sField, 'DD.MM.YYYY'); //Pick any format
|
|
let endd = moment(req.body.eField, 'DD.MM.YYYY');
|
|
let weekdayCounter = 0;
|
|
|
|
while (startd <= endd) {
|
|
console.log(startd.format('ddd'));
|
|
weekdayCounter++; //add 1 to your counter if its not a weekend day
|
|
startd = moment(startd, 'DD.MM.YYYY').add(1, 'days'); //increment by one day
|
|
}
|
|
console.log("Hétköznapok",weekdayCounter); //display your total elapsed weekdays in the console!
|
|
|
|
let hd ={
|
|
start_date: req.body.sField,
|
|
end_date: req.body.eField,
|
|
duration: weekdayCounter,
|
|
};
|
|
//hd.id=hd._id;
|
|
Employee.findByIdAndUpdate(req.params.id,{ $inc: {'vacationUsed': weekdayCounter },$push: {holidayData:hd}},function(error,success){
|
|
if (error) {
|
|
console.log(error);
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send({'response':'Fail','message':'Sikertelen művelet!'});
|
|
} else {
|
|
console.log(success);
|
|
sendEmailHolidayNotify(success.name,success.email,hd);
|
|
//res.redirect('/employee/holidays_byperson/'+req.params.id);
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send({'response':'OK','message':'A szabadság sikeresen kiírva!'});
|
|
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
// Szabadság kiadás régi
|
|
router.post('/holidays_byperson/:id', utils.ensureAuthenticated,function(req,res){
|
|
console.log(req.params.id);
|
|
console.log(req.body);
|
|
moment.locale('HU');
|
|
let startd = moment(req.body.sField, 'DD.MM.YYYY'); //Pick any format
|
|
let endd = moment(req.body.eField, 'DD.MM.YYYY');
|
|
let weekdayCounter = 0;
|
|
|
|
while (startd <= endd) {
|
|
console.log(startd.format('ddd'));
|
|
// if (startd.format('ddd') !== 'szo' && startd.format('ddd') !== 'vas'){
|
|
weekdayCounter++; //add 1 to your counter if its not a weekend day
|
|
//}
|
|
startd = moment(startd, 'DD.MM.YYYY').add(1, 'days'); //increment by one day
|
|
}
|
|
console.log("Hétköznapok",weekdayCounter); //display your total elapsed weekdays in the console!
|
|
|
|
let hd ={
|
|
start_date: req.body.sField,
|
|
end_date: req.body.eField,
|
|
|
|
duration: weekdayCounter,
|
|
|
|
};
|
|
//hd.id=hd._id;
|
|
Employee.findByIdAndUpdate(req.params.id,{ $inc: {'vacationUsed': weekdayCounter },$push: {holidayData:hd}},function(error,success){
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
console.log(success);
|
|
sendEmailHolidayNotify(success.name,success.email,hd);
|
|
res.redirect('/employee/holidays_byperson/'+req.params.id);
|
|
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
// Holiday Gantt feltöltés
|
|
router.get("/data", function(req, res){
|
|
console.log('GANTT');
|
|
|
|
var data3;//=[];
|
|
var tasks=[];
|
|
|
|
// Munkavállalók betöltése
|
|
Employee.find({},function(err, data){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
}
|
|
else
|
|
{
|
|
|
|
var i=0;
|
|
data.forEach(element =>{
|
|
if (element.holidayData.length)
|
|
{
|
|
//eidx=element.holidayData[0]._id;
|
|
//var i=0;
|
|
element.holidayData.forEach(hd=>{
|
|
|
|
tasks.push({id:element._id,text:element.name,start_date:hd.start_date,end_date:hd.end_date,duration:hd.duration});
|
|
})
|
|
i++;
|
|
}
|
|
})
|
|
|
|
var data = [
|
|
|
|
{id:1, text:"Jacica", start_date:"22-09-2020",end_date:"02-10-2020", color:"red"},
|
|
{id:2, text:"Task #1", start_date:"02-09-2020",end_date:"12-09-2020", color:"blue"},
|
|
{id:3, text:"Task #2", start_date:"11-05-2020",end_date:"10-05-2020", color:"green"}
|
|
|
|
];
|
|
|
|
data.forEach(element=>{
|
|
var s=new Date(moment(element.start_date,'DD-MM-YYYY'));
|
|
var e=new Date(moment(element.end_date,'DD-MM-YYYY'));
|
|
element.start_date=s;
|
|
element.end_date=e;
|
|
})
|
|
console.log(data);
|
|
res.send(data);
|
|
}
|
|
})
|
|
|
|
});
|
|
|
|
// GANTT kiszolgáló API
|
|
router.put("/api/task/:id",function(req,res){
|
|
var sid=req.body_id;//.req.params.id;
|
|
Holidays.findByIdAndUpdate(sid,req.body,function(err){//{$set:{'ganttData':req.body}},function(err){
|
|
console.log('Mire való!');
|
|
if (err)
|
|
{
|
|
console.log("DB ERROR");
|
|
}
|
|
else
|
|
{
|
|
res.status(200).end();
|
|
}
|
|
})
|
|
|
|
|
|
})
|
|
router.all(/api/,function(req,res,next){
|
|
console.log(`\n$(req.method} ${req.url} --> ${JSON.stringify(req.body,'\t',2)}`);
|
|
console.log (req.method);
|
|
if (req.method==='POST'){
|
|
// Task rögzítése
|
|
//let holiday=new Holidays();
|
|
let hd ={ id: '0',
|
|
|
|
text: req.body.text,
|
|
start_date: req.body.start_date,
|
|
end_date: req.body.end_date,
|
|
parent: req.body.parent,
|
|
duration: req.body.duration,
|
|
progress: req.body.progress,
|
|
render: 'Split'};
|
|
//hd.id=hd._id;
|
|
Employee.findByIdAndUpdate(req.body.employee,{$push: {holidayData:hd}},function(error,success){
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
console.log(success);
|
|
}
|
|
});
|
|
|
|
//holiday.employee_id=req.body.employee;
|
|
//Ha még nincs ilyen
|
|
/*if (req.body.parent==='0')
|
|
{
|
|
holiday.id=req.body.employee;
|
|
holiday.render='split';
|
|
holiday.parent='0';
|
|
}
|
|
else
|
|
{
|
|
holiday.parent=req.body.parent;//req.body.employee;
|
|
holiday.id=holiday._id;//req.body.employee;
|
|
}
|
|
holiday.text='Valami';
|
|
holiday.start_date=req.body.start_date;
|
|
holiday.end_date=req.body.end_date;
|
|
|
|
holiday.duration= 1;
|
|
holiday.progress=0;
|
|
holiday.save(function(err){
|
|
if (err)
|
|
{
|
|
console.log('DB error: Holidays');
|
|
}
|
|
else
|
|
{
|
|
res.status(200).end();
|
|
}
|
|
})*/
|
|
}
|
|
res.status(200).end();
|
|
})
|
|
|
|
router.post('/holiday_add', utils.ensureAuthenticated,function(req,res){
|
|
|
|
});
|
|
|
|
// Új Munkavállaló
|
|
router.get('/add', utils.ensureAuthenticated,function(req,res){
|
|
|
|
|
|
var password = generator.generate({
|
|
length: 10,
|
|
numbers: true,
|
|
symbols: true,
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
//employee.password=hash;
|
|
Employee.find({}, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
res.send('Hiba történt az oldal betöltése során. ');
|
|
}
|
|
else
|
|
{
|
|
|
|
res.render('employee_add', {
|
|
title: 'Új munkavállaló',
|
|
employees: employee,
|
|
user:req.user,
|
|
newPwd:password,
|
|
});
|
|
}
|
|
});
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
function isUsernameTaken(username) {
|
|
return Employee.count({'email': username })
|
|
.then((count) => {
|
|
if (count > 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
|
|
function isRFIDTaken(rfid) {
|
|
return Employee.count({'accessCode': rfid })
|
|
.then((count) => {
|
|
if (count > 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
// Új munkavállaló mentése
|
|
router.post('/add',utils.ensureAuthenticated,function(req,res){
|
|
|
|
req.checkBody('Name','Munkavállaló megnevezése kötelező!').notEmpty();
|
|
req.checkBody('Address','Cím megadása kötelező!').notEmpty();
|
|
req.checkBody('rfid','RFID azonosító megadása kötelező!').notEmpty();
|
|
req.checkBody('vacationYear','Éves szabadság megadása kötelező!').notEmpty();
|
|
req.checkBody('vacationUsed','Kiadott szabadság megadása kötelező!').notEmpty();
|
|
req.checkBody('email', 'Email megadása kötelező!').notEmpty();
|
|
req.checkBody('email', 'Nem valós email cím!').isEmail();
|
|
req.checkBody('password', 'Jelszó megadása kötelező!').notEmpty();
|
|
req.checkBody('password2', 'Jelszavak nem egyeznek!').equals(req.body.password);
|
|
//req.checkBody('flagStudent','hahó').equals('BE').equals(req.body.flagSubcontractor);
|
|
// Get errors
|
|
let errors = req.validationErrors();
|
|
|
|
if(errors)
|
|
{
|
|
res.render('employee_add', {
|
|
title: 'Új munkavállaló',
|
|
|
|
error:errors,
|
|
user:req.user,
|
|
})
|
|
} else {
|
|
|
|
|
|
let employee=new Employee();
|
|
var visiblePassword=req.body.password;
|
|
employee.name=req.body.Name;
|
|
employee.shortName=req.body.shortName;
|
|
employee.author=req.user.id;
|
|
employee.accessCode=req.body.rfid;
|
|
employee.address=req.body.Address;
|
|
employee.vacationYear=req.body.vacationYear;
|
|
employee.vacationUsed=req.body.vacationUsed;
|
|
employee.password=req.body.password;
|
|
employee.email=req.body.email;
|
|
employee.apiKey='-';
|
|
employee.uuid='-';
|
|
mobilePortalAccessEnabled=false;
|
|
employee.isForeman=false;
|
|
employee.isStudent=req.body.flagStudent;
|
|
if (typeof req.body.flagStudent === 'undefined')
|
|
employee.isStudent=false;
|
|
employee.konyvelesre=req.body.flagKonyveles;
|
|
employee.isSubcontractor=req.body.flagSubContractor;
|
|
if (typeof req.body.flagSubContractor === 'undefined')
|
|
employee.isSubcontractor=false;
|
|
if (typeof req.body.flagKonyveles === 'undefined')
|
|
employee.konyvelesre=null;
|
|
employee.auth= 'Test',
|
|
bcrypt.genSalt(10, function(err, salt){
|
|
bcrypt.hash(employee.password, salt, function(err, hash){
|
|
if(err){
|
|
console.log(err);
|
|
}
|
|
|
|
employee.password=hash;
|
|
//employee.workingtimeId='0'
|
|
isUsernameTaken(employee.email)
|
|
.then((isTaken) => {
|
|
if (isTaken)
|
|
{
|
|
req.flash('danger','Ez a felhasználónév már foglalt!');
|
|
res.render('employee_add', {
|
|
title: 'Új munkavállaló',
|
|
|
|
error:errors,
|
|
user:req.user,
|
|
})
|
|
}
|
|
else
|
|
{
|
|
isRFIDTaken(employee.accessCode)
|
|
.then((isTaken) => {
|
|
if (isTaken)
|
|
{
|
|
req.flash('danger','Ez az RFID azonisító már foglalt!');
|
|
res.render('employee_add', {
|
|
title: 'Új munkavállaló',
|
|
|
|
error:errors,
|
|
user:req.user,
|
|
})
|
|
}
|
|
else
|
|
{
|
|
employee.save(function(err){
|
|
if(err){
|
|
console.log(err);
|
|
return;
|
|
}else{
|
|
req.flash('success','Munkavállaló sikeresen felvéve');
|
|
sendEmailRegisterNotify(employee,visiblePassword);
|
|
res.redirect('/employee/list');
|
|
}
|
|
});
|
|
}
|
|
})
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|
|
// Munkavállaló szerkesztése
|
|
router.get('/edit/:id', utils.ensureAuthenticated,function(req,res){
|
|
Employee.findById(req.params.id, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
res.send('Hiba történt az oldal betöltése során. ');
|
|
}
|
|
else
|
|
{
|
|
res.render('employee_edit', {
|
|
title: 'Munkavállalói adatok módosítása',
|
|
employee: employee,
|
|
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// Meglévő munkavállaló mentése
|
|
router.post('/edit/:id', utils.ensureAuthenticated,function(req,res){
|
|
req.checkBody('Name','Munkavállaló megnevezése kötelező!').notEmpty();
|
|
req.checkBody('Address','Cím megadása kötelező!').notEmpty();
|
|
req.checkBody('rfid','RFID azonosító megadása kötelező!').notEmpty();
|
|
req.checkBody('vacationYear','Éves szabadság megadása kötelező!').notEmpty();
|
|
req.checkBody('vacationUsed','Kiadott szabadság megadása kötelező!').notEmpty();
|
|
// Get errors
|
|
let errors = req.validationErrors();
|
|
|
|
if(errors)
|
|
{
|
|
res.render('employee_edit', {
|
|
title: 'Munkavállalói adatok módosítása',
|
|
user:req.user,
|
|
errors:errors
|
|
})
|
|
} else {
|
|
let employee={};
|
|
|
|
employee.name=req.body.Name;
|
|
employee.shortName=req.body.shortName;
|
|
employee.author=req.user.id;
|
|
employee.email=req.body.email;
|
|
employee.accessCode=req.body.rfid;
|
|
employee.address=req.body.Address;
|
|
employee.vacationYear=req.body.vacationYear;
|
|
employee.vacationUsed=req.body.vacationUsed;
|
|
employee.konyvelesre=req.body.flagKonyveles;
|
|
employee.mobilePortalAccessEnabled=Boolean(req.body.mobilePortalAccessEnabled);
|
|
employee.isSubcontractor=req.body.flagSubContractor;
|
|
employee.isStudent=req.body.flagStudent;
|
|
employee.isForeman=Boolean(req.body.flagIsForeman);
|
|
employee.emailNotifyFlags={arriving:Boolean(req.body.flagArrive),
|
|
getaway:Boolean(req.body.flagGetaway),
|
|
monthlySummary:Boolean(req.body.flagMonthlySum),
|
|
holiday:Boolean(req.body.flagHoliday)};
|
|
let query = {_id:req.params.id}
|
|
Employee.updateOne(query,employee,function(err){
|
|
if(err){
|
|
console.log(err);
|
|
return;
|
|
}else{
|
|
req.flash('success','Munkavállalói adatok sikeresen módosítva');
|
|
res.redirect('/employee/list');
|
|
/*res.render('employee_list', {
|
|
title: 'Munkavállalók',
|
|
employee: employee,
|
|
user:req.user
|
|
});*/
|
|
}
|
|
});
|
|
|
|
}
|
|
});
|
|
|
|
// Munkavállalók listázása
|
|
router.get('/list', utils.ensureAuthenticated, function(req, res) {
|
|
var admin=false;
|
|
//proba();
|
|
Employee.find({} ,function(err, employees){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
}
|
|
else {
|
|
// lastId=articles.workNumber;
|
|
res.render('employee_list', {
|
|
title: 'Munkavállalók',
|
|
employees: employees,
|
|
|
|
// articles: workSign
|
|
});
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
// Munkaidő lekérdezés
|
|
function getWorkTimeList_old(employeeId,mindate,callback)
|
|
{
|
|
var date = new Date();
|
|
var query={};
|
|
|
|
// Ehavi esedékes
|
|
|
|
var title="Tárgyhavi esedékes bejövő számlák"
|
|
var firstDay= moment(mindate,"YYYY.MM").startOf('month').format("YYYY.MM.DD");
|
|
var lastDay = moment(mindate,"YYYY.MM").endOf('month').format("YYYY.MM.DD");
|
|
var weekendDays=[];
|
|
var weekends=0;
|
|
query={$and:[{'state':'ENDED','date': {$gte : firstDay,$lt: lastDay},'employeeId': employeeId}]};
|
|
|
|
|
|
WorkingTime.find(query,null,function(err, wt){
|
|
if (err)
|
|
{
|
|
callback(err);
|
|
}
|
|
else {
|
|
var worktime=0;
|
|
|
|
|
|
|
|
wt.forEach(element => {
|
|
var day = moment(element.date,'YYYY.MM.DD.').day();
|
|
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
|
|
if (isWeekend)
|
|
{
|
|
// Ha hétvége
|
|
if (!contains.call(weekendDays,element.date))
|
|
{
|
|
weekendDays.push(element.date);
|
|
}
|
|
}
|
|
|
|
worktime+=element.workHours;
|
|
var day = moment(element.date,'YYYY.MM.DD.').day();
|
|
});
|
|
weekends=weekendDays.length;
|
|
callback(null,worktime,weekends,title);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Munkaidő lekérdezés
|
|
function getWorkTimeList_old2(employeeId,mindate,callback)
|
|
{
|
|
var date = new Date();
|
|
var query={};
|
|
|
|
// Ehavi esedékes
|
|
|
|
var title="Tárgyhavi esedékes bejövő számlák"
|
|
var firstDay= moment(mindate,"YYYY.MM").startOf('month').format("YYYY.MM.DD");
|
|
var lastDay = moment(mindate,"YYYY.MM").endOf('month').format("YYYY.MM.DD");
|
|
var weekendDays=[];
|
|
var weekends=0;
|
|
query={$and:[{'state':'ENDED','date': {$gte : firstDay,$lt: lastDay},'employeeId': employeeId}]};
|
|
|
|
|
|
WorkingTime.find(query,null,function(err, wt){
|
|
if (err)
|
|
{
|
|
callback(err);
|
|
}
|
|
else {
|
|
var worktime=0;
|
|
|
|
|
|
/* wt.forEach(element => {
|
|
var day = moment(element.date,'YYYY.MM.DD.').day();
|
|
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
|
|
if (isWeekend)
|
|
{
|
|
// Ha hétvége
|
|
if (!contains.call(weekendDays,element.date))
|
|
{
|
|
weekendDays.push(element.date);
|
|
}
|
|
}
|
|
|
|
worktime+=element.workHours;
|
|
var day = moment(element.date,'YYYY.MM.DD.').day();
|
|
});*/
|
|
|
|
var workDays=[];
|
|
var overTime=0;
|
|
var monthWorkHours=0;
|
|
var otToday= 0;
|
|
wt.forEach(function(element)
|
|
{
|
|
var hoursToday=0;
|
|
var day = moment(element.date,'YYYY.MM.DD.').day();
|
|
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
|
|
|
|
if (isWeekend)
|
|
{
|
|
// Ha hétvége
|
|
/* if (!contains.call(weekendDays,wt.date))
|
|
{
|
|
weekendDays.push(wt.date);
|
|
}*/
|
|
}
|
|
else
|
|
{
|
|
/* if (element.workHours>540)
|
|
{ // A túlórát nem számoljuk a munkaidő közé
|
|
|
|
monthWorkHours+= 540;
|
|
}
|
|
else
|
|
{
|
|
monthWorkHours+= element.workHours;
|
|
}*/
|
|
// Ha hétköznap
|
|
var wdays=workDays.find(e=>e.date===element.date);
|
|
if (wdays)
|
|
{ // Már van ilyen nap
|
|
|
|
//wdays.startStop.push({start:element.timeArrive,stop:element.timeGetaway});
|
|
//wdays.stop.push(element.timeGetaway);
|
|
if (wdays.hours>540){
|
|
wdays.overtime+=wdays.hours-540;
|
|
overTime+=wdays.hours-540;
|
|
wdays.hours+=600;
|
|
monthWorkHours+= 10;
|
|
}
|
|
else
|
|
{
|
|
wdays.hours+=element.workHours;
|
|
monthWorkHours+= element.workHours;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
otToday=0;
|
|
// Még nincs ilyen nap, hozzáadjuk
|
|
|
|
if (element.workHours>540)
|
|
{
|
|
otToday=(element.workHours-540);
|
|
overTime+=otToday;
|
|
hoursToday=540;
|
|
monthWorkHours+= 540;
|
|
}
|
|
else
|
|
{
|
|
hoursToday=element.workHours;
|
|
monthWorkHours+= element.workHours;
|
|
}
|
|
|
|
workDays.push({date:element.date,location:element.location,notes:element.notes,startStop:[{start:element.timeArrive,stop:element.timeGetaway}],hours:hoursToday,overtime:otToday});
|
|
}
|
|
|
|
}
|
|
})
|
|
//console.log('All done!');
|
|
weekends=weekendDays.length;
|
|
callback(null,monthWorkHours,weekends,title);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Munkaidő lekérdezés
|
|
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)
|
|
{
|
|
|
|
getWorkReportById(employee_id,mindate).then(workReport=>{ // WorkReport Lekérése.
|
|
getWorkTimeListById(employee_id,mindate,function(err,wt){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
callback(err);
|
|
}
|
|
else {
|
|
var workDays=[];
|
|
wt.forEach(function(element)
|
|
{
|
|
var hoursToday=0;
|
|
var drName='';
|
|
var dwr=''
|
|
var day = moment(element.date,'YYYY.MM.DD.').day();
|
|
var drDate = moment(element.date,'YYYY.MM.DD.').format('YYYY.MM.DD');
|
|
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
|
|
var latS=element.latitudeS;
|
|
var lonS=element.longitudeS;
|
|
var latE=element.latitudeE;
|
|
var lonE=element.longitudeE;
|
|
//var cNotes="";
|
|
//var notes="";
|
|
|
|
var wr={}
|
|
if (workReport.length){
|
|
// wr=workReport.find(wrelement => wrelement.date===new Date(drDate))
|
|
workReport.forEach(function(wrelement){
|
|
///console.log(`Itemdate: ${wrelement.date} CurrDate: ${new Date(drDate)}`)
|
|
if (new Date(wrelement.date).getTime()===new Date(drDate).getTime())
|
|
{
|
|
// console.log("Egyenlő!\n")
|
|
wr=wrelement;
|
|
}
|
|
})
|
|
|
|
if (wr!={})
|
|
console.log(wr.date)
|
|
}
|
|
var dr=wt.rd.filter(element => element.date==drDate)
|
|
if (typeof element.latitudeS==='undefined') latS='N/A'
|
|
if (typeof element.longitudeS==='undefined') lonS='N/A'
|
|
if (typeof element.latitudeE==='undefined') latE='N/A'
|
|
if (typeof element.longitudeE==='undefined') lonE='N/A'
|
|
|
|
// Ha hétköznap
|
|
var wdays=workDays.find(e=>e.date===element.date);
|
|
if (wdays)
|
|
{ // Már van ilyen nap
|
|
|
|
wdays.startStop.push({id:element._id,start:element.timeArrive,stop:element.timeGetaway});
|
|
wdays.locations.push({
|
|
arriveLoc:element.location,
|
|
getawayLoc:element.locationStop,
|
|
arriveCoords:{lat:latS,lon:lonS},
|
|
getavayCoords:{lat:latE,lon:lonE}
|
|
});
|
|
wdays.notes.push({userNote:element.notes, companyNote: element.company_notes});
|
|
|
|
wdays.fullHours+=element.workHours;
|
|
}
|
|
else
|
|
{
|
|
|
|
if (typeof wr==='undefined')
|
|
{
|
|
dwr='';
|
|
}
|
|
else
|
|
{
|
|
dwr=wr;
|
|
}
|
|
if (typeof dr==='undefined')
|
|
{
|
|
drName='';
|
|
}
|
|
else
|
|
{
|
|
drName=dr;
|
|
}
|
|
// Még nincs ilyen nap, hozzáadjuk
|
|
workDays.push({
|
|
date:element.date,
|
|
isMunkaszunet:false,
|
|
isHoliday:false,
|
|
isSickpay:false,
|
|
isWeekend:isWeekend,
|
|
state:element.state,
|
|
location:element.location,
|
|
notes:[{
|
|
userNote: element.notes,
|
|
companyNote: element.company_notes ?? "-"
|
|
}],
|
|
companyNotes: element.company_notes ?? "",
|
|
locations:[{
|
|
arriveLoc:element.location,
|
|
getawayLoc:element.locationStop,
|
|
arriveCoords:{lat:element.latitudeS,lon:element.longitudeS},
|
|
getavayCoords:{lat:element.latitudeE,lon:element.longitudeE}
|
|
}],
|
|
startStop:[{
|
|
id:element._id,
|
|
start:element.timeArrive,
|
|
stop:element.timeGetaway
|
|
}],
|
|
fullHours:element.workHours,
|
|
hours:0,
|
|
overTime:0,
|
|
dailyReport:drName,
|
|
workReport:dwr
|
|
});
|
|
}
|
|
|
|
|
|
})
|
|
callback(null,workDays);
|
|
}
|
|
})})
|
|
|
|
}
|
|
|
|
// Munkaidő kiolvasás ID alapján
|
|
router.get('/getWorkingTimeById/:id',utils.ensureAuthenticated,function(req, res){
|
|
|
|
WorkingTime.findById(req.params.id,function(err,wt){
|
|
if (err)
|
|
{
|
|
console.log('workingTime Error');
|
|
|
|
}
|
|
else
|
|
{
|
|
res.send(wt);
|
|
}
|
|
|
|
})
|
|
|
|
});
|
|
|
|
// Munkaidő módosítás ID alapján
|
|
router.post('/setWorkingTimeById/:id',utils.ensureAuthenticated,function(req, res){
|
|
var id=1;
|
|
var a = moment(req.body.dtPickerArrive,'YYYY-MM-DDTHH:mm');
|
|
var b = moment(req.body.dtPickerGetaway,'YYYY-MM-DDTHH:mm');
|
|
|
|
var workhours = b.diff(a, 'minutes') // =1
|
|
WorkingTime.findOneAndUpdate({'_id':req.body.idField,'employeeId':req.params.id},{
|
|
'location':req.body.locStartField,
|
|
'locationStop':req.body.locStopField,
|
|
'latitudeS':req.body.latStartField,
|
|
'longitudeS':req.body.lonStartField,
|
|
'latitudeE':req.body.latStopField,
|
|
'longitudeE':req.body.lonStopField,
|
|
'timeArrive':moment(req.body.dtPickerArrive,'YYYY-MM-DDTHH:mm').format('YYYY.MM.DD. HH:mm'),
|
|
'timeGetaway':moment(req.body.dtPickerGetaway,'YYYY-MM-DDTHH:mm').format('YYYY.MM.DD. HH:mm'),
|
|
'date':moment(req.body.dtPickerArrive,'YYYY-MM-DDTHH:mm').format('YYYY.MM.DD.'),
|
|
'day':moment(req.body.dtPickerArrive,'YYYY-MM-DDTHH:mm').format('dddd'),
|
|
'workHours':workhours,
|
|
'company_notes':req.body.companyNotes
|
|
},
|
|
function(err,result){
|
|
if (err)
|
|
{
|
|
req.flash('error','Módosítás sikertelen');
|
|
res.redirect('/employee/detailstemp/'+req.params.id);
|
|
}
|
|
req.flash('error','Módosításva: '+result);
|
|
res.redirect('/employee/detailstemp/'+req.params.id);
|
|
})
|
|
|
|
});
|
|
|
|
// Munkaidő törlése
|
|
|
|
router.delete('/deleteWorktime/:id',utils.ensureAuthenticated, function(req,res){
|
|
var id = req.params.id;
|
|
var deletedWorkingTime={};
|
|
// Megnézzük ez e az utolsó bejegyzés
|
|
Employee.findOne({workingtimeId: id},function(err,element){
|
|
if (err){
|
|
// Valami hiba van
|
|
console.log('Error: /deleteWorktime/:id');
|
|
}
|
|
else
|
|
{
|
|
if (element ==typeof(undefined) || element==null){
|
|
// Nem ez az utolsó békén hagyjuk.
|
|
console.log('Deleted Key: '+id+' ---> Nincs módosítás.');
|
|
WorkingTime.findById(id,function(err,result){
|
|
if (result){
|
|
deletedWorkingTime=result;
|
|
Employee.findById(result.employeeId,function(err,empelement){
|
|
if (err){
|
|
console.log(err);
|
|
|
|
}
|
|
else
|
|
{
|
|
if (empelement)
|
|
{
|
|
sendEmailDeletedWorkingTimeNotify(empelement,deletedWorkingTime);
|
|
}
|
|
}
|
|
})
|
|
|
|
}
|
|
})
|
|
// Mostmár törölhetjük a bejegyzést
|
|
WorkingTime.findOneAndRemove({_id: id}, function(err){
|
|
if(err) {
|
|
//console.log('Picsa >>'+err);
|
|
return res.status(500).send();
|
|
}
|
|
else {
|
|
|
|
req.flash('success','Bejegyzés sikeresen törölve!');
|
|
res.status(200).send();
|
|
}
|
|
});
|
|
}else
|
|
{
|
|
// Mostmár törölhetjük a bejegyzést
|
|
WorkingTime.findById(id,function(err,result){
|
|
deletedWorkingTime=result;
|
|
sendEmailDeletedWorkingTimeNotify(element,deletedWorkingTime);
|
|
})
|
|
WorkingTime.findOneAndRemove({_id: id}, function(err){
|
|
if(err) {
|
|
//console.log('Picsa >>'+err);
|
|
return res.status(500).send();
|
|
}
|
|
else {
|
|
|
|
|
|
// Ez az utolsó, törölve lesz.
|
|
WorkingTime.find({"employeeId" : element._id}).sort({'_id':-1}).limit(1).exec(function(err,lastWt){
|
|
if (err){
|
|
console.log('Error in find lastwt ');
|
|
return res.status(500).send();
|
|
}
|
|
else
|
|
{
|
|
// Megvan az utolsó, ezt állítjuk vissza.
|
|
if (lastWt.length>0)
|
|
{
|
|
var lastId=lastWt.length-1;
|
|
var update={};
|
|
update.workingtimeId=lastWt[lastId]._id;
|
|
Employee.findOneAndUpdate({'_id':element._id},update,function(err){
|
|
//element.save(function(err){
|
|
if (err){
|
|
console.log('Error in delete and update last worktime.');
|
|
}
|
|
else
|
|
{
|
|
// Sikeres mentés
|
|
console.log('Deleted Key: '+element.name+' ---> '+element.id+' Least key is: '+lastWt[lastId]._id+' Módosítva.');
|
|
req.flash('success','Bejegyzés sikeresen törölve!');
|
|
res.status(200).send();
|
|
}
|
|
})
|
|
}
|
|
else
|
|
{
|
|
console.log('Valami nem fasza a munkaidő törlése során.');
|
|
return res.status(500).send();
|
|
}
|
|
}
|
|
})
|
|
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
|
|
}
|
|
})
|
|
|
|
});
|
|
// workReport By User lekérdezés
|
|
async function getWorkReportById(employeeId,mindate){
|
|
|
|
var dr_firstDay= moment(mindate,"YYYY.MM").startOf('month').toDate();
|
|
var dr_lastDay = moment(mindate,"YYYY.MM").endOf('month').toDate();
|
|
|
|
const result= await WorkReport.aggregate([
|
|
{$match: {"date":{$gte: dr_firstDay, $lte: dr_lastDay}}},
|
|
//{$match: {"workId": mongo.ObjectId("6715f6ca6908a157c7d1f468")}},
|
|
{
|
|
|
|
$unwind: "$workFlow"
|
|
|
|
},
|
|
{ "$unwind": "$workFlow.employeeList" },
|
|
{$match: {"workFlow.employeeList.employeeId": mongo.ObjectId(employeeId)}},
|
|
|
|
{$group: { _id:{
|
|
'wf': '$employeeList.workFlow',
|
|
'wid': '$_id',
|
|
'name': '$workFlow.employeeList.name',
|
|
},
|
|
'id':{$first: '$_id'},
|
|
'date':{$first:'$date'},
|
|
'name': {$first:'$workFlow.employeeList.name'},
|
|
'wf':{$first: '$workFlow.Title'},
|
|
'wt':{$first: '$workTitle'}
|
|
//'nm':{$push: {name:'$employee.name', wf:'$employeeList.workFlow'}}
|
|
},
|
|
},
|
|
{
|
|
// cleanup
|
|
$project: {
|
|
_id: false,
|
|
}
|
|
}
|
|
|
|
|
|
])
|
|
if (result.length){
|
|
return result
|
|
}
|
|
else
|
|
{
|
|
return []
|
|
}
|
|
|
|
|
|
|
|
}
|
|
// 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.");
|
|
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;
|
|
// wt.wr=workReport // WorkReport Lekérése.;
|
|
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 workReport='';
|
|
var wrShift='';
|
|
var day = moment(element.date,'YYYY.MM.DD.').day();
|
|
var notes="";
|
|
|
|
if (Object.keys(element.workReport).length!=0){
|
|
workReport=element.workReport.wt+' '+element.workReport.wf;
|
|
wrShift='\r\n'
|
|
}
|
|
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
|
|
{
|
|
element.notes.forEach(note=>{
|
|
notes+=note.userNote+' '+note.companyNote
|
|
})
|
|
if (element.isWeekend)
|
|
{
|
|
// Hétvége
|
|
|
|
element.startStop.forEach(interval=>{
|
|
arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
|
|
if (interval.stop==='-')
|
|
{
|
|
getaways+='-\r\n';
|
|
}
|
|
else
|
|
{
|
|
getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
|
|
}
|
|
})
|
|
|
|
item.push([//{text:i, style:'tableData', alignment: 'right'},
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableDataWe'},
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableDataWe', alignment: 'right'},
|
|
//{text:element.expiryDate, italics: true, color: 'gray'},
|
|
{text:dreportList+workReport+"\r\n"+element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableDataWe', alignment: 'center'},
|
|
{text:drShift+wrShift+arrives, style:'tableDataWe', alignment: 'center'},
|
|
{text:drShift+wrShift+getaways, style:'tableDataWe', alignment: 'center'},
|
|
//{text:element.state, italics: true, color: 'gray'},
|
|
{text:drShift+wrShift+convertMinsToHrsMins(element.hours), style:'tableDataWe', alignment: 'center'},
|
|
{text:drShift+wrShift+convertMinsToHrsMins(element.overTime), style:'tableDataWe', alignment: 'center'},
|
|
|
|
//{text:element.notes, style:'tableDataWe', alignment: 'left'}]);
|
|
{text:drShift+wrShift+notes, style:'tableDataWe', alignment: 'left'}]);
|
|
}
|
|
else
|
|
{
|
|
// Hétköznap
|
|
element.startStop.forEach(interval=>{
|
|
arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
|
|
if (interval.stop==='-')
|
|
{
|
|
getaways+='-\r\n';
|
|
}
|
|
else
|
|
{
|
|
getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
|
|
}
|
|
|
|
})
|
|
element.locations.forEach(interval=>{
|
|
locs+=interval.arriveLoc+' - '+interval.getawayLoc+"\r\n";
|
|
})
|
|
item.push([//{text:i, style:'tableData', alignment: 'right'},
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableData'},
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableData', alignment: 'left'},
|
|
//{text:element.expiryDate, italics: true, color: 'gray'},
|
|
[{text:dreportList+workReport+"\r\n", style:'dailyReport'},{text:locs, style:'tableDataLoc', alignment: 'center'}],
|
|
//{text:element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableData', alignment: 'center'},
|
|
{text:drShift+wrShift+arrives, style:'tableData', alignment: 'center'},
|
|
{text:drShift+wrShift+getaways, style:'tableData', alignment: 'center'},
|
|
//{text:element.state, italics: true, color: 'gray'},
|
|
{text:drShift+wrShift+convertMinsToHrsMins(element.hours), style:'tableData', alignment: 'center'},
|
|
{text:drShift+wrShift+convertMinsToHrsMins(element.overTime), style:'tableData', alignment: 'center'},
|
|
|
|
//{text:element.notes, style:'tableData', alignment: 'left'}]);
|
|
{text:drShift+wrShift+notes, style:'tableDataWe', alignment: 'left'}]);
|
|
}
|
|
}//else
|
|
|
|
});
|
|
|
|
// playground requires you to assign document definition to a variable called dd
|
|
var bodySum=[];
|
|
var mszn="";
|
|
var eszn="";
|
|
if (msz.length)
|
|
{
|
|
bodySum=[
|
|
[{text: 'Megnevezés', style: 'tableHeader'}, {text: 'Normál', style: 'tableHeader', alignment: 'right'}, {text: 'Túlóra', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen', style: 'tableHeader', alignment: 'right'}, {text: 'Pótlék', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen Pótlékkal', style: 'tableHeader', alignment: 'right'}],
|
|
[{text: 'Munkaszüneti napokra elszámolt órák:'}, {text: convertMinsToHrsMins((msz.length*480)), alignment: 'right'},{text:''}, {text: convertMinsToHrsMins((msz.length*480)), alignment: 'right'},{text:'', alignment: 'right'},{text: convertMinsToHrsMins((msz.length*480)), alignment: 'right'}],
|
|
[{text: 'Szabadságra elszámolt órák:'}, {text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'}, {text: ''}, {text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'},{text: ''},{text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'}],
|
|
[{text: 'Munkanapok:'}, {text: convertMinsToHrsMins(month.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(month.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'},{text:'', alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'}],
|
|
[{text: 'Szombat:'}, {text: convertMinsToHrsMins(weekend.Saturday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.fullWorkHours), alignment: 'right'},{text:'50%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Saturday.fullWorkHours*1.5)), alignment: 'right'}],
|
|
[{text: 'Vasárnap:'}, {text: convertMinsToHrsMins(weekend.Sunday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.fullWorkHours), alignment: 'right'},{text:'100%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Sunday.fullWorkHours*2)), alignment: 'right'}],
|
|
[{text: 'Összesen:'},{text: convertMinsToHrsMins(weekend.Saturday.workHours+weekend.Sunday.workHours+month.workHours+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'},
|
|
{text: convertMinsToHrsMins(weekend.Saturday.overTime+weekend.Sunday.overTime+month.overTime), alignment: 'right'},
|
|
{text: convertMinsToHrsMins(month.fullWorkHours+weekend.Saturday.fullWorkHours+weekend.Sunday.fullWorkHours+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'},
|
|
{text:''},
|
|
{text: convertMinsToHrsMins(month.fullWorkHours+(weekend.Saturday.fullWorkHours*1.5)+(weekend.Sunday.fullWorkHours*2)+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'}]
|
|
];
|
|
mszn='Munkaszüneti napok: '+msz+'\n\n';
|
|
eszn='\n\nElszámolt szabadság: '+holidaysArray.length+' nap\n';
|
|
}else
|
|
{
|
|
bodySum=[
|
|
[{text: 'Megnevezés', style: 'tableHeader'}, {text: 'Normál', style: 'tableHeader', alignment: 'right'}, {text: 'Túlóra', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen', style: 'tableHeader', alignment: 'right'}, {text: 'Pótlék', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen Pótlékkal', style: 'tableHeader', alignment: 'right'}],
|
|
[{text: 'Szabadságra elszámolt órák:'}, {text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'}, {text: ''}, {text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'},{text: ''},{text: convertMinsToHrsMins((holidaysArray.length*480)), alignment: 'right'}],
|
|
[{text: 'Munkanapok:'}, {text: convertMinsToHrsMins(month.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(month.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'},{text:'', alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'}],
|
|
[{text: 'Szombat:'}, {text: convertMinsToHrsMins(weekend.Saturday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.fullWorkHours), alignment: 'right'},{text:'50%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Saturday.fullWorkHours*1.5)), alignment: 'right'}],
|
|
[{text: 'Vasárnap:'}, {text: convertMinsToHrsMins(weekend.Sunday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.fullWorkHours), alignment: 'right'},{text:'100%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Sunday.fullWorkHours*2)), alignment: 'right'}],
|
|
[{text: 'Összesen:'},{text: convertMinsToHrsMins(weekend.Saturday.workHours+weekend.Sunday.workHours+month.workHours+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'},
|
|
{text: convertMinsToHrsMins(weekend.Saturday.overTime+weekend.Sunday.overTime+month.overTime), alignment: 'right'},
|
|
{text: convertMinsToHrsMins(month.fullWorkHours+weekend.Saturday.fullWorkHours+weekend.Sunday.fullWorkHours+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'},
|
|
{text:''},
|
|
{text: convertMinsToHrsMins(month.fullWorkHours+(weekend.Saturday.fullWorkHours*1.5)+(weekend.Sunday.fullWorkHours*2)+(msz.length*480)+(holidaysArray.length*480)), alignment: 'right'}]
|
|
];
|
|
eszn='\n\nElszámolt szabadság: '+holidaysArray.length+' nap\n';
|
|
}
|
|
|
|
var dd = {
|
|
pageOrientation: 'landscape',
|
|
footer: function(currentPage, pageCount) { return {text: currentPage.toString() + ' / ' + pageCount, alignment: 'center'}},
|
|
//header: {text: 'Jelenléti ív '+employee.name, style: 'header'},
|
|
/*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'
|
|
},
|
|
tableDataLoc: {
|
|
bold: false,
|
|
fontSize: 8,
|
|
italics: true,
|
|
color: 'green'
|
|
},
|
|
tableDataWe: {
|
|
bold: false,
|
|
fontSize: 10,
|
|
italics: true,
|
|
fillColor: '#eeffee',
|
|
color: 'red'
|
|
},
|
|
tableDataHo: {
|
|
bold: false,
|
|
fontSize: 10,
|
|
italics: true,
|
|
fillColor: '#eeeeff',
|
|
color: 'red'
|
|
}
|
|
},
|
|
defaultStyle: {
|
|
// alignment: 'justify'
|
|
}
|
|
};
|
|
dd.content[1].table.body=item;
|
|
|
|
//pdf.createPdf(dd).open();
|
|
callback(null,dd);
|
|
// ...
|
|
|
|
|
|
}
|
|
|
|
// Nyomtatási kép generálás Alvállalkozó
|
|
function printPageContractor(employee,som,month,weekend,mindate,holidaysArray,callback)
|
|
{
|
|
var dt = new Date();
|
|
var item=[];
|
|
var i=1;
|
|
var drShift="";
|
|
// Munkaszüneti napok ellenőrzése és kijelzése
|
|
//var msz=getMunkaszunet(mindate);
|
|
moment.locale('hu');
|
|
|
|
|
|
if (som.length>0) ja = som.concat(holidaysArray);
|
|
else
|
|
ja=holidaysArray;
|
|
|
|
ja.sort(function(a, b) {
|
|
return moment(a.date,'YYYY.MM.DD') - moment(b.date,'YYYY.MM.DD');
|
|
});
|
|
|
|
|
|
item.push(['Dátum', {text:'Nap', alignment: 'right'}, {text:'Helyszín', alignment: 'center'}, {text:'Érkezés', alignment: 'center'}, {text:'Távozás', alignment: 'center'},{text:'Órák', alignment: 'center'},{text:'Túlóra', alignment: 'center'},'Megjegyzés']);
|
|
ja.forEach(element => {
|
|
var arrives="";
|
|
var getaways="";
|
|
var locs="";
|
|
var dreportList='';
|
|
var notes="";
|
|
var day = moment(element.date,'YYYY.MM.DD.').day();
|
|
if (element.dailyReport!='') drShift='\r\n'; else drShift='';
|
|
drShift='';
|
|
element.dailyReport.forEach(drelem=>{
|
|
dreportList+= drelem.name.substring(0,60) +'\r\n';
|
|
drShift+='\r\n';
|
|
})
|
|
if (element.isHoliday)
|
|
{
|
|
item.push([
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableDataHo'},
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableDataHo', alignment: 'right'},
|
|
//{text:element.expiryDate, italics: true, color: 'gray'},
|
|
{text:' --- ', style:'tableDataHo', alignment: 'center'},
|
|
{text:'--:--', style:'tableDataHo', alignment: 'center'},
|
|
{text:'--:--', style:'tableDataHo', alignment: 'center'},
|
|
//{text:element.state, italics: true, color: 'gray'},
|
|
{text:'--:--', style:'tableDataHo', alignment: 'center'},
|
|
{text:'--:--', style:'tableDataHo', alignment: 'center'},
|
|
|
|
{text:'Szabadság', style:'tableDataHo', alignment: 'left'}]);
|
|
}
|
|
else
|
|
{
|
|
element.notes.forEach(note=>{
|
|
notes+=note.userNote+' '+note.companyNote
|
|
})
|
|
if (element.isWeekend)
|
|
{
|
|
// Hétvége
|
|
|
|
element.startStop.forEach(interval=>{
|
|
arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
|
|
if (interval.stop==='-')
|
|
{
|
|
getaways+='-\r\n';
|
|
}
|
|
else
|
|
{
|
|
getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
|
|
}
|
|
})
|
|
item.push([//{text:i, style:'tableData', alignment: 'right'},
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableDataWe'},
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableDataWe', alignment: 'right'},
|
|
//{text:element.expiryDate, italics: true, color: 'gray'},
|
|
{text:dreportList+"\r\n"+element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableDataWe', alignment: 'center'},
|
|
{text:drShift+arrives, style:'tableDataWe', alignment: 'center'},
|
|
{text:drShift+getaways, style:'tableDataWe', alignment: 'center'},
|
|
//{text:element.state, italics: true, color: 'gray'},
|
|
{text:drShift+convertMinsToHrsMins(element.hours), style:'tableDataWe', alignment: 'center'},
|
|
{text:drShift+convertMinsToHrsMins(element.overTime), style:'tableDataWe', alignment: 'center'},
|
|
|
|
//{text:element.notes, style:'tableDataWe', alignment: 'left'}]);
|
|
{text:drShift+notes, style:'tableDataWe', alignment: 'left'}]);
|
|
}
|
|
else
|
|
{
|
|
// Hétköznap
|
|
element.startStop.forEach(interval=>{
|
|
arrives+=moment(interval.start,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
|
|
if (interval.stop==='-')
|
|
{
|
|
getaways+='-\r\n';
|
|
}
|
|
else
|
|
{
|
|
getaways+=moment(interval.stop,'YYYY.MM.DD. HH:mm').format('HH:mm')+"\r\n";
|
|
}
|
|
|
|
})
|
|
element.locations.forEach(interval=>{
|
|
locs+=interval.arriveLoc+' - '+interval.getawayLoc+"\r\n";
|
|
})
|
|
item.push([//{text:i, style:'tableData', alignment: 'right'},
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('DD'), style:'tableData'},
|
|
{text:moment(element.date,'YYYY.MM.DD. HH:mm').format('dddd'), style:'tableData', alignment: 'right'},
|
|
//{text:element.expiryDate, italics: true, color: 'gray'},
|
|
[{text:dreportList, style:'dailyReport'},{text:locs, style:'tableData', alignment: 'center'}],
|
|
//{text:element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableData', alignment: 'center'},
|
|
{text:drShift+arrives, style:'tableData', alignment: 'center'},
|
|
{text:drShift+getaways, style:'tableData', alignment: 'center'},
|
|
//{text:locs, style:'tableData', alignment: 'center'},
|
|
//{text:element.locations[0].arriveLoc+' - '+element.locations[0].getawayLoc, style:'tableData', alignment: 'center'},
|
|
// {text:arrives, style:'tableData', alignment: 'center'},
|
|
// {text:getaways, style:'tableData', alignment: 'center'},
|
|
//{text:element.state, italics: true, color: 'gray'},
|
|
{text:drShift+convertMinsToHrsMins(element.hours), style:'tableData', alignment: 'center'},
|
|
{text:drShift+convertMinsToHrsMins(element.overTime), style:'tableData', alignment: 'center'},
|
|
|
|
//{text:element.notes, style:'tableData', alignment: 'left'}]);
|
|
{text:drShift+notes, style:'tableDataWe', alignment: 'left'}]);
|
|
}
|
|
}
|
|
|
|
|
|
});
|
|
|
|
// playground requires you to assign document definition to a variable called dd
|
|
var bodySum=[];
|
|
|
|
|
|
bodySum=[
|
|
[{text: 'Megnevezés', style: 'tableHeader'}, {text: 'Normál', style: 'tableHeader', alignment: 'right'}, {text: 'Túlóra', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen', style: 'tableHeader', alignment: 'right'}],//, {text: 'Pótlék', style: 'tableHeader', alignment: 'right'}, {text: 'Összesen Pótlékkal', style: 'tableHeader', alignment: 'right'}],
|
|
[{text: 'Munkanapok:'}, {text: convertMinsToHrsMins(month.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(month.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'}],//{text:'', alignment: 'right'}, {text: convertMinsToHrsMins(month.fullWorkHours), alignment: 'right'}],
|
|
[{text: 'Szombat:'}, {text: convertMinsToHrsMins(weekend.Saturday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Saturday.fullWorkHours), alignment: 'right'}],//{text:'50%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Saturday.fullWorkHours*1.5)), alignment: 'right'}],
|
|
[{text: 'Vasárnap:'}, {text: convertMinsToHrsMins(weekend.Sunday.workHours), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.overTime), alignment: 'right'}, {text: convertMinsToHrsMins(weekend.Sunday.fullWorkHours), alignment: 'right'}],//{text:'100%', alignment: 'right'}, {text: convertMinsToHrsMins((weekend.Sunday.fullWorkHours*2)), alignment: 'right'}],
|
|
[{text: 'Összesen:'},{text: convertMinsToHrsMins(weekend.Saturday.workHours+weekend.Sunday.workHours+month.workHours), alignment: 'right'},
|
|
{text: convertMinsToHrsMins(weekend.Saturday.overTime+weekend.Sunday.overTime+month.overTime), alignment: 'right'},
|
|
{text: convertMinsToHrsMins(month.fullWorkHours+weekend.Saturday.fullWorkHours+weekend.Sunday.fullWorkHours), alignment: 'right'}]//,
|
|
/* {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(10, 'days').format('YYYY.MM');
|
|
console.log("Értesítő küldve: "+calcdate);
|
|
proba(calcdate);
|
|
req.flash('success','Generálva!');
|
|
res.redirect('/');
|
|
})
|
|
// Jelenléti ív összeállítása összes munkavállalóra
|
|
router.get('/WTALL',utils.ensureAuthenticated,function(req,res){
|
|
|
|
|
|
moment.locale('HU');
|
|
calcdate=moment().subtract(10, 'days').format('YYYY.MM');
|
|
console.log("Összesített Értesítő küldve: "+calcdate);
|
|
makeWorktimeAll(calcdate);
|
|
req.flash('success','Generálva!');
|
|
res.redirect('/');
|
|
})
|
|
|
|
function sleep(millis) {
|
|
return new Promise(function (resolve, reject) {
|
|
setTimeout(function () { resolve(); }, millis);
|
|
});
|
|
}
|
|
async function makeWorktimeAll(calcdate)
|
|
{
|
|
var num=0;
|
|
//'_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; |