const express = require('express'); const router = express.Router(); const tools = require('../tools/general'); const server_constants = require('../tools/server_constants'); const { authenticate } = require('../middleware/authenticate'); // var mongoose = require('mongoose'); const { Project } = require('../models/project'); const { Todo } = require('../models/todo'); const { User } = require('../models/user'); const shared_consts = require('../tools/shared_nodejs'); const Hours = require('../models/hours'); const _ = require('lodash'); const { ObjectID } = require('mongodb'); router.post('/load', authenticate, async (req, res) => { const date_start = req.body.date_start; const date_end = req.body.date_end; const filter = req.body.filter; const idapp = req.body.idapp; // tools.mylog('GET REPORT : '); // Ottieni la reportistica // dei progetti // degli utenti Residenti // di tutta la settimana try { // Ottieni la lista dei Residenti const listaResidenti = await User.getUsersResidenti(idapp); // Extract all the projects of the userId only const objprojects = await Project.getAllProjects('', idapp); const arrhour = {}; let mydatets = tools.dateToEpoch(date_start) let mydatets_end = tools.dateToEpoch(date_end) for (const myuser of listaResidenti) { arrhour[myuser.username] = []; } let totalacchours = []; for (const myuser of listaResidenti) { totalacchours[myuser.username] = 0; } while (mydatets <= mydatets_end) { for (const myuser of listaResidenti) { // for (const myproj of objprojects.arrproj) { //let myhours = await Hours.getHoursByIdCat(idapp, myuser._id, myproj._id, date_start, date_end); let mydate = new Date(mydatets); let rechours = await Hours.getHoursByDate(idapp, myuser._id, mydate); let ressum = await Hours.getTotalHoursByDate(idapp, myuser._id, mydate); if (tools.isMonday(mydatets)) { totalacchours[myuser.username] = 0; } if ((ressum > 0) || ((tools.isSunday(mydatets)) && totalacchours[myuser.username] > 0)) { totalacchours[myuser.username] = totalacchours[myuser.username] + ressum; const rectotal = { totalhours: ressum, totalacchours: 0, date: tools.getstrDateYYYY_MM_DD(mydate), } if (tools.isSunday(mydatets)) { rectotal.totalacchours = totalacchours[myuser.username]; } if (tools.isBitActive(filter, shared_consts.REPORT_FILT_RESP)) { rectotal.resp = ''; rectotal.viceResp = ''; } arrhour[myuser.username].push(rectotal); if (tools.isBitActive(filter, shared_consts.REPORT_FILT_ATTIVITA)) { for (const rec of rechours) { let myproj = await Project.findProjectByUserId('', rec.todoId); let colors = { themebgcolor: '', themecolor: '' } if (!myproj) { const mytodo = await Todo.findOne({ _id: rec.todoId }); if (!!mytodo) { colors.themebgcolor = mytodo.themebgcolor; colors.themecolor = mytodo.themecolor; myproj = await Project.findProjectByUserId('', mytodo.category); if (!themebgcolor && myproj) { colors.themebgcolor = myproj.themebgcolor; colors.themecolor = myproj.themecolor; } } // E' un Todo, trova il proj } else { colors.themebgcolor = myproj.themebgcolor; colors.themecolor = myproj.themecolor; } if (!colors.themebgcolor) { if (myproj) { colors = await Project.findColorsByProject(myproj._id); } } if (myproj) { const myrec = { title: rec.hours + 'h - ' + myproj.descr, details: myproj.longdescr, date: tools.getstrDateYYYY_MM_DD(mydate), bgcolor: colors.themebgcolor, color: colors.themecolor } arrhour[myuser.username].push(myrec); } } } } // } } mydatets += 86400000; } return res.send({ listaResidenti, arrhour }); } catch (e) { console.log(e.message); res.status(400).send(e); } }); module.exports = router;