flexbiz-server 12.5.32 → 12.5.34

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.32",
5
+ "version": "12.5.34",
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,252 +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
- if(JSON.stringify(ds_vt_voucher) === JSON.stringify(ds_vt_book)){
144
- item[`${book}_posted`] = true;//Tất cả các vật tư đã post
145
- }else{
146
- item[`${book}_posted`] = false;
147
- }
148
-
149
- }else{
150
- item[`${book}_posted`] = false;
151
- }
152
- }else{
153
- let exists = await global.getModel(book).findOne({id_ct:item._id.toString()},fields).lean();
154
- item[`${book}_posted`] = (!!exists);
155
- }
156
-
157
- next();
158
- })
159
- },()=>{
160
- callback(null);
161
- })
162
- }else{
163
- callback()
164
- }
165
- }
166
- }, (e)=>{
167
- if(e) return next(e);
168
- //only show posted book or not post book
169
- if(options && options.req && (options.req.query.show_posted_book || options.req.query.show_not_post_book) ){
170
- let book = options.req.query.show_posted_book || options.req.query.show_not_post_book;
171
- items = items.filter(r=>{
172
- if(options.req.query.show_posted_book) return r[`${book}_posted`]
173
- return !r[`${book}_posted`]
174
- })
175
- }
176
- //handle view
177
- let items_need_view = items.filter(i=>!i.from_cached);
178
-
179
- //lưu các ref đã join để tránh join lại trên dynamicView
180
- /*if(self.dynamicView){
181
- items_need_view.forEach(r=>{
182
- r.__refs={}
183
- })
184
- }*/
185
- //
186
- let items_cached = items.filter(i=>i.from_cached);
187
- async.series({
188
- view:(callback)=>{
189
- if(self.view){
190
- try{
191
- self.view(user, items_need_view, function(error,rs) {
192
- setImmediate(()=>{
193
- if (error) {
194
- return callback(error);
195
- }
196
- items_need_view = rs||items_need_view;
197
- callback(null,items_need_view);
198
- })
199
- },options);
200
- }catch(e){
201
- console.error("Error on view of",name,e);
202
- callback(null,items_need_view);
203
- }
204
- }else{
205
- callback(null,items_need_view);
206
- }
207
- },
208
- dynamicView:(callback)=>{
209
- if(self.dynamicView){
210
- self.dynamicView(user, items_need_view, function(error,rs) {
211
- if (error) {
212
- return callback(error);
213
- }
214
- items_need_view = rs||items_need_view;
215
- callback(null,items_need_view);
216
- },{listinfo_code,req:options?.req})
217
- }else{
218
- callback(null,items_need_view);
219
- }
220
- },
221
- viewRequired:(callback)=>{
222
- items = [...items_cached,...items_need_view].sort((a,b)=>{
223
- return a.stt_sorted-b.stt_sorted
224
- })
225
- if(self.viewRequired){
226
- try{
227
- self.viewRequired(user, items, function(error,rs) {
228
- if (error) {
229
- return callback(error);
230
- }
231
- items = rs||items;
232
- callback(null,items);
233
- },options);
234
- }catch(e){
235
- console.error("Error on viewRequired of",name,e);
236
- callback(null,items);
237
- }
238
- }else{
239
- callback(null,items);
240
- }
241
- }
242
- },(error)=>{
243
- if(error) return next(error);
244
- //xoá các refs
245
- /*items.forEach(r=>{
246
- delete r.__refs;
247
- })*/
248
- next(null,items);
249
- })
250
- })
251
- }
252
- 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;
@@ -11,5 +11,6 @@ async.mapLimit($rs$$,100,function($r$$,$callback$$){let $details$$=$r$$.details|
11
11
  ...$r$$.details_tl.map($detail$$=>{delete $detail$$._id;$detail$$={...$r$$,...$detail$$};$detail$$.ma_nv||($detail$$.ma_nv=$r$$.ma_nv);$detail$$.ma_dt||($detail$$.ma_dt=$r$$.ma_dt);$detail$$.ma_bp||($detail$$.ma_bp=$r$$.ma_bp);$detail$$.tien_hang_nt=0-$detail$$.tien_hang_nt||0;$detail$$.tien_hang=0-($detail$$.tien_hang||0);$detail$$.tien_hang_ct_nt=0-$detail$$.tien_hang_ct_nt||0;$detail$$.tien_hang_ct=0-($detail$$.tien_hang_ct||0);$detail$$.tien_ck=0-($detail$$.tien_ck||0);$detail$$.tien_ck_nt=0-
12
12
  ($detail$$.tien_ck_nt||0);$detail$$.tien_thue=0-($detail$$.tien_thue||0);$detail$$.tien_thue_nt=0-($detail$$.tien_thue_nt||0);$detail$$.tien_xuat_tmp=0-($detail$$.tien_nhap_nt||0);$detail$$.tien_xuat_nt=0-($detail$$.tien_nhap_nt||0);$detail$$.sl_xuat=0;$detail$$.tien_hoa_hong=0-$detail$$.tien_hoa_hong;$detail$$.tien_hoa_hong_gt=0-$detail$$.tien_hoa_hong_gt;$detail$$.tien_hoa_hong_ctv=0-$detail$$.tien_hoa_hong_ctv;$detail$$.tien_hoa_hong_ql=0-$detail$$.tien_hoa_hong_ql;$detail$$.nxt=1;return $detail$$})],
13
13
  delete $r$$.details_tl);$callback$$(null,$details$$)},async function($error$$,$report$$){if($error$$)return $reject$$($error$$);$report$$=$report$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$ma_vts$$&&($report$$=$report$$.filter($r$$=>$ma_vts$$.indexOf($r$$.ma_vt)>=0));$condition$$.id_cs&&($report$$=$report$$.filter($r$$=>$r$$.id_cs===$condition$$.id_cs));$condition$$.id_cs_ck&&($report$$=$report$$.filter($r$$=>$r$$.id_cs_ck===$condition$$.id_cs_ck));await $report$$.asyncJoinModel2($condition$$.id_app,
14
- "dmqddvt",{where:{ma_dvt:"ma_dvt",ma_vt:"ma_vt"},fields:["tu","mau","ma_dvt_goc"]});$report$$.forEach(function($r$$,$he_so_qd_i$$){$r$$.stt=$he_so_qd_i$$+1;$r$$.id_ct=$r$$._id.toString();$r$$.bold=!1;$r$$.tt=$r$$.tien=($r$$.tien_hang_ct||0)-($r$$.tien_ck||0)+($r$$.tien_thue||0);$r$$.loi_nhuan_tmp=$r$$.tien_xuat_tmp?$r$$.tt-$r$$.tien_xuat_tmp-($r$$.tien_thue||0)-($r$$.tien_cp||0):0;$r$$.loi_nhuan=$r$$.tt-($r$$.tien_xuat||0)-($r$$.tien_thue||0)-($r$$.tien_cp||0);$r$$.t_hoa_hong=$r$$.tien_hoa_hong+$r$$.tien_hoa_hong_gt+
15
- $r$$.tien_hoa_hong_ctv+$r$$.tien_hoa_hong_ql;$r$$.mau?($he_so_qd_i$$=$r$$.tu/$r$$.mau,$r$$.sl_xuat_qd=$he_so_qd_i$$*($r$$.sl_xuat||0),$r$$.sl_nhap_qd=$he_so_qd_i$$*($r$$.sl_nhap||0)):($r$$.sl_xuat_qd=$r$$.sl_xuat||0,$r$$.sl_nhap_qd=$r$$.sl_nhap||0)});$resolve$$($report$$)})})})};
14
+ "dmqddvt",{where:{ma_dvt:"ma_dvt",ma_vt:"ma_vt"},fields:["tu","mau","ma_dvt_goc"]});$report$$.forEach(function($r$$,$he_so_qd_i$$){$r$$.stt=$he_so_qd_i$$+1;$r$$.id_ct=$r$$._id.toString();$r$$.bold=!1;$r$$.sysorder=5;$r$$.tt=$r$$.tien=($r$$.tien_hang_ct||0)-($r$$.tien_ck||0)+($r$$.tien_thue||0);$r$$.loi_nhuan_tmp=$r$$.tien_xuat_tmp?$r$$.tt-$r$$.tien_xuat_tmp-($r$$.tien_thue||0)-($r$$.tien_cp||0):0;$r$$.loi_nhuan=$r$$.tt-($r$$.tien_xuat||0)-($r$$.tien_thue||0)-($r$$.tien_cp||0);$r$$.t_hoa_hong=$r$$.tien_hoa_hong+
15
+ $r$$.tien_hoa_hong_gt+$r$$.tien_hoa_hong_ctv+$r$$.tien_hoa_hong_ql;$r$$.mau?($he_so_qd_i$$=$r$$.tu/$r$$.mau,$r$$.sl_xuat_qd=$he_so_qd_i$$*($r$$.sl_xuat||0),$r$$.sl_nhap_qd=$he_so_qd_i$$*($r$$.sl_nhap||0)):($r$$.sl_xuat_qd=$r$$.sl_xuat||0,$r$$.sl_nhap_qd=$r$$.sl_nhap||0);$r$$.sl_xuat_qd_bc=$r$$.sl_xuat_qd;$r$$.sl_nhap_qd_bc=$r$$.sl_nhap_qd;$r$$.ma_dvt_bc=$r$$.ma_dvt_goc||$r$$.ma_dvt});$condition$$.ma_dvt&&await $report$$.asyncJoinModel2($condition$$.id_app,"dmqddvt",{where:$item$$=>({ma_vt:$item$$.ma_vt,
16
+ ma_dvt:$condition$$.ma_dvt}),setFields:($item$$,$he_so_qd$$)=>{$he_so_qd$$&&$he_so_qd$$.tu?($item$$.ma_dvt_bc=$condition$$.ma_dvt,$he_so_qd$$=$he_so_qd$$.mau/$he_so_qd$$.tu,$item$$.sl_xuat_qd_bc=$he_so_qd$$*($item$$.sl_xuat_qd||0),$item$$.sl_nhap_qd_bc=$he_so_qd$$*($item$$.sl_nhap_qd||0)):($item$$.sl_xuat_qd_bc=$item$$.sl_xuat_qd,$item$$.sl_nhap_qd_bc=$item$$.sl_nhap_qd)}});$resolve$$($report$$)})})})};
@@ -1,8 +1,8 @@
1
- const sanphamSchema=new Schema({ma_vt:{type:String,uppercase:!0,default:"",maxlength:1024,trim:!0},ten_vt:String,ma_nvt:{type:String,default:"",maxlength:1024,trim:!0},ma_nvt2:{type:String,default:"",maxlength:1024,trim:!0},ma_nvt3:{type:String,default:"",maxlength:1024,trim:!0},ma_nvt4:{type:String,default:"",maxlength:1024,trim:!0},ma_tt1:{type:String,trim:!0},ma_tt2:{type:String,trim:!0},ma_tt3:{type:String,trim:!0},sl_tu:{type:Number,default:0},sl_den:{type:Number,default:0},t_sl_ntt_tu:{type:Number,
2
- default:0},t_sl_ntt_den:{type:Number,default:0},t_sl_tu:{type:Number,default:0},t_sl_den:{type:Number,default:0},gia_nhap:{type:Number,default:0},ty_suat_ln:{type:Number,default:0},loi_nhuan:{type:Number,default:0},gia_ban_le:{type:Number,default:0},gia_ban_buon:{type:Number,default:0},gia_ban_chua_thue:{type:Boolean,default:!1},exfields_detail:Schema.Types.Mixed,line:{type:Number,default:0}}),banggiabanSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},stt_uu_tien:Number,ma_ct:{type:String,
3
- default:"BGB"},so_ct:{type:String,default:"BGB"},ngay_ct:{type:Date,default:Date.now},trang_thai:{type:String,default:"5"},ma_nt:String,mieu_ta:{type:String,default:"",maxlength:1024},ma_kh:{type:String,default:"",maxlength:32,trim:!0},ten_kh:String,nh_kh:{type:String,maxlength:1024,trim:!0},ten_nh_kh:String,nh_kh2:{type:String,maxlength:1024,trim:!0},ten_nh_kh2:String,nh_kh3:{type:String,maxlength:1024,trim:!0},ten_nh_kh3:String,nh_kh4:{type:String,maxlength:1024,trim:!0},ten_nh_kh4:String,nh_kh5:{type:String,
4
- maxlength:1024,trim:!0},ten_nh_kh5:String,ma_kho:{type:String,default:"",maxlength:32,trim:!0},ten_kho:String,ma_ban:{type:String,default:"",maxlength:32,trim:!0},ten_ban:String,hieu_luc_tu:{type:Date,required:!0},hieu_luc_den:{type:Date,required:!0},ap_dung_lan_mua_thu:{type:Number},ap_dung_lan_mua_tu_thu:{type:Number},ap_dung_lan_mua_den_thu:{type:Number},online:{type:Boolean},offline:{type:Boolean},details:[sanphamSchema],exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,
5
- default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}},{toJSON:{virtuals:!0}});
1
+ const sanphamSchema=new Schema({ma_vt:{type:String,uppercase:!0,default:"",maxlength:1024,trim:!0},ten_vt:String,ma_nvt:{type:String,default:"",maxlength:1024,trim:!0},ma_nvt2:{type:String,default:"",maxlength:1024,trim:!0},ma_nvt3:{type:String,default:"",maxlength:1024,trim:!0},ma_nvt4:{type:String,default:"",maxlength:1024,trim:!0},nh_kh:{type:String,default:"",maxlength:1024,trim:!0},nh_kh2:{type:String,default:"",maxlength:1024,trim:!0},nh_kh3:{type:String,default:"",maxlength:1024,trim:!0},nh_kh4:{type:String,
2
+ default:"",maxlength:1024,trim:!0},ma_tt1:{type:String,trim:!0},ma_tt2:{type:String,trim:!0},ma_tt3:{type:String,trim:!0},sl_tu:{type:Number,default:0},sl_den:{type:Number,default:0},t_sl_ntt_tu:{type:Number,default:0},t_sl_ntt_den:{type:Number,default:0},t_sl_tu:{type:Number,default:0},t_sl_den:{type:Number,default:0},gia_nhap:{type:Number,default:0},ty_suat_ln:{type:Number,default:0},loi_nhuan:{type:Number,default:0},gia_ban_le:{type:Number,default:0},gia_ban_buon:{type:Number,default:0},gia_ban_chua_thue:{type:Boolean,
3
+ default:!1},exfields_detail:Schema.Types.Mixed,line:{type:Number,default:0}}),banggiabanSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},stt_uu_tien:Number,ma_ct:{type:String,default:"BGB"},so_ct:{type:String,default:"BGB"},ngay_ct:{type:Date,default:Date.now},trang_thai:{type:String,default:"5"},ma_nt:String,mieu_ta:{type:String,default:"",maxlength:1024},ma_kh:{type:String,default:"",maxlength:32,trim:!0},ten_kh:String,nh_kh:{type:String,maxlength:1024,trim:!0},ten_nh_kh:String,
4
+ nh_kh2:{type:String,maxlength:1024,trim:!0},ten_nh_kh2:String,nh_kh3:{type:String,maxlength:1024,trim:!0},ten_nh_kh3:String,nh_kh4:{type:String,maxlength:1024,trim:!0},ten_nh_kh4:String,nh_kh5:{type:String,maxlength:1024,trim:!0},ten_nh_kh5:String,ma_kho:{type:String,default:"",maxlength:32,trim:!0},ten_kho:String,ma_ban:{type:String,default:"",maxlength:32,trim:!0},ten_ban:String,hieu_luc_tu:{type:Date,required:!0},hieu_luc_den:{type:Date,required:!0},ap_dung_lan_mua_thu:{type:Number},ap_dung_lan_mua_tu_thu:{type:Number},
5
+ ap_dung_lan_mua_den_thu:{type:Number},online:{type:Boolean},offline:{type:Boolean},details:[sanphamSchema],exfields:Schema.Types.Mixed,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:""}},{toJSON:{virtuals:!0}});
6
6
  (global.configs||{}).createIndexes&&(banggiabanSchema.index({id_app:1,ma_kho:1,ma_kh:1,hieu_luc_tu:-1,hieu_luc_den:-1}),banggiabanSchema.index({ma_ct:1}),banggiabanSchema.index({ngay_ct:1}),banggiabanSchema.index({so_ct:1}),banggiabanSchema.index({trang_thai:1}),banggiabanSchema.index({"details.ma_vt":1}),banggiabanSchema.index({"details.ma_tt1":1}),banggiabanSchema.index({"details.ma_tt2":1}),banggiabanSchema.index({"details.ma_tt3":1}),banggiabanSchema.index({"details.ma_nvt":1}),banggiabanSchema.index({"details.sl_tu":1}),
7
7
  banggiabanSchema.index({"details.sl_den":1}),banggiabanSchema.index({nh_kh:1}),banggiabanSchema.index({nh_kh2:1}),banggiabanSchema.index({nh_kh3:1}),banggiabanSchema.index({nh_kh4:1}),banggiabanSchema.index({nh_kh5:1}),banggiabanSchema.index({ma_kho:1}),banggiabanSchema.index({ma_ban:1}),banggiabanSchema.index({ma_kh:1}),banggiabanSchema.index({ap_dung_lan_mua_thu:1}),banggiabanSchema.index({ap_dung_lan_mua_tu_thu:1}),banggiabanSchema.index({ap_dung_lan_mua_den_thu:1}),banggiabanSchema.index({t_sl_tu:1}),
8
8
  banggiabanSchema.index({t_sl_den:1}),banggiabanSchema.index({date_updated:-1}),banggiabanSchema.index({date_created:-1}),banggiabanSchema.index({user_created:1}),banggiabanSchema.index({status:1}),banggiabanSchema.index({online:1}),banggiabanSchema.index({offline:1}),banggiabanSchema.index({mieu_ta:"text",ma_kh:"text",ten_kh:"text",ma_kho:"text",ten_kho:"text"},{name:"banggiaban_index_text"}));const model=mongoose.models.banggiaban||mongoose.model("banggiaban",banggiabanSchema);module.exports=model;
