flexbiz-server 12.6.9 → 12.6.10

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.6.9",
5
+ "version": "12.6.10",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -88,7 +88,7 @@
88
88
  "underscore": "^1.13.1",
89
89
  "unidecode": "^0.1.8",
90
90
  "validate.js": "^0.13.1",
91
- "validator": "^13.6.0",
91
+ "validator": "^13.15.35",
92
92
  "vhost": "^3.0.2",
93
93
  "vietnam-qr-pay": "^1.4.0",
94
94
  "vm2": "^3.10.0",
@@ -67,8 +67,8 @@ getData,round:utils.round};try{$app$$[$p$$.name]=await evalute(`return (async ()
67
67
  ${$condition$$}
68
68
  })`,$query$jscomp$1_sandbox$$)()}catch($e$$){$app$$[$p$$.name]=$e$$.message}}else $app$$[$p$$.name]=$p$$.value})().then(()=>{$callback$$()}).catch(()=>{$callback$$()})})},function($e$jscomp$34_v$$){if($e$jscomp$34_v$$)return $callback$$($e$jscomp$34_v$$);_.extend($app$$,$obj$$);if($ctrl$$.getData4Export)$ctrl$$.getData4Export($app$$,function($error$jscomp$16_v$$){if($error$jscomp$16_v$$)return $callback$$($error$jscomp$16_v$$);for(let $key$$ in $app$$)$error$jscomp$16_v$$=$app$$[$key$$],
69
69
  _.isDate($error$jscomp$16_v$$)&&($app$$[$key$$+"_string"]=moment($error$jscomp$16_v$$).format("DD/MM/YYYY"));$callback$$()});else{for(let $key$$ in $app$$)$e$jscomp$34_v$$=$app$$[$key$$],_.isDate($e$jscomp$34_v$$)&&($app$$[$key$$+"_string"]=moment($e$jscomp$34_v$$).format("DD/MM/YYYY"));$callback$$()}})},cleanDataByMongooseSchema=($rawData$$,$mongooseSchema_paths$$)=>{if(!$rawData$$||typeof $rawData$$!=="object")return{};const $cleanedData$$={};$mongooseSchema_paths$$=$mongooseSchema_paths$$.paths;
70
- for(const $key$$ in $rawData$$){if(!$mongooseSchema_paths$$[$key$$])continue;var $parsedDate_val$$=$rawData$$[$key$$];if($parsedDate_val$$===void 0||$parsedDate_val$$===null)continue;const $schemaType$$=$mongooseSchema_paths$$[$key$$];var $instanceType_numVal$$=$schemaType$$.instance;if(typeof $parsedDate_val$$!=="object"||Array.isArray($parsedDate_val$$)||$parsedDate_val$$ instanceof Date||!Object.keys($parsedDate_val$$).some($k$$=>$k$$.startsWith("$")))switch($instanceType_numVal$$){case "String":typeof $parsedDate_val$$!==
71
- "string"&&($parsedDate_val$$=String($parsedDate_val$$));$parsedDate_val$$=$parsedDate_val$$.trim();$cleanedData$$[$key$$]=$parsedDate_val$$;break;case "Number":typeof $parsedDate_val$$==="string"&&($parsedDate_val$$=$parsedDate_val$$.replace(/,/g,""));$instanceType_numVal$$=Number($parsedDate_val$$);isNaN($instanceType_numVal$$)||$parsedDate_val$$===""||($cleanedData$$[$key$$]=$instanceType_numVal$$);break;case "Boolean":$cleanedData$$[$key$$]=$parsedDate_val$$===!0||$parsedDate_val$$==="true"||$parsedDate_val$$===
72
- 1||$parsedDate_val$$==="1";break;case "Date":$parsedDate_val$$!==""&&($parsedDate_val$$=new Date($parsedDate_val$$),isNaN($parsedDate_val$$.getTime())||($cleanedData$$[$key$$]=$parsedDate_val$$));break;case "ObjectID":case "ObjectId":typeof $parsedDate_val$$==="string"&&$parsedDate_val$$.trim()!==""&&($cleanedData$$[$key$$]=$parsedDate_val$$.trim());break;case "Array":Array.isArray($parsedDate_val$$)||($parsedDate_val$$=$parsedDate_val$$!==""?[$parsedDate_val$$]:[]);$cleanedData$$[$key$$]=$schemaType$$.schema?
73
- $parsedDate_val$$.filter($item$$=>typeof $item$$!=="object"||$item$$===null||Array.isArray($item$$)||Object.keys($item$$).length===0?!1:!0).map($item$$=>cleanDataByMongooseSchema($item$$,$schemaType$$.schema)):$parsedDate_val$$.filter($v$$=>$v$$!==""&&$v$$!==null);break;default:$cleanedData$$[$key$$]=$parsedDate_val$$}}return $cleanedData$$};
74
- module.exports={createIdRef,postData,asyncPostData,pushNotification,ERRORS,isExists,getData,asyncBodyToJson,bodyToJson,deleteEmptyArray,fields_sync_master_detail,runWebhooks,deletePost,getNextSequence,asyncGetNextSequence,checkReference,getParameters,prepareParameters,cleanDataByMongooseSchema};
70
+ for(const $key$$ in $rawData$$){if(!$mongooseSchema_paths$$[$key$$])continue;var $parsedDate_val$$=$rawData$$[$key$$];const $schemaType$$=$mongooseSchema_paths$$[$key$$];var $instanceType_numVal$$=$schemaType$$.instance;if($parsedDate_val$$!==void 0){if($parsedDate_val$$===null)if($instanceType_numVal$$==="String")$parsedDate_val$$="";else{Logger.warn("[controllerUtiles][cleanDataByMongooseSchema]",{instanceType:$instanceType_numVal$$,val:$parsedDate_val$$});continue}if(typeof $parsedDate_val$$!==
71
+ "object"||Array.isArray($parsedDate_val$$)||$parsedDate_val$$ instanceof Date||!Object.keys($parsedDate_val$$).some($k$$=>$k$$.startsWith("$")))switch($instanceType_numVal$$){case "String":typeof $parsedDate_val$$!=="string"&&($parsedDate_val$$=String($parsedDate_val$$));$parsedDate_val$$=$parsedDate_val$$.trim();$cleanedData$$[$key$$]=$parsedDate_val$$;break;case "Number":typeof $parsedDate_val$$==="string"&&($parsedDate_val$$=$parsedDate_val$$.replace(/,/g,""));$instanceType_numVal$$=Number($parsedDate_val$$);
72
+ isNaN($instanceType_numVal$$)||$parsedDate_val$$===""||($cleanedData$$[$key$$]=$instanceType_numVal$$);break;case "Boolean":$cleanedData$$[$key$$]=$parsedDate_val$$===!0||$parsedDate_val$$==="true"||$parsedDate_val$$===1||$parsedDate_val$$==="1";break;case "Date":$parsedDate_val$$!==""&&($parsedDate_val$$=new Date($parsedDate_val$$),isNaN($parsedDate_val$$.getTime())||($cleanedData$$[$key$$]=$parsedDate_val$$));break;case "ObjectID":case "ObjectId":typeof $parsedDate_val$$==="string"&&$parsedDate_val$$.trim()!==
73
+ ""&&($cleanedData$$[$key$$]=$parsedDate_val$$.trim());break;case "Array":Array.isArray($parsedDate_val$$)||($parsedDate_val$$=$parsedDate_val$$!==""?[$parsedDate_val$$]:[]);$cleanedData$$[$key$$]=$schemaType$$.schema?$parsedDate_val$$.filter($item$$=>typeof $item$$!=="object"||$item$$===null||Array.isArray($item$$)||Object.keys($item$$).length===0?!1:!0).map($item$$=>cleanDataByMongooseSchema($item$$,$schemaType$$.schema)):$parsedDate_val$$.filter($v$$=>$v$$!==""&&$v$$!==null);break;default:$cleanedData$$[$key$$]=
74
+ $parsedDate_val$$}}}return $cleanedData$$};module.exports={createIdRef,postData,asyncPostData,pushNotification,ERRORS,isExists,getData,asyncBodyToJson,bodyToJson,deleteEmptyArray,fields_sync_master_detail,runWebhooks,deletePost,getNextSequence,asyncGetNextSequence,checkReference,getParameters,prepareParameters,cleanDataByMongooseSchema};
@@ -6,31 +6,31 @@ id_func:$listinfo_code$$.toLowerCase()}).lean()||{}).option;$voucher_options$$||
6
6
  ($v_data$$.ma_ct=$ctrl$$.name.toUpperCase());delete $v_data$$.session_created;delete $v_data$$.session_updated;$req$$&&$schema_paths$$.session_created&&($v_data$$.session_created=($req$$.cookies||{}).uid);if($ctrl$$.options.requireRecaptchaToken&&configs.GOOGLE_RECAPTCHA_SECRET_KEY){if(!$v_data$$["g-recaptcha-response"])return $callback$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u g-recaptcha-response");try{await permission.verifyReCaptcha($v_data$$["g-recaptcha-response"])}catch($e$$){return $callback$$($e$$.message||
7
7
  $e$$.error||$e$$)}}let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($v_data$$,{action:$action$$,user:$user$$}));if($requireOtp$$&&$action$$!="import")try{await permission.verifyOTP($user$$.email,$v_data$$["otp-id"],$v_data$$["otp-code"])}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP})}if($ctrl$$.dynamicCreating)try{$v_data$$=await new Promise(($resolve$$,$reject$$)=>{try{$ctrl$$.dynamicCreating($user$$,
8
8
  $v_data$$,function($error$$,$v_data$$){if($error$$)return $reject$$($error$$);$resolve$$($v_data$$)},{listinfo_code:$listinfo_code$$,req:$req$$})}catch($e$$){return $reject$$($e$$)}})}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}$v_data$$=cleanDataByMongooseSchema($v_data$$,$model$$.schema);const $obj$$=new $model$$;$schema_paths$$.exfields&&($obj$$.exfields=$v_data$$.exfields||{});for(let $f$$ in $v_data$$)$schema_paths$$[$f$$]&&($obj$$.set($f$$,$v_data$$[$f$$]),$f$$!=="exfields"||
9
- $obj$$.exfields||($obj$$.exfields={}));$schema_paths$$.id_app&&($obj$$.id_app=$user$$.current_id_app);const $checkVoucherNumber$$=$callback$$=>{$model$$.schema.paths.ngay_ct&&$obj$$.ngay_ct?setImmediate(()=>{if($voucher_options$$&&($voucher_options$$?.trang_thai_create_voucher_numbers?.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$voucher_options$$.check_so_ct&&$voucher_options$$.check_so_ct!=="0"){let $query_check$$={id_app:$obj$$.id_app,so_ct:$obj$$.so_ct,
10
- listinfo_code:$listinfo_code$$},$tu_ngay$$,$den_ngay$$;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("day").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("day").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "2":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("month").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("month").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "3":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("quarter").toDate();
11
- $den_ngay$$=moment($obj$$.ngay_ct).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "8":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("year").toDate(),$den_ngay$$=moment($obj$$.ngay_ct).endOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().then($rs$$=>{setImmediate(()=>{if($rs$$){let $msgError$$="S\u1ed1 ch\u1ee9ng t\u1eeb "+$obj$$.so_ct+" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c";
12
- if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else $callback$$()})}).catch($e$$=>{Logger.error($e$$)})}else $callback$$()}):$callback$$()},$File$$=global.getModel("file"),$Support$$=global.getModel("support");async.waterfall([function($callback$$){setImmediate(async function(){let $notNeedRight$$=await $ctrl$$.notNeedRight($user$$,{action:$action$$,obj:$obj$$});
9
+ $obj$$.exfields||($obj$$.exfields={}));$schema_paths$$.id_app&&($obj$$.id_app=$user$$.current_id_app);const $checkVoucherNumber$$=$callback$$=>{if($model$$.schema.paths.ngay_ct&&$obj$$.ngay_ct)if($voucher_options$$&&($voucher_options$$?.trang_thai_create_voucher_numbers?.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$voucher_options$$.check_so_ct&&$voucher_options$$.check_so_ct!=="0"){let $query_check$$={id_app:$obj$$.id_app,so_ct:$obj$$.so_ct,listinfo_code:$listinfo_code$$},
10
+ $tu_ngay$$,$den_ngay$$;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("day").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("day").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "2":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("month").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("month").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "3":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("quarter").toDate();
11
+ $den_ngay$$=moment($obj$$.ngay_ct).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "8":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("year").toDate(),$den_ngay$$=moment($obj$$.ngay_ct).endOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().then($rs$$=>{if($rs$$){let $msgError$$="S\u1ed1 ch\u1ee9ng t\u1eeb "+$obj$$.so_ct+" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c";
12
+ if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else $callback$$()}).catch($e$$=>{Logger.error($e$$)})}else $callback$$();else $callback$$()},$File$$=global.getModel("file"),$Support$$=global.getModel("support");async.waterfall([function($callback$$){setImmediate(async function(){let $notNeedRight$$=await $ctrl$$.notNeedRight($user$$,{action:$action$$,obj:$obj$$});
13
13
  permission.hasRight($obj$$.id_app,$user$$.email,$ctrl$$.module,$action$$,function($error$$,$hr$$,$c_app$$){setImmediate(()=>{if($error$$||!$hr$$)return $error$$=$error$$||"",$callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE});$ctrl$$.checkData($c_app$$,$obj$$,$e$$=>{if($e$$)return $callback$$($e$$);$ctrl$$.creating?$ctrl$$.creating($user$$,$obj$$,function($error$$,$_obj$$){if($error$$)return $callback$$($error$$);for(let $f$$ of Object.keys($schema_paths$$))$error$$=
14
14
  $_obj$$.get?$_obj$$.get($f$$):$_obj$$[$f$$],$obj$$.set($f$$,$error$$);$callback$$(null,$obj$$)},{data:$data$$,action:$action$$}):$callback$$(null,$obj$$)})})},{data:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})})},($obj$$,$callback$$)=>{setImmediate(()=>{let $ma_ct$$=$listinfo_code$$||$ctrl$$.name;const $condition_qct$$={status:!0,id_app:$obj$$.id_app,cac_ma_ct:$ma_ct$$.toLowerCase()};let $_options_qct$$;$_options_qct$$=$obj$$.toObject?convertObjectIdsToStrings($obj$$.toObject()):
15
15
  {...$obj$$};let $keys_options$$=Object.keys($_options_qct$$);global.getModel("dmqct").find($condition_qct$$).lean().then($rs$$=>{setImmediate(()=>{let $qcts$$=($rs$$||[]).filter($qct$$=>$qct$$.field!=="so_ct"&&!$obj$$[$qct$$.field]&&$model$$.schema.paths[$qct$$.field]);$qcts$$=$qcts$$.filter($qct$$=>{if($qct$$.dieu_kien&&$keys_options$$.length>0)try{let $str_func$$=$qct$$.dieu_kien;$str_func$$.indexOf("return ")!==0&&($str_func$$=`return ${$str_func$$}`);return $str_func$$.indexOf("async ")>0?!1:
16
16
  evalute($str_func$$,{...$_options_qct$$,master:{...$_options_qct$$},moment,numeral})}catch($e$$){return Logger.error("Error find quyen chung tu",$e$$.message,$qct$$.dieu_kien),!1}else return!0});async.mapSeries($qcts$$,($qct$$,$cb$$)=>{let $field$$=$qct$$.field,$_options$$={...$_options_qct$$};$_options$$.id_qct=$qct$$._id.toString();let $count$$=0;async.whilst(function($cb$$){$cb$$(null,$count$$<10)},function($callback$$){getNextSequence($obj$$.id_app,$ma_ct$$,$field$$,function($e$$,$rs$$){setImmediate(async()=>
17
17
  {if($e$$)return $callback$$($e$$);$obj$$[$field$$]=$rs$$[$field$$];$qct$$.check_duplicate?await $model$$.findOne({id_app:$obj$$.id_app,[$field$$]:$obj$$[$field$$]},{[$field$$]:1}).lean()?$count$$>=9?$callback$$(`Kh\u00f4ng th\u1ec3 t\u1ef1 \u0111\u1ed9ng t\u1ea1o gi\u00e1 tr\u1ecb cho field ${$field$$}. Gi\u00e1 tr\u1ecb "${$obj$$[$field$$]}" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ki\u1ec3m tra l\u1ea1i th\u00f4ng s\u1ed1 quy\u1ec3n ch\u1ee9ng t\u1eeb sao cho gi\u00e1 tr\u1ecb s\u1ebd t\u1ea1o ra kh\u00f4ng b\u1ecb tr\u00f9ng v\u1edbi gi\u00e1 tr\u1ecb \u0111\u00e3 c\u00f3`):
18
- ($count$$++,$callback$$()):($count$$=99999,$callback$$()):($count$$=99999,$callback$$())})},$_options$$)},function($err$$){$cb$$($err$$)})},$e$$=>{$callback$$($e$$)})})}).catch($e$$=>{Logger.error($e$$)})})},$callback$$=>{setImmediate(function(){if((!$voucher_options$$?.trang_thai_create_voucher_numbers||$voucher_options$$?.trang_thai_create_voucher_numbers.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$model$$.schema.paths.so_ct)if($obj$$.so_ct&&
19
- $obj$$.so_ct.toUpperCase()!==($listinfo_code$$||$ctrl$$.name).toUpperCase()&&$obj$$.so_ct.toUpperCase()!==$ctrl$$.name.toUpperCase())$checkVoucherNumber$$($error$$=>{$callback$$($error$$)});else{let $count$$=0;async.whilst(function($cb$$){$cb$$(null,$count$$<100)},function($callback$$){getNextSequence($obj$$.id_app,$listinfo_code$$||$ctrl$$.name,"so_ct",function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$obj$$.so_ct=$rs$$.so_ct;$checkVoucherNumber$$($error$$=>{$error$$?$count$$>=99?$callback$$($error$$):
20
- ($count$$++,$callback$$()):($count$$=99999,$callback$$())})},$obj$$)},function($err$$){$callback$$($err$$)})}else $callback$$()})},function($callback$$){setImmediate(async()=>{if($model$$.schema.paths.ma_dvcs&&$ctrl$$.name!=="dvcs")try{if($obj$$.ma_dvcs)if(global.mongoose.Types.ObjectId.isValid($obj$$.ma_dvcs)){let $_id_dvcs$$=global.mongoose.Types.ObjectId($obj$$.ma_dvcs);await global.getModel("dvcs").findOne({_id:$_id_dvcs$$})?$callback$$():global.getModel("dvcs").create({_id:$_id_dvcs$$,id_app:$obj$$.id_app,
21
- ma_dvcs:"IMPORTED",ten_dvcs:"Imported"},$e$$=>{$e$$&&Logger.error("Can't import dvcs",$e$$);$callback$$()})}else $callback$$();else{let $dvcs$$=await global.getModel("dvcs").findOne({id_app:$obj$$.id_app,status:!0}).inTxn().lean();$dvcs$$||($dvcs$$=await global.getModel("dvcs").create({id_app:$obj$$.id_app,ma_dvcs:"CTY",ten_dvcs:"C\u00f4ng ty"}),console.log("[createHandler] t\u1ef1 t\u1ea1o dvcs m\u1edbi",$dvcs$$));$obj$$.ma_dvcs=$dvcs$$._id.toString();$callback$$()}}catch($e$$){Logger.error("[createHandler] t\u1ea1o \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf",
18
+ ($count$$++,$callback$$()):($count$$=99999,$callback$$()):($count$$=99999,$callback$$())})},$_options$$)},function($err$$){$cb$$($err$$)})},$e$$=>{$callback$$($e$$)})})}).catch($e$$=>{Logger.error($e$$)})})},$callback$$=>{if((!$voucher_options$$?.trang_thai_create_voucher_numbers||$voucher_options$$?.trang_thai_create_voucher_numbers.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$model$$.schema.paths.so_ct)if($obj$$.so_ct&&$obj$$.so_ct.toUpperCase()!==
19
+ ($listinfo_code$$||$ctrl$$.name).toUpperCase()&&$obj$$.so_ct.toUpperCase()!==$ctrl$$.name.toUpperCase())$checkVoucherNumber$$($error$$=>{$callback$$($error$$)});else{let $count$$=0;async.whilst(function($cb$$){$cb$$(null,$count$$<100)},function($callback$$){getNextSequence($obj$$.id_app,$listinfo_code$$||$ctrl$$.name,"so_ct",function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$obj$$.so_ct=$rs$$.so_ct;$checkVoucherNumber$$($error$$=>{$error$$?$count$$>=99?$callback$$($error$$):($count$$++,$callback$$()):
20
+ ($count$$=99999,$callback$$())})},$obj$$)},function($err$$){$callback$$($err$$)})}else $callback$$()},function($callback$$){setImmediate(async()=>{if($model$$.schema.paths.ma_dvcs&&$ctrl$$.name!=="dvcs")try{if($obj$$.ma_dvcs)if(global.mongoose.Types.ObjectId.isValid($obj$$.ma_dvcs)){let $_id_dvcs$$=global.mongoose.Types.ObjectId($obj$$.ma_dvcs);await global.getModel("dvcs").findOne({_id:$_id_dvcs$$}).lean()?$callback$$():global.getModel("dvcs").create({_id:$_id_dvcs$$,id_app:$obj$$.id_app,ma_dvcs:"IMPORTED",
21
+ ten_dvcs:"Imported"},$e$$=>{$e$$&&Logger.error("Can't import dvcs",$e$$);$callback$$()})}else $callback$$();else{let $dvcs$$=await global.getModel("dvcs").findOne({id_app:$obj$$.id_app,status:!0}).inTxn().lean();$dvcs$$||($dvcs$$=await global.getModel("dvcs").create({id_app:$obj$$.id_app,ma_dvcs:"CTY",ten_dvcs:"C\u00f4ng ty"}),console.log("[createHandler] t\u1ef1 t\u1ea1o dvcs m\u1edbi",$dvcs$$));$obj$$.ma_dvcs=$dvcs$$._id.toString();$callback$$()}}catch($e$$){Logger.error("[createHandler] t\u1ea1o \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf",
22
22
  $e$$),$callback$$("Kh\u00f4ng th\u1ec3 t\u1ea1o \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf m\u1eb7c \u0111\u1ecbnh")}else $callback$$()})},$callback$$=>{$ctrl$$.validating||($ctrl$$.validating=($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)});$ctrl$$.validating($user$$,$obj$$,$e$$=>{if($e$$)return $callback$$($e$$);setImmediate(()=>{$obj$$.user_created=$action$$=="import"?$obj$$.user_created||$user$$.email:$user$$.email;$obj$$.user_updated=$user$$.email;$obj$$.date_created=new Date;$obj$$.date_updated=
23
23
  new Date;validate($obj$$,async $error$$=>{setImmediate(async()=>{if($error$$){let $msgError$$=$error$$;if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else{if($id_be_supply_by_user$$&&global.mongoose.Types.ObjectId.isValid($id_be_supply_by_user$$)){let $_id$$=global.mongoose.Types.ObjectId($id_be_supply_by_user$$);await $model$$.findOne({_id:$_id$$},{_id:1})||
24
24
  ($obj$$._id=$_id$$)}$callback$$()}})},$voucher_options$$)})},{action:$action$$})},function($callback$$){isExists($model$$,$ctrl$$.unique,$obj$$,$ctrl$$.replaceIfExists,async($error$$,$kq$$)=>{setImmediate(async()=>{if($error$$||$kq$$){let $msgError$$=$error$$||ERRORS.ERR_ALREADY_EXIST;if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$({error:$msgError$$,code:ERRORS.ERR_ALREADY_EXIST_CODE})});else $callback$$({error:$msgError$$,
25
25
  code:ERRORS.ERR_ALREADY_EXIST_CODE})}else{for(let $k$$ in $ctrl$$.keyValues)$obj$$[$k$$]=$ctrl$$.keyValues[$k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&_.isArray($obj$$[$model_path$$])).forEach($model_path$$=>{$model$$.schema.paths[$model_path$$].schema&&$model$$.schema.paths[$model_path$$].schema.paths&&Object.keys($model$$.schema.paths[$model_path$$].schema.paths).filter($path$$=>$path$$!=="line"&&$path$$!=="_id"&&$path$$!=="__v"&&fields_sync_master_detail.indexOf($path$$)>=
26
26
  0).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,$obj$$);if($ctrl$$.saving)try{await $ctrl$$.saving($user$$,$obj$$,$action$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$ctrl$$.emit("saving",$obj$$);$obj$$.save(function($error$$,$obj_created$$){setImmediate(async()=>{if($error$$){if($ctrl$$.options.onErrorSave)$ctrl$$.options.onErrorSave($user$$,
27
27
  $obj$$,$error$$,$action$$);let $msgErrors$$=[];for(let $k$$ in $error$$.errors)$msgErrors$$.push($error$$.errors[$k$$].message);$msgErrors$$.length==0&&($msgErrors$$=$error$$.message);$msgErrors$$||=JSON.stringify($error$$);if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&Logger.error("onErrorCreating",$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$)}else $ctrl$$.populate&&($obj_created$$=$model$$.findById($obj_created$$._id).inTxn(),$obj_created$$=
28
- await $ctrl$$.populate($obj_created$$)),postData($obj_created$$,$ctrl$$,function($msgErrors$$){if($msgErrors$$)if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgErrors$$=$msgErrors$$+"\n"+$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$);else{const $obj_created_cv$$=convertObjectIdsToStrings($obj_created$$.toObject());onAfterCommit(async()=>{$ctrl$$.emit("saved",$obj_created$$);$ctrl$$.emit("created",$obj_created$$);global.getModel("customer").updateActives&&
29
- global.getModel("customer").updateActives($obj_created$$);$req$$&&setImmediate(()=>{global.getModel("log").create({id_app:$user$$.current_id_app,id_func:$ctrl$$.name,action:$action$$.toUpperCase(),data:{id:$obj_created_cv$$._id.toString(),data:$obj_created_cv$$}},$user$$.email,$req$$.user_agent,$req$$)});runWebhooks($ctrl$$,$obj_created_cv$$,$action$$.toUpperCase(),$voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$action$$)});$callback$$(null,$obj_created_cv$$)}},{req:$req$$})})})}})})},
30
- function($obj$$,$callback$$){setImmediate(async()=>{let $co_gia_tri_tam$$=!1;if($obj$$.exfields&&$obj$$.exfields.__files__){for(let $_file$$ of $obj$$.exfields.__files__)await $File$$.updateOne({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name});delete $obj$$.exfields.__files__;$co_gia_tri_tam$$=!0}if($obj$$.exfields&&$obj$$.exfields.__supports__){for(let $_support$$ of $obj$$.exfields.__supports__)await $Support$$.updateOne({_id:$_support$$._id},{id_link:$obj$$._id.toString(),
31
- collection_link:$ctrl$$.collection_name});delete $obj$$.exfields.__supports__;$co_gia_tri_tam$$=!0}$co_gia_tri_tam$$&&await $model$$.updateOne({_id:$obj$$._id},{exfields:$obj$$.exfields});$ctrl$$.created?$ctrl$$.created($user$$,$obj$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$rs$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$rs$$)},{listinfo_code:$listinfo_code$$}):$callback$$(null,$rs$$)}):
32
- $ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$}):$callback$$(null,$obj$$)})},function($obj$$,$callback$$){$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,$callback$$){$action$$==="import"||$req$$&&($req$$.query||{}).return_data==0?$callback$$(null,{_id:$obj_created_cv$$._id.toString()}):($obj_created_cv$$.collection_name=
33
- $ctrl$$.collection_name,$ctrl$$.onView($user$$,[$obj_created_cv$$],($error$jscomp$13_html_rs$$,$viewValues$$)=>{if($error$jscomp$13_html_rs$$)return $callback$$($error$jscomp$13_html_rs$$);$error$jscomp$13_html_rs$$=$viewValues$$?$viewValues$$[0]:$obj_created_cv$$;$req$$&&$req$$.uploadFile?($error$jscomp$13_html_rs$$="<html><title>OK</title><body>"+JSON.stringify($error$jscomp$13_html_rs$$)+"</body></html>",$callback$$(null,$error$jscomp$13_html_rs$$)):$callback$$(null,$error$jscomp$13_html_rs$$)},
34
- {req:$req$$}))}],($e$$,$obj_created$$)=>{$e$$?(Logger.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],$callback$$(null,{obj_created:$obj_created$$}))})}catch($e$$){Logger.error("[createHanlder]",$ctrl$$.name,$e$$),$callback$$($e$$)}},createHandlerAsync=($ctrl$$,$req$$)=>new Promise(($resolve$$,$reject$$)=>{if(!$req$$.data)return $reject$$("Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 x\u1eed l\u00fd");
28
+ await $ctrl$$.populate($obj_created$$)),postData($obj_created$$,$ctrl$$,function($msgErrors$$){if($msgErrors$$)if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgErrors$$=$msgErrors$$+"\n"+$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$);else{const $obj_created_cv$$=convertObjectIdsToStrings($obj_created$$.toObject());onAfterCommit(async()=>{$ctrl$$.emit("saved",$obj_created$$);$ctrl$$.emit("created",$obj_created$$);$model$$.modelName!=
29
+ "customer"&&global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj_created$$);$req$$&&setImmediate(()=>{global.getModel("log").create({id_app:$user$$.current_id_app,id_func:$ctrl$$.name,action:$action$$.toUpperCase(),data:{id:$obj_created_cv$$._id.toString(),data:$obj_created_cv$$}},$user$$.email,$req$$.user_agent,$req$$)});runWebhooks($ctrl$$,$obj_created_cv$$,$action$$.toUpperCase(),$voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$action$$)});
30
+ $callback$$(null,$obj_created_cv$$)}},{req:$req$$})})})}})})},function($obj$$,$callback$$){setImmediate(async()=>{let $co_gia_tri_tam$$=!1;if($obj$$.exfields&&$obj$$.exfields.__files__){for(let $_file$$ of $obj$$.exfields.__files__)await $File$$.updateOne({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name});delete $obj$$.exfields.__files__;$co_gia_tri_tam$$=!0}if($obj$$.exfields&&$obj$$.exfields.__supports__){for(let $_support$$ of $obj$$.exfields.__supports__)await $Support$$.updateOne({_id:$_support$$._id},
31
+ {id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name});delete $obj$$.exfields.__supports__;$co_gia_tri_tam$$=!0}$co_gia_tri_tam$$&&await $model$$.updateOne({_id:$obj$$._id},{exfields:$obj$$.exfields});$ctrl$$.created?$ctrl$$.created($user$$,$obj$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$rs$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$rs$$)},{listinfo_code:$listinfo_code$$}):
32
+ $callback$$(null,$rs$$)}):$ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$}):$callback$$(null,$obj$$)})},function($obj$$,$callback$$){$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,$callback$$){$action$$==="import"||$req$$&&($req$$.query||{}).return_data==0?$callback$$(null,{_id:$obj_created_cv$$._id.toString()}):
33
+ ($obj_created_cv$$.collection_name=$ctrl$$.collection_name,$ctrl$$.onView($user$$,[$obj_created_cv$$],($error$jscomp$13_html_rs$$,$viewValues$$)=>{if($error$jscomp$13_html_rs$$)return $callback$$($error$jscomp$13_html_rs$$);$error$jscomp$13_html_rs$$=$viewValues$$?$viewValues$$[0]:$obj_created_cv$$;$req$$&&$req$$.uploadFile?($error$jscomp$13_html_rs$$="<html><title>OK</title><body>"+JSON.stringify($error$jscomp$13_html_rs$$)+"</body></html>",$callback$$(null,$error$jscomp$13_html_rs$$)):$callback$$(null,
34
+ $error$jscomp$13_html_rs$$)},{req:$req$$}))}],($e$$,$obj_created$$)=>{$e$$?(Logger.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],$callback$$(null,{obj_created:$obj_created$$}))})}catch($e$$){Logger.error("[createHanlder]",$ctrl$$.name,$e$$),$callback$$($e$$)}},createHandlerAsync=($ctrl$$,$req$$)=>new Promise(($resolve$$,$reject$$)=>{if(!$req$$.data)return $reject$$("Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 x\u1eed l\u00fd");
35
35
  createHandler($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(async()=>{var $datas_r$$=$req$$.data;if(Array.isArray($datas_r$$)){let $rs$$=[];for(let $data$$ of $datas_r$$)$req$$.data=$data$$,$req$$.body=$data$$,$datas_r$$=await createHandlerAsync($ctrl$$,$req$$),$rs$$.push($datas_r$$);return $rs$$}return createHandlerAsync($ctrl$$,$req$$)});$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};
36
36
  module.exports=withSesssion;module.exports.createHandler=createHandler;
@@ -2,13 +2,13 @@ const fs=require("fs"),path=require("path"),async=require("async"),_=require("lo
2
2
  let $map_root$$=configs.paths.maps,$map_file$$;$map_root$$&&($map_file$$=$map_root$$+"/"+$name$$+".js");$map_file$$&&fs.existsSync($map_file$$)||($map_file$$=path.dirname(__dirname)+"/maps/"+$name$$+".js");fs.existsSync($map_file$$)&&($parseOptions$$=await new Promise($resolve$$=>{setImmediate(()=>{$resolve$$(require($map_file$$))})}));if($ctrl$$.options.onPreExcelParse){const $onPreExcelParse$$=$ctrl$$.options.onPreExcelParse;await new Promise($resolve$$=>{setImmediate(()=>{$onPreExcelParse$$($parseOptions$$);
3
3
  $resolve$$()})})}let $filePath$$=$req$$.files.xlsx.path;Logger.info("[importFromExcel] parse file excel");excel.parse($filePath$$,function($e$$,$data$$,$columns$$){setImmediate(()=>{fs.unlink($filePath$$,function($e$$){$e$$&&Logger.error("[importFromExcel] Can't delete file tmp:"+$filePath$$,$e$$)});if($e$$)return Logger.error("[importFromExcel] error parse excel file",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$data$$=$data$$.filter($d$$=>Object.keys($d$$).length>
4
4
  0);if($data$$.length>5E4)return Logger.info("[importFromExcel] Data is too large",$data$$.length),$callback$$({error:"S\u1ed1 d\u00f2ng import qu\u00e1 l\u1edbn. M\u1ed7i l\u1ea7n import ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p t\u1ed1i \u0111a 50 000 d\u00f2ng"});$ctrl$$.excelParse&&$ctrl$$.excelParse($data$$,$columns$$);var $dir_workers_poolName$$=configs.paths.workers;let $onImportProcess$$;$dir_workers_poolName$$&&($onImportProcess$$=$dir_workers_poolName$$+"/"+$name$$.toLowerCase()+"OnImport.js");
5
- $onImportProcess$$&&fs.existsSync($onImportProcess$$)||($dir_workers_poolName$$=path.dirname(__dirname)+"/workers",$onImportProcess$$=$dir_workers_poolName$$+"/"+$name$$.toLowerCase()+"OnImport.js");if(fs.existsSync($onImportProcess$$))$dir_workers_poolName$$=`${$name$$}excelParsePool`,global[$dir_workers_poolName$$]||(global[$dir_workers_poolName$$]=new StaticPool($onImportProcess$$,0,1)),global[$dir_workers_poolName$$].exec({user:$req$$.user,data:$data$$,columns:$columns$$,configs:{database:configs.database}},
6
- $response$$=>{if($response$$.error)return $callback$$({error:$response$$.error||"\u0110\u00e3 c\u00f3 l\u1ed7i khi x\u1eed l\u00fd d\u1eef li\u1ec7u"});$req$$.data=$response$$.data||$data$$;$req$$.columns=$response$$.columns||$columns$$;$callback$$()});else if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,$columns$$,function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return Logger.error("[importFromExcel] [onImport]",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||
7
- $e$$});$req$$.data=$new_data$$||$data$$;$req$$.columns=$columns$$;$callback$$()})});else setImmediate(()=>{$req$$.data=$data$$;$req$$.columns=$columns$$;$callback$$()})})},$parseOptions$$)})},function($callback$$){Logger.info("[importFromExcel] prepare data...");let $data$$=$req$$.data;var $columns$$=$req$$.columns;$columns$$._error||($columns$$._error="Error");let $master_columns$$=[],$detail_col$$,$details$$={},$detail_yn$$=!1;for(let $column_name$$ in $columns$$)$column_name$$.indexOf("$")>0?($detail_yn$$=
8
- !0,$columns$$=$column_name$$.split("$")[0],$detail_col$$=$column_name$$.split("$")[1],$details$$[$columns$$]||($details$$[$columns$$]={},$details$$[$columns$$].columns=[]),$details$$[$columns$$].columns.push($detail_col$$)):$master_columns$$.push($column_name$$);if(!$detail_yn$$)return $callback$$();let $data_new$$=[],$row_master$$,$row_master_exists$$;async.mapLimit($data$$,100,($row$$,$cb$$)=>{setImmediate(()=>{$row_master$$={exfields:{}};$row_master_exists$$=null;$master_columns$$.forEach(function($column$$){if($column$$.indexOf("exfields.")===
9
- 0){let $_c$$=$column$$.replace("exfields.","");$row_master$$.exfields[$_c$$]=$row$$[$column$$]}else $row_master$$[$column$$]=$row$$[$column$$]});for(let $i$$=0;$i$$<$data_new$$.length;$i$$++){let $m$$=$data_new$$[$i$$],$is_eq$$=!0;$master_columns$$.forEach(function($column$$){_.isEqual($m$$[$column$$],$row_master$$[$column$$])||($is_eq$$=!1)});$is_eq$$&&($row_master_exists$$=$m$$)}$row_master_exists$$?$row_master$$=$row_master_exists$$:$data_new$$.push($row_master$$);let $row_detail$$;for(let $detail_name$$ in $details$$)$row_detail$$=
10
- {},$details$$[$detail_name$$].columns.forEach(function($column$$){$row$$[$detail_name$$+"$"+$column$$]&&($row_detail$$[$column$$]=$row$$[$detail_name$$+"$"+$column$$])}),$row_master$$[$detail_name$$]||($row_master$$[$detail_name$$]=[]),_.keys($row_detail$$).length>0&&$row_master$$[$detail_name$$].push($row_detail$$);$cb$$()})},()=>{$req$$.data=$data_new$$;$callback$$()})},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data||[],$columns$$=$req$$.columns;for(let $row$$ of $data$$){let $_first$$=
11
- $row$$._first;$_first$$&&$_first$$.length>0&&_.extend($row$$,$_first$$[0])}let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){Logger.error("[importFromExcel] parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,async($e$jscomp$4_message$$,$rs$$)=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,
12
- action:"IMPORTEXCEL",data:{data:$data$$,columns:$columns$$,status_task:$req$$.status_task},result:{error:$e$jscomp$4_message$$,result:$rs$$,finished_at:new Date}},$req$$.user.email,$req$$.user_agent,$req$$);if($e$jscomp$4_message$$)return Logger.error("[importFromExcel] import",$e$jscomp$4_message$$),$e$jscomp$4_message$$.error?($e$jscomp$4_message$$.message=$e$jscomp$4_message$$.message||$e$jscomp$4_message$$.error,$callback$$($e$jscomp$4_message$$)):$callback$$({error:$e$jscomp$4_message$$.message||
13
- $e$jscomp$4_message$$,message:$e$jscomp$4_message$$.message||$e$jscomp$4_message$$});$rs$$.rows_error.length===0?($req$$.result=$rs$$,$callback$$()):($e$jscomp$4_message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$jscomp$4_message$$,error:$rs$$.error||$rs$$}))},{replace:$req$$.query.update===!0||$req$$.query.update=="true",req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,
14
- $req$$.result)})};module.exports=importFromExcel;
5
+ $onImportProcess$$&&fs.existsSync($onImportProcess$$)||($dir_workers_poolName$$=path.dirname(__dirname)+"/workers",$onImportProcess$$=$dir_workers_poolName$$+"/"+$name$$.toLowerCase()+"OnImport.js");fs.existsSync($onImportProcess$$)?($dir_workers_poolName$$=`${$name$$}excelParsePool`,global[$dir_workers_poolName$$]||(global[$dir_workers_poolName$$]=new StaticPool($onImportProcess$$,0,1)),global[$dir_workers_poolName$$].exec({user:$req$$.user,data:$data$$,columns:$columns$$,configs:{database:configs.database}},
6
+ $response$$=>{if($response$$.error)return $callback$$({error:$response$$.error||"\u0110\u00e3 c\u00f3 l\u1ed7i khi x\u1eed l\u00fd d\u1eef li\u1ec7u"});$req$$.data=$response$$.data||$data$$;$req$$.columns=$response$$.columns||$columns$$;$callback$$()})):$ctrl$$.options.onImport?(Logger.info("[importFromExcel] [onImport]..."),$ctrl$$.options.onImport($req$$.user,$data$$,$columns$$,function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return Logger.error("[importFromExcel] [onImport]",$e$$),$e$$.error?
7
+ $callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$req$$.columns=$columns$$;$callback$$()})})):(Logger.info("[importFromExcel] \u0111\u00e3 ho\u00e0n th\u00e0nh import..."),setImmediate(()=>{$req$$.data=$data$$;$req$$.columns=$columns$$;$callback$$()}))})},$parseOptions$$)})},function($callback$$){Logger.info("[importFromExcel] prepare data...");let $data$$=$req$$.data;var $columns$$=$req$$.columns;$columns$$._error||($columns$$._error="Error");let $master_columns$$=
8
+ [],$detail_col$$,$details$$={},$detail_yn$$=!1;for(let $column_name$$ in $columns$$)$column_name$$.indexOf("$")>0?($detail_yn$$=!0,$columns$$=$column_name$$.split("$")[0],$detail_col$$=$column_name$$.split("$")[1],$details$$[$columns$$]||($details$$[$columns$$]={},$details$$[$columns$$].columns=[]),$details$$[$columns$$].columns.push($detail_col$$)):$master_columns$$.push($column_name$$);if(!$detail_yn$$)return $callback$$();let $data_new$$=[],$row_master$$,$row_master_exists$$;async.mapLimit($data$$,
9
+ 100,($row$$,$cb$$)=>{setImmediate(()=>{$row_master$$={exfields:{}};$row_master_exists$$=null;$master_columns$$.forEach(function($column$$){if($column$$.indexOf("exfields.")===0){let $_c$$=$column$$.replace("exfields.","");$row_master$$.exfields[$_c$$]=$row$$[$column$$]}else $row_master$$[$column$$]=$row$$[$column$$]});for(let $i$$=0;$i$$<$data_new$$.length;$i$$++){let $m$$=$data_new$$[$i$$],$is_eq$$=!0;$master_columns$$.forEach(function($column$$){_.isEqual($m$$[$column$$],$row_master$$[$column$$])||
10
+ ($is_eq$$=!1)});$is_eq$$&&($row_master_exists$$=$m$$)}$row_master_exists$$?$row_master$$=$row_master_exists$$:$data_new$$.push($row_master$$);let $row_detail$$;for(let $detail_name$$ in $details$$)$row_detail$$={},$details$$[$detail_name$$].columns.forEach(function($column$$){$row$$[$detail_name$$+"$"+$column$$]&&($row_detail$$[$column$$]=$row$$[$detail_name$$+"$"+$column$$])}),$row_master$$[$detail_name$$]||($row_master$$[$detail_name$$]=[]),_.keys($row_detail$$).length>0&&$row_master$$[$detail_name$$].push($row_detail$$);
11
+ $cb$$()})},()=>{$req$$.data=$data_new$$;$callback$$()})},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data||[],$columns$$=$req$$.columns;for(let $row$$ of $data$$){let $_first$$=$row$$._first;$_first$$&&$_first$$.length>0&&_.extend($row$$,$_first$$[0])}let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){Logger.error("[importFromExcel] parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,
12
+ $req$$.user.current_id_app,$data$$,async($e$jscomp$4_message$$,$rs$$)=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTEXCEL",data:{data:$data$$,columns:$columns$$,status_task:$req$$.status_task},result:{error:$e$jscomp$4_message$$,result:$rs$$,finished_at:new Date}},$req$$.user.email,$req$$.user_agent,$req$$);if($e$jscomp$4_message$$)return Logger.error("[importFromExcel] import",$e$jscomp$4_message$$),$e$jscomp$4_message$$.error?($e$jscomp$4_message$$.message=
13
+ $e$jscomp$4_message$$.message||$e$jscomp$4_message$$.error,$callback$$($e$jscomp$4_message$$)):$callback$$({error:$e$jscomp$4_message$$.message||$e$jscomp$4_message$$,message:$e$jscomp$4_message$$.message||$e$jscomp$4_message$$});$rs$$.rows_error.length===0?($req$$.result=$rs$$,$callback$$()):($e$jscomp$4_message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$jscomp$4_message$$,error:$rs$$.error||$rs$$}))},
14
+ {replace:$req$$.query.update===!0||$req$$.query.update=="true",req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromExcel;
@@ -1,39 +1,39 @@
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_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=global.getModel("listinfo"),$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=await $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.findOne({code:($options$$.listinfo_code||$ctrl$$.name).toLowerCase()}).lean();let $modelJoins$$=
4
- [];$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$&&(await $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.updateModel($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$,$ctrl$$.model),$modelJoins$$=($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.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 "+
5
- configs.limitRowImport);Logger.info("[importHanlder] \u0110ang import t\u1edbi",$model$$.modelName,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u...");if($model$$.modelName!=="group"){var $nh_kh$$=$data$$.filter($r$$=>$r$$.ten_nh_kh);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_nh_kh2);$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_nh_kh3);$model$$.schema.paths.details&&($nh_kh$$=$nh_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,
6
- $b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh)),$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh2)),$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh3)));var $nh_kh_ten_nh_kh1s$$=
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_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=global.getModel("listinfo"),$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.findOne({code:($options$$.listinfo_code||$ctrl$$.name).toLowerCase()}).lean();let $modelJoins$$=
4
+ [];$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$&&(await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.updateModel($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$,$ctrl$$.model),$modelJoins$$=($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.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 "+
5
+ configs.limitRowImport);Logger.info("[importHanlder] \u0110ang import t\u1edbi",$model$$.modelName,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u...");if($model$$.modelName!=="group"){var $nh_kh$$=$data$$.filter($r$$=>$r$$.ten_nh_kh);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_nh_kh2);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_nh_kh3);$model$$.schema.paths.details&&($nh_kh$$=$nh_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,
6
+ $b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh)),$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh2)),$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh3)));var $nh_kh_ten_nh_kh1s$$=
7
7
  await $nh_kh$$.filter($c$$=>$c$$.ten_nh_kh&&!$c$$.nh_kh).asyncGroupBy(["ten_nh_kh"],[]);for(let $nh_kh1$$ of $nh_kh_ten_nh_kh1s$$){$nh_kh_ten_nh_kh1s$$={};$nh_kh_ten_nh_kh1s$$.id_app=$id_app$$;$nh_kh_ten_nh_kh1s$$.group_name=$nh_kh1$$.ten_nh_kh;$nh_kh_ten_nh_kh1s$$.group_type="CUSTOMER";$nh_kh_ten_nh_kh1s$$.group_kind=1;$nh_kh_ten_nh_kh1s$$.status=!0;$nh_kh_ten_nh_kh1s$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh1$$.ten_nh_kh,id_app:$id_app$$,
8
8
  group_kind:1,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$nh_kh$$.filter($c$$=>$c$$.ten_nh_kh==$nh_kh1$$.ten_nh_kh).forEach($c$$=>{$c$$.nh_kh=$check$$._id.toString()});else{const $new_nh_kh$$=await global.getModel("group").create($nh_kh_ten_nh_kh1s$$);$nh_kh$$.filter($c$$=>$c$$.ten_nh_kh==$nh_kh1$$.ten_nh_kh).forEach($c$$=>{$c$$.nh_kh=$new_nh_kh$$._id.toString()})}}$nh_kh$$=await $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2&&!$c$$.nh_kh2).asyncGroupBy(["ten_nh_kh2"],[]);
