klnodekb/js/workReport.js

233 lines
7.1 KiB
JavaScript

let WorkReport = require('../models/workReportModel');
let Employee = require('../models/employee');
const asyncHandler = require('express-async-handler');
var mongoose = require('mongoose');
const moment = require('moment');
/*
exports.apiSaveReport=asyncHandler(async (req,res)=>{
const {workId,foremanId,date, workTitle,employeeList }=req.body;
const workReport = new WorkReport({
workId: mongoose.Types.ObjectId(workId),
date:new Date(date),
foremanId: mongoose.Types.ObjectId(foremanId),
workTitle: workTitle,
employeeList: employeeList
})
res.setHeader('Content-Type', 'application/json');
try{
await workReport.save();
res.send({'response':'ok','message':'Sikeresen létrehozva!'});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});
*/
exports.apiSaveReport=asyncHandler(async (req,res)=>{
const {workId,foremanId,date, workTitle,workFlow }=req.body;
const workReport = new WorkReport({
workId: mongoose.Types.ObjectId(workId),
date:new Date(date),
foremanId: mongoose.Types.ObjectId(foremanId),
workTitle: workTitle,
workFlow: workFlow
})
res.setHeader('Content-Type', 'application/json');
try{
await workReport.save();
res.send({'response':'ok','message':'Sikeresen létrehozva!'});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});
exports.apiUpdateReport=asyncHandler(async (req,res)=>{
const {workReport }=req.body;
res.setHeader('Content-Type', 'application/json');
try{
await WorkReport.replaceOne(
{_id: mongoose.Types.ObjectId(workReport._id)},
workReport
)
res.send({'response':'ok','message':'Sikeresen mentve!'});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});
/*exports.apiGetReport=asyncHandler(async (req,res)=>{
//const {workId,foremanId, workTitle,employeeList }=req.body;
res.setHeader('Content-Type', 'application/json');
try{
const reports=await WorkReport.find({workId: mongoose.Types.ObjectId(req.params.id)})
res.send({'response':'ok','reports':reports});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});*/
exports.apiGetReport=asyncHandler(async (req,res)=>{
//const {workId,foremanId, workTitle,employeeList }=req.body;
res.setHeader('Content-Type', 'application/json');
try{
var wtSum=0;
const reports=await WorkReport.find({workId: mongoose.Types.ObjectId(req.params.id)})
const workTimesSum=await WorkReport.aggregate(
[
{ $match: { 'workId': mongoose.Types.ObjectId(req.params.id)} },
{$unwind: '$workFlow'},
{$unwind: '$workFlow.employeeList'},
{$group: {_id: '$workFlow.EmployeeList', count:{$sum:1}}},
{ "$limit": 1 },
{"$project": {"_id":0,
"count": 1,}
}
]
)
if (workTimesSum.length>0) wtSum=workTimesSum[0].count*8
res.send({'response':'ok','reports':reports, 'workTimesSum':wtSum});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});
// Használt dátumok
exports.apiGetReportDates=asyncHandler(async (req,res)=>{
//const {workId,foremanId, workTitle,employeeList }=req.body;
res.setHeader('Content-Type', 'application/json');
try{
const reports=await WorkReport.find({workId: mongoose.Types.ObjectId(req.params.id)})
var dates=[];
reports.forEach((elem,idx)=>{
dates.push(elem.date)
})
res.send({'response':'ok','dates':dates});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});
// Felhasználói adatok
exports.apiGetUsers=asyncHandler(async (req,res)=>{
//const {workId,foremanId, workTitle,employeeList }=req.body;
res.setHeader('Content-Type', 'application/json');
/* try{
const users=await Employee.find({'konyvelesre': 'on'},{_id:1,name:1,company:1},{sort: {name: 1}})
res.send({'response':'ok','users':users});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}*/
try{
const users=await Employee.aggregate([
{ $sort: { "name": 1 } },
{$match: { "konyvelesre": "on"}},
{
$group: {
_id: {company:'$company'},
employees:{
$push:{
name: "$name",
id: "$_id"
}
}
}
},
]);
res.send({'response':'ok','users':users});
}
catch(err){
res.status(500).json({'response':'fail','message':'Hiba a mentésnél !\n'+err.message});
}
});
exports.apiGetReportList=asyncHandler(async (req,res)=>{
//const {workId,foremanId, workTitle,employeeList }=req.body;
res.setHeader('Content-Type', 'application/json');
try{
const reports=await WorkReport.aggregate([
{$match: {"workId": mongoose.Types.ObjectId(req.params.id)}},
{
$lookup:
{
from: "employees",
localField: "employeeList.employeeId",
foreignField: "_id",
as: "employee"
},
},
/* {
$unwind: "$employee"
},*/
/* {
$unwind: "$employeeList"
},*/
{$group: { _id:{
'wf': '$employeeList.workFlow',
'wid': '$_id',
'name': '$employee.name',
},
'id':{$first: '$_id'},
'date':{$first:'$date'},
'name': {$first:'$employee.name'},
'workFlow':{$first: '$employeeList.workFlow'},
},
},
{
// cleanup
$project: {
_id: false,
}
}
])
var wof=[];
reports.forEach(element => {
const curDate=moment(element.date).format("YYYY.MM.DD");
var wdays=wof.find(e=>e.date===curDate);
var items=[]
if (wdays) //ha már van ilyen nap
{
items=[]
element.name.forEach((elem,idx)=>{
wdays.items.push({name:elem,workFlow:element.workFlow[idx]})
})
// wdays.items.push(items)
}
else
{
items=[]
element.name.forEach((elem,idx)=>{
items.push({name:elem,workFlow:element.workFlow[idx]})
})
var day={date:curDate,items:items}
wof.push(day)
}
});
res.send({'response':'ok','reports':wof});
}catch(err){
res.status(500).json({'response':'fail','message':'Hiba a lekérdezésnél !\n'+err.message});
}
});