@@ -2,8 +2,8 @@ const validVt=require("../libs/validator-vt"),validator=require("../libs/validat
2
2
  default:0},tt_nt:{type:Number,default:0},promotion:Schema.Types.Mixed,dien_giai:{type:String,maxlength:1024},ma_bp:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_phi:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_hd:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},
3
3
  ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},picture:String,exfields_detail:Schema.Types.Mixed,line:{type:Number,default:0}});detailSchema.validate={ma_vt:validVt.existsVt,ma_dvt:validator.existsDvt};
4
4
  const bg1Schema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_dvcs:{type:String,maxlength:1024},ma_ct:{type:String,default:"BG1",required:!0,uppercase:!0,maxlength:32,trim:!0},ma_gd:{type:String,default:"0",maxlength:32,trim:!0},ong_ba:{type:String,maxlength:32},so_ct:{type:String,uppercase:!0,trim:!0,maxlength:32},ngay_ct:{type:Date,default:Date.now,required:!0},ma_nt:{type:String,required:"ma_nt is required",default:"VND",trim:!0,uppercase:!0,maxlength:32},ty_gia:{type:Number,required:!0,
5
- min:0,default:1},trang_thai:{type:String,default:"1",maxlength:32,trim:!0},ma_kh:{type:String,uppercase:!0,maxlength:32,trim:!0},ten_kh:String,ma_kho:{type:String,uppercase:!0,maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,maxlength:32,trim:!0},ten_nv:String,id_bao_gia_mua:{type:String,maxlength:1024},ma_thue:{type:String,uppercase:!0,maxlength:32,trim:!0},thue_suat:{type:Number,default:0},t_thue:{type:Number,default:0},t_thue_nt:{type:Number,default:0},ty_le_ck_hd:{type:Number,default:0},
6
- tien_ck_hd:{type:Number,default:0},dien_giai:{type:String,maxlength:1024},exfields:Schema.Types.Mixed,ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},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:""},visible_to:{type:Number,default:0},visible_to_users:[String],update_right:[String],delete_right:[String],details:{type:[detailSchema]},promotion:Schema.Types.Mixed});
7
- bg1Schema.validate={ma_nt:validator.existsNt,ngay_ct:validator.unlockBook,ma_kh:validator.existsKh};
5
+ min:0,default:1},trang_thai:{type:String,default:"1",maxlength:32,trim:!0},ma_kh:{type:String,uppercase:!0,maxlength:32,trim:!0},ten_kh:String,dien_thoai:String,dia_chi:String,email:String,ma_kho:{type:String,uppercase:!0,maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,maxlength:32,trim:!0},ten_nv:String,id_bao_gia_mua:{type:String,maxlength:1024},ma_thue:{type:String,uppercase:!0,maxlength:32,trim:!0},thue_suat:{type:Number,default:0},t_thue:{type:Number,default:0},t_thue_nt:{type:Number,default:0},
6
+ ty_le_ck_hd:{type:Number,default:0},tien_ck_hd:{type:Number,default:0},dien_giai:{type:String,maxlength:1024},exfields:Schema.Types.Mixed,ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},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:""},visible_to:{type:Number,default:0},visible_to_users:[String],update_right:[String],delete_right:[String],
7
+ details:{type:[detailSchema]},promotion:Schema.Types.Mixed});bg1Schema.validate={ma_nt:validator.existsNt,ngay_ct:validator.unlockBook,ma_kh:validator.existsKh};
8
8
  (global.configs||{}).createIndexes&&(bg1Schema.index({id_app:1,ma_dvcs:1,so_ct:-1,ngay_ct:-1}),bg1Schema.index({dien_giai:"text",so_ct:"text",ma_kh:"text",ten_kh:"text",ma_nv:"text",ten_nv:"text"},{name:"bg1_index"}),bg1Schema.index({ma_ct:1}),bg1Schema.index({ma_kh:1}),bg1Schema.index({user_created:1,date_created:-1}),bg1Schema.index({date_updated:-1}),bg1Schema.index({trang_thai:1}),bg1Schema.index({status:1}),bg1Schema.index({user_created:1,visible_to:1,visible_to_users:1}));
