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'); // 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=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, 'isForeman':employee.isForeman,'mobilePortalAccessEnabled':mpe}); } else callback(null,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); } } }) }