statistics.js 868 B

12345678910111213141516171819202122232425262728293031
  1. const { Terminal } = require('../database')
  2. const sequelize = require('../database/sequelize')
  3. const get = async (req, res) => {
  4. const terminalIds = (await Terminal.findAll())
  5. .filter(loc => req.claims.TERMINAL_ALL_ACCESS || req.claims[`TERMINAL_${loc.key}_ACCESS`])
  6. .map(loc => loc.id)
  7. const [results, metadata] = await sequelize.query(`
  8. SELECT
  9. loc.key,
  10. wd.date,
  11. wd.laborCost,
  12. SUM(svc.delivered) as delivered,
  13. SUM(svc.scanned) as scanned,
  14. SUM(svc.delivered) / (wd.regularHours + (wd.overtimeHours * 1.5)) as efficiency
  15. FROM workdays wd
  16. JOIN terminals loc on wd.terminalId = loc.id
  17. LEFT JOIN services svc on svc.workdayId = wd.id
  18. WHERE loc.id IN(:terminalIds)
  19. GROUP BY loc.key, wd.date
  20. `, {
  21. replacements: { terminalIds }
  22. })
  23. res.status(200).send(results)
  24. }
  25. module.exports = {
  26. get
  27. }