flexbiz-server 12.5.33 → 12.5.35

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.5.33",
5
+ "version": "12.5.35",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -12,6 +12,7 @@
12
12
  "service",
13
13
  "API"
14
14
  ],
15
+ "scripts": {},
15
16
  "license": "MIT",
16
17
  "dependencies": {
17
18
  "@ffmpeg-installer/ffmpeg": "^1.0.20",
@@ -15,17 +15,18 @@ $res$$);else{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,fi
15
15
  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$$,{error:$response$$.error,data:$response$$.result},
16
16
  $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$$);$res$$.send($returnvalue$$)}})}catch($e$$){console.error("L\u1ed7i t\u1ea1o job cho b\u00e1o c\u00e1o",
17
17
  $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;try{if($_req$jscomp$1_user_agent$$={handler:"rptExcelHandler",query:$query$$,body:$body$$,user:$user$$,
18
- 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)},$data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$=>{if($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.error)return $res$$.status(400).send($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.error);
19
- $data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$=$data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.result;const $result$$=$data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.data;switch($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xlsx');$data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$=
20
- $result$$;$data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.data)&&($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$=Buffer.from($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.length);$res$$.end($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$);break;case "docx":$res$$.setHeader("Content-Type",
21
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".docx');$data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$=$result$$;$data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.data)&&($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$=Buffer.from($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.data));
22
- $res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$.length);$res$$.end($data$jscomp$2_data$jscomp$3_response$jscomp$3_returnvalue$$);break;default:$res$$.send($result$$)}})}else handlers.rptExcelHandler(this,$_req$jscomp$1_user_agent$$,($e$jscomp$7_result$$,$data$jscomp$4_data$jscomp$5_returnvalue$$)=>{if($e$jscomp$7_result$$)return $res$$.status(400).send($e$jscomp$7_result$$);$e$jscomp$7_result$$=$data$jscomp$4_data$jscomp$5_returnvalue$$.data;switch($data$jscomp$4_data$jscomp$5_returnvalue$$.type){case "xlsx":$res$$.setHeader("Content-Type",
23
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xlsx');$data$jscomp$4_data$jscomp$5_returnvalue$$=$e$jscomp$7_result$$;$data$jscomp$4_data$jscomp$5_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$4_data$jscomp$5_returnvalue$$.data)&&($data$jscomp$4_data$jscomp$5_returnvalue$$=Buffer.from($data$jscomp$4_data$jscomp$5_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$4_data$jscomp$5_returnvalue$$.length);
24
- $res$$.end($data$jscomp$4_data$jscomp$5_returnvalue$$);break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".docx');$data$jscomp$4_data$jscomp$5_returnvalue$$=$e$jscomp$7_result$$;$data$jscomp$4_data$jscomp$5_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$4_data$jscomp$5_returnvalue$$.data)&&($data$jscomp$4_data$jscomp$5_returnvalue$$=Buffer.from($data$jscomp$4_data$jscomp$5_returnvalue$$.data));
25
- $res$$.setHeader("Content-Length",$data$jscomp$4_data$jscomp$5_returnvalue$$.length);$res$$.end($data$jscomp$4_data$jscomp$5_returnvalue$$);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$$,
26
- $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]",
27
- $e$$),$callback$$($e$$.message)}})}createRoute($routeName$$,$callbackRoute_handler$$,$_options$$={method:"GET",not_use_worker:!1,right_code:"view"}){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$$,
28
- 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"]||$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$$,
29
- 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$$)=>{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)},
30
- $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$$);$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$$):
31
- $_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;
18
+ 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)},$data$jscomp$2_data$jscomp$3_ext_response$$=>{if($data$jscomp$2_data$jscomp$3_ext_response$$.error)return $res$$.status(400).send($data$jscomp$2_data$jscomp$3_ext_response$$.error);
19
+ var $result_returnvalue$$=$data$jscomp$2_data$jscomp$3_ext_response$$.result;$data$jscomp$2_data$jscomp$3_ext_response$$=$result_returnvalue$$.type;$result_returnvalue$$=$result_returnvalue$$.data;switch($data$jscomp$2_data$jscomp$3_ext_response$$){case "xlsx":console.log("[controllerRPT] send file from worker...",$data$jscomp$2_data$jscomp$3_ext_response$$,typeof $result_returnvalue$$);if(typeof $result_returnvalue$$=="string")return $res$$.send($result_returnvalue$$);$res$$.setHeader("Content-Type",
20
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xlsx');$data$jscomp$2_data$jscomp$3_ext_response$$=$result_returnvalue$$;$data$jscomp$2_data$jscomp$3_ext_response$$?.type==="Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_ext_response$$.data)&&($data$jscomp$2_data$jscomp$3_ext_response$$=Buffer.from($data$jscomp$2_data$jscomp$3_ext_response$$.data));$res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_ext_response$$.length);
21
+ $res$$.end($data$jscomp$2_data$jscomp$3_ext_response$$);break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".docx');$data$jscomp$2_data$jscomp$3_ext_response$$=$result_returnvalue$$;$data$jscomp$2_data$jscomp$3_ext_response$$?.type==="Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_ext_response$$.data)&&($data$jscomp$2_data$jscomp$3_ext_response$$=
22
+ Buffer.from($data$jscomp$2_data$jscomp$3_ext_response$$.data));$res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_ext_response$$.length);$res$$.end($data$jscomp$2_data$jscomp$3_ext_response$$);break;default:$res$$.send($result_returnvalue$$)}})}else handlers.rptExcelHandler(this,$_req$jscomp$1_user_agent$$,($e$jscomp$7_result$$,$data$jscomp$4_data$jscomp$5_returnvalue$$)=>{if($e$jscomp$7_result$$)return $res$$.status(400).send($e$jscomp$7_result$$);$e$jscomp$7_result$$=$data$jscomp$4_data$jscomp$5_returnvalue$$.data;
23
+ switch($data$jscomp$4_data$jscomp$5_returnvalue$$.type){case "xlsx":console.log("[controllerRPT] send xls file...");if(typeof $e$jscomp$7_result$$=="string")return $res$$.send($e$jscomp$7_result$$);$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xlsx');$data$jscomp$4_data$jscomp$5_returnvalue$$=$e$jscomp$7_result$$;$data$jscomp$4_data$jscomp$5_returnvalue$$?.type==="Buffer"&&
24
+ Array.isArray($data$jscomp$4_data$jscomp$5_returnvalue$$.data)&&($data$jscomp$4_data$jscomp$5_returnvalue$$=Buffer.from($data$jscomp$4_data$jscomp$5_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$4_data$jscomp$5_returnvalue$$.length);$res$$.end($data$jscomp$4_data$jscomp$5_returnvalue$$);break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+
25
+ '".docx');$data$jscomp$4_data$jscomp$5_returnvalue$$=$e$jscomp$7_result$$;$data$jscomp$4_data$jscomp$5_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$4_data$jscomp$5_returnvalue$$.data)&&($data$jscomp$4_data$jscomp$5_returnvalue$$=Buffer.from($data$jscomp$4_data$jscomp$5_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$4_data$jscomp$5_returnvalue$$.length);$res$$.end($data$jscomp$4_data$jscomp$5_returnvalue$$);break;default:$res$$.send($e$jscomp$7_result$$)}})}catch($e$$){$res$$.status(400).send($e$$)}};
26
+ $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$$!=
27
+ "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,right_code:"view"}){const $self$$=this;$_options$$.method=
28
+ $_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$$,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"]||
29
+ $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$$)=>
30
+ {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$$);
31
+ $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+
32
+ this.module}/${$routeName$$}`).get($callbackRoute_handler$$)}}module.exports=controllerRPT;
@@ -36,8 +36,8 @@ isNaN($limit$$)&&($limit$$=20);if($condition_group$$){let $field_ref$$=$req$$.fe
36
36
  Math.max(Number($req$$.fetch_by_groups.limit),Math.round($limit$$/$condition_groups$$.length))))}else $condition_groups$$=[$condition$$];async.map($condition_groups$$,($condition$$,$cb$$)=>{$fetchData$$($condition$$,$limit$$,$page_fetch$$,$cb$$)},($e$$,$obj4views$$)=>{if($e$$)return console.error("exec query find",$e$$,JSON.stringify($condition$$)),$callback$$({error:$e$$.error||$e$$.message||$e$$});let $obj4view$$=$obj4views$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$obj4view$$||=[];async.parallel({found:function($callback$$){$ctrl$$.found?
37
37
  $ctrl$$.found($req$$.user,$condition$$,$obj4view$$,function($error$$,$items$$){setImmediate(()=>{$callback$$($error$$,$items$$)})}):$callback$$(null,$obj4view$$)},set_collection_name:function($callback$$){$obj4view$$.forEach($obj$$=>{$obj$$.collection_name||($obj$$.collection_name=$ctrl$$.collection_name)});$callback$$(null)}},function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$({error:$error$$.error||$error$$.message||$error$$});$obj4view$$=$rs$$.found;async.parallel({e_view:function($callback$$){$ctrl$$.onView($req$$.user,
38
38
  $obj4view$$,($error$$,$viewValue$$)=>{setImmediate(()=>{if($error$$)return console.error("Erron on view:",$error$$),$callback$$($error$$);$callback$$(null,$viewValue$$)})},{req:$req$$,shareRoute:$shareRoute$$})}},async function($app_dir_root_template_e$$,$rs$$){if($error$$)return $callback$$({error:$error$$.error||$error$$.message||$error$$});$req$$.query_cache&&setImmediate(()=>{redisCache.setCacheReport($req$$.user.email,($req$$.user.current_id_app||"system").toString(),$ctrl$$.name,$req$$.query_cache,
39
- $rs$$.e_view,$req$$.query.page)});if($req$$.query.type_data&&$req$$.query.type_data=="xlsx"){$app_dir_root_template_e$$=(configs.paths||{}).templates;let $template_id$$;if($template_id$$=$req$$.query.id_template){if(!global.mongoose.Types.ObjectId.isValid($template_id$$))return $callback$$({error:"M\u1eabu excel kh\u00f4ng t\u1ed3n t\u1ea1i"});var $_groupBy_excelTemplate_func_string$$=await global.getModel("exportexceltemplate").findById($template_id$$);if(!$_groupBy_excelTemplate_func_string$$||
40
- !$_groupBy_excelTemplate_func_string$$.file)return $callback$$({error:"M\u1eabu excel kh\u00f4ng t\u1ed3n t\u1ea1i"});var $_rs_templatePath$$=$app_dir_root_template_e$$?`${path.dirname($app_dir_root_template_e$$)}${$_groupBy_excelTemplate_func_string$$.file}`:`${path.dirname(__dirname)}${$_groupBy_excelTemplate_func_string$$.file}`}else $app_dir_root_template_e$$&&($_rs_templatePath$$=`${$app_dir_root_template_e$$}/excels/lists/${$ctrl$$.name}.xlsx`),$_rs_templatePath$$&&fs.existsSync($_rs_templatePath$$)||
39
+ $rs$$.e_view,$req$$.query.page)});if($req$$.query.type_data&&$req$$.query.type_data=="xlsx"){$app_dir_root_template_e$$=(configs.paths||{}).templates;let $template_id$$;if($template_id$$=$req$$.query.id_template){if(!global.mongoose.Types.ObjectId.isValid($template_id$$))return $callback$$({error:"ID m\u1eabu file xu\u1ea5t kh\u00f4ng h\u1ee3p l\u1ec7"});var $_groupBy_excelTemplate_func_string$$=await global.getModel("exportexceltemplate").findById($template_id$$);if(!$_groupBy_excelTemplate_func_string$$||
40
+ !$_groupBy_excelTemplate_func_string$$.file)return $callback$$({error:"M\u1eabu file xu\u1ea5t kh\u00f4ng t\u1ed3n t\u1ea1i"});var $_rs_templatePath$$=$app_dir_root_template_e$$?`${path.dirname($app_dir_root_template_e$$)}${$_groupBy_excelTemplate_func_string$$.file}`:`${path.dirname(__dirname)}${$_groupBy_excelTemplate_func_string$$.file}`}else $app_dir_root_template_e$$&&($_rs_templatePath$$=`${$app_dir_root_template_e$$}/excels/lists/${$ctrl$$.name}.xlsx`),$_rs_templatePath$$&&fs.existsSync($_rs_templatePath$$)||
41
41
  ($_rs_templatePath$$=`${path.dirname(__dirname)}/templates/excels/lists/${$ctrl$$.name}.xlsx`);if(!fs.existsSync($_rs_templatePath$$))return $callback$$({error:"File m\u1eabu excel ch\u01b0a \u0111\u01b0\u1ee3c khai b\u00e1o t\u1ea1i '"+$_rs_templatePath$$+"'"});$app_dir_root_template_e$$={};$rs$$.e_view.forEach($item$$=>{for(let $_key$$ in $item$$){let $_v$$=$item$$[$_key$$];if(_.isObject($_v$$))for(let $__key$$ in $_v$$){let $__v$$=$_v$$[$__key$$];if(!_.isFunction($__v$$))if($_key$$.indexOf("user")<
42
42
  0&&($__key$$.indexOf("ngay")>=0||$__key$$.indexOf("date")>=0))try{$item$$[`${$_key$$}_${$__key$$}`]=new Date($__v$$)}catch($e$$){$item$$[`${$_key$$}_${$__key$$}`]=$__v$$}else $item$$[`${$_key$$}_${$__key$$}`]=$__v$$}else if($_v$$&&$_key$$.indexOf("user")<0&&($_key$$.indexOf("ngay")>=0||$_key$$.indexOf("date")>=0))try{console.log("convert date",$_key$$,$_v$$);let $d$$=moment($_v$$,"YYYY-MM-DD");$d$$.isValid()&&($item$$[`${$_key$$}`]=$d$$.toDate(),$item$$[`${$_key$$}_string`]=$d$$.format("DD/MM/YYYY"))}catch($e$$){console.error("Error convert to date",
43
43
  $_v$$,$e$$)}}});$app_dir_root_template_e$$.detail=$rs$$.e_view;if($_groupBy_excelTemplate_func_string$$&&$_groupBy_excelTemplate_func_string$$.handle_data){$_groupBy_excelTemplate_func_string$$=`return (async ()=>{
@@ -1,18 +1,30 @@
1
1
  const async=require("async"),_=require("lodash"),{JSONParser}=require("../libs/utils"),{createHandler}=require("./createHandler"),{updateHandler}=require("./updateHandler"),{executeInTransaction}=require("../libs/sessionContext.js"),create=async($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add")=>{$req$$=$req$$||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;createHandler($ctrl$$,$req$$,($e_obj_created$$,
2
2
  $returnvalue$$)=>{if($e_obj_created$$)return $callback$$($e_obj_created$$);({obj_created:$e_obj_created$$}=$returnvalue$$);$callback$$(null,$e_obj_created$$)})},update=async function($user$$,$ctrl$$,$id$$,$data$$,$callback$$,$action$$,$req$$,$_action$$="update"){$req$$=$req$$||{};$req$$.action=$action$$;$req$$._action=$_action$$;$req$$.user=$user$$;$req$$.id=$id$$;$req$$.data=$data$$;updateHandler($ctrl$$,$req$$,($e$$,$returnvalue$$)=>{if($e$$)return $callback$$($e$$);$callback$$(null,$returnvalue$$.new_obj)})};
