/* eslint-disable vars-on-top */ /* eslint-disable no-var */ const express = require('express'); const router = express.Router(); const mountRegisterRoutes = require('../features/register/routes'); const mountLoginRoutes = require('../features/login/routes'); const mountLogoutRoutes = require('../features/logout/routes'); const mountResetPasswordRoutes = require('../features/reset-password/routes'); const mountProfileRoutes = require('../features/profile/routes'); const companyApi = require('../api/company'); const materialApi = require('../api/material'); const divisionApi = require('../api/division'); const userApi = require('../api/users'); const editApi = require('../api/editable'); const clearApi = require('../api/auto-clear'); const summaryApi = require('../api/summary'); async function isAuthenticated(req, res, next) { if (req.user && req.isAuthenticated()) { var editable = await editApi.isEditable(req.session.passport.user.jwt); var autoClear = await clearApi.autoClear(req.session.passport.user.jwt); res.locals.editable = editable ? editable.attributes.Active : false; res.locals.autoClear = autoClear ? autoClear.attributes : null; res.locals.role = req.session.passport.user.role ? req.session.passport.user.role.name : null; if(res.locals.role !='Admin'){ req.session.companySelected = req.session.passport.user.company; req.session.divisionSelected = req.session.passport.user.division; } return next(); } return res.redirect('/login'); } /* GET home page. */ router.get('/', isAuthenticated, async (req, res) => { let divisions = []; let materials = []; let summaries = []; const companies = await companyApi.companyList(req.session.passport.user.jwt); const { session } = req; if(req.session.passport.user.role&&req.session.passport.user.role.name=='Admin'){ summaries = await summaryApi.summaryList(req.session.passport.user.jwt); } if(session.companySelected){ divisions = await divisionApi.divisionList( session.companySelected, req.session.passport.user.jwt ); } if (session.companySelected && session.divisionSelected && session.categorySelected) { materials = await materialApi.materialList( session.categorySelected, session.companySelected, session.divisionSelected, req.session.passport.user.jwt ); } res.render('pages/dashboard', { pageTitle: 'Dashboard', material: materials, division: session.divisionSelected, company: session.companySelected, divisions, companies, category: session.categorySelected, summaries:summaries }); }); router.post('/', isAuthenticated, async (req, res) => { let divisions = []; let materials = []; let summaries = []; const { session } = req; if(req.session.passport.user.role&&req.session.passport.user.role.name=='Admin'){ summaries = await summaryApi.summaryList(req.session.passport.user.jwt); } if ((req.body.division||session.divisionSelected) && req.body.company && req.body.Category) { session.companySelected = req.body.company; session.divisionSelected = req.body.division || session.divisionSelected; session.categorySelected = req.body.Category; divisions = await divisionApi.divisionList(req.body.company, req.session.passport.user.jwt); materials = await materialApi.materialList( req.body.Category, req.body.company, req.body.division, req.session.passport.user.jwt ); } const companies = await companyApi.companyList(req.session.passport.user.jwt); res.render('pages/dashboard', { pageTitle: 'Dashboard', material: materials, division: req.body.division, company: req.body.company, divisions, companies, category: req.body.Category, summaries:summaries }); }); router.get('/material/:id', isAuthenticated, async (req, res) => { const { id } = req.params; const material = await materialApi.material(id, req.session.passport.user.jwt); if (material) { res.render('pages/material', { pageTitle: 'Materi', id, ...material, }); } else { res.status(404); } }); router.get('/settings', isAuthenticated, async (req, res) => { res.render('pages/settings', { pageTitle: 'Settings', }); }); router.get('/icons', isAuthenticated, (req, res) => { res.render('pages/icons'); }); router.get('/maps', isAuthenticated, (req, res) => { res.render('pages/maps'); }); router.get('/users', isAuthenticated, async (req, res) => { var error = req.query.s; const companies = await companyApi.companyList(req.session.passport.user.jwt); const users = await userApi.getUsers(req.session.passport.user.jwt, 1); if (users) { res.render('pages/users', { pageTitle: 'Users', users, page: 1, companies, error: error!= undefined, alert:(error)?"Operasi gagal. Terjadi kesalahan!":undefined, }); } else { res.status(404); } }); router.post('/users', isAuthenticated, async (req, res) => { let divisions = []; const companies = await companyApi.companyList(req.session.passport.user.jwt); if (req.body.company) { divisions = await divisionApi.divisionList(req.body.company, req.session.passport.user.jwt); } const users = await userApi.getUsers( req.session.passport.user.jwt, req.body.page, req.body.company, req.body.division ); if (users) { res.render('pages/users', { pageTitle: 'Users', users, page: req.body.page, company: req.body.company, division: req.body.division, companies, divisions, }); } else { res.status(404); } }); mountRegisterRoutes(router); mountLoginRoutes(router); mountLogoutRoutes(router, [isAuthenticated]); mountResetPasswordRoutes(router); mountProfileRoutes(router, [isAuthenticated]); module.exports = router;