flexbiz-server 12.3.56 → 12.3.58

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.
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.3.56",
5
+ "version": "12.3.58",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -1,4 +1,4 @@
1
- const _=require("lodash"),crypto=require("crypto"),numeral=require("numeral"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),reportinfo=global.getModel("reportinfo"),{evalute,getParameterData}=require("../libs/utils"),utils=require("../libs/utils"),handlers=require("./handlers");
1
+ const _=require("lodash"),crypto=require("crypto"),numeral=require("numeral"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),reportinfo=global.getModel("reportinfo"),{evalute,getParameterData}=require("../libs/utils"),utils=require("../libs/utils"),handlers=require("./handlers"),{getCurrentSession,getCurrentStore}=require("../libs/sessionContext");
2
2
  class controllerRPT{constructor($router$$,$rptId$$,$fecthData$$,$options$$={}){this.module=this.name=$rptId$$;this.router=$router$$;this.options=$options$$;this.fecthDataFunc=$fecthData$$;global.report_controllers[$rptId$$.toUpperCase()]=this;this.base_path=$options$$.require_id_app===!1?"/":"/:id_app/";this.getData=this.getData.bind(this);this.createRoute=this.createRoute.bind(this);this.notNeedRight=async($user$$,$_options$$={})=>{let $nnr$$=$options$$.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=
3
3
  $nnr$$($user$$,$_options$$));return $nnr$$};this.handleResult=async($req$$,$data_response$$,$callback$$)=>{if($data_response$$.error)return $callback$$($data_response$$.error);$data_response$$=$data_response$$.result;var $func_string_rptInfo$$=await reportinfo.findOne({code:($req$$.query.report_info_code||$rptId$$).toLowerCase()}).lean();if($func_string_rptInfo$$&&$func_string_rptInfo$$.handle_data_expression_server){if($func_string_rptInfo$$.handle_data_expression_server.indexOf("async ")>=0)return $callback$$("async function is not allow");
4
4
  $func_string_rptInfo$$=`return (async ()=>{
@@ -9,19 +9,20 @@ $func_string_rptInfo$$=`return (async ()=>{
9
9
  }
10
10
 
11
11
  })`;try{let $rs$$=await evalute($func_string_rptInfo$$,{data:$data_response$$,moment,numeral,condition:$req$$.query,user:$req$$.user,_,utils,getData:getParameterData})();if($rs$$){if($rs$$.error)return console.error("handle_data_expression_server",$rs$$.error,$func_string_rptInfo$$,$rptId$$),$callback$$($rs$$.error.message||$rs$$.error);$data_response$$=$rs$$}}catch($e$$){return console.error("handle_data_expression_server",$e$$,$func_string_rptInfo$$,$rptId$$),$callback$$($e$$.message||
12
- $e$$)}}$callback$$(null,$data_response$$)};this.getDataFunc=()=>{console.log("get data from server",$rptId$$,"...");return $options$$.stream?$fecthData$$:async($req$$,$callback$$)=>{try{await $fecthData$$($req$$,($e$$,$data$$)=>{this.handleResult($req$$,{error:$e$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}catch($e$$){$callback$$($e$$)}}};const $mainRoute$$=async($req$$,$res$$)=>{if($options$$.stream)handlers.rptHandler(this,$req$$,($e$$,$rs$$)=>{if($options$$.resHandler)return $options$$.resHandler($req$$,
13
- {error:$e$$,data:$rs$$},$res$$);if($e$$)return $e$$.error?$res$$.status(500).send($e$$):$res$$.status(500).send({error:$e$$.message||$e$$});$rs$$=="__end_stream__"?console.log("[handlerWithSession] end stream...",$rptId$$):$res$$.send($rs$$)},$res$$);else{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$req$$;var $_req_user_agent$$=$req$$.header("user-agent");const $ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{if($_req_user_agent$$=
14
- {handler:"rptHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req_user_agent$$,ip:$ip$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=0){const $id_task$$=`report-${crypto.randomBytes(20).toString("hex")}`;if($options$$.waiting_message){const $status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$res$$.status(202).send([{message:$options$$.waiting_message,status_task:$status_task$$}])}global.reportMainPool.exec({id_task:$id_task$$,
15
- req:$_req_user_agent$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{setImmediate(()=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$response$$.error,data:$response$$.result},$res$$);if($response$$.error)return $res$$.status(400).send($response$$.error);$res$$.send($response$$.result)}})})}else $options$$.waiting_message&&$res$$.status(202).send([{message:$options$$.waiting_message}]),handlers.rptHandler(this,$_req_user_agent$$,
16
- ($e$$,$returnvalue$$)=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$e$$,data:$returnvalue$$},$res$$);if($e$$)return $res$$.status(400).send($e$$);$res$$.send($returnvalue$$)}})}catch($e$$){console.error("L\u1ed7i t\u1ea1o job cho b\u00e1o c\u00e1o",$rptId$$,$e$$),$res$$.status(400).send($e$$)}}},$excelRoute$$=async($ip$jscomp$1_req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$ip$jscomp$1_req$$;
17
- var $_req$jscomp$1_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$jscomp$1_user_agent$$={handler:"rptExcelHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req$jscomp$1_user_agent$$,ip:$ip$jscomp$1_req$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=0){const $id_task$$=`report-export-${crypto.randomBytes(20).toString("hex")}`;
18
- global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$1_user_agent$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$3_returnvalue$$=>{if($response$jscomp$3_returnvalue$$.error)return $res$$.status(400).send($response$jscomp$3_returnvalue$$.error);$response$jscomp$3_returnvalue$$=$response$jscomp$3_returnvalue$$.result;const $result$$=$response$jscomp$3_returnvalue$$.data;switch($response$jscomp$3_returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type",
19
- "application/vnd.openxmlformats");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".xlsx");$res$$.end($result$$,"binary");break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".docx");$res$$.write($result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($result$$)}})}else handlers.rptExcelHandler(this,$_req$jscomp$1_user_agent$$,
20
- ($e$jscomp$7_result$$,$returnvalue$$)=>{if($e$jscomp$7_result$$)return $res$$.status(400).send($e$jscomp$7_result$$);$e$jscomp$7_result$$=$returnvalue$$.data;switch($returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".xlsx");$res$$.end($e$jscomp$7_result$$,"binary");break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");
21
- $res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".docx");$res$$.write($e$jscomp$7_result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($e$jscomp$7_result$$)}})}catch($e$$){$res$$.status(400).send($e$$)}};$router$$.route(`${this.base_path+this.module}`).get($mainRoute$$);$router$$.route(`${this.base_path+this.module}`).post($mainRoute$$);$router$$.route(`${this.base_path+this.module}/excel`).get($excelRoute$$);$router$$.route(`${this.base_path+this.module}/excel`).post($excelRoute$$)}getData($req$$,
22
- $callback$$){const $ctrl$$=this;let $callback_run$$=!1;setImmediate(()=>{try{$ctrl$$.fecthDataFunc($req$$,($err$$,$data$$,$event$$)=>{if($ctrl$$.options?.stream){if($err$$)return $callback$$($err$$);$event$$!="data"||$callback_run$$||($callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)}))}else $callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}catch($e$$){console.error("[report controller] [getData]",
23
- $e$$),$callback$$($e$$.message)}})}createRoute($routeName$$,$callbackRoute_handler$$,$_options$$={method:"GET",not_use_worker:!1}){const $self$$=this;$_options$$.method=$_options$$.method?$_options$$.method.toUpperCase():"GET";const $route_action_key$$=`rpt_route_action_${$self$$.module}_${$routeName$$}_${$_options$$.method}`;$self$$[$route_action_key$$]=$callbackRoute_handler$$;$callbackRoute_handler$$=async function($ip$jscomp$2_req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,
24
- files:$files$$}=$ip$jscomp$2_req$$;var $_req$jscomp$2_user_agent$$=$ip$jscomp$2_req$$.header("user-agent");$ip$jscomp$2_req$$=$ip$jscomp$2_req$$.ip||$ip$jscomp$2_req$$.headers["x-forwarded-for"]||$ip$jscomp$2_req$$.connection.remoteAddress;try{if($_req$jscomp$2_user_agent$$={handler:"rptCreateRouteHandler",routeName:$routeName$$,_options:$_options$$,route_action_key:$route_action_key$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req$jscomp$2_user_agent$$,ip:$ip$jscomp$2_req$$,
25
- files:$files$$},!global.reportMainPool||global.reportMainPool.fullQueue()||$_options$$.not_use_worker)handlers.rptCreateRouteHandler(this,$_req$jscomp$2_user_agent$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($returnvalue$$)});else{const $id_task$$=`report-create-route-${crypto.randomBytes(20).toString("hex")}`;global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$2_user_agent$$,module:$self$$.module.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$6_result$$=>
26
- {if($response$jscomp$6_result$$.error)return $res$$.status(400).send($response$jscomp$6_result$$.error);({result:$response$jscomp$6_result$$}=$response$jscomp$6_result$$);$res$$.send($response$jscomp$6_result$$)})}}catch($e$$){$res$$.status(400).send($e$$)}};$_options$$.method=="DELETE"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).delete($callbackRoute_handler$$):$_options$$.method=="POST"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).post($callbackRoute_handler$$):
27
- $_options$$.method=="PUT"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).put($callbackRoute_handler$$):this.router.route(`${this.base_path+this.module}/${$routeName$$}`).get($callbackRoute_handler$$)}}module.exports=controllerRPT;
12
+ $e$$)}}$callback$$(null,$data_response$$)};this.getDataFunc=()=>{const $currentStore$$=getCurrentStore();console.log(`\u2705 [rptHanlder] [getDataFunc], sessionID=${$currentStore$$?.storeId||"none"}`);console.log(`\u2705 [rptHanlder] [getDataFunc],sessionID=${getCurrentSession()?._debugId}`);return $options$$.stream?$fecthData$$:async($req$$,$callback$$)=>{console.log(`\u2705 [rptHanlder] Ch\u1ea1y b\u00e1o c\u00e1o, sessionID=${getCurrentSession()?._debugId}`);try{await $fecthData$$($req$$,($e$$,
13
+ $data$$)=>{this.handleResult($req$$,{error:$e$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}catch($e$$){$callback$$($e$$)}}};const $mainRoute$$=async($req$$,$res$$)=>{if($options$$.stream)handlers.rptHandler(this,$req$$,($e$$,$rs$$)=>{if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$e$$,data:$rs$$},$res$$);if($e$$)return $e$$.error?$res$$.status(500).send($e$$):$res$$.status(500).send({error:$e$$.message||$e$$});$rs$$=="__end_stream__"?console.log("[handlerWithSession] end stream...",
14
+ $rptId$$):$res$$.send($rs$$)},$res$$);else{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$req$$;var $_req_user_agent$$=$req$$.header("user-agent");const $ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{if($_req_user_agent$$={handler:"rptHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req_user_agent$$,ip:$ip$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=
15
+ 0){const $id_task$$=`report-${crypto.randomBytes(20).toString("hex")}`;if($options$$.waiting_message){const $status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$res$$.status(202).send([{message:$options$$.waiting_message,status_task:$status_task$$}])}global.reportMainPool.exec({id_task:$id_task$$,req:$_req_user_agent$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{setImmediate(()=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,
16
+ {error:$response$$.error,data:$response$$.result},$res$$);if($response$$.error)return $res$$.status(400).send($response$$.error);$res$$.send($response$$.result)}})})}else $options$$.waiting_message&&$res$$.status(202).send([{message:$options$$.waiting_message}]),handlers.rptHandler(this,$_req_user_agent$$,($e$$,$returnvalue$$)=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$e$$,data:$returnvalue$$},$res$$);if($e$$)return $res$$.status(400).send($e$$);
17
+ $res$$.send($returnvalue$$)}})}catch($e$$){console.error("L\u1ed7i t\u1ea1o job cho b\u00e1o c\u00e1o",$rptId$$,$e$$),$res$$.status(400).send($e$$)}}},$excelRoute$$=async($ip$jscomp$1_req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$ip$jscomp$1_req$$;var $_req$jscomp$1_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;
18
+ try{if($_req$jscomp$1_user_agent$$={handler:"rptExcelHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req$jscomp$1_user_agent$$,ip:$ip$jscomp$1_req$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=0){const $id_task$$=`report-export-${crypto.randomBytes(20).toString("hex")}`;global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$1_user_agent$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$3_returnvalue$$=>
19
+ {if($response$jscomp$3_returnvalue$$.error)return $res$$.status(400).send($response$jscomp$3_returnvalue$$.error);$response$jscomp$3_returnvalue$$=$response$jscomp$3_returnvalue$$.result;const $result$$=$response$jscomp$3_returnvalue$$.data;switch($response$jscomp$3_returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".xlsx");$res$$.end($result$$,"binary");break;case "docx":$res$$.setHeader("Content-Type",
20
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".docx");$res$$.write($result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($result$$)}})}else handlers.rptExcelHandler(this,$_req$jscomp$1_user_agent$$,($e$jscomp$7_result$$,$returnvalue$$)=>{if($e$jscomp$7_result$$)return $res$$.status(400).send($e$jscomp$7_result$$);$e$jscomp$7_result$$=$returnvalue$$.data;switch($returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type",
21
+ "application/vnd.openxmlformats");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".xlsx");$res$$.end($e$jscomp$7_result$$,"binary");break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition","attachment; filename="+$rptId$$+".docx");$res$$.write($e$jscomp$7_result$$,"binary");$res$$.end(null,"binary");break;default:$res$$.send($e$jscomp$7_result$$)}})}catch($e$$){$res$$.status(400).send($e$$)}};
22
+ $router$$.route(`${this.base_path+this.module}`).get($mainRoute$$);$router$$.route(`${this.base_path+this.module}`).post($mainRoute$$);$router$$.route(`${this.base_path+this.module}/excel`).get($excelRoute$$);$router$$.route(`${this.base_path+this.module}/excel`).post($excelRoute$$)}getData($req$$,$callback$$){const $ctrl$$=this;let $callback_run$$=!1;setImmediate(()=>{try{$ctrl$$.fecthDataFunc($req$$,($err$$,$data$$,$event$$)=>{if($ctrl$$.options?.stream){if($err$$)return $callback$$($err$$);$event$$!=
23
+ "data"||$callback_run$$||($callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)}))}else $callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}catch($e$$){console.error("[report controller] [getData]",$e$$),$callback$$($e$$.message)}})}createRoute($routeName$$,$callbackRoute_handler$$,$_options$$={method:"GET",not_use_worker:!1}){const $self$$=this;$_options$$.method=$_options$$.method?
24
+ $_options$$.method.toUpperCase():"GET";const $route_action_key$$=`rpt_route_action_${$self$$.module}_${$routeName$$}_${$_options$$.method}`;$self$$[$route_action_key$$]=$callbackRoute_handler$$;$callbackRoute_handler$$=async function($ip$jscomp$2_req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$ip$jscomp$2_req$$;var $_req$jscomp$2_user_agent$$=$ip$jscomp$2_req$$.header("user-agent");$ip$jscomp$2_req$$=$ip$jscomp$2_req$$.ip||$ip$jscomp$2_req$$.headers["x-forwarded-for"]||
25
+ $ip$jscomp$2_req$$.connection.remoteAddress;try{if($_req$jscomp$2_user_agent$$={handler:"rptCreateRouteHandler",routeName:$routeName$$,_options:$_options$$,route_action_key:$route_action_key$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$_req$jscomp$2_user_agent$$,ip:$ip$jscomp$2_req$$,files:$files$$},!global.reportMainPool||global.reportMainPool.fullQueue()||$_options$$.not_use_worker)handlers.rptCreateRouteHandler(this,$_req$jscomp$2_user_agent$$,($e$$,$returnvalue$$)=>
26
+ {if($e$$)return $res$$.status(400).send($e$$);$res$$.send($returnvalue$$)});else{const $id_task$$=`report-create-route-${crypto.randomBytes(20).toString("hex")}`;global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$2_user_agent$$,module:$self$$.module.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$6_result$$=>{if($response$jscomp$6_result$$.error)return $res$$.status(400).send($response$jscomp$6_result$$.error);({result:$response$jscomp$6_result$$}=$response$jscomp$6_result$$);
27
+ $res$$.send($response$jscomp$6_result$$)})}}catch($e$$){$res$$.status(400).send($e$$)}};$_options$$.method=="DELETE"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).delete($callbackRoute_handler$$):$_options$$.method=="POST"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).post($callbackRoute_handler$$):$_options$$.method=="PUT"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).put($callbackRoute_handler$$):this.router.route(`${this.base_path+
28
+ this.module}/${$routeName$$}`).get($callbackRoute_handler$$)}}module.exports=controllerRPT;
@@ -14,26 +14,26 @@ sip_password:0,sip_websocket:0,voiip_access_token:0,voiip_webhook:0,wallet_addre
14
14
  !1);let $condition$$={};$unique$$=$unique$$.filter($key$$=>$model$$.schema.paths[$key$$]);for(let $i$$=0;$i$$<$unique$$.length;$i$$++){let $key$$=$unique$$[$i$$],$v$$=$obj$$[$key$$];$v$$!=void 0&&$model$$.schema.paths[$key$$]&&($v$$!==null?$model$$.schema.paths[$key$$].instance.toLowerCase()=="number"?$condition$$[$key$$]=Number($v$$):$model$$.schema.paths[$key$$].instance.toLowerCase()=="date"?$condition$$[$key$$]=new Date($v$$):$model$$.schema.paths[$key$$].instance.toLowerCase()=="string"?$condition$$[$key$$]=
15
15
  $v$$.toString():$condition$$[$key$$]=$v$$:$condition$$[$key$$]=$v$$)}if($condition$$.id_app&&Object.values($condition$$).length<2||Object.values($condition$$).length<1)return $fn$$("D\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i \u0111\u1ee7 c\u00e1c gi\u00e1 tr\u1ecb: "+$unique$$.join(","));$obj$$.id_app&&($condition$$.id_app=$obj$$.id_app);$replaceIfExists$$?$model$$.deleteMany($condition$$,$e$$=>{setImmediate(()=>{if($e$$)return $fn$$($e$$);$fn$$(null,!1)})}):$model$$.findOne($condition$$,{_id:1},
16
16
  ($error$$,$result$$)=>{setImmediate(()=>{if($error$$)return $fn$$($error$$);if(!$result$$)return $fn$$(null,!1);console.warn("object exists",$condition$$,"unique fields",$unique$$);$fn$$(null,!0)})})},postData=function($obj$$,$ctrl$$,$mainCallback$$,$options$$={}){const $post$$=$ctrl$$.dynamicPost||$ctrl$$.post;if(!$post$$)return $mainCallback$$();const $postOptions$$={...$ctrl$$.options,...$options$$};let $obj_created$$=$obj$$.toObject?utils.convertObjectIdsToStrings($obj$$.toObject()):{...$obj$$};
17
- Object.keys($obj_created$$).forEach($key$$=>{let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=utils.convertObjectIdsToStrings($p$$.toObject())),_.isArray($p$$)&&($obj_created$$[$key$$]=$p$$.map($el$$=>$el$$?$el$$.toObject?utils.convertObjectIdsToStrings($el$$.toObject()):$el$$:$el$$)))});console.log("[controllerUtils][postData] chu\u1ea9n b\u1ecb post d\u1eef li\u1ec7u...",$ctrl$$.name,$obj_created$$.so_ct,$obj_created$$.trang_thai,$obj_created$$.listinfo_code);$ctrl$$.beforePost||
18
- ($ctrl$$.beforePost=function($obj_created$$,$callback$$){$callback$$(null,null)});$ctrl$$.beforePost($obj_created$$,function($e$$){if($e$$)return $mainCallback$$($e$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e$$,$_obj$$,$oldBooks$$){if($e$$)return $mainCallback$$($e$$);let $oldDanamicBook$$={};const $callback$$=async($e$$,$rs$$)=>{if($e$$){for(let $key$$ in $oldBooks$$)$oldBooks$$[$key$$].length>0&&await global.getModel($key$$.toLowerCase()).insertMany($oldBooks$$[$key$$]);
19
- if($oldDanamicBook$$)for(let $key$$ in $oldDanamicBook$$)!$oldBooks$$[$key$$]&&$oldDanamicBook$$[$key$$].length>0&&await global.getModel($key$$.toLowerCase()).insertMany($oldDanamicBook$$[$key$$])}$mainCallback$$($e$$,$rs$$)};if($ctrl$$.dynamicDeletePost)try{$oldDanamicBook$$=await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}setImmediate(async()=>{if($obj_created$$.trang_thai||$obj_created$$.trang_thai==0)$obj_created$$.trang_thai=$obj_created$$.trang_thai.toString();
20
- const $listinfo_code$$=$obj_created$$.listinfo_code;let $trang_thai$$;if($obj_created$$.trang_thai&&($listinfo_code$$&&($trang_thai$$=await trangthai.findOne({ma_ct:($listinfo_code$$||"").toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai})),$trang_thai$$||=await trangthai.findOne({ma_ct:($obj_created$$.ma_ct||"").toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai}),!$trang_thai$$||!$trang_thai$$.post))return console.log("[controllerUtils][postData] tr\u1ea1ng th\u00e1i kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c kh\u00f4ng y\u00eau c\u1ea7u post d\u1eef li\u1ec7u",
21
- $listinfo_code$$,$obj_created$$.trang_thai),$callback$$();setImmediate(()=>{$post$$($obj_created$$,function($e$$,$rs$$){setImmediate(()=>{if($e$$){let $msg_error$$=$e$$.message||$e$$.error||$e$$.toString();if($msg_error$$.indexOf("E11000 duplicate")>=0&&($msg_error$$.indexOf("id_ct_1_nh_dk_1")>=0||$msg_error$$.indexOf("id_ct_1_line_1")>=0))return $callback$$(null,$rs$$);console.error("error post data",$obj_created$$._id,$msg_error$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e_delete_post$$){if($e_delete_post$$)return console.error("error delete post",
22
- $e_delete_post$$),$callback$$($e_delete_post$$);console.error("deleted books because error post");if($ctrl$$.dynamicDeletePost)try{return await $ctrl$$.dynamicDeletePost($obj_created$$),$callback$$($e$$.message||$e$$.error||$e$$)}catch($e$$){return console.error("[dynamicDeletePost]",$e$$.message||$e$$.error||$e$$),$callback$$($e$$)}else $callback$$($e$$)})}else $callback$$(null,$rs$$)})},{...$postOptions$$})})})})})},pushNotification=($ctrl$$,$_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=
23
- !1,$options$$={title:"",data:{}})=>{let $obj$$;$obj$$=$_obj$$.toObject?utils.convertObjectIdsToStrings($_obj$$.toObject()):{...$_obj$$};$obj$$._id&&($obj$$._id=$obj$$._id.toString());setImmediate(async()=>{var $channel_id_func_old_trang_thai$$=`${$ctrl$$.name.toLowerCase()}-${$eventName$$}`;$_obj$$.id_app&&($channel_id_func_old_trang_thai$$=`${$channel_id_func_old_trang_thai$$}-${$_obj$$.id_app}`);let $message$$=JSON.stringify($obj$$);try{await global.clientRedis.publish($channel_id_func_old_trang_thai$$,
24
- $message$$)}catch($e$$){console.error("[controllerUtiles][pushNotification] fire event",$eventName$$,$e$$)}if($_obj$$.status){$options$$||={};var $exclude_token$$=$options$$.exclude_token,$trang_thai$$=($obj$$.trang_thai||($obj$$.progress==0?"0":$obj$$.progress)||"").toString();$old_obj$$&&!$justFireEvents$$&&($channel_id_func_old_trang_thai$$=($old_obj$$.trang_thai||($old_obj$$.progress==0?"0":$old_obj$$.progress)||"").toString(),$channel_id_func_old_trang_thai$$===$trang_thai$$&&($justFireEvents$$=
25
- !0));var $listinfos_notifications_setting_users_receive_notification_v_options$$;($channel_id_func_old_trang_thai$$=$obj$$.listinfo_code)&&($listinfos_notifications_setting_users_receive_notification_v_options$$=await OptionsModel.find({id_app:$obj$$.id_app,id_func:$channel_id_func_old_trang_thai$$,option:{$exists:!0}},{option:1}).lean());$channel_id_func_old_trang_thai$$&&$listinfos_notifications_setting_users_receive_notification_v_options$$.length!=0||($listinfos_notifications_setting_users_receive_notification_v_options$$=
26
- (await global.getModel("listinfo").find({api_code:$ctrl$$.name},{code:1}).lean()).map($a$$=>$a$$.code),$listinfos_notifications_setting_users_receive_notification_v_options$$.push($ctrl$$.name),$listinfos_notifications_setting_users_receive_notification_v_options$$=[...(new Set($listinfos_notifications_setting_users_receive_notification_v_options$$))],$channel_id_func_old_trang_thai$$={$in:$listinfos_notifications_setting_users_receive_notification_v_options$$},$listinfos_notifications_setting_users_receive_notification_v_options$$=
27
- await OptionsModel.find({id_app:$obj$$.id_app,id_func:$channel_id_func_old_trang_thai$$,option:{$exists:!0}},{option:1}).lean());$listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($v$$=>$v$$.option&&$v$$.option.users_receive_notification).map($v$$=>$v$$.option.users_receive_notification).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$listinfos_notifications_setting_users_receive_notification_v_options$$.length===
28
- 0&&($listinfos_notifications_setting_users_receive_notification_v_options$$=await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>{setImmediate(async()=>{_.isFunction($n$$)?$resolve$$(await $n$$($obj$$)):$resolve$$($n$$)})}))));$listinfos_notifications_setting_users_receive_notification_v_options$$&&($listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($u$$=>
29
- !$u$$.trang_thai||$u$$.trang_thai.toString()===$trang_thai$$||$u$$.trang_thai.toString()==="delete"),$listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($func_string_n$$=>{if(!$func_string_n$$.condition||!$func_string_n$$.condition.trim())return!0;$func_string_n$$=$func_string_n$$.condition;$func_string_n$$.indexOf("return ")<0&&($func_string_n$$=`return ${$func_string_n$$}`);try{return evalute($func_string_n$$,
30
- {...$obj$$,master:$obj$$,data:$obj$$})}catch($e$$){return console.error("[controllerUtiles][pushNotification]",$e$$,$func_string_n$$),!1}}),$listinfos_notifications_setting_users_receive_notification_v_options$$.forEach(async $p$$=>{setImmediate(async()=>{let $_justFireEvents$$=$justFireEvents$$;$p$$.just_fire_events&&($_justFireEvents$$=$p$$.just_fire_events);let $notificationData$$={_id:$obj$$._id,trang_thai:$trang_thai$$,id_app:$obj$$.id_app,code:$obj$$.ma_ct||$ctrl$$.name,id_link:$obj$$.id_link||
31
- $obj$$.id_product,code_link:$obj$$.code_link||$obj$$.colection_name_product,event:$eventName$$,action:$eventName$$.toUpperCase(),data:$options$$.data,key:$options$$.key,not_send_email:$p$$.not_send_email,justFireEvents:$_justFireEvents$$};if($justFireEvents$$||$eventName$$.toLowerCase()==="delete")$notificationData$$.title="",$notificationData$$.body="";else{try{$notificationData$$.body=$p$$.body?compileHtml($p$$.body,$obj$$):""}catch($e$$){$notificationData$$.body=$p$$.body,console.error("[controllerUtiles][pushNotification]",
32
- $ctrl$$.name,"compileHtml body",$e$$,$obj$$)}try{$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||$p$$.title||$p$$.content||"",$obj$$))}catch($e$$){$notificationData$$.title=$options$$.title||$p$$.title||$p$$.content||"",console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml title",$e$$,$obj$$)}}if($p$$.email_content)try{$notificationData$$.email_content=compileHtml($p$$.email_content,$obj$$)}catch($e$$){$notificationData$$.email_content=$p$$.email_content,
33
- console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml email_content",$e$$,$obj$$)}$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=$p$$.users;$users_will_receive$$||=[];$options$$.users_will_receive&&$options$$.users_will_receive.length>0&&($users_will_receive$$=$users_will_receive$$.concat($options$$.users_will_receive));$p$$.send_phu_trach&&$obj$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$$.phu_trach]));
34
- if($p$$.send_admin){var $admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$$.id_app,admin:!0}).lean()).map($p$$=>$p$$.email);$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$)}$p$$.send_attends&&$obj$$.attends&&($users_will_receive$$=$users_will_receive$$.concat($obj$$.attends));$p$$.group_id&&($admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$$.id_app,group_id:$p$$.group_id}).lean()).map($u$$=>$u$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$));
35
- $p$$.send_to_customer&&($obj$$.ma_kh||$obj$$.id_kh)&&($admins_of_user_sandbox_us$$=await mongoose.models.customer.getInfo($obj$$.id_app,{$or:[{ma_kh:$obj$$.ma_kh},{_id:$obj$$.id_kh}]},"of_user"))&&($users_will_receive$$=$users_will_receive$$.concat([$admins_of_user_sandbox_us$$]));$p$$.send_to_user_created?$users_will_receive$$=$users_will_receive$$.concat([$obj$$.user_created]):$p$$.send_to_user_created===!1&&($users_will_receive$$=$users_will_receive$$.filter($u$$=>$u$$!==$obj$$.user_created));
36
- if($p$$.handle_receivers){$admins_of_user_sandbox_us$$={obj:$obj$$,users_will_receive:$users_will_receive$$,utils};try{let $str_func$$=$p$$.handle_receivers;if($str_func$$.indexOf("async ")<0){$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);let $cust_users_will_receive$$=await evalute(`return (async ()=>{
17
+ Object.keys($obj_created$$).forEach($key$$=>{let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=utils.convertObjectIdsToStrings($p$$.toObject())),_.isArray($p$$)&&($obj_created$$[$key$$]=$p$$.map($el$$=>$el$$?$el$$.toObject?utils.convertObjectIdsToStrings($el$$.toObject()):$el$$:$el$$)))});$ctrl$$.beforePost||($ctrl$$.beforePost=function($obj_created$$,$callback$$){$callback$$(null,null)});$ctrl$$.beforePost($obj_created$$,function($e$$){if($e$$)return $mainCallback$$($e$$);
18
+ deletePost($obj_created$$.user_updated,$obj_created$$,async function($e$$,$_obj$$,$oldBooks$$){if($e$$)return $mainCallback$$($e$$);let $oldDanamicBook$$={};const $callback$$=async($e$$,$rs$$)=>{if($e$$){for(let $key$$ in $oldBooks$$)$oldBooks$$[$key$$].length>0&&await global.getModel($key$$.toLowerCase()).insertMany($oldBooks$$[$key$$]);if($oldDanamicBook$$)for(let $key$$ in $oldDanamicBook$$)!$oldBooks$$[$key$$]&&$oldDanamicBook$$[$key$$].length>0&&await global.getModel($key$$.toLowerCase()).insertMany($oldDanamicBook$$[$key$$])}$mainCallback$$($e$$,
19
+ $rs$$)};if($ctrl$$.dynamicDeletePost)try{$oldDanamicBook$$=await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}setImmediate(async()=>{if($obj_created$$.trang_thai||$obj_created$$.trang_thai==0)$obj_created$$.trang_thai=$obj_created$$.trang_thai.toString();const $listinfo_code$$=$obj_created$$.listinfo_code;let $trang_thai$$;if($obj_created$$.trang_thai&&($listinfo_code$$&&($trang_thai$$=await trangthai.findOne({ma_ct:($listinfo_code$$||"").toUpperCase(),
20
+ ma_trang_thai:$obj_created$$.trang_thai})),$trang_thai$$||=await trangthai.findOne({ma_ct:($obj_created$$.ma_ct||"").toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai}),!$trang_thai$$||!$trang_thai$$.post))return console.log("[controllerUtils][postData] tr\u1ea1ng th\u00e1i kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c kh\u00f4ng y\u00eau c\u1ea7u post d\u1eef li\u1ec7u",$listinfo_code$$,$obj_created$$.trang_thai),$callback$$();setImmediate(()=>{$post$$($obj_created$$,function($e$$,$rs$$){setImmediate(()=>
21
+ {if($e$$){let $msg_error$$=$e$$.message||$e$$.error||$e$$.toString();if($msg_error$$.indexOf("E11000 duplicate")>=0&&($msg_error$$.indexOf("id_ct_1_nh_dk_1")>=0||$msg_error$$.indexOf("id_ct_1_line_1")>=0))return $callback$$(null,$rs$$);console.error("error post data",$obj_created$$._id,$msg_error$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e_delete_post$$){if($e_delete_post$$)return console.error("error delete post",$e_delete_post$$),$callback$$($e_delete_post$$);console.error("deleted books because error post");
22
+ if($ctrl$$.dynamicDeletePost)try{return await $ctrl$$.dynamicDeletePost($obj_created$$),$callback$$($e$$.message||$e$$.error||$e$$)}catch($e$$){return console.error("[dynamicDeletePost]",$e$$.message||$e$$.error||$e$$),$callback$$($e$$)}else $callback$$($e$$)})}else $callback$$(null,$rs$$)})},{...$postOptions$$})})})})})},pushNotification=($ctrl$$,$_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}})=>{let $obj$$;$obj$$=$_obj$$.toObject?utils.convertObjectIdsToStrings($_obj$$.toObject()):
23
+ {...$_obj$$};$obj$$._id&&($obj$$._id=$obj$$._id.toString());setImmediate(async()=>{var $channel_id_func_old_trang_thai$$=`${$ctrl$$.name.toLowerCase()}-${$eventName$$}`;$_obj$$.id_app&&($channel_id_func_old_trang_thai$$=`${$channel_id_func_old_trang_thai$$}-${$_obj$$.id_app}`);let $message$$=JSON.stringify($obj$$);try{await global.clientRedis.publish($channel_id_func_old_trang_thai$$,$message$$)}catch($e$$){console.error("[controllerUtiles][pushNotification] fire event",$eventName$$,$e$$)}if($_obj$$.status){$options$$||=
24
+ {};var $exclude_token$$=$options$$.exclude_token,$trang_thai$$=($obj$$.trang_thai||($obj$$.progress==0?"0":$obj$$.progress)||"").toString();$old_obj$$&&!$justFireEvents$$&&($channel_id_func_old_trang_thai$$=($old_obj$$.trang_thai||($old_obj$$.progress==0?"0":$old_obj$$.progress)||"").toString(),$channel_id_func_old_trang_thai$$===$trang_thai$$&&($justFireEvents$$=!0));var $listinfos_notifications_setting_users_receive_notification_v_options$$;($channel_id_func_old_trang_thai$$=$obj$$.listinfo_code)&&
25
+ ($listinfos_notifications_setting_users_receive_notification_v_options$$=await OptionsModel.find({id_app:$obj$$.id_app,id_func:$channel_id_func_old_trang_thai$$,option:{$exists:!0}},{option:1}).lean());$channel_id_func_old_trang_thai$$&&$listinfos_notifications_setting_users_receive_notification_v_options$$.length!=0||($listinfos_notifications_setting_users_receive_notification_v_options$$=(await global.getModel("listinfo").find({api_code:$ctrl$$.name},{code:1}).lean()).map($a$$=>$a$$.code),$listinfos_notifications_setting_users_receive_notification_v_options$$.push($ctrl$$.name),
26
+ $listinfos_notifications_setting_users_receive_notification_v_options$$=[...(new Set($listinfos_notifications_setting_users_receive_notification_v_options$$))],$channel_id_func_old_trang_thai$$={$in:$listinfos_notifications_setting_users_receive_notification_v_options$$},$listinfos_notifications_setting_users_receive_notification_v_options$$=await OptionsModel.find({id_app:$obj$$.id_app,id_func:$channel_id_func_old_trang_thai$$,option:{$exists:!0}},{option:1}).lean());$listinfos_notifications_setting_users_receive_notification_v_options$$=
27
+ $listinfos_notifications_setting_users_receive_notification_v_options$$.filter($v$$=>$v$$.option&&$v$$.option.users_receive_notification).map($v$$=>$v$$.option.users_receive_notification).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$listinfos_notifications_setting_users_receive_notification_v_options$$.length===0&&($listinfos_notifications_setting_users_receive_notification_v_options$$=await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>
28
+ {setImmediate(async()=>{_.isFunction($n$$)?$resolve$$(await $n$$($obj$$)):$resolve$$($n$$)})}))));$listinfos_notifications_setting_users_receive_notification_v_options$$&&($listinfos_notifications_setting_users_receive_notification_v_options$$=$listinfos_notifications_setting_users_receive_notification_v_options$$.filter($u$$=>!$u$$.trang_thai||$u$$.trang_thai.toString()===$trang_thai$$||$u$$.trang_thai.toString()==="delete"),$listinfos_notifications_setting_users_receive_notification_v_options$$=
29
+ $listinfos_notifications_setting_users_receive_notification_v_options$$.filter($func_string_n$$=>{if(!$func_string_n$$.condition||!$func_string_n$$.condition.trim())return!0;$func_string_n$$=$func_string_n$$.condition;$func_string_n$$.indexOf("return ")<0&&($func_string_n$$=`return ${$func_string_n$$}`);try{return evalute($func_string_n$$,{...$obj$$,master:$obj$$,data:$obj$$})}catch($e$$){return console.error("[controllerUtiles][pushNotification]",$e$$,$func_string_n$$),!1}}),$listinfos_notifications_setting_users_receive_notification_v_options$$.forEach(async $p$$=>
30
+ {setImmediate(async()=>{let $_justFireEvents$$=$justFireEvents$$;$p$$.just_fire_events&&($_justFireEvents$$=$p$$.just_fire_events);let $notificationData$$={_id:$obj$$._id,trang_thai:$trang_thai$$,id_app:$obj$$.id_app,code:$obj$$.ma_ct||$ctrl$$.name,id_link:$obj$$.id_link||$obj$$.id_product,code_link:$obj$$.code_link||$obj$$.colection_name_product,event:$eventName$$,action:$eventName$$.toUpperCase(),data:$options$$.data,key:$options$$.key,not_send_email:$p$$.not_send_email,justFireEvents:$_justFireEvents$$};
31
+ if($justFireEvents$$||$eventName$$.toLowerCase()==="delete")$notificationData$$.title="",$notificationData$$.body="";else{try{$notificationData$$.body=$p$$.body?compileHtml($p$$.body,$obj$$):""}catch($e$$){$notificationData$$.body=$p$$.body,console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml body",$e$$,$obj$$)}try{$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||$p$$.title||$p$$.content||"",$obj$$))}catch($e$$){$notificationData$$.title=$options$$.title||
32
+ $p$$.title||$p$$.content||"",console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml title",$e$$,$obj$$)}}if($p$$.email_content)try{$notificationData$$.email_content=compileHtml($p$$.email_content,$obj$$)}catch($e$$){$notificationData$$.email_content=$p$$.email_content,console.error("[controllerUtiles][pushNotification]",$ctrl$$.name,"compileHtml email_content",$e$$,$obj$$)}$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=
33
+ $p$$.users;$users_will_receive$$||=[];$options$$.users_will_receive&&$options$$.users_will_receive.length>0&&($users_will_receive$$=$users_will_receive$$.concat($options$$.users_will_receive));$p$$.send_phu_trach&&$obj$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$$.phu_trach]));if($p$$.send_admin){var $admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$$.id_app,admin:!0}).lean()).map($p$$=>$p$$.email);$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$)}$p$$.send_attends&&
34
+ $obj$$.attends&&($users_will_receive$$=$users_will_receive$$.concat($obj$$.attends));$p$$.group_id&&($admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$$.id_app,group_id:$p$$.group_id}).lean()).map($u$$=>$u$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$));$p$$.send_to_customer&&($obj$$.ma_kh||$obj$$.id_kh)&&($admins_of_user_sandbox_us$$=await mongoose.models.customer.getInfo($obj$$.id_app,{$or:[{ma_kh:$obj$$.ma_kh},{_id:$obj$$.id_kh}]},"of_user"))&&
35
+ ($users_will_receive$$=$users_will_receive$$.concat([$admins_of_user_sandbox_us$$]));$p$$.send_to_user_created?$users_will_receive$$=$users_will_receive$$.concat([$obj$$.user_created]):$p$$.send_to_user_created===!1&&($users_will_receive$$=$users_will_receive$$.filter($u$$=>$u$$!==$obj$$.user_created));if($p$$.handle_receivers){$admins_of_user_sandbox_us$$={obj:$obj$$,users_will_receive:$users_will_receive$$,utils};try{let $str_func$$=$p$$.handle_receivers;if($str_func$$.indexOf("async ")<0){$str_func$$.indexOf("return ")<
36
+ 0&&($str_func$$=`return ${$str_func$$}`);let $cust_users_will_receive$$=await evalute(`return (async ()=>{
37
37
  try{
38
38
  ${$str_func$$}
39
39
  }catch(e){
@@ -51,17 +51,17 @@ global.getModel("socaitmp").deleteMany({id_ct:$obj$$._id.toString()},function($e
51
51
  vatvao:$callback$$=>{setImmediate(async()=>{if(global.model_books&&global.model_books.indexOf("vatvao")>=0)return $callback$$();let $old_data$$=await global.getModel("vatvao").find({id_ct:$obj$$._id.toString()}).lean();Vatvao.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.vatvao=$old_data$$);$callback$$($error$$)})})},tdttno:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttno.find({id_ct:$obj$$._id.toString()},{_id:1,tat_toan:1}).lean();if($tdtts$$.length>
52
52
  0){if($tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttno_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}let $old_data$$=await global.getModel("tdttno").find({id_ct:$obj$$._id.toString()}).lean();Tdttno.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttno=$old_data$$);$callback$$($error$$)})})},tdttco:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttco.find({id_ct:$obj$$._id.toString()},
53
53
  {_id:1,tat_toan:1}).lean();if($tdtts$$.length>0){if($tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttco_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}let $old_data$$=await global.getModel("tdttco").find({id_ct:$obj$$._id.toString()}).lean();Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttco=$old_data$$);$callback$$($error$$)})})},tdttno_tt:$callback$$=>{setImmediate(async()=>
54
- {let $old_data$$=await global.getModel("tdttno_tt").find({id_ct:$obj$$._id.toString()}).lean();Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttno_tt=$old_data$$);if($error$$)return $callback$$($error$$);$obj$$.tdttnos?async.mapSeries($obj$$.tdttnos,function($detail$$,$callback$$){setImmediate(()=>{Tdttno.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},
55
- function($e$$){$e$$&&console.error($e$$);$callback$$()}):$callback$$()})})},tdttco_tt:$callback$$=>{setImmediate(async()=>{let $old_data$$=await global.getModel("tdttco_tt").find({id_ct:$obj$$._id.toString()}).lean();Tdttco_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttco_tt=$old_data$$);if($error$$)return $callback$$($error$$);$obj$$.tdttcos?async.mapSeries($obj$$.tdttcos,function($detail$$,$callback$$){setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_tdtt},
56
- {$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$$()}):$callback$$()})})}},async function($e$$){if($e$$){for(let $key$$ in $bookbackup$$)$bookbackup$$[$key$$].length>0&&await global.getModel($key$$.toString()).insertMany($bookbackup$$[$key$$]);console.error("delete books",$e$$)}$callback$$($e$$,$obj$$,$bookbackup$$)})},runWebhooks=async($ctrl$$,$obj$$,$action$$,$voucher_options$$)=>
57
- {$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);if($voucher_options$$&&$voucher_options$$.option_webhooks&&($ctrl$$=$voucher_options$$.option_webhooks.find($w$$=>$w$$.action.toUpperCase()===$action$$.toUpperCase()&&$w$$.url))){$voucher_options$$=path.dirname(__dirname)+"/workers/webhook.js";if(!fs.existsSync($voucher_options$$))return console.error("webhook process is not exitst");global.webhookPool||
58
- (global.webhookPool=new StaticPool($voucher_options$$,0,1));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error("runWebhooks",$response$$.error):console.log($response$$)})}},getNextSequence=async function($id_app$$,$ma_ct$$,$field$$,$callback$$,$options$$={}){var $condition_qct_qcts$$={status:!0,field:$field$$,id_app:$id_app$$,$and:[{$or:[{ma_ct:"#",ma_ct_khac:{$regex:$ma_ct$$,$options:"i"}},{cac_ma_ct:$ma_ct$$.toLowerCase()},{ma_ct:$ma_ct$$.toUpperCase()}]}]};
59
- $options$$.id_qct&&($condition_qct_qcts$$._id=$options$$.id_qct);if($options$$.ngay_ct){let $start_date$$=moment($options$$.ngay_ct).startOf("date").toDate(),$end_date$$=moment($options$$.ngay_ct).endOf("date").toDate();$condition_qct_qcts$$.$and.push({$or:[{tu_ngay:null},{tu_ngay:{$lte:$end_date$$}}]});$condition_qct_qcts$$.$and.push({$or:[{den_ngay:null},{den_ngay:{$gte:$start_date$$}}]})}$options$$.toObject&&($options$$=utils.convertObjectIdsToStrings($options$$.toObject()));$condition_qct_qcts$$=
60
- await dmqct.find($condition_qct_qcts$$).lean();const $keys$$=Object.keys($options$$),$qct$$=$condition_qct_qcts$$.find($qct$$=>{if($qct$$.dieu_kien&&$keys$$.length>0)try{let $str_func$$=$qct$$.dieu_kien;if($str_func$$.indexOf("async ")>=0)return!1;$str_func$$.indexOf("return ")!==0&&($str_func$$=`return ${$str_func$$}`);return evalute($str_func$$,{...$options$$,master:{...$options$$},moment,numeral})}catch($e$$){return console.error("Error find quyen chung tu",$e$$,$qct$$.dieu_kien),!1}else return!0});
61
- let $code$$=$qct$$?$qct$$._id.toString():$field$$;counter.getNextSequence($id_app$$,$ma_ct$$,$code$$,async function($error$$,$rs$$){if($error$$)console.error("auto create code for",$ma_ct$$,$code$$,$error$$),$callback$$($error$$);else{if($qct$$){let $tien_to$$=$qct$$.tien_to||"";if($tien_to$$.indexOf("return ")>=0&&$tien_to$$.indexOf("async ")<0)try{$tien_to$$=evalute($tien_to$$,{...$options$$,moment,numeral}),$tien_to$$=$tien_to$$.toString().trim()}catch($e$$){console.error("getNextSequence",$e$$)}let $hau_to$$=
62
- $qct$$.hau_to||"";if($hau_to$$.indexOf("return ")>=0&&$hau_to$$.indexOf("async ")<0)try{$hau_to$$=evalute($hau_to$$,{...$options$$,moment,numeral}),$hau_to$$=$hau_to$$.toString().trim()}catch($e$$){console.error("getNextSequence",$e$$)}!$qct$$.tu_dong_reset||$qct$$.tien_to_ht==void 0||$qct$$.hau_to_ht==void 0||$qct$$.tien_to_ht==$tien_to$$&&$qct$$.hau_to_ht==$hau_to$$||($rs$$=1,await counter.updateOne({id_app:$id_app$$,name:$ma_ct$$.toUpperCase(),field:$code$$},{sequence:$rs$$}));$rs$$=($qct$$.tu_so||
63
- 0)+$rs$$;$error$$=$rs$$.toString();var $den_so_so_ky_tu_them$$=$qct$$.den_so;$den_so_so_ky_tu_them$$||=999999;$den_so_so_ky_tu_them$$=$den_so_so_ky_tu_them$$.toString().length-$error$$.length;$error$$=$den_so_so_ky_tu_them$$>0?($tien_to$$||"")+"0000000000000000000000".substring(0,$den_so_so_ky_tu_them$$)+$error$$+$hau_to$$:($tien_to$$||"")+$error$$+$hau_to$$;$qct$$.so_ht=$rs$$;$qct$$.tien_to_ht=$tien_to$$;$qct$$.hau_to_ht=$hau_to$$;await dmqct.updateOne({_id:$qct$$._id},$qct$$)}else $error$$=$rs$$.toString();
64
- $rs$$={};$rs$$[$field$$]=$error$$;$callback$$(null,$rs$$)}})};
54
+ {let $old_data$$=await global.getModel("tdttno_tt").find({id_ct:$obj$$._id.toString()}).lean();Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttno_tt=$old_data$$);if($error$$)return $callback$$($error$$);$obj$$.tdttnos?async.map($obj$$.tdttnos,function($detail$$,$callback$$){setImmediate(()=>{Tdttno.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},
55
+ function($e$$){$e$$&&console.error($e$$);$callback$$()}):$callback$$()})})},tdttco_tt:$callback$$=>{setImmediate(async()=>{let $old_data$$=await global.getModel("tdttco_tt").find({id_ct:$obj$$._id.toString()}).lean();Tdttco_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$error$$||($bookbackup$$.tdttco_tt=$old_data$$);if($error$$)return $callback$$($error$$);$obj$$.tdttcos?async.map($obj$$.tdttcos,function($detail$$,$callback$$){setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_tdtt},
56
+ {$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$$()}):$callback$$()})})}},async function($e$$){if($e$$){for(let $key$$ in $bookbackup$$)$bookbackup$$[$key$$].length>0&&await global.getModel($key$$.toString()).insertMany($bookbackup$$[$key$$]);console.error("[controllerUtiles] [deletePost]",$e$$)}$callback$$($e$$,$obj$$,$bookbackup$$)})},runWebhooks=async($ctrl$$,$obj$$,$action$$,
57
+ $voucher_options$$)=>{$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);if($voucher_options$$&&$voucher_options$$.option_webhooks&&($ctrl$$=$voucher_options$$.option_webhooks.find($w$$=>$w$$.action.toUpperCase()===$action$$.toUpperCase()&&$w$$.url))){$voucher_options$$=path.dirname(__dirname)+"/workers/webhook.js";if(!fs.existsSync($voucher_options$$))return console.error("webhook process is not exitst");
58
+ global.webhookPool||(global.webhookPool=new StaticPool($voucher_options$$,0,1));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error("runWebhooks",$response$$.error):console.log($response$$)})}},getNextSequence=async function($id_app$$,$ma_ct$$,$field$$,$callback$$,$options$$={}){var $condition_qct_qcts$$={status:!0,field:$field$$,id_app:$id_app$$,$and:[{$or:[{ma_ct:"#",ma_ct_khac:{$regex:$ma_ct$$,$options:"i"}},{cac_ma_ct:$ma_ct$$.toLowerCase()},
59
+ {ma_ct:$ma_ct$$.toUpperCase()}]}]};$options$$.id_qct&&($condition_qct_qcts$$._id=$options$$.id_qct);if($options$$.ngay_ct){let $start_date$$=moment($options$$.ngay_ct).startOf("date").toDate(),$end_date$$=moment($options$$.ngay_ct).endOf("date").toDate();$condition_qct_qcts$$.$and.push({$or:[{tu_ngay:null},{tu_ngay:{$lte:$end_date$$}}]});$condition_qct_qcts$$.$and.push({$or:[{den_ngay:null},{den_ngay:{$gte:$start_date$$}}]})}$options$$.toObject&&($options$$=utils.convertObjectIdsToStrings($options$$.toObject()));
60
+ $condition_qct_qcts$$=await dmqct.find($condition_qct_qcts$$).lean();const $keys$$=Object.keys($options$$),$qct$$=$condition_qct_qcts$$.find($qct$$=>{if($qct$$.dieu_kien&&$keys$$.length>0)try{let $str_func$$=$qct$$.dieu_kien;if($str_func$$.indexOf("async ")>=0)return!1;$str_func$$.indexOf("return ")!==0&&($str_func$$=`return ${$str_func$$}`);return evalute($str_func$$,{...$options$$,master:{...$options$$},moment,numeral})}catch($e$$){return console.error("Error find quyen chung tu",$e$$,$qct$$.dieu_kien),
61
+ !1}else return!0});let $code$$=$qct$$?$qct$$._id.toString():$field$$;counter.getNextSequence($id_app$$,$ma_ct$$,$code$$,async function($error$$,$rs$$){if($error$$)console.error("auto create code for",$ma_ct$$,$code$$,$error$$),$callback$$($error$$);else{if($qct$$){let $tien_to$$=$qct$$.tien_to||"";if($tien_to$$.indexOf("return ")>=0&&$tien_to$$.indexOf("async ")<0)try{$tien_to$$=evalute($tien_to$$,{...$options$$,moment,numeral}),$tien_to$$=$tien_to$$.toString().trim()}catch($e$$){console.error("getNextSequence",
62
+ $e$$)}let $hau_to$$=$qct$$.hau_to||"";if($hau_to$$.indexOf("return ")>=0&&$hau_to$$.indexOf("async ")<0)try{$hau_to$$=evalute($hau_to$$,{...$options$$,moment,numeral}),$hau_to$$=$hau_to$$.toString().trim()}catch($e$$){console.error("getNextSequence",$e$$)}!$qct$$.tu_dong_reset||$qct$$.tien_to_ht==void 0||$qct$$.hau_to_ht==void 0||$qct$$.tien_to_ht==$tien_to$$&&$qct$$.hau_to_ht==$hau_to$$||($rs$$=1,await counter.updateOne({id_app:$id_app$$,name:$ma_ct$$.toUpperCase(),field:$code$$},{sequence:$rs$$}));
63
+ $rs$$=($qct$$.tu_so||0)+$rs$$;$error$$=$rs$$.toString();var $den_so_so_ky_tu_them$$=$qct$$.den_so;$den_so_so_ky_tu_them$$||=999999;$den_so_so_ky_tu_them$$=$den_so_so_ky_tu_them$$.toString().length-$error$$.length;$error$$=$den_so_so_ky_tu_them$$>0?($tien_to$$||"")+"0000000000000000000000".substring(0,$den_so_so_ky_tu_them$$)+$error$$+$hau_to$$:($tien_to$$||"")+$error$$+$hau_to$$;$qct$$.so_ht=$rs$$;$qct$$.tien_to_ht=$tien_to$$;$qct$$.hau_to_ht=$hau_to$$;await dmqct.updateOne({_id:$qct$$._id},$qct$$)}else $error$$=
64
+ $rs$$.toString();$rs$$={};$rs$$[$field$$]=$error$$;$callback$$(null,$rs$$)}})};
65
65
  function checkReference($model$$,$obj$$,$fn$$,$keys$$){$model$$.referenceKeys?($keys$$||=_.keys($model$$.referenceKeys),async.map($keys$$,function($key$$,$callback$$){setImmediate(()=>{let $ref$$=$model$$.referenceKeys[$key$$];if(!$ref$$)return $callback$$();let $value$$=$obj$$[$key$$];$key$$==="_id"&&($value$$=$value$$.toString());if($value$$==void 0||$value$$==null||$value$$=="")return $callback$$();async.map($ref$$,function($r$$,$cb$$){setImmediate(()=>{let $model$$=mongoose.models[$r$$.model];
66
66
  if($model$$){let $query$$={id_app:$obj$$.id_app};var $_w_k$$=$r$$.key;$_w_k$$&&($query$$[$_w_k$$]=$value$$);$r$$.where&&(_.isObject($r$$.where)&&($query$$=Object.assign($query$$,$r$$.where)),_.isFunction($r$$.where)&&($_w_k$$=$r$$.where($obj$$),$query$$=Object.assign($query$$,$_w_k$$)));$model$$.find($query$$).limit(1).lean().then(function($o$$){setImmediate(()=>{if($o$$&&$o$$.length>0){let $msgError$$;$msgError$$=$r$$.error?(new Function("obj","return `"+$r$$.error.replace("{{VALUE}}",$value$$)+
67
67
  "`"))($obj$$):ERRORS.ERR_DATA_GENERATED;return $cb$$({error:$msgError$$,code:ERRORS.ERR_DATA_GENERATED_CODE})}$cb$$()})}).catch($error$$=>{$cb$$($error$$)})}else $cb$$()})},function($e$$){if($e$$)return $callback$$($e$$);$callback$$()})})},$error$$=>{$fn$$($error$$)})):$fn$$()}
