klnodekb/js/androidApi.js

459 lines
12 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');
// 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);
}
}
})
}