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 +2 -2
- package/server/controllers/controllerUtils.js +5 -5
- package/server/controllers/createHandler.js +15 -15
- package/server/controllers/importFromExcelHandler.js +10 -10
- package/server/controllers/importHandler.js +31 -31
- package/server/controllers/updateHandler.js +4 -4
- package/server/flow/nodes/data.js +11 -9
- package/server/flow/nodes/event.js +5 -4
- package/server/flow/nodes/switch.js +12 -12
- package/server/libs/docs.js +170 -0
- package/server/libs/excel.js +2 -1
- package/server/libs/utils.js +2 -1
- package/server/models/customer.js +2 -2
- package/server/modules/lists/ls-customer.js +16 -15
- package/server/workers/excelParser.js +1 -1
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "flexbiz-server",
|
|
3
3
|
"main": "./server/app.js",
|
|
4
4
|
"description": "Flexible Server",
|
|
5
|
-
"version": "12.6.
|
|
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.
|
|
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$$];
|
|
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$$);
|
|
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()!==
|
|
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$$]
|
|
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
|
|
10
|
-
|
|
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$$=>{
|
|
12
|
-
if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else $callback$$()})
|
|
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$$=>{
|
|
19
|
-
|
|
20
|
-
($count
|
|
21
|
-
|
|
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$$)
|
|
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$$)})
|
|
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},
|
|
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$$})
|
|
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()}):
|
|
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
|
|
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");
|
|
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$$()})
|
|
7
|
-
$e$$});$req$$.data=$new_data$$||$data$$;$req$$.columns=$columns$$;$callback$$()})})
|
|
8
|
-
|
|
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$$])||
|
|
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$$)
|
|
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
|
|
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
|
|
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$$}))},
|
|
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 $
|
|
4
|
-
[];$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$&&(await $
|
|
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);$
|
|
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)),$
|
|
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 $
|
|
11
|
-
$
|
|
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$$);$
|
|
13
|
-
[];$
|
|
14
|
-
|
|
15
|
-
[]);for(var $
|
|
16
|
-
$
|
|
17
|
-
ma_kho:$kho$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho$$),$
|
|
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)),$
|
|
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,
|
|
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$$=
|
|
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;
|
|
22
|
-
id_app:$id_app$$,group_kind:2},{_id:1}).lean();if($check$$)$
|
|
23
|
-
{$c$$.ma_nvt2=$new_nvt$$._id.toString()})}}$
|
|
24
|
-
$
|
|
25
|
-
$nh_vt3$$.ten_nvt3);const $new_nvt$$=await global.getModel("dmnvt").create($
|
|
26
|
-
$
|
|
27
|
-
|
|
28
|
-
loai:1,tk:{$regex:"^156",$options:"i"}},{tk:1}).lean()||{}).tk;$
|
|
29
|
-
$
|
|
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
|
|
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$$],
|
|
32
|
-
|
|
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$$)>=
|
|
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();
|
|
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
|
|
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$$)
|
|
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...")
|
|
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
|
|
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($
|
|
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$$=$
|
|
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";
|
|
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$$,
|
|
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$$,
|
|
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"
|
|
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$$,
|
|
14
|
-
$
|
|
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$$;$
|
|
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$$}'.`);
|
|
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$$}'
|
|
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$$}'
|
|
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$$,$
|
|
10
|
-
Error("Switch handler is missing required engine context functions.");const $instanceId$$=$flowState$$.instanceId,$triggerId$$=$payload$$?._triggerId||null,$triggerContext$$=$triggerId$$?`|${$triggerId$$}`:"";$
|
|
11
|
-
Logger.info(`[${$instanceId$$}${$triggerContext$$}] ${$
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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)
|
|
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}`);
|
|
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})...`);
|
|
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...`)
|
|
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;
|
package/server/libs/docs.js
CHANGED
|
@@ -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};
|
package/server/libs/excel.js
CHANGED
|
@@ -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
|
|
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)})};
|
package/server/libs/utils.js
CHANGED
|
@@ -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=($
|
|
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,
|
|
32
|
-
|
|
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$$)},
|
|
10
|
-
|
|
11
|
-
$item$$.
|
|
12
|
-
$
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
$
|
|
19
|
-
|
|
20
|
-
$
|
|
21
|
-
$
|
|
22
|
-
|
|
23
|
-
|
|
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$$)}}
|
|
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);
|