kpiplus
Version:
KPI+
1 lines • 11.2 kB
JavaScript
;var fs=require("fs"),appModel=require("./models/app"),Customer=require("./models/customer"),express=require("express"),underscore=require("underscore"),passport=require("passport"),path=require("path"),mongoose=require("mongoose");let configs=require("./configs");var async=require("async");module.exports=function(app){var auth_google=require("./auths/google");auth_google(app,passport);var auth_facebook=require("./auths/facebook");auth_facebook(app,passport);var auth_local=require("./auths/local");auth_local(app,passport);var bearer=require("./auths/bearer");bearer(passport);var router=express.Router();router.use(function(e,r,s){for(let r in e.query)"true"==e.query[r]&&(e.query[r]=!0),"false"==e.query[r]&&(e.query[r]=!1);var t=e.query.access_token;t||(t=e.get("X-Access-Token")),t&&(e.query.access_token=t),s()}),router.use(passport.authenticate("bearer",{session:!1})),router.param("id_app",function(e,r,s,t){if(t){if(!mongoose.Types.ObjectId.isValid(t))return r.status(400).send("id_app:'"+t+"' is invalid");var n=e.user.email;appModel.findOne({_id:t,$or:[{user_created:n},{participants:{$elemMatch:{email:n}}}]},function(n,i){return n?s(n):i?(e.user.current_id_app=t,i.options||(i.options={}),e.user.current_app_info=i,e.query.id_app=t,void s()):r.status(400).send("Công ty này không tồn tại hoặc bạn không có quyền truy cập công ty này")})}else s()}),app.use("/api",router),global.controllers={},fs.existsSync(__dirname+"/modules/vouchers")&&(console.log("init vouchers..."),fs.readdirSync(__dirname+"/modules/vouchers").forEach(function(e){if(".js"==e.substr(-3)){let r=new(require("./modules/vouchers/"+e))(router);ctrlVouchers[r.contr.name.toUpperCase()]=r}})),fs.existsSync(__dirname+"/modules/reports")&&(console.log("init reports..."),fs.readdirSync(__dirname+"/modules/reports").forEach(function(e){if(".js"==e.substr(-3)){require("./modules/reports/"+e)(router)}})),fs.existsSync(__dirname+"/modules/lists")&&(console.log("init lists..."),fs.readdirSync(__dirname+"/modules/lists").forEach(function(e){if(".js"==e.substr(-3)){new(require("./modules/lists/"+e))(router)}}));let User=require("./models/user");router.route("/:id_app/require-print/:user/:code/:_id").get(function(e,r,s){let t=e.params.id_app,n=e.params.user,i=e.params.code,a=e.params._id;User.emitEvent(n,"Print:"+i,{_id:a,code:i,id_app:t},!1),r.send("OK")});var syncSQL=require("./libs/syncSQL"),Dmvt=require("./models/dmvt"),Dmdvt=require("./models/dmdvt"),Dmkho=require("./models/dmkho"),Dmdt=require("./models/dmdt"),Dmphi=require("./models/dmphi"),Dvcs=require("./models/dvcs");router.route("/:id_app/sync").get(function(e,r,s){var t=e.params.id_app;async.parallel({dmkh:function(e){syncSQL.baseSync(t,Customer,"list/dmkh","ma_kh",function(r){e(r)})},dmvt:function(e){syncSQL.baseSync(t,Dmvt,"list/dmvt","ma_vt",function(r){e(r)})},dmdvt:function(e){syncSQL.baseSync(t,Dmdvt,"list/dmdvt","ma_dvt",function(r){e(r)})},dmkho:function(e){syncSQL.baseSync(t,Dmkho,"list/dmkho","ma_kho",function(r){e(r)})},dmphi:function(e){syncSQL.baseSync(t,Dmphi,"list/dphi","ma_phi",function(r){e(r)})},dmdt:function(e){syncSQL.baseSync(t,Dmdt,"list/dmdt","ma_dt",function(r){e(r)})},dvcs:function(e){syncSQL.baseSync(t,Dvcs,"list/ddv","ma_dvcs",function(r){e(r)})}},function(e,s){e?r.status(400).send("Không thể đồng bộ dữ liệu với STP ENTERPRISE\n"+e):r.send("OK")})});var request=require("request");router.route("/:id_app/ent-token").get(function(req,res,next){var id_app=req.params.id_app;appModel.findOne({_id:id_app},function(e,a){if(e||!a)return res.status(400).send("Công ty này không tồn tại");var address=req.query.address,username=req.query.username,password=req.query.password;if(!address||!username||!password)return res.status(400).send("Chức năng này yêu cầu tham số 'address','username','password'");var url=address+"/gettoken/"+id_app+"?username="+username+"&password="+password;request(url,function(error,response,body){return error?res.status(400).send(error):body.indexOf("ERROR")>=0?res.status(400).send(body):(body=eval("("+body+")"),a.stp_api_address=address,a.stp_api_token=body,void a.save(function(e){return e?res.status(400).send(e):res.send(body)}))})})}),router.route("/:id_app/ent-report/:id_rpt/:stt").get(function(e,r,s){var t=e.params.id_app,n=e.params.id_rpt,i=e.params.stt;appModel.findOne({_id:t}).lean().exec(function(s,t){if(s|!t)return r.status(400).send("Công ty này không tồn tại");if(!t.stp_api_address||!t.stp_api_token)return r.status(400).send("Bạn chưa khai báo thông tin kết nối với STP ENTERPISE");var a,u=t.stp_api_address+"/report/"+n+"/"+i+"?token="+t.stp_api_token;for(let r in e.query)"access_token"!==r&&(1!=(a=e.query[r])&&"true"!=a||(a="1"),u=u+"&"+r+"="+encodeURI(a));request(u,function(e,s,t){if(e)return r.status(400).send(e);if(t.indexOf("ERROR")>=0)return r.status(400).send(t);try{t=JSON.parse(t)}catch(e){return r.status(400).send(e+"\n"+u)}r.send(t)})})}),router.route("/:id_app/ent-voucher/:voucherid").get(function(e,r,s){var t=e.params.id_app,n=e.params.voucherid;appModel.findOne({_id:t}).lean().exec(function(s,t){if(s|!t)return r.status(400).send("Công ty này không tồn tại");if(!t.stp_api_address||!t.stp_api_token)return r.status(400).send("Bạn chưa khai báo thông tin kết nối với STP ENTERPISE");var i,a=t.stp_api_address+"/voucher/"+n+"?token="+t.stp_api_token;for(var u in e.query)"access_token"!==u&&(1!=(i=e.query[u])&&"true"!=i||(i="1"),a=a+"&"+u+"="+encodeURI(i));request(a,function(e,s,t){if(e)return r.status(400).send(e);if(t.indexOf("ERROR")>=0)return r.status(400).send(t);try{t=JSON.parse(t)}catch(e){return r.status(400).send(e+"\n"+a)}r.send(t)})})}),router.route("/:id_app/ent-voucher/:voucherid/update/:stt_rec").get(function(e,r,s){var t=e.params.id_app,n=e.params.voucherid,i=e.params.stt_rec;appModel.findOne({_id:t}).lean().exec(function(s,t){if(s|!t)return r.status(400).send("Công ty này không tồn tại");if(!t.stp_api_address||!t.stp_api_token)return r.status(400).send("Bạn chưa khai báo thông tin kết nối với STP ENTERPISE");let a,u=t.stp_api_address+"/voucher/"+n+"/update/"+i+"?token="+t.stp_api_token;for(let r in e.query)"access_token"!==r&&(a=e.query[r],u=u+"&"+r+"="+encodeURI(a));request(u,function(e,s,t){if(e)return r.status(400).send(e);if(t.indexOf("ERROR")>=0)return r.status(400).send(t);try{t=JSON.parse(t)}catch(e){return r.status(400).send(e+"\n"+u)}r.send(t)})})});var stp=require("stp-utils"),usersAdmin=configs.admins;router.route("/:id_app/query/:model/:action").get(function(req,res,next){let user=req.user;if(!underscore.contains(usersAdmin,user.email)&&!stp.isSupperAdmin(user.email.toLowerCase()))return next("Bạn không có quyền thực hiện thao tác này");let id_app=req.params.id_app,modelName=req.params.model,action=req.params.action,query={};if(req.query.q)try{query=eval("("+req.query.q+")")}catch(e){return res.status(400).send(e.message)}query.id_app=id_app;try{let e=require("./models/"+modelName);switch(action){case"find":let r=req.query.limit||1e3,s;req.query.fields&&(s={},req.query.fields.split(",").forEach(e=>{s[e]=1}));try{r=Number(r)}catch(e){return res.status(400).send(e.message)}r||(r=1e3),e.find(query,s).limit(r).lean().exec((e,r)=>{if(e)return res.status(400).send(e);res.send(r)});break;case"remove":e.remove(query,(e,r)=>{if(e)return res.status(400).send(e);res.send(r)});break;default:res.status(400).send(`Action ${action} is not support`)}}catch(e){res.status(400).send(e.message)}});var Menu=require("./menu");router.route("/modules").get(function(e,r,s){let t=JSON.parse(JSON.stringify(Menu.menu)),n=Menu.getModules(t),i=[];for(let e in n){let r=n[e];i.push(r.command)}r.send(i)});var permission=require("./libs/permission");router.route("/:id_app/menu").get(function(e,r,s){var t=e.params.id_app,n=e.user;appModel.findOne({_id:t}).lean().exec(function(e,s){if(e||!s)return r.status(400).send("Không thể lấy thông tin của công ty này.\n");permission.isAdmin(t,n.email,function(e,i){var a={menu:JSON.parse(JSON.stringify(Menu.menu))};a.modules=Menu.getModules(a.menu),i?(a.menu.forEach(function(e){s.stp_api_address&&s.stp_api_token?"STP"!==e.name.toUpperCase()&&"CRM"!==e.name.toUpperCase()&&(e.visible=!1):"STP"===e.name.toUpperCase()&&(e.visible=!1)}),r.send(a)):async.map(underscore.values(a.modules),function(e,r){var s=e.command,i=s.module?s.module:s.path;permission.hasRight(t,n.email,i,"view",function(e,t){s.visible=t,r()})},function(e,t){if(e)return r.status(400).send(e);a.menu.forEach(function(e){if(e.visible=!1,s.stp_api_address&&s.stp_api_token){if("STP"!==e.name.toUpperCase()&&"CRM"!==e.name.toUpperCase())return}else if("STP"===e.name.toUpperCase())return;if("1"==e.type)for(let r of e.input)if(r.items){for(let s of r.items)if(s.visible){r.visible=!0,e.visible=!0;break}}else if(r.visible){e.visible=!0;break}"2"==e.type&&e.input.forEach(function(r){r.visible=!1,r.items.forEach(function(s){s.visible&&(r.visible=!0,e.visible=!0)})}),"3"==e.type&&e.input.forEach(function(r){r.visible=!1,r.items.forEach(function(s){s.visible=!1,s.items.forEach(function(t){t.visible&&(s.visible=!0,r.visible=!0,e.visible=!0)})})})}),r.send(a)})})})});let sys_router=express.Router();sys_router.use(passport.authenticate("bearer",{session:!1})),app.use("/api",sys_router),fs.readdirSync(__dirname+"/modules/systems").forEach(function(e){if(".js"==e.substr(-3)){require("./modules/systems/"+e)(sys_router)}});var public_router=express.Router();public_router.use(function(e,r,s){for(let r in e.query)"true"==e.query[r]&&(e.query[r]=!0),"false"==e.query[r]&&(e.query[r]=!1);if(e.query.id_app){let t=e.query.id_app;appModel.findOne({_id:t},function(n,i){if(n)return s(n);if(!i)return r.status(400).send("Không tồn tại công ty này");{let r={current_id_app:t,email:"public"};e.user=r,e.query.id_app=t,s()}})}else s()}),app.use("/public",public_router),fs.existsSync(__dirname+"/modules/public")&&(console.log("init public..."),fs.readdirSync(__dirname+"/modules/public").forEach(function(e){".js"==e.substr(-3)&&require("./modules/public/"+e)(public_router)})),app.get("/getfile/:folder/:filename",function(e,r,s){let t=path.join(__dirname,"images",e.params.folder,e.params.filename);fs.existsSync(t)?r.sendFile(t):r.sendFile(path.join(__dirname,"images","others","noimage.png"))});let Labelinfo=require("./models/labelinfo");app.get("/labels/:labelid",function(e,r,s){var t=e.params.labelid.toUpperCase();Labelinfo.find({labelid:t}).lean().exec((e,s)=>{if(e)return r.status(400).send(e);let t={};s.forEach(e=>{t[e.textid]=e}),r.send(t)})});let qr=require("qr-image");app.get("/qrcode",function(e,r,s){var t=e.query.report;if(t||(t=e.query.data)&&(t=Buffer.from(t,"base64").toString("utf8")),!t)return r.status(400).send("miss parameter 'report'");t+="\ncreated by ungdungquanly.vn";var n=qr.image(t,{type:"svg"});r.type("svg"),n.pipe(r)}),app.get("/wit-task",function(e,r){let s=e.query.q;if(!s)return r.status(400).send("Bad request");request({method:"GET",uri:configs.wit.url+"message?q="+s,headers:{Authorization:configs.wit.Authorization}},function(e,s,t){if(e||t&&t.error)return r.status(400).send("Bad request");r.send(t)})})};