flexbiz-server 12.7.6 → 12.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/package.json +3 -3
  2. package/server/app.js +23 -19
  3. package/server/auths/rateLimiterMiddleware.js +3 -3
  4. package/server/controllers/controller.js +41 -41
  5. package/server/controllers/controllerUtils.js +61 -61
  6. package/server/controllers/controllerUtils_v1.js +72 -0
  7. package/server/controllers/controller_old.js +129 -0
  8. package/server/controllers/createHandler.js +34 -34
  9. package/server/controllers/createHandler_old.js +35 -0
  10. package/server/controllers/deleteHandler.js +11 -12
  11. package/server/controllers/deleteHandler_old.js +12 -0
  12. package/server/controllers/exportHandler.js +19 -17
  13. package/server/controllers/exportHandler_old.js +17 -0
  14. package/server/controllers/findHandler.js +61 -55
  15. package/server/controllers/findHandler_old.js +74 -0
  16. package/server/controllers/importFromGsHandler.js +10 -10
  17. package/server/controllers/importFromJsonHandler.js +6 -6
  18. package/server/controllers/importFromJsonHandler_old.js +6 -0
  19. package/server/controllers/updateBookHandler.js +1 -1
  20. package/server/controllers/updateFieldHandler.js +12 -13
  21. package/server/controllers/updateFieldHandler_old.js +13 -0
  22. package/server/controllers/updateHandler.js +38 -40
  23. package/server/controllers/updateHandler_old.js +40 -0
  24. package/server/controllers/viewHandler.js +13 -14
  25. package/server/controllers/viewHandler_old.js +14 -0
  26. package/server/flow/nodes/aiAnalysis.js +1 -1
  27. package/server/global.js +2 -3
  28. package/server/libs/WorkerStaticPool.js +14 -14
  29. package/server/libs/asyncCompat.js +10 -0
  30. package/server/libs/createSocaitheongay.js +1 -1
  31. package/server/libs/invoiceVnpt.js +1 -1
  32. package/server/libs/post-book.js +2 -2
  33. package/server/libs/post-sokho.js +5 -5
  34. package/server/libs/redis-cache.js +2 -2
  35. package/server/models/assabcihandler.js +1 -1
  36. package/server/models/counter.js +2 -2
  37. package/server/models/listinfo.js +200 -225
  38. package/server/models/listinfo_old.js +124 -0
  39. package/server/models/po1.js +4 -4
  40. package/server/models/purchase_contract.js +3 -3
  41. package/server/models/smsaccount.js +2 -2
  42. package/server/models/tdttco.js +3 -3
  43. package/server/models/tdttno.js +3 -3
  44. package/server/modules/lists/ls-afflink.js +1 -1
  45. package/server/modules/lists/ls-assbooking.js +1 -1
  46. package/server/modules/lists/ls-assinvestment.js +11 -11
  47. package/server/modules/lists/ls-asskey.js +2 -2
  48. package/server/modules/lists/ls-assneedtobuy.js +1 -1
  49. package/server/modules/lists/ls-assperiod.js +1 -1
  50. package/server/modules/lists/ls-asssell.js +1 -1
  51. package/server/modules/lists/ls-cart.js +14 -14
  52. package/server/modules/lists/ls-congdoansx.js +1 -1
  53. package/server/modules/lists/ls-consultant.js +2 -2
  54. package/server/modules/lists/ls-dkhoc.js +2 -2
  55. package/server/modules/lists/ls-dmban.js +1 -1
  56. package/server/modules/lists/ls-dmbp.js +2 -2
  57. package/server/modules/lists/ls-dmdoi.js +1 -1
  58. package/server/modules/lists/ls-dmnhtask.js +2 -2
  59. package/server/modules/lists/ls-dmvt.js +3 -3
  60. package/server/modules/lists/ls-file.js +1 -1
  61. package/server/modules/lists/ls-giaoca.js +1 -1
  62. package/server/modules/lists/ls-introducer.js +2 -2
  63. package/server/modules/lists/ls-kbm-bcqt.js +1 -1
  64. package/server/modules/lists/ls-news.js +1 -1
  65. package/server/modules/lists/ls-participant.js +1 -1
  66. package/server/modules/lists/ls-rpt.js +1 -1
  67. package/server/modules/lists/ls-smsaccount.js +1 -1
  68. package/server/modules/lists/ls-sosanxuat.js +1 -1
  69. package/server/modules/lists/ls-support.js +1 -1
  70. package/server/modules/public/callin.js +1 -1
  71. package/server/modules/reports/calc-tinhgiafifo.js +1 -1
  72. package/server/modules/reports/calc-tinhgiatb.js +1 -1
  73. package/server/modules/reports/calc-tinhgiathanh.js +1 -1
  74. package/server/modules/reports/calc-tinhluong.js +1 -1
  75. package/server/modules/reports/rp-assbonus.js +1 -1
  76. package/server/modules/reports/rp-bkchamcong.js +1 -1
  77. package/server/modules/reports/rp-cdpsdiem.js +1 -1
  78. package/server/modules/reports/rp-cdpskh.js +1 -1
  79. package/server/modules/reports/rp-cdpsnphep.js +1 -1
  80. package/server/modules/reports/rp-kcsns.js +1 -1
  81. package/server/modules/reports/rp-sctbhxh.js +1 -1
  82. package/server/modules/reports/rp-sctluong.js +1 -1
  83. package/server/modules/reports/rp-sctthuetncn.js +1 -1
  84. package/server/modules/reports/rp-sctvt.js +1 -1
  85. package/server/modules/reports/rp-sctvtnpp.js +1 -1
  86. package/server/modules/reports/rp-sctvttt.js +1 -1
  87. package/server/modules/reports/rp-thgt.js +1 -1
  88. package/server/modules/systems/sys-labelinfo.js +2 -3
  89. package/server/modules/systems/sys-listinfo.js +1 -1
  90. package/server/modules/systems/sys-menuinfo.js +1 -4
  91. package/server/modules/systems/sys-moduleinfo.js +2 -4
  92. package/server/modules/systems/sys-notification.js +1 -1
  93. package/server/workers/backupApp.js +1 -1
  94. package/server/workers/calcGrid.js +1 -1
  95. package/server/workers/runScript.js +1 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "flexbiz-server",
3
3
  "main": "./server/app.js",
4
4
  "description": "Flexible Server",
5
- "version": "12.7.6",
5
+ "version": "12.7.7",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -61,8 +61,8 @@
61
61
  "moment-timezone": "^0.5.33",
62
62
  "mongodb-backup": "^1.6.9",
63
63
  "mongodb-restore": "^1.6.2",
64
- "mongoose": "^5.12.14",
65
- "mongoose-storage-usage": "^1.6.0",
64
+ "mongoose": "^6.13.10",
65
+ "mongoose-storage-usage": "^1.7.0",
66
66
  "morgan": "^1.10.0",
67
67
  "multer": "^0.1.8",
68
68
  "natives": "^1.1.6",
