%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;