9
9
  module.exports=mongoose.models.bg1||mongoose.model("bg1",bg1Schema);
@@ -3,8 +3,8 @@ default:0},tien_ck_nt:{type:Number,default:0},gia_ban_muc_tieu:{type:Number,defa
3
3
  default:0},tien_thue_nk_nt:{type:Number,default:0},tt:{type:Number,default:0},tt_nt:{type:Number,default:0},dien_giai:{type:String,maxlength:1024},ma_kh:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_bp:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_phi:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_hd:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,
4
4
  default:"",maxlength:32,trim:!0},ma_vt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},picture:String,duoc_chon:Boolean,exfields_detail:Schema.Types.Mixed,line:{type:Number,default:0}});detailSchema.validate={ma_kh:validator.existsKh,ma_vt:validVt.existsVt,ma_dvt:validator.existsDvt};
5
5
  const bg2Schema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_dvcs:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,default:"BG2",required:!0,uppercase:!0,maxlength:32,trim:!0},ma_gd:{type:String,default:"0",maxlength:32,trim:!0},so_ct:{type:String,required:!0,uppercase:!0,trim:!0,maxlength:32},ngay_ct:{type:Date,default:Date.now,required:!0},ma_nt:{type:String,required:"ma_nt is required",default:"VND",trim:!0,uppercase:!0,maxlength:32},ty_gia:{type:Number,required:!0,
6
- min:0,default:1},ma_kh:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_kh:String,ma_kho:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_nv:String,ma_bp:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_thue:{type:String,uppercase:!0,maxlength:32,trim:!0},thue_suat:{type:Number,default:0},t_thue:{type:Number,default:0},t_thue_nt:{type:Number,
7
- default:0},ong_ba:{type:String,maxlength:1024},dien_giai:{type:String,maxlength:1024},id_dnm:{type:String,maxlength:1024,trim:!0},id_po1:{type:String,maxlength:1024,trim:!0},exfields:Schema.Types.Mixed,trang_thai:{type:String,maxlength:32},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:""},visible_to:{type:Number,default:0},visible_to_users:[String],update_right:[String],
8
- delete_right:[String],details:{type:[detailSchema]}});bg2Schema.validate={ma_dvcs:validator.existsDvcs,ma_nt:validator.existsNt,ngay_ct:validator.unlockBook,ma_kh:validator.existsKh};
6
+ min:0,default:1},ma_kh:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_kh:String,dien_thoai:String,dia_chi:String,email:String,ma_kho:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_nv:String,ma_bp:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_thue:{type:String,uppercase:!0,maxlength:32,trim:!0},thue_suat:{type:Number,default:0},
7
+ t_thue:{type:Number,default:0},t_thue_nt:{type:Number,default:0},ong_ba:{type:String,maxlength:1024},dien_giai:{type:String,maxlength:1024},id_dnm:{type:String,maxlength:1024,trim:!0},id_po1:{type:String,maxlength:1024,trim:!0},exfields:Schema.Types.Mixed,trang_thai:{type:String,maxlength:32},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:""},visible_to:{type:Number,
8
+ default:0},visible_to_users:[String],update_right:[String],delete_right:[String],details:{type:[detailSchema]}});bg2Schema.validate={ma_dvcs:validator.existsDvcs,ma_nt:validator.existsNt,ngay_ct:validator.unlockBook,ma_kh:validator.existsKh};
9
9
  (global.configs||{}).createIndexes&&(bg2Schema.index({id_app:1,ma_dvcs:1,so_ct:-1,ngay_ct:-1}),bg2Schema.index({dien_giai:"text",so_ct:"text",ma_kh:"text",ten_kh:"text",ma_nv:"text",ten_nv:"text"},{name:"bg2_index"}),bg2Schema.index({ma_ct:1}),bg2Schema.index({ma_kh:1}),bg2Schema.index({id_dnm:1}),bg2Schema.index({id_po1:1}),bg2Schema.index({user_created:1,date_created:-1}),bg2Schema.index({date_updated:-1}),bg2Schema.index({trang_thai:1}),bg2Schema.index({status:1}),bg2Schema.index({user_created:1,
10
10
  visible_to:1,visible_to_users:1}));module.exports=mongoose.models.bg2||mongoose.model("bg2",bg2Schema);