package/server/app.js CHANGED
@@ -1,23 +1,27 @@
1
1
  require("events").EventEmitter.defaultMaxListeners=1E7;const os=require("os"),express=require("express"),bodyParser=require("body-parser"),crypto=require("crypto"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors");require("./global");
2
- const defaultConfigs=require("./defaultConfigs"),mainServer=function($app$$,$options$$={port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs,lite:$options$$.lite};$configs$$.database.url=process.env.MONGO_URI||$configs$$.database.url;$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token=
3
- "flex.public.token");var $_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$=$options$$.port||$configs$$.port||$configs$$.PORT||443;$configs$$.port=$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$;global.port=$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$;const $User$$=global.getModel("user");require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||=express();
4
- $app$$.set("trust proxy",1);const $maxLagMs$$=$configs$$.maxLag||70;let $currentLagMs$$=0;(function $scheduleLagCheck$$(){const $expectedFireAt$$=Date.now()+500;setTimeout(()=>{$currentLagMs$$=Math.max(0,Date.now()-$expectedFireAt$$);$scheduleLagCheck$$()},500).unref()})();$app$$.use(function($req$$,$res$$,$next$$){$currentLagMs$$>$maxLagMs$$?(Logger.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl,"lag:",$currentLagMs$$+"ms"),$res$$.status(503).send({error:"Server is busy right now, sorry."})):
5
- $next$$()});$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$());
6
- $app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||=$req$$.headers.uid;$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$());
7
- $_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||5242880;Logger.warn("[app] [limitFileSize]",$limitFileSize$$);$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$=
8
- require("multer")({dest:$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$,limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$);$app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});$options$$.lite!==!0&&($app$$.use("/",express.static($configs$$.paths.public||__dirname+
9
- "/public")),$app$$.use("/admin",express.static($configs$$.paths.admin||__dirname+"/admin")),$app$$.use("/templates",express.static($configs$$.paths.templates||__dirname+"/templates")),$app$$.use("/images",express.static($configs$$.paths.images||__dirname+"/images")));$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$=$configs$$.limitRequestSize||"1mb";Logger.warn("[app] [limitRequestSize]",$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$);
10
- $app$$.use(bodyParser.json({limit:$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$}));$app$$.use(bodyParser.urlencoded({limit:$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$,extended:!0}));$app$$.use(passport.initialize());$_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$=require("morgan");var $accessLogStream_rfs$$=require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||
11
- __dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$accessLogStream_rfs$$=$accessLogStream_rfs$$("access.log",{interval:"1d",path:$logDirectory$$});$app$$.use($_port_compress_cookieParser_limitRequestSize_morgan_multer_root_dir_uploads_session$$("combined",{stream:$accessLogStream_rfs$$,skip:function($req$$,$res$$){return $res$$.statusCode<400}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){Logger.error($err$$.stack);$res$$.status(500).send("Server Error!")});Logger.info("[app] connect to mongodb",
12
- $configs$$.database.url);$configs$$.database.url||(Logger.error("[app] thi\u1ebfu \u0111\u01b0\u1eddng d\u1eabn k\u1ebft n\u1ed1i v\u1edbi database trong file config"),process.exit(1));typeof global.mongoose.set==="function"&&global.mongoose.set("strictQuery",!0);global.mongoose.connect($configs$$.database.url).then(async()=>{if(!$options$$.lite){var $redis_transactionLifetimeLimitSeconds$$=$configs$$.transactionLifetimeLimitSeconds||600,$result_retryStrategyRedis$$=await mongoose.connection.getClient().db().admin().command({setParameter:1,
13
- transactionLifetimeLimitSeconds:$redis_transactionLifetimeLimitSeconds$$});Logger.warn("[app] T\u0103ng th\u1eddi gian ho\u1ea1t \u0111\u1ed9ng c\u1ee7a m\u1ed9t transaction l\u00ean",$redis_transactionLifetimeLimitSeconds$$,$result_retryStrategyRedis$$)}Logger.info("[app] Connected to Database");$redis_transactionLifetimeLimitSeconds$$=require("redis");({retryStrategyRedis:$result_retryStrategyRedis$$}=require("./libs/utils"));global.clientRedis=$redis_transactionLifetimeLimitSeconds$$.createClient({host:"127.0.0.1",
14
- port:6379,retry_strategy:$result_retryStrategyRedis$$});global.clientRedis.on("error",$err$$=>{Logger.error("Redis Client Error",$err$$);process.exit(1)});global.clientRedis.on("end",()=>{Logger.error("[app] Redis connection closed.")});global.clientRedis.on("connect",function(){Logger.info("[app] redis connected");$User$$.initClientSockets();if($options$$.lite!==!0){$options$$.createRedisCache&&require("./libs/redis-cache").set();global.getModel("schedule").start();const {recoverBackgroundTasks:$recoverBackgroundTasks$$}=
15
- require("./libs/optimizeBookkeeping");$recoverBackgroundTasks$$().catch(console.error);require("./route")($app$$,()=>{if($options$$.createServer!==!1){if($configs$$.use_ssl&&$options$$.sslDir){var $StaticPool$$=require("./sslConfig");$StaticPool$$=https.createServer($StaticPool$$($options$$.sslDir),$app$$)}else $StaticPool$$=http.createServer($app$$);$StaticPool$$.timeout=6E5;$options$$.useSocket!==!1&&$User$$.initSocket($StaticPool$$);$StaticPool$$.listen(global.port,()=>{Logger.info("[app] server start at "+
16
- global.port+" port")})}var $cpus_report_cpus$$=os.cpus().length;$StaticPool$$=$options$$.import_cpus||($options$$.start_import_data_pool?$options$$.start_report_pool||$options$$.start_input_data_pool?1:Math.round($cpus_report_cpus$$/2):0);var $StaticPool$jscomp$0$$=$options$$.input_cpus||($options$$.start_input_data_pool?Math.max(Math.round($cpus_report_cpus$$/2),2):0);$cpus_report_cpus$$=$options$$.report_cpus||($options$$.start_import_data_pool?Math.max(Math.min($cpus_report_cpus$$-$StaticPool$jscomp$0$$-
17
- $StaticPool$$,Math.round($cpus_report_cpus$$/2))-1,2):0);const $timeout_input$$=$options$$.timeout_input||$options$$.timeout||3E5,$timeout_import$$=$options$$.timeout_import||$options$$.timeout||36E5,$timeout_report$$=$options$$.timeout_report||$options$$.timeout||3E5;if($StaticPool$jscomp$0$$){const $StaticPool$$=require("./libs/WorkerStaticPool");global.inputMainPool=new $StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,$StaticPool$jscomp$0$$,$timeout_input$$,$StaticPool$jscomp$0$$,
18
- "input pool");global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{Logger.info("\ud83d\udd25 [app] Crud pool ready")})}$StaticPool$$&&($StaticPool$jscomp$0$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool$jscomp$0$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,$StaticPool$$,$timeout_import$$,1,"import pool"),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{Logger.info("[app] Import pool ready")}));
19
- $cpus_report_cpus$$&&($StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,$cpus_report_cpus$$,$timeout_report$$,2,"report pool"),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{Logger.info("[app] Report pool ready")}));$callbackServer$$&&$callbackServer$$()})}else require("./route")($app$$,()=>{$callbackServer$$&&$callbackServer$$()},!0)})}).catch($err$$=>{Logger.info("[app] Not Connected to Database ERROR! ",
20
- $err$$);process.exit(1)});return $app$$};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});process.on("uncaughtException",function($err$jscomp$3_error$$){Logger.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);Logger.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
2
+ const defaultConfigs=require("./defaultConfigs"),mainServer=function($app$$,$options$$={cluster:!1,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs,lite:$options$$.lite};$configs$$.database.url=process.env.MONGO_URI||$configs$$.database.url;$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token=
3
+ "flex.public.token");var $_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$=$options$$.port||$configs$$.port||$configs$$.PORT||443;$configs$$.port=$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$;global.port=$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$;const $User$$=global.getModel("user");require("moment-timezone").tz.setDefault($configs$$.timezone||
4
+ "Asia/Ho_Chi_Minh");$app$$||=express();$app$$.set("trust proxy",1);$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$=
5
+ require("cookie-parser");$app$$.use($_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||=$req$$.headers.uid;$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$=
6
+ require("compression");$app$$.use($_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$());$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||5242880;Logger.warn("[app] [limitFileSize]",$limitFileSize$$);$app$$.use(function($req$jscomp$1_size$$,$res$$,$next$$){if(($req$jscomp$1_size$$=
7
+ $req$jscomp$1_size$$.headers["content-lenght"])&&$req$jscomp$1_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$=require("multer")({dest:$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$,limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$);
8
+ $app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});$options$$.lite!==!0&&($app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public")),$app$$.use("/admin",express.static($configs$$.paths.admin||__dirname+"/admin")),$app$$.use("/templates",express.static($configs$$.paths.templates||__dirname+"/templates")),$app$$.use("/images",express.static($configs$$.paths.images||__dirname+
9
+ "/images")),{createStorageUsageTracker:$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$}=require("mongoose-storage-usage"),global.storageUsage=$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$(mongoose,{autoApply:!0,appModel:global.getModel("app"),fileFieldsConfig:{File:["file"]}}),global.storageUsage.registerCronJob("0 2 * * *"));$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$=
10
+ $configs$$.limitRequestSize||"1mb";Logger.warn("[app] [limitRequestSize]",$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$);$app$$.use(bodyParser.json({limit:$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$}));$app$$.use(bodyParser.urlencoded({limit:$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$,extended:!0}));
11
+ $app$$.use(passport.initialize());$_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$=require("morgan");var $accessLogStream_rfs$$=require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$accessLogStream_rfs$$=$accessLogStream_rfs$$("access.log",{interval:"1d",path:$logDirectory$$});$app$$.use($_port_compress_cookieParser_createStorageUsageTracker_limitRequestSize_morgan_multer_root_dir_uploads_session$$("combined",
12
+ {stream:$accessLogStream_rfs$$,skip:function($req$$,$res$$){return $res$$.statusCode<400}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){Logger.error($err$$.stack);$res$$.status(500).send("Server Error!")});Logger.info("[app] connect to mongodb",$configs$$.database.url);$configs$$.database.url||(Logger.error("[app] thi\u1ebfu \u0111\u01b0\u1eddng d\u1eabn k\u1ebft n\u1ed1i v\u1edbi database trong file config"),process.exit(1));global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0,
13
+ useFindAndModify:!1,useUnifiedTopology:!0,maxPoolSize:50,minPoolSize:10,socketTimeoutMS:45E3,serverSelectionTimeoutMS:5E3,heartbeatFrequencyMS:1E4}).then(async()=>{if(!$options$$.lite){var $redis_transactionLifetimeLimitSeconds$$=$configs$$.transactionLifetimeLimitSeconds||600,$result_retryStrategyRedis$$=await mongoose.connection.getClient().db().admin().command({setParameter:1,transactionLifetimeLimitSeconds:$redis_transactionLifetimeLimitSeconds$$});Logger.warn("[app] T\u0103ng th\u1eddi gian ho\u1ea1t \u0111\u1ed9ng c\u1ee7a m\u1ed9t transaction l\u00ean",
14
+ $redis_transactionLifetimeLimitSeconds$$,$result_retryStrategyRedis$$)}Logger.info("[app] Connected to Database");$redis_transactionLifetimeLimitSeconds$$=require("redis");({retryStrategyRedis:$result_retryStrategyRedis$$}=require("./libs/utils"));global.clientRedis=$redis_transactionLifetimeLimitSeconds$$.createClient({host:"127.0.0.1",port:6379,retry_strategy:$result_retryStrategyRedis$$});global.clientRedis.on("error",$err$$=>{Logger.error("Redis Client Error",$err$$);process.exit(1)});global.clientRedis.on("end",
15
+ ()=>{Logger.error("[app] Redis connection closed.")});global.clientRedis.on("connect",function(){Logger.info("[app] redis connected");$User$$.initClientSockets();if($options$$.lite!==!0){$options$$.createRedisCache&&require("./libs/redis-cache").set();global.getModel("schedule").start();const {recoverBackgroundTasks:$recoverBackgroundTasks$$}=require("./libs/optimizeBookkeeping");$recoverBackgroundTasks$$().catch(console.error);require("./route")($app$$,()=>{if($options$$.createServer!==!1){var $StaticPool$$=
16
+ require("sticky-session");if($configs$$.use_ssl&&$options$$.sslDir){var $cpus_report_cpus_server_sslConfig$$=require("./sslConfig");$cpus_report_cpus_server_sslConfig$$=https.createServer($cpus_report_cpus_server_sslConfig$$($options$$.sslDir),$app$$)}else $cpus_report_cpus_server_sslConfig$$=http.createServer($app$$);$cpus_report_cpus_server_sslConfig$$.timeout=6E5;$options$$.useSocket!==!1&&$User$$.initSocket($cpus_report_cpus_server_sslConfig$$);if($options$$.cluster!==!1){if(!$StaticPool$$.listen($cpus_report_cpus_server_sslConfig$$,
17
+ global.port))$cpus_report_cpus_server_sslConfig$$.once("listening",function(){Logger.info("[app] server started on",global.port)});$StaticPool$$=require("cluster");$StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){Logger.error("[app] worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool$$.on("online",function($worker$$){console.info("[app] worker "+$worker$$.process.pid+" is online")})}else $cpus_report_cpus_server_sslConfig$$.listen(global.port,()=>{Logger.info("[app] server start at "+
18
+ global.port+" port")})}$cpus_report_cpus_server_sslConfig$$=os.cpus().length;$StaticPool$$=$options$$.import_cpus||($options$$.start_import_data_pool?$options$$.start_report_pool||$options$$.start_input_data_pool?1:Math.round($cpus_report_cpus_server_sslConfig$$/2):0);var $StaticPool$jscomp$0$$=$options$$.input_cpus||($options$$.start_input_data_pool?Math.max(Math.round($cpus_report_cpus_server_sslConfig$$/2),2):0);$cpus_report_cpus_server_sslConfig$$=$options$$.report_cpus||($options$$.start_import_data_pool?
19
+ Math.max(Math.min($cpus_report_cpus_server_sslConfig$$-$StaticPool$jscomp$0$$-$StaticPool$$,Math.round($cpus_report_cpus_server_sslConfig$$/2))-1,2):0);const $timeout_input$$=$options$$.timeout_input||$options$$.timeout||3E5,$timeout_import$$=$options$$.timeout_import||$options$$.timeout||36E5,$timeout_report$$=$options$$.timeout_report||$options$$.timeout||3E5;if($StaticPool$jscomp$0$$){const $StaticPool$$=require("./libs/WorkerStaticPool");global.inputMainPool=new $StaticPool$$(__dirname+"/workers/inputWorker.js",
20
+ $options$$.max_queue_imports||0,$StaticPool$jscomp$0$$,$timeout_input$$,$StaticPool$jscomp$0$$,"input pool");global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{Logger.info("\ud83d\udd25 [app] Crud pool ready")})}$StaticPool$$&&($StaticPool$jscomp$0$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool$jscomp$0$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,$StaticPool$$,$timeout_import$$,1,"import pool"),global.importDataMainPool.exec({load:!0,
21
+ configs:JSON.stringify($configs$$)},()=>{Logger.info("[app] Import pool ready")}));$cpus_report_cpus_server_sslConfig$$&&($StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,$cpus_report_cpus_server_sslConfig$$,$timeout_report$$,2,"report pool"),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{Logger.info("[app] Report pool ready")}));$callbackServer$$&&$callbackServer$$()})}else require("./route")($app$$,
22
+ ()=>{$callbackServer$$&&$callbackServer$$()},!0)})}).catch($err$$=>{Logger.info("[app] Not Connected to Database ERROR! ",$err$$);process.exit(1)});return $app$$},gracefulShutdown=async $signal$$=>{Logger.warn(`[app] Nh\u1eadn t\u00edn hi\u1ec7u ${$signal$$}. \u0110ang ti\u1ebfn h\u00e0nh t\u1eaft h\u1ec7 th\u1ed1ng an to\u00e0n...`);global.accessLogBuffer&&typeof global.accessLogBuffer.flush==="function"&&(Logger.info("[app] \u0110ang flush n\u1ed1t log buffer..."),await global.accessLogBuffer.flush());
23
+ if(global.mongoose&&global.mongoose.connection.readyState===1)try{await global.mongoose.disconnect(),Logger.info("[app] \u0110\u00e3 ng\u1eaft k\u1ebft n\u1ed1i MongoDB an to\u00e0n.")}catch($dbErr$$){Logger.error("[app] L\u1ed7i khi ng\u1eaft k\u1ebft n\u1ed1i MongoDB:",$dbErr$$.message)}if(global.sharedRedisConnection)try{await global.sharedRedisConnection.quit(),Logger.info("[app] \u0110\u00e3 ng\u1eaft k\u1ebft n\u1ed1i Redis an to\u00e0n.")}catch($redisErr$$){Logger.error("[app] L\u1ed7i khi ng\u1eaft k\u1ebft n\u1ed1i Redis:",
24
+ $redisErr$$.message)}Logger.info("[app] H\u1ec7 th\u1ed1ng \u0111\u00e3 t\u1eaft ho\u00e0n to\u00e0n. Goodbye!");process.exit(0)};process.on("SIGINT",()=>gracefulShutdown("SIGINT"));process.on("SIGTERM",()=>gracefulShutdown("SIGTERM"));process.on("uncaughtException",function($err$jscomp$3_error$$){Logger.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);Logger.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
21
25
  Error: ${$err$jscomp$3_error$$.message}
22
26
  Stack: ${$err$jscomp$3_error$$.stack}
23
27
  `;try{const $logDirectory$$=__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);fs.writeFile(`${$logDirectory$$}/error-${(new Date).getTime()}.txt`,$err$jscomp$3_error$$,()=>{Logger.info("[app] wrote log error")})}catch($e$$){Logger.info($e$$)}process.exit(1)});module.exports=mainServer;
@@ -3,9 +3,9 @@ async function getDomainConfig($origin$$){var $cached_data$$=domainCache.get($or
3
3
  {data:$cached_data$$,expiresAt:Date.now()+DOMAIN_CACHE_TTL_MS});return $cached_data$$}function getClientIp($raw_req$$){const $xff$$=$raw_req$$.headers["x-forwarded-for"];$raw_req$$=$raw_req$$.ip||($xff$$?$xff$$.split(",")[0].trim():void 0)||$raw_req$$.socket&&$raw_req$$.socket.remoteAddress||"unknown";return $raw_req$$.startsWith("::ffff:")?$raw_req$$.slice(7):$raw_req$$}
4
4
  function getOrigin($raw$jscomp$1_req$$){$raw$jscomp$1_req$$=($raw$jscomp$1_req$$.headers.origin||$raw$jscomp$1_req$$.headers.referer||"").toString().trim();if(!$raw$jscomp$1_req$$)return"";try{return(new URL(/^https?:\/\//i.test($raw$jscomp$1_req$$)?$raw$jscomp$1_req$$:`https://${$raw$jscomp$1_req$$}`)).hostname.toLowerCase().replace(/^www\./,"")}catch($e$$){return""}}
5
5
  function parseTrustDomains(){return((global.configs||{}).trust_domains||"").toString().toLowerCase().split(",").map($d$$=>$d$$.trim()).filter(Boolean)}
6
- async function resolvePoints($req$$,$origin$$,$domainConfig_trustKey$$,$totalPoints$$,$keyPrefix$$){var $penaltyPoints_trustDomains$$=parseTrustDomains();if($penaltyPoints_trustDomains$$.includes($origin$$))return{points:1};const $trustKeys$$=(global.configs||{}).trust_keys||[];if($trustKeys$$.length>0&&$trustKeys$$.includes($domainConfig_trustKey$$))return{points:1};if($domainConfig_trustKey$$=await getDomainConfig($origin$$))return $domainConfig_trustKey$$.not_allow?{blocked:!0}:{points:$domainConfig_trustKey$$.points||
7
- 1};if($penaltyPoints_trustDomains$$.length===0&&$trustKeys$$.length===0)return{points:1};$penaltyPoints_trustDomains$$=Math.max(1,Math.round($totalPoints$$/2));Logger.warn("[rateLimiter] untrusted origin, higher point cost",{keyPrefix:$keyPrefix$$,origin:$origin$$,points:$penaltyPoints_trustDomains$$,totalPoints:$totalPoints$$,originalUrl:$req$$.originalUrl});return{points:$penaltyPoints_trustDomains$$}}
6
+ async function resolvePoints($req$$,$origin$$,$trustKey$$,$totalPoints$$,$keyPrefix$$){var $penaltyPoints_trustDomains$$=parseTrustDomains();if($penaltyPoints_trustDomains$$.includes($origin$$))return{points:1};const $trustKeys$$=(global.configs||{}).trust_keys||[];if($trustKeys$$.length>0&&$trustKeys$$.includes($trustKey$$))return{points:1};const $domainConfig$$=await getDomainConfig($origin$$);if($domainConfig$$)return $domainConfig$$.not_allow?{blocked:!0}:{points:$domainConfig$$.points||1};if($penaltyPoints_trustDomains$$.length===
7
+ 0&&$trustKeys$$.length===0)return{points:1};$penaltyPoints_trustDomains$$=Math.max(1,Math.round($totalPoints$$/2));Logger.warn("[rateLimiter] untrusted origin, higher point cost",{keyPrefix:$keyPrefix$$,origin:$origin$$,trustKeys:$trustKeys$$,trustKey:$trustKey$$,points:$penaltyPoints_trustDomains$$,totalPoints:$totalPoints$$,originalUrl:$req$$.originalUrl});return{points:$penaltyPoints_trustDomains$$}}
8
8
  const createRateLimiterMiddleware=async($blockDuration_config$$,$keyPrefix$$)=>{const $totalPoints$$=$blockDuration_config$$.points||1E3,$duration$$=$blockDuration_config$$.duration||1;$blockDuration_config$$=$blockDuration_config$$.blockDuration||0;const $insuranceLimiter$$=new RateLimiterMemory({points:$totalPoints$$,duration:$duration$$,blockDuration:$blockDuration_config$$}),$limiter$$=new RateLimiterRedis({keyPrefix:$keyPrefix$$,storeClient:global.clientRedis,points:$totalPoints$$,duration:$duration$$,
9
- blockDuration:$blockDuration_config$$,inMemoryBlockOnConsumed:$totalPoints$$+1,inMemoryBlockDuration:10,insuranceLimiter:$insuranceLimiter$$});return async function($req$$,$res$$,$next$$){let $key$$,$points$$;try{const $origin$$=getOrigin($req$$),$trustKey$$=($req$$.headers["x-trust-key"]||$req$$.query.trustkey||$req$$.query.trust_key||"").toString(),$resolved$$=await resolvePoints($req$$,$origin$$,$trustKey$$,$totalPoints$$,$keyPrefix$$);if($resolved$$.blocked)return $res$$.status(400).send({error:"Access is not allowed"});
9
+ blockDuration:$blockDuration_config$$,inMemoryBlockOnConsumed:$totalPoints$$+1,inMemoryBlockDuration:10,insuranceLimiter:$insuranceLimiter$$});return async function($req$$,$res$$,$next$$){let $key$$,$points$$;try{const $origin$$=getOrigin($req$$),$trustKey$$=($req$$.headers["x-trust-key"]||$req$$.headers["X-Trust-Key"]||$req$$.query.trustkey||$req$$.query.trust_key||"").toString(),$resolved$$=await resolvePoints($req$$,$origin$$,$trustKey$$,$totalPoints$$,$keyPrefix$$);if($resolved$$.blocked)return $res$$.status(400).send({error:"Access is not allowed"});
10
10
  $points$$=$resolved$$.points;$key$$=getClientIp($req$$);$req$$.user&&($key$$=`${$key$$}-${$req$$.user.email}`);$key$$=`${$key$$}-${$origin$$||"unknown"}-${$trustKey$$||"untrustkey"}`}catch($e$$){return Logger.error("[rateLimiter] failed to prepare key/points",$keyPrefix$$,$e$$),$next$$()}try{return await $limiter$$.consume($key$$,$points$$),$next$$()}catch($err$$){if($err$$ instanceof Error)return Logger.error("[rateLimiter] infra error",$keyPrefix$$,$err$$),$next$$();$req$$=Math.ceil(($err$$.msBeforeNext||
11
11
  1E3)/1E3);$res$$.set("Retry-After",String($req$$));return $res$$.status(429).send({error:"Too Many Requests. Please try again later",retryAfter:$req$$})}}};module.exports={createRateLimiterMiddleware};
@@ -1,29 +1,29 @@
1
- const EventEmitter=require("events").EventEmitter,_=require("lodash"),ckvt=require("../libs/ckvt"),OptionsModel=global.getModel("options"),Approve=global.getModel("approve"),trangthai=global.getModel("trangthai"),Participant=global.getModel("participant"),async=require("async"),crypto=require("crypto"),permission=require("../libs/permission"),utils=require("../libs/utils"),templatevoucher=global.getModel("templatevoucher"),{evalute}=require("../libs/utils"),redisCache=require("../libs/redis-cache"),
2
- dmqddvt=global.getModel("dmqddvt"),{executeInTransaction,runWithoutSession}=require("../libs/sessionContext.js"),importHandler=require("./importHandler"),viewHandler=require("./viewHandler"),{buildJsonSchema}=require("../libs/docs"),{bodyToJson,ERRORS,getNextSequence,asyncPostData,pushNotification,runWebhooks}=require("./controllerUtils"),handlers=require("./handlers");global.__schemaCache=global.__schemaCache||new Map;
1
+ const EventEmitter=require("events").EventEmitter,_=require("lodash"),ckvt=require("../libs/ckvt"),OptionsModel=global.getModel("options"),Approve=global.getModel("approve"),trangthai=global.getModel("trangthai"),Participant=global.getModel("participant"),crypto=require("crypto"),permission=require("../libs/permission"),utils=require("../libs/utils"),templatevoucher=global.getModel("templatevoucher"),{evalute}=require("../libs/utils"),redisCache=require("../libs/redis-cache"),dmqddvt=global.getModel("dmqddvt"),
2
+ {executeInTransaction,runWithoutSession}=require("../libs/sessionContext.js"),importHandler=require("./importHandler"),viewHandler=require("./viewHandler"),{buildJsonSchema}=require("../libs/docs"),{bodyToJson,ERRORS,getNextSequence,asyncPostData,pushNotification,runWebhooks}=require("./controllerUtils"),handlers=require("./handlers");global.__schemaCache=global.__schemaCache||new Map;
3
3
  class controller{constructor($router$$,$model$$,$name$$,$options$$={isVoucher:void 0,sort:void 0,check_stock:void 0,unique:void 0,require_id_app:void 0,notNeedRight:void 0,onPopulate:void 0}){this.module=this.name=$name$$;this.model=$model$$;this.model_name=$model$$.modelName.toLowerCase();this.router=$router$$;global.controllers[$name$$.trim().toUpperCase()]=this;$options$$.findExact||($options$$.findExact={});this.keyValues=$options$$.keyValues;this.keyValues||(this.keyValues={});$options$$.require_id_app===
4
4
  void 0||$options$$.require_id_app===!0?(this.require_id_app=!0,this.route_name=`/:id_app/${this.module}`):(this.require_id_app=!1,this.route_name=`/${this.module}`);this.collection_name=$options$$.collection_name?$options$$.collection_name:$name$$;this.isVoucher=$options$$.isVoucher;this.sort=$options$$.sort;this.unique=$options$$.unique;this.getting=$options$$.onGetting;this.finding=$options$$.onFinding;this.found=$options$$.onFound;this.validating=$options$$.onValidating;this.saving=$options$$.onSaving;
5
5
  this.creating=$options$$.onCreating;this.created=$options$$.onCreated;this.updating=$options$$.onUpdating;this.updated=$options$$.onUpdated;this.deleting=$options$$.onDeleting;this.deleted=$options$$.onDeleted;this.approveData=$options$$.approveData;this.populate=$options$$.onPopulate;this.view=$options$$.onView;this.viewRequired=$options$$.onViewRequired;this.cache=$options$$.cache;this.excelParse=$options$$.onExcelParse;this.options=$options$$;this.replaceIfExists=$options$$.replaceIfExists}async getJsonSchema($id_app_schema$$){let $configCacheKey$$=
6
6
  `${this.name}_${$id_app_schema$$}`;if(global.__schemaCache&&global.__schemaCache.has($configCacheKey$$)){var $cachedData_listinfo$$=global.__schemaCache.get($configCacheKey$$);if(Date.now()-$cachedData_listinfo$$.timestamp<(global.CONFIG_CACHE_TTL||36E5))return $cachedData_listinfo$$.schema;global.__schemaCache.delete($configCacheKey$$)}$cachedData_listinfo$$=await global.getModel("listinfo").findOne({code:this.name.trim().toLowerCase()}).lean();if(!$cachedData_listinfo$$)return Logger.info("[Controller][getJsonSchema] kh\u00f4ng t\u00ecm th\u1ea5y schema v\u1edbi listinfo_code",
7
7
  this.name.trim().toLowerCase()),null;$id_app_schema$$=await buildJsonSchema($cachedData_listinfo$$.fields||[],void 0,$id_app_schema$$);global.__schemaCache.set($configCacheKey$$,{timestamp:Date.now(),schema:$id_app_schema$$});return $id_app_schema$$}async asyncView($user$$,$items$$,$options$$){const $self$$=this;return new Promise($resolve$$=>{$self$$.onView($user$$,$items$$,($error$$,$rs$$)=>{if($error$$)return Logger.error($error$$),$resolve$$($items$$);$resolve$$($rs$$)},$options$$)})}async onView($user$$,
8
- $rows$$,$next$$,$options$$){viewHandler($user$$,this,$rows$$,$next$$,$options$$)}async notNeedRight($user$$,$_options$$={}){let $nnr$$=this.options.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=$nnr$$($user$$,$_options$$));return $nnr$$}getProperty($name$$){return this[$name$$]}getNextId(){let $ma_ct$$=this.name;this.router.route(`${this.route_name}/next/:field`).get(($field_req$$,$res$$)=>{let $id_app$$=$field_req$$.user.current_id_app;$field_req$$=$field_req$$.params.field;$field_req$$==="so_ct"?$res$$.send({[$field_req$$]:$ma_ct$$}):
9
- getNextSequence($id_app$$,$ma_ct$$,$field_req$$,($e$$,$rs$$)=>{if($e$$)return Logger.error("getNextId",$e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});$res$$.send($rs$$)})})}async checkData($appInfo$$,$data$$,$fn$$){const $options$$=this.options;if($data$$.trang_thai&&$data$$.ma_ct){let $tt$$=await trangthai.findOne({ma_ct:$data$$.ma_ct,ma_trang_thai:$data$$.trang_thai},{check_data:1}).lean();if($tt$$&&$tt$$.check_data==0)return $fn$$()}async.series({checkTonKho:$callback$$=>
10
- {$data$$.details&&$appInfo$$&&$appInfo$$.options&&$appInfo$$.options.khong_xuat_kho_am&&$options$$.check_stock!=0?(async()=>{let $details$$=$data$$.details.filter($d$$=>$d$$.ma_vt&&$d$$.sl_xuat);await $details$$.asyncJoinModel2($appInfo$$._id,"dmvt",{where:{ma_vt:"ma_vt"},fields:["tg_tk","kg_kiem_tra_ton_kho","kg_kiem_tra_ton_kho_tt",{cb:"combo"},"ten_vt"]});$details$$.forEach($d$$=>{!$d$$.combo&&$d$$.cb&&($d$$.combo=$d$$.cb)});$details$$=$details$$.filter($d$$=>$d$$.tg_tk&&!$d$$.kg_kiem_tra_ton_kho||
11
- ($d$$.combo||[]).length>0);$details$$=$details$$.map($detail$$=>$detail$$.combo&&$detail$$.combo.length>0?$detail$$.combo.map($c$$=>{$c$$=$c$$.toObject?utils.convertObjectIdsToStrings($c$$.toObject()):{...$c$$};$c$$.sl_xuat*=$detail$$.sl_xuat;$c$$.ma_kho=$detail$$.ma_kho;return $c$$}):[$detail$$]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);await $details$$.asyncJoinModel2($appInfo$$._id,dmqddvt,{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:"ty_le_qd"});let $data_sokho$$=[];$data$$._id&&($data_sokho$$=
12
- await global.getModel("sokho").find({id_ct:$data$$._id.toString(),id_app:$appInfo$$._id}).lean());$details$$.forEach($d$$=>{$d$$.he_so_qd=$d$$.ty_le_qd||1;$d$$.sl_xuat_qd=$d$$.he_so_qd*$d$$.sl_xuat});$details$$=await $details$$.asyncGroupBy(["ma_vt","ma_kho","ten_vt"],["sl_xuat_qd"]);async.map($details$$,($d$$,$callback$$)=>{let $ma_kho$$=$d$$.ma_kho||$data$$.ma_kho||$data$$.ma_kho_x,$query$$={ma_vt:$d$$.ma_vt,ma_kho:$ma_kho$$,ngay:new Date,id_app:$appInfo$$._id};$d$$.kg_kiem_tra_ton_kho_tt||($d$$.ma_lo&&
13
- ($query$$.ma_lo=$d$$.ma_lo),$d$$.han_sd&&($query$$.han_sd=$d$$.han_sd),$d$$.ma_tt1&&($query$$.ma_tt1=$d$$.ma_tt1),$d$$.ma_tt2&&($query$$.ma_tt2=$d$$.ma_tt2),$d$$.ma_tt3&&($query$$.ma_tt3=$d$$.ma_tt3));ckvt($query$$,function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$?($e$$=$rs$$.csum("ton"),$rs$$=$data_sokho$$.filter($s$$=>$s$$.ma_vt===$d$$.ma_vt&&$s$$.ma_kho===$ma_kho$$).reduce(($a$$,$b$$)=>($a$$.sl_xuat_qd||0)+($b$$.sl_xuat_qd||0),0),$d$$.sl_xuat_qd>utils.round($e$$+$rs$$,2)?$callback$$(`S\u1ea3n ph\u1ea9m ${$d$$.ma_vt} - ${$d$$.ten_vt} c\u00f3 s\u1ed1 l\u01b0\u1ee3ng xu\u1ea5t quy \u0111\u1ed5i (${$d$$.sl_xuat_qd}) l\u1edbn h\u01a1n s\u1ed1 l\u01b0\u1ee3ng t\u1ed3n quy \u0111\u1ed5i (${$e$$+
14
- $rs$$})`):$callback$$()):$callback$$()})},$e$$=>{$callback$$($e$$)})})():$callback$$()}},$e$$=>{$fn$$($e$$)})}async cacheData($obj$$,$callback$$){$obj$$&&$obj$$.toObject&&($obj$$=utils.convertObjectIdsToStrings($obj$$.toObject()));await redisCache.set(this.model_name,$obj$$,$callback$$)}async deleteData($obj$$,$callback$$){$obj$$&&$obj$$.toObject&&($obj$$=utils.convertObjectIdsToStrings($obj$$.toObject()));await redisCache.remove(this.model_name,$obj$$,$callback$$)}createRoute($routeName$$,$handler_routeAction$$,
15
- $_options$$={method:"GET",not_use_worker:!1,action_code:"view"}){const $self$$=this;$_options$$.method=$_options$$.method?$_options$$.method.toUpperCase():"GET";const $route_action_key$$=`route_action_${$self$$.name}_${$routeName$$}_${$_options$$.method}`;$self$$[$route_action_key$$]=$handler_routeAction$$;$handler_routeAction$$=async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),
16
- $ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"createRouteHandler",routeName:$routeName$$,_options:$_options$$,route_action_key:$route_action_key$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};global.inputMainPool&&!$_options$$.not_use_worker?global.inputMainPool.exec({req:$_req$$,module:$self$$.name.toUpperCase(),configs:JSON.stringify(configs)},
17
- $response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error});$res$$.send($response$$.result)}):handlers.createRouteHandler($self$$,$_req$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}};let $url$$=`${this.route_name}/${$routeName$$}`,$router$$=
18
- this.router;$_options$$.method=="DELETE"?$router$$.route($url$$).delete($handler_routeAction$$):$_options$$.method=="POST"?$router$$.route($url$$).post($handler_routeAction$$):$_options$$.method=="PUT"?$router$$.route($url$$).put($handler_routeAction$$):$router$$.route($url$$).get($handler_routeAction$$)}async requestApprove($app_info_listinfo_code$$,$user_request$$,$obj_request$$,$next$$,$str_func$jscomp$2_str_func$$,$preRequest$$){let $ctrl$$=this;if(!$app_info_listinfo_code$$)return $next$$(null,
19
- $obj_request$$);let $obj$$;$obj$$=$obj_request$$.toObject?utils.convertObjectIdsToStrings($obj_request$$.toObject()):_.cloneDeep($obj_request$$);$obj$$.ma_ct=$obj$$.ma_ct||$ctrl$$.name;let $approveDatas$$=[];$app_info_listinfo_code$$=$obj$$.listinfo_code||$ctrl$$.name;$str_func$jscomp$2_str_func$$||($str_func$jscomp$2_str_func$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$app_info_listinfo_code$$},{option:1}).lean()||{}).option);$str_func$jscomp$2_str_func$$&&$str_func$jscomp$2_str_func$$.custom_approve_user&&
20
- $str_func$jscomp$2_str_func$$.custom_approve_user.forEach($trang_thai_approve$$=>{let $update_after_approve$$,$update_after_deny$$;if($trang_thai_approve$$.update_after_approve)try{let $str_func$$=$trang_thai_approve$$.update_after_approve;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);$update_after_approve$$=evalute($str_func$$)}catch($e$$){Logger.error("[controller][requestApprove] request approve",$e$$,$trang_thai_approve$$.update_after_approve),$update_after_approve$$=
21
- {}}else $update_after_approve$$={};$trang_thai_approve$$.update_after_approve={module:$ctrl$$.name,cho_phep_cap_nhat_khi_da_duyet:$trang_thai_approve$$.cho_phep_cap_nhat_khi_da_duyet,data:{trang_thai:$trang_thai_approve$$.trang_thai2,...($update_after_approve$$.data||{})}};if($trang_thai_approve$$.update_after_deny)try{let $str_func$$=$trang_thai_approve$$.update_after_deny;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);$update_after_deny$$=evalute($str_func$$)}catch($e$$){Logger.error("request approve",
22
- $e$$)}if($update_after_deny$$||$trang_thai_approve$$.trang_thai3)$trang_thai_approve$$.update_after_deny={module:$ctrl$$.name,data:{trang_thai:$trang_thai_approve$$.trang_thai3,...(($update_after_deny$$||{}).data||{})}};$approveDatas$$.push($trang_thai_approve$$)});$approveDatas$$=$approveDatas$$.filter($approveData_condition$$=>{$approveData_condition$$=$approveData_condition$$.condition;if(!$approveData_condition$$)return!0;$approveData_condition$$.indexOf("return ")<0&&($approveData_condition$$=
23
- `return ${$approveData_condition$$}`);try{return evalute($approveData_condition$$,{master:$obj$$,data:$obj$$})}catch($e$$){return Logger.error("check condition approve",$e$$,$approveData_condition$$),!1}});try{for(let $approveData$$ of $approveDatas$$.filter($a$$=>$a$$.approve_users||$a$$.approve_users_custom||$a$$.approve_phu_trach_bp)){let $title$$=$approveData$$.title||"Y\u00eau c\u1ea7u duy\u1ec7t";if($title$$.indexOf("return ")>=0){$str_func$jscomp$2_str_func$$=$title$$;try{$title$$=evalute($str_func$jscomp$2_str_func$$,
24
- {master:$obj$$,data:$obj$$})}catch($e$$){Logger.error("request approve",$e$$,$str_func$jscomp$2_str_func$$)}}let $ds_nguoi_duyet$$=$approveData$$.approve_users,$update_after_approve$$=$approveData$$.update_after_approve,$update_after_deny$$=$approveData$$.update_after_deny;if(_.isString($ds_nguoi_duyet$$))try{if($str_func$jscomp$2_str_func$$=$ds_nguoi_duyet$$,$str_func$jscomp$2_str_func$$.indexOf("return ")<0&&($str_func$jscomp$2_str_func$$=`return ${$str_func$jscomp$2_str_func$$}`),$ds_nguoi_duyet$$=
25
- evalute($str_func$jscomp$2_str_func$$,{master:$obj$$,data:$obj$$,preRequest:$preRequest$$}),!_.isArray($ds_nguoi_duyet$$)){Logger.error("danh s\u00e1ch ng\u01b0\u1eddi duy\u1ec7t ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng, hi\u1ec7n t\u1ea1i \u0111ang l\u00e0",$ds_nguoi_duyet$$);return}}catch($e$$){Logger.error("request approve",$e$$,$ds_nguoi_duyet$$);return}if($approveData$$.approve_phu_trach_bp&&$obj$$.ma_nv){let $nv$$=await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,ma_nv:$obj$$.ma_nv},{ma_bp:1}).lean();
26
- if($nv$$?.ma_bp){let $bp$$=await global.getModel("dmbp").findOne({id_app:$obj$$.id_app,ma_bp:$nv$$?.ma_bp},{phu_trach:1}).lean();$bp$$?.phu_trach&&$ds_nguoi_duyet$$.push($bp$$?.phu_trach)}}if($approveData$$.approve_users_custom)try{let $str_func$$=$approveData$$.approve_users_custom;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);let $ds_nguoi_duyet_custom$$=await evalute(`return (async ()=>{
8
+ $rows$$,$next$$,$options$$){viewHandler($user$$,this,$rows$$,$next$$,$options$$)}async notNeedRight($user$$,$_options$$={}){let $nnr$$=this.options.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=$nnr$$($user$$,$_options$$));return $nnr$$}getProperty($name$$){return this[$name$$]}getNextId(){let $ma_ct$$=this.name;this.router.route(`${this.route_name}/next/:field`).get(async($req$$,$res$$)=>{try{let $id_app$$=$req$$.user.current_id_app,$field$$=$req$$.params.field;if($field$$==="so_ct")return $res$$.send({[$field$$]:$ma_ct$$});
9
+ const $rs$$=await getNextSequence($id_app$$,$ma_ct$$,$field$$);$res$$.send($rs$$)}catch($e$$){return Logger.error("getNextId",$e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$})}})}async checkData($appInfo$$,$data$$,$fn$$){const $options$$=this.options;try{if($data$$.trang_thai&&$data$$.ma_ct){let $tt$$=await trangthai.findOne({ma_ct:$data$$.ma_ct,ma_trang_thai:$data$$.trang_thai},{check_data:1}).lean();if($tt$$&&$tt$$.check_data==0)return $fn$$()}if($data$$.details&&
10
+ $appInfo$$&&$appInfo$$.options&&$appInfo$$.options.khong_xuat_kho_am&&$options$$.check_stock!=0){let $details$$=$data$$.details.filter($d$$=>$d$$.ma_vt&&$d$$.sl_xuat);await $details$$.asyncJoinModel2($appInfo$$._id,"dmvt",{where:{ma_vt:"ma_vt"},fields:["tg_tk","kg_kiem_tra_ton_kho","kg_kiem_tra_ton_kho_tt",{cb:"combo"},"ten_vt"]});$details$$.forEach($d$$=>{!$d$$.combo&&$d$$.cb&&($d$$.combo=$d$$.cb)});$details$$=$details$$.filter($d$$=>$d$$.tg_tk&&!$d$$.kg_kiem_tra_ton_kho||($d$$.combo||[]).length>
11
+ 0);$details$$=$details$$.map($detail$$=>$detail$$.combo&&$detail$$.combo.length>0?$detail$$.combo.map($c$$=>{$c$$=$c$$.toObject?utils.convertObjectIdsToStrings($c$$.toObject()):{...$c$$};$c$$.sl_xuat*=$detail$$.sl_xuat;$c$$.ma_kho=$detail$$.ma_kho;return $c$$}):[$detail$$]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);await $details$$.asyncJoinModel2($appInfo$$._id,dmqddvt,{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:"ty_le_qd"});let $data_sokho$$=[];$data$$._id&&($data_sokho$$=await global.getModel("sokho").find({id_ct:$data$$._id.toString(),
12
+ id_app:$appInfo$$._id}).lean());$details$$.forEach($d$$=>{$d$$.he_so_qd=$d$$.ty_le_qd||1;$d$$.sl_xuat_qd=$d$$.he_so_qd*$d$$.sl_xuat});$details$$=await $details$$.asyncGroupBy(["ma_vt","ma_kho","ten_vt"],["sl_xuat_qd"]);await Promise.all($details$$.map($d$$=>new Promise(($resolve$$,$reject$$)=>{let $ma_kho$$=$d$$.ma_kho||$data$$.ma_kho||$data$$.ma_kho_x,$query$$={ma_vt:$d$$.ma_vt,ma_kho:$ma_kho$$,ngay:new Date,id_app:$appInfo$$._id};$d$$.kg_kiem_tra_ton_kho_tt||($d$$.ma_lo&&($query$$.ma_lo=$d$$.ma_lo),
13
+ $d$$.han_sd&&($query$$.han_sd=$d$$.han_sd),$d$$.ma_tt1&&($query$$.ma_tt1=$d$$.ma_tt1),$d$$.ma_tt2&&($query$$.ma_tt2=$d$$.ma_tt2),$d$$.ma_tt3&&($query$$.ma_tt3=$d$$.ma_tt3));ckvt($query$$,function($e$$,$rs$$){if($e$$)return $reject$$($e$$);if($rs$$&&($e$$=$rs$$.csum("ton"),$rs$$=$data_sokho$$.filter($s$$=>$s$$.ma_vt===$d$$.ma_vt&&$s$$.ma_kho===$ma_kho$$).reduce(($a$$,$b$$)=>($a$$.sl_xuat_qd||0)+($b$$.sl_xuat_qd||0),0),$d$$.sl_xuat_qd>utils.round($e$$+$rs$$,2)))return $reject$$(`S\u1ea3n ph\u1ea9m ${$d$$.ma_vt} - ${$d$$.ten_vt} c\u00f3 s\u1ed1 l\u01b0\u1ee3ng xu\u1ea5t quy \u0111\u1ed5i (${$d$$.sl_xuat_qd}) l\u1edbn h\u01a1n s\u1ed1 l\u01b0\u1ee3ng t\u1ed3n quy \u0111\u1ed5i (${$e$$+
14
+ $rs$$})`);$resolve$$()})})))}$fn$$()}catch($e$$){$fn$$($e$$)}}async cacheData($obj$$,$callback$$){$obj$$&&$obj$$.toObject&&($obj$$=utils.convertObjectIdsToStrings($obj$$.toObject()));await redisCache.set(this.model_name,$obj$$,$callback$$)}async deleteData($obj$$,$callback$$){$obj$$&&$obj$$.toObject&&($obj$$=utils.convertObjectIdsToStrings($obj$$.toObject()));await redisCache.remove(this.model_name,$obj$$,$callback$$)}createRoute($routeName$$,$handler_routeAction$$,$_options$$={method:"GET",not_use_worker:!1,
15
+ action_code:"view"}){const $self$$=this;$_options$$.method=$_options$$.method?$_options$$.method.toUpperCase():"GET";const $route_action_key$$=`route_action_${$self$$.name}_${$routeName$$}_${$_options$$.method}`;$self$$[$route_action_key$$]=$handler_routeAction$$;$handler_routeAction$$=async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||
16
+ $req$$.connection.remoteAddress;try{const $_req$$={handler:"createRouteHandler",routeName:$routeName$$,_options:$_options$$,route_action_key:$route_action_key$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};global.inputMainPool&&!$_options$$.not_use_worker?global.inputMainPool.exec({req:$_req$$,module:$self$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||
17
+ $response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error});$res$$.send($response$$.result)}):handlers.createRouteHandler($self$$,$_req$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}};let $url$$=`${this.route_name}/${$routeName$$}`,$router$$=this.router;$_options$$.method=="DELETE"?$router$$.route($url$$).delete($handler_routeAction$$):
18
+ $_options$$.method=="POST"?$router$$.route($url$$).post($handler_routeAction$$):$_options$$.method=="PUT"?$router$$.route($url$$).put($handler_routeAction$$):$router$$.route($url$$).get($handler_routeAction$$)}async requestApprove($app_info_listinfo_code$$,$user_request$$,$obj_request$$,$next$$,$str_func$jscomp$2_str_func$$,$preRequest$$){let $ctrl$$=this;if(!$app_info_listinfo_code$$)return $next$$(null,$obj_request$$);let $obj$$;$obj$$=$obj_request$$.toObject?utils.convertObjectIdsToStrings($obj_request$$.toObject()):
19
+ _.cloneDeep($obj_request$$);$obj$$.ma_ct=$obj$$.ma_ct||$ctrl$$.name;let $approveDatas$$=[];$app_info_listinfo_code$$=$obj$$.listinfo_code||$ctrl$$.name;$str_func$jscomp$2_str_func$$||($str_func$jscomp$2_str_func$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$app_info_listinfo_code$$},{option:1}).lean()||{}).option);$str_func$jscomp$2_str_func$$&&$str_func$jscomp$2_str_func$$.custom_approve_user&&$str_func$jscomp$2_str_func$$.custom_approve_user.forEach($trang_thai_approve$$=>{let $update_after_approve$$,
20
+ $update_after_deny$$;if($trang_thai_approve$$.update_after_approve)try{let $str_func$$=$trang_thai_approve$$.update_after_approve;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);$update_after_approve$$=evalute($str_func$$)}catch($e$$){Logger.error("[controller][requestApprove] request approve",$e$$,$trang_thai_approve$$.update_after_approve),$update_after_approve$$={}}else $update_after_approve$$={};$trang_thai_approve$$.update_after_approve={module:$ctrl$$.name,cho_phep_cap_nhat_khi_da_duyet:$trang_thai_approve$$.cho_phep_cap_nhat_khi_da_duyet,
21
+ data:{trang_thai:$trang_thai_approve$$.trang_thai2,...($update_after_approve$$.data||{})}};if($trang_thai_approve$$.update_after_deny)try{let $str_func$$=$trang_thai_approve$$.update_after_deny;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);$update_after_deny$$=evalute($str_func$$)}catch($e$$){Logger.error("request approve",$e$$)}if($update_after_deny$$||$trang_thai_approve$$.trang_thai3)$trang_thai_approve$$.update_after_deny={module:$ctrl$$.name,data:{trang_thai:$trang_thai_approve$$.trang_thai3,
22
+ ...(($update_after_deny$$||{}).data||{})}};$approveDatas$$.push($trang_thai_approve$$)});$approveDatas$$=$approveDatas$$.filter($approveData_condition$$=>{$approveData_condition$$=$approveData_condition$$.condition;if(!$approveData_condition$$)return!0;$approveData_condition$$.indexOf("return ")<0&&($approveData_condition$$=`return ${$approveData_condition$$}`);try{return evalute($approveData_condition$$,{master:$obj$$,data:$obj$$})}catch($e$$){return Logger.error("check condition approve",$e$$,$approveData_condition$$),
23
+ !1}});try{for(let $approveData$$ of $approveDatas$$.filter($a$$=>$a$$.approve_users||$a$$.approve_users_custom||$a$$.approve_phu_trach_bp)){let $title$$=$approveData$$.title||"Y\u00eau c\u1ea7u duy\u1ec7t";if($title$$.indexOf("return ")>=0){$str_func$jscomp$2_str_func$$=$title$$;try{$title$$=evalute($str_func$jscomp$2_str_func$$,{master:$obj$$,data:$obj$$})}catch($e$$){Logger.error("request approve",$e$$,$str_func$jscomp$2_str_func$$)}}let $ds_nguoi_duyet$$=$approveData$$.approve_users,$update_after_approve$$=
24
+ $approveData$$.update_after_approve,$update_after_deny$$=$approveData$$.update_after_deny;if(_.isString($ds_nguoi_duyet$$))try{if($str_func$jscomp$2_str_func$$=$ds_nguoi_duyet$$,$str_func$jscomp$2_str_func$$.indexOf("return ")<0&&($str_func$jscomp$2_str_func$$=`return ${$str_func$jscomp$2_str_func$$}`),$ds_nguoi_duyet$$=evalute($str_func$jscomp$2_str_func$$,{master:$obj$$,data:$obj$$,preRequest:$preRequest$$}),!_.isArray($ds_nguoi_duyet$$)){Logger.error("danh s\u00e1ch ng\u01b0\u1eddi duy\u1ec7t ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng, hi\u1ec7n t\u1ea1i \u0111ang l\u00e0",
25
+ $ds_nguoi_duyet$$);return}}catch($e$$){Logger.error("request approve",$e$$,$ds_nguoi_duyet$$);return}if($approveData$$.approve_phu_trach_bp&&$obj$$.ma_nv){let $nv$$=await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,ma_nv:$obj$$.ma_nv},{ma_bp:1}).lean();if($nv$$?.ma_bp){let $bp$$=await global.getModel("dmbp").findOne({id_app:$obj$$.id_app,ma_bp:$nv$$?.ma_bp},{phu_trach:1}).lean();$bp$$?.phu_trach&&$ds_nguoi_duyet$$.push($bp$$?.phu_trach)}}if($approveData$$.approve_users_custom)try{let $str_func$$=
26
+ $approveData$$.approve_users_custom;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);let $ds_nguoi_duyet_custom$$=await evalute(`return (async ()=>{
27
27
  try{
28
28
  ${$str_func$$}
29
29
  }catch(e){
@@ -32,24 +32,24 @@ if($nv$$?.ma_bp){let $bp$$=await global.getModel("dmbp").findOne({id_app:$obj$$.
32
32
  })`,{master:$obj$$,data:$obj$$,preRequest:$preRequest$$,utils})();$ds_nguoi_duyet_custom$$&&(_.isArray($ds_nguoi_duyet_custom$$)?$ds_nguoi_duyet$$=[...$ds_nguoi_duyet$$,...$ds_nguoi_duyet_custom$$]:Logger.error("[controller][requestapprove] danh s\u00e1ch ng\u01b0\u1eddi duy\u1ec7t ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng, hi\u1ec7n t\u1ea1i \u0111ang l\u00e0",$ds_nguoi_duyet_custom$$))}catch($e$$){Logger.error("[controller][requestapprove] ",$e$$,$approveData$$.approve_users_custom)}Logger.info("[controller][requestapprove] Danh sach ng\u01b0\u1eddi duy\u1ec7t \u0111\u1ea7y \u0111\u1ee7",
33
33
  $ds_nguoi_duyet$$);if($ds_nguoi_duyet$$&&$ds_nguoi_duyet$$.length!==0&&($ds_nguoi_duyet$$=[...(new Set($ds_nguoi_duyet$$))],$obj$$.trang_thai==$approveData$$.trang_thai)){let $user_approves$$=$ds_nguoi_duyet$$.map($nguoi_duyet$$=>({email:$nguoi_duyet$$,name:$nguoi_duyet$$}));await $user_approves$$.asyncJoinModel2($obj$$.id_app,Participant,{where:"email",fields:"name"});await [$user_request$$].asyncJoinModel2($obj$$.id_app,Participant,{where:"email",fields:"name"});await new Promise(($resolve$$,$reject$$)=>
34
34
  {Approve.request($user_request$$,$user_approves$$,$title$$,$obj$$,$e$$=>{if($e$$)return $reject$$($e$$);$resolve$$()},$update_after_approve$$,$approveData$$.template_content,$update_after_deny$$)})}}$next$$(null,$obj$$)}catch($e$$){$next$$($e$$)}}async import($user$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null,listinfo_code:null}){importHandler($user$$,this,$id_app$$,$data$$,$callback_main$$,$options$$)}pushNotification($_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=
35
- !1,$options$$={title:"",data:{}}){return pushNotification(this,$_obj$$,$eventName$$,$old_obj$$,$justFireEvents$$,$options$$)}}controller.prototype.__proto__=EventEmitter.prototype;controller.prototype.asyncGetNextSequence=async($id_app$$,$ma_ct$$,$field$$="so_ct",$options$$)=>new Promise($resolve$$=>{getNextSequence($id_app$$,$ma_ct$$,$field$$,($error$$,$rs$$)=>{if($error$$)return Error($error$$);$resolve$$($rs$$)},$options$$)});
36
- controller.prototype.getFieldNoRight=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/field-not-right/:fieldName`).get(async($req$$,$res$$)=>{let $fieldName$$=$req$$.params.fieldName;try{(await permission.getFieldNotRight($req$$.user.current_id_app,$req$$.user.email,$ctrl$$.name)).indexOf($fieldName$$)>=0?$res$$.send({allow:!1}):$res$$.send({allow:!0})}catch($e$$){$res$$.state(400).send($e$$.message)}})};
35
+ !1,$options$$={title:"",data:{}}){return pushNotification(this,$_obj$$,$eventName$$,$old_obj$$,$justFireEvents$$,$options$$)}}controller.prototype.__proto__=EventEmitter.prototype;controller.prototype.asyncGetNextSequence=async($id_app$$,$ma_ct$$,$field$$="so_ct",$options$$)=>getNextSequence($id_app$$,$ma_ct$$,$field$$,$options$$);
36
+ controller.prototype.getFieldNoRight=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/field-not-right/:fieldName`).get(async($req$$,$res$$)=>{let $fieldName$$=$req$$.params.fieldName;try{(await permission.getFieldNotRight($req$$.user.current_id_app,$req$$.user.email,$ctrl$$.name)).indexOf($fieldName$$)>=0?$res$$.send({allow:!1}):$res$$.send({allow:!0})}catch($e$$){$res$$.status(400).send($e$$.message)}})};
37
37
  controller.prototype.find=function($_route_name_route_name$$,$shareRoute$$=!1,$method$$="GET"){let $ctrl$$=this;const $handlerResult$$=($res$$,$data$$)=>{const {result:$result$$,dataType:$dataType$$}=$data$$;$dataType$$=="xlsx"?($res$$.setHeader("Content-Type","application/vnd.openxmlformats"),$res$$.setHeader("Content-Disposition","attachment; filename="+$ctrl$$.name+".xlsx"),$res$$.end($result$$,"binary")):$res$$.send($result$$)},$findRoute$$=async($ip$jscomp$1_req$$,$res$$)=>{const {query:$query$$,
38
38
  body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,protocol:$protocol$$}=$ip$jscomp$1_req$$;var $_req$$=configs?.api_url||$ip$jscomp$1_req$$.get("hostName");const $user_agent$$=$ip$jscomp$1_req$$.header("user-agent");$ip$jscomp$1_req$$=$ip$jscomp$1_req$$.ip||$ip$jscomp$1_req$$.headers["x-forwarded-for"]||$ip$jscomp$1_req$$.connection.remoteAddress;try{if($_req$$={handler:"findHandler",protocol:$protocol$$,host:$_req$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
39
39
  user_agent:$user_agent$$,ip:$ip$jscomp$1_req$$,shareRoute:$shareRoute$$},global.inputMainPool){const $id_task$$=`task-find-${crypto.randomBytes(20).toString("hex")}`;global.inputMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||
40
40
  $response$$.error,code:$response$$.code});$handlerResult$$($res$$,$response$$.result)})}else handlers.findHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);$handlerResult$$($res$$,$returnvalue$$)})}catch($e$$){$res$$.status(400).send($e$$)}};$_route_name_route_name$$=$_route_name_route_name$$||this.route_name;$method$$==="GET"?(this.router.route($_route_name_route_name$$).get($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").get($findRoute$$)):
41
41
  (this.router.route($_route_name_route_name$$).post($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").post($findRoute$$))};
42
42
  controller.prototype.get=function($route_name$$,$shareRoute$$=!1){const $ctrl$$=this;this.router.route(`${$route_name$$||this.route_name}/:id`).get(async function($req$$,$res$$){let $id$$=$req$$.params.id;if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(404).send({error:ERRORS.ERR_ID_INVALID,code:ERRORS.ERR_ID_INVALID_CODE});let $body$$={_id:$id$$};const $user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,
43
- {query:$query$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$;if($ctrl$$.getting)try{await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.getting($user$$,$id$$,$e$$=>{if($e$$)return $reject$$($e$$);$resolve$$()})})}catch($e$$){return $res$$.status(400).send($e$$)}try{handlers.findHandler($ctrl$$,{query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,shareRoute:$shareRoute$$,originalUrl:$req$$.originalUrl},($e$jscomp$19_result$$,$returnvalue$$)=>
44
- {if($e$jscomp$19_result$$)return $res$$.status(400).send($e$jscomp$19_result$$);({result:$e$jscomp$19_result$$}=$returnvalue$$);if($e$jscomp$19_result$$.length==0)return $res$$.status(404).send({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});$res$$.send($e$jscomp$19_result$$[0])})}catch($e$$){Logger.error($e$$),$res$$.status(400).send($e$$)}})};
43
+ {query:$query$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$;if($ctrl$$.getting)try{await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.getting($user$$,$id$$,$e$$=>{if($e$$)return $reject$$($e$$);$resolve$$()})})}catch($e$$){return $res$$.status(400).send($e$$)}try{handlers.findHandler($ctrl$$,{query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,shareRoute:$shareRoute$$,originalUrl:$req$$.originalUrl},($e$jscomp$18_result$$,$returnvalue$$)=>
44
+ {if($e$jscomp$18_result$$)return $res$$.status(400).send($e$jscomp$18_result$$);({result:$e$jscomp$18_result$$}=$returnvalue$$);if($e$jscomp$18_result$$.length==0)return $res$$.status(404).send({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});$res$$.send($e$jscomp$18_result$$[0])})}catch($e$$){Logger.error($e$$),$res$$.status(400).send($e$$)}})};
45
45
  controller.prototype.postAgainHandler=async function($user$$,$condition$$,$callback$$,$options$$={req:null}){let $model$$=this.model,$ctrl$$=this;if(!$ctrl$$.post)return $callback$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 th\u1ef1c hi\u1ec7n xong"});const $update_tk_vt$$=$condition$$.update_tk_vt;delete $condition$$.update_tk_vt;const $user_update$$={date_updated:new Date,user_updated:$user$$.email},$objsrepost$$=await $model$$.find($condition$$).sort({ngay_ct:1}).lean();Logger.info("[postagain] start repost",
46
- $condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);async.mapSeries($objsrepost$$,function($obj$$,$callback$$){setImmediate(async()=>{await runWithoutSession(async()=>{await executeInTransaction(async()=>{Logger.info("postAgain: handle data before post",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($ctrl$$.reposting)try{await $ctrl$$.reposting($user$$,$obj$$)}catch($e$$){return $callback$$({error:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u tr\u01b0\u1edbc khi repost ch\u1ee9ng t\u1eeb:"+
47
- $obj$$.so_ct+", L\u1ed7i: "+($e$$.message||$e$$.error||"")})}$update_tk_vt$$&&$obj$$.details&&(Logger.info("postAgain: update tk_vt..."),await $obj$$.details.filter($d$$=>$d$$.ma_vt).asyncJoinModel2($obj$$.id_app,global.getModel("dmvt"),{where:"ma_vt",fields:"tk_vt"}),$user_update$$.details=$obj$$.details);try{Logger.info("postAgain: update voucher..."),await $model$$.updateOne({_id:$obj$$._id},{...$user_update$$})}catch($e$$){return Logger.error("postAgain: error update data before repost",$e$$),
48
- $callback$$({error:"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u ch\u1ee9ng t\u1eeb "+$obj$$.so_ct+",Error:"+$e$$.message||$e$$.error||""})}try{let $rs$$=await asyncPostData($obj$$,$ctrl$$,{req:$options$$.req,kiem_tra_han_muc_cong_no:!1});$callback$$(null,$rs$$)}catch($e$$){$callback$$({error:$e$$.message||$e$$.error||"Kh\u00f4ng th\u1ec3 post s\u1ed5 s\u00e1ch ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct})}})})})},function($e$$){if($e$$)return Logger.error("[postAgain]: Error",
49
- $e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});Logger.info("postAgain: finished",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);$callback$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n xong"})})};
46
+ $condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);try{for(const $obj$$ of $objsrepost$$)await runWithoutSession(async()=>{await executeInTransaction(async()=>{Logger.info("postAgain: handle data before post",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($ctrl$$.reposting)try{await $ctrl$$.reposting($user$$,$obj$$)}catch($e$$){throw{error:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u tr\u01b0\u1edbc khi repost ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct+
47
+ ", L\u1ed7i: "+($e$$.message||$e$$.error||"")};}$update_tk_vt$$&&$obj$$.details&&(Logger.info("postAgain: update tk_vt..."),await $obj$$.details.filter($d$$=>$d$$.ma_vt).asyncJoinModel2($obj$$.id_app,global.getModel("dmvt"),{where:"ma_vt",fields:"tk_vt"}),$user_update$$.details=$obj$$.details);try{Logger.info("postAgain: update voucher..."),await $model$$.updateOne({_id:$obj$$._id},{...$user_update$$})}catch($e$$){throw Logger.error("postAgain: error update data before repost",$e$$),{error:"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u ch\u1ee9ng t\u1eeb "+
48
+ $obj$$.so_ct+",Error:"+$e$$.message||$e$$.error||""};}try{await asyncPostData($obj$$,$ctrl$$,{req:$options$$.req,kiem_tra_han_muc_cong_no:!1})}catch($e$$){throw{error:$e$$.message||$e$$.error||"Kh\u00f4ng th\u1ec3 post s\u1ed5 s\u00e1ch ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct};}})})}catch($e$$){return Logger.error("[postAgain]: Error",$e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$})}Logger.info("postAgain: finished",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);$callback$$(null,
49
+ {message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n xong"})};
50
50
  controller.prototype.updateBook=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/action/postagain`).get(async($req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"updateBookHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
51
51
  user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-update-book-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",status_task:$status_task$$});
52
- global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$25_response$$=>{if($e$jscomp$25_response$$=$e$jscomp$25_response$$.error)return global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch",$e$jscomp$25_response$$.message||$e$jscomp$25_response$$.error||$e$jscomp$25_response$$,null,{id_app:$req$$.user.current_id_app},
52
+ global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$24_response$$=>{if($e$jscomp$24_response$$=$e$jscomp$24_response$$.error)return global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch",$e$jscomp$24_response$$.message||$e$jscomp$24_response$$.error||$e$jscomp$24_response$$,null,{id_app:$req$$.user.current_id_app},
53
53
  !0,$req$$.access_token,!0);global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong",null,{id_app:$req$$.user.current_id_app},!0,$req$$.access_token,!0)})}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),
54
54
  handlers.updateBookHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch",$e$$.message||$e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,$req$$.access_token,!0);global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong",
55
55
  null,{id_app:$req$$.user.current_id_app},!0,$req$$.access_token,!0)})}catch($e$$){$res$$.status(400).send($e$$)}})};