@@ -1,12 +1,12 @@
1
- const moment=require("moment"),_=require("lodash"),permission=require("../libs/permission"),{JSONParser}=require("../libs/utils"),{getCacheReport,setCacheReport}=require("../libs/redis-cache"),cache_time=5,rptHandler=async($ctrl$$,$req$$,$callback$$,$res$$)=>{const $rptId$$=$ctrl$$.module,$module$$=$ctrl$$.module,$options$$=$ctrl$$.options;let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user);delete $req$$.query.rpt;let $body$$={};_.isObject($req$$.body)&&($body$$=$req$$.body);let $query$$=
2
- {...$req$$.query,...$body$$};try{$query$$.tu_ngay&&($query$$.tu_ngay=moment($query$$.tu_ngay).startOf("date").toDate());$query$$.den_ngay&&($query$$.den_ngay=moment($query$$.den_ngay).endOf("date").toDate());$query$$.tu_ngay_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_kt).startOf("date").toDate());$query$$.den_ngay_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_kt).endOf("date").toDate());$query$$.tu_ngay_gio&&($query$$.tu_ngay=moment($query$$.tu_ngay_gio).toDate());$query$$.den_ngay_gio&&
3
- ($query$$.den_ngay=moment($query$$.den_ngay_gio).toDate());$query$$.tu_ngay_gio_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_gio_kt).toDate());$query$$.den_ngay_gio_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_gio_kt).toDate());for(let $q$$ in $query$$)if(!$query$$[$q$$])delete $query$$[$q$$];else if(_.isString($query$$[$q$$])&&($query$$[$q$$].indexOf("[")>=0||$query$$[$q$$].indexOf("{")>=0))try{$query$$[$q$$]=JSONParser($query$$[$q$$])}catch($e$$){console.error("can't parse json",$query$$[$q$$],
4
- $rptId$$)}$req$$.query=$query$$;const $_query$$=Object.assign({},$query$$);delete $_query$$.id_rpt;delete $_query$$.t;delete $_query$$.jsonstream;delete $_query$$.cType;delete $_query$$.refresh_required;delete $_query$$.isDrilldown;let $getData$$;const $getDataFromServer$$=$ctrl$$.getDataFunc();if($options$$.cache==0||$query$$.refresh_required||$options$$.stream)$getData$$=$getDataFromServer$$;else{let $cacheData$$=await getCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,
5
- $options$$.cache_time||cache_time);if($cacheData$$){let $_data$$=$cacheData$$.data;$getData$$=$_data$$?function($req$$,$callback$$){$callback$$(null,$_data$$,!1,!0);setImmediate(()=>{$getDataFromServer$$($req$$,($error$$,$data$$)=>{$data$$&&setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$data$$,time:new Date,query:$_query$$})})})}:$getDataFromServer$$}else $getData$$=$getDataFromServer$$}let $streamData$$=function(){let $prechunk$$,$_interval$$,$sendHeader_yn$$,
6
- $rows$$=[];$getData$$($req$$,async($error$$,$data$$,$stream$$,$from_cache$$)=>{if($error$$){if(!$sendHeader_yn$$||!$options$$.stream||!$res$$)return $callback$$({error:$error$$.message||$error$$});$_interval$$&&clearInterval($_interval$$);setTimeout(()=>{$res$$.end(JSON.stringify({error:$error$$.toString()}))},1E3)}else if($options$$.stream&&$res$$)switch($stream$$){case "begin":console.log("begin stream",$rptId$$,"...");$query$$.jsonstream?$res$$.setHeader("Content-Type","application/jsonstream"):
7
- ($res$$.setHeader("Content-Type","application/json"),$res$$.setHeader("status",200),$res$$.write(""));$sendHeader_yn$$=!0;$_interval$$=setInterval(()=>{console.log("running stream","log",$rptId$$,"...");$res$$.write("")},100);break;case "running":console.log("running stream",$rptId$$,"...");$res$$.write("");break;case "data":console.log("data stream",$rptId$$,"...");_.isArray($data$$)?$rows$$=$rows$$.concat($data$$):$rows$$.push($data$$);$query$$.jsonstream?$res$$.write(JSON.stringify($data$$)+"$$end%"):
8
- $prechunk$$?$res$$.write(","+JSON.stringify($data$$)):$res$$.write(JSON.stringify($data$$));$prechunk$$=$data$$;break;case "end":$_interval$$&&clearInterval($_interval$$);setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)});setImmediate(()=>{setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$rows$$,time:new Date,
9
- query:$_query$$})});setTimeout(function(){console.log("end stream",$rptId$$,"...");$res$$.end();$callback$$(null,"__end_stream__")},1E3);break;default:console.log($stream$$,$rptId$$,"..."),$res$$.write("")}else setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)}),$options$$.cache==0||$from_cache$$||setCacheReport($req$$.user.email,$req$$.user.current_id_app,
10
- $rptId$$,$_query$$,{data:$data$$,time:new Date,query:$_query$$}),setImmediate(async()=>{let $report$$=$data$$;if(_.isArray($report$$)){if($query$$.fields){let $fields$$=$query$$.fields.split(",");$report$$=$report$$.map($item$$=>{let $_item$$={};$fields$$.forEach($field$$=>{$_item$$[$field$$]=$item$$[$field$$]});return $_item$$})}if($query$$.group_by&&$query$$.group_by_summary)try{$report$$=await $report$$.asyncGroupBy($query$$.group_by.split(","),$query$$.group_by_summary.split(","))}catch($e$$){return console.error("report groupBy data",
11
- $e$$,$rptId$$,"..."),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}}$callback$$(null,$report$$)})})};$options$$.require_id_app===!1?$streamData$$():permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view",($error$$,$hr$$)=>{$hr$$?$streamData$$():$callback$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xem b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}catch($e$$){return $e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}},
12
- {handlerWithSession}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$,$res$$)=>{handlerWithSession(rptHandler,$ctrl$$,$req$$,$callback$$,$res$$)};module.exports=withSesssion;
1
+ const moment=require("moment"),_=require("lodash"),permission=require("../libs/permission"),{JSONParser}=require("../libs/utils"),{getCacheReport,setCacheReport}=require("../libs/redis-cache"),cache_time=5,{getCurrentSession}=require("../libs/sessionContext"),rptHandler=async($ctrl$$,$req$$,$callback$$,$res$$)=>{console.log(`\u2705 [rptHanlder] sessionID=${getCurrentSession()?._debugId}`);const $rptId$$=$ctrl$$.module,$module$$=$ctrl$$.module,$options$$=$ctrl$$.options;let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user);
2
+ delete $req$$.query.rpt;let $body$$={};_.isObject($req$$.body)&&($body$$=$req$$.body);let $query$$={...$req$$.query,...$body$$};try{$query$$.tu_ngay&&($query$$.tu_ngay=moment($query$$.tu_ngay).startOf("date").toDate());$query$$.den_ngay&&($query$$.den_ngay=moment($query$$.den_ngay).endOf("date").toDate());$query$$.tu_ngay_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_kt).startOf("date").toDate());$query$$.den_ngay_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_kt).endOf("date").toDate());$query$$.tu_ngay_gio&&
3
+ ($query$$.tu_ngay=moment($query$$.tu_ngay_gio).toDate());$query$$.den_ngay_gio&&($query$$.den_ngay=moment($query$$.den_ngay_gio).toDate());$query$$.tu_ngay_gio_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_gio_kt).toDate());$query$$.den_ngay_gio_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_gio_kt).toDate());for(let $q$$ in $query$$)if(!$query$$[$q$$])delete $query$$[$q$$];else if(_.isString($query$$[$q$$])&&($query$$[$q$$].indexOf("[")>=0||$query$$[$q$$].indexOf("{")>=0))try{$query$$[$q$$]=
4
+ JSONParser($query$$[$q$$])}catch($e$$){console.error("[rptHanlder]can't parse json",$query$$[$q$$],$rptId$$)}$req$$.query=$query$$;const $_query$$=Object.assign({},$query$$);delete $_query$$.id_rpt;delete $_query$$.t;delete $_query$$.jsonstream;delete $_query$$.cType;delete $_query$$.refresh_required;delete $_query$$.isDrilldown;let $getData$$;const $getDataFromServer$$=$ctrl$$.getDataFunc();if($options$$.cache==0||$query$$.refresh_required||$options$$.stream)$getData$$=$getDataFromServer$$;else{let $cacheData$$=
5
+ await getCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,$options$$.cache_time||cache_time);if($cacheData$$){let $_data$$=$cacheData$$.data;$getData$$=$_data$$?function($req$$,$callback$$){$callback$$(null,$_data$$,!1,!0);setImmediate(()=>{$getDataFromServer$$($req$$,($error$$,$data$$)=>{$data$$&&setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$data$$,time:new Date,query:$_query$$})})})}:$getDataFromServer$$}else $getData$$=$getDataFromServer$$}let $streamData$$=
6
+ function(){let $prechunk$$,$_interval$$,$sendHeader_yn$$,$rows$$=[];console.log(`\u2705 [rptHanlder] sessionID=${getCurrentSession()?._debugId}`);$getData$$($req$$,async($error$$,$data$$,$stream$$,$from_cache$$)=>{if($error$$){if(!$sendHeader_yn$$||!$options$$.stream||!$res$$)return $callback$$({error:$error$$.message||$error$$});$_interval$$&&clearInterval($_interval$$);setTimeout(()=>{$res$$.end(JSON.stringify({error:$error$$.toString()}))},1E3)}else if($options$$.stream&&$res$$)switch($stream$$){case "begin":console.log("begin stream",
7
+ $rptId$$,"...");$query$$.jsonstream?$res$$.setHeader("Content-Type","application/jsonstream"):($res$$.setHeader("Content-Type","application/json"),$res$$.setHeader("status",200),$res$$.write(""));$sendHeader_yn$$=!0;$_interval$$=setInterval(()=>{console.log("running stream","log",$rptId$$,"...");$res$$.write("")},100);break;case "running":console.log("running stream",$rptId$$,"...");$res$$.write("");break;case "data":console.log("data stream",$rptId$$,"...");_.isArray($data$$)?$rows$$=$rows$$.concat($data$$):
8
+ $rows$$.push($data$$);$query$$.jsonstream?$res$$.write(JSON.stringify($data$$)+"$$end%"):$prechunk$$?$res$$.write(","+JSON.stringify($data$$)):$res$$.write(JSON.stringify($data$$));$prechunk$$=$data$$;break;case "end":$_interval$$&&clearInterval($_interval$$);setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)});setImmediate(()=>{setCacheReport($req$$.user.email,
9
+ $req$$.user.current_id_app,$rptId$$,$_query$$,{data:$rows$$,time:new Date,query:$_query$$})});setTimeout(function(){console.log("end stream",$rptId$$,"...");$res$$.end();$callback$$(null,"__end_stream__")},1E3);break;default:console.log($stream$$,$rptId$$,"..."),$res$$.write("")}else setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)}),$options$$.cache==
10
+ 0||$from_cache$$||setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$_query$$,{data:$data$$,time:new Date,query:$_query$$}),setImmediate(async()=>{let $report$$=$data$$;if(_.isArray($report$$)){if($query$$.fields){let $fields$$=$query$$.fields.split(",");$report$$=$report$$.map($item$$=>{let $_item$$={};$fields$$.forEach($field$$=>{$_item$$[$field$$]=$item$$[$field$$]});return $_item$$})}if($query$$.group_by&&$query$$.group_by_summary)try{$report$$=await $report$$.asyncGroupBy($query$$.group_by.split(","),
11
+ $query$$.group_by_summary.split(","))}catch($e$$){return console.error("report groupBy data",$e$$,$rptId$$,"..."),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}}$callback$$(null,$report$$)})})};$options$$.require_id_app===!1?$streamData$$():permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view",($error$$,$hr$$)=>{$hr$$?$streamData$$():$callback$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xem b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}catch($e$$){return $e$$.error?
12
+ $callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}},{handlerWithSession}=require("../libs/sessionContext.js"),withSesssion=async($ctrl$$,$req$$,$callback$$,$res$$)=>{handlerWithSession(rptHandler,$ctrl$$,$req$$,$callback$$,$res$$)};module.exports=withSesssion;
@@ -2,11 +2,11 @@ const dmvt=global.getModel("dmvt"),sokho=global.getModel("sokho"),hanmucton=glob
2
2
  module.exports=async($condition$$,$fn$$)=>{$fn$$||=()=>{};!$condition$$.ngay&&$condition$$.den_ngay&&($condition$$.ngay=$condition$$.den_ngay);let $ma_dvcs$$=$condition$$.ma_dvcs,$ma_kho$$=$condition$$.ma_kho,$ma_vt$$=$condition$$.ma_vt;if(_.isString($ma_vt$$)&&$ma_vt$$.indexOf("[")>=0&&$ma_vt$$.indexOf("]")>0)try{$ma_vt$$=JSON.parse($ma_vt$$),$ma_vt$$.length==0&&($ma_vt$$=void 0)}catch($e$$){console.error($e$$)}$ma_vt$$&&_.isArray($ma_vt$$)&&($ma_vt$$={$in:Object.assign($ma_vt$$)});let $id_app$$=
3
3
  $condition$$.id_app;if(!await global.getModel("app").findOne({_id:$condition$$.id_app},{ngay_ks:1}).lean())return $fn$$("C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i");let $ngay$$=moment($condition$$.ngay).endOf("date").toDate(),$ngay_ks$$=(await global.getModel("cdvttheongay").findOne({id_app:$id_app$$,den_ngay:{$lte:moment($ngay$$).startOf("date").toDate()}},{den_ngay:1}).sort({den_ngay:-1}).lean()||{}).den_ngay;$ngay_ks$$&&=moment($ngay_ks$$).endOf("date").toDate();let $ngay_tinh_dn$$=$condition$$.tu_ngay&&
4
4
  new Date($condition$$.tu_ngay)<$ngay$$?moment($condition$$.tu_ngay).endOf("date").toDate():$ngay$$,$ngay_dn$$=moment($ngay_tinh_dn$$).startOf("year").toDate(),$nam$$,$cdvt$$;!$ngay_ks$$||$ngay_ks$$<$ngay_dn$$?($cdvt$$=global.getModel("cdvt"),$nam$$=$ngay_tinh_dn$$.getFullYear()):($cdvt$$=global.getModel("cdvttheongay"),$ngay_dn$$=moment($ngay_ks$$).startOf("date").add(1,"days").toDate());return new Promise(($resolve$$,$reject$$)=>{async.parallel({ckcapphat:$callback$$=>{setImmediate(()=>{ckvtcapphat($condition$$,
5
- ($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})},dn:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$nam$$?$c_dk$$.nam=$nam$$:(console.log("lay cdvt theo ngay khoa so",$ngay_ks$$),$c_dk$$.den_ngay=$ngay_ks$$);$ma_kho$$&&($c_dk$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($c_dk$$.ma_dvcs=$ma_dvcs$$);$ma_vt$$&&($c_dk$$.ma_vt=$ma_vt$$);$condition$$.ma_lo&&($c_dk$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($c_dk$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($c_dk$$.ma_tt1=$condition$$.ma_tt1);
6
- $condition$$.ma_tt2&&($c_dk$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($c_dk$$.ma_tt3=$condition$$.ma_tt3);$cdvt$$.find($c_dk$$).lean().then($results$$=>{$callback$$(null,$results$$)}).catch($error$$=>{$callback$$($error$$)})})},hanmucton:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$ma_kho$$&&($c_dk$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($c_dk$$.ma_dvcs=$ma_dvcs$$);$ma_vt$$&&($c_dk$$.ma_vt=$ma_vt$$);$condition$$.ma_lo&&($c_dk$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&
7
- ($c_dk$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($c_dk$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($c_dk$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($c_dk$$.ma_tt3=$condition$$.ma_tt3);hanmucton.find($c_dk$$).lean().then($results$$=>{$callback$$(null,$results$$)}).catch($error$$=>{$callback$$($error$$)})})},ps:$callback$$=>{setImmediate(()=>{const $query$$={id_app:$id_app$$,ngay_ct:{$gte:$ngay_dn$$,$lte:$ngay$$}};$ma_kho$$&&($query$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($query$$.ma_dvcs=
8
- $ma_dvcs$$);$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);$condition$$.ma_lo&&($query$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($query$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($query$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($query$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($query$$.ma_tt3=$condition$$.ma_tt3);$condition$$.id_ct&&($query$$.id_ct={$ne:$condition$$.id_ct});sokho.find($query$$,{ma_vt:1,ma_kho:1,ma_tt1:1,ma_tt2:1,ma_tt3:1,sl_nhap:1,sl_xuat:1,sl_nhap_qd:1,sl_xuat_qd:1,
9
- tien_nhap:1,tien_xuat:1}).lean().then($pss$$=>{$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap=utils.round($ps$$.sl_nhap_qd,4);$ps$$.sl_xuat=utils.round($ps$$.sl_xuat_qd,4);return $ps$$});$callback$$(null,$pss$$)}).catch($error$$=>{$callback$$($error$$)})})},ton_kho_mac_dinh:$callback$$=>{setImmediate(()=>{let $query$$={id_app:$id_app$$,ton_kho_mac_dinh:{$nin:[null,void 0,0]}};$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);dmvt.find($query$$,{ma_vt:1,ton_kho_mac_dinh:1}).lean().then($rs$$=>{$callback$$(null,$rs$$)}).catch($error$$=>
10
- {console.error($error$$)})})}},($ckcapphat_error$$,$data_results$$)=>{if($ckcapphat_error$$)return $fn$$($ckcapphat_error$$),$reject$$(Error($ckcapphat_error$$));$ckcapphat_error$$=$data_results$$.ckcapphat.map($c$$=>{$c$$.ton00_capphat=$c$$.ton00;$c$$.du00_capphat=$c$$.du00;$c$$.ton00=0;$c$$.du00=0;return $c$$});$data_results$$=$data_results$$.dn.concat($data_results$$.ps).concat($ckcapphat_error$$).concat($data_results$$.ton_kho_mac_dinh).concat($data_results$$.hanmucton);($ckcapphat_error$$=$condition$$.groupBy||
11
- $condition$$.groupby)||($ckcapphat_error$$=["ma_vt"]);if(_.isString($ckcapphat_error$$))if($ckcapphat_error$$.indexOf("[")>=0)try{$ckcapphat_error$$=JSON.parse($ckcapphat_error$$)}catch($e$$){console.error($e$$)}else $ckcapphat_error$$=$ckcapphat_error$$.split(",");$data_results$$.groupBy($ckcapphat_error$$,"sl_nhap sl_xuat ton00 du00 ton00_capphat du00_capphat tien_nhap tien_xuat ton_kho_mac_dinh ton_toi_thieu ton_toi_da".split(" "),($e$$,$groups$$)=>{if($e$$)return $fn$$($e$$),$reject$$(Error($e$$));
12
- setImmediate(()=>{for(let $r$$ of $groups$$)$r$$.ton00=utils.round($r$$.ton00+$r$$.sl_nhap-$r$$.sl_xuat,4),$r$$.du00=Math.roundBy($r$$.du00,0)+Math.roundBy($r$$.tien_nhap,0)-Math.roundBy($r$$.tien_xuat,0),$r$$.sl_nhap=0,$r$$.sl_xuat=0,$r$$.tien_nhap=0,$r$$.tien_xuat=0,$r$$.ton=$r$$.ton00-($r$$.ton00_capphat>0?$r$$.ton00_capphat:0),$r$$.du=$r$$.du00-($r$$.du00_capphat>0?$r$$.du00_capphat:0);$fn$$(null,$groups$$);$resolve$$($groups$$)})})})})};
5
+ ($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})},dn:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$nam$$?$c_dk$$.nam=$nam$$:$c_dk$$.den_ngay=$ngay_ks$$;$ma_kho$$&&($c_dk$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($c_dk$$.ma_dvcs=$ma_dvcs$$);$ma_vt$$&&($c_dk$$.ma_vt=$ma_vt$$);$condition$$.ma_lo&&($c_dk$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($c_dk$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($c_dk$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($c_dk$$.ma_tt2=$condition$$.ma_tt2);
6
+ $condition$$.ma_tt3&&($c_dk$$.ma_tt3=$condition$$.ma_tt3);$cdvt$$.find($c_dk$$).lean().then($results$$=>{$callback$$(null,$results$$)}).catch($error$$=>{$callback$$($error$$)})})},hanmucton:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$ma_kho$$&&($c_dk$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($c_dk$$.ma_dvcs=$ma_dvcs$$);$ma_vt$$&&($c_dk$$.ma_vt=$ma_vt$$);$condition$$.ma_lo&&($c_dk$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($c_dk$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&
7
+ ($c_dk$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($c_dk$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($c_dk$$.ma_tt3=$condition$$.ma_tt3);hanmucton.find($c_dk$$).lean().then($results$$=>{$callback$$(null,$results$$)}).catch($error$$=>{$callback$$($error$$)})})},ps:$callback$$=>{setImmediate(()=>{const $query$$={id_app:$id_app$$,ngay_ct:{$gte:$ngay_dn$$,$lte:$ngay$$}};$ma_kho$$&&($query$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($query$$.ma_dvcs=$ma_dvcs$$);$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);
8
+ $condition$$.ma_lo&&($query$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($query$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($query$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($query$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($query$$.ma_tt3=$condition$$.ma_tt3);$condition$$.id_ct&&($query$$.id_ct={$ne:$condition$$.id_ct});sokho.find($query$$,{ma_vt:1,ma_kho:1,ma_tt1:1,ma_tt2:1,ma_tt3:1,sl_nhap:1,sl_xuat:1,sl_nhap_qd:1,sl_xuat_qd:1,tien_nhap:1,tien_xuat:1}).lean().then($pss$$=>
9
+ {$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap=utils.round($ps$$.sl_nhap_qd,4);$ps$$.sl_xuat=utils.round($ps$$.sl_xuat_qd,4);return $ps$$});$callback$$(null,$pss$$)}).catch($error$$=>{$callback$$($error$$)})})},ton_kho_mac_dinh:$callback$$=>{setImmediate(()=>{let $query$$={id_app:$id_app$$,ton_kho_mac_dinh:{$nin:[null,void 0,0]}};$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);dmvt.find($query$$,{ma_vt:1,ton_kho_mac_dinh:1}).lean().then($rs$$=>{$callback$$(null,$rs$$)}).catch($error$$=>{console.error($error$$)})})}},
10
+ ($ckcapphat_error$$,$data_results$$)=>{if($ckcapphat_error$$)return $fn$$($ckcapphat_error$$),$reject$$(Error($ckcapphat_error$$));$ckcapphat_error$$=$data_results$$.ckcapphat.map($c$$=>{$c$$.ton00_capphat=$c$$.ton00;$c$$.du00_capphat=$c$$.du00;$c$$.ton00=0;$c$$.du00=0;return $c$$});$data_results$$=$data_results$$.dn.concat($data_results$$.ps).concat($ckcapphat_error$$).concat($data_results$$.ton_kho_mac_dinh).concat($data_results$$.hanmucton);($ckcapphat_error$$=$condition$$.groupBy||$condition$$.groupby)||
11
+ ($ckcapphat_error$$=["ma_vt"]);if(_.isString($ckcapphat_error$$))if($ckcapphat_error$$.indexOf("[")>=0)try{$ckcapphat_error$$=JSON.parse($ckcapphat_error$$)}catch($e$$){console.error($e$$)}else $ckcapphat_error$$=$ckcapphat_error$$.split(",");$data_results$$.groupBy($ckcapphat_error$$,"sl_nhap sl_xuat ton00 du00 ton00_capphat du00_capphat tien_nhap tien_xuat ton_kho_mac_dinh ton_toi_thieu ton_toi_da".split(" "),($e$$,$groups$$)=>{if($e$$)return $fn$$($e$$),$reject$$(Error($e$$));setImmediate(()=>
12
+ {for(let $r$$ of $groups$$)$r$$.ton00=utils.round($r$$.ton00+$r$$.sl_nhap-$r$$.sl_xuat,4),$r$$.du00=Math.roundBy($r$$.du00,0)+Math.roundBy($r$$.tien_nhap,0)-Math.roundBy($r$$.tien_xuat,0),$r$$.sl_nhap=0,$r$$.sl_xuat=0,$r$$.tien_nhap=0,$r$$.tien_xuat=0,$r$$.ton=$r$$.ton00-($r$$.ton00_capphat>0?$r$$.ton00_capphat:0),$r$$.du=$r$$.du00-($r$$.du00_capphat>0?$r$$.du00_capphat:0);$fn$$(null,$groups$$);$resolve$$($groups$$)})})})})};
@@ -1,10 +1,9 @@
1
- const sokho=global.getModel("sokho"),async=require("async"),_=require("lodash"),utils=require("./utils"),moment=require("moment"),crypto=require("crypto");
2
- module.exports=async function($condition$$,$fn$$){!$condition$$.ngay&&$condition$$.tu_ngay&&($condition$$.ngay=$condition$$.tu_ngay);if($condition$$&&$condition$$.ngay&&$condition$$.id_app){var $uniqueId$$=crypto.randomUUID(),$ma_dvcs$$=$condition$$.ma_dvcs,$ma_kho$$=$condition$$.ma_kho,$ma_vt$$=$condition$$.ma_vt;_.isArray($ma_vt$$)&&($ma_vt$$={$in:$ma_vt$$});var $id_app$$=$condition$$.id_app;if(!await global.getModel("app").findOne({_id:$condition$$.id_app},{ngay_ks:1}).lean())return $fn$$("C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i");
1
+ const sokho=global.getModel("sokho"),async=require("async"),_=require("lodash"),utils=require("./utils"),moment=require("moment");
2
+ module.exports=async function($condition$$,$fn$$){!$condition$$.ngay&&$condition$$.tu_ngay&&($condition$$.ngay=$condition$$.tu_ngay);if($condition$$&&$condition$$.ngay&&$condition$$.id_app){var $ma_dvcs$$=$condition$$.ma_dvcs,$ma_kho$$=$condition$$.ma_kho,$ma_vt$$=$condition$$.ma_vt;_.isArray($ma_vt$$)&&($ma_vt$$={$in:$ma_vt$$});var $id_app$$=$condition$$.id_app;if(!await global.getModel("app").findOne({_id:$condition$$.id_app},{ngay_ks:1}).lean())return $fn$$("C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i");
3
3
  var $ngay$$=moment($condition$$.ngay).startOf("date").toDate(),$ngay_ks$$=(await global.getModel("cdvttheongay").findOne({id_app:$id_app$$,den_ngay:{$lte:moment($ngay$$).startOf("date").toDate()}},{den_ngay:1}).sort({den_ngay:-1}).lean()||{}).den_ngay;$ngay_ks$$&&=moment($ngay_ks$$).endOf("date").toDate();var $ngay_tinh_dn$$=moment($condition$$.ngay).startOf("date").toDate(),$ngay_dn$$=moment($ngay_tinh_dn$$).startOf("year").toDate();if(!$ngay_ks$$||$ngay_ks$$<$ngay_dn$$){var $cdvt$$=global.getModel("cdvt");
4
- var $nam$$=$ngay_tinh_dn$$.getFullYear()}else $cdvt$$=global.getModel("cdvttheongay"),$ngay_dn$$=moment($ngay_ks$$).startOf("date").add(1,"days").toDate();async.parallel({dn:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$nam$$?($c_dk$$.nam=$nam$$,console.log("[dkvt] lay cdvt theo n\u0103m kho\u00e1 s\u1ed5")):(console.log("[dkvt] lay cdvt theo ngay khoa so",$ngay_ks$$),$c_dk$$.den_ngay=$ngay_ks$$);$ma_vt$$&&($c_dk$$.ma_vt=$ma_vt$$);$ma_kho$$&&($c_dk$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&
5
- ($c_dk$$.ma_dvcs=$ma_dvcs$$);$condition$$.ma_lo&&($c_dk$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($c_dk$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($c_dk$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($c_dk$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($c_dk$$.ma_tt3=$condition$$.ma_tt3);$cdvt$$.find($c_dk$$).lean().then($results$$=>{$results$$.joinModel2($id_app$$,"dmvt",{where:"ma_vt",fields:"tk_vt"},()=>{$callback$$(null,$results$$)})}).catch($error$$=>{$callback$$({message:$error$$.message})})})},
6
- ps:$callback$$=>{setImmediate(()=>{const $query$$={id_app:$id_app$$,ngay_ct:{$gte:$ngay_dn$$,$lt:$ngay$$}};$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);$ma_kho$$&&($query$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($query$$.ma_dvcs=$ma_dvcs$$);$condition$$.ma_lo&&($query$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($query$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($query$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($query$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($query$$.ma_tt3=$condition$$.ma_tt3);
7
- console.time("[dkvt] T\u00ednh s\u1ed1 ph\u00e1t sinh t\u1eeb ng\u00e0y kho\u00e1 s\u1ed5 \u0111\u1ebfn ng\u00e0y \u0111\u1ea7u k\u1ef3 "+$uniqueId$$.toString());sokho.find($query$$).lean().then($pss$$=>{console.timeEnd("[dkvt] T\u00ednh s\u1ed1 ph\u00e1t sinh t\u1eeb ng\u00e0y kho\u00e1 s\u1ed5 \u0111\u1ebfn ng\u00e0y \u0111\u1ea7u k\u1ef3 "+$uniqueId$$.toString());$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap=utils.round($ps$$.sl_nhap_qd,4);$ps$$.sl_xuat=utils.round($ps$$.sl_xuat_qd,4);return $ps$$});
8
- $callback$$(null,$pss$$)}).catch($error$$=>{$callback$$({message:$error$$.message})})})}},async($data_error$$,$groupBy_results$$)=>{if($data_error$$)return $fn$$($data_error$$);$data_error$$=$groupBy_results$$.dn.concat($groupBy_results$$.ps);($groupBy_results$$=$condition$$.groupBy||$condition$$.groupby)||($groupBy_results$$=["ma_vt"]);($groupBy_results$$.indexOf("ma_nvt")>=0||$groupBy_results$$.indexOf("ma_nvt2")>=0||$groupBy_results$$.indexOf("ma_nv3")>=0||$groupBy_results$$.indexOf("ma_nvt4")>=
9
- 0)&&await $data_error$$.asyncJoinModel2($id_app$$,"dmvt",{where:"ma_vt",fields:["ma_nvt","ma_nvt2","ma_nvt3","ma_nvt4"]});if(_.isString($groupBy_results$$))if($groupBy_results$$.indexOf("[")>=0)try{$groupBy_results$$=JSON.parse($groupBy_results$$)}catch($e$$){console.error($e$$)}else $groupBy_results$$=$groupBy_results$$.split(",");$data_error$$.groupBy($groupBy_results$$,"sl_nhap sl_xuat ton00 du00 tien_nhap tien_xuat".split(" "),($e$$,$groups$$)=>{if($e$$)return $fn$$($e$$);setImmediate(()=>{for(let $r$$ of $groups$$)$r$$.ton00=
10
- utils.round($r$$.ton00+$r$$.sl_nhap-$r$$.sl_xuat,4),$r$$.du00=utils.round($r$$.du00,0)+utils.round($r$$.tien_nhap,0)-utils.round($r$$.tien_xuat,0),$r$$.sl_nhap=0,$r$$.sl_xuat=0,$r$$.tien_nhap=0,$r$$.tien_xuat=0;$fn$$(null,$groups$$)})})})}else $fn$$("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: ngay,id_app")};
4
+ var $nam$$=$ngay_tinh_dn$$.getFullYear()}else $cdvt$$=global.getModel("cdvttheongay"),$ngay_dn$$=moment($ngay_ks$$).startOf("date").add(1,"days").toDate();async.parallel({dn:$callback$$=>{setImmediate(()=>{const $c_dk$$={id_app:$id_app$$};$nam$$?($c_dk$$.nam=$nam$$,console.log("[dkvt] lay cdvt theo n\u0103m kho\u00e1 s\u1ed5")):$c_dk$$.den_ngay=$ngay_ks$$;$ma_vt$$&&($c_dk$$.ma_vt=$ma_vt$$);$ma_kho$$&&($c_dk$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($c_dk$$.ma_dvcs=$ma_dvcs$$);$condition$$.ma_lo&&($c_dk$$.ma_lo=
5
+ $condition$$.ma_lo);$condition$$.han_sd&&($c_dk$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($c_dk$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($c_dk$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($c_dk$$.ma_tt3=$condition$$.ma_tt3);$cdvt$$.find($c_dk$$).lean().then($results$$=>{$results$$.joinModel2($id_app$$,"dmvt",{where:"ma_vt",fields:"tk_vt"},()=>{$callback$$(null,$results$$)})}).catch($error$$=>{$callback$$({message:$error$$.message})})})},ps:$callback$$=>{setImmediate(()=>
6
+ {const $query$$={id_app:$id_app$$,ngay_ct:{$gte:$ngay_dn$$,$lt:$ngay$$}};$ma_vt$$&&($query$$.ma_vt=$ma_vt$$);$ma_kho$$&&($query$$.ma_kho=$ma_kho$$);$ma_dvcs$$&&($query$$.ma_dvcs=$ma_dvcs$$);$condition$$.ma_lo&&($query$$.ma_lo=$condition$$.ma_lo);$condition$$.han_sd&&($query$$.han_sd=$condition$$.han_sd);$condition$$.ma_tt1&&($query$$.ma_tt1=$condition$$.ma_tt1);$condition$$.ma_tt2&&($query$$.ma_tt2=$condition$$.ma_tt2);$condition$$.ma_tt3&&($query$$.ma_tt3=$condition$$.ma_tt3);sokho.find($query$$).lean().then($pss$$=>
7
+ {$pss$$=$pss$$.map($ps$$=>{$ps$$.sl_nhap=utils.round($ps$$.sl_nhap_qd,4);$ps$$.sl_xuat=utils.round($ps$$.sl_xuat_qd,4);return $ps$$});$callback$$(null,$pss$$)}).catch($error$$=>{$callback$$({message:$error$$.message})})})}},async($data_error$$,$groupBy_results$$)=>{if($data_error$$)return $fn$$($data_error$$);$data_error$$=$groupBy_results$$.dn.concat($groupBy_results$$.ps);($groupBy_results$$=$condition$$.groupBy||$condition$$.groupby)||($groupBy_results$$=["ma_vt"]);($groupBy_results$$.indexOf("ma_nvt")>=
8
+ 0||$groupBy_results$$.indexOf("ma_nvt2")>=0||$groupBy_results$$.indexOf("ma_nv3")>=0||$groupBy_results$$.indexOf("ma_nvt4")>=0)&&await $data_error$$.asyncJoinModel2($id_app$$,"dmvt",{where:"ma_vt",fields:["ma_nvt","ma_nvt2","ma_nvt3","ma_nvt4"]});if(_.isString($groupBy_results$$))if($groupBy_results$$.indexOf("[")>=0)try{$groupBy_results$$=JSON.parse($groupBy_results$$)}catch($e$$){console.error($e$$)}else $groupBy_results$$=$groupBy_results$$.split(",");$data_error$$.groupBy($groupBy_results$$,"sl_nhap sl_xuat ton00 du00 tien_nhap tien_xuat".split(" "),
9
+ ($e$$,$groups$$)=>{if($e$$)return $fn$$($e$$);setImmediate(()=>{for(let $r$$ of $groups$$)$r$$.ton00=utils.round($r$$.ton00+$r$$.sl_nhap-$r$$.sl_xuat,4),$r$$.du00=utils.round($r$$.du00,0)+utils.round($r$$.tien_nhap,0)-utils.round($r$$.tien_xuat,0),$r$$.sl_nhap=0,$r$$.sl_xuat=0,$r$$.tien_nhap=0,$r$$.tien_xuat=0;$fn$$(null,$groups$$)})})})}else $fn$$("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: ngay,id_app")};
@@ -1,8 +1,9 @@
1
- const {getCurrentSession,runWithSession,isModelExcludedFromSession,isSessionActive}=require("./sessionContext"),DEBUG=process.env.SESSION_DEBUG==="true";function logDebug($prefix$$,$model$$,$method$$,$opts$$={}){DEBUG&&$opts$$.session&&console.log(`[${$prefix$$}] Model=${$model$$?.modelName||"?"} Method=${$method$$} Session=${$opts$$.session?$opts$$.session.id||$opts$$.session.client?.id||"(no id)":"none"}`)}
1
+ const {storage,getCurrentStore,getCurrentSession,runWithSession,isModelExcludedFromSession,isSessionActive}=require("./sessionContext"),DEBUG=process.env.SESSION_DEBUG==="true";function logDebug($prefix$$,$model$$,$method$$,$opts$$={}){DEBUG&&$opts$$.session&&console.log(`[${$prefix$$}] Model=${$model$$?.modelName||"?"} Method=${$method$$} Session=${$opts$$.session?$opts$$.session.id||$opts$$.session.client?.id||"(no id)":"none"}`)}
2
2
  const writeMethods="save updateOne updateMany deleteOne deleteMany findOneAndUpdate findOneAndDelete findOneAndRemove insertMany create".split(" "),readMethods="find findOne findById findByIdAndUpdate findByIdAndDelete findByIdAndRemove aggregate count countDocuments distinct".split(" ");
3
- [...writeMethods,...readMethods].forEach($method$$=>{const $original$$=mongoose.Model.prototype[$method$$];typeof $original$$==="function"&&(mongoose.Model.prototype[$method$$]=function(...$args$$){const $session$$=getCurrentSession(),$lastArg$$=$args$$[$args$$.length-1],$hasCallback$$=typeof $lastArg$$==="function";let $opts$$=$args$$[$hasCallback$$?$args$$.length-2:$args$$.length-1];if(typeof $opts$$!=="object"||Array.isArray($opts$$))$opts$$={},$hasCallback$$?$args$$.splice($args$$.length-1,0,
4
- $opts$$):$args$$.push($opts$$);!$session$$||$opts$$.session||isModelExcludedFromSession(this.constructor.modelName)?logDebug("NoSession",this,$method$$,{session:$opts$$.session}):isSessionActive($session$$)?($opts$$.session=$session$$,logDebug("AttachSession",this,$method$$,{session:$session$$})):console.warn(`[WARN] ${this.modelName}.${$method$$}(): session \u0111\u00e3 commit, t\u1ef1 \u0111\u1ed9ng b\u1ecf qua.`);$hasCallback$$&&($args$$[$args$$.length-1]=(...$cbArgs$$)=>runWithSession($session$$,
5
- ()=>$lastArg$$(...$cbArgs$$)));try{const $result$$=$original$$.apply(this,$args$$);$result$$?.then&&$result$$.then(()=>logDebug("OK",this,$method$$,{session:$opts$$.session})).catch($err$$=>{console.error(`[ERR] ${this.modelName}.${$method$$} Session=${$opts$$.session?.id||"none"}`,$err$$)});return $result$$}catch($err$$){throw console.error(`[THROW] ${this.modelName}.${$method$$}`,$err$$),$err$$;}})});const originalExec=mongoose.Query.prototype.exec;
6
- originalExec&&(mongoose.Query.prototype.exec=function(...$args$$){const $session$$=getCurrentSession(),$modelName$$=this.model?.modelName||"UnknownModel",$operation$$=this.op||"unknownOp";var $cbIndex_isExcluded$$=isModelExcludedFromSession(this.model);$session$$&&isSessionActive($session$$)&&!$cbIndex_isExcluded$$&&!this.options.session?(this.options.session=$session$$,logDebug("AttachSession(Query)",this.model,$operation$$,{session:$session$$})):$session$$&&!isSessionActive($session$$)?logDebug("SkipInvalidSession(Query)",
7
- this.model,$operation$$,{session:$session$$}):$cbIndex_isExcluded$$?logDebug("ExcludedModel(Query)",this.model,$operation$$):logDebug("NoSession(Query)",this.model,$operation$$,{session:this.options.session});$cbIndex_isExcluded$$=$args$$.findIndex($a$$=>typeof $a$$==="function");if($cbIndex_isExcluded$$!==-1){const $cb$$=$args$$[$cbIndex_isExcluded$$];$args$$[$cbIndex_isExcluded$$]=(...$cbArgs$$)=>runWithSession($session$$,()=>$cb$$(...$cbArgs$$))}try{const $result$$=originalExec.apply(this,$args$$);
8
- $result$$?.then&&$result$$.then(()=>logDebug("OK(Query)",this.model,$operation$$,{session:this.options.session})).catch($err$$=>{console.error(`[ERR(Query)] ${$modelName$$}.${$operation$$} session=${this.options.session?.id||"none"}\n`,$err$$)});return $result$$}catch($err$$){throw console.error(`[THROW(Query)] ${$modelName$$}.${$operation$$}`,$err$$),$err$$;}});console.log("[mongoosePatch] \u2705 Auto session + debug logging enabled");
3
+ [...writeMethods,...readMethods].forEach($method$$=>{const $original$$=mongoose.Model.prototype[$method$$];typeof $original$$==="function"&&(mongoose.Model.prototype[$method$$]=function(...$args$$){const $session$$=getCurrentSession(),$currentStore$$=getCurrentStore(),$lastArg$$=$args$$[$args$$.length-1],$hasCallback$$=typeof $lastArg$$==="function";let $opts$$=$args$$[$hasCallback$$?$args$$.length-2:$args$$.length-1];if(typeof $opts$$!=="object"||Array.isArray($opts$$))$opts$$={},$hasCallback$$?
4
+ $args$$.splice($args$$.length-1,0,$opts$$):$args$$.push($opts$$);!$session$$||$opts$$.session||isModelExcludedFromSession(this.constructor.modelName)?logDebug("NoSession",this,$method$$,{session:$opts$$.session}):isSessionActive($session$$)?($opts$$.session=$session$$,logDebug("AttachSession",this,$method$$,{session:$session$$})):console.warn(`[WARN] ${this.modelName}.${$method$$}(): session \u0111\u00e3 commit, t\u1ef1 \u0111\u1ed9ng b\u1ecf qua.`);$hasCallback$$&&($args$$[$args$$.length-1]=(...$cbArgs$$)=>
5
+ $currentStore$$?storage.run($currentStore$$,()=>$lastArg$$(...$cbArgs$$)):runWithSession($session$$,()=>$lastArg$$(...$cbArgs$$)));try{const $result$$=$original$$.apply(this,$args$$);$result$$?.then&&$result$$.then(()=>logDebug("OK",this,$method$$,{session:$opts$$.session})).catch($err$$=>{console.error(`[ERR] ${this.modelName}.${$method$$} Session=${$opts$$.session?.id||"none"}`,$err$$)});return $result$$}catch($err$$){throw console.error(`[THROW] ${this.modelName}.${$method$$}`,$err$$),$err$$;}})});
6
+ const originalExec=mongoose.Query.prototype.exec;
7
+ originalExec&&(mongoose.Query.prototype.exec=function(...$args$$){const $session$$=getCurrentSession(),$currentStore$$=getCurrentStore(),$modelName$$=this.model?.modelName||"UnknownModel",$operation$$=this.op||"unknownOp";var $cbIndex_isExcluded$$=isModelExcludedFromSession(this.model);$session$$&&isSessionActive($session$$)&&!$cbIndex_isExcluded$$&&!this.options.session?(this.options.session=$session$$,logDebug("AttachSession(Query)",this.model,$operation$$,{session:$session$$})):$session$$&&!isSessionActive($session$$)?
8
+ logDebug("SkipInvalidSession(Query)",this.model,$operation$$,{session:$session$$}):$cbIndex_isExcluded$$?logDebug("ExcludedModel(Query)",this.model,$operation$$):logDebug("NoSession(Query)",this.model,$operation$$,{session:this.options.session});$cbIndex_isExcluded$$=$args$$.findIndex($a$$=>typeof $a$$==="function");if($cbIndex_isExcluded$$!==-1){const $cb$$=$args$$[$cbIndex_isExcluded$$];$args$$[$cbIndex_isExcluded$$]=(...$cbArgs$$)=>$currentStore$$?storage.run($currentStore$$,()=>$cb$$(...$cbArgs$$)):
9
+ runWithSession($session$$,()=>$cb$$(...$cbArgs$$))}try{const $result$$=originalExec.apply(this,$args$$);$result$$?.then&&$result$$.then(()=>logDebug("OK(Query)",this.model,$operation$$,{session:this.options.session})).catch($err$$=>{console.error(`[ERR(Query)] ${$modelName$$}.${$operation$$} session=${this.options.session?.id||"none"}\n`,$err$$)});return $result$$}catch($err$$){throw console.error(`[THROW(Query)] ${$modelName$$}.${$operation$$}`,$err$$),$err$$;}});console.log("[mongoosePatch] \u2705 Auto session + debug logging enabled");
@@ -2,19 +2,20 @@ const async=require("async"),utils=require("./utils"),tontucthoi=global.getModel
2
2
  post.prototype.runPrepare=async($prepareFunction$$,$details$$)=>{$details$$=$details$$.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());return{...$d$$}});return new Promise($resolve$$=>{$prepareFunction$$?async.map($details$$,($detail$$,$callback$$)=>{setImmediate(()=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$prepareFunction$$($detail$$,$detail$$=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$callback$$(null,$detail$$)})})},($e$$,$details$$)=>{$resolve$$($details$$)}):
3
3
  $resolve$$($details$$)})};
4
4
  post.prototype.remove=function($callback$$=()=>{}){let $master$$=this.master;$master$$&&$master$$.toObject&&($master$$=$master$$.toObject());if(!$master$$._id)return $callback$$();let $model_book$$=this.model_book,$query_delete$$={id_ct:$master$$._id.toString(),id_app:$master$$.id_app};this.options.queryDelete&&($query_delete$$={...$query_delete$$,...this.options.queryDelete,id_app:$master$$.id_app});async.parallel({sks:$callback$$=>{setImmediate(()=>{$model_book$$.modelName.toLowerCase()==="sokho"?
5
- global.getModel("sokho").find({id_ct:$master$$._id.toString()}).lean().then(function($sks$$){$callback$$(null,$sks$$)}).catch($e$$=>{$callback$$($e$$)}):$callback$$(null,[])})}},($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);$model_book$$.deleteMany($query_delete$$,function($error$$){if($error$$)return $callback$$($error$$);$rs$$.sks.length>0?tontucthoi.tinhTonTucThoi($rs$$.sks,($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)}):$callback$$($error$$)})})};
6
- post.prototype.run=async function($callback$$=()=>{}){if(!this.details)return console.error("details not exists"),$callback$$(null);if(!this.master||!this.master._id)return console.error("[postbook] master is not exists",this.master),$callback$$(null);let $master$$=this.master;$master$$.toObject&&($master$$=$master$$.toObject());let $details$$=await this.runPrepare(this.prepare,this.details),$model_book$$=this.model_book;if($model_book$$.modelName.toLowerCase()==="tdttco"){var $rs$jscomp$2_tdtts_tdtts$$=
7
- await global.getModel("tdttco").find({id_ct:$master$$._id.toString()},{_id:1,tat_toan:1}).lean();if($rs$jscomp$2_tdtts_tdtts$$.length>0){if($rs$jscomp$2_tdtts_tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$rs$jscomp$2_tdtts_tdtts$$=$rs$jscomp$2_tdtts_tdtts$$.map($t$$=>$t$$._id.toString());if(await global.getModel("tdttco_tt").findOne({id_tdtt:{$in:$rs$jscomp$2_tdtts_tdtts$$}}))return $callback$$(null)}}if($model_book$$.modelName.toLowerCase()==="tdttno"&&($rs$jscomp$2_tdtts_tdtts$$=
8
- await global.getModel("tdttno").find({id_ct:$master$$._id.toString()},{_id:1,tat_toan:1}).lean(),$rs$jscomp$2_tdtts_tdtts$$.length>0)){if($rs$jscomp$2_tdtts_tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$rs$jscomp$2_tdtts_tdtts$$=$rs$jscomp$2_tdtts_tdtts$$.map($t$$=>$t$$._id.toString());if(await global.getModel("tdttno_tt").findOne({id_tdtt:{$in:$rs$jscomp$2_tdtts_tdtts$$}}))return $callback$$(null)}$model_book$$.modelName.toLowerCase()==="tdttco_tt"&&await Promise.all($details$$.filter($d$$=>
9
- $d$$.id_hd&&$d$$.id_tdtt).map($detail$$=>(async()=>{let $tdtt$$=await global.getModel("tdttco").findOne({_id:$detail$$.id_tdtt},{_id:1}).lean();!$tdtt$$&&($tdtt$$=await global.getModel("tdttco").findOne({id_ct:$detail$$.id_hd},{_id:1}).lean())&&($detail$$.id_tdtt=$tdtt$$._id.toString())})()));$model_book$$.modelName.toLowerCase()==="tdttno_tt"&&await Promise.all($details$$.filter($d$$=>$d$$.id_hd&&$d$$.id_tdtt).map($detail$$=>(async()=>{let $tdtt$$=await global.getModel("tdttno").findOne({_id:$detail$$.id_tdtt},
10
- {_id:1}).lean();!$tdtt$$&&($tdtt$$=await global.getModel("tdttno").findOne({id_ct:$detail$$.id_hd},{_id:1}).lean())&&($detail$$.id_tdtt=$tdtt$$._id.toString())})()));if($model_book$$.modelName.toLowerCase()==="sokho"||$model_book$$.modelName.toLowerCase()==="sokhott")await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",fields:"tg_tk"}),$details$$=$details$$.filter($d$$=>$d$$.tg_tk),await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",
11
- ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;$detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=($detail$$.sl_xuat||0)*$detail$$.he_so_qd,
12
- $detail$$.sl_nhap_qd=($detail$$.sl_nhap||0)*$detail$$.he_so_qd)});$model_book$$.modelName.toLowerCase()==="sokhokhongton"&&(await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",fields:"tg_tk"}),$details$$=$details$$.filter($d$$=>$d$$.tg_tk==0),await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;
13
- $detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.he_so_qd,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.he_so_qd,round))}));$model_book$$.modelName.toLowerCase()===
14
- "sokhonpp"&&(await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;$detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||
15
- 0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.he_so_qd,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.he_so_qd,round))}));if($model_book$$.modelName.toLowerCase()==="vatra"||$model_book$$.modelName.toLowerCase()==="vatvao")if($rs$jscomp$2_tdtts_tdtts$$=await Promise.all($details$$.filter($r$$=>$r$$.so_hd&&$r$$.so_hd.toUpperCase()!==($master$$.ma_ct||"").toUpperCase()).map($detail$$=>(async()=>{let $v$$=await $model_book$$.findOne({id_app:$master$$.id_app,
16
- so_hd:$detail$$.so_hd,ma_kh:$detail$$.ma_kh||$master$$.ma_kh,so_seri:$detail$$.so_seri,ky_hieu_hoa_don:$detail$$.ky_hieu_hoa_don,id_ct:{$ne:$master$$._id.toString()}});return $v$$?$v$$.so_hd:""})())),$rs$jscomp$2_tdtts_tdtts$$=$rs$jscomp$2_tdtts_tdtts$$.filter($r$$=>$r$$),$rs$jscomp$2_tdtts_tdtts$$.length>0)return $callback$$(`S\u1ed1 ho\u00e1 \u0111\u01a1n ${$rs$jscomp$2_tdtts_tdtts$$.join(",")} \u0111\u00e3 t\u1ed3n t\u1ea1i`);$details$$=$details$$.map(($detail$$,$line$$)=>{$detail$$.id_ct=$master$$._id.toString();
17
- $detail$$.ma_ct=$master$$.ma_ct;$detail$$.so_ct=$master$$.so_ct;$detail$$.ngay_ct=$master$$.ngay_ct;for(let $attr$$ in $model_book$$.schema.paths)if($attr$$!="id_ct"&&$attr$$!="_id"&&$attr$$!="__v"&&$attr$$!="date_updated"&&$attr$$!="date_created"){let $v$$=$detail$$[$attr$$];$v$$!==void 0&&$v$$!==null&&$v$$!==""||$v$$===0||$master$$[$attr$$]===void 0||($detail$$[$attr$$]=$master$$[$attr$$])}$detail$$.line=$line$$;delete $detail$$.toObject;delete $detail$$._id;delete $detail$$.__v;return $detail$$});
18
- const $self$$=this;$self$$.remove($error$$=>{if($error$$)return console.error("error delete data post",$error$$),$callback$$($error$$);if($details$$.length==0)return $callback$$(null,[]);$model_book$$.create($details$$,async($e$$,$rs$$)=>{if($e$$){console.error("\u0110\u00e3 c\u00f3 l\u1ed7i khi postdata",$e$$);var $contr_msg_error$$=$e$$.message||$e$$.error||$e$$.toString();$contr_msg_error$$.indexOf("E11000 duplicate")>=0&&$contr_msg_error$$.indexOf("id_ct_1_line_1")>=0?($rs$$=await $model_book$$.find({id_ct:$master$$._id.toString()}),
5
+ global.getModel("sokho").find({id_ct:$master$$._id.toString()}).lean().then(function($sks$$){$callback$$(null,$sks$$)}).catch($e$$=>{$callback$$($e$$)}):$callback$$(null,[])})}},($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);$model_book$$.deleteMany($query_delete$$,function($error$$){if($error$$)return $callback$$($error$$);$rs$$.sks.length>0&&tontucthoi.tinhTonTucThoi($rs$$.sks,$e$$=>{$e$$&&console.error("[post-book] [\u0110\u00e3 t\u00ednh t\u1ed3n t\u1ee9c th\u1eddi sau khi xo\u00e1 d\u1eef li\u1ec7u sokho c\u1ee7a v\u1eadt t\u01b0]",
6
+ $e$$)});$callback$$()})})};
7
+ post.prototype.run=async function($callback$$=()=>{}){if(!this.details)return console.error("details not exists"),$callback$$(null);if(!this.master||!this.master._id)return console.error("[postbook] master is not exists",this.master),$callback$$(null);let $master$$=this.master;$master$$.toObject&&($master$$=$master$$.toObject());let $details$$=await this.runPrepare(this.prepare,this.details),$model_book$$=this.model_book;if($model_book$$.modelName.toLowerCase()==="tdttco"){var $rs$jscomp$1_tdtts_tdtts$$=await global.getModel("tdttco").find({id_ct:$master$$._id.toString()},
8
+ {_id:1,tat_toan:1}).lean();if($rs$jscomp$1_tdtts_tdtts$$.length>0){if($rs$jscomp$1_tdtts_tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$rs$jscomp$1_tdtts_tdtts$$=$rs$jscomp$1_tdtts_tdtts$$.map($t$$=>$t$$._id.toString());if(await global.getModel("tdttco_tt").findOne({id_tdtt:{$in:$rs$jscomp$1_tdtts_tdtts$$}}))return $callback$$(null)}}if($model_book$$.modelName.toLowerCase()==="tdttno"&&($rs$jscomp$1_tdtts_tdtts$$=await global.getModel("tdttno").find({id_ct:$master$$._id.toString()},
9
+ {_id:1,tat_toan:1}).lean(),$rs$jscomp$1_tdtts_tdtts$$.length>0)){if($rs$jscomp$1_tdtts_tdtts$$.filter($t$$=>$t$$.tat_toan).length>0)return $callback$$(null);$rs$jscomp$1_tdtts_tdtts$$=$rs$jscomp$1_tdtts_tdtts$$.map($t$$=>$t$$._id.toString());if(await global.getModel("tdttno_tt").findOne({id_tdtt:{$in:$rs$jscomp$1_tdtts_tdtts$$}}))return $callback$$(null)}$model_book$$.modelName.toLowerCase()==="tdttco_tt"&&await Promise.all($details$$.filter($d$$=>$d$$.id_hd&&$d$$.id_tdtt).map($detail$$=>(async()=>
10
+ {let $tdtt$$=await global.getModel("tdttco").findOne({_id:$detail$$.id_tdtt},{_id:1}).lean();!$tdtt$$&&($tdtt$$=await global.getModel("tdttco").findOne({id_ct:$detail$$.id_hd},{_id:1}).lean())&&($detail$$.id_tdtt=$tdtt$$._id.toString())})()));$model_book$$.modelName.toLowerCase()==="tdttno_tt"&&await Promise.all($details$$.filter($d$$=>$d$$.id_hd&&$d$$.id_tdtt).map($detail$$=>(async()=>{let $tdtt$$=await global.getModel("tdttno").findOne({_id:$detail$$.id_tdtt},{_id:1}).lean();!$tdtt$$&&($tdtt$$=
11
+ await global.getModel("tdttno").findOne({id_ct:$detail$$.id_hd},{_id:1}).lean())&&($detail$$.id_tdtt=$tdtt$$._id.toString())})()));if($model_book$$.modelName.toLowerCase()==="sokho"||$model_book$$.modelName.toLowerCase()==="sokhott")await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",fields:"tg_tk"}),$details$$=$details$$.filter($d$$=>$d$$.tg_tk),await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",
12
+ {he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;$detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=($detail$$.sl_xuat||0)*$detail$$.he_so_qd,$detail$$.sl_nhap_qd=($detail$$.sl_nhap||
13
+ 0)*$detail$$.he_so_qd)});$model_book$$.modelName.toLowerCase()==="sokhokhongton"&&(await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",fields:"tg_tk"}),$details$$=$details$$.filter($d$$=>$d$$.tg_tk==0),await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;$detail$$.he_so_qd=$detail$$.he_so_qd||
14
+ 1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.he_so_qd,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.he_so_qd,round))}));$model_book$$.modelName.toLowerCase()==="sokhonpp"&&(await $details$$.asyncJoinModel2($master$$.id_app,
15
+ global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;$detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=
16
+ utils.round(($detail$$.sl_xuat||0)*$detail$$.he_so_qd,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.he_so_qd,round))}));if($model_book$$.modelName.toLowerCase()==="vatra"||$model_book$$.modelName.toLowerCase()==="vatvao")if($rs$jscomp$1_tdtts_tdtts$$=await Promise.all($details$$.filter($r$$=>$r$$.so_hd&&$r$$.so_hd.toUpperCase()!==($master$$.ma_ct||"").toUpperCase()).map($detail$$=>(async()=>{let $v$$=await $model_book$$.findOne({id_app:$master$$.id_app,so_hd:$detail$$.so_hd,
17
+ ma_kh:$detail$$.ma_kh||$master$$.ma_kh,so_seri:$detail$$.so_seri,ky_hieu_hoa_don:$detail$$.ky_hieu_hoa_don,id_ct:{$ne:$master$$._id.toString()}});return $v$$?$v$$.so_hd:""})())),$rs$jscomp$1_tdtts_tdtts$$=$rs$jscomp$1_tdtts_tdtts$$.filter($r$$=>$r$$),$rs$jscomp$1_tdtts_tdtts$$.length>0)return $callback$$(`S\u1ed1 ho\u00e1 \u0111\u01a1n ${$rs$jscomp$1_tdtts_tdtts$$.join(",")} \u0111\u00e3 t\u1ed3n t\u1ea1i`);$details$$=$details$$.map(($detail$$,$line$$)=>{$detail$$.id_ct=$master$$._id.toString();$detail$$.ma_ct=
18
+ $master$$.ma_ct;$detail$$.so_ct=$master$$.so_ct;$detail$$.ngay_ct=$master$$.ngay_ct;for(let $attr$$ in $model_book$$.schema.paths)if($attr$$!="id_ct"&&$attr$$!="_id"&&$attr$$!="__v"&&$attr$$!="date_updated"&&$attr$$!="date_created"){let $v$$=$detail$$[$attr$$];$v$$!==void 0&&$v$$!==null&&$v$$!==""||$v$$===0||$master$$[$attr$$]===void 0||($detail$$[$attr$$]=$master$$[$attr$$])}$detail$$.line=$line$$;delete $detail$$.toObject;delete $detail$$._id;delete $detail$$.__v;return $detail$$});const $self$$=
19
+ this;$self$$.remove($error$$=>{if($error$$)return console.error("error delete data post",$error$$),$callback$$($error$$);if($details$$.length==0)return $callback$$(null,[]);$model_book$$.create($details$$,async($e$$,$rs$$)=>{if($e$$){console.error("\u0110\u00e3 c\u00f3 l\u1ed7i khi postdata",$e$$);var $contr_msg_error$$=$e$$.message||$e$$.error||$e$$.toString();$contr_msg_error$$.indexOf("E11000 duplicate")>=0&&$contr_msg_error$$.indexOf("id_ct_1_line_1")>=0?($rs$$=await $model_book$$.find({id_ct:$master$$._id.toString()}),
19
20
  $rs$$.length>0?$callback$$(null,$rs$$):(console.error("error save data post",$e$$,$details$$),$self$$.remove(()=>{$callback$$($e$$)}))):(console.error("error save data post",$e$$,$details$$),$self$$.remove(()=>{$callback$$($e$$)}))}else $master$$.ma_ct?($contr_msg_error$$=global.controllers[$master$$.ma_ct.toUpperCase()])?await $contr_msg_error$$.model.findById($master$$._id)?$callback$$(null,$rs$$):(console.error("Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i. X\u00f3a s\u1ed5 s\u00e1ch",$master$$._id),
20
21
  $self$$.remove(()=>{$callback$$("Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i")})):(console.log("not found controller",$master$$.ma_ct.toUpperCase()),$callback$$(null,$rs$$)):$callback$$(null,$rs$$),$rs$$&&$model_book$$.modelName.toLowerCase()==="sokho"&&setImmediate(()=>{tontucthoi.tinhTonTucThoi($rs$$,$e$$=>{$e$$&&console.error("L\u1ed7i t\u00ednh t\u1ed3n t\u1ee9c th\u1eddi v\u1eadt t\u01b0",$rs$$,$e$$)})})})})};module.exports=post;
