%PDF- %PDF-
Direktori : /home/opti/workflow/src/routes/ |
Current File : /home/opti/workflow/src/routes/employee.js |
var express = require('express'); var router = express.Router(); var formidable = require('formidable'); var path = require('path'); var fs = require('fs'); var bcrypt = require('bcrypt'); var secured = require('../middleware/login'); var con = require('../../config'); var db = require('../models'); var Op = require('sequelize').Op; var formidable = require('formidable'); var bcrypt = require('bcrypt') var fs = require('fs'); var path = require('path'); /* GET home page. */ router.get('/', secured, (req, res) => { res.redirect('/employee/dashboard'); }); router.get('/dashboard', secured, (req, res) => { const user = req.user; //check if structure is organised so we do not show the add organization structure button db.OrganisationStructure.findAll({ where: { orgId: req.user.orgId }, include: [{model:db.Structure, as: 'structure'}], order: [['parentId', 'ASC']] }).then(structures => { // console.log(structures) isOrganized = false; if (structures.length > 0) { //structure not already organized isOrganized = true; } res.render('employee/dashboard', { user, isOrganized, structures }); }) }); router.get('/view/:id', secured, async (req, res) => { var id = req.params.id; var user = req.user; const employee = await db.User.findOne({where:{orgId: user.orgId, id: id}, include:[ { model: db.PayGrade, as: 'grade' }, { model: db.UserRole, as: 'userRole' }, { model: db.Branch, as:'branch' }, {model: db.EmployeeJob, as :'employeeJob', required: false, where:{active:1}, include : [{all:true, nested: true}]}, { model: db.EmployeeSalary, as :'salary', required: false, where:{active:1}, include : [ {model:db.EmployeeSalaryComponent, as: 'components', order:[['type', 'ASC']] , include:[{all:true, nested: true}]}, {all:true, nested: true} ], }, // { model: db.EmployeeSalary, as :'salaryHistories' } ], order: [ [ {model:db.EmployeeSalary, as:'salary'}, {model:db.EmployeeSalaryComponent, as:'components'}, 'type', 'ASC' ] ]}); // console.log(employee.salary.components, "Employee") const [titles, categories, salaryComponents, employmentStatuses, workShifts, payGrades] = await Promise.all([ db.JobTitle.findAll({where:{orgId: req.user.orgId}}), db.JobCategory.findAll({where:{orgId: req.user.orgId}}), db.SalaryComponent.findAll({where:{orgId: req.user.orgId}, order: [['type', 'ASC']]}), db.EmploymentStatus.findAll({where:{orgId: req.user.orgId}}), db.WorkShift.findAll({where:{orgId: req.user.orgId}}), db.PayGrade.findAll({where:{orgId: req.user.orgId}}), ]) if(employee === null){ return res.status(404); } console.log(salaryComponents) res.render('employee/view', {user, employee, titles, categories, salaryComponents, employmentStatuses, workShifts, payGrades}) }) router.post('/search/name', secured, async (req, res) => { let name = req.body.name; console.log("Search Param: ", name) let employees = await db.User.findAll({ where: { orgId: req.user.orgId, [Op.or] : [ { firstName: { [Op.like]: `%${name}%` } }, { middleName: { [Op.like]: `%${name}%` } }, { lastName: { [Op.like]: `%${name}%` } } ] } }); console.log("Employees: ", employees) if(employees == null){ res.json([]) } else { res.json(employees) } }) router.get('/all', secured, async function(req, res, next) { var user = req.user; // console.log(user) // TODO : Make admins able to see Organizations without orgId const allEmployees= await db.User.findAll({where: {orgId: user.orgId}}); const allOrgStructures = await db.OrganisationStructure.findAll({where: { orgId: user.orgId}, include: [ { model: db.Structure, as: 'structure' } ]}); // console.log(allOrgStructures, " All organisation structure"); const allRoles = await db.Role.findAll({where: {orgId: user.orgId}}); const allRegions = await db.Region.findAll({where: {orgId: user.orgId}}); const allGrades = await db.PayGrade.findAll({where: {orgId: user.orgId}}) // console.log(allGrades, " All grades"); res.render('employee/index', {title: 'Employees', allGrades, allRoles, allRegions, allOrgStructures , allEmployees: allEmployees, user: user, script: "index"}); // req.new_employ = "sdfgf"; console.log(req.session.new_employ, "here") }); router.post('/delete', secured, function(req, res){ var id = req.body.id, user = req.user; if(user.roleId === 'isAdmin'){ db.User.findOne({where: {id: id}}).then(function(user){ user.destroy().then(function(){ console.log("Employee successfully deleted") res.redirect('/employee/all') }) }) } else { db.User.findOne({where: {id: id}}).then(function(user){ user.destroy().then(function(){ console.log("Employee successfully deleted") res.redirect('/employee/all') }) }) } }) router.get('/add-employee', secured, async function(req, res, next) { var user = req.user; // TODO : Make admins able to see Organizations without orgId const allOrgStructures = await db.OrganisationStructure.findAll({where: { orgId: user.orgId}, include: [ { model: db.Structure, as: 'structure' } ]}); const allRoles = await db.Role.findAll({where: {orgId: user.orgId}}); const allRegions = await db.Region.findAll({where: {orgId: user.orgId}}); const allGrades = await db.PayGrade.findAll({where: {orgId: user.orgId}}) const jobCategories = await db.JobCategory.findAll({where: {orgId: user.orgId}}) const jobTitles = await db.JobTitle.findAll({where: {orgId: user.orgId}}) const workShifts = await db.WorkShift.findAll({where: {orgId: user.orgId}}) const payGrades = await db.PayGrade.findAll({where: {orgId: user.orgId}}) const salaryComponents = await db.SalaryComponent.findAll({where: {orgId: user.orgId}, order:[['type', 'ASC']]}) const employmentStatuses = await db.EmploymentStatus.findAll({where: {orgId: user.orgId} }) // res.locals.new_employ = req.session.new_employ; res.render('employee/createEmployee', {title: 'Employees', allGrades, allRoles, allRegions, allOrgStructures , new_employee: req.session.new_employee, jobCategories, jobTitles, workShifts, payGrades, salaryComponents, employmentStatuses}); }); router.post('/add', secured, function(req, res){ var form = new formidable.IncomingForm(); form.parse(req, async (err, fields, files) => { var firstName = fields.firstName, middleName = fields.middleName, dob = fields.dob, lastName = fields.lastName, email = fields.email, gender = fields.gender, phone = fields.phone, orgId = fields.orgId, roleId = /*fields.roleId*/ "isEmployee", regionId = fields.regionId, branchId = fields.branchId, email = fields.email, password = fields.password, image = saveFile(files.logo), gradeId = fields.gradeId, organisationStructureId = fields.organisationStructureId, companyStructureId = fields.companyStructureId; var salt = bcrypt.genSaltSync(10); password = bcrypt.hashSync(password, salt); var employeeObj = { firstName, middleName, dob, lastName, email, gender, phone, orgId, password, image, userRoleId: roleId, branchId, regionId, gradeId, organisationStructureId, companyStructureId }; //TODO: Check if org sub to HR and direct accordingly //if no hr module add emmployee and go away //else manage empoyee //uncomment this snippet to add employee and go away // db.User.create({...employeeObj, roleId : 'isEmployee'}).then(function(newStaff){ // if(!newStaff){ // req.flash('info', 'Error occured while creating employee'); // return res.redirect('/employee/all'); // } // req.flash('success', 'Employee created'); // res.redirect('/employee/all'); // }) //hr module req.session.new_employee = employeeObj; // res.locals.new_employee = employeeObj; res.redirect('/employee/add-employee'); }); }) router.post('/edit', secured, function(req, res){ var form = new formidable.IncomingForm(); form.parse(req, async (err, fields, files) => { console.log("Edit: ", fields) var employeeId = fields.id; var firstName = fields.firstName, middleName = fields.middleName, dob = fields.dob, lastName = fields.lastName, gender = fields.gender, phone = fields.phone, orgId = fields.orgId, branchId = fields.branchId, regionId = fields.regionId, // email = fields.email, // password = fields.password, image = saveFile(files.logo), gradeId = fields.gradeId, organisationStructureId = fields.organisationStructureId, companyStructureId = fields.companyStructureId; // var salt = bcrypt.genSaltSync(10); // password = bcrypt.hashSync(password, salt); var employeeObj = { firstName, middleName, dob, lastName, //email, gender, phone, orgId, //password, image, branchId, regionId, gradeId, organisationStructureId, companyStructureId }; // if(password == undefined) db.User.findOne({where: {id: employeeId}}).then( async function(staff){ if(!staff){ req.flash('info', 'Error occurred while creating employee'); console.log("Error no such employee") return res.redirect('/employee/all'); } staff.update(employeeObj).then(function(){ req.flash('info', 'Employee created'); console.log("Employee created") res.redirect('/employee/all'); }) }) }); }) router.get('/api/all', secured, (req, res) => { var user = req.user; db.User.findAll({where:{orgId: user.orgId}}) .then(function(employees){ res.json(employees); }) }) function saveFile(file){ const name = `${Math.floor(Date.now() / 1000)}_${Math.round(Math.random() * 10000)}.${file.name.split('.').pop()}`; const dest = path.join(__dirname, '..', 'public', 'assets', 'images', 'users', name); const data = fs.readFileSync(file.path); fs.writeFileSync(dest, data); fs.unlinkSync(file.path); console.log("Path: ", dest) console.log("Data: ", data) // uploadInfo.fileSize = fileUpload.size; // uploadInfo.fileType = fileUpload.type; return name; } module.exports = router;