@@ -65,22 +65,22 @@ params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,originalUr
65
65
  $response$$?.result?.ext);$handlerResult$$($res$$,$response$$.result)}):handlers.exportHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);$handlerResult$$($res$$,$returnvalue$$)})}catch($e$$){$res$$.status(400).send($e$$)}};this.router.route(`${this.route_name}/excel/:rpt_id`).get($handleRoute$$);this.router.route(`${this.route_name}/export/:rpt_id`).get($handleRoute$$)};
66
66
  controller.prototype.importFromGoogleSheet=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/import/googlesheet`).get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"importFromGsHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
67
67
  user_agent:$user_agent$$,ip:$ip$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-import-google-sheet-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$_req$$.status_task=$status_task$$;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",
68
- status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$34_response$$=>{if($e$jscomp$34_response$$=$e$jscomp$34_response$$.error)return Logger.error("\u274c [importFromGoogleSheet] l\u1ed7i",$e$jscomp$34_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$34_response$$.message||$e$jscomp$34_response$$.error||
69
- $e$jscomp$34_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromGoogleSheet] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
68
+ status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$33_response$$=>{if($e$jscomp$33_response$$=$e$jscomp$33_response$$.error)return Logger.error("\u274c [importFromGoogleSheet] l\u1ed7i",$e$jscomp$33_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$33_response$$.message||$e$jscomp$33_response$$.error||
69
+ $e$jscomp$33_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromGoogleSheet] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
70
70
  !0,null,!0)},1728E5)}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),handlers.importFromGsHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return Logger.error("\u274c [importFromGoogleSheet] l\u1ed7i",$e$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$.message||
71
71
  $e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromGoogleSheet] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
72
72
  !0,null,!0)})}catch($e$$){$res$$.status(400).send($e$$)}})};
73
73
  controller.prototype.importFromJson=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/import/json`).post(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"importFromJsonHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
74
74
  user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-import-json-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$_req$$.status_task=$status_task$$;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",
75
- status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$37_response$$=>{if($e$jscomp$37_response$$=$e$jscomp$37_response$$.error)return Logger.error("\u274c [importFromJson] l\u1ed7i",$e$jscomp$37_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$37_response$$.message||$e$jscomp$37_response$$.error||
76
- $e$jscomp$37_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromJson] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
75
+ status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$36_response$$=>{if($e$jscomp$36_response$$=$e$jscomp$36_response$$.error)return Logger.error("\u274c [importFromJson] l\u1ed7i",$e$jscomp$36_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$36_response$$.message||$e$jscomp$36_response$$.error||
76
+ $e$jscomp$36_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromJson] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
77
77
  !0,null,!0)},1728E5)}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),handlers.importFromJsonHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return Logger.error("\u274c [importFromJson] l\u1ed7i",$e$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$.message||
78
78
  $e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromJson] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},!0,