@@ -6,7 +6,7 @@ $prepare$$;this.options=$options$$};
6
6
  post.prototype.runPrepare=async($prepareFunction$$,$details$$)=>{$details$$=$details$$.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());return{...$d$$}});return new Promise($resolve$$=>{$prepareFunction$$?async.map($details$$,($detail$$,$callback$$)=>{setImmediate(()=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$prepareFunction$$($detail$$,$detail$$=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$callback$$(null,$detail$$)})})},($e$$,$details$$)=>{$resolve$$($details$$)}):
7
7
  $resolve$$($details$$)})};
8
8
  post.prototype.remove=function($callback$$=()=>{}){let $master$$=this.master;$master$$&&$master$$.toObject&&($master$$=$master$$.toObject());if(!$master$$._id)return $callback$$();let $query_delete$$={id_ct:$master$$._id.toString(),id_app:$master$$.id_app};this.options.queryDelete&&($query_delete$$={...$query_delete$$,...this.options.queryDelete,id_app:$master$$.id_app});async.series({sks:$callback$$=>{setImmediate(()=>{global.getModel("sokho").find({id_ct:$master$$._id.toString()}).lean().then(function($sks$$){$callback$$(null,$sks$$)}).catch($e$$=>
9
- {$callback$$($e$$)})})}},async($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);await global.getModel("sokho").deleteMany($query_delete$$);await global.getModel("sokhonpp").deleteMany($query_delete$$);await global.getModel("sokhokhongton").deleteMany($query_delete$$);$rs$$.sks.length>0?tontucthoi.tinhTonTucThoi($rs$$.sks,($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)}):$callback$$()})};
9
+ {$callback$$($e$$)})})}},async($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);await global.getModel("sokho").deleteMany($query_delete$$);await global.getModel("sokhonpp").deleteMany($query_delete$$);await global.getModel("sokhokhongton").deleteMany($query_delete$$);$rs$$.sks.length>0&&tontucthoi.tinhTonTucThoi($rs$$.sks,$e$$=>{$e$$&&console.error("[post-sokho] T\u00ednh t\u1ed3n t\u1ee9c th\u1eddi sau khi xo\u00e1 sokho c\u1ee7a v\u1eadt t\u01b0",$e$$)});$callback$$()})};
10
10
  post.prototype.run=async function($callback$$=()=>{}){if(!this.details)return console.error("details not exists"),$callback$$(null);if(!this.master||!this.master._id)return console.error("masters not exists",this.master),$callback$$(null);let $master$$=this.master;$master$$.toObject&&($master$$=$master$$.toObject());let $details$$=await this.runPrepare(this.prepare,this.details);await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",setFields:($item$$,$ref$$)=>{$item$$.tk_vt||($item$$.tk_vt=
11
11
  $ref$$.tk_vt);$item$$.tk_gv||($item$$.tk_gv=$ref$$.tk_gv);$item$$.tg_tk=$ref$$.tg_tk;$item$$.xk_nvl=$ref$$.xk_nvl}});var $ps_kg_dm_sp_co_dm_sp_xk_nvl$$=$details$$.filter($p$$=>$p$$.xk_nvl&&$p$$.nxt==2);for(var $i$jscomp$1_i$$=0;$i$jscomp$1_i$$<$ps_kg_dm_sp_co_dm_sp_xk_nvl$$.length;$i$jscomp$1_i$$++)$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].dinh_muc_nvl=await dinhmucsx($master$$.id_app,$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].ma_vt,$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].ma_tt1,
