%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/opti/workflow/src/routes/
Upload File :
Create Path :
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;

Zerion Mini Shell 1.0