@@ -1,2 +1,2 @@
1
- const ckgtluongSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_giam_tru:{type:String,required:!0},ten_giam_tru:{type:String,required:!0,maxlength:1024},ty_le_cty:{type:Number,default:0},ty_le_nv:{type:Number,default:0},tk:String,kieu_trich:{type:String,default:"#"},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:""}});
2
- (global.configs||{}).createIndexes&&(ckgtluongSchema.index({id_app:1,ten_giam_tru:1}),ckgtluongSchema.index({ma_giam_tru:1}),ckgtluongSchema.index({ten_giam_tru:"text"}),ckgtluongSchema.index({status:1}),ckgtluongSchema.index({user_created:1,visible_to:1,visible_to_users:1}));const model=mongoose.models.ckgtluong||mongoose.model("ckgtluong",ckgtluongSchema);module.exports=model;
1
+ const ckgtluongSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_giam_tru:{type:String,required:!0},ten_giam_tru:{type:String,required:!0,maxlength:1024},ty_le_cty:{type:Number,default:0},ty_le_nv:{type:Number,default:0},ma_nv:[String],ma_bp:[String],nv:{type:Number,default:0},cty:{type:Number,default:0},tk:String,kieu_trich:{type:String,default:"#"},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,
2
+ default:""},user_updated:{type:String,default:""}});(global.configs||{}).createIndexes&&(ckgtluongSchema.index({id_app:1,ten_giam_tru:1}),ckgtluongSchema.index({ma_giam_tru:1}),ckgtluongSchema.index({ten_giam_tru:"text"}),ckgtluongSchema.index({status:1}),ckgtluongSchema.index({user_created:1,visible_to:1,visible_to_users:1}));const model=mongoose.models.ckgtluong||mongoose.model("ckgtluong",ckgtluongSchema);module.exports=model;