12
12
  $ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].sl_xuat,$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].ma_dvt);$details$$=$details$$.filter($d$$=>$d$$.tg_tk||$d$$.dinh_muc_nvl&&$d$$.dinh_muc_nvl.length>0);$ps_kg_dm_sp_co_dm_sp_xk_nvl$$=$details$$.filter($p$$=>$p$$.xk_nvl&&$p$$.dinh_muc_nvl&&$p$$.dinh_muc_nvl.length>0);for($i$jscomp$1_i$$=0;$i$jscomp$1_i$$<$ps_kg_dm_sp_co_dm_sp_xk_nvl$$.length;$i$jscomp$1_i$$++){const $p$$=$ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$];let $he_so_qd$$=1,$qd$$=await global.getModel("dmqddvt").findOne({id_app:$master$$.id_app,
@@ -1,7 +1,200 @@
1
- /*
2
- Prevent Closure Compiler rename this file */
3
- const {AsyncLocalStorage}=require("node:async_hooks"),storage=new AsyncLocalStorage,SESSION_EXCLUDE_MODELS="app log token otp cache notification approve email tontucthoi listinfo reportinfo labelinfo".split(" ");exports.runWithSession=async function($session$$,$fn$$){return storage.run({session:$session$$},$fn$$)};
4
- exports.handlerWithSession=async function($handler$$,$ctrl$$,$req$$,$callback$$,...$extraArgs$$){const $session$$=await mongoose.startSession();try{await exports.runWithSession($session$$,async()=>{console.log("[handlerWithSession] start transation...",$ctrl$$.name);await $session$$.startTransaction();let $finished$$=!1;$handler$$($ctrl$$,$req$$,async($error$$,$result$$)=>{if(!$finished$$){$finished$$=!0;try{$error$$?(console.error("[handlerWithSession] abort transaction...",$ctrl$$.name,$error$$),
5
- await $session$$.abortTransaction().catch(()=>{}),$callback$$($error$$)):(console.log("[handlerWithSession] commit transaction...",$ctrl$$.name),await $session$$.commitTransaction(),$callback$$(null,$result$$))}finally{await $session$$.endSession().catch(()=>{})}}},...$extraArgs$$)})}catch($e$$){console.error("[handlerWithSession] abort transaction...",$ctrl$$?.name,$e$$);try{await $session$$.abortTransaction().catch(()=>{})}finally{await $session$$.endSession().catch(()=>{})}$callback$$($e$$)}};
6
- exports.onAfterCommit=function($cb$$){const $store$$=storage.getStore();$store$$&&Array.isArray($store$$.afterCommit)?$store$$.afterCommit.push($cb$$):Promise.resolve().then($cb$$).catch($err$$=>console.error("[onAfterCommit immediate error]",$err$$))};exports.runWithoutSession=async function($fn$$){return storage.run({session:void 0},$fn$$)};exports.getCurrentSession=function(){const $store$$=storage.getStore();return $store$$?$store$$.session:void 0};
7
- exports.isModelExcludedFromSession=function($model_name$$){$model_name$$=typeof $model_name$$==="string"?$model_name$$:$model_name$$?.modelName;return!(!$model_name$$||!SESSION_EXCLUDE_MODELS.includes($model_name$$))};exports.isSessionActive=function($session$$){if(!$session$$)return!1;try{return $session$$.inTransaction()}catch{return!1}};console.log("[sessionContext] \u2705 Loaded with model exclude & safety check");
1
+ /** @fileoverview @preserve Prevent Closure Compiler rename this file */
2
+ 'use strict';
3
+ /** @const */ const { AsyncLocalStorage } = require("node:async_hooks");
4
+
5
+ /** @const */ const storage = new AsyncLocalStorage();
6
+
7
+ exports.storage = storage;
8
+
9
+
10
+ exports.getCurrentStore = function() {
11
+ const store = storage.getStore();
12
+ return store;
13
+ }
14
+
15
+ /**
16
+ * Danh sách các model KHÔNG bao giờ được gắn session
17
+ * (ví dụ: các model ghi log, lịch sử, audit,...)
18
+ */
19
+ const SESSION_EXCLUDE_MODELS = ["app","log","token","otp","cache", "notification","approve","email",'tontucthoi','listinfo','reportinfo','labelinfo'];
20
+ // ====== Thêm bộ đếm ID ======
21
+ let globalStoreCounter = 0;
22
+ let globalSessionCounter = 0;
23
+ /**
24
+ * Chạy một hàm trong context có session.
25
+ * Mọi câu lệnh Mongoose trong hàm này sẽ được gắn cùng session đó.
26
+ * @param {ClientSession} session - mongoose session
27
+ * @param {Function} fn - async function cần chạy
28
+ */
29
+ exports.runWithSession = async function (session, fn) {
30
+
31
+ const existingStore = exports.getCurrentStore();
32
+
33
+ // Nếu đã có store rồi thì chỉ chạy trong context đó
34
+ if (existingStore) {
35
+ return fn();
36
+ }
37
+
38
+ const storeId = ++globalStoreCounter;
39
+ const sessionId = session?._debugId|| `txn-${++globalSessionCounter}`;
40
+
41
+ if (session && !session._debugId) session._debugId = sessionId; // Gắn id cho session để trace
42
+
43
+ console.log(`[runWithSession] start storeId=${storeId}, sessionId=${sessionId}`);
44
+ const context = { session,storeId, afterCommit: [] };
45
+ return storage.run(context, async () => {
46
+ try {
47
+ return await fn();
48
+ } finally {
49
+ //console.log(`[runWithSession] end storeId=${storeId}, sessionId=${sessionId}`);
50
+ }
51
+ });
52
+ };
53
+
54
+
55
+ /**
56
+ * Hàm bao bọc handler và session
57
+ * @param {*} handler
58
+ * @param {*} ctrl
59
+ * @param {*} req
60
+ * @param {*} callback
61
+ * @param {...any} extraArgs
62
+ */
63
+ exports.handlerWithSession = async function (handler, ctrl, req, callback, ...extraArgs) {
64
+ const session = await mongoose.startSession();
65
+
66
+ try {
67
+ await exports.runWithSession(session, async () => {
68
+ const store = storage.getStore();
69
+ console.log(`🔥 [handlerWithSession] start transaction storeId=${store?.storeId},sessionId=${store?.session?._debugId}, ctrl=${ctrl.name}`);
70
+ await session.startTransaction();
71
+
72
+ let finished = false;
73
+
74
+ handler(ctrl, req, async (error, result) => {
75
+ if (finished) return;
76
+ finished = true;
77
+
78
+ try {
79
+ if (error) {
80
+ console.error("❌ [handlerWithSession] abort transaction...", ctrl.name, error);
81
+ await session.abortTransaction().catch(() => {});
82
+ callback(error);
83
+ } else {
84
+ console.log("✅ [handlerWithSession] commit transaction...", ctrl.name);
85
+ await session.commitTransaction();
86
+
87
+ // 🔥 Giữ lại danh sách afterCommit trước khi end session
88
+ const store = storage.getStore();
89
+ const afterCommitCallbacks = exports.getAfterCommitList();
90
+ const sid = store?.storeId || "no-store";
91
+ console.log(`[onAfterCommit] running storeId=${sid}, count=${afterCommitCallbacks.length}`);
92
+
93
+ await session.endSession();
94
+
95
+ // 🔥 Chạy callback sau khi session đã đóng
96
+ for (const cb of afterCommitCallbacks) {
97
+ try {
98
+ await cb();
99
+ } catch (err) {
100
+ console.error("[onAfterCommit error]", err);
101
+ }
102
+ }
103
+
104
+ callback(null, result);
105
+ }
106
+ } catch (e) {
107
+ console.error("❌ [handlerWithSession] error during commit/abort", e);
108
+ await session.abortTransaction().catch(() => {});
109
+ callback(e);
110
+ } finally {
111
+ await session.endSession().catch(() => {});
112
+ // Xóa session trong store để tránh reuse nhầm
113
+ const store = storage.getStore();
114
+ if (store) store.session = null;
115
+ }
116
+ }, ...extraArgs);
117
+ });
118
+ } catch (e) {
119
+ console.error("❌ [handlerWithSession] abort transaction (outer)...", ctrl?.name, e);
120
+ try {
121
+ await session.abortTransaction().catch(() => {});
122
+ } finally {
123
+ await session.endSession().catch(() => {});
124
+ }
125
+ callback(e);
126
+ }
127
+ };
128
+
129
+
130
+ /**
131
+ * Thêm callback để chạy sau khi commit.
132
+ * - Nếu không có session => chạy ngay lập tức.
133
+ */
134
+ exports.onAfterCommit = function (cb) {
135
+ const store = storage.getStore();
136
+ if (store && store.session) {
137
+ store.session.afterCommit = store.session.afterCommit || [];
138
+ store.session.afterCommit.push(cb);
139
+ console.log(`🔥 [onAfterCommit] added event.. storeId=${store.storeId}, count=${store.session.afterCommit.length}`);
140
+ } else {
141
+ // Không có session → chạy ngay
142
+ //console.log("[onAfterCommit] no session, running immediately");
143
+ Promise.resolve()
144
+ .then(cb)
145
+ .catch((err) => console.error("[onAfterCommit immediate error]", err));
146
+ }
147
+ };
148
+
149
+ /**
150
+ * Lấy danh sách afterCommit hiện tại (dùng cho middleware)
151
+ */
152
+ exports.getAfterCommitList = function () {
153
+ const store = storage.getStore();
154
+ return store && store.session ? store.session.afterCommit || [] : [];
155
+ };
156
+
157
+ /**
158
+ * Chạy một hàm mà KHÔNG gắn session (dù đang trong transaction).
159
+ * Dùng cho các thao tác như ghi log, gửi email, lưu lịch sử...
160
+ * @param {Function} fn - async function cần chạy
161
+ */
162
+ exports.runWithoutSession = async function (fn) {
163
+ return storage.run({ session: undefined }, fn);
164
+ };
165
+
166
+ /**
167
+ * Lấy session hiện tại trong context.
168
+ * @returns {ClientSession|undefined}
169
+ */
170
+ exports.getCurrentSession = function () {
171
+ const store = storage.getStore();
172
+ return store ? store.session : undefined;
173
+ };
174
+
175
+ /**
176
+ * Kiểm tra xem model có được loại trừ khỏi session tự động không.
177
+ * @param {String|Model} model - model name hoặc đối tượng model
178
+ * @returns {Boolean}
179
+ */
180
+ exports.isModelExcludedFromSession = function (model) {
181
+ const name = typeof model === "string" ? model : model?.modelName;
182
+ return !!(name && SESSION_EXCLUDE_MODELS.includes(name));
183
+ };
184
+
185
+ /**
186
+ * Kiểm tra session còn hợp lệ (chưa commit hoặc abort)
187
+ * @param {ClientSession} session
188
+ * @returns {Boolean}
189
+ */
190
+ exports.isSessionActive = function (session) {
191
+ if (!session) return false;
192
+ try {
193
+ // Một số driver Mongoose không expose state, nên ta kiểm tra gián tiếp:
194
+ return session.inTransaction(); // true nếu đang trong transaction
195
+ } catch {
196
+ return false;
197
+ }
198
+ };
199
+
200
+ console.log("[sessionContext] ✅ Loaded with model exclude & safety check");
@@ -1,12 +1,12 @@
1
- const ckvt=require("./ckvt"),sokho=global.getModel("sokho"),socai=global.getModel("socai"),dmvt=global.getModel("dmvt"),giatb=global.getModel("giatb"),dmqddvt=global.getModel("dmqddvt"),tinhgiatb1vt=require("./tinhgiatb1vt"),async=require("async"),_=require("lodash"),Controller=require("../controllers/controller"),moment=require("moment");
2
- module.exports=async function($condition$$,$fn$$){if($condition$$&&$condition$$.tu_thang&&$condition$$.den_thang&&$condition$$.nam&&$condition$$.id_app){$condition$$.tu_thang=Number($condition$$.tu_thang);$condition$$.den_thang=Number($condition$$.den_thang);var $ma_kho$$=$condition$$.ma_kho;$ma_kho$$&&console.log("dang tinh gia trung binh cho kho",$ma_kho$$);var $tu_ngay$$=moment(new Date($condition$$.nam,$condition$$.tu_thang-1,15)).startOf("month").toDate(),$den_ngay$$=moment(new Date($condition$$.nam,
3
- $condition$$.den_thang-1,15)).endOf("month").toDate(),$id_app$$=$condition$$.id_app,$app_query_dmvt$$=await global.getModel("app").findOne({_id:$id_app$$},{options:1}).lean();if(!$app_query_dmvt$$)return $fn$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");var $f_tien$$=($app_query_dmvt$$.options||{}).f_tien||0;$app_query_dmvt$$={id_app:$id_app$$,gia_xuat:"1"};$condition$$.ma_nvt&&($app_query_dmvt$$.ma_nvt=$condition$$.ma_nvt);$condition$$.ma_ncc&&($app_query_dmvt$$.ma_ncc=$condition$$.ma_ncc);
4
- $condition$$.ma_vt&&($app_query_dmvt$$.ma_vt=$condition$$.ma_vt);dmvt.find($app_query_dmvt$$).lean().then(function($dmvts$$){async.map($dmvts$$,function($vt$$,$callback$$){setImmediate(()=>{let $query$$={id_app:$id_app$$,tu_ngay:$tu_ngay$$,den_ngay:$den_ngay$$,ma_vt:$vt$$.ma_vt,ma_kho:$ma_kho$$};tinhgiatb1vt($query$$,function($error$$,$gia$$){if($error$$)return console.error("Kh\u00f4ng th\u1ec3 t\u00ednh gi\u00e1 trung b\u00ecnh cho v\u1eadt t\u01b0",$query$$.ma_vt,$error$$),$callback$$($error$$);
5
- $gia$$.id_app=$id_app$$;$gia$$.ma_kho=$ma_kho$$;$gia$$.status=!0;$callback$$(null,$gia$$)})})},function($error$$,$bang_gia$$){if($error$$)return $fn$$($error$$);$error$$=[];for(let $t$$=$condition$$.tu_thang;$t$$<=$condition$$.den_thang;$t$$++)$error$$.push($t$$);async.map($error$$,function($t$$,$callback$$){async.map($bang_gia$$,function($gia$$,$callback$$){setImmediate(()=>{$gia$$.thang=$t$$;$gia$$.nam=$condition$$.nam;async.series({savetogiatb:function($callback$$){let $query_delete$$={id_app:$id_app$$,
6
- ma_vt:$gia$$.ma_vt,nam:$condition$$.nam,thang:$t$$};$ma_kho$$&&($query_delete$$.ma_kho=$ma_kho$$);giatb.deleteMany($query_delete$$,function($error$$){if($error$$)return $callback$$($error$$);giatb.create($gia$$,function($error$$,$result$$){if($error$$)return console.log("Loi khi luu vao bang gia trung binh thang vat tu "+$gia$$.ma_vt,$error$$),$callback$$($error$$);$callback$$(null,$result$$)})})}},function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null)})})},function($error$$){if($error$$)return $callback$$($error$$);
7
- $callback$$(null)})},function($error$$){if($error$$)return $fn$$($error$$);let $vouchers_x$$={},$vouchers_n$$={},$ma_vts$$=$bang_gia$$.map($v$$=>$v$$.ma_vt);async.parallel({xuat:function($callback$$){setImmediate(()=>{let $query_sokho_x$$={id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:2,ma_vt:{$in:$ma_vts$$},px_gia_dd:!1};$ma_kho$$&&($query_sokho_x$$.ma_kho=$ma_kho$$);sokho.find($query_sokho_x$$).lean().then(function($sks$$){if(!$sks$$||$sks$$.length===0)return $callback$$(null,
8
- $vouchers_x$$);async.mapSeries($sks$$,function($sk$$,$callback$$){let $voucher$$=$vouchers_x$$[$sk$$.id_ct];var $ct_ctrl$$=global.controllers[$sk$$.ma_ct.toUpperCase()];$ct_ctrl$$=$ct_ctrl$$?$ct_ctrl$$.getProperty("model"):mongoose.models[$sk$$.ma_ct.toLowerCase()];!$voucher$$&&$ct_ctrl$$?$ct_ctrl$$.findById($sk$$.id_ct,function($error$$,$v$$){if($error$$)return $callback$$($error$$);$v$$?($voucher$$=$v$$,$vouchers_x$$[$sk$$.id_ct]=$voucher$$):(sokho.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,
9
- $rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi sokho",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}),socai.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi socai",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}));$callback$$()}):$callback$$()},function($error$$){if($error$$)return console.error("co loi lay phieu xuat",$error$$),$callback$$($error$$);
1
+ const ckvt=require("./ckvt"),sokho=global.getModel("sokho"),socai=global.getModel("socai"),dmvt=global.getModel("dmvt"),giatb=global.getModel("giatb"),dmqddvt=global.getModel("dmqddvt"),tinhgiatb1vt=require("./tinhgiatb1vt"),async=require("async"),_=require("lodash"),Controller=require("../controllers/controller"),moment=require("moment"),{getCurrentSession}=require("./sessionContext");
2
+ module.exports=async function($condition$$,$fn$$){if($condition$$&&$condition$$.tu_thang&&$condition$$.den_thang&&$condition$$.nam&&$condition$$.id_app){$condition$$.tu_thang=Number($condition$$.tu_thang);$condition$$.den_thang=Number($condition$$.den_thang);var $ma_kho$$=$condition$$.ma_kho,$tu_ngay$$=moment(new Date($condition$$.nam,$condition$$.tu_thang-1,15)).startOf("month").toDate(),$den_ngay$$=moment(new Date($condition$$.nam,$condition$$.den_thang-1,15)).endOf("month").toDate(),$id_app$$=
3
+ $condition$$.id_app,$app_query_dmvt$$=await global.getModel("app").findOne({_id:$id_app$$},{options:1}).lean();if(!$app_query_dmvt$$)return $fn$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");var $f_tien$$=($app_query_dmvt$$.options||{}).f_tien||0;$app_query_dmvt$$={id_app:$id_app$$,gia_xuat:"1"};$condition$$.ma_nvt&&($app_query_dmvt$$.ma_nvt=$condition$$.ma_nvt);$condition$$.ma_ncc&&($app_query_dmvt$$.ma_ncc=$condition$$.ma_ncc);$condition$$.ma_vt&&($app_query_dmvt$$.ma_vt=$condition$$.ma_vt);
4
+ console.log(`\u2705 [tinhgiatb] t\u00ednh gi\u00e1 trung b\u00ecnh, kho:${$condition$$.ma_kho}, sessionID=${getCurrentSession()?._debugId}`);dmvt.find($app_query_dmvt$$).lean().then(function($dmvts$$){async.map($dmvts$$,function($vt$$,$callback$$){setImmediate(()=>{let $query$$={id_app:$id_app$$,tu_ngay:$tu_ngay$$,den_ngay:$den_ngay$$,ma_vt:$vt$$.ma_vt,ma_kho:$ma_kho$$};tinhgiatb1vt($query$$,function($error$$,$gia$$){if($error$$)return console.error("Kh\u00f4ng th\u1ec3 t\u00ednh gi\u00e1 trung b\u00ecnh cho v\u1eadt t\u01b0",
5
+ $query$$.ma_vt,$error$$),$callback$$($error$$);$gia$$.id_app=$id_app$$;$gia$$.ma_kho=$ma_kho$$;$gia$$.status=!0;$callback$$(null,$gia$$)})})},function($error$$,$bang_gia$$){if($error$$)return $fn$$($error$$);$error$$=[];for(let $t$$=$condition$$.tu_thang;$t$$<=$condition$$.den_thang;$t$$++)$error$$.push($t$$);async.map($error$$,function($t$$,$callback$$){async.map($bang_gia$$,function($gia$$,$callback$$){setImmediate(()=>{$gia$$.thang=$t$$;$gia$$.nam=$condition$$.nam;async.series({savetogiatb:function($callback$$){let $query_delete$$=
6
+ {id_app:$id_app$$,ma_vt:$gia$$.ma_vt,nam:$condition$$.nam,thang:$t$$};$ma_kho$$&&($query_delete$$.ma_kho=$ma_kho$$);giatb.deleteMany($query_delete$$,function($error$$){if($error$$)return $callback$$($error$$);giatb.create($gia$$,function($error$$,$result$$){if($error$$)return console.log("Loi khi luu vao bang gia trung binh thang vat tu "+$gia$$.ma_vt,$error$$),$callback$$($error$$);$callback$$(null,$result$$)})})}},function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null)})})},
7
+ function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null)})},function($error$$){if($error$$)return $fn$$($error$$);let $vouchers_x$$={},$vouchers_n$$={},$ma_vts$$=$bang_gia$$.map($v$$=>$v$$.ma_vt);async.parallel({xuat:function($callback$$){setImmediate(()=>{let $query_sokho_x$$={id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:2,ma_vt:{$in:$ma_vts$$},px_gia_dd:!1};$ma_kho$$&&($query_sokho_x$$.ma_kho=$ma_kho$$);sokho.find($query_sokho_x$$).lean().then(function($sks$$){if(!$sks$$||
8
+ $sks$$.length===0)return $callback$$(null,$vouchers_x$$);async.mapSeries($sks$$,function($sk$$,$callback$$){let $voucher$$=$vouchers_x$$[$sk$$.id_ct];var $ct_ctrl$$=global.controllers[$sk$$.ma_ct.toUpperCase()];$ct_ctrl$$=$ct_ctrl$$?$ct_ctrl$$.getProperty("model"):mongoose.models[$sk$$.ma_ct.toLowerCase()];!$voucher$$&&$ct_ctrl$$?$ct_ctrl$$.findById($sk$$.id_ct,function($error$$,$v$$){if($error$$)return $callback$$($error$$);$v$$?($voucher$$=$v$$,$vouchers_x$$[$sk$$.id_ct]=$voucher$$):(sokho.deleteMany({id_ct:$sk$$.id_ct.toString()},
9
+ ($e$$,$rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi sokho",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}),socai.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi socai",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}));$callback$$()}):$callback$$()},function($error$$){if($error$$)return console.error("co loi lay phieu xuat",$error$$),$callback$$($error$$);
10
10
  $callback$$(null,$vouchers_x$$)})}).catch($e$$=>{$callback$$($e$$)})})},nhap:function($callback$$){setImmediate(()=>{let $query_sokho_n$$={id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:1,ma_vt:{$in:$ma_vts$$},pn_gia_tb:!0,ma_ct:{$ne:"PXC"}};$ma_kho$$&&($query_sokho_n$$.ma_kho=$ma_kho$$);sokho.find($query_sokho_n$$,function($error$$,$sks$$){if($error$$)return $callback$$($error$$);if(!$sks$$||$sks$$.length===0)return $callback$$(null,$vouchers_n$$);async.map($sks$$,function($sk$$,
11
11
  $callback$$){let $voucher$$=$vouchers_n$$[$sk$$.id_ct];var $ct$jscomp$1_ctrl$$=global.controllers[$sk$$.ma_ct.toUpperCase()];$ct$jscomp$1_ctrl$$=$ct$jscomp$1_ctrl$$?$ct$jscomp$1_ctrl$$.getProperty("model"):mongoose.models[$sk$$.ma_ct.toLowerCase()];!$voucher$$&&$ct$jscomp$1_ctrl$$?$ct$jscomp$1_ctrl$$.findById($sk$$.id_ct,function($error$$,$v$$){if($error$$)return $callback$$($error$$);$v$$?($voucher$$=$v$$,$vouchers_n$$[$sk$$.id_ct]=$voucher$$):(sokho.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,
12
12
  $rs$$)=>{console.log("Khong tim thay phieu nhap. chuong trinh da xoa phieu nay khoi sokho",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}),socai.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu nhap. chuong trinh da xoa phieu nay khoi socai",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}));$callback$$()}):$callback$$()},function($error$$){if($error$$)return console.log("co loi lay phieu nhap",$error$$),$callback$$($error$$);
@@ -1,6 +1,174 @@
1
- const tontucthoiScheam=new Schema({id_app:{type:String},nam:{type:Number},ma_dvcs:{type:String,maxlength:1024},ma_vt:{type:String,uppercase:!0,maxlength:1024},ma_kho:{type:String,uppercase:!0,maxlength:32},ma_lo:{type:String,default:"",uppercase:!0,maxlength:32},han_sd:{type:Date},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32},ton00:{type:Number,default:0},du00:{type:Number,
2
- default:0},du_nt00:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
3
- (global.configs||{}).createIndexes&&(tontucthoiScheam.index({id_app:1,nam:1,ma_dvcs:1,ma_vt:1,ma_kho:1,ma_lo:1,ma_tt1:1,ma_tt2:1,ma_tt3:1},{name:"tontucthoi_index_1"}),tontucthoiScheam.index({status:1}),tontucthoiScheam.index({user_created:1,visible_to:1,visible_to_users:1}));const tontucthoi=mongoose.models.tontucthoi||mongoose.model("tontucthoi",tontucthoiScheam),ckvt=require("../libs/ckvt"),underscore=require("underscore"),async=require("async"),{onAfterCommit}=require("../libs/sessionContext");
4
- tontucthoi.tinhTonTucThoi=function($sks$$,$cb$$){onAfterCommit(()=>{console.log("[tinhTonTucThoi] afer transaction commit....");$cb$$||=function($e$$){$e$$&&console.log("error when calc tontucthoi",$e$$)};underscore.isArray($sks$$)||($sks$$=[$sks$$]);async.mapSeries($sks$$,function($sk$$,$cb$$){if(!$sk$$)return $cb$$();let $query$$={id_app:$sk$$.id_app,ma_vt:$sk$$.ma_vt};tontucthoi.deleteMany($query$$,function($e$$){if($e$$)return $cb$$("remove tonkhotucthoi");$query$$.groupBy="id_app ma_vt ma_kho ma_dvcs ma_lo ma_tt1 ma_tt2 ma_tt3 han_sd".split(" ");
5
- $query$$.ngay=new Date;ckvt($query$$,async function($e$$,$rs$$){if($e$$)return $cb$$("error when calc tontucthoi\n"+$e$$);$rs$$=$rs$$.filter($r$$=>$r$$.ma_vt&&$r$$.ma_kho&&$r$$.id_app);await $rs$$.asyncJoinModel2(null,global.getModel("dmkho"),{where:$item$$=>({id_app:$item$$.id_app,ma_kho:$item$$.ma_kho}),fields:"la_kho_online"});$rs$$&&$rs$$.length>0?tontucthoi.create($rs$$,async function($e$$){if($e$$)return $cb$$($e$$);$e$$=$rs$$.filter($r$$=>$r$$.la_kho_online).map($r$$=>$r$$.ton00||0).reduce(($a$$,
6
- $b$$)=>$a$$+$b$$,0);global.getModel("dmvt").updateOne({id_app:$sk$$.id_app,ma_vt:$sk$$.ma_vt},{ton_kho_online_hien_tai:$e$$}).then(()=>{}).catch($e$$=>{$e$$&&console.error($e$$)});$cb$$(null,$rs$$)}):$cb$$()})})},function($e$$,$rs$$){$cb$$($e$$,$rs$$)})})};module.exports=tontucthoi;
1
+ const tontucthoiScheam = new Schema({
2
+ id_app: {type: String},
3
+ nam: {type: Number},
4
+ ma_dvcs: {type: String, maxlength: 1024},
5
+ ma_vt: {type: String, uppercase: true, maxlength: 1024},
6
+ ma_kho: {type: String, uppercase: true, maxlength: 32},
7
+ ma_lo: {type: String, default: '', uppercase: true, maxlength: 32},
8
+ han_sd: {type: Date},
9
+ ma_tt1: {type: String, default: '', uppercase: true, maxlength: 32},
10
+ ma_tt2: {type: String, default: '', uppercase: true, maxlength: 32},
11
+ ma_tt3: {type: String, default: '', uppercase: true, maxlength: 32},
12
+
13
+ ton00: {type: Number, default: 0},
14
+ du00: {type: Number, default: 0},
15
+ du_nt00: {type: Number, default: 0},
16
+
17
+ kc_yn:{type:Boolean,default:false},
18
+
19
+ status: {type: Boolean, default: true},
20
+ date_created: {type: Date, default: Date.now},
21
+ date_updated: {type: Date, default: Date.now},
22
+ user_created: {type: String, default: ''},
23
+ user_updated: {type: String, default: ''}
24
+ });
25
+ if((global.configs||{}).createIndexes){
26
+ tontucthoiScheam.index({id_app: 1, nam: 1, ma_dvcs: 1, ma_vt: 1, ma_kho: 1,ma_lo:1,ma_tt1:1,ma_tt2:1,ma_tt3:1},{name:"tontucthoi_index_1"});
27
+
28
+ tontucthoiScheam.index({status: 1});
29
+ tontucthoiScheam.index({user_created: 1,visible_to: 1,visible_to_users: 1});
30
+ }
31
+ const tontucthoi = mongoose.models.tontucthoi || mongoose.model('tontucthoi', tontucthoiScheam);
32
+
33
+ const ckvt = require("../libs/ckvt");
34
+ const _ =require("lodash");
35
+ const {onAfterCommit} = require("../libs/sessionContext");
36
+
37
+ /** * Bộ đệm lưu trữ các hàm debounce đang hoạt động.
38
+ * Key sẽ là: `${id_app}:${ma_vt}`
39
+ */
40
+ const debouncedCalculators = {};
41
+ const DEBOUNCE_WAIT_MS = 10 * 1000;
42
+
43
+ /**
44
+ * Đây là hàm tính toán thực tế, được tách ra.
45
+ * Nó sẽ được gọi bởi hàm debounce.
46
+ * @param {object} sk - Đối tượng sk (giống như sk gốc)
47
+ * @param {string} debouncerKey - Key để xóa chính nó khỏi bộ đệm sau khi chạy
48
+ */
49
+ async function _runActualCalculation(sk, debouncerKey) {
50
+ //console.log(`[tinhTonTucThoi] 🔥 Bắt đầu chạy tính toán cho: ${debouncerKey}`);
51
+ try {
52
+ let query = {
53
+ id_app: sk.id_app,
54
+ ma_vt: sk.ma_vt
55
+ };
56
+
57
+ // 1. Xóa tồn cũ
58
+ await tontucthoi.deleteMany(query);
59
+
60
+ // 2. Chuẩn bị query cho ckvt
61
+ query.groupBy = ["id_app", "ma_vt", "ma_kho", "ma_dvcs", "ma_lo", "ma_tt1", "ma_tt2", "ma_tt3", "han_sd"];
62
+ query.ngay = new Date();
63
+
64
+ // 3. Gọi ckvt (chuyển sang Promise)
65
+ const rs = await new Promise((resolve, reject) => {
66
+ ckvt(query, (e, rs) => e ? reject(e) : resolve(rs));
67
+ });
68
+
69
+ if (!rs || rs.length === 0) {
70
+ //console.log(`[tinhTonTucThoi] Không có kết quả ckvt cho: ${debouncerKey}`);
71
+ // Vẫn cần cập nhật dmvt về 0
72
+ await global.getModel("dmvt").updateOne(
73
+ { id_app: sk.id_app, ma_vt: sk.ma_vt },
74
+ { ton_kho_online_hien_tai: 0 }
75
+ );
76
+ return; // Kết thúc
77
+ }
78
+
79
+ // 4. Lọc và join
80
+ let validRs = rs.filter(r => r.ma_vt && r.ma_kho && r.id_app);
81
+
82
+ await validRs.asyncJoinModel2(null, global.getModel("dmkho"), {
83
+ where: item => ({ id_app: item.id_app, ma_kho: item.ma_kho }),
84
+ fields: "la_kho_online"
85
+ });
86
+
87
+ if (validRs.length > 0) {
88
+ // 5. Tạo tồn mới
89
+ await tontucthoi.create(validRs);
90
+
91
+ // 6. Cập nhật dmvt
92
+ const ton_kho_online_hien_tai = validRs
93
+ .filter(r => r.la_kho_online)
94
+ .map(r => r.ton00 || 0)
95
+ .reduce((a, b) => a + b, 0);
96
+
97
+ await global.getModel("dmvt").updateOne(
98
+ { id_app: sk.id_app, ma_vt: sk.ma_vt },
99
+ { ton_kho_online_hien_tai }
100
+ );
101
+ console.log(`[tinhTonTucThoi] ✅ Cập nhật xong ${sk.ma_vt}, tồn online: ${ton_kho_online_hien_tai}`);
102
+ }
103
+
104
+ } catch (e) {
105
+ console.error(`[tinhTonTucThoi] ❌ Lỗi khi tính toán cho ${debouncerKey}:`, e);
106
+ } finally {
107
+ // 🔥 Rất quan trọng: Xóa debouncer khỏi bộ đệm để tránh rò rỉ bộ nhớ
108
+ if (debouncerKey) {
109
+ delete debouncedCalculators[debouncerKey];
110
+ //console.log(`[tinhTonTucThoi] 🧹 Dọn dẹp debouncer cho: ${debouncerKey}`);
111
+ }
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Hàm này giờ chỉ làm nhiệm vụ "lên lịch" (schedule) việc tính toán.
117
+ * Nó sẽ gọi hàm debounce, hàm này sẽ chờ 1 phút sau lệnh gọi CUỐI CÙNG
118
+ * trước khi thực thi `_runActualCalculation`.
119
+ */
120
+ tontucthoi.tinhTonTucThoi = function(sks, cb) {
121
+ // Đảm bảo cb là một hàm để tránh lỗi
122
+ const finalCallback = cb || function(e) {
123
+ if (e) console.error("[tinhTonTucThoi] Lỗi khi lên lịch:", e);
124
+ };
125
+
126
+ onAfterCommit(() => {
127
+ try {
128
+ if (!_.isArray(sks)) {
129
+ sks = [sks];
130
+ }
131
+
132
+ // Lọc ra các sk hợp lệ và duy nhất theo app/ma_vt
133
+ // (Nếu gọi 5 lần cho cùng 1 ma_vt, ta chỉ cần lấy sk cuối cùng)
134
+ const uniqueSks = _.uniq(sks.reverse(), false, sk =>
135
+ sk ? `${sk.id_app}:${sk.ma_vt}` : null
136
+ ).reverse();
137
+
138
+
139
+ for (const sk of uniqueSks) {
140
+ if (!sk || !sk.id_app || !sk.ma_vt) continue;
141
+
142
+ const key = `${sk.id_app}:${sk.ma_vt}`;
143
+
144
+ // Nếu chưa có debouncer cho key này, hãy tạo nó
145
+ if (!debouncedCalculators[key]) {
146
+ //console.log(`[tinhTonTucThoi] ⏳ Tạo debouncer mới cho: ${key} (delay ${DEBOUNCE_WAIT_MS}ms)`);
147
+
148
+ debouncedCalculators[key] = _.debounce(
149
+ // Hàm sẽ được gọi sau khi hết thời gian chờ
150
+ (latestSk) => {
151
+ // latestSk sẽ là giá trị sk của lần gọi CUỐI CÙNG
152
+ _runActualCalculation(latestSk, key);
153
+ },
154
+ DEBOUNCE_WAIT_MS,
155
+ false // false = chạy ở "trailing edge" (sau khi hết thời gian)
156
+ );
157
+ } else {
158
+ //console.log(`[tinhTonTucThoi] 🔄 Reset debouncer cho: ${key}`);
159
+ }
160
+
161
+ // Gọi (hoặc reset) hàm debounce với dữ liệu sk mới nhất
162
+ debouncedCalculators[key](sk);
163
+ }
164
+
165
+ // 🔥 Quan trọng: Gọi callback ngay lập tức.
166
+ // Hàm này chỉ "lên lịch", nó không chờ phép tính hoàn thành.
167
+ finalCallback(null);
168
+
169
+ } catch (e) {
170
+ finalCallback(e);
171
+ }
172
+ });
173
+ }
174
+ module.exports = tontucthoi;
@@ -1,6 +1,6 @@
1
- const tinhgiatb=require("../../libs/tinhgiatb"),controller=require("../../controllers/controllerRPT"),_Notification=global.getModel("notification"),async=require("async"),utils=require("../../libs/utils");
1
+ const tinhgiatb=require("../../libs/tinhgiatb"),controller=require("../../controllers/controllerRPT"),_Notification=global.getModel("notification"),async=require("async"),utils=require("../../libs/utils"),{getCurrentSession}=require("../../libs/sessionContext");
2
2
  module.exports=function($router$$){new controller($router$$,"tinhgiatb",async function($req$$,$callback$$){const $query$$=$req$$.query;if(!$query$$.nam||!$query$$.tu_thang||!$query$$.den_thang)return $callback$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: nam,tu_thang,den_thang");var $ds_kho_moment_query_kho$$=require("moment"),$ngay_ks_tu_ngay$$=$ds_kho_moment_query_kho$$([Number($query$$.nam),Number($query$$.tu_thang)-1,1]).startOf("month").toDate();if($ngay_ks_tu_ngay$$=
3
3
  await utils.isBookLocked({id_app:$req$$.user.current_id_app,ngay_ct:$ngay_ks_tu_ngay$$}))return $callback$$(`\u0110\u00e3 kh\u00f3a s\u1ed5 \u0111\u1ebfn ng\u00e0y ${$ds_kho_moment_query_kho$$($ngay_ks_tu_ngay$$).format("DD/MM/YYYY")}`);const $id_app$$=$query$$.id_app;$ds_kho_moment_query_kho$$=[];$query$$.tinh_theo_kho&&!$query$$.ma_kho?($ds_kho_moment_query_kho$$={id_app:$id_app$$,status:!0},$ds_kho_moment_query_kho$$=(await global.getModel("dmkho").find($ds_kho_moment_query_kho$$,{ma_kho:1}).sort({stt:1}).lean()).map($r$$=>
4
- $r$$.ma_kho)):$ds_kho_moment_query_kho$$=[$query$$.ma_kho];async.map($ds_kho_moment_query_kho$$,($ma_kho$$,$callback$$)=>{const $zquery$$=Object.assign({},$query$$);$zquery$$.ma_kho=$ma_kho$$;tinhgiatb($zquery$$,function($error$$){$error$$&&console.error("l\u1ed7i t\u00ednh gia trung b\u00ecnh:",$error$$,$zquery$$);$callback$$($error$$)})},$error$$=>{const $email$$=$req$$.user.email;$error$$?(console.error("L\u1ed7i khi t\u00ednh gi\u00e1 trung b\u00ecnh",$error$$),_Notification.createNotification($email$$,
5
- $email$$,$error$$.message||$error$$,$error$$.message||$error$$,null,{id_app:$id_app$$},!0,$req$$.access_token,!0),$callback$$($error$$)):(console.info("\u0110\u00e3 t\u00ednh xong gi\u00e1 trung b\u00ecnh. Th\u00f4ng b\u00e1o t\u1edbi",$email$$),_Notification.createNotification($email$$,$email$$,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong",null,{id_app:$id_app$$},!0,$req$$.access_token,
6
- !0),$callback$$(null))})},{stream:!1,cache:!1,queue:!0,timeout:18E6,waiting_message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. B\u1ea1n c\u00f3 th\u1ec3 chuy\u1ec3n sang trang kh\u00e1c \u0111\u1ec3 l\u00e0m vi\u1ec7c. Khi ch\u01b0\u01a1ng tr\u00ecnh th\u1ef1c hi\u1ec7n xong s\u1ebd g\u1eedi th\u00f4ng b\u00e1o cho b\u1ea1n."})};
4
+ $r$$.ma_kho)):$ds_kho_moment_query_kho$$=[$query$$.ma_kho];console.log(`\u2705 [tinhgiatb] T\u00ednh gi\u00e1 trung b\u00ecnh, sessionID=${getCurrentSession()?._debugId}`);async.map($ds_kho_moment_query_kho$$,($ma_kho$$,$callback$$)=>{const $zquery$$=Object.assign({},$query$$);$zquery$$.ma_kho=$ma_kho$$;tinhgiatb($zquery$$,function($error$$){$error$$&&console.error("l\u1ed7i t\u00ednh gia trung b\u00ecnh:",$error$$,$zquery$$);$callback$$($error$$)})},$error$$=>{const $email$$=$req$$.user.email;$error$$?
5
+ (console.error("L\u1ed7i khi t\u00ednh gi\u00e1 trung b\u00ecnh",$error$$),_Notification.createNotification($email$$,$email$$,$error$$.message||$error$$,$error$$.message||$error$$,null,{id_app:$id_app$$},!0,$req$$.access_token,!0),$callback$$($error$$)):(console.info("\u0110\u00e3 t\u00ednh xong gi\u00e1 trung b\u00ecnh. Th\u00f4ng b\u00e1o t\u1edbi",$email$$),_Notification.createNotification($email$$,$email$$,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong",
6
+ null,{id_app:$id_app$$},!0,$req$$.access_token,!0),$callback$$(null))})},{stream:!1,cache:!1,queue:!0,timeout:18E6,waiting_message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. B\u1ea1n c\u00f3 th\u1ec3 chuy\u1ec3n sang trang kh\u00e1c \u0111\u1ec3 l\u00e0m vi\u1ec7c. Khi ch\u01b0\u01a1ng tr\u00ecnh th\u1ef1c hi\u1ec7n xong s\u1ebd g\u1eedi th\u00f4ng b\u00e1o cho b\u1ea1n."})};
@@ -1,3 +1,5 @@
1
- const {runWithSession}=require("./libs/sessionContext.js");
2
- exports.transactionMiddleware=function($options$$={autoCommit:!0}){return async($req$$,$res$$,$next$$)=>{const $session$$=await mongoose.startSession();let $finished$$=!1;try{await runWithSession($session$$,async()=>{await $session$$.startTransaction();$res$$.on("finish",async()=>{if(!$finished$$){$finished$$=!0;try{$res$$.statusCode<400&&$options$$.autoCommit?await $session$$.commitTransaction():await $session$$.abortTransaction()}catch($err$$){console.error("Transaction finalize error:",$err$$)}finally{await $session$$.endSession()}}});
3
- await $next$$()})}catch($err$$){$finished$$||($finished$$=!0,await $session$$.abortTransaction().catch(()=>{}),await $session$$.endSession()),$next$$($err$$)}}};
1
+ const mongoose=require("mongoose"),{runWithSession,getAfterCommitList}=require("./libs/sessionContext.js");
2
+ exports.transactionMiddleware=function($options$$={autoCommit:!0}){return async($req$$,$res$$,$next$$)=>{const $session$$=await mongoose.startSession();let $finished$$=!1,$committed$$=!1,$afterCommitCallbacks$$=[];try{await runWithSession($session$$,async()=>{await $session$$.startTransaction();const $store$$=require("node:async_hooks").AsyncLocalStorage.prototype.getStore?.call(runWithSession);$store$$&&($store$$.afterCommit=[]);$res$$.on("finish",async()=>{if(!$finished$$){$finished$$=!0;try{$res$$.statusCode<
3
+ 400&&$options$$.autoCommit?(await $session$$.commitTransaction(),$committed$$=!0,console.log("[transactionMiddleware] \u2705 Transaction committed")):(await $session$$.abortTransaction(),console.log("[transactionMiddleware] \u26a0\ufe0f Transaction aborted"))}catch($err$$){console.error("[transactionMiddleware] Transaction finalize error:",$err$$)}finally{$afterCommitCallbacks$$=getAfterCommitList();try{await $session$$.endSession(),console.log("[transactionMiddleware] \ud83d\udd12 Session ended")}catch($e$$){console.warn("[transactionMiddleware] Warning: endSession failed:",
4
+ $e$$)}if($committed$$)try{const $callbacks$$=$afterCommitCallbacks$$;if($callbacks$$?.length){console.log(`[transactionMiddleware] \ud83d\udd01 Running ${$callbacks$$.length} afterCommit callbacks...`);for(const $cb$$ of $callbacks$$)try{await Promise.resolve($cb$$())}catch($cbErr$$){console.error("[afterCommit callback error]",$cbErr$$)}}}catch($err$$){console.error("[transactionMiddleware] afterCommit execution error:",$err$$)}}}});await $next$$()})}catch($err$$){$finished$$||($finished$$=!0,await $session$$.abortTransaction().catch(()=>
5
+ {}),await $session$$.endSession().catch(()=>{})),$next$$($err$$)}}};