498 lines
13 KiB
JavaScript
498 lines
13 KiB
JavaScript
const { Console } = require('console');
|
|
const { mongo } = require('mongoose');
|
|
const { Buffer } = require('buffer');
|
|
const uuidAPIKey = require('uuid-apikey');
|
|
const Moment = require('moment');
|
|
const MomentRange = require('moment-range');
|
|
const moment = MomentRange.extendMoment(Moment);
|
|
let Employee = require('../models/employee');
|
|
let WorkingTime = require('../models/workingtime');
|
|
let Work=require('../models/works');
|
|
let RfidDevice = require('../models/devices');
|
|
const { drawBackground } = require('pdfmake/src/textDecorator');
|
|
const passport = require('../config/passport');
|
|
|
|
// Aktuális QR kód lekérése
|
|
exports.apiGetQRCode=function(apiKey, callback)
|
|
{
|
|
Employee.findOne({'apiKey':apiKey}, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
var mpe=false;
|
|
if (employee.mobilePortalAccessEnabled==true) mpe=true;
|
|
callback(null,{'name':employee.name,'id':employee._id, 'qrCode':employee.qrCode});
|
|
}
|
|
else
|
|
callback(null,null);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Munkaidő Státusz lekérése
|
|
exports.apiGetWorkState=async function(apiKey, callback)
|
|
{
|
|
//const device=await DeviceRemote.findOne({imei:req.body.clientID1,ccid:req.body.clientID2})//,
|
|
const employee= await Employee.findOne({'apiKey':apiKey});
|
|
var state='Ismeretlen';
|
|
if (employee)
|
|
{
|
|
if (employee.workingtimeId){ // Ha már dolgozott
|
|
const wtime=await WorkingTime.findById(employee.workingtimeId)
|
|
if (wtime!=null){
|
|
if (wtime.state==='ENDED') state='VÉGZETT';
|
|
if (wtime.state==='STARTED') state='DOLGOZIK';
|
|
|
|
}
|
|
callback(null,{'workState':state});
|
|
}
|
|
}
|
|
else
|
|
callback(null,null);
|
|
|
|
|
|
}
|
|
|
|
// Alkalmazotti lista lekérése
|
|
|
|
exports.apiRegisterDevice=function(deviceId,username,password,deviceType,callback){
|
|
var apikey=uuidAPIKey.create();
|
|
|
|
|
|
Employee.findOne({ name: username }, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else
|
|
{
|
|
if (!employee)
|
|
callback(null,{'message':'Hibás felhasználói adatok!'});
|
|
else
|
|
employee.comparePassword(password, function(err, isMatch) {
|
|
|
|
if (!isMatch) {
|
|
// Nem sikerült azonosítani
|
|
callback(null,{'message':'Hibás felhasználói adatok!'});
|
|
}
|
|
|
|
else
|
|
{
|
|
// Sikeres azonosítás
|
|
|
|
RfidDevice.findOne({'imei':deviceId} ,function(err, rfidDevice){
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else {
|
|
if (rfidDevice)
|
|
callback(null,{'message':'Az eszköz már regisztrálva van!','apiKey':employee.apiKey});
|
|
else
|
|
{
|
|
|
|
let rfidDev=new RfidDevice();
|
|
|
|
rfidDev.name=deviceType;
|
|
rfidDev.assignment = employee.name;
|
|
rfidDev.imei = deviceId;
|
|
rfidDev.ccid = deviceType;
|
|
rfidDev.state = 'Mobile terminal';
|
|
rfidDev.save(function(err){
|
|
if(err){
|
|
console.log(err);
|
|
return;
|
|
}else{
|
|
|
|
let empl={};
|
|
|
|
empl.apiKey=apikey.apiKey;
|
|
empl.uuid=apikey.uuid;
|
|
let query = {_id:employee._id}
|
|
|
|
Employee.findOneAndUpdate(query,empl,{ returnNewDocument: true },function(err,document){
|
|
if(err){
|
|
console.log(err);
|
|
return;
|
|
}else{
|
|
console.log('Mobil eszköz sikeresen hozzáadva '+employee.name+' ['+deviceType+']');
|
|
callback(null,{'message':'Sikeres regisztráció.','apiKey':apikey.apiKey});
|
|
}
|
|
});
|
|
|
|
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
exports.apiRequestAPIkey=function(username,password,callback){
|
|
|
|
Employee.findOne({ name: username }, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else
|
|
{
|
|
if (!employee)
|
|
callback(null,{'message':'Hibás felhasználói adatok!'});
|
|
else
|
|
employee.comparePassword(password, function(err, isMatch) {
|
|
|
|
if (!isMatch) {
|
|
// Nem sikerült azonosítani
|
|
callback(null,{'message':'Hibás felhasználói adatok!'});
|
|
}
|
|
|
|
else
|
|
{
|
|
// Sikeres azonosítás
|
|
|
|
console.log('API Key Requested '+employee.name);
|
|
callback(null,{'message':'API kulcs kérés sikeres.','apiKey':employee.apiKey});
|
|
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
exports.apiCheckDevice=function(deviceId, callback){
|
|
|
|
// RFID Eszköz ellenőrzése
|
|
|
|
RfidDevice.findOne({'imei':deviceId} ,function(err, rfidDevice){
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else {
|
|
if (rfidDevice)
|
|
callback(null,{'device_state':'OK'});
|
|
else
|
|
callback(null,{'device_state':'FAIL'});
|
|
}
|
|
});
|
|
}
|
|
|
|
exports.apiEmployee=async function(apiKey){
|
|
|
|
employee= await Employee.findOne({'apiKey':apiKey})//, function(err,employee)
|
|
if (employee)
|
|
{
|
|
var mpe=false;
|
|
if (employee.mobilePortalAccessEnabled==true) mpe=true;
|
|
|
|
return {'name':employee.name,'id':employee._id, 'isForeman':employee.isForeman,'mobilePortalAccessEnabled':mpe};
|
|
}
|
|
return null;
|
|
};
|
|
|
|
// Egy havi munkaidő összegzés
|
|
exports.apiSumOfMonth=function(employee_id,mindate,callback)
|
|
{
|
|
apiGetWorkTimeListById(employee_id,mindate,function(err,wt){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
callback(err);
|
|
}
|
|
else {
|
|
var workDays=[];
|
|
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
|
|
var latS=element.latitudeS;
|
|
var lonS=element.longitudeS;
|
|
var latE=element.latitudeE;
|
|
var lonE=element.longitudeE;
|
|
|
|
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({start:element.timeArrive,stop:element.timeGetaway,arriveLoc:element.location,
|
|
getawayLoc:element.locationStop,arriveCoords:{lat:latS,lon:lonS},
|
|
getavayCoords:{lat:latE,lon:lonE}});
|
|
|
|
wdays.fullHours+=element.workHours;
|
|
}
|
|
else
|
|
{
|
|
// Még nincs ilyen nap, hozzáadjuk
|
|
workDays.push({
|
|
date:element.date,
|
|
isMunkaszunet:false,
|
|
isHoliday:false,
|
|
isWeekend:isWeekend,
|
|
location:element.location,
|
|
notes:element.notes,
|
|
startStop:[{
|
|
start:element.timeArrive,
|
|
stop:element.timeGetaway,
|
|
arriveLoc:element.location,
|
|
getawayLoc:element.locationStop,
|
|
arriveCoords:{lat:element.latitudeS,lon:element.longitudeS},
|
|
getavayCoords:{lat:element.latitudeE,lon:element.longitudeE}
|
|
}],
|
|
fullHours:element.workHours,
|
|
hours:0,
|
|
overTime:0});
|
|
}
|
|
|
|
|
|
})
|
|
callback(null,workDays);
|
|
}
|
|
})
|
|
}
|
|
// Munkaidő lekérdezés
|
|
function apiGetWorkTimeListById(employeeId,mindate,callback)
|
|
{
|
|
var date = new Date();
|
|
var query={};
|
|
|
|
// Ehavi esedékes
|
|
|
|
var firstDay= moment(mindate,"YYYY.MM").startOf('month').format("YYYY.MM.DD.");
|
|
var lastDay = moment(mindate,"YYYY.MM").endOf('month').format("YYYY.MM.DD.");
|
|
//query={$and:[{'state':'ENDED','date': {$gte : firstDay,$lte: lastDay},'employeeId': employeeId}]};
|
|
query={$and:[{'date': {$gte : firstDay,$lte: lastDay},'employeeId': employeeId}]};
|
|
|
|
WorkingTime.find(query,null,function(err, wt){
|
|
if (err)
|
|
{
|
|
callback(err);
|
|
}
|
|
else {
|
|
|
|
callback(null,wt);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Munkák listája
|
|
exports.apiGetWorkList=function(apiKey,callback){
|
|
|
|
Employee.findOne({'apiKey':apiKey}, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
Work.find({},{'_id':1,'title':1,'body':1,'state':1},{sort: {workNumber: -1}} ,function(err, woks){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
}
|
|
else {
|
|
|
|
callback(null, woks);
|
|
}
|
|
|
|
});
|
|
}
|
|
else
|
|
{
|
|
callback(null,null);
|
|
}
|
|
}
|
|
|
|
|
|
})
|
|
}
|
|
exports.apiGetAllReport=function(apiKey,callback){
|
|
Employee.findOne({'apiKey':apiKey}, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
Employee.find({'konyvelesre':'on'},{'_id':1,'name':1},{sort: {name: -1}} ,function(err, emp){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
}
|
|
else {
|
|
Work.find(
|
|
{
|
|
"dailyReport" : {$exists:true},
|
|
$where:'this.dailyReport.length>0'
|
|
},{
|
|
'title':1,
|
|
'dailyReport':1,
|
|
'body':1,
|
|
'workNumber':1,
|
|
'poNumber':1,
|
|
'state':1
|
|
},{
|
|
sort: {workNumber: 1}
|
|
}
|
|
,function(err,drList){
|
|
|
|
|
|
callback(null, drList);//{employeeList:emp,reportList:drList});
|
|
}
|
|
)
|
|
}
|
|
})
|
|
}
|
|
else
|
|
{
|
|
callback(err,null);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Napi jelentés get
|
|
// Ősszes munka listája
|
|
exports.apiGetWorkList=function(apiKey,callback){
|
|
Employee.findOne({'apiKey':apiKey}, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
Work.find({},{
|
|
'_id':1,
|
|
'title':1,
|
|
'body':1,
|
|
'workNumber':1,
|
|
'poNumber':1,
|
|
'state':1
|
|
},{sort: {workNumber: -1}} ,function(err, woks){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
}
|
|
else {
|
|
|
|
callback(null, woks);
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
else
|
|
{
|
|
callback(null,null);
|
|
}
|
|
}
|
|
|
|
|
|
})
|
|
}
|
|
// Munkák listája
|
|
exports.apiGetDailyReport=function(apiKey,callback){
|
|
Employee.findOne({'apiKey':apiKey}, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
Employee.find({'konyvelesre':'on'},{'_id':1,'name':1},{sort: {name: -1}} ,function(err, emp){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
}
|
|
else {
|
|
Work.find({},{'_id':1,'title':1,'body':1,'state':1},{sort: {workNumber: -1}} ,function(err, woks){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
}
|
|
else {
|
|
|
|
callback(null, {employeeList:emp,workList:woks});
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
}
|
|
else
|
|
{
|
|
callback(null,null);
|
|
}
|
|
}
|
|
|
|
|
|
})
|
|
}
|
|
|
|
// Munkák listája
|
|
exports.apiGetEmployeeList=function(apiKey,callback){
|
|
|
|
Employee.findOne({'apiKey':apiKey}, function(err,employee)
|
|
{
|
|
if (err)
|
|
{
|
|
callback(err,null);
|
|
}
|
|
else
|
|
{
|
|
if (employee)
|
|
{
|
|
Employee.find({'konyvelesre':'on'},{'_id':1,'name':1},{sort: {name: -1}} ,function(err, emp){
|
|
if (err)
|
|
{
|
|
console.log(err);
|
|
}
|
|
else {
|
|
|
|
callback(null, emp);
|
|
}
|
|
|
|
});
|
|
}
|
|
else
|
|
{
|
|
callback(null,null);
|
|
}
|
|
}
|
|
|
|
|
|
})
|
|
} |