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; var dr_firstDay= moment(req.params.date,"YYYY.MM").startOf('month').toDate(); var dr_lastDay = moment(req.params.date,"YYYY.MM").endOf('month').toDate(); const reports=await WorkReport.find({workId: mongoose.Types.ObjectId(req.params.id), date: { $gte: dr_firstDay, $lte: dr_lastDay } }) const workTimesSum=await WorkReport.aggregate( [ { $match: { 'workId': mongoose.Types.ObjectId(req.params.id), date: { $gte: dr_firstDay, $lte: dr_lastDay } } }, {$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}); } }); // A teljes munka ráfordítás műhelyben exports.apiGetReportSum=asyncHandler(async (req,res)=>{ //const {workId,foremanId, workTitle,employeeList }=req.body; res.setHeader('Content-Type', 'application/json'); try{ var wtSum=0; 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', '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}); } });