3
- async function importHandler($user$$,$ctrl$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null,listinfo_code:null}){const $model$$=$ctrl$$.model;let $replace$$=$options$$.replace,$rows_error$$=[];var $custs_listInfo_tk_dt$$=global.getModel("listinfo");let $info$$=await $custs_listInfo_tk_dt$$.findOne({code:($options$$.listinfo_code||$ctrl$$.name).toLowerCase()}).lean(),$modelJoins$$=[];$info$$&&(await $custs_listInfo_tk_dt$$.updateModel($info$$,$ctrl$$.model),$modelJoins$$=($info$$.fields||
4
- []).filter($f$$=>$f$$.ref_model&&$f$$.ref_field=="_id"));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});if(configs.limitRowImport&&$data$$.length>configs.limitRowImport)return $callback_main$$("S\u1ed1 d\u00f2ng import t\u1ed1i \u0111a 1 l\u1ea7n l\u00e0 "+configs.limitRowImport);console.log("[importHanlder] \u0110ang import t\u1edbi",$model$$.modelName,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u...");$custs_listInfo_tk_dt$$=
5
- [];if($model$$.modelName!=="customer"){$model$$.schema.paths.ma_kh&&($custs_listInfo_tk_dt$$=$data$$.filter($r$$=>$r$$.ten_kh));$model$$.schema.paths.details&&($custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.map($kh$$=>{$kh$$.ma_kh||($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,
6
- ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||""}});$custs_listInfo_tk_dt$$=await $custs_listInfo_tk_dt$$.asyncGroupBy(["ma_kh","ten_kh","dia_chi","dien_thoai","ma_so_thue"],[]);for(var $dvts_kh$$ of $custs_listInfo_tk_dt$$)$dvts_kh$$.id_app=$id_app$$,$dvts_kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($dvts_kh$$)}$dvts_kh$$=[];if($model$$.modelName!=="dmkho"){$model$$.schema.paths.ma_kho&&($dvts_kh$$=
7
- $data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));$dvts_kh$$=$dvts_kh$$.map($kh$$=>{$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho}});$dvts_kh$$=await $dvts_kh$$.asyncGroupBy(["ma_kho","ten_kho"],[]);for(var $kho_vts$$ of $dvts_kh$$)$kho_vts$$.id_app=
8
- $id_app$$,$kho_vts$$.user_created=$user$$.email,$kho_vts$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho_vts$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho_vts$$)}$kho_vts$$=[];if($model$$.modelName!=="dmvt"&&($model$$.schema.paths.ma_vt&&($kho_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)),$model$$.schema.paths.details&&($kho_vts$$=$kho_vts$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_vt&&
9
- $r$$.ten_vt))),$kho_vts$$=$kho_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",user_created:$user$$.email})),$kho_vts$$=await $kho_vts$$.asyncGroupBy(["ma_vt","ten_vt","ma_dvt"],[]),$kho_vts$$.length>0)){$dvts_kh$$=await $kho_vts$$.asyncGroupBy(["ma_dvt"],[]);for(var $dvt_tk_vt$$ of $dvts_kh$$)$dvt_tk_vt$$.id_app=$id_app$$,$dvt_tk_vt$$.ten_dvt=$dvt_tk_vt$$.ma_dvt,$dvt_tk_vt$$.status=!0,$dvt_tk_vt$$.user_created=$user$$.email,
10
- await global.getModel("dmdvt").findOne({ma_dvt:$dvt_tk_vt$$.ma_dvt,id_app:$id_app$$}).lean()||(console.log("[importHanlder] create dvt",$dvt_tk_vt$$),await global.getModel("dmdvt").create($dvt_tk_vt$$));$dvt_tk_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},{tk:1}).lean()||{}).tk;$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_listInfo_tk_dt$$=(await global.getModel("account").findOne({id_app:$id_app$$,
11
- loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(let $vt$$ of $kho_vts$$)$vt$$.id_app=$id_app$$,$vt$$.tk_vt=$dvt_tk_vt$$,$vt$$.tk_gv=$dvts_kh$$,$vt$$.tk_dt=$custs_listInfo_tk_dt$$,$vt$$.status=!0,$vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$vt$$.ma_vt,id_app:$id_app$$}).lean()||(console.log("[importHanlder] create product",$vt$$),await global.getModel("dmvt").create($vt$$),await global.getModel("dmqddvt").create({id_app:$id_app$$,status:!0,ma_vt:$vt$$.ma_vt,
12
- ma_dvt:$vt$$.ma_dvt,tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)||delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});console.error("[importHanlder] begin import",$ctrl$$.name);async.mapLimit($data$$,100,function($row$$,$callback$$){const $row_keys$$=Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>
13
- {let $data_type$$=$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase(),$data_value$$=$row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&($data_type$$=="mixed"||$data_type$$=="array")&&($data_value$$=$data_value$$.trim(),$data_value$$.indexOf("[")==0||$data_value$$.indexOf("{")==0))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],console.error("[importHanlder] Error parse data",$e$$)}});setImmediate(async()=>{for(let $i$$=0;$i$$<$modelJoins$$.length;$i$$++){let $field_ref$$=
14
- $modelJoins$$[$i$$];if($row$$[$field_ref$$.name]){let $new_data_ref$$=await global.getModel("originimportid").findOne({id_app:$id_app$$,old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&$id_app$$!=$row$$.id_app&&delete $row$$._id;delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&$ctrl$$.unique.length>0||$row$$._id)){let $query$$=
15
- {};if($ctrl$$.unique&&$ctrl$$.unique.length>0){if($ctrl$$.options.unique_imp&&$row$$[$ctrl$$.options.unique_imp]!=null&&$row$$[$ctrl$$.options.unique_imp]!=void 0&&$row$$[$ctrl$$.options.unique_imp]!="")$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){$row_keys$$.indexOf($k$$)>=0&&($query$$[$k$$]=$row$$[$k$$],$query$$[$k$$]==void 0&&delete $query$$[$k$$])}),Object.keys($query$$).length<1)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u c\u1ea7n c\u00f3 \u00edt nh\u1ea5t m\u1ed9t gi\u00e1 tr\u1ecb:"+
3
+ async function importHandler($user$$,$ctrl$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null,listinfo_code:null}){const $model$$=$ctrl$$.model;let $replace$$=$options$$.replace,$rows_error$$=[];var $custs_listInfo_new_custs_tk_dt$$=global.getModel("listinfo"),$info_nh_kh_nh_kh$jscomp$1_nh_kh$$=await $custs_listInfo_new_custs_tk_dt$$.findOne({code:($options$$.listinfo_code||$ctrl$$.name).toLowerCase()}).lean();let $modelJoins$$=[];$info_nh_kh_nh_kh$jscomp$1_nh_kh$$&&(await $custs_listInfo_new_custs_tk_dt$$.updateModel($info_nh_kh_nh_kh$jscomp$1_nh_kh$$,
4
+ $ctrl$$.model),$modelJoins$$=($info_nh_kh_nh_kh$jscomp$1_nh_kh$$.fields||[]).filter($f$$=>$f$$.ref_model&&$f$$.ref_field=="_id"));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});if(configs.limitRowImport&&$data$$.length>configs.limitRowImport)return $callback_main$$("S\u1ed1 d\u00f2ng import t\u1ed1i \u0111a 1 l\u1ea7n l\u00e0 "+configs.limitRowImport);console.log("[importHanlder] \u0110ang import t\u1edbi",$model$$.modelName,
5
+ $data$$.length," d\u00f2ng d\u1eef li\u1ec7u...");$custs_listInfo_new_custs_tk_dt$$=[];if($model$$.modelName!=="customer"){$model$$.schema.paths.ma_kh&&($custs_listInfo_new_custs_tk_dt$$=$data$$.filter($r$$=>$r$$.ten_kh));$model$$.schema.paths.details&&($custs_listInfo_new_custs_tk_dt$$=$custs_listInfo_new_custs_tk_dt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_listInfo_new_custs_tk_dt$$=$custs_listInfo_new_custs_tk_dt$$.map($kh$$=>
6
+ {$kh$$.ma_kh||($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||"",nh_kh:$kh$$.nh_kh,ten_nh_kh:$kh$$.ten_nh_kh,ten_nh_kh2:$kh$$.ten_nh_kh2,nh_kh2:$kh$$.nh_kh2,ten_nh_kh3:$kh$$.ten_nh_kh3,nh_kh3:$kh$$.nh_kh3}});$info_nh_kh_nh_kh$jscomp$1_nh_kh$$=await $custs_listInfo_new_custs_tk_dt$$.filter($c$$=>$c$$.ten_nh_kh&&!$c$$.nh_kh).asyncGroupBy(["ten_nh_kh"],
7
+ []);for(let $ten_nh_kh$$ of $info_nh_kh_nh_kh$jscomp$1_nh_kh$$)if($info_nh_kh_nh_kh$jscomp$1_nh_kh$$={},$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.id_app=$id_app$$,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.group_name=$ten_nh_kh$$,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.group_type="CUSTOMER",$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.group_kind=1,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.status=!0,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.user_created=$user$$.email,!await global.getModel("group").findOne({group_name:$ten_nh_kh$$,id_app:$id_app$$,
8
+ group_kind:1,group_type:"CUSTOMER"},{_id:1}).lean()){console.log("[importHanlder] create nhom kh",$ten_nh_kh$$);const $new_nh_kh$$=await global.getModel("group").create($info_nh_kh_nh_kh$jscomp$1_nh_kh$$);$custs_listInfo_new_custs_tk_dt$$.filter($c$$=>$c$$.ten_nh_kh==$ten_nh_kh$$).forEach($c$$=>{$c$$.nh_kh=$new_nh_kh$$._id.toString()})}$info_nh_kh_nh_kh$jscomp$1_nh_kh$$=await $custs_listInfo_new_custs_tk_dt$$.filter($c$$=>$c$$.ten_nh_kh2&&!$c$$.nh_kh2).asyncGroupBy(["ten_nh_kh2"],[]);for(let $ten_nh_kh2$$ of $info_nh_kh_nh_kh$jscomp$1_nh_kh$$)if($info_nh_kh_nh_kh$jscomp$1_nh_kh$$=
9
+ {},$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.id_app=$id_app$$,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.group_name=$ten_nh_kh2$$,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.group_type="CUSTOMER",$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.group_kind=2,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.status=!0,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.user_created=$user$$.email,!await global.getModel("group").findOne({group_name:$ten_nh_kh2$$,id_app:$id_app$$,group_kind:2,group_type:"CUSTOMER"},{_id:1}).lean()){console.log("[importHanlder] create nhom kh2",
10
+ $ten_nh_kh2$$);const $new_nh_kh$$=await global.getModel("group").create($info_nh_kh_nh_kh$jscomp$1_nh_kh$$);$custs_listInfo_new_custs_tk_dt$$.filter($c$$=>$c$$.ten_nh_kh2==$ten_nh_kh2$$).forEach($c$$=>{$c$$.nh_kh2=$new_nh_kh$$._id.toString()})}$info_nh_kh_nh_kh$jscomp$1_nh_kh$$=await $custs_listInfo_new_custs_tk_dt$$.filter($c$$=>$c$$.ten_nh_kh3&&!$c$$.nh_kh3).asyncGroupBy(["ten_nh_kh3"],[]);for(let $ten_nh_kh3$$ of $info_nh_kh_nh_kh$jscomp$1_nh_kh$$)if($info_nh_kh_nh_kh$jscomp$1_nh_kh$$={},$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.id_app=
11
+ $id_app$$,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.group_name=$ten_nh_kh3$$,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.group_type="CUSTOMER",$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.group_kind=3,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.status=!0,$info_nh_kh_nh_kh$jscomp$1_nh_kh$$.user_created=$user$$.email,!await global.getModel("group").findOne({group_name:$ten_nh_kh3$$,id_app:$id_app$$,group_kind:3,group_type:"CUSTOMER"},{_id:1}).lean()){console.log("[importHanlder] create nhom kh3",$ten_nh_kh3$$);const $new_nh_kh$$=await global.getModel("group").create($info_nh_kh_nh_kh$jscomp$1_nh_kh$$);
12
+ $custs_listInfo_new_custs_tk_dt$$.filter($c$$=>$c$$.ten_nh_kh3==$ten_nh_kh3$$).forEach($c$$=>{$c$$.nh_kh3=$new_nh_kh$$._id.toString()})}$custs_listInfo_new_custs_tk_dt$$=await $custs_listInfo_new_custs_tk_dt$$.asyncGroupBy("ma_kh ten_kh dia_chi dien_thoai ma_so_thue nh_kh nh_kh2 nh_kh3".split(" "),[]);for(var $dvts_kh$$ of $custs_listInfo_new_custs_tk_dt$$)$dvts_kh$$.id_app=$id_app$$,$dvts_kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($dvts_kh$$)}$dvts_kh$$=
13
+ [];if($model$$.modelName!=="dmkho"){$model$$.schema.paths.ma_kho&&($dvts_kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));$dvts_kh$$=$dvts_kh$$.map($kh$$=>{$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho}});$dvts_kh$$=await $dvts_kh$$.asyncGroupBy(["ma_kho",
14
+ "ten_kho"],[]);for(var $kho_vts$$ of $dvts_kh$$)$kho_vts$$.id_app=$id_app$$,$kho_vts$$.user_created=$user$$.email,$kho_vts$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho_vts$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho_vts$$)}$kho_vts$$=[];if($model$$.modelName!=="dmvt"&&($model$$.schema.paths.ma_vt&&($kho_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)),$model$$.schema.paths.details&&($kho_vts$$=$kho_vts$$.concat($data$$.map($v$$=>$v$$.details||
15
+ []).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt))),$kho_vts$$=$kho_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",ma_nvt:$vt$$.ma_nvt,ten_nvt:$vt$$.ten_nvt,ma_nvt2:$vt$$.ma_nvt2,ten_nvt2:$vt$$.ten_nvt2,ma_nvt3:$vt$$.ma_nvt3,ten_nvt3:$vt$$.ten_nvt3,user_created:$user$$.email})),$kho_vts$$=await $kho_vts$$.asyncGroupBy("ma_vt ten_vt ma_dvt ma_nvt ten_nvt ma_nvt2 ten_nvt2 ma_nvt3 ten_nvt3".split(" "),
16
+ []),$kho_vts$$.length>0)){$dvts_kh$$=await $kho_vts$$.asyncGroupBy(["ma_dvt"],[]);for(var $dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$ of $dvts_kh$$)$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.id_app=$id_app$$,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.ten_dvt=$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.ma_dvt,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.status=!0,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.user_created=$user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.ma_dvt,id_app:$id_app$$}).lean()||(console.log("[importHanlder] create dvt",
17
+ $dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$),await global.getModel("dmdvt").create($dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$));$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$=await $kho_vts$$.filter($c$$=>$c$$.ten_nvt).asyncGroupBy(["ten_nvt"],[]);for(let $ten_nvt$$ of $dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$)if($dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$={},$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.id_app=$id_app$$,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.ten_nvt=$ten_nvt$$,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.group_kind=1,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.status=
18
+ !0,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.user_created=$user$$.email,!await global.getModel("dmnvt").findOne({ten_nvt:$ten_nvt$$,id_app:$id_app$$,group_kind:1},{_id:1}).lean()){console.log("[importHanlder] create nhom vat tu",$ten_nvt$$);const $new_nvt$$=await global.getModel("dmnvt").create($dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$);$kho_vts$$.filter($c$$=>$c$$.ten_nvt==$ten_nvt$$).forEach($c$$=>{$c$$.ma_nvt=$new_nvt$$._id.toString()})}$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$=await $kho_vts$$.filter($c$$=>$c$$.ten_nvt2).asyncGroupBy(["ten_nvt2"],
19
+ []);for(let $ten_nvt2$$ of $dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$)if($dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$={},$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.id_app=$id_app$$,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.ten_nvt=$ten_nvt2$$,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.group_kind=2,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.status=!0,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.user_created=$user$$.email,!await global.getModel("dmnvt").findOne({ten_nvt:$ten_nvt2$$,id_app:$id_app$$,group_kind:2},{_id:1}).lean()){console.log("[importHanlder] create nhom vat tu 2",
20
+ $ten_nvt2$$);const $new_nvt$$=await global.getModel("dmnvt").create($dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$);$kho_vts$$.filter($c$$=>$c$$.ten_nvt2==$ten_nvt2$$).forEach($c$$=>{$c$$.ma_nvt2=$new_nvt$$._id.toString()})}$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$=await $kho_vts$$.filter($c$$=>$c$$.ten_nvt3).asyncGroupBy(["ten_nvt3"],[]);for(let $ten_nvt3$$ of $dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$)if($dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$={},$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.id_app=$id_app$$,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.ten_nvt=
21
+ $ten_nvt3$$,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.group_kind=3,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.status=!0,$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$.user_created=$user$$.email,!await global.getModel("dmnvt").findOne({ten_nvt:$ten_nvt3$$,id_app:$id_app$$,group_kind:3},{_id:1}).lean()){console.log("[importHanlder] create nhom vat tu 3",$ten_nvt3$$);const $new_nvt$$=await global.getModel("dmnvt").create($dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$);$kho_vts$$.filter($c$$=>$c$$.ten_nvt3==$ten_nvt3$$).forEach($c$$=>{$c$$.ma_nvt3=
22
+ $new_nvt$$._id.toString()})}$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},{tk:1}).lean()||{}).tk;$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_listInfo_new_custs_tk_dt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(let $vt$$ of $kho_vts$$)$vt$$.id_app=
23
+ $id_app$$,$vt$$.tk_vt=$dvt_nh_vt_nh_vt$jscomp$1_nh_vt$$,$vt$$.tk_gv=$dvts_kh$$,$vt$$.tk_dt=$custs_listInfo_new_custs_tk_dt$$,$vt$$.status=!0,$vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$vt$$.ma_vt,id_app:$id_app$$}).lean()||(console.log("[importHanlder] create product",$vt$$),await global.getModel("dmvt").create($vt$$),await global.getModel("dmqddvt").create({id_app:$id_app$$,status:!0,ma_vt:$vt$$.ma_vt,ma_dvt:$vt$$.ma_dvt,tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;
24
+ global.mongoose.Types.ObjectId.isValid($r$$._id)||delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});console.error("[importHanlder] begin import",$ctrl$$.name);async.mapLimit($data$$,100,function($row$$,$callback$$){const $row_keys$$=Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>{let $data_type$$=$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase(),
25
+ $data_value$$=$row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&($data_type$$=="mixed"||$data_type$$=="array")&&($data_value$$=$data_value$$.trim(),$data_value$$.indexOf("[")==0||$data_value$$.indexOf("{")==0))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],console.error("[importHanlder] Error parse data",$e$$)}});setImmediate(async()=>{for(let $i$$=0;$i$$<$modelJoins$$.length;$i$$++){let $field_ref$$=$modelJoins$$[$i$$];if($row$$[$field_ref$$.name]){let $new_data_ref$$=
26
+ await global.getModel("originimportid").findOne({id_app:$id_app$$,old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&$id_app$$!=$row$$.id_app&&delete $row$$._id;delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&$ctrl$$.unique.length>0||$row$$._id)){let $query$$={};if($ctrl$$.unique&&$ctrl$$.unique.length>0){if($ctrl$$.options.unique_imp&&
27
+ $row$$[$ctrl$$.options.unique_imp]!=null&&$row$$[$ctrl$$.options.unique_imp]!=void 0&&$row$$[$ctrl$$.options.unique_imp]!="")$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){$row_keys$$.indexOf($k$$)>=0&&($query$$[$k$$]=$row$$[$k$$],$query$$[$k$$]==void 0&&delete $query$$[$k$$])}),Object.keys($query$$).length<1)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u c\u1ea7n c\u00f3 \u00edt nh\u1ea5t m\u1ed9t gi\u00e1 tr\u1ecb:"+
16
28
  $ctrl$$.unique.join(","));$ctrl$$.require_id_app!=0&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;$ctrl$$.model.find($query$$).lean().then(async function($rss$$){if($rss$$.length>1)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+Object.values($query$$).join("-")+" \u0111\u00e3 t\u1ed3n t\u1ea1i nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n");await executeInTransaction(()=>new Promise($resolve$$=>{let $foundObject$$;$rss$$.length===1&&($foundObject$$=
17
29
  $rss$$[0]);$foundObject$$?($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),update($user$$,$ctrl$$,$foundObject$$._id,$row$$,function($e$$){if($e$$){let $_e$$=$e$$;_.isArray($_e$$)||($_e$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$$})}$resolve$$()},"import",$options$$.req,"import")):create($user$$,$ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>
18
30
  {if($e$$){var $_e$jscomp$1_i$$=$e$$;_.isArray($_e$jscomp$1_i$$)||($_e$jscomp$1_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$jscomp$1_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},{new:!0,upsert:!0}),$_e$jscomp$1_i$$=0;$_e$jscomp$1_i$$<$data$$.length;$_e$jscomp$1_i$$++){const $_r$$=
@@ -28,5 +28,5 @@ $error$$.error||$error$$});if($ext$$==="docx")$callback$$(null,{type:"docx",data
28
28
  $id_rpt$$),$reject$$("Kh\u00f4ng t\u00ecm th\u1ea5y m\u1eabu");$send_to$$=$req$$.query.send_to||$r$$.send_to;if($req$$.query.print||$send_to$$)$html_template$$=$r$$.html_template,$title_template$$=$r$$.ten_mau_in;else{if($r$$.file_mau_in.indexOf("/file/download")>0){let $id_file$$=$r$$.file_mau_in.split("/").pop();const $file$$=global.getModel("file");try{const $_fileMauIn$$=await $file$$.findOne({_id:$id_file$$}).lean();if(!$_fileMauIn$$)return $reject$$("Kh\u00f4ng t\u00ecm th\u1ea5y m\u1eabu");
29
29
  let $file_name$$=$_fileMauIn$$.file.name,$root$$=configs.paths.uploads;$root$$||($root$$=__dirname,$root$$=path.dirname($root$$),$root$$=path.join($root$$,"uploads"));$templatePath$$=path.join($root$$,$file_name$$)}catch($e$$){return $reject$$($e$$.message||"Kh\u00f4ng t\u00ecm th\u1ea5y m\u1eabu")}}else $templatePath$$=path.dirname($dir_root_templates$$)+$r$$.file_mau_in;fs.existsSync($templatePath$$)||(console.error("[rptExcelHandler] file template not found",$templatePath$$),$templatePath$$=`${path.dirname($dir_root_templates$$)}/templates/excels/reports/${$module$$}.xlsx`,
30
30
  console.log("[rptExcelHandler] using default template",$templatePath$$));fs.existsSync($templatePath$$)||($templatePath$$=`${path.dirname(__dirname)}/templates/excels/reports/${$module$$}.xlsx`,console.log("[rptExcelHandler] using default template",$templatePath$$));if(!fs.existsSync($templatePath$$))return $reject$$("M\u1eabu kh\u00f4ng t\u1ed3n t\u1ea1i")}$rptConfig$$=$r$$;return $resolve$$($templatePath$$,$html_template$$)}).catch($error$$=>{console.error("Not found excel template",$error$$);return $reject$$($error$$)});
31
- else if($templatePath$$=`${path.dirname($dir_root_templates$$)}/templates/excels/reports/${$module$$}.xlsx`,fs.existsSync($templatePath$$)||($templatePath$$=`${path.dirname(__dirname)}/templates/excels/reports/${$module$$}.xlsx`),!fs.existsSync($templatePath$$))return $reject$$("M\u1eabu excel kh\u00f4ng t\u1ed3n t\u1ea1i")})).then(async()=>{$options$$.require_id_app===!1?$streamData$$({}):permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view",function($error$$,$hr$$,$app$$){$hr$$?
32
- $streamData$$({...$app$$}):$callback$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xu\u1ea5t excel b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}).catch($e$$=>{console.error($e$$);return $e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})})}catch($e$$){return $e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}};module.exports=rptExcelHandler;
31
+ else if($templatePath$$=`${path.dirname($dir_root_templates$$)}/templates/excels/reports/${$module$$}.xlsx`,fs.existsSync($templatePath$$)||($templatePath$$=`${path.dirname(__dirname)}/templates/excels/reports/${$module$$}.xlsx`),!fs.existsSync($templatePath$$))return $reject$$("M\u1eabu file xu\u1ea5t kh\u00f4ng h\u1ee3p l\u1ec7 ho\u1eb7c kh\u00f4ng t\u1ed3n t\u1ea1i")})).then(async()=>{$options$$.require_id_app===!1?$streamData$$({}):permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,
32
+ "view",function($error$$,$hr$$,$app$$){$hr$$?$streamData$$({...$app$$}):$callback$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xu\u1ea5t excel b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}).catch($e$$=>{console.error($e$$);return $e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})})}catch($e$$){return $e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}};module.exports=rptExcelHandler;
@@ -1,254 +1,15 @@
1
- const async = require("async");
2
- const _ = require("lodash");
3
- const redisCache = require("../libs/redis-cache");
4
- const view = async (user,self,rows,next,options)=> {
5
- const model = self.model;
6
- const name = self.name;
7
- const listinfo_code = options?.req?.query?.["listinfo-code"] || options?.req?.query?.["listinfo_code"] || options?.req?.headers?.["listinfo-code"] || options?.req?.headers?.["Listinfo-Code"];
8
- let fields_load="";
9
- if(options && options.req && options.req.query && options.req.query.fields){
10
- fields_load = options.req.query.fields;
11
- }
12
- //
13
- let schema_paths = model.schema.paths;
14
- for(let index=0;index<rows.length;index++){
15
- const item = rows[index];
16
- if(item._id && typeof(item._id)!=="string"){
17
- item._id = item._id.toString();
18
- }
19
- delete item.__v;
20
- item.stt_sorted = index;
21
- delete item.from_cached;
22
- if (_.has(schema_paths, 'exfields')) {
23
- if(!item.exfields){
24
- item.exfields = {};
25
- }
26
- }
27
- //xoá refs cache
28
- //delete item.__refs;
29
- }
30
- let items =[];
31
- //get view of item from cache
32
- if(options && options.req && options.req.query_cache && !options.req.query.refresh_required){
33
- await new Promise(resolve=>{
34
- setImmediate(async()=>{
35
- let cacheData = await redisCache.getCacheReport(options.req.user.email,(options.req.user.current_id_app||"system").toString(),self.name,options.req.query_cache,0,options.req.query.page);
36
- if(cacheData){
37
- for(let index=0;index<rows.length;index++){
38
- const item = rows[index];
39
- let cacheds = cacheData.filter(r=>r._id===item._id.toString());
40
- if(cacheds.length>0){
41
- for(let cached of cacheds){
42
- cached.from_cached = true;
43
- items.push(cached);
44
- }
45
- }else{
46
- items.push(item);
47
- }
48
- }
49
- }else{
50
- items = rows;
51
- }
52
- resolve();
53
- })
54
- })
55
- }else{
56
- items = rows;
57
- }
58
- //
59
- async.parallel({
60
- _Participant_created:(callback)=>{
61
- setImmediate(async ()=>{
62
- if (_.has(schema_paths, 'id_app')) {
63
- await items.filter(item=>item.user_created && !item.from_cached).asyncJoinModel2(user.current_id_app,"participant",{where:{user_created:"email"},fields:{name_user_created:"name"}});
64
- }
65
- await items.filter(item=>item.user_created && !item.name_user_created && !item.from_cached).asyncJoinModel2(null,"user",{where:{user_created:"email"},fields:{name_user_created:"name"}});
66
- callback(null);
67
- })
68
- },
69
- _Participant_updated:(callback)=>{
70
- setImmediate(async ()=>{
71
- if (_.has(schema_paths, 'id_app')) {
72
- await items.filter(item=>item.user_updated && !item.from_cached).asyncJoinModel2(user.current_id_app,global.getModel('participant'),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});
73
- }
74
- await items.filter(item=>item.user_updated && !item.name_user_updated && !item.from_cached).asyncJoinModel2(null,global.getModel('user'),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});
75
- callback(null);
76
- })
77
- },
78
- _approve:(callback)=>{
79
- if(!fields_load || fields_load.indexOf("approve_data")>=0){
80
- async.map(items,(item,next)=>{
81
- setImmediate(()=>{
82
-
83
- global.getModel('approve').find({id_ct:item._id.toString()},{
84
- data:0,request_content:0,
85
- }).sort({data_created:-1}).lean().then(async (rs)=>{
86
- //console.log("🔥[viewHandler] lấy dữ liệu duyệt:",{ma_ct:item.ma_ct,id_ct:item._id.toString()},rs.length);
87
- setImmediate(async ()=>{
88
- item.approve_data = rs||[];
89
- item.approved_latest = item.approve_data.filter(a=>a.user_approved || a.user_denied)[0];
90
- item.approve_next = item.approve_data.filter(a=>!a.user_approved && !a.user_denied)[0];
91
-
92
- await item.approve_data.filter(r=>r.user_approved).asyncJoinModel2(item.id_app,global.getModel('participant'),{where:{user_approved:"email"},fields:{user_approved_name:"name",signature_image:"signature_image"}})
93
- await item.approve_data.filter(r=>r.user_denied).asyncJoinModel2(item.id_app,global.getModel('participant'),{where:{user_denied:"email"},fields:{user_denied_name:"name",signature_image:"signature_image"}})
94
-
95
- next(null);
96
- })
97
- }).catch(e=>{
98
- console.error(e);
99
- })
100
- })
101
- },()=>{
102
- callback(null);
103
- })
104
- }else{
105
- callback(null);
106
- }
107
- },
108
- transfer_ct:(callback)=>{
109
- if(_.has(schema_paths, 'id_ct_chuyen') && user.current_app_info && user.current_app_info.options && user.current_app_info.options.id_app_thue){
110
- async.map(items,(item,next)=>{
111
- setImmediate(()=>{
112
- model.findOne({id_app:user.current_app_info.options.id_app_thue,id_ct_chuyen:item._id.toString()},{_id:1}).lean().then(async (rs)=>{
113
- if(rs){
114
- item.id_ct_nhan = rs._id;
115
- }
116
- next(null);
117
- }).catch(e=>{
118
- console.error(e)
119
- })
120
- })
121
- },()=>{
122
- callback(null);
123
- })
124
- }else{
125
- return callback()
126
- }
127
- },
128
- posted:(callback)=>{
129
- if(options && options.req && (options.req.query.show_posted_book || options.req.query.show_not_post_book) ){
130
- async.mapLimit(items,10,(item,next)=>{
131
- setImmediate(async ()=>{
132
- let book = options.req.query.show_posted_book || options.req.query.show_not_post_book;
133
- let fields ={_id:1};
134
- //cần kiểm tra từng vật tư xem có vật tư nào không được post sổ không
135
- if(book=="sokho" && item.details?.length>0){
136
- await item.details.asyncJoinModel2(item.id_app,"dmvt",{where:"ma_vt",fields:["tg_tk"]});
137
- fields.ma_vt =1;
138
- let exists = await global.getModel(book).find({id_ct:item._id.toString()},fields).lean();
139
- if(exists.length>0){
140
- let ds_vt_voucher = item.details.filter(d=>d.tg_tk).map(d=>d.ma_vt).sort((a,b)=>a-b);
141
- let ds_vt_book = exists.map(d=>d.ma_vt).sort((a,b)=>a-b);
142
-
143
- //Tất cả các vật tư đã post
144
- if(!ds_vt_voucher.find(v=>ds_vt_book.indexOf(v)<0)){
145
- item[`${book}_posted`] = true;
146
- }else{
147
- //console.log("[viewHandler][check posted] danh sách vật tư trong chứng từ khác trong sổ kho",ds_vt_voucher,ds_vt_book,item.so_ct)
148
- item[`${book}_posted`] = false;
149
- }
150
-
151
- }else{
152
- item[`${book}_posted`] = false;
153
- }
154
- }else{
155
- let exists = await global.getModel(book).findOne({id_ct:item._id.toString()},fields).lean();
156
- item[`${book}_posted`] = (!!exists);
157
- }
158
-
159
- next();
160
- })
161
- },()=>{
162
- callback(null);
163
- })
164
- }else{
165
- callback()
166
- }
167
- }
168
- }, (e)=>{
169
- if(e) return next(e);
170
- //only show posted book or not post book
171
- if(options && options.req && (options.req.query.show_posted_book || options.req.query.show_not_post_book) ){
172
- let book = options.req.query.show_posted_book || options.req.query.show_not_post_book;
173
- items = items.filter(r=>{
174
- if(options.req.query.show_posted_book) return r[`${book}_posted`]
175
- return !r[`${book}_posted`]
176
- })
177
- }
178
- //handle view
179
- let items_need_view = items.filter(i=>!i.from_cached);
180
-
181
- //lưu các ref đã join để tránh join lại trên dynamicView
182
- /*if(self.dynamicView){
183
- items_need_view.forEach(r=>{
184
- r.__refs={}
185
- })
186
- }*/
187
- //
188
- let items_cached = items.filter(i=>i.from_cached);
189
- async.series({
190
- view:(callback)=>{
191
- if(self.view){
192
- try{
193
- self.view(user, items_need_view, function(error,rs) {
194
- setImmediate(()=>{
195
- if (error) {
196
- return callback(error);
197
- }
198
- items_need_view = rs||items_need_view;
199
- callback(null,items_need_view);
200
- })
201
- },options);
202
- }catch(e){
203
- console.error("Error on view of",name,e);
204
- callback(null,items_need_view);
205
- }
206
- }else{
207
- callback(null,items_need_view);
208
- }
209
- },
210
- dynamicView:(callback)=>{
211
- if(self.dynamicView){
212
- self.dynamicView(user, items_need_view, function(error,rs) {
213
- if (error) {
214
- return callback(error);
215
- }
216
- items_need_view = rs||items_need_view;
217
- callback(null,items_need_view);
218
- },{listinfo_code,req:options?.req})
219
- }else{
220
- callback(null,items_need_view);
221
- }
222
- },
223
- viewRequired:(callback)=>{
224
- items = [...items_cached,...items_need_view].sort((a,b)=>{
225
- return a.stt_sorted-b.stt_sorted
226
- })
227
- if(self.viewRequired){
228
- try{
229
- self.viewRequired(user, items, function(error,rs) {
230
- if (error) {
231
- return callback(error);
232
- }
233
- items = rs||items;
234
- callback(null,items);
235
- },options);
236
- }catch(e){
237
- console.error("Error on viewRequired of",name,e);
238
- callback(null,items);
239
- }
240
- }else{
241
- callback(null,items);
242
- }
243
- }
244
- },(error)=>{
245
- if(error) return next(error);
246
- //xoá các refs
247
- /*items.forEach(r=>{
248
- delete r.__refs;
249
- })*/
250
- next(null,items);
251
- })
252
- })
253
- }
254
- module.exports =view;
1
+ const async=require("async"),_=require("lodash"),redisCache=require("../libs/redis-cache"),view=async($user$$,$self$$,$rows$$,$next$$,$options$$)=>{const $model$$=$self$$.model,$name$$=$self$$.name,$listinfo_code$$=$options$$?.req?.query?.["listinfo-code"]||$options$$?.req?.query?.listinfo_code||$options$$?.req?.headers?.["listinfo-code"]||$options$$?.req?.headers?.["Listinfo-Code"];let $fields_load$$="";$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&($fields_load$$=
2
+ $options$$.req.query.fields);let $schema_paths$$=$model$$.schema.paths;for(let $index$$=0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];$item$$._id&&typeof $item$$._id!=="string"&&($item$$._id=$item$$._id.toString());delete $item$$.__v;$item$$.stt_sorted=$index$$;delete $item$$.from_cached;_.has($schema_paths$$,"exfields")&&!$item$$.exfields&&($item$$.exfields={})}let $items$$=[];$options$$&&$options$$.req&&$options$$.req.query_cache&&!$options$$.req.query.refresh_required?await new Promise($resolve$$=>
3
+ {setImmediate(async()=>{let $cacheData$$=await redisCache.getCacheReport($options$$.req.user.email,($options$$.req.user.current_id_app||"system").toString(),$self$$.name,$options$$.req.query_cache,0,$options$$.req.query.page);if($cacheData$$)for(let $index$$=0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];let $cacheds$$=$cacheData$$.filter($r$$=>$r$$._id===$item$$._id.toString());if($cacheds$$.length>0)for(let $cached$$ of $cacheds$$)$cached$$.from_cached=!0,$items$$.push($cached$$);
4
+ else $items$$.push($item$$)}else $items$$=$rows$$;$resolve$$()})}):$items$$=$rows$$;async.parallel({_Participant_created:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,"participant",{where:{user_created:"email"},fields:{name_user_created:"name"}});await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.name_user_created&&!$item$$.from_cached).asyncJoinModel2(null,
5
+ "user",{where:{user_created:"email"},fields:{name_user_created:"name"}});$callback$$(null)})},_Participant_updated:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,global.getModel("participant"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.name_user_updated&&!$item$$.from_cached).asyncJoinModel2(null,
6
+ global.getModel("user"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});$callback$$(null)})},_approve:$callback$$=>{!$fields_load$$||$fields_load$$.indexOf("approve_data")>=0?async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{global.getModel("approve").find({id_ct:$item$$._id.toString()},{data:0,request_content:0}).sort({data_created:-1}).lean().then(async $rs$$=>{setImmediate(async()=>{$item$$.approve_data=$rs$$||[];$item$$.approved_latest=$item$$.approve_data.filter($a$$=>
7
+ $a$$.user_approved||$a$$.user_denied)[0];$item$$.approve_next=$item$$.approve_data.filter($a$$=>!$a$$.user_approved&&!$a$$.user_denied)[0];await $item$$.approve_data.filter($r$$=>$r$$.user_approved).asyncJoinModel2($item$$.id_app,global.getModel("participant"),{where:{user_approved:"email"},fields:{user_approved_name:"name",signature_image:"signature_image"}});await $item$$.approve_data.filter($r$$=>$r$$.user_denied).asyncJoinModel2($item$$.id_app,global.getModel("participant"),{where:{user_denied:"email"},
8
+ fields:{user_denied_name:"name",signature_image:"signature_image"}});$next$$(null)})}).catch($e$$=>{console.error($e$$)})})},()=>{$callback$$(null)}):$callback$$(null)},transfer_ct:$callback$$=>{if(_.has($schema_paths$$,"id_ct_chuyen")&&$user$$.current_app_info&&$user$$.current_app_info.options&&$user$$.current_app_info.options.id_app_thue)async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{$model$$.findOne({id_app:$user$$.current_app_info.options.id_app_thue,id_ct_chuyen:$item$$._id.toString()},
9
+ {_id:1}).lean().then(async $rs$$=>{$rs$$&&($item$$.id_ct_nhan=$rs$$._id);$next$$(null)}).catch($e$$=>{console.error($e$$)})})},()=>{$callback$$(null)});else return $callback$$()},posted:$callback$$=>{$options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)?async.mapLimit($items$$,10,($item$$,$next$$)=>{setImmediate(async()=>{let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;var $exists_exists$$={_id:1};if($book$$==
10
+ "sokho"&&$item$$.details?.length>0)if(await $item$$.details.asyncJoinModel2($item$$.id_app,"dmvt",{where:"ma_vt",fields:["tg_tk"]}),$exists_exists$$.ma_vt=1,$exists_exists$$=await global.getModel($book$$).find({id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$exists_exists$$.length>0){let $ds_vt_voucher$$=$item$$.details.filter($d$$=>$d$$.tg_tk).map($d$$=>$d$$.ma_vt).sort(($a$$,$b$$)=>$a$$-$b$$),$ds_vt_book$$=$exists_exists$$.map($d$$=>$d$$.ma_vt).sort(($a$$,$b$$)=>$a$$-$b$$);$ds_vt_voucher$$.find($v$$=>
11
+ $ds_vt_book$$.indexOf($v$$)<0)?$item$$[`${$book$$}_posted`]=!1:$item$$[`${$book$$}_posted`]=!0}else $item$$[`${$book$$}_posted`]=!1;else $exists_exists$$=await global.getModel($book$$).findOne({id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$item$$[`${$book$$}_posted`]=!!$exists_exists$$;$next$$()})},()=>{$callback$$(null)}):$callback$$()}},$e$$=>{if($e$$)return $next$$($e$$);if($options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)){let $book$$=
12
+ $options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;$items$$=$items$$.filter($r$$=>$options$$.req.query.show_posted_book?$r$$[`${$book$$}_posted`]:!$r$$[`${$book$$}_posted`])}let $items_need_view$$=$items$$.filter($i$$=>!$i$$.from_cached),$items_cached$$=$items$$.filter($i$$=>$i$$.from_cached);async.series({view:$callback$$=>{if($self$$.view)try{$self$$.view($user$$,$items_need_view$$,function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$items_need_view$$=
13
+ $rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)})},$options$$)}catch($e$$){console.error("Error on view of",$name$$,$e$$),$callback$$(null,$items_need_view$$)}else $callback$$(null,$items_need_view$$)},dynamicView:$callback$$=>{$self$$.dynamicView?$self$$.dynamicView($user$$,$items_need_view$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)},{listinfo_code:$listinfo_code$$,req:$options$$?.req}):
14
+ $callback$$(null,$items_need_view$$)},viewRequired:$callback$$=>{$items$$=[...$items_cached$$,...$items_need_view$$].sort(($a$$,$b$$)=>$a$$.stt_sorted-$b$$.stt_sorted);if($self$$.viewRequired)try{$self$$.viewRequired($user$$,$items$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items$$=$rs$$||$items$$;$callback$$(null,$items$$)},$options$$)}catch($e$$){console.error("Error on viewRequired of",$name$$,$e$$),$callback$$(null,$items$$)}else $callback$$(null,$items$$)}},$error$$=>
15
+ {if($error$$)return $next$$($error$$);$next$$(null,$items$$)})})};module.exports=view;