79
79
  null,!0)})}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$),$res$$.status(400).send($e$$)}})};
80
80
  controller.prototype.importFromExcel=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/import/excel`).post(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"importFromExcelHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
81
81
  user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-import-excel-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$_req$$.status_task=$status_task$$;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",
82
- status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$40_response$$=>{if($e$jscomp$40_response$$=$e$jscomp$40_response$$.error)return Logger.error("\u274c [importFromExcel] l\u1ed7i",$e$jscomp$40_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$40_response$$.message||$e$jscomp$40_response$$.error||
83
- $e$jscomp$40_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromExcel] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
82
+ status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$39_response$$=>{if($e$jscomp$39_response$$=$e$jscomp$39_response$$.error)return Logger.error("\u274c [importFromExcel] l\u1ed7i",$e$jscomp$39_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$39_response$$.message||$e$jscomp$39_response$$.error||
83
+ $e$jscomp$39_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromExcel] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
84
84
  !0,null,!0)},1728E5)}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),handlers.importFromExcelHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return Logger.error("\u274c [importFromExcel] l\u1ed7i",$e$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$.message||
85
85
  $e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromExcel] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},!0,
86
86
  null,!0)})}catch($e$$){$res$$.status(400).send($e$$)}})};
@@ -113,14 +113,14 @@ controller.prototype.asyncPostData=function($obj$$,$options$$={}){Logger.info("[
113
113
  controller.prototype.route=function($setRoute$$){configs.lite||(this.history(),this.logs(),this.find("/search"+this.route_name,!1,"POST"),this.find(),this.get(),this.find(`/${this.module}/shared`,!0),this.get(`/${this.module}/shared`,!0),this.getFieldNoRight(),this.create(),this.quickCreate(),this.update(),this.delete(),this.deleteMany(),this.getNextId(),this.exportToExcel(),this.importFromExcel(),this.importFromJson(),this.importFromGoogleSheet(),this.updateField(),this.updateKey(),this.updateBook(),
114
114
  $setRoute$$&&$setRoute$$(this.router))};
115
115
  controller.prototype.findData=async function($user$$,$condition$$,$options$$={limit:20,page:1,fields:void 0,sort:void 0,pagination:0,count:0,"listinfo-code":void 0},$req$$,$callback$$){const $ctrl$$=this;$req$$=$req$$||{};$req$$.query=$req$$.query||{};$options$$.fields&&typeof $options$$.fields=="object"&&!Array.isArray($options$$.fields)&&($options$$.fields=Object.keys($options$$.fields));$req$$.body={q:$condition$$,...$options$$};try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{let $id_app$$=
116
- $req$$.query.id_app||$condition$$.id_app;if($ctrl$$.require_id_app&&!$id_app$$)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u \u0111i\u1ec1u ki\u1ec7n id_app");typeof $user$$==="string"&&($user$$={email:$user$$});$user$$.current_id_app||($user$$.current_id_app=$id_app$$);!$user$$.current_app_info&&$user$$.current_id_ap&&($user$$.current_app_info={_id:$user$$.current_id_ap,name:$user$$.current_id_ap});$req$$.user=$user$$;handlers.findHandler($ctrl$$,$req$$,($e$jscomp$59_result$$,
117
- $returnvalue$$)=>{if($e$jscomp$59_result$$)return $reject$$($e$jscomp$59_result$$);({result:$e$jscomp$59_result$$}=$returnvalue$$);$resolve$$($e$jscomp$59_result$$)})});return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};controller.runWebhooks=runWebhooks;
116
+ $req$$.query.id_app||$condition$$.id_app;if($ctrl$$.require_id_app&&!$id_app$$)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u \u0111i\u1ec1u ki\u1ec7n id_app");typeof $user$$==="string"&&($user$$={email:$user$$});$user$$.current_id_app||($user$$.current_id_app=$id_app$$);!$user$$.current_app_info&&$user$$.current_id_ap&&($user$$.current_app_info={_id:$user$$.current_id_ap,name:$user$$.current_id_ap});$req$$.user=$user$$;handlers.findHandler($ctrl$$,$req$$,($e$jscomp$58_result$$,
117
+ $returnvalue$$)=>{if($e$jscomp$58_result$$)return $reject$$($e$jscomp$58_result$$);({result:$e$jscomp$58_result$$}=$returnvalue$$);$resolve$$($e$jscomp$58_result$$)})});return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};controller.runWebhooks=runWebhooks;
118
118
  controller.postData=async function($obj$$,$ctrl$$,$cb$$,$options$$={}){Logger.info("[controller] postData",this.name);try{let $rs$$=await executeInTransaction(async()=>await asyncPostData($obj$$,$ctrl$$,$options$$),{useParent:!0});$cb$$(null,$rs$$)}catch($e$$){$cb$$($e$$)}};controller.asyncPostData=async function($obj$$,$ctrl$$,$options$$={}){Logger.info("[controller] asyncPostData",this.name);return executeInTransaction(async()=>await asyncPostData($obj$$,$ctrl$$,$options$$),{useParent:!0})};
119
119
  controller.pushNotification=pushNotification;
120
- controller.create=async function($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add"){$req$$=$req$$||{};$req$$.query=$req$$.query||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{handlers.createHandler($ctrl$$,$req$$,($e$jscomp$62_obj_created$$,$returnvalue$$)=>{if($e$jscomp$62_obj_created$$)return $reject$$($e$jscomp$62_obj_created$$);({obj_created:$e$jscomp$62_obj_created$$}=
121
- $returnvalue$$);pushNotification($ctrl$$,$e$jscomp$62_obj_created$$,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$resolve$$($e$jscomp$62_obj_created$$)})});return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};
120
+ controller.create=async function($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add"){$req$$=$req$$||{};$req$$.query=$req$$.query||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{handlers.createHandler($ctrl$$,$req$$,($e$jscomp$61_obj_created$$,$returnvalue$$)=>{if($e$jscomp$61_obj_created$$)return $reject$$($e$jscomp$61_obj_created$$);({obj_created:$e$jscomp$61_obj_created$$}=
121
+ $returnvalue$$);pushNotification($ctrl$$,$e$jscomp$61_obj_created$$,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$resolve$$($e$jscomp$61_obj_created$$)})});return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};
122
122
  controller.prototype.createData=async function($user$$,$data$$,$callback$$,$req$$,$action$$="add"){const $ctrl$$=this;$req$$=$req$$||{};$req$$.query=$req$$.query||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.action=$action$$;try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{let $id_app$$=$req$$.query.id_app||$data$$.id_app;if($ctrl$$.require_id_app&&!$id_app$$)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u id_app");typeof $user$$==="string"&&($user$$={email:$user$$});
123
- $user$$.current_id_app||($user$$.current_id_app=$id_app$$);!$user$$.current_app_info&&$user$$.current_id_ap&&($user$$.current_app_info={_id:$user$$.current_id_ap,name:$user$$.current_id_ap});$req$$.user=$user$$;handlers.createHandler($ctrl$$,$req$$,($e$jscomp$64_obj_created$$,$returnvalue$$)=>{if($e$jscomp$64_obj_created$$)return $reject$$($e$jscomp$64_obj_created$$);({obj_created:$e$jscomp$64_obj_created$$}=$returnvalue$$);pushNotification($ctrl$$,$e$jscomp$64_obj_created$$,"new",null,null);$resolve$$($e$jscomp$64_obj_created$$)})});
123
+ $user$$.current_id_app||($user$$.current_id_app=$id_app$$);!$user$$.current_app_info&&$user$$.current_id_ap&&($user$$.current_app_info={_id:$user$$.current_id_ap,name:$user$$.current_id_ap});$req$$.user=$user$$;handlers.createHandler($ctrl$$,$req$$,($e$jscomp$63_obj_created$$,$returnvalue$$)=>{if($e$jscomp$63_obj_created$$)return $reject$$($e$jscomp$63_obj_created$$);({obj_created:$e$jscomp$63_obj_created$$}=$returnvalue$$);pushNotification($ctrl$$,$e$jscomp$63_obj_created$$,"new",null,null);$resolve$$($e$jscomp$63_obj_created$$)})});
124
124
  return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};
125
125
  controller.prototype.updateData=async function($user$$,$_id$$,$data$$,$callback$$,$req$$,$action$$="update"){const $ctrl$$=this;$req$$=$req$$||{};$req$$.query=$req$$.query||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.action=$action$$;$req$$._action=$action$$;$req$$.id=$_id$$;try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{let $id_app$$=$req$$.query.id_app||$data$$.id_app;if($ctrl$$.require_id_app&&!$id_app$$)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u id_app");
126
126
  typeof $user$$==="string"&&($user$$={email:$user$$});$user$$.current_id_app||($user$$.current_id_app=$id_app$$);!$user$$.current_app_info&&$user$$.current_id_ap&&($user$$.current_app_info={_id:$user$$.current_id_ap,name:$user$$.current_id_ap});$req$$.user=$user$$;handlers.updateHandler($ctrl$$,$req$$,($e$$,$returnvalue$$)=>{if($e$$)return $reject$$($e$$);let {new_obj:$new_obj$$,old_obj:$old_obj$$}=$returnvalue$$;pushNotification($ctrl$$,$new_obj$$,$action$$,$old_obj$$,null);$resolve$$($new_obj$$)})});