%PDF- %PDF-
Direktori : /home/opti/workflow/src/routes/ |
Current File : /home/opti/workflow/src/routes/structure.js |
var express = require('express'); var router = express.Router(); var bcrypt = require('bcrypt') var formidable = require('formidable'); var fs = require('fs'); var path = require('path'); var con = require('../../config'); var Op = require('sequelize').Op; var secured = require('../middleware/login'); var db = require('../models'); //get all structures, it could be a get request but, post works fine router.post('/get', function(req, res, next) { var user = req.user; db.Structure.findAll({ where: { [Op.or] : [ { orgId: user.orgId }, { orgId: null } ] } }) .then( strutures=>{ res.json(strutures); }) }); //get method/route for sll structure list/view, router.get('/', secured, function(req, res, next) { // var orgId = 0; var user = req.user; let orgId = user.orgId ; db.OrganisationStructure.findAll({ where: {orgId: orgId}, include: [{ model:db.OrganisationStructure, as:'parent'}, { model:db.CompanyStructure, as:'children'}, { model:db.Structure, as:'structure'}, ], // order: [['parentId','ASC']] }).then(structures => { isOrganized = false; if(structures.length > 0) { //structure not already organized isOrganized =true; } console.log(structures, "Structures") res.render('structure/index', { user, structures: structures, isOrganized}); }) .catch(error => { // Ooops, do some error-handling console.log(error); }) }); // save organization structure router.post('/save_organization_structure', async ( req, res) =>{ console.log(req.body) let structureNames = req.body.structure_names; let orgId = req.user.orgId || 0; let lastOrgId; for (let i = 0; i < structureNames.length; i++){ var [structure] = await db.Structure.findOrCreate({ where: {name: structureNames[i]}, defaults: {orgId} }); // structure = structure[0]; console.log(structure, "Structure") console.log(i, " Index") // Get the parent org first if(i >= 1){ console.log(true) console.log(lastOrgId, "Last Org Id") var createdOrgStructure = await db.OrganisationStructure.create({ orgId: orgId, structureId: structure.id, parentId: lastOrgId }); console.log(createdOrgStructure, "Created org Structure") lastOrgId = createdOrgStructure.id; } else { console.log(false) var parentId = null; var createdOrgStructure = await db.OrganisationStructure.create({ orgId: orgId, structureId: structure.id, parentId }); console.log(createdOrgStructure, "Created org Structure") lastOrgId = createdOrgStructure.id; console.log(lastOrgId, "Last Org Id") } } req.flash('success', 'Organization successfully Structured!' ); res.redirect('/structure'); }); //get all parents, it could be a get request but, post works fine router.post('/getParents', secured, async function(req, res, next) { console.log(req.body) var OrgStructureId = req.body.parentStructureId; var orgStructure = await db.OrganisationStructure.findOne({ where: { parentId: { [Op.ne]: null }, [Op.and] :{ id: OrgStructureId } }, }); console.log(orgStructure, "Org Structure") var parentStructure = await db.OrganisationStructure.findOne({where: {id: orgStructure.parentId}}); console.log(parentStructure, "Parent Structure") var companyStructures = await db.CompanyStructure.findAll({where:{orgStructureId:parentStructure.id}}); console.log(companyStructures, "Company Structures") res.json(companyStructures); }); //get for creating new company structure router.get('/add', secured, function(req, res, next) { // let orgId = 0; let user = req.user; db.OrganisationStructure.findAll({ where: {orgId: user.orgId}, include: [{ model: db.Structure, as: 'structure'} ], order: [['parentId','ASC']] } ) .then(structures => { isOrganized = false; if(structures.length > 0) { //structure not already organized isOrganized =true; } else { return res.redirect('/structure') } db.Grade.findAll({where:{orgId:user.orgId}}).then(grades => { res.render('structure/addStructure', { user, structures: structures, script: 'index',grades}); }) }) .catch(error => { // Ooops, do some error-handling console.log(error); }) }); //get for creating new company structure router.post('/add', secured, async function(req, res, next) { var form = new formidable.IncomingForm(); form.parse(req, async(err, fields, files) =>{ //TODO::form Validation var user = req.user; var orgId = user.orgId; console.log("Fields: ",fields) await db.CompanyStructure.create({ orgId, orgStructureId:fields.organisationStructureId, parentStructureId:fields.structureParentId, name:fields.name, email: fields.email, createdBy: user.id, headId:fields.headId, assistantId:fields.headAssistantId }); res.redirect('/structure'); }) }); router.get('/company/get', secured, (req, res) => { var user = req.user; var orgStructId = req.query.orgStructId; console.log(req.query) db.CompanyStructure.findAll({where: {orgId: user.orgId, orgStructureId: orgStructId }}).then(function(companyStructures){ console.log(companyStructures, " Company Structures") res.json(companyStructures); }) }) router.get('/view/:id', secured, (req, res) => { var user = req.user; var companyStructureId = req.params.id; db.CompanyStructure.findOne({ where:{ id: companyStructureId }, include: [ { model: db.User, as:'employees', include: [ { model: db.Grade, as: 'grade' } ] }, { model: db.User, as:'head', include: [ { model: db.Grade, as: 'grade' } ] }, { model: db.User, as:'assistant' } ] }) .then((structure) => { if(structure !== null){ console.log(structure) res.render('structure/view', {user, structure, script: 'index'}); } else { res.status(404); } }) }) router.get('/api/all/:id', secured, (req, res) => { var orgStructId = req.params.id; var user = req.user; db.CompanyStructure.findAll({where:{orgId: user.orgId, orgStructureId: orgStructId}}) .then(function(companyStructure){ res.json(companyStructure); }) }) router.get('/organisation/api/all', secured, (req, res) => { var user = req.user; db.OrganisationStructure.findAll({where:{orgId: user.orgId}, include: [ { model: db.Structure, as: 'structure' } ]}) .then(function(organisationStructures){ res.json(organisationStructures); }) }) 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); // uploadInfo.fileSize = fileUpload.size; // uploadInfo.fileType = fileUpload.type; return name; } module.exports = router;