9
9
  for(let $nh_kh2$$ of $nh_kh$$){$nh_kh$$={};$nh_kh$$.id_app=$id_app$$;$nh_kh$$.group_name=$nh_kh2$$.ten_nh_kh2;$nh_kh$$.group_type="CUSTOMER";$nh_kh$$.group_kind=2;$nh_kh$$.status=!0;$nh_kh$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh2$$.ten_nh_kh2,id_app:$id_app$$,group_kind:2,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2==$nh_kh2$$.ten_nh_kh2).forEach($c$$=>{$c$$.nh_kh2=$check$$._id.toString()});
10
- else{const $new_nh_kh$$=await global.getModel("group").create($nh_kh$$);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2==$nh_kh2$$.ten_nh_kh2).forEach($c$$=>{$c$$.nh_kh2=$new_nh_kh$$._id.toString()})}}$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=await $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh3&&!$c$$.nh_kh3).asyncGroupBy(["ten_nh_kh3"],[]);for(let $nh_kh3$$ of $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$={};
11
- $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.id_app=$id_app$$;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_name=$nh_kh3$$.ten_nh_kh3;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_type="CUSTOMER";$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_kind=3;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.status=!0;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh3$$.ten_nh_kh3,id_app:$id_app$$,group_kind:3,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>
12
- $c$$.ten_nh_kh3==$nh_kh3$$.ten_nh_kh3).forEach($c$$=>{$c$$.nh_kh3=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom kh3",$nh_kh3$$.ten_nh_kh3);const $new_nh_kh$$=await global.getModel("group").create($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$);$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh3==$nh_kh3$$.ten_nh_kh3).forEach($c$$=>{$c$$.nh_kh3=$new_nh_kh$$._id.toString()})}}}if($model$$.modelName!=="customer"){$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=
13
- [];$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_kh);$model$$.schema.paths.details&&($custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.map($kh$$=>
14
- {$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}});$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.asyncGroupBy("ma_kh ten_kh dia_chi dien_thoai ma_so_thue nh_kh nh_kh2 nh_kh3".split(" "),
15
- []);for(var $kh$$ of $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$)$kh$$.id_app=$id_app$$,$kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($kh$$)}$kh$$=[];if($model$$.modelName!=="dmkho"){$model$$.schema.paths.ma_kho&&($kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($kh$$=$kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=
16
- $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}});$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.asyncGroupBy(["ma_kho","ten_kho"],[]);for(let $kho$$ of $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$)$kho$$.id_app=$id_app$$,$kho$$.user_created=$user$$.email,$kho$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,
17
- ma_kho:$kho$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho$$),$kh$$.filter($c$$=>!$c$$.ma_kho&&$c$$.ten_kho===$kho$$.ten_kho).forEach($c$$=>{$c$$.ma_kho=$kho$$.ma_kho})}if($model$$.modelName!=="dmnvt"){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$data$$.filter($r$$=>!$r$$.ma_nvt&&$r$$.ten_nvt);$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>!$r$$.ma_nvt2&&$r$$.ten_nvt2);$kh$$=$data$$.filter($r$$=>!$r$$.ma_nvt3&&$r$$.ten_nvt3);$model$$.schema.paths.details&&
18
- ($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>!$r$$.ma_nvt&&$r$$.ten_nvt)),$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>!$r$$.ma_nvt2&&$r$$.ten_nvt2)),$kh$$=$kh$$.concat($data$$.map($v$$=>$v$$.details||
19
- []).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>!$r$$.ma_nvt3&&$r$$.ten_nvt3)));$nh_kh$$=await $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt).asyncGroupBy(["ten_nvt"],[]);for(let $nh_vt1$$ of $nh_kh$$){$nh_kh$$={};$nh_kh$$.id_app=$id_app$$;$nh_kh$$.ten_nvt=$nh_vt1$$.ten_nvt;$nh_kh$$.group_kind=1;$nh_kh$$.status=!0;$nh_kh$$.user_created=$user$$.email;let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt1$$.ten_nvt,id_app:$id_app$$,group_kind:1},{_id:1}).lean();
20
- if($check$$)$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt==$nh_vt1$$.ten_nvt).forEach($c$$=>{$c$$.ma_nvt=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu",$nh_vt1$$.ten_nvt);const $new_nvt$$=await global.getModel("dmnvt").create($nh_kh$$);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt==$nh_vt1$$.ten_nvt).forEach($c$$=>{$c$$.ma_nvt=$new_nvt$$._id.toString()})}}$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=await $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>
21
- $c$$.ten_nvt2).asyncGroupBy(["ten_nvt2"],[]);for(let $nh_vt2$$ of $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$={};$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.id_app=$id_app$$;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.ten_nvt=$nh_vt2$$.ten_nvt2;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_kind=2;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.status=!0;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.user_created=$user$$.email;let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt2$$.ten_nvt2,
22
- id_app:$id_app$$,group_kind:2},{_id:1}).lean();if($check$$)$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nvt2==$nh_vt2$$.ten_nvt2).forEach($c$$=>{$c$$.ma_nvt2=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu 2",$nh_vt2$$.ten_nvt2);const $new_nvt$$=await global.getModel("dmnvt").create($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$);$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nvt2==$nh_vt2$$.ten_nvt2).forEach($c$$=>
23
- {$c$$.ma_nvt2=$new_nvt$$._id.toString()})}}$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $kh$$.filter($c$$=>$c$$.ten_nvt3).asyncGroupBy(["ten_nvt3"],[]);for(let $nh_vt3$$ of $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$){$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$={};$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.id_app=$id_app$$;$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.ten_nvt=$nh_vt3$$.ten_nvt3;
24
- $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.group_kind=3;$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.status=!0;$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.user_created=$user$$.email;let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt3$$.ten_nvt3,id_app:$id_app$$,group_kind:3},{_id:1}).lean();if($check$$)$kh$$.filter($c$$=>$c$$.ten_nvt3==$nh_vt3$$.ten_nvt3).forEach($c$$=>{$c$$.ma_nvt3=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu 3",
25
- $nh_vt3$$.ten_nvt3);const $new_nvt$$=await global.getModel("dmnvt").create($custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$);$kh$$.filter($c$$=>$c$$.ten_nvt3==$nh_vt3$$.ten_nvt3).forEach($c$$=>{$c$$.ma_nvt3=$new_nvt$$._id.toString()})}}}if($model$$.modelName!=="dmvt"){$kh$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt);$model$$.schema.paths.details&&($kh$$=$kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));
26
- $kh$$=$kh$$.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}));$kh$$=await $kh$$.asyncGroupBy("ma_vt ten_vt ma_dvt ma_nvt ten_nvt ma_nvt2 ten_nvt2 ma_nvt3 ten_nvt3".split(" "),[]);if($model$$.modelName!=="dmdvt"){$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=
27
- await $kh$$.asyncGroupBy(["ma_dvt"],[]);for(var $dvt_tk_vt$$ of $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$)$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,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_tk_vt$$.ma_dvt,id_app:$id_app$$}).lean()||(Logger.info("[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$$,
28
- loai:1,tk:{$regex:"^156",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(var $limit_vt$$ of $kh$$)$limit_vt$$.id_app=$id_app$$,$limit_vt$$.tk_vt=$dvt_tk_vt$$,$limit_vt$$.tk_gv=
29
- $custs_dvts_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$,$limit_vt$$.tk_dt=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$,$limit_vt$$.status=!0,$limit_vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$limit_vt$$.ma_vt,id_app:$id_app$$}).lean()||(Logger.info("[importHanlder] create product",$limit_vt$$),await global.getModel("dmvt").create($limit_vt$$),$model$$.modelName!=="dmqddvt"&&await global.getModel("dmqddvt").create({id_app:$id_app$$,status:!0,ma_vt:$limit_vt$$.ma_vt,
30
- ma_dvt:$limit_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"});Logger.error("[importHanlder] begin import",$ctrl$$.name);$limit_vt$$=100;if($ctrl$$.options?.unique_imp||$ctrl$$.unique&&$ctrl$$.unique.length>0)$limit_vt$$=1;async.mapLimit($data$$,$limit_vt$$,function($row$$,$callback$$){const $row_keys$$=
31
- Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>{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$$],Logger.error("[importHanlder] Error parse data",
32
- $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$$=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;
33
- delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&$ctrl$$.unique.length>0||$row$$._id)){let $query$$={};if($ctrl$$.options?.unique_imp||$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$$],
34
- $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:"+$ctrl$$.unique.join(","));$ctrl$$.require_id_app!=0&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;await executeInTransaction(()=>new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{const $rss$$=await $ctrl$$.model.find($query$$).inTxn().lean();if($rss$$.length>
35
- 1)return $reject$$("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");let $foundObject$$;$rss$$.length===1&&($foundObject$$=$rss$$[0]);$foundObject$$?($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),Logger.info("[importHanlder] update..."),update($user$$,$ctrl$$,
36
- $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$$})}Logger.info("[importHanlder] updated successfull");$resolve$$()},"import",$options$$.req,"import")):(Logger.info("[importHanlder] create..."),create($user$$,$ctrl$$,$row$$,async function($e$jscomp$4_i$$,$_e$$){if($e$jscomp$4_i$$)$_e$$=$e$jscomp$4_i$$,_.isArray($_e$$)||($_e$$=[{error:$e$jscomp$4_i$$.error||$e$jscomp$4_i$$,
10
+ else{const $new_nh_kh$$=await global.getModel("group").create($nh_kh$$);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2==$nh_kh2$$.ten_nh_kh2).forEach($c$$=>{$c$$.nh_kh2=$new_nh_kh$$._id.toString()})}}$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh3&&!$c$$.nh_kh3).asyncGroupBy(["ten_nh_kh3"],[]);for(let $nh_kh3$$ of $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$={};$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.id_app=
11
+ $id_app$$;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_name=$nh_kh3$$.ten_nh_kh3;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_type="CUSTOMER";$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_kind=3;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.status=!0;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh3$$.ten_nh_kh3,id_app:$id_app$$,group_kind:3,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>
12
+ $c$$.ten_nh_kh3==$nh_kh3$$.ten_nh_kh3).forEach($c$$=>{$c$$.nh_kh3=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom kh3",$nh_kh3$$.ten_nh_kh3);const $new_nh_kh$$=await global.getModel("group").create($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh3==$nh_kh3$$.ten_nh_kh3).forEach($c$$=>{$c$$.nh_kh3=$new_nh_kh$$._id.toString()})}}}if($model$$.modelName!=="customer"){$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=
13
+ [];$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_kh);$model$$.schema.paths.details&&($custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.map($kh$$=>{$kh$$.ma_kh||
14
+ ($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}});$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.asyncGroupBy("ma_kh ten_kh dia_chi dien_thoai ma_so_thue nh_kh nh_kh2 nh_kh3".split(" "),
15
+ []);for(var $dvts_kh$$ of $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$)$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$$=$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)));
16
+ $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$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}});$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.asyncGroupBy(["ma_kho","ten_kho"],[]);for(let $kho$$ of $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$)$kho$$.id_app=$id_app$$,$kho$$.user_created=
17
+ $user$$.email,$kho$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho$$),$dvts_kh$$.filter($c$$=>!$c$$.ma_kho&&$c$$.ten_kho===$kho$$.ten_kho).forEach($c$$=>{$c$$.ma_kho=$kho$$.ma_kho})}if($model$$.modelName!=="dmnvt"){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$data$$.filter($r$$=>!$r$$.ma_nvt&&$r$$.ten_nvt);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>!$r$$.ma_nvt2&&$r$$.ten_nvt2);
18
+ $dvts_kh$$=$data$$.filter($r$$=>!$r$$.ma_nvt3&&$r$$.ten_nvt3);$model$$.schema.paths.details&&($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>!$r$$.ma_nvt&&$r$$.ten_nvt)),$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>
19
+ !$r$$.ma_nvt2&&$r$$.ten_nvt2)),$dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>!$r$$.ma_nvt3&&$r$$.ten_nvt3)));$nh_kh$$=await $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt).asyncGroupBy(["ten_nvt"],[]);for(let $nh_vt1$$ of $nh_kh$$){$nh_kh$$={};$nh_kh$$.id_app=$id_app$$;$nh_kh$$.ten_nvt=$nh_vt1$$.ten_nvt;$nh_kh$$.group_kind=1;$nh_kh$$.status=!0;$nh_kh$$.user_created=$user$$.email;let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt1$$.ten_nvt,
20
+ id_app:$id_app$$,group_kind:1},{_id:1}).lean();if($check$$)$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt==$nh_vt1$$.ten_nvt).forEach($c$$=>{$c$$.ma_nvt=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu",$nh_vt1$$.ten_nvt);const $new_nvt$$=await global.getModel("dmnvt").create($nh_kh$$);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt==$nh_vt1$$.ten_nvt).forEach($c$$=>{$c$$.ma_nvt=$new_nvt$$._id.toString()})}}$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=
21
+ await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nvt2).asyncGroupBy(["ten_nvt2"],[]);for(let $nh_vt2$$ of $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$={};$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.id_app=$id_app$$;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.ten_nvt=$nh_vt2$$.ten_nvt2;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_kind=2;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.status=!0;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.user_created=$user$$.email;
22
+ let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt2$$.ten_nvt2,id_app:$id_app$$,group_kind:2},{_id:1}).lean();if($check$$)$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nvt2==$nh_vt2$$.ten_nvt2).forEach($c$$=>{$c$$.ma_nvt2=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu 2",$nh_vt2$$.ten_nvt2);const $new_nvt$$=await global.getModel("dmnvt").create($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>
23
+ $c$$.ten_nvt2==$nh_vt2$$.ten_nvt2).forEach($c$$=>{$c$$.ma_nvt2=$new_nvt$$._id.toString()})}}$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $dvts_kh$$.filter($c$$=>$c$$.ten_nvt3).asyncGroupBy(["ten_nvt3"],[]);for(let $nh_vt3$$ of $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$){$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$={};$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.id_app=$id_app$$;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.ten_nvt=
24
+ $nh_vt3$$.ten_nvt3;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.group_kind=3;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.status=!0;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.user_created=$user$$.email;let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt3$$.ten_nvt3,id_app:$id_app$$,group_kind:3},{_id:1}).lean();if($check$$)$dvts_kh$$.filter($c$$=>$c$$.ten_nvt3==$nh_vt3$$.ten_nvt3).forEach($c$$=>{$c$$.ma_nvt3=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu 3",
25
+ $nh_vt3$$.ten_nvt3);const $new_nvt$$=await global.getModel("dmnvt").create($custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$);$dvts_kh$$.filter($c$$=>$c$$.ten_nvt3==$nh_vt3$$.ten_nvt3).forEach($c$$=>{$c$$.ma_nvt3=$new_nvt$$._id.toString()})}}}if($model$$.modelName!=="dmdvt"){$dvts_kh$$=$data$$.filter($r$$=>$r$$.ma_dvt);$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_dvt)));$dvts_kh$$=
26
+ await $dvts_kh$$.asyncGroupBy(["ma_dvt"],[]);for(var $dvt_vts$$ of $dvts_kh$$)$dvt_vts$$.id_app=$id_app$$,$dvt_vts$$.ten_dvt=$dvt_vts$$.ma_dvt,$dvt_vts$$.status=!0,$dvt_vts$$.user_created=$user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_vts$$.ma_dvt,id_app:$id_app$$}).lean()||(Logger.info("[importHanlder] create dvt",$dvt_vts$$),await global.getModel("dmdvt").create($dvt_vts$$))}if($model$$.modelName!=="dmvt"){$dvt_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt);$model$$.schema.paths.details&&
27
+ ($dvt_vts$$=$dvt_vts$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));$dvt_vts$$=$dvt_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}));$dvt_vts$$=await $dvt_vts$$.asyncGroupBy("ma_vt ten_vt ma_dvt ma_nvt ten_nvt ma_nvt2 ten_nvt2 ma_nvt3 ten_nvt3".split(" "),
28
+ []);$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(var $limit_vt$$ of $dvt_vts$$)$limit_vt$$.id_app=
29
+ $id_app$$,$limit_vt$$.tk_vt=$dvts_kh$$,$limit_vt$$.tk_gv=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$,$limit_vt$$.tk_dt=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$,$limit_vt$$.status=!0,$limit_vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$limit_vt$$.ma_vt,id_app:$id_app$$}).lean()||(Logger.info("[importHanlder] create product",$limit_vt$$),await global.getModel("dmvt").create($limit_vt$$),$model$$.modelName!=="dmqddvt"&&await global.getModel("dmqddvt").create({id_app:$id_app$$,
30
+ status:!0,ma_vt:$limit_vt$$.ma_vt,ma_dvt:$limit_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"});Logger.error("[importHanlder] begin import",$ctrl$$.name);$limit_vt$$=100;if($ctrl$$.options?.unique_imp||$ctrl$$.unique&&$ctrl$$.unique.length>0)$limit_vt$$=1;async.mapLimit($data$$,
31
+ $limit_vt$$,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(),$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$$],
32
+ Logger.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$$=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&&
33
+ $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$$.options?.unique_imp||$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$$)>=
34
+ 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:"+$ctrl$$.unique.join(","));$ctrl$$.require_id_app!=0&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;await executeInTransaction(()=>new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{const $rss$$=await $ctrl$$.model.find($query$$).inTxn().lean();
35
+ if($rss$$.length>1)return $reject$$("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");let $foundObject$$;$rss$$.length===1&&($foundObject$$=$rss$$[0]);$foundObject$$?($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),Logger.info("[importHanlder] update..."),update($user$$,
36
+ $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$$})}Logger.info("[importHanlder] updated successfull");$resolve$$()},"import",$options$$.req,"import")):(Logger.info("[importHanlder] create..."),create($user$$,$ctrl$$,$row$$,async function($e$jscomp$4_i$$,$_e$$){if($e$jscomp$4_i$$)$_e$$=$e$jscomp$4_i$$,_.isArray($_e$$)||($_e$$=[{error:$e$jscomp$4_i$$.error||$e$jscomp$4_i$$,
37
37
  code:$e$jscomp$4_i$$.code}]),$rows_error$$.push({row:$row$$,error:$_e$$});else if($row$$._id_new__=$_e$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$_e$$.id_app,old_id:$old_id$$},{id_app:$_e$$.id_app,old_id:$old_id$$,new_id:$_e$$._id.toString()},{new:!0,upsert:!0}),$e$jscomp$4_i$$=0;$e$jscomp$4_i$$<$data$$.length;$e$jscomp$4_i$$++){const $_r$$=$data$$[$e$jscomp$4_i$$];for(let $key$$ in $_r$$)$key$$!="_id"&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=
38
38
  $_e$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$_e$$._id.toString()}))}$resolve$$()},$row$$._id,$options$$.req,"import"))})})).then(()=>{$callback$$()}).catch($error$$=>{Logger.error("[importHanlder] L\u1ed7i t\u00ecm object:",$error$$.message);$callback$$($error$$)})}else await executeInTransaction(()=>new Promise($resolve$$=>{create($user$$,$ctrl$$,$row$$,async function($e$jscomp$5_i$$,$_e$jscomp$2_new_row$$){if($e$jscomp$5_i$$)Logger.error("[importHanlder] error import data, creating...",
39
39
  $e$jscomp$5_i$$),$_e$jscomp$2_new_row$$=$e$jscomp$5_i$$,_.isArray($_e$jscomp$2_new_row$$)||($_e$jscomp$2_new_row$$=[{error:$e$jscomp$5_i$$.error||$e$jscomp$5_i$$,code:$e$jscomp$5_i$$.code}]),$rows_error$$.push({error:$_e$jscomp$2_new_row$$});else if($row$$._id_new__=$_e$jscomp$2_new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$_e$jscomp$2_new_row$$.id_app,old_id:$old_id$$},{id_app:$_e$jscomp$2_new_row$$.id_app,old_id:$old_id$$,new_id:$_e$jscomp$2_new_row$$._id.toString()},
@@ -30,10 +30,10 @@ for(var $$condition_k$$ in $ctrl$$.keyValues)$obj$$[$$condition_k$$]=$ctrl$$.key
30
30
  0).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,$obj$$);if($ctrl$$.saving)try{await $ctrl$$.saving($user$$,$obj$$,$_action$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$ctrl$$.emit("saving",$obj$$);$current_obj$$&&($obj$$._id=$current_obj$$._id);let $obj_created$$,$error$$;$data$$.$condition&&($$condition_k$$=$data$$.$condition,$$condition_k$$._id=
31
31
  $obj$$._id,await $model$$.findOne($$condition_k$$)||($error$$=ERRORS.ERR_CAN_NOT_UPDATE),delete $data$$.$condition);if(!$error$$)try{delete $obj$$.__v,$obj_created$$=await $obj$$.save(),$ctrl$$.populate&&($obj_created$$=$model$$.findById($obj_created$$._id).inTxn(),$obj_created$$=await $ctrl$$.populate($obj_created$$))}catch($e$$){if($error$$=$e$$,$ctrl$$.options.onErrorSave)$ctrl$$.options.onErrorSave($user$$,$obj$$,$error$$,$_action$$)}if($error$$){let $msgErrors$$=[];for(let $k$$ in $error$$.errors)$msgErrors$$.push($error$$.errors[$k$$].message);
32
32
  $msgErrors$$.length==0&&($msgErrors$$=$error$$.message);$msgErrors$$||=JSON.stringify($error$$);if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&Logger.error("onErrorUpdating",$e$$);$_callback$$({error:$msgErrors$$,code:ERRORS.ERR_CAN_NOT_UPDATE_CODE},void 0)},$current_obj$$);else $callback$$({error:$msgErrors$$,code:ERRORS.ERR_CAN_NOT_UPDATE_CODE})}else postData($obj_created$$,$ctrl$$,function($msgError$$){if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,
33
- $obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0);else{const $obj_created_cv$$=convertObjectIdsToStrings($obj_created$$.toObject());onAfterCommit(async()=>{$ctrl$$.emit("saved",$obj_created$$,$current_obj$$);$ctrl$$.emit("updated",$obj_created$$);global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj_created$$);runWebhooks($ctrl$$,$obj_created_cv$$,$_action$$.toUpperCase(),
34
- $voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$_action$$);$req$$&&setImmediate(()=>{global.getModel("log").create({id_app:$user$$.current_id_app,id_func:$ctrl$$.name,action:$_action$$.toUpperCase(),data:{oldData:$current_obj$$,newData:$data$$,id:$obj$$._id.toString()}},$user$$.email,$req$$.user_agent,$req$$)})});$_callback$$(null,$obj_created_cv$$)}},{req:$req$$})})},function($obj$$,$callback$$){Logger.info("[updateHanlder] X\u1eed l\u00fd sau khi updated...");$ctrl$$.updated?
35
- $ctrl$$.updated($user$$,$obj$$,function($error$$,$obj$$){if($error$$)return Logger.error("[updateHandler] [saved] error when saved",$error$$),$callback$$($error$$);$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):$callback$$(null,$obj$$)},$current_obj$$):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):
36
- $callback$$(null,$obj$$)},function($obj$$,$callback$$){Logger.info("[updateHanlder] requestApprove...");$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,$callback$$){Logger.info("[updateHanlder] T\u1ea1o view...");setImmediate(async()=>{let $approve_data$$;$obj$$.trang_thai!=void 0&&($approve_data$$=await global.getModel("approve").findOne({id_ct:$obj_created_cv$$._id.toString(),"update_after_approve.data.trang_thai":$obj_created_cv$$.trang_thai.toString()}).lean(),
33
+ $obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0);else{const $obj_created_cv$$=convertObjectIdsToStrings($obj_created$$.toObject());onAfterCommit(async()=>{$ctrl$$.emit("saved",$obj_created$$,$current_obj$$);$ctrl$$.emit("updated",$obj_created$$);$model$$.modelName!="customer"&&global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj_created$$);runWebhooks($ctrl$$,$obj_created_cv$$,
34
+ $_action$$.toUpperCase(),$voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$_action$$);$req$$&&setImmediate(()=>{global.getModel("log").create({id_app:$user$$.current_id_app,id_func:$ctrl$$.name,action:$_action$$.toUpperCase(),data:{oldData:$current_obj$$,newData:$data$$,id:$obj$$._id.toString()}},$user$$.email,$req$$.user_agent,$req$$)})});$_callback$$(null,$obj_created_cv$$)}},{req:$req$$})})},function($obj$$,$callback$$){Logger.info("[updateHanlder] X\u1eed l\u00fd sau khi updated...");
35
+ $ctrl$$.updated?$ctrl$$.updated($user$$,$obj$$,function($error$$,$obj$$){if($error$$)return Logger.error("[updateHandler] [saved] error when saved",$error$$),$callback$$($error$$);$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):$callback$$(null,$obj$$)},$current_obj$$):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,
36
+ $obj$$)}):$callback$$(null,$obj$$)},function($obj$$,$callback$$){Logger.info("[updateHanlder] requestApprove...");$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,$callback$$){Logger.info("[updateHanlder] T\u1ea1o view...");setImmediate(async()=>{let $approve_data$$;$obj$$.trang_thai!=void 0&&($approve_data$$=await global.getModel("approve").findOne({id_ct:$obj_created_cv$$._id.toString(),"update_after_approve.data.trang_thai":$obj_created_cv$$.trang_thai.toString()}).lean(),
37
37
  !$approve_data$$||$approve_data$$.user_approved||$approve_data$$.user_denied?$approve_data$$=null:($approve_data$$.user_approved=$req$$.user.email,$approve_data$$.user_approved_name=$req$$.user.name,$approve_data$$.date_approved=new Date,await global.getModel("approve").updateOne({_id:$approve_data$$._id},$approve_data$$)));$req$$&&$_action$$!="import"&&$req$$.query.return_data!==!1?($obj_created_cv$$.collection_name=$ctrl$$.collection_name,(await permission.getFieldNotRight($obj_created_cv$$.id_app,
38
38
  $user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $obj_created_cv$$[$f$$]}),$ctrl$$.onView($user$$,[$obj_created_cv$$],function($error$$,$viewValue$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$approve_data$$&&onAfterCommit(async()=>{global.getModel("approve").sendNotifyApproved($approve_data$$,$req$$.query.access_token);let $channel$$=`${$ctrl$$.name.toLowerCase()}-${"request_approved"}`;$obj$$.id_app&&($channel$$=`${$channel$$}-${$obj$$.id_app}`);let $message$$=JSON.stringify($viewValue$$[0]);
39
39
  try{await global.clientRedis.publish($channel$$,$message$$)}catch($e$$){Logger.error("[approve] [sendNotifyApproved] fire event","request_approved",$e$$)}});$callback$$(null,$viewValue$$[0])})},{req:$req$$})):(Logger.info("[updateHanlder] tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3 sau khi import..."),$callback$$(null,{_id:$obj_created_cv$$._id}))})}],($e$$,$rs$$)=>{$e$$?(Logger.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],
@@ -1,14 +1,16 @@
1
1
  const handlers=require("../../controllers/handlers"),crypto=require("crypto"),async=require("async");
2
- async function dataHandler($condition_flowState$$,$node$$,$payload$$,$abortSignal_code$$){var $listInfo_nodeInstanceId$$=`${$condition_flowState$$.instanceId}-${$node$$.id}`;if($abortSignal_code$$.aborted)throw Logger.info(`[${$listInfo_nodeInstanceId$$}] data node aborted before logging.`),new DOMException("Aborted by signal","AbortError");$abortSignal_code$$=$node$$.data?.code;if(!$abortSignal_code$$)throw"Ch\u01b0a cung c\u1ea5p m\u00e3 ch\u1ee9ng t\u1eeb ho\u1eb7c danh m\u1ee5c";$listInfo_nodeInstanceId$$=
3
- await global.getModel("listinfo").findOne({code:$abortSignal_code$$});if(!$listInfo_nodeInstanceId$$)throw"M\u00e3 ch\u1ee9ng t\u1eeb/danh m\u1ee5c kh\u00f4ng t\u1ed3n t\u1ea1i";let $ctrl$$=global.controllers[($listInfo_nodeInstanceId$$.api_code||$abortSignal_code$$).toUpperCase()];if(!$ctrl$$)throw"Ch\u1ee9ng t\u1eeb/danh m\u1ee5c ch\u01b0a \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o";const $id_app$$=$condition_flowState$$.flowDefinition.id_app,$email_created$$=$condition_flowState$$.flowDefinition.user_created,
4
- $app_info$$=await global.getModel("app").findOne({_id:$id_app$$}).lean();if(!$app_info$$)throw"C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i";switch($node$$?.data?.action){case "create":return new Promise(($resolve$$,$reject$$)=>{let $datas$$=$payload$$?.data||$payload$$||[];Array.isArray($datas$$)||($datas$$=[$datas$$]);$datas$$=$datas$$.filter($d$$=>typeof $d$$=="object");$datas$$=$datas$$.length>0?$datas$$.map($d$$=>({...($node$$?.data?.data||{}),...$d$$})):[$node$$?.data?.data||{}];async.map($datas$$,
5
- ($_req_data$$,$callback$$)=>{let $req$$={user:{email:$email_created$$,current_app_info:$app_info$$,current_id_app:$id_app$$},query:{id_app:$id_app$$},body:$_req_data$$,params:{},headers:{}};const {query:$query$$,user:$user$$,params:$params$$,files:$files$$,body:$body$$}=$req$$;try{$_req_data$$={handler:"createHandler",query:$query$$,data:$body$$,user:$user$$,params:$params$$,user_agent:"flow",ip:"",files:$files$$,originalUrl:""},global.inputMainPool?global.inputMainPool.exec({req:$_req_data$$,module:$ctrl$$.name.toUpperCase(),
6
- configs:JSON.stringify(configs)},$obj_created_response$$=>{if($obj_created_response$$.error)return $callback$$({error:$obj_created_response$$.error.error||$obj_created_response$$.error.message||$obj_created_response$$.error,message:$obj_created_response$$.message||$obj_created_response$$.error.error||$obj_created_response$$.error.message||$obj_created_response$$.error});({obj_created:$obj_created_response$$}=$obj_created_response$$.result);$ctrl$$.pushNotification($obj_created_response$$,"new",null,
7
- null,{exclude_token:($req$$.query||{}).access_token});$callback$$(null,$obj_created_response$$)}):handlers.createHandler($ctrl$$,$_req_data$$,($e_obj_created$$,$returnvalue$$)=>{if($e_obj_created$$)return $callback$$($e_obj_created$$);({obj_created:$e_obj_created$$}=$returnvalue$$);$ctrl$$.pushNotification($e_obj_created$$,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$callback$$(null,$e_obj_created$$)})}catch($e$$){$callback$$($e$$)}},($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);
2
+ async function dataHandler($flowState_query$$,$node$$,$payload$$,$abortSignal_code$$){var $listInfo_nodeInstanceId$$=`${$flowState_query$$.instanceId}-${$node$$.id}`;if($abortSignal_code$$.aborted)throw Logger.info(`[${$listInfo_nodeInstanceId$$}] data node aborted before logging.`),new DOMException("Aborted by signal","AbortError");$abortSignal_code$$=$node$$.data?.code;if(!$abortSignal_code$$)throw"Ch\u01b0a cung c\u1ea5p m\u00e3 ch\u1ee9ng t\u1eeb ho\u1eb7c danh m\u1ee5c";$listInfo_nodeInstanceId$$=
3
+ await global.getModel("listinfo").findOne({code:$abortSignal_code$$});if(!$listInfo_nodeInstanceId$$)throw"M\u00e3 ch\u1ee9ng t\u1eeb/danh m\u1ee5c kh\u00f4ng t\u1ed3n t\u1ea1i";let $ctrl$$=global.controllers[($listInfo_nodeInstanceId$$.api_code||$abortSignal_code$$).toUpperCase()];if(!$ctrl$$)throw"Ch\u1ee9ng t\u1eeb/danh m\u1ee5c ch\u01b0a \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o";const $id_app$$=$flowState_query$$.flowDefinition.id_app,$email_created$$=$flowState_query$$.flowDefinition.user_created,
4
+ $app_info$$=await global.getModel("app").findOne({_id:$id_app$$}).lean();if(!$app_info$$)throw"C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i";const $action$$=$node$$?.data?.action;switch($action$$){case "create":return new Promise(($resolve$$,$reject$$)=>{let $datas$$=$payload$$?.data||$payload$$||[];Array.isArray($datas$$)||($datas$$=[$datas$$]);$datas$$=$datas$$.filter($d$$=>typeof $d$$=="object");$datas$$=$datas$$.length>0?$datas$$.map($d$$=>({...($node$$?.data?.data||{}),...$d$$})):[$node$$?.data?.data||
5
+ {}];async.map($datas$$,($_req_data$$,$callback$$)=>{let $req$$={user:{email:$email_created$$,current_app_info:$app_info$$,current_id_app:$id_app$$},query:{id_app:$id_app$$},body:$_req_data$$,params:{},headers:{}};const {query:$query$$,user:$user$$,params:$params$$,files:$files$$,body:$body$$}=$req$$;try{$_req_data$$={handler:"createHandler",query:$query$$,data:$body$$,user:$user$$,params:$params$$,user_agent:"flow",ip:"",files:$files$$,originalUrl:""},global.inputMainPool?global.inputMainPool.exec({req:$_req_data$$,
6
+ module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$obj_created_response$$=>{if($obj_created_response$$.error)return $callback$$({error:$obj_created_response$$.error.error||$obj_created_response$$.error.message||$obj_created_response$$.error,message:$obj_created_response$$.message||$obj_created_response$$.error.error||$obj_created_response$$.error.message||$obj_created_response$$.error});({obj_created:$obj_created_response$$}=$obj_created_response$$.result);$ctrl$$.pushNotification($obj_created_response$$,
7
+ "new",null,null,{exclude_token:($req$$.query||{}).access_token});$callback$$(null,$obj_created_response$$)}):handlers.createHandler($ctrl$$,$_req_data$$,($e_obj_created$$,$returnvalue$$)=>{if($e_obj_created$$)return $callback$$($e_obj_created$$);({obj_created:$e_obj_created$$}=$returnvalue$$);$ctrl$$.pushNotification($e_obj_created$$,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$callback$$(null,$e_obj_created$$)})}catch($e$$){$callback$$($e$$)}},($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);
8
8
  Array.isArray($payload$$?.data)?$resolve$$($rs$$):$resolve$$($rs$$.length==1?$rs$$[0]:$rs$$)})});case "update":return new Promise(($resolve$$,$reject$$)=>{let $datas$$=$payload$$?.data||$payload$$||[];Array.isArray($datas$$)||($datas$$=[$datas$$]);$datas$$=$datas$$.filter($d$$=>typeof $d$$=="object");$datas$$=$datas$$.length>0?$datas$$.map($d$$=>({...($node$$?.data?.data||{}),...$d$$})):[$node$$?.data?.data||{}];async.map($datas$$,($data$$,$callback$$)=>{const $id$$=$data$$._id;if(!$id$$)return Logger.error("[dataNode] thi\u1ebfu _id trong data c\u1ea7n c\u1eadp nh\u1eadt",
9
9
  JSON.stringify($data$$,null,2)),$callback$$("Thi\u1ebfu _id trong d\u1eef li\u1ec7u c\u1ea7n c\u1eadp nh\u1eadt");let $req$$={user:{email:$email_created$$,current_app_info:$app_info$$,current_id_app:$id_app$$},query:{id_app:$id_app$$},body:$data$$,params:{},headers:{}};const {query:$query$$,user:$user$$,params:$params$$,files:$files$$,body:$body$$}=$req$$;try{const $_req$$={handler:"updateHandler",query:$query$$,_action:"update",id:$id$$,data:$data$$,body:$body$$,user:$user$$,params:$params$$,user_agent:"flow",
10
10
  ip:"",files:$files$$,originalUrl:$req$$.originalUrl};global.inputMainPool?global.inputMainPool.exec({req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $callback$$({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error});let {new_obj:$new_obj$$,old_obj:$old_obj$$}=$response$$.result;$ctrl$$.pushNotification($new_obj$$,
11
11
  "update",$old_obj$$,null,{exclude_token:$req$$.query.access_token});$callback$$(null,$new_obj$$)}):handlers.updateHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $callback$$({error:$e$$.error||$e$$.message||$e$$});let {new_obj:$new_obj$$,old_obj:$old_obj$$}=$returnvalue$$;$ctrl$$.pushNotification($new_obj$$,"update",$old_obj$$,null,{exclude_token:$req$$.query.access_token});$callback$$(null,$new_obj$$)})}catch($e$$){$callback$$($e$$)}},($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);
12
- Array.isArray($payload$$?.data)?$resolve$$($rs$$):$resolve$$($rs$$.length==1?$rs$$[0]:$rs$$)})});case "list":$condition_flowState$$=$node$$?.data?.condition||{};$payload$$?.condition&&($condition_flowState$$={...$condition_flowState$$,...$payload$$?.condition});$condition_flowState$$.id_app=$id_app$$;let $req$$={user:{email:$email_created$$,current_app_info:$app_info$$,current_id_app:$id_app$$},query:{q:$condition_flowState$$,type_data:"json_export"},body:{},params:{},headers:{}};return new Promise(($resolve$$,
13
- $reject$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$}=$req$$;try{const $_req$$={handler:"findHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:"flow",ip:""};if(global.inputMainPool){const $id_task$$=`task-find-${crypto.randomBytes(20).toString("hex")}`;global.inputMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{$response$$.error?$reject$$({error:$response$$.error.error||
14
- $response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error}):$resolve$$(($response$$.result||{}).result||$response$$.result)})}else handlers.findHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($returnvalue$$.result||$returnvalue$$)})}catch($e$$){$reject$$($e$$)}});default:throw"Action kh\u00f4ng h\u1ee3p l\u1ec7";}}module.exports=dataHandler;
12
+ Array.isArray($payload$$?.data)?$resolve$$($rs$$):$resolve$$($rs$$.length==1?$rs$$[0]:$rs$$)})});case "count":case "list":let $condition$$={...($payload$$?.condition||$payload$$||{})};$node$$?.data?.handle_condition_script&&($condition$$=(new Function("payload","condition",$node$$?.data?.handle_condition_script))($payload$$,$condition$$));$condition$$.id_app=$id_app$$;$flowState_query$$=$payload$$?.query||{};$action$$=="count"&&($flowState_query$$.count=1);let $req$$={user:{email:$email_created$$,
13
+ current_app_info:$app_info$$,current_id_app:$id_app$$},query:{q:$condition$$,type_data:"json_export",...$flowState_query$$},body:{},params:{},headers:{}};return new Promise(($resolve$$,$reject$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$}=$req$$;try{const $_req$$={handler:"findHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:"flow",ip:""};if(global.inputMainPool){const $id_task$$=`task-find-${crypto.randomBytes(20).toString("hex")}`;global.inputMainPool.exec({id_task:$id_task$$,
14
+ req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$data$jscomp$2_response$$=>{$data$jscomp$2_response$$.error?$reject$$({error:$data$jscomp$2_response$$.error.error||$data$jscomp$2_response$$.error.message||$data$jscomp$2_response$$.error,message:$data$jscomp$2_response$$.message||$data$jscomp$2_response$$.error.error||$data$jscomp$2_response$$.error.message||$data$jscomp$2_response$$.error}):($data$jscomp$2_response$$=($data$jscomp$2_response$$.result||{}).result||$data$jscomp$2_response$$.result,
15
+ $node$$?.data?.handle_data_script&&($data$jscomp$2_response$$=(new Function("payload","condition","data",$node$$?.data?.handle_data_script))($payload$$,$condition$$,$data$jscomp$2_response$$)),$action$$=="count"&&($data$jscomp$2_response$$.condition=$condition$$),$resolve$$($data$jscomp$2_response$$))})}else handlers.findHandler($ctrl$$,$_req$$,($data$jscomp$3_e$$,$returnvalue$$)=>{if($data$jscomp$3_e$$)return $reject$$($data$jscomp$3_e$$);$data$jscomp$3_e$$=$returnvalue$$.result||$returnvalue$$;
16
+ $node$$?.data?.handle_data_script&&($data$jscomp$3_e$$=(new Function("payload","condition","data",$node$$?.data?.handle_data_script))($payload$$,$condition$$,$data$jscomp$3_e$$));$action$$=="count"&&($data$jscomp$3_e$$.condition=$condition$$);$resolve$$($data$jscomp$3_e$$)})}catch($e$$){$reject$$($e$$)}});default:throw"Action kh\u00f4ng h\u1ee3p l\u1ec7";}}module.exports=dataHandler;
@@ -5,7 +5,8 @@ $err$$);$isSubscribed$$=$isConnected$$=!1;$abortSignal$$.aborted||$flowState$$.n
5
5
  $err$$),$updateNodeStatus$$($instanceId$$,$nodeId$$,"failed",`Redis subscribe error: ${$err$$.message}`,void 0,"subscribe_error"),$isSubscribed$$=!1):($isSubscribed$$=!0,Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Subscribed to channel '${$channel$$}'. Waiting for messages... (Count: ${$count$$})`),$abortSignal$$.aborted||$flowState$$.nodes[$nodeId$$]?.status==="active_listening"||$updateNodeStatus$$($instanceId$$,$nodeId$$,"active_listening",void 0,void 0,"initial_listen"))})});$subscriber$$.on("reconnecting",
6
6
  ()=>{Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Reconnecting to Redis for channel '${$channel$$}'...`);$isSubscribed$$=$isConnected$$=!1;$abortSignal$$.aborted||$flowState$$.nodes[$nodeId$$]?.status==="active_listening"||$updateNodeStatus$$($instanceId$$,$nodeId$$,"active_listening","Reconnecting...",void 0,"reconnecting")});$subscriber$$.on("message",($subscribedChannel$$,$message$$)=>{if($abortSignal$$.aborted)Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Message received on '${$subscribedChannel$$}' but flow is aborted. Ignoring.`);
7
7
  else if(!$isConnected$$||!$isSubscribed$$)Logger.warn(`[${$instanceId$$}] ${$nodeLabel$$}: Message received on '${$subscribedChannel$$}' but Redis connection/subscription is not active. Ignoring.`);else if($subscribedChannel$$===$channel$$){var $triggerId$$=`redis_${$subscribedChannel$$}_${Date.now()}_${crypto.randomBytes(2).toString("hex")}`,$triggerContext$$=`|${$triggerId$$}`;Logger.info(`[${$instanceId$$}${$triggerContext$$}] ${$nodeLabel$$}: Message received from Redis channel '${$subscribedChannel$$}'.`);
8
- if($outputFormat$$==="json")try{var $eventPayload$$=JSON.parse($message$$)}catch($e$$){Logger.warn(`[${$instanceId$$}${$triggerContext$$}] ${$nodeLabel$$}: Failed to parse message as JSON. Using raw string. Error:`,$e$$.message,"Message:",$message$$),$eventPayload$$=$message$$}else $eventPayload$$=$message$$;$updateNodeStatus$$($instanceId$$,$nodeId$$,"running",void 0,$eventPayload$$,$triggerId$$);$triggerDownstreamNodesInternal$$($instanceId$$,$nodeId$$,$eventPayload$$,$triggerId$$);$updateNodeStatus$$($instanceId$$,
9
- $nodeId$$,"completed",$eventPayload$$,void 0,$triggerId$$);$flowState$$.nodes[$nodeId$$]?.status==="active_listening"||$abortSignal$$.aborted||$updateNodeStatus$$($instanceId$$,$nodeId$$,"active_listening",void 0,void 0,null)}});$abortSignal$$.addEventListener("abort",()=>{Logger.info(`\u26a0\ufe0f [${$instanceId$$}] ${$nodeLabel$$}: Abort signal received. Unsubscribing and quitting Redis for channel '${$channel$$}'.`);try{$subscriber$$.connected&&$isSubscribed$$?$subscriber$$.unsubscribe($channel$$,
10
- ($err$$,$reply$$)=>{$err$$?Logger.error(`[${$instanceId$$}] ${$nodeLabel$$}: Error during Redis unsubscribe for channel '${$channel$$}':`,$err$$):Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Unsubscribed from Redis channel '${$channel$$}'. Reply: ${$reply$$}`);$subscriber$$.quit(($quitErr$$,$quitReply$$)=>{$quitErr$$?Logger.error(`[${$instanceId$$}] ${$nodeLabel$$}: Error quitting Redis connection for channel '${$channel$$}':`,$quitErr$$):Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Quit Redis connection for channel '${$channel$$}'. Reply: ${$quitReply$$}`)})}):
11
- $subscriber$$.connected?($subscriber$$.quit(),Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Redis subscriber was connected but not subscribed, quitting.`)):Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Redis subscriber was not connected.`)}catch($cleanupError$$){Logger.error(`[${$instanceId$$}] ${$nodeLabel$$}: Exception during Redis cleanup for channel '${$channel$$}':`,$cleanupError$$)}},{once:!0});return Promise.resolve({repeating:!0,nodeType:"redis_listening"})}module.exports=eventHandler;
8
+ if($outputFormat$$==="json")try{var $eventPayload$$=JSON.parse($message$$)}catch($e$$){Logger.warn(`[${$instanceId$$}${$triggerContext$$}] ${$nodeLabel$$}: Failed to parse message as JSON. Using raw string. Error:`,$e$$.message,"Message:",$message$$),$eventPayload$$=$message$$}else $eventPayload$$=$message$$;$node$$?.data?.handle_data_script&&($eventPayload$$=(new Function("data",$node$$?.data?.handle_data_script))($eventPayload$$));$updateNodeStatus$$($instanceId$$,$nodeId$$,"running",void 0,$eventPayload$$,
9
+ $triggerId$$);$triggerDownstreamNodesInternal$$($instanceId$$,$nodeId$$,$eventPayload$$,$triggerId$$);$updateNodeStatus$$($instanceId$$,$nodeId$$,"completed",$eventPayload$$,void 0,$triggerId$$);$flowState$$.nodes[$nodeId$$]?.status==="active_listening"||$abortSignal$$.aborted||$updateNodeStatus$$($instanceId$$,$nodeId$$,"active_listening",void 0,void 0,null)}});$abortSignal$$.addEventListener("abort",()=>{Logger.info(`\u26a0\ufe0f [${$instanceId$$}] ${$nodeLabel$$}: Abort signal received. Unsubscribing and quitting Redis for channel '${$channel$$}'.`);
10
+ try{$subscriber$$.connected&&$isSubscribed$$?$subscriber$$.unsubscribe($channel$$,($err$$,$reply$$)=>{$err$$?Logger.error(`[${$instanceId$$}] ${$nodeLabel$$}: Error during Redis unsubscribe for channel '${$channel$$}':`,$err$$):Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Unsubscribed from Redis channel '${$channel$$}'. Reply: ${$reply$$}`);$subscriber$$.quit(($quitErr$$,$quitReply$$)=>{$quitErr$$?Logger.error(`[${$instanceId$$}] ${$nodeLabel$$}: Error quitting Redis connection for channel '${$channel$$}':`,
11
+ $quitErr$$):Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Quit Redis connection for channel '${$channel$$}'. Reply: ${$quitReply$$}`)})}):$subscriber$$.connected?($subscriber$$.quit(),Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Redis subscriber was connected but not subscribed, quitting.`)):Logger.info(`[${$instanceId$$}] ${$nodeLabel$$}: Redis subscriber was not connected.`)}catch($cleanupError$$){Logger.error(`[${$instanceId$$}] ${$nodeLabel$$}: Exception during Redis cleanup for channel '${$channel$$}':`,
12
+ $cleanupError$$)}},{once:!0});return Promise.resolve({repeating:!0,nodeType:"redis_listening"})}module.exports=eventHandler;
@@ -6,15 +6,15 @@ $operator_type$$);return!1;case "regex":try{return(new RegExp($compareValue_valu
6
6
  case "==":return $actualValue$$==$compareValue_valueToCompareStr$$;case "!=":return $actualValue$$!=$compareValue_valueToCompareStr$$;case ">":case "<":case ">=":case "<=":$numActual_strActualForStringOps$$=Number($actualValue$$);const $numCompare$$=Number($compareValue_valueToCompareStr$$);return isNaN($numActual_strActualForStringOps$$)||isNaN($numCompare$$)?(Logger.warn(`Switch Node: Cannot perform numeric comparison for operator '${$operator_type$$}' with values:`,$actualValue$$,$compareValue_valueToCompareStr$$),
7
7
  !1):$operator_type$$===">"?$numActual_strActualForStringOps$$>$numCompare$$:$operator_type$$==="<"?$numActual_strActualForStringOps$$<$numCompare$$:$operator_type$$===">="?$numActual_strActualForStringOps$$>=$numCompare$$:$numActual_strActualForStringOps$$<=$numCompare$$;case "contains":return $numActual_strActualForStringOps$$.includes(String($compareValue_valueToCompareStr$$));case "notcontains":return!$numActual_strActualForStringOps$$.includes(String($compareValue_valueToCompareStr$$));case "startsWith":return $numActual_strActualForStringOps$$.startsWith(String($compareValue_valueToCompareStr$$));
8
8
  case "endsWith":return $numActual_strActualForStringOps$$.endsWith(String($compareValue_valueToCompareStr$$));default:return Logger.warn("Switch Node: Unknown or unhandled operator:",$operator_type$$),!1}}
9
- async function switchHandler($flowState$$,$node_outgoingEdges$$,$payload$$,$abortSignal_valueToCheck$$,$actualPath_engineContext_nodeLabel_propertyPath$$){const {updateNodeStatus:$updateNodeStatus$$,runNode:$runNode$$,cancelBranch:$cancelBranch$$}=$actualPath_engineContext_nodeLabel_propertyPath$$;if(typeof $updateNodeStatus$$!=="function"||typeof $runNode$$!=="function"||typeof $cancelBranch$$!=="function")throw Logger.error("Switch Handler Error: Missing required engine functions (updateNodeStatus, runNode, cancelBranch) in engineContext."),
10
- Error("Switch handler is missing required engine context functions.");const $instanceId$$=$flowState$$.instanceId,$triggerId$$=$payload$$?._triggerId||null,$triggerContext$$=$triggerId$$?`|${$triggerId$$}`:"";$actualPath_engineContext_nodeLabel_propertyPath$$=$node_outgoingEdges$$.data?.name||$node_outgoingEdges$$.id||"Switch Node";const {propertyToCheck:$propertyToCheck$$,rules:$rules$$=[],stopAfterFirstMatch:$stopAfterFirstMatch$$=!0,defaultOutputHandleId:$defaultOutputHandleId$$}=$node_outgoingEdges$$.data;
11
- Logger.info(`[${$instanceId$$}${$triggerContext$$}] ${$actualPath_engineContext_nodeLabel_propertyPath$$}: Executing.`);if($abortSignal_valueToCheck$$.aborted)throw new DOMException("Aborted before switch evaluation","AbortError");if(!$propertyToCheck$$)throw Error(`Switch node (${$node_outgoingEdges$$.id}) is missing 'propertyToCheck'.`);if(!Array.isArray($rules$$))throw Error(`Switch node (${$node_outgoingEdges$$.id}) has invalid 'rules' format.`);$actualPath_engineContext_nodeLabel_propertyPath$$=
12
- String($propertyToCheck$$).trim();$actualPath_engineContext_nodeLabel_propertyPath$$==="payload"?($abortSignal_valueToCheck$$=$payload$$,Logger.info(`[${$instanceId$$}${$triggerContext$$}] Checking entire payload:`,$abortSignal_valueToCheck$$)):$actualPath_engineContext_nodeLabel_propertyPath$$.startsWith("payload.")?($actualPath_engineContext_nodeLabel_propertyPath$$=$actualPath_engineContext_nodeLabel_propertyPath$$.substring(8),$abortSignal_valueToCheck$$=get($payload$$,$actualPath_engineContext_nodeLabel_propertyPath$$),
13
- Logger.info(`[${$instanceId$$}${$triggerContext$$}] Checking property '${$actualPath_engineContext_nodeLabel_propertyPath$$}' within payload. Value:`,$abortSignal_valueToCheck$$)):($abortSignal_valueToCheck$$=get($payload$$,$actualPath_engineContext_nodeLabel_propertyPath$$),Logger.info(`[${$instanceId$$}${$triggerContext$$}] Checking direct property '${$actualPath_engineContext_nodeLabel_propertyPath$$}'. Value:`,$abortSignal_valueToCheck$$));Logger.info(`[${$instanceId$$}${$triggerContext$$}] Checking property '${$propertyToCheck$$}' with value:`,
14
- $abortSignal_valueToCheck$$);const $matchedOutputHandleIds$$=new Set;for(const $rule$$ of $rules$$){const {operator:$operator$$,valueToCompare:$valueToCompare$$,outputHandleId:$outputHandleId$$}=$rule$$;if($operator$$&&$outputHandleId$$&&String($outputHandleId$$).trim()!==""&&compareValues($abortSignal_valueToCheck$$,$operator$$,$valueToCompare$$)&&(Logger.info(`[${$instanceId$$}${$triggerContext$$}] Rule MATCHED! Adding output handle '${$outputHandleId$$}'.`),$matchedOutputHandleIds$$.add($outputHandleId$$),
15
- $stopAfterFirstMatch$$)){Logger.info(`[${$instanceId$$}${$triggerContext$$}] Stopping after first match.`);break}}$matchedOutputHandleIds$$.size===0&&$defaultOutputHandleId$$&&String($defaultOutputHandleId$$).trim()!==""&&(Logger.info(`[${$instanceId$$}${$triggerContext$$}] No rules matched. Using default output handle '${$defaultOutputHandleId$$}'.`),$matchedOutputHandleIds$$.add($defaultOutputHandleId$$));Logger.info(`[${$instanceId$$}${$triggerContext$$}] Final Matched Output Handles:`,Array.from($matchedOutputHandleIds$$));
16
- const $sourceNodeId$$=$node_outgoingEdges$$.id;$node_outgoingEdges$$=$flowState$$.edges.filter($edge$$=>$edge$$.source===$sourceNodeId$$);Logger.info(`[${$instanceId$$}${$triggerContext$$}] All outgoing edges from ${$sourceNodeId$$}:`,$node_outgoingEdges$$);const $edgesToFollow$$=[],$edgesToCancel$$=[];$node_outgoingEdges$$.forEach($edge$$=>{$edge$$.sourceHandle&&$matchedOutputHandleIds$$.has($edge$$.sourceHandle)?$edgesToFollow$$.push($edge$$):$edgesToCancel$$.push($edge$$)});Logger.info(`[${$instanceId$$}${$triggerContext$$}] Edges to follow:`,
17
- $edgesToFollow$$.map($e$$=>`${$e$$.sourceHandle} -> ${$e$$.target}`));Logger.info(`[${$instanceId$$}${$triggerContext$$}] Edges to cancel:`,$edgesToCancel$$.map($e$$=>`${$e$$.sourceHandle||"no_handle"} -> ${$e$$.target}`));$edgesToFollow$$.length>0?$edgesToFollow$$.map($edge$$=>{Logger.info(`[${$instanceId$$}${$triggerContext$$}] Processing edge to target ${$edge$$.target} via handle ${$edge$$.sourceHandle}`);const $targetNodeState$$=$flowState$$.nodes[$edge$$.target];if(!$targetNodeState$$)return Logger.warn(`[${$instanceId$$}${$triggerContext$$}] Edge target ${$edge$$.target} not found.`),
18
- Promise.resolve();Logger.info(`[${$instanceId$$}${$triggerContext$$}] ---> Attempting to set node ${$edge$$.target} to PENDING (before run)`);$updateNodeStatus$$($instanceId$$,$edge$$.target,"pending",void 0,void 0,null);Logger.info(`[${$instanceId$$}${$triggerContext$$}] Calling runNode for target ${$edge$$.target} (from handle ${$edge$$.sourceHandle})...`);return $runNode$$($targetNodeState$$,$payload$$,$instanceId$$,$triggerId$$).catch($error$$=>{Logger.error(`[${$instanceId$$}${$triggerContext$$}] Error starting node ${$edge$$.target} from switch:`,
19
- $error$$);$updateNodeStatus$$($instanceId$$,$edge$$.target,"failed",$error$$.message||String($error$$),void 0,$triggerId$$)})}):Logger.info(`[${$instanceId$$}${$triggerContext$$}] No downstream nodes connected to matched handles.`);$edgesToCancel$$.length>0&&(Logger.info(`[${$instanceId$$}${$triggerContext$$}] Cancelling unused branches...`),$edgesToCancel$$.map($edge$$=>{Logger.info(`[${$instanceId$$}${$triggerContext$$}] Requesting cancellation for branch starting at ${$edge$$.target} (from handle ${$edge$$.sourceHandle||
20
- "no_handle"})`);return $cancelBranch$$($instanceId$$,$edge$$.target,$triggerId$$)}),Logger.info(`[${$instanceId$$}${$triggerContext$$}] Unused branches cancellation requested.`))}module.exports=switchHandler;
9
+ async function switchHandler($flowState$$,$node_outgoingEdges$$,$payload$$,$abortSignal_valueToCheck$$,$engineContext_nodeLabel_propertyPath$$){const {updateNodeStatus:$updateNodeStatus$$,runNode:$runNode$$,cancelBranch:$cancelBranch$$}=$engineContext_nodeLabel_propertyPath$$;if(typeof $updateNodeStatus$$!=="function"||typeof $runNode$$!=="function"||typeof $cancelBranch$$!=="function")throw Logger.error("Switch Handler Error: Missing required engine functions (updateNodeStatus, runNode, cancelBranch) in engineContext."),
10
+ Error("Switch handler is missing required engine context functions.");const $instanceId$$=$flowState$$.instanceId,$triggerId$$=$payload$$?._triggerId||null,$triggerContext$$=$triggerId$$?`|${$triggerId$$}`:"";$engineContext_nodeLabel_propertyPath$$=$node_outgoingEdges$$.data?.name||$node_outgoingEdges$$.id||"Switch Node";const {propertyToCheck:$propertyToCheck$$,rules:$rules$$=[],stopAfterFirstMatch:$stopAfterFirstMatch$$=!0,defaultOutputHandleId:$defaultOutputHandleId$$}=$node_outgoingEdges$$.data;
11
+ Logger.info(`[${$instanceId$$}${$triggerContext$$}] ${$engineContext_nodeLabel_propertyPath$$}: Executing.`);if($abortSignal_valueToCheck$$.aborted)throw new DOMException("Aborted before switch evaluation","AbortError");if(!$propertyToCheck$$)throw Error(`Switch node (${$node_outgoingEdges$$.id}) is missing 'propertyToCheck'.`);if(!Array.isArray($rules$$))throw Error(`Switch node (${$node_outgoingEdges$$.id}) has invalid 'rules' format.`);$engineContext_nodeLabel_propertyPath$$=String($propertyToCheck$$).trim();
12
+ if($engineContext_nodeLabel_propertyPath$$==="payload")$abortSignal_valueToCheck$$=$payload$$,Logger.info(`[${$instanceId$$}${$triggerContext$$}] Checking entire payload:`,$abortSignal_valueToCheck$$);else if($engineContext_nodeLabel_propertyPath$$.startsWith("payload.")){const $actualPath$$=$engineContext_nodeLabel_propertyPath$$.substring(8);$abortSignal_valueToCheck$$=get($payload$$,$actualPath$$);Logger.warn(`[${$instanceId$$}${$triggerContext$$}] Checking property '${$actualPath$$}' within payload. Value:`,
13
+ $abortSignal_valueToCheck$$)}else $abortSignal_valueToCheck$$=get($payload$$,$engineContext_nodeLabel_propertyPath$$),Logger.warn(`[${$instanceId$$}${$triggerContext$$}] Checking direct property '${$engineContext_nodeLabel_propertyPath$$}'. Value:`,$abortSignal_valueToCheck$$);Logger.info(`[${$instanceId$$}${$triggerContext$$}] Checking property '${$propertyToCheck$$}' with value:`,$abortSignal_valueToCheck$$);const $matchedOutputHandleIds$$=new Set;for(const $rule$$ of $rules$$){const {operator:$operator$$,
14
+ valueToCompare:$valueToCompare$$,outputHandleId:$outputHandleId$$}=$rule$$;if($operator$$&&$outputHandleId$$&&String($outputHandleId$$).trim()!=="")if(compareValues($abortSignal_valueToCheck$$,$operator$$,$valueToCompare$$)){if(Logger.info(`[${$instanceId$$}${$triggerContext$$}] Rule MATCHED! Adding output handle '${$outputHandleId$$}'.`),$matchedOutputHandleIds$$.add($outputHandleId$$),$stopAfterFirstMatch$$){Logger.info(`[${$instanceId$$}${$triggerContext$$}] Stopping after first match.`);break}}else Logger.warn(`[${$instanceId$$}${$triggerContext$$}] Rule not MATCH! Adding output handle '${$outputHandleId$$}'.`,
15
+ JSON.stringify({payload:$payload$$,propertyPath:$engineContext_nodeLabel_propertyPath$$,valueToCheck:$abortSignal_valueToCheck$$,operator:$operator$$,valueToCompare:$valueToCompare$$,outputHandleId:$outputHandleId$$},null,2))}$matchedOutputHandleIds$$.size===0&&$defaultOutputHandleId$$&&String($defaultOutputHandleId$$).trim()!==""&&(Logger.info(`[${$instanceId$$}${$triggerContext$$}] No rules matched. Using default output handle '${$defaultOutputHandleId$$}'.`),$matchedOutputHandleIds$$.add($defaultOutputHandleId$$));
16
+ Logger.info(`[${$instanceId$$}${$triggerContext$$}] Final Matched Output Handles:`,Array.from($matchedOutputHandleIds$$));const $sourceNodeId$$=$node_outgoingEdges$$.id;$node_outgoingEdges$$=$flowState$$.edges.filter($edge$$=>$edge$$.source===$sourceNodeId$$);Logger.info(`[${$instanceId$$}${$triggerContext$$}] All outgoing edges from ${$sourceNodeId$$}:`,$node_outgoingEdges$$);const $edgesToFollow$$=[],$edgesToCancel$$=[];$node_outgoingEdges$$.forEach($edge$$=>{$edge$$.sourceHandle&&$matchedOutputHandleIds$$.has($edge$$.sourceHandle)?
17
+ $edgesToFollow$$.push($edge$$):$edgesToCancel$$.push($edge$$)});Logger.info(`[${$instanceId$$}${$triggerContext$$}] Edges to follow:`,$edgesToFollow$$.map($e$$=>`${$e$$.sourceHandle} -> ${$e$$.target}`));Logger.info(`[${$instanceId$$}${$triggerContext$$}] Edges to cancel:`,$edgesToCancel$$.map($e$$=>`${$e$$.sourceHandle||"no_handle"} -> ${$e$$.target}`));$edgesToFollow$$.length>0?$edgesToFollow$$.map($edge$$=>{Logger.info(`[${$instanceId$$}${$triggerContext$$}] Processing edge to target ${$edge$$.target} via handle ${$edge$$.sourceHandle}`);
18
+ const $targetNodeState$$=$flowState$$.nodes[$edge$$.target];if(!$targetNodeState$$)return Logger.warn(`[${$instanceId$$}${$triggerContext$$}] Edge target ${$edge$$.target} not found.`),Promise.resolve();Logger.info(`[${$instanceId$$}${$triggerContext$$}] ---> Attempting to set node ${$edge$$.target} to PENDING (before run)`);$updateNodeStatus$$($instanceId$$,$edge$$.target,"pending",void 0,void 0,null);Logger.info(`[${$instanceId$$}${$triggerContext$$}] Calling runNode for target ${$edge$$.target} (from handle ${$edge$$.sourceHandle})...`);
19
+ return $runNode$$($targetNodeState$$,$payload$$,$instanceId$$,$triggerId$$).catch($error$$=>{Logger.error(`[${$instanceId$$}${$triggerContext$$}] Error starting node ${$edge$$.target} from switch:`,$error$$);$updateNodeStatus$$($instanceId$$,$edge$$.target,"failed",$error$$.message||String($error$$),void 0,$triggerId$$)})}):Logger.info(`[${$instanceId$$}${$triggerContext$$}] No downstream nodes connected to matched handles.`);$edgesToCancel$$.length>0&&(Logger.info(`[${$instanceId$$}${$triggerContext$$}] Cancelling unused branches...`),
20
+ $edgesToCancel$$.map($edge$$=>{Logger.info(`[${$instanceId$$}${$triggerContext$$}] Requesting cancellation for branch starting at ${$edge$$.target} (from handle ${$edge$$.sourceHandle||"no_handle"})`);return $cancelBranch$$($instanceId$$,$edge$$.target,$triggerId$$)}),Logger.info(`[${$instanceId$$}${$triggerContext$$}] Unused branches cancellation requested.`))}module.exports=switchHandler;
@@ -278,6 +278,7 @@ $code$$=$code$$.route_name;$id_app$$&&($code$$=$code$$.replace(":id_app",$id_app
278
278
  <li>
279
279
  Method: <span style='font-weight:450'>POST</span>
280
280
  </li>
281
+
281
282
  <li>
282
283
  Body (row json):
283
284
  <ul>
@@ -307,6 +308,7 @@ $code$$=$code$$.route_name;$id_app$$&&($code$$=$code$$.replace(":id_app",$id_app
307
308
  Headers:
308
309
  <ul>
309
310
  <li>access-token: <a href=${`${$server_url$$}/api-docs-auth`}>Token</a> \u0111\u1ec3 truy c\u1eadp h\u1ec7 th\u1ed1ng.</li>
311
+ <li>Content-Type: application/json</li>
310
312
  </ul>
311
313
  </li>
312
314
  </ul>
@@ -436,6 +438,7 @@ $code$$.code).toUpperCase()];if(!$controller$jscomp$1_route_name$$)return"Kh\u00
436
438
  Headers:
437
439
  <ul>
438
440
  <li>access-token: Token \u0111\u1ec3 truy c\u1eadp h\u1ec7 th\u1ed1ng.</li>
441
+ <li>Content-Type: application/json</li>
439
442
  </ul>
440
443
  </li>
441
444
  <li>
@@ -447,6 +450,173 @@ $code$$.code).toUpperCase()];if(!$controller$jscomp$1_route_name$$)return"Kh\u00
447
450
  </ul>
448
451
  </li>
449
452
  </ul>
453
+
454
+
455
+ <h3>\u0110\u0103ng k\u00fd t\u00e0i kho\u1ea3n</h3>
456
+ API n\u00e0y d\u00f9ng \u0111\u1ec3 \u0111\u0103ng k\u00fd t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng m\u1edbi. Ngo\u00e0i ra, API c\u00f2n h\u1ed7 tr\u1ee3:
457
+ </p>
458
+ <ul>
459
+ <li>T\u1ef1 \u0111\u1ed9ng th\u00eam ng\u01b0\u1eddi d\u00f9ng v\u00e0o m\u1ed9t c\u00f4ng ty (App) c\u00f3 s\u1eb5n</li>
460
+ <li>Ho\u1eb7c kh\u1edfi t\u1ea1o m\u1ed9t c\u00f4ng ty m\u1edbi khi \u0111\u0103ng k\u00fd</li>
461
+ </ul>
462
+
463
+ <h4>Th\u00f4ng tin chung</h4>
464
+ <ul>
465
+ <li>URL: <span style='font-weight:450;background-color:#ddd;padding:5px;border-radius:3px;border:1px solid silver;'>${$server_url$$||""}/signup</span></li>
466
+ <li>Method: POST</li>
467
+ <li>Content-Type: application/json</li>
468
+ </ul>
469
+
470
+ <h4>1. Request Parameters</h4>
471
+
472
+ <h5>Query Parameters (T\u00f9y ch\u1ecdn)</h5>
473
+ <table>
474
+ <tr>
475
+ <th>Tham s\u1ed1</th>
476
+ <th>Ki\u1ec3u</th>
477
+ <th>M\u00f4 t\u1ea3</th>
478
+ </tr>
479
+ <tr>
480
+ <td>g-recaptcha-response</td>
481
+ <td>string</td>
482
+ <td>Token c\u1ee7a Google reCAPTCHA</td>
483
+ </tr>
484
+ <tr>
485
+ <td>once</td>
486
+ <td>boolean</td>
487
+ <td>Token ch\u1ec9 s\u1eed d\u1ee5ng m\u1ed9t l\u1ea7n</td>
488
+ </tr>
489
+ </table>
490
+
491
+ <h5>Header / Cookies (T\u00f9y ch\u1ecdn)</h5>
492
+ <ul>
493
+ <li><strong>Cookie (uid):</strong> Gi\u1edbi h\u1ea1n m\u1ed7i thi\u1ebft b\u1ecb ch\u1ec9 t\u1ea1o 1 t\u00e0i kho\u1ea3n</li>
494
+ <li><strong>User-Agent:</strong> \u0110\u01b0\u1ee3c l\u01b0u log h\u1ec7 th\u1ed1ng</li>
495
+ </ul>
496
+
497
+ <h5>Body Payload</h5>
498
+ <p>C\u00f3 th\u1ec3 g\u1eedi JSON tr\u1ef1c ti\u1ebfp ho\u1eb7c d\u1ea1ng stringified JSON:</p>
499
+
500
+ <table>
501
+ <tr>
502
+ <th>Tr\u01b0\u1eddng</th>
503
+ <th>B\u1eaft bu\u1ed9c</th>
504
+ <th>Ki\u1ec3u</th>
505
+ <th>M\u00f4 t\u1ea3</th>
506
+ </tr>
507
+ <tr>
508
+ <td>email</td>
509
+ <td>C\u00f3</td>
510
+ <td>string</td>
511
+ <td>Email ho\u1eb7c s\u1ed1 \u0111i\u1ec7n tho\u1ea1i VN h\u1ee3p l\u1ec7</td>
512
+ </tr>
513
+ <tr>
514
+ <td>name</td>
515
+ <td>C\u00f3</td>
516
+ <td>string</td>
517
+ <td>H\u1ecd v\u00e0 t\u00ean</td>
518
+ </tr>
519
+ <tr>
520
+ <td>password</td>
521
+ <td>Kh\u00f4ng</td>
522
+ <td>string</td>
523
+ <td>T\u1ed1i thi\u1ec3u 6 k\u00fd t\u1ef1, g\u1ed3m ch\u1eef hoa, ch\u1eef th\u01b0\u1eddng, s\u1ed1</td>
524
+ </tr>
525
+ <tr>
526
+ <td>rePassword</td>
527
+ <td>C\u00f3 (n\u1ebfu c\u00f3 password)</td>
528
+ <td>string</td>
529
+ <td>Ph\u1ea3i kh\u1edbp password</td>
530
+ </tr>
531
+ <tr>
532
+ <td>id_app</td>
533
+ <td>Kh\u00f4ng</td>
534
+ <td>string</td>
535
+ <td>MongoDB ObjectId c\u00f4ng ty</td>
536
+ </tr>
537
+ <tr>
538
+ <td>cty_name</td>
539
+ <td>Kh\u00f4ng</td>
540
+ <td>string</td>
541
+ <td>T\u1ea1o c\u00f4ng ty m\u1edbi</td>
542
+ </tr>
543
+ <tr>
544
+ <td>introduce_code</td>
545
+ <td>Kh\u00f4ng</td>
546
+ <td>string</td>
547
+ <td>M\u00e3 gi\u1edbi thi\u1ec7u</td>
548
+ </tr>
549
+ <tr>
550
+ <td>g-recaptcha-response</td>
551
+ <td>T\u00f9y h\u1ec7 th\u1ed1ng</td>
552
+ <td>string</td>
553
+ <td>Token reCAPTCHA</td>
554
+ </tr>
555
+ <tr>
556
+ <td>email2</td>
557
+ <td>Kh\u00f4ng</td>
558
+ <td>string</td>
559
+ <td>Email ph\u1ee5</td>
560
+ </tr>
561
+ <tr>
562
+ <td>picture</td>
563
+ <td>Kh\u00f4ng</td>
564
+ <td>string</td>
565
+ <td>URL avatar (default: /images/avatar.jpg)</td>
566
+ </tr>
567
+ <tr>
568
+ <td>partner</td>
569
+ <td>Kh\u00f4ng</td>
570
+ <td>string</td>
571
+ <td>ID \u0111\u1ed1i t\u00e1c</td>
572
+ </tr>
573
+ </table>
574
+
575
+ <h4>2. Response</h4>
576
+
577
+ <h5>Th\u00e0nh c\u00f4ng (200)</h5>
578
+ <pre>
579
+ {
580
+ "message": "T\u00e0i kho\u1ea3n \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd th\u00e0nh c\u00f4ng",
581
+ "token": "eyJhbGciOiJIUzI1NiIsInR...",
582
+ "active": true
583
+ }
584
+ </pre>
585
+
586
+ <ul>
587
+ <li><strong>message:</strong> Th\u00f4ng b\u00e1o</li>
588
+ <li><strong>token:</strong> JWT Token</li>
589
+ <li><strong>active:</strong> Tr\u1ea1ng th\u00e1i k\u00edch ho\u1ea1t</li>
590
+ </ul>
591
+
592
+ <h5>L\u1ed7i (400)</h5>
593
+ <pre>
594
+ {
595
+ "error": "N\u1ed9i dung l\u1ed7i chi ti\u1ebft"
596
+ }
597
+ </pre>
598
+
599
+ <h5>C\u00e1c l\u1ed7i th\u01b0\u1eddng g\u1eb7p</h5>
600
+ <ul>
601
+ <li>Kh\u00f4ng c\u00f3 n\u1ed9i dung</li>
602
+ <li>id_app kh\u00f4ng h\u1ee3p l\u1ec7</li>
603
+ <li>Thi\u1ebfu reCAPTCHA</li>
604
+ <li>C\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i</li>
605
+ <li>M\u1ed7i thi\u1ebft b\u1ecb ch\u1ec9 \u0111\u01b0\u1ee3c t\u1ea1o m\u1ed9t t\u00e0i kho\u1ea3n</li>
606
+ <li>Thi\u1ebfu email ho\u1eb7c name</li>
607
+ <li>Sai \u0111\u1ecbnh d\u1ea1ng email/S\u0110T</li>
608
+ <li>M\u1eadt kh\u1ea9u kh\u00f4ng h\u1ee3p l\u1ec7</li>
609
+ <li>T\u00e0i kho\u1ea3n \u0111\u00e3 t\u1ed3n t\u1ea1i</li>
610
+ </ul>
611
+
612
+ <h4>3. Business Logic Quan Tr\u1ecdng</h4>
613
+
614
+ <ol>
615
+ <li><strong>Email vs S\u0110T:</strong> T\u1ef1 \u0111\u1ed9ng trim v\u00e0 lowercase</li>
616
+ <li><strong>Auto Password:</strong> N\u1ebfu kh\u00f4ng g\u1eedi password \u2192 h\u1ec7 th\u1ed1ng t\u1ef1 t\u1ea1o v\u00e0 g\u1eedi email</li>
617
+ <li><strong>Join c\u00f4ng ty:</strong> N\u1ebfu t\u00e0i kho\u1ea3n \u0111\u00e3 t\u1ed3n t\u1ea1i \u2192 th\u00eam v\u00e0o c\u00f4ng ty m\u1edbi thay v\u00ec l\u1ed7i</li>
618
+ <li><strong>B\u1ea3o m\u1eadt:</strong> C\u00f3 rate limit ch\u1ed1ng spam</li>
619
+ </ol>
450
620
  </body>
451
621
  </html>
452
622
  `};module.exports={apiDocs,apiFields,apiReport,apiAuth};
@@ -1,2 +1,3 @@
1
1
  const path=require("path");
2
- exports.parse=function($filePath$$,$callback$$,$options$$){let $onImportProcess$$=path.dirname(__dirname)+"/workers/excelParser.js";if(!global.excelParsePool){const $StaticPool$$=require("./WorkerStaticPool");global.excelParsePool=new $StaticPool$$($onImportProcess$$)}global.excelParsePool.exec({filePath:$filePath$$,options:$options$$,configs:{database:global.configs.database}},$response$$=>{$response$$.error?$callback$$($response$$.error):$callback$$(null,$response$$.data,$response$$.columns)})};
2
+ exports.parse=function($filePath$$,$callback$$,$options$$){let $onImportProcess$$=path.dirname(__dirname)+"/workers/excelParser.js";if(!global.excelParsePool){const $StaticPool$$=require("./WorkerStaticPool");global.excelParsePool=new $StaticPool$$($onImportProcess$$)}global.excelParsePool.exec({filePath:$filePath$$,options:$options$$,configs:{database:global.configs.database}},$response$$=>{$response$$.error?(Logger.error("[excel] L\u1ed7i \u0111\u1ecdc v\u00e0 parse excel data:",$response$$.error),
3
+ $callback$$($response$$.error)):$callback$$(null,$response$$.data,$response$$.columns)})};
@@ -41,7 +41,8 @@ const getCodeChildren=async($model$$,$id_app$$,$code$jscomp$2_rs$$,$field_code$$
41
41
  $chil_condition$$.length>0&&($chil_condition$$=await Promise.all($chil_condition$$.map($nh$$=>getCodeChildren($model$$,$id_app$$,$nh$$,$field_code$$,$field_mother$$))),$chil_condition$$=$chil_condition$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]),$code$jscomp$2_rs$$=[...$chil_condition$$,...$code$jscomp$2_rs$$]);return $code$jscomp$2_rs$$};exports.getCodeChildren=getCodeChildren;
42
42
  const aggregate=async($model_name$jscomp$2_rs$$,$id_app$$,$stages$$=[])=>{if(global.secu_models.indexOf($model_name$jscomp$2_rs$$)>=0)throw"Not allow";$stages$$.forEach($stage$$=>{for(let $key$$ in $stage$$)$stage$$[$key$$].pipeline&&($stage$$[$key$$].pipeline=[{$match:{id_app:$id_app$$}},...$stage$$[$key$$].pipeline])});$stages$$=[{$match:{id_app:$id_app$$}},...$stages$$];$model_name$jscomp$2_rs$$=await global.getModel($model_name$jscomp$2_rs$$).aggregate($stages$$).lean();$model_name$jscomp$2_rs$$.forEach($r$$=>
43
43
  {delete $r$$.mnemonic;delete $r$$.private_key;delete $r$$.password;delete $r$$.token;$r$$.local&&(delete $r$$.local.password,delete $r$$.local.repassword,delete $r$$.local.pin)});return $model_name$jscomp$2_rs$$};exports.aggregate=aggregate;const axios=require("axios"),querystring=require("querystring"),xml2js=require("xml2js"),xml2json=$string$$=>new Promise(($res$$,$rej$$)=>{xml2js.parseString($string$$,($e$$,$rs$$)=>{if($e$$)return $rej$$($e$$);$res$$($rs$$)})});exports.xml2json=xml2json;
44
- const base64toJSON=$b$$=>{$b$$=Buffer.from($b$$,"base64");return xml2json($b$$.toString("utf8"))};exports.base64toJSON=base64toJSON;const isMobilePhone=($str$$,$locale$$)=>$str$$&&$str$$.toString().trim()?/^\d+$/.test($str$$):!1;exports.isMobilePhone=isMobilePhone;const generatePasswordHash=function($password$$){return crypto.createHash("sha256").update($password$$+":STP").digest("hex")};exports.generatePasswordHash=generatePasswordHash;
44
+ const base64toJSON=$b$$=>{$b$$=Buffer.from($b$$,"base64");return xml2json($b$$.toString("utf8"))};exports.base64toJSON=base64toJSON;const isMobilePhone=($cleanStr_str$$,$locale$$)=>{if(!$cleanStr_str$$||!$cleanStr_str$$.toString().trim())return!1;$cleanStr_str$$=$cleanStr_str$$.toString().replace(/[\s\.\-\(\)]+/g,"");return/^(\+84|0)(2\d{9}|[35789]\d{8})$/.test($cleanStr_str$$)};exports.isMobilePhone=isMobilePhone;
45
+ const generatePasswordHash=function($password$$){return crypto.createHash("sha256").update($password$$+":STP").digest("hex")};exports.generatePasswordHash=generatePasswordHash;
45
46
  async function isBookLocked($ngay_ct_obj$$){if(!$ngay_ct_obj$$.ngay_ct||!$ngay_ct_obj$$.id_app&&!$ngay_ct_obj$$.ngay_ks)return!1;var $_app_ngay_ks$$=$ngay_ct_obj$$.ngay_ks;if(!$_app_ngay_ks$$){$_app_ngay_ks$$=await global.getModel("app").findOne({_id:$ngay_ct_obj$$.id_app});if(!$_app_ngay_ks$$)return!1;$_app_ngay_ks$$=moment($_app_ngay_ks$$.ngay_ks).endOf("date").toDate()}$ngay_ct_obj$$=moment($ngay_ct_obj$$.ngay_ct).startOf("date").toDate();return $_app_ngay_ks$$.getTime()>$ngay_ct_obj$$.getTime()?
46
47
  $_app_ngay_ks$$:!1}exports.isBookLocked=isBookLocked;
47
48
  const isImpossibleQuery=$condition$$=>$condition$$?Object.keys($condition$$).some($key$jscomp$12_val$$=>($key$jscomp$12_val$$=$condition$$[$key$jscomp$12_val$$])&&$key$jscomp$12_val$$.$in&&Array.isArray($key$jscomp$12_val$$.$in)&&$key$jscomp$12_val$$.$in.length===0||Array.isArray($key$jscomp$12_val$$)&&$key$jscomp$12_val$$.length===0?!0:!1):!1,sumByCondition=async($Model$$,$fields$$,$condition$$={})=>{try{if(isImpossibleQuery($condition$$)){const $zeroResult$$={};(Array.isArray($fields$$)?$fields$$:
@@ -28,5 +28,5 @@ model.updateActives=async $cust_o_kh$$=>{let $has_changed$$=!1,$_id$$,$kh$$;if($
28
28
  $kh$$.trang_thai=="3"&&($has_changed$$=!0,$trang_thai$$="5"));var $dhdt_dhgn$$=await global.getModel("sokho").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1,so_ct:1,ma_ct:1,ma_vt:1,gia_ban_nt:1}).sort({ngay_ct:1}).lean();$dhdt_dhgn$$||=await global.getModel("sokhonpp").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1,so_ct:1,ma_ct:1,ma_vt:1,gia_ban_nt:1}).sort({ngay_ct:1}).lean();
29
29
  if($dhdt_dhgn$$)$kh$$.ngay_mua_dau_tien&&(new Date($dhdt_dhgn$$.ngay_ct)).getTime()==(new Date($kh$$.ngay_mua_dau_tien)).getTime()||($has_changed$$=!0,$ngay_mua_dau_tien$$=$dhdt_dhgn$$.ngay_ct),$kh$$.trang_thai==="9"||$kh$$.trang_thai=="1"&&!$kh$$.ngay_mua_gan_nhat||($has_changed$$=!0,$trang_thai$$="1");else if($kh$$.ngay_mua_gan_nhat||$kh$$.ngay_mua_dau_tien)$has_changed$$=!0,$kh$$.ngay_mua_gan_nhat=null,$ngay_mua_dau_tien$$=$ngay_mua_gan_nhat$$=$kh$$.ngay_mua_dau_tien=null,$kh$$.trang_thai=="1"&&
30
30
  ($trang_thai$$="5");$dhdt_dhgn$$&&(($dhdt_dhgn$$=await global.getModel("sokho").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1}).sort({ngay_ct:-1}).lean())||await global.getModel("sokhonpp").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1}).sort({ngay_ct:-1}).lean(),!$dhdt_dhgn$$||$kh$$.ngay_mua_gan_nhat&&(new Date($dhdt_dhgn$$.ngay_ct)).getTime()==(new Date($kh$$.ngay_mua_gan_nhat)).getTime()||
31
- ($has_changed$$=!0,$ngay_mua_gan_nhat$$=$dhdt_dhgn$$.ngay_ct));$has_changed$$&&($ngay_mua_gan_nhat$$=$ngay_mua_gan_nhat$$||$kh$$.ngay_mua_gan_nhat,$ngay_mua_dau_tien$$=$ngay_mua_dau_tien$$||$kh$$.ngay_mua_dau_tien,$link_ngay_tuong_tac_gan_nhat$$=$link_ngay_tuong_tac_gan_nhat$$||$kh$$.ngay_tuong_tac_gan_nhat,await model.updateOne({_id:$_id$$},{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$,trang_thai:$trang_thai$$}),
32
- $cust_o_kh$$=await model.findById($kh$$._id).lean(),redisCache.set("customer",$cust_o_kh$$));return{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$}};module.exports=model;
31
+ ($has_changed$$=!0,$ngay_mua_gan_nhat$$=$dhdt_dhgn$$.ngay_ct));$has_changed$$&&($ngay_mua_gan_nhat$$=$ngay_mua_gan_nhat$$||$kh$$.ngay_mua_gan_nhat,$ngay_mua_dau_tien$$=$ngay_mua_dau_tien$$||$kh$$.ngay_mua_dau_tien,$link_ngay_tuong_tac_gan_nhat$$=$link_ngay_tuong_tac_gan_nhat$$||$kh$$.ngay_tuong_tac_gan_nhat,Logger.warn("[customer][updateActives]",JSON.stringify({ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$,trang_thai:$trang_thai$$},
32
+ null,2)),await model.updateOne({_id:$_id$$},{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$,trang_thai:$trang_thai$$}),$cust_o_kh$$=await model.findById($kh$$._id).lean(),redisCache.set("customer",$cust_o_kh$$));return{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$}};module.exports=model;
@@ -6,20 +6,21 @@ const $serverTimezone$$=Intl.DateTimeFormat().resolvedOptions().timeZone;$condit
6
6
  $condition$$.ma_bp).then($users$$=>{Logger.info("users of department",$users$$);$condition$$.phu_trach={$in:$users$$};delete $condition$$.ma_bp;$callback$$()}).catch($e$$=>{$callback$$($e$$)}):$callback$$()},nh_kh:$callback$$=>{$condition$$.nh_kh&&typeof $condition$$.nh_kh=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh,{status:!0,group_kind:1}).then($nh_kh$$=>{$condition$$.nh_kh={$in:[...(new Set($nh_kh$$))]};$callback$$()}):$callback$$()},nh_kh2:$callback$$=>{$condition$$.nh_kh2&&
7
7
  typeof $condition$$.nh_kh2=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh2,{status:!0,group_kind:2}).then($nh_kh$$=>{$condition$$.nh_kh2={$in:[...(new Set($nh_kh$$))]};$callback$$()}):$callback$$()},nh_kh3:$callback$$=>{$condition$$.nh_kh3&&typeof $condition$$.nh_kh3=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh3,{status:!0,group_kind:3}).then($nh_kh$$=>{$condition$$.nh_kh3={$in:[...(new Set($nh_kh$$))]};$callback$$()}):$callback$$()},nh_kh4:$callback$$=>
8
8
  {$condition$$.nh_kh4&&typeof $condition$$.nh_kh4=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh4,{status:!0,group_kind:4}).then($nh_kh$$=>{$condition$$.nh_kh4={$in:[...(new Set($nh_kh$$))]};$callback$$()}):$callback$$()},nh_kh5:$callback$$=>{$condition$$.nh_kh5&&typeof $condition$$.nh_kh5=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh5,{status:!0,group_kind:5}).then($nh_kh$$=>{$condition$$.nh_kh5={$in:[...(new Set($nh_kh$$))]};$callback$$()}):
9
- $callback$$()}},()=>{$next$$(null,$condition$$)})},onFound:($user$$,$condition$$,$items$$,$next$$)=>{$next$$(null,$items$$)},onView:function($user$$,$items$$,$next$$,$options$$){$items$$.forEach($item$$=>{$item$$.email&&!validator.isEmail($item$$.email)&&($item$$.email="");delete $item$$.default_password});async.parallel({pt:$callback$$=>{$items$$.filter($item$$=>$item$$.phu_trach).joinModel2(null,User,[{where:{phu_trach:"email"},fields:[{ten_phu_trach:"name"}]}],function(){$callback$$()})},nhan_vien_phu_trach:$callback$$=>
10
- {$items$$.filter($item$$=>$item$$.phu_trach).joinModel2($user$$.current_id_app,"dmnv",[{where:{phu_trach:"user"},fields:[{ma_nv_phu_trach:"ma_nv"},{ten_nv_phu_trach:"ten_nv"},{ma_bp_nv:"ma_bp"}]}],function(){$callback$$()})},group:$callback$$=>{$items$$.filter($item$$=>$item$$.nh_kh).joinModel2($user$$.current_id_app,group,[{where:{nh_kh:"_id"},fields:[{ten_nh_kh:"group_name"}]}],function(){$callback$$()})},nh_kh2_3_4_5:$callback$$=>{setImmediate(async()=>{var $ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=$items$$.map($item$$=>
11
- $item$$.nh_kh2||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);let $ma_nh_kh3$$=$items$$.map($item$$=>$item$$.nh_kh3||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]),$ma_nh_kh4$$=$items$$.map($item$$=>$item$$.nh_kh4||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=[...$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$,...$ma_nh_kh3$$,...$ma_nh_kh4$$];if($ma_nh_kh2_ma_nh_khs_obj_nh_kh$$.length===0)return $callback$$();$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=[...(new Set($ma_nh_kh2_ma_nh_khs_obj_nh_kh$$))];
12
- $ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=await group.find({id_app:$user$$.current_id_app,_id:{$in:$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$}},{group_name:1}).lean();let $set_nh_kh$$={};for(let $nh_kh$$ of $ma_nh_kh2_ma_nh_khs_obj_nh_kh$$)$set_nh_kh$$[$nh_kh$$._id.toString()]=$nh_kh$$.group_name;for(let $item$$ of $items$$)$item$$.nh_kh2&&($item$$.ten_nh_kh2=$item$$.nh_kh2.map($kh$$=>$set_nh_kh$$[$kh$$])),$item$$.nh_kh3&&($item$$.ten_nh_kh3=($item$$.nh_kh3||[]).map($kh$$=>$set_nh_kh$$[$kh$$])),$item$$.nh_kh4&&($item$$.ten_nh_kh4=
13
- ($item$$.nh_kh4||[]).map($kh$$=>$set_nh_kh$$[$kh$$]));$callback$$()})},npp:$callback$$=>{$items$$.filter($item$$=>$item$$.ma_kho_npp).joinModel2($user$$.current_id_app,"dmkho",[{where:{ma_kho_npp:"ma_kho"},fields:[{ten_kho_npp:"ten_kho"}]}],function(){$callback$$()})},u:$callback$$=>{$items$$.filter($item$$=>$item$$.of_user).joinModel2(null,User,[{where:{of_user:"email"},fields:[{user_name:"name"}]}],function(){$callback$$()})},tt:$callback$$=>{$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,
14
- Trangthai,[{where:$item$$=>({ma_trang_thai:$item$$.trang_thai,ma_ct:"CUSTOMER"}),fields:["ten_trang_thai","color"]}],function(){$callback$$()})},ngay_mua:$callback$$=>{$options$$&&$options$$.req&&$options$$.req.query&&(!$options$$.req.query.fields||$options$$.req.query.fields.indexOf("ngay_mua_gan_nhat")>=0||$options$$.req.query.fields.indexOf("ngay_mua_dau_tien")>=0)&&model.updateActives?async.map($items$$.filter($item$$=>$item$$.ngay_mua_gan_nhat===void 0||!$item$$.ngay_mua_dau_tien||$item$$.ngay_tuong_tac_gan_nhat===
15
- void 0),($item$$,$callback$$)=>{model.updateActives($item$$).then($rs$$=>{$item$$.ngay_mua_gan_nhat=$rs$$.ngay_mua_gan_nhat;$item$$.ngay_mua_dau_tien=$rs$$.ngay_mua_dau_tien;$item$$.so_ngay_da_mua=$rs$$.so_ngay_da_mua;$callback$$()}).catch($e$$=>{Logger.error($e$$);$callback$$()})},()=>{$callback$$()}):$callback$$()},so_don_hang_bds:$callback$$=>{$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&$options$$.req.query.fields.indexOf("so_don_hang_bds")>=0?async.map($items$$,
16
- ($item$$,$callback$$)=>{setImmediate(async()=>{$item$$.so_don_hang_bds=await global.getModel("bds_nhadat_moigioi_ban").countDocuments({id_app:$item$$.id_app,ma_kh:$item$$.ma_kh,user_created:$user$$.email});$callback$$()})},()=>{$callback$$()}):$callback$$()},note:$callback$$=>{$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&$options$$.req.query.fields.indexOf("latest_note")>=0?async.map($items$$.filter($i$$=>!$i$$.latest_note),async $c_item$$=>{let $latest_note$$=await global.getModel("note").findOne({id_app:$c_item$$.id_app,
17
- id_link:$c_item$$._id.toString()},{content:1,date_created:1,user_created:1}).sort({date_created:-1}).lean();$latest_note$$&&($c_item$$.latest_note=$latest_note$$,await model.updateOne({_id:$c_item$$._id},{latest_note:$latest_note$$}),$c_item$$=await model.findById($c_item$$._id),redisCache.set("customer",$c_item$$.toObject(),function($e$$){Logger.info("cache customer data",$e$$)}))},()=>{$callback$$()}):$callback$$()}},()=>{$next$$(null,$items$$)})}});$contr_router$$.validating=async($id_app$jscomp$1_user$$,
18
- $obj$$,$next$$,$options$$={})=>{if($obj$$.dien_thoai&&!isMobilePhone($obj$$.dien_thoai,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$obj$$.dien_thoai} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);if($obj$$.dien_thoai2&&!isMobilePhone($obj$$.dien_thoai2,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$obj$$.dien_thoai2} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);if($options$$.action=="add"&&!$obj$$.ma_kh&&$obj$$.ten_kh){$id_app$jscomp$1_user$$=$id_app$jscomp$1_user$$.current_id_app;
19
- try{let $ma_kh$$=await model.asyncCreateCustomerCode($id_app$jscomp$1_user$$,$obj$$.dien_thoai||$obj$$.ten_kh);if(!$ma_kh$$)return $next$$("Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng");$obj$$.ma_kh=$ma_kh$$;$next$$(null,$obj$$)}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng",$obj$$.ten_kh,$e$$),$next$$(`Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng, L\u1ed7i: ${$e$$.message||$e$$.error||$e$$}`)}}else $next$$(null,$obj$$)};$contr_router$$.route();
20
- $contr_router$$.on("saved",async $data$$=>{let $_usergroup$$;try{$_usergroup$$=await Usergroup.getInfo($data$$.id_app,{is_customer_group:!0})}catch($e$$){return}$data$$.of_user&&$_usergroup$$&&User.findOne({email:$data$$.of_user},($e$$,$rs$$)=>{if($rs$$)Participant.createParticipant({id_app:$data$$.id_app,email:$data$$.of_user,group_id:$_usergroup$$._id,active:!0},$e$$=>{if($e$$)return Logger.info("can't add user",$data$$.of_user,"to company")});else{var $result$$=new User;$result$$.email=$data$$.of_user;
21
- $result$$.name=$data$$.ten_kh;$result$$.email2=$data$$.email;$result$$.local={};$result$$.local.email=$result$$.email;$result$$.local.name=$result$$.name;$result$$.local.picture="/images/avatar.jpg";$result$$.local.password=$result$$.generateHash($result$$.email+($data$$.default_password||$result$$.email+"@123456"));$result$$.save($e$$=>{if($e$$)return Logger.info($e$$.message);Participant.createParticipant({id_app:$data$$.id_app,email:$result$$.email,group_id:$_usergroup$$._id,active:!0},$e$$=>{if($e$$)return Logger.info("can't add user",
22
- $result$$.email,"to company")})})}})});$contr_router$$.createRoute("qc/sms",async($req$$,$next$$)=>{let $body$$=$req$$.body||{};if(!$body$$.id_account)return $next$$("Thi\u1ebfu t\u00e0i kho\u1ea3n sms");if(!$body$$.content)return $next$$("Thi\u1ebfu n\u1ed9i dung tin nh\u1eafn");let $account_sms$$=await global.getModel("smsaccount").findOne({_id:$body$$.id_account,id_app:$req$$.user.current_id_app}).lean();if(!$account_sms$$)return $next$$("T\u00e0i kho\u1ea3n sms kh\u00f4ng t\u1ed3n t\u1ea1i");
23
- permission.hasRight($req$$.user.current_id_app,$req$$.user.email,"smssend","add",async function($error$$,$permission$$){if(!$permission$$)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n g\u1eedi tin nh\u1eafn qu\u1ea3ng c\u00e1o");$error$$=($req$$.body||{}).q||{};$error$$.dien_thoai||($error$$.dien_thoai={$exists:!0});$error$$.id_app=$req$$.user.current_id_app;let $custs$$=[...(new Set((await model.find($error$$,{dien_thoai:1}).lean()).map($c$$=>$c$$.dien_thoai)))];if($custs$$.length<30)return $next$$("C\u1ea7n g\u1eedi cho t\u1ed1i thi\u1ec3u 30 kh\u00e1ch h\u00e0ng");
9
+ $callback$$()}},()=>{$next$$(null,$condition$$)})},onFound:($user$$,$condition$$,$items$$,$next$$)=>{$next$$(null,$items$$)},onCreating:($user$$,$obj$$,$next$$)=>{if($obj$$.dien_thoai&&!isMobilePhone($obj$$.dien_thoai,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$obj$$.dien_thoai} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);if($obj$$.dien_thoai2&&!isMobilePhone($obj$$.dien_thoai2,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$obj$$.dien_thoai2} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);
10
+ $next$$(null,$obj$$)},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{if($data$$.dien_thoai&&!isMobilePhone($data$$.dien_thoai,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$data$$.dien_thoai} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);if($data$$.dien_thoai2&&!isMobilePhone($data$$.dien_thoai2,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$data$$.dien_thoai2} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);$next$$(null,$data$$,$obj$$)},onView:function($user$$,$items$$,$next$$,$options$$){$items$$.forEach($item$$=>
11
+ {$item$$.email&&!validator.isEmail($item$$.email)&&($item$$.email="");delete $item$$.default_password});async.parallel({pt:$callback$$=>{$items$$.filter($item$$=>$item$$.phu_trach).joinModel2(null,User,[{where:{phu_trach:"email"},fields:[{ten_phu_trach:"name"}]}],function(){$callback$$()})},nhan_vien_phu_trach:$callback$$=>{$items$$.filter($item$$=>$item$$.phu_trach).joinModel2($user$$.current_id_app,"dmnv",[{where:{phu_trach:"user"},fields:[{ma_nv_phu_trach:"ma_nv"},{ten_nv_phu_trach:"ten_nv"},{ma_bp_nv:"ma_bp"}]}],
12
+ function(){$callback$$()})},group:$callback$$=>{$items$$.filter($item$$=>$item$$.nh_kh).joinModel2($user$$.current_id_app,group,[{where:{nh_kh:"_id"},fields:[{ten_nh_kh:"group_name"}]}],function(){$callback$$()})},nh_kh2_3_4_5:$callback$$=>{setImmediate(async()=>{var $ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=$items$$.map($item$$=>$item$$.nh_kh2||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);let $ma_nh_kh3$$=$items$$.map($item$$=>$item$$.nh_kh3||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]),$ma_nh_kh4$$=$items$$.map($item$$=>
13
+ $item$$.nh_kh4||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=[...$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$,...$ma_nh_kh3$$,...$ma_nh_kh4$$];if($ma_nh_kh2_ma_nh_khs_obj_nh_kh$$.length===0)return $callback$$();$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=[...(new Set($ma_nh_kh2_ma_nh_khs_obj_nh_kh$$))];$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=await group.find({id_app:$user$$.current_id_app,_id:{$in:$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$}},{group_name:1}).lean();let $set_nh_kh$$={};for(let $nh_kh$$ of $ma_nh_kh2_ma_nh_khs_obj_nh_kh$$)$set_nh_kh$$[$nh_kh$$._id.toString()]=
14
+ $nh_kh$$.group_name;for(let $item$$ of $items$$)$item$$.nh_kh2&&($item$$.ten_nh_kh2=$item$$.nh_kh2.map($kh$$=>$set_nh_kh$$[$kh$$])),$item$$.nh_kh3&&($item$$.ten_nh_kh3=($item$$.nh_kh3||[]).map($kh$$=>$set_nh_kh$$[$kh$$])),$item$$.nh_kh4&&($item$$.ten_nh_kh4=($item$$.nh_kh4||[]).map($kh$$=>$set_nh_kh$$[$kh$$]));$callback$$()})},npp:$callback$$=>{$items$$.filter($item$$=>$item$$.ma_kho_npp).joinModel2($user$$.current_id_app,"dmkho",[{where:{ma_kho_npp:"ma_kho"},fields:[{ten_kho_npp:"ten_kho"}]}],function(){$callback$$()})},
15
+ u:$callback$$=>{$items$$.filter($item$$=>$item$$.of_user).joinModel2(null,User,[{where:{of_user:"email"},fields:[{user_name:"name"}]}],function(){$callback$$()})},tt:$callback$$=>{$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,Trangthai,[{where:$item$$=>({ma_trang_thai:$item$$.trang_thai,ma_ct:"CUSTOMER"}),fields:["ten_trang_thai","color"]}],function(){$callback$$()})},ngay_mua:$callback$$=>{$options$$&&$options$$.req&&$options$$.req.query&&(!$options$$.req.query.fields||$options$$.req.query.fields.indexOf("ngay_mua_gan_nhat")>=
16
+ 0||$options$$.req.query.fields.indexOf("ngay_mua_dau_tien")>=0)&&model.updateActives?async.map($items$$.filter($item$$=>$item$$.ngay_mua_gan_nhat===void 0||!$item$$.ngay_mua_dau_tien||$item$$.ngay_tuong_tac_gan_nhat===void 0),($item$$,$callback$$)=>{model.updateActives($item$$).then($rs$$=>{$item$$.ngay_mua_gan_nhat=$rs$$.ngay_mua_gan_nhat;$item$$.ngay_mua_dau_tien=$rs$$.ngay_mua_dau_tien;$item$$.so_ngay_da_mua=$rs$$.so_ngay_da_mua;$callback$$()}).catch($e$$=>{Logger.error($e$$);$callback$$()})},
17
+ ()=>{$callback$$()}):$callback$$()},so_don_hang_bds:$callback$$=>{$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&$options$$.req.query.fields.indexOf("so_don_hang_bds")>=0?async.map($items$$,($item$$,$callback$$)=>{setImmediate(async()=>{$item$$.so_don_hang_bds=await global.getModel("bds_nhadat_moigioi_ban").countDocuments({id_app:$item$$.id_app,ma_kh:$item$$.ma_kh,user_created:$user$$.email});$callback$$()})},()=>{$callback$$()}):$callback$$()},note:$callback$$=>{$options$$&&
18
+ $options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&$options$$.req.query.fields.indexOf("latest_note")>=0?async.map($items$$.filter($i$$=>!$i$$.latest_note),async $c_item$$=>{let $latest_note$$=await global.getModel("note").findOne({id_app:$c_item$$.id_app,id_link:$c_item$$._id.toString()},{content:1,date_created:1,user_created:1}).sort({date_created:-1}).lean();$latest_note$$&&($c_item$$.latest_note=$latest_note$$,await model.updateOne({_id:$c_item$$._id},{latest_note:$latest_note$$}),
19
+ $c_item$$=await model.findById($c_item$$._id),redisCache.set("customer",$c_item$$.toObject(),function($e$$){Logger.info("cache customer data",$e$$)}))},()=>{$callback$$()}):$callback$$()}},()=>{$next$$(null,$items$$)})}});$contr_router$$.validating=async($id_app$jscomp$1_user$$,$obj$$,$next$$,$options$$={})=>{if($options$$.action=="add"&&!$obj$$.ma_kh&&$obj$$.ten_kh){$id_app$jscomp$1_user$$=$id_app$jscomp$1_user$$.current_id_app;try{let $ma_kh$$=await model.asyncCreateCustomerCode($id_app$jscomp$1_user$$,
20
+ $obj$$.dien_thoai||$obj$$.ten_kh);if(!$ma_kh$$)return $next$$("Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng");$obj$$.ma_kh=$ma_kh$$;$next$$(null,$obj$$)}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng",$obj$$.ten_kh,$e$$),$next$$(`Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng, L\u1ed7i: ${$e$$.message||$e$$.error||$e$$}`)}}else $next$$(null,$obj$$)};$contr_router$$.route();$contr_router$$.on("saved",async $data$$=>{let $_usergroup$$;try{$_usergroup$$=
21
+ await Usergroup.getInfo($data$$.id_app,{is_customer_group:!0})}catch($e$$){return}$data$$.of_user&&$_usergroup$$&&User.findOne({email:$data$$.of_user},($e$$,$rs$$)=>{if($rs$$)Participant.createParticipant({id_app:$data$$.id_app,email:$data$$.of_user,group_id:$_usergroup$$._id,active:!0},$e$$=>{if($e$$)return Logger.info("can't add user",$data$$.of_user,"to company")});else{var $result$$=new User;$result$$.email=$data$$.of_user;$result$$.name=$data$$.ten_kh;$result$$.email2=$data$$.email;$result$$.local=
22
+ {};$result$$.local.email=$result$$.email;$result$$.local.name=$result$$.name;$result$$.local.picture="/images/avatar.jpg";$result$$.local.password=$result$$.generateHash($result$$.email+($data$$.default_password||$result$$.email+"@123456"));$result$$.save($e$$=>{if($e$$)return Logger.info($e$$.message);Participant.createParticipant({id_app:$data$$.id_app,email:$result$$.email,group_id:$_usergroup$$._id,active:!0},$e$$=>{if($e$$)return Logger.info("can't add user",$result$$.email,"to company")})})}})});
23
+ $contr_router$$.createRoute("qc/sms",async($req$$,$next$$)=>{let $body$$=$req$$.body||{};if(!$body$$.id_account)return $next$$("Thi\u1ebfu t\u00e0i kho\u1ea3n sms");if(!$body$$.content)return $next$$("Thi\u1ebfu n\u1ed9i dung tin nh\u1eafn");let $account_sms$$=await global.getModel("smsaccount").findOne({_id:$body$$.id_account,id_app:$req$$.user.current_id_app}).lean();if(!$account_sms$$)return $next$$("T\u00e0i kho\u1ea3n sms kh\u00f4ng t\u1ed3n t\u1ea1i");permission.hasRight($req$$.user.current_id_app,
24
+ $req$$.user.email,"smssend","add",async function($error$$,$permission$$){if(!$permission$$)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n g\u1eedi tin nh\u1eafn qu\u1ea3ng c\u00e1o");$error$$=($req$$.body||{}).q||{};$error$$.dien_thoai||($error$$.dien_thoai={$exists:!0});$error$$.id_app=$req$$.user.current_id_app;let $custs$$=[...(new Set((await model.find($error$$,{dien_thoai:1}).lean()).map($c$$=>$c$$.dien_thoai)))];if($custs$$.length<30)return $next$$("C\u1ea7n g\u1eedi cho t\u1ed1i thi\u1ec3u 30 kh\u00e1ch h\u00e0ng");
24
25
  $custs$$=$custs$$.join(",");setImmediate(async()=>{let $result$$;try{await global.getModel("smsaccount").send($account_sms$$,$custs$$,$body$$.content),$result$$={msg:"\u0110\u00e3 g\u1eedi y\u00eau c\u1ea7u th\u00e0nh c\u00f4ng",code:0}}catch($e$$){$result$$={msg:"Kh\u00f4ng th\u1ec3 g\u1eedi",error:$e$$.message||$e$$.error||$e$$,code:-1}}await global.getModel("smssend").create({id_app:$req$$.user.current_id_app,phone:$custs$$,content:$body$$.content,user_created:$req$$.user.email,result:$result$$});
25
26
  $next$$()})})},{method:"POST"})};module.exports=customer;
@@ -5,6 +5,6 @@ let parse=function($columns_filePath$$,$callback$$,$columns_keys_options$$){Logg
5
5
  $i_obj$$[0].data.length<$i$$+1)return $callback$$("File excel kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u ho\u1eb7c sai d\u00f2ng ti\u00eau \u0111\u1ec1");Logger.info("[excelParser] Parsing excel data...");const $data$$=$i_obj$$[0].data;$columns_filePath$$={};$columns_keys_options$$=[];var $d$$=$data$$[$i$$];for($i_obj$$=0;$i_obj$$<$d$$.length;$i_obj$$++){var $c_i_rawHeader$$=$d$$[$i_obj$$];let $finalKey$$="";if($data_f_map_columns$$["col"+$i_obj$$])$finalKey$$=$data_f_map_columns$$["col"+$i_obj$$],$columns_filePath$$[$finalKey$$]=
6
6
  $c_i_rawHeader$$||$finalKey$$;else if($c_i_rawHeader$$){let $c_1$$=$c_i_rawHeader$$.lastIndexOf("("),$c_2$$=$c_i_rawHeader$$.lastIndexOf(")");if($c_1$$>0&&$c_2$$>0&&$c_1$$<$c_2$$)$finalKey$$=$c_i_rawHeader$$.substring($c_1$$+1,$c_2$$).trim(),_.has($columns_filePath$$,$finalKey$$)&&($finalKey$$+=$i_obj$$),$columns_filePath$$[$finalKey$$]=$c_i_rawHeader$$.substring(0,$c_1$$).trim();else{$finalKey$$=normalizeKey($c_i_rawHeader$$);if(_.has($columns_filePath$$,$finalKey$$)||!$finalKey$$)$finalKey$$+=$i_obj$$;
7
7
  $columns_filePath$$[$finalKey$$]=$c_i_rawHeader$$}}else $c_i_rawHeader$$=$finalKey$$="col"+$i_obj$$;$columns_keys_options$$.push($finalKey$$)}$data_f_map_columns$$=[];for($i$$+=1;$i$$<$data$$.length;$i$$++){let $rowData$$=$data$$[$i$$];if($rowData$$&&$rowData$$.length!==0){$d$$={};for($c_i_rawHeader$$=0;$c_i_rawHeader$$<$columns_keys_options$$.length&&!($c_i_rawHeader$$>=$rowData$$.length);$c_i_rawHeader$$++){let $key$$=$columns_keys_options$$[$c_i_rawHeader$$],$val$$=$rowData$$[$c_i_rawHeader$$];
8
- const $keyLower$$=$key$$.toLowerCase(),$isLikelyDateColumn$$=$keyLower$$.includes("ngay")||$keyLower$$.includes("date")||$keyLower$$.includes("han_sd");$d$$[$key$$]=smartParseDate($val$$,$isLikelyDateColumn$$)}$data_f_map_columns$$.push($d$$)}}$callback$$(null,$data_f_map_columns$$,$columns_filePath$$)}catch($e$$){Logger.error("[excelParser] Critical Error:",$e$$),$callback$$($e$$.message||"L\u1ed7i kh\u00f4ng x\u00e1c \u0111\u1ecbnh khi \u0111\u1ecdc file Excel")}};
8
+ const $keyLower$$=$key$$.toLowerCase(),$isLikelyDateColumn$$=$keyLower$$.includes("ngay")||$keyLower$$.includes("date")||$keyLower$$.includes("han_sd");$d$$[$key$$]=smartParseDate($val$$,$isLikelyDateColumn$$)}$data_f_map_columns$$.push($d$$)}}Logger.info("[excelParser] \u0111\u00e3 parse xong data...");$callback$$(null,$data_f_map_columns$$,$columns_filePath$$)}catch($e$$){Logger.error("[excelParser] Critical Error:",$e$$),$callback$$($e$$.message||"L\u1ed7i kh\u00f4ng x\u00e1c \u0111\u1ecbnh khi \u0111\u1ecdc file Excel")}};
9
9
  const handleMessage=$rawMsg$$=>{let $msg$$=$rawMsg$$;if(Buffer.isBuffer($rawMsg$$)||$rawMsg$$ instanceof Uint8Array)try{$msg$$=v8.deserialize($rawMsg$$)}catch($e$$){return Logger.error("[Worker] L\u1ed7i deserialize task:",$e$$),postToParent({error:"Deserialization failed"})}if($msg$$){if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){Logger.error("JSON Parse Error:",$e$$);postToParent({error:"Message is not valid JSON"});return}$msg$$.filePath&&parse($msg$$.filePath,function($err$$,
10
10
  $data_f$$,$columns$$){postToParent({error:$err$$,data:$data_f$$,columns:$columns$$,id_task:$msg$$.id_task})},$msg$$.options)}else postToParent({error:"Empty message received"})};onParentMessage(handleMessage);workerData&&handleMessage(workerData);