flexbiz-server 12.5.2 → 12.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "flexbiz-server",
3
3
  "main": "./server/app.js",
4
4
  "description": "Flexible Server",
5
- "version": "12.5.2",
5
+ "version": "12.5.4",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -26,7 +26,7 @@
26
26
  "cookie-parser": "^1.4.6",
27
27
  "cors": "^2.8.5",
28
28
  "crypto-js": "^3.1.9-1",
29
- "docx-templates": "^4.8.2",
29
+ "docx-templates": "^4.14.1",
30
30
  "dynamic-watermark": "^1.0.0",
31
31
  "ejs": "^3.1.6",
32
32
  "elliptic-nodejs": "^6.5.4",
@@ -89,7 +89,7 @@
89
89
  "validator": "^13.6.0",
90
90
  "vhost": "^3.0.2",
91
91
  "vietnam-qr-pay": "^1.4.0",
92
- "vm2": "^3.9.3",
92
+ "vm2": "^3.10.0",
93
93
  "vn-payments": "^1.0.3",
94
94
  "web-push": "^3.4.4",
95
95
  "written-number": "^0.9.1",
@@ -1,7 +1,7 @@
1
- const async=require("async"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),numeral=require("numeral"),_=require("lodash"),validate=require("../libs/validate"),permission=require("../libs/permission"),{onAfterCommit}=require("../libs/sessionContext.js"),{evalute,convertObjectIdsToStrings}=require("../libs/utils"),{asyncBodyToJson,ERRORS,getNextSequence,isExists,createIdRef,fields_sync_master_detail,postData,runWebhooks}=require("./controllerUtils"),
2
- createHandler=async($ctrl$$,$req$$,$callback$$)=>{let {user:$user$$,data:$data$$,id_be_supply_by_user:$id_be_supply_by_user$$,action:$action$$}=$req$$;$action$$||="add";let $listinfo_code$$=$req$$?.body?.["listinfo-code"]||$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"]||$req$$.query["listinfo-code"]||$data$$.listinfo_code;$listinfo_code$$=$listinfo_code$$||$ctrl$$.name;$req$$.headers=$req$$.headers||{};$req$$.headers["Listinfo-Code"]=$listinfo_code$$;$data$$.listinfo_code=
3
- $listinfo_code$$;try{const $model$$=$ctrl$$.model;let $voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$listinfo_code$$.toLowerCase()}).lean()||{}).option;$voucher_options$$||$ctrl$$.name===$listinfo_code$$||($voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option);const $schema_paths$$=$model$$.schema.paths;let $v_data$$;try{$v_data$$=await asyncBodyToJson($data$$,$ctrl$$,
4
- $user$$.current_id_app,$voucher_options$$)}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&($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");
1
+ const async=require("async"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),numeral=require("numeral"),_=require("lodash"),validate=require("../libs/validate"),permission=require("../libs/permission"),{onAfterCommit,runWithoutSession}=require("../libs/sessionContext.js"),{evalute,convertObjectIdsToStrings}=require("../libs/utils"),{asyncBodyToJson,ERRORS,getNextSequence,isExists,createIdRef,fields_sync_master_detail,postData,runWebhooks}=
2
+ require("./controllerUtils"),createHandler=async($ctrl$$,$req$$,$callback$$)=>{let {user:$user$$,data:$data$$,id_be_supply_by_user:$id_be_supply_by_user$$,action:$action$$}=$req$$;$action$$||="add";let $listinfo_code$$=$req$$?.body?.["listinfo-code"]||$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"]||$req$$.query["listinfo-code"]||$data$$.listinfo_code;$listinfo_code$$=$listinfo_code$$||$ctrl$$.name;$req$$.headers=$req$$.headers||{};$req$$.headers["Listinfo-Code"]=$listinfo_code$$;
3
+ $data$$.listinfo_code=$listinfo_code$$;try{const $model$$=$ctrl$$.model;let $voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$listinfo_code$$.toLowerCase()}).lean()||{}).option;$voucher_options$$||$ctrl$$.name===$listinfo_code$$||($voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option);const $schema_paths$$=$model$$.schema.paths;let $v_data$$;try{$v_data$$=await asyncBodyToJson($data$$,
4
+ $ctrl$$,$user$$.current_id_app,$voucher_options$$)}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&($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");
5
5
  try{await permission.verifyReCaptcha($v_data$$["g-recaptcha-response"])}catch($e$$){return $callback$$($e$$.message||$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$$=
6
6
  await new Promise(($resolve$$,$reject$$)=>{try{$ctrl$$.dynamicCreating($user$$,$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$$)}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$$]),
7
7
  $f$$!=="exfields"||$obj$$.exfields||($obj$$.exfields={}));$schema_paths$$.id_app&&($obj$$.id_app=$user$$.current_id_app);const $checkVoucherNumber$$=$callback$$=>{$model$$.schema.paths.ngay_ct&&$obj$$.ngay_ct?setImmediate(()=>{if($voucher_options$$&&($voucher_options$$?.trang_thai_create_voucher_numbers?.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$voucher_options$$.check_so_ct&&$voucher_options$$.check_so_ct!=="0"){let $query_check$$={id_app:$obj$$.id_app,
@@ -27,7 +27,7 @@ $obj$$,$e$$=>{$e$$&&($msgErrors$$=$msgErrors$$+"\n"+$e$$);$callback$$($msgErrors
27
27
  action:$action$$.toUpperCase(),data:{id:$obj_created_cv$$._id.toString(),data:$obj_created_cv$$}},$user$$.email,$req$$.user_agent,$req$$)});runWebhooks($ctrl$$,$obj_created_cv$$,$action$$.toUpperCase(),$voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$action$$)});$callback$$(null,$obj_created_cv$$)}},{req:$req$$})})})}})})})},function($obj$$,$callback$$){$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,$callback$$){if($action$$===
28
28
  "import"||$req$$&&($req$$.query||{}).return_data==0)$callback$$(null,{_id:$obj_created_cv$$._id.toString()});else $ctrl$$.onView($user$$,[$obj_created_cv$$],($error$$,$viewValues$$)=>{setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$(null,$viewValues$$?$viewValues$$[0]:$obj_created_cv$$)})},{req:$req$$})},function($obj$$,$callback$$){setImmediate(async function(){$obj$$.collection_name=$ctrl$$.collection_name;var $co_gia_tri_tam_html$$=!1;$obj$$.exfields&&$obj$$.exfields.__files__&&
29
29
  ($obj$$.exfields.__files__.forEach($_file$$=>{$File$$.updateOne({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name}).lean().then(()=>{}).catch($e$$=>{console.error("File updateone",$e$$)})}),delete $obj$$.exfields.__files__,$co_gia_tri_tam_html$$=!0);$obj$$.exfields&&$obj$$.exfields.__supports__&&($obj$$.exfields.__supports__.forEach($_file$$=>{$Support$$.updateOne({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name}).lean().then(()=>
30
- {})}).catch($e$$=>{console.error("support updateone",$e$$)}),delete $obj$$.exfields.__supports__,$co_gia_tri_tam_html$$=!0);$co_gia_tri_tam_html$$&&await $model$$.updateOne({_id:$obj$$._id},{exfields:$obj$$.exfields});$ctrl$$.created?$ctrl$$.created($user$$,$obj$$,function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);if($ctrl$$.dynamicCreated)$ctrl$$.dynamicCreated($user$$,$rs$$,function($error$$){if($error$$)return $callback$$($error$$);$req$$&&$req$$.uploadFile?($error$$=
31
- "<html><title>OK</title><body>"+JSON.stringify($rs$$)+"</body></html>",$callback$$(null,$error$$)):$callback$$(null,$rs$$)},{listinfo_code:$listinfo_code$$});else if($req$$&&$req$$.uploadFile){let $html$$="<html><title>OK</title><body>"+JSON.stringify($rs$$)+"</body></html>";$callback$$(null,$html$$)}else $callback$$(null,$rs$$)})}):$ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$obj$$,function($error$jscomp$13_html$$){if($error$jscomp$13_html$$)return $callback$$($error$jscomp$13_html$$);
32
- $req$$&&$req$$.uploadFile?($error$jscomp$13_html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>",$callback$$(null,$error$jscomp$13_html$$)):$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$}):$req$$&&$req$$.uploadFile?($co_gia_tri_tam_html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>",$callback$$(null,$co_gia_tri_tam_html$$)):$callback$$(null,$obj$$)})}],($e$$,$obj_created$$)=>{$e$$?(console.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,
30
+ {})}).catch($e$$=>{console.error("support updateone",$e$$)}),delete $obj$$.exfields.__supports__,$co_gia_tri_tam_html$$=!0);$co_gia_tri_tam_html$$&&await $model$$.updateOne({_id:$obj$$._id},{exfields:$obj$$.exfields});$ctrl$$.created?runWithoutSession(()=>{$ctrl$$.created($user$$,$obj$$,function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);if($ctrl$$.dynamicCreated)$ctrl$$.dynamicCreated($user$$,$rs$$,function($error$$){if($error$$)return $callback$$($error$$);$req$$&&
31
+ $req$$.uploadFile?($error$$="<html><title>OK</title><body>"+JSON.stringify($rs$$)+"</body></html>",$callback$$(null,$error$$)):$callback$$(null,$rs$$)},{listinfo_code:$listinfo_code$$});else if($req$$&&$req$$.uploadFile){let $html$$="<html><title>OK</title><body>"+JSON.stringify($rs$$)+"</body></html>";$callback$$(null,$html$$)}else $callback$$(null,$rs$$)})})}):$ctrl$$.dynamicCreated?runWithoutSession(()=>{$ctrl$$.dynamicCreated($user$$,$obj$$,function($error$jscomp$13_html$$){if($error$jscomp$13_html$$)return $callback$$($error$jscomp$13_html$$);
32
+ $req$$&&$req$$.uploadFile?($error$jscomp$13_html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>",$callback$$(null,$error$jscomp$13_html$$)):$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$})}):$req$$&&$req$$.uploadFile?($co_gia_tri_tam_html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>",$callback$$(null,$co_gia_tri_tam_html$$)):$callback$$(null,$obj$$)})}],($e$$,$obj_created$$)=>{$e$$?(console.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,
33
33
  $user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],$callback$$(null,{obj_created:$obj_created$$}))})}catch($e$$){console.error($e$$),$callback$$($e$$)}},{handlerWithSession}=require("../libs/sessionContext.js"),creatWithSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSession(createHandler,$ctrl$$,$req$$,$callback$$)};module.exports=creatWithSesssion;module.exports.createHandler=createHandler;
@@ -1,10 +1,11 @@
1
- const async=require("async"),_=require("lodash"),validator=require("../libs/validator"),permission=require("../libs/permission"),{convertObjectIdsToStrings}=require("../libs/utils"),{onAfterCommit,handlerWithSession}=require("../libs/sessionContext.js"),{ERRORS,checkReference,pushNotification,runWebhooks,deletePost}=require("./controllerUtils"),deleteHandler=async($ctrl$$,$req$$,$mainCallback$$)=>{let $model$$=$ctrl$$.model,$module$$=$ctrl$$.module,$_id$$=$req$$.params.id;if(!$_id$$||!global.mongoose.Types.ObjectId.isValid($_id$$))return $mainCallback$$({error:"id is required"});
2
- let $obj$$=await $model$$.findOne({_id:$_id$$});if(!$obj$$)return $mainCallback$$({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});let $listinfo_code$$=$req$$.headers["Listinfo-Code"]||$req$$.headers["listinfo-code"]||$req$$.query["listinfo-code"]||$obj$$.toObject().listinfo_code||$ctrl$$.name;async.series([function($callback$$){setImmediate(async()=>{const $user$$=$req$$.user;if($obj$$.trang_thai){var $q_approve_requireOtp$$={id_ct:$obj$$._id.toString(),user_approved:{$exists:!0}};if(await global.getModel("approve").findOne($q_approve_requireOtp$$))return $callback$$({error:"Kh\u00f4ng th\u1ec3 xo\u00e1 ch\u1ee9ng t\u1eeb n\u00e0y do n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t"})}const $voucher_options$$=
3
- (await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option;if($obj$$.ngay_ct&&$obj$$.id_app&&$obj$$.schema&&$obj$$.schema.validate&&$obj$$.schema.validate.ngay_ct)try{await new Promise(($rs$$,$rj$$)=>{validator.unlockBook[0]($obj$$.id_app,$obj$$.ngay_ct,$unlock$$=>{if(!$unlock$$)return $rj$$(validator.unlockBook[1]);$rs$$($unlock$$)},$voucher_options$$)})}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.BOOK_LOCK})}$obj$$=
4
- convertObjectIdsToStrings($obj$$.toObject());($q_approve_requireOtp$$=$ctrl$$.options.requireOtp)&&_.isFunction($q_approve_requireOtp$$)&&($q_approve_requireOtp$$=$q_approve_requireOtp$$($obj$$,{action:"delete",_id:$_id$$,user:$user$$}));if($q_approve_requireOtp$$)try{await permission.verifyOTP($user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"])}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP})}setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,
5
- {action:"delete",obj:$obj$$});permission.hasRight($ctrl$$.require_id_app?$obj$$.id_app:void 0,$req$$.user.email,$module$$,"delete",function($error$$,$hr$$){if($hr$$)checkReference($model$$,$obj$$,function($error$$){if($error$$)return $callback$$({error:ERRORS.ERR_ARISE+($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_ARISE_CODE});$req$$.obj=$obj$$;$callback$$()});else return $callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})},
6
- {obj:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})})})},function($callback$$){setImmediate(()=>{let $obj$$=$req$$.obj;$ctrl$$.deleting?$ctrl$$.deleting($req$$.user,$obj$$,function($e$$,$obj$$){if($e$$)return console.error("deleting",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},{listinfo_code:$listinfo_code$$,
7
- req:$req$$}):($req$$.obj=$obj$$,$callback$$())},{req:$req$$}):$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},{listinfo_code:$listinfo_code$$,req:$req$$}):($req$$.obj=$obj$$,$callback$$())})},function($callback$$){setImmediate(()=>{let $obj$$=$req$$.obj;$ctrl$$.emit("deleting",{...$obj$$});deletePost($req$$.user,$obj$$,async $e$$=>{if($e$$)return console.error("delete post",$e$$),
8
- $e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$model$$.deleteOne({_id:$obj$$._id},function($e$$){if($e$$)return console.error("delete object",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});onAfterCommit(()=>{$ctrl$$.emit("deleted",$obj$$);$ctrl$$.deleteData({...$obj$$});global.getModel("log").create({id_app:$req$$.user.current_id_app,
9
- id_func:$ctrl$$.name,action:"DELETE",data:{id:$obj$$._id,data:$obj$$}},$req$$.user.email,$req$$.user_agent,$req$$);global.getModel("link").deleteMany({$or:[{id_a:$obj$$._id},{id_b:$obj$$._id}]},function($e$$){$e$$&&console.error("Can't delete links\n"+$e$$)});global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj$$);runWebhooks($ctrl$$,$obj$$,"DELETE");pushNotification($ctrl$$,$obj$$,"delete",null,null,{exclude_token:$req$$.query.access_token})});setImmediate(()=>
10
- {$ctrl$$.deleted?$ctrl$$.deleted($req$$.user,$obj$$,function($e$$,$obj$$){setImmediate(()=>{if($e$$)return console.error("deleted",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.obj=$obj$$;$callback$$(null)})}):($req$$.obj=$obj$$,$callback$$(null))})})})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.obj)})},withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSession(deleteHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
1
+ const async=require("async"),_=require("lodash"),validator=require("../libs/validator"),permission=require("../libs/permission"),{convertObjectIdsToStrings}=require("../libs/utils"),{onAfterCommit,handlerWithSession,runWithoutSession}=require("../libs/sessionContext.js"),{ERRORS,checkReference,pushNotification,runWebhooks,deletePost}=require("./controllerUtils"),deleteHandler=async($ctrl$$,$req$$,$mainCallback$$)=>{let $model$$=$ctrl$$.model,$module$$=$ctrl$$.module,$_id$$=$req$$.params.id;if(!$_id$$||
2
+ !global.mongoose.Types.ObjectId.isValid($_id$$))return $mainCallback$$({error:"id is required"});let $obj$$=await $model$$.findOne({_id:$_id$$});if(!$obj$$)return $mainCallback$$({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});let $listinfo_code$$=$req$$.headers["Listinfo-Code"]||$req$$.headers["listinfo-code"]||$req$$.query["listinfo-code"]||$obj$$.toObject().listinfo_code||$ctrl$$.name;async.series([function($callback$$){setImmediate(async()=>{const $user$$=$req$$.user;if($obj$$.trang_thai){var $q_approve_requireOtp$$=
3
+ {id_ct:$obj$$._id.toString(),user_approved:{$exists:!0}};if(await global.getModel("approve").findOne($q_approve_requireOtp$$))return $callback$$({error:"Kh\u00f4ng th\u1ec3 xo\u00e1 ch\u1ee9ng t\u1eeb n\u00e0y do n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t"})}const $voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option;if($obj$$.ngay_ct&&$obj$$.id_app&&$obj$$.schema&&$obj$$.schema.validate&&$obj$$.schema.validate.ngay_ct)try{await new Promise(($rs$$,
4
+ $rj$$)=>{validator.unlockBook[0]($obj$$.id_app,$obj$$.ngay_ct,$unlock$$=>{if(!$unlock$$)return $rj$$(validator.unlockBook[1]);$rs$$($unlock$$)},$voucher_options$$)})}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.BOOK_LOCK})}$obj$$=convertObjectIdsToStrings($obj$$.toObject());($q_approve_requireOtp$$=$ctrl$$.options.requireOtp)&&_.isFunction($q_approve_requireOtp$$)&&($q_approve_requireOtp$$=$q_approve_requireOtp$$($obj$$,{action:"delete",_id:$_id$$,user:$user$$}));
5
+ if($q_approve_requireOtp$$)try{await permission.verifyOTP($user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"])}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP})}setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,{action:"delete",obj:$obj$$});permission.hasRight($ctrl$$.require_id_app?$obj$$.id_app:void 0,$req$$.user.email,$module$$,"delete",function($error$$,$hr$$){if($hr$$)checkReference($model$$,$obj$$,function($error$$){if($error$$)return $callback$$({error:ERRORS.ERR_ARISE+
6
+ ($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_ARISE_CODE});$req$$.obj=$obj$$;$callback$$()});else return $callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})},{obj:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})})})},function($callback$$){setImmediate(()=>{let $obj$$=$req$$.obj;$ctrl$$.deleting?$ctrl$$.deleting($req$$.user,$obj$$,function($e$$,$obj$$){if($e$$)return console.error("deleting",$e$$),$e$$.error?
7
+ $callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},{listinfo_code:$listinfo_code$$,req:$req$$}):($req$$.obj=$obj$$,$callback$$())},{req:$req$$}):$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$$,function($error$$,$obj$$){if($error$$)return $callback$$($error$$);$req$$.obj=$obj$$;$callback$$()},{listinfo_code:$listinfo_code$$,
8
+ req:$req$$}):($req$$.obj=$obj$$,$callback$$())})},function($callback$$){setImmediate(()=>{let $obj$$=$req$$.obj;$ctrl$$.emit("deleting",{...$obj$$});deletePost($req$$.user,$obj$$,async $e$$=>{if($e$$)return console.error("delete post",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$model$$.deleteOne({_id:$obj$$._id},function($e$$){if($e$$)return console.error("delete object",
9
+ $e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});onAfterCommit(()=>{$ctrl$$.emit("deleted",$obj$$);$ctrl$$.deleteData({...$obj$$});global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"DELETE",data:{id:$obj$$._id,data:$obj$$}},$req$$.user.email,$req$$.user_agent,$req$$);global.getModel("link").deleteMany({$or:[{id_a:$obj$$._id},{id_b:$obj$$._id}]},function($e$$){$e$$&&console.error("Can't delete links\n"+$e$$)});global.getModel("customer").updateActives&&
10
+ global.getModel("customer").updateActives($obj$$);runWebhooks($ctrl$$,$obj$$,"DELETE");pushNotification($ctrl$$,$obj$$,"delete",null,null,{exclude_token:$req$$.query.access_token})});setImmediate(()=>{$ctrl$$.deleted?runWithoutSession(()=>{$ctrl$$.deleted($req$$.user,$obj$$,function($e$$,$obj$$){if($e$$)return console.error("deleted",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.obj=$obj$$;$callback$$(null)})}):($req$$.obj=$obj$$,$callback$$(null))})})})})}],$e$$=>
11
+ {if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.obj)})},withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSession(deleteHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;
@@ -1,6 +1,6 @@
1
- const async=require("async"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),_=require("lodash"),validate=require("../libs/validate"),permission=require("../libs/permission"),validator=require("../libs/validator"),{convertObjectIdsToStrings}=require("../libs/utils"),{onAfterCommit,handlerWithSession}=require("../libs/sessionContext.js"),{ERRORS,isExists,createIdRef,checkReference,fields_sync_master_detail,postData,getNextSequence,runWebhooks,
2
- deletePost}=require("./controllerUtils"),updateHandler=async function($ctrl$$,$req$$,$callback$$){let {user:$user$$,id:$id$$,data:$data$$,action:$action$$,_action:$_action$$}=$req$$;$_action$$||="update";delete $data$$.__v;try{const $model$$=$ctrl$$.model,$unique$$=$ctrl$$.unique,$module$$=$ctrl$$.module,$schema_paths$$=$model$$.schema.paths;$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&($data$$.ma_ct=$ctrl$$.name.toUpperCase());delete $data$$.session_updated;delete $data$$.session_created;$req$$&&
3
- $schema_paths$$.session_updated&&($data$$.session_updated=($req$$.cookies||{}).uid);const $obj$$=await $model$$.findById($id$$);if(!$obj$$)return console.error("[updateHanlder] not found object",$model$$.modelName,$id$$),$callback$$({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});$data$$.listinfo_code=$obj$$.toObject().listinfo_code||$ctrl$$.name;$req$$.headers=$req$$.headers||{};$req$$.query=$req$$.query||{};const $listinfo_code$$=$req$$.headers["Listinfo-Code"]||$req$$.headers["listinfo-code"]||
1
+ const async=require("async"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),_=require("lodash"),validate=require("../libs/validate"),permission=require("../libs/permission"),validator=require("../libs/validator"),{convertObjectIdsToStrings}=require("../libs/utils"),{onAfterCommit,handlerWithSession,runWithoutSession}=require("../libs/sessionContext.js"),{ERRORS,isExists,createIdRef,checkReference,fields_sync_master_detail,postData,getNextSequence,
2
+ runWebhooks,deletePost}=require("./controllerUtils"),updateHandler=async function($ctrl$$,$req$$,$callback$$){let {user:$user$$,id:$id$$,data:$data$$,action:$action$$,_action:$_action$$}=$req$$;$_action$$||="update";delete $data$$.__v;try{const $model$$=$ctrl$$.model,$unique$$=$ctrl$$.unique,$module$$=$ctrl$$.module,$schema_paths$$=$model$$.schema.paths;$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&($data$$.ma_ct=$ctrl$$.name.toUpperCase());delete $data$$.session_updated;delete $data$$.session_created;
3
+ $req$$&&$schema_paths$$.session_updated&&($data$$.session_updated=($req$$.cookies||{}).uid);const $obj$$=await $model$$.findById($id$$);if(!$obj$$)return console.error("[updateHanlder] not found object",$model$$.modelName,$id$$),$callback$$({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});$data$$.listinfo_code=$obj$$.toObject().listinfo_code||$ctrl$$.name;$req$$.headers=$req$$.headers||{};$req$$.query=$req$$.query||{};const $listinfo_code$$=$req$$.headers["Listinfo-Code"]||$req$$.headers["listinfo-code"]||
4
4
  $req$$.query["listinfo-code"]||$data$$.listinfo_code;let $voucher_options$$;$listinfo_code$$&&($voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$listinfo_code$$.toLowerCase()}).lean()||{}).option);$voucher_options$$||($voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option);let $current_obj$$;if($ctrl$$.options.requireRecaptchaToken&&configs.GOOGLE_RECAPTCHA_SECRET_KEY){if(!$data$$["g-recaptcha-response"])return $callback$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u g-recaptcha-response");
5
5
  try{await permission.verifyReCaptcha($data$$["g-recaptcha-response"])}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}}let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($data$$,{action:$_action$$,_id:$id$$,user:$user$$}));if($requireOtp$$&&$_action$$!=="import")try{await permission.verifyOTP($user$$.email,$data$$["otp-id"],$data$$["otp-code"])}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP})}let $checkSoCT$$=
6
6
  function($obj$$,$callback$$){if($model$$.schema.paths.ngay_ct&&$model$$.schema.paths.so_ct&&$obj$$.ngay_ct&&$data$$.so_ct&&$obj$$.so_ct!==$data$$.so_ct&&$voucher_options$$?.check_so_ct&&$voucher_options$$?.check_so_ct!=="0"){let $query_check$$={id_app:$obj$$.id_app,so_ct:$data$$.so_ct,listinfo_code:$listinfo_code$$||$ctrl$$.name,_id:{$ne:$obj$$._id.toString()}},$tu_ngay$$;var $date_check_den_ngay$$=$data$$.ngay_ct||$obj$$.ngay_ct;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("date").toDate();
@@ -33,6 +33,6 @@ $obj_created$$);global.getModel("customer").updateActives&&global.getModel("cust
33
33
  $req$$)})});$_callback$$(null,$obj_created_cv$$)}},{req:$req$$})})},function($obj$$,$callback$$){$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,$callback$$){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(),!$approve_data$$||
34
34
  $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$$)));if($req$$&&$_action$$!="import"&&$req$$.query.return_data!==!1)$ctrl$$.onView($user$$,[$obj_created_cv$$],function($error$$,$viewValue$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);
35
35
  $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]);try{await global.clientRedis.publish($channel$$,$message$$)}catch($e$$){console.error("[approve] [sendNotifyApproved] fire event","request_approved",$e$$)}});$callback$$(null,$viewValue$$[0])})},
36
- {req:$req$$});else $callback$$(null,{_id:$obj_created_cv$$._id})})},function($obj$$,$_callback$$){setImmediate(async()=>{(await permission.getFieldNotRight($obj$$.id_app,$user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $obj$$[$f$$]});$obj$$.collection_name=$ctrl$$.collection_name;$ctrl$$.updated?$ctrl$$.updated($user$$,$obj$$,function($error$$,$obj$$){$error$$?(console.error("error when saved",$error$$),$_callback$$($error$$,void 0)):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,
37
- function($error$$){$error$$?$_callback$$($error$$,void 0):$_callback$$(null,$obj$$)}):$_callback$$(null,$obj$$)},$current_obj$$):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){$error$$?$_callback$$($error$$,void 0):$_callback$$(null,$obj$$)}):$_callback$$(null,$obj$$)})}],($e$$,$rs$$)=>{$e$$?(console.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],$callback$$(null,{new_obj:$rs$$,
38
- old_obj:$current_obj$$}))})}catch($e$$){console.error($e$$),$callback$$($e$$)}},withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSession(updateHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;module.exports.updateHandler=updateHandler;
36
+ {req:$req$$});else $callback$$(null,{_id:$obj_created_cv$$._id})})},function($obj$$,$_callback$$){setImmediate(async()=>{(await permission.getFieldNotRight($obj$$.id_app,$user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $obj$$[$f$$]});$obj$$.collection_name=$ctrl$$.collection_name;$ctrl$$.updated?runWithoutSession(()=>{$ctrl$$.updated($user$$,$obj$$,function($error$$,$obj$$){$error$$?(console.error("error when saved",$error$$),$_callback$$($error$$,void 0)):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,
37
+ $obj$$,function($error$$){$error$$?$_callback$$($error$$,void 0):$_callback$$(null,$obj$$)}):$_callback$$(null,$obj$$)},$current_obj$$)}):$ctrl$$.dynamicUpdated?runWithoutSession(()=>{$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){$error$$?$_callback$$($error$$,void 0):$_callback$$(null,$obj$$)})}):$_callback$$(null,$obj$$)})}],($e$$,$rs$$)=>{$e$$?(console.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],
38
+ $callback$$(null,{new_obj:$rs$$,old_obj:$current_obj$$}))})}catch($e$$){console.error($e$$),$callback$$($e$$)}},withSesssion=async($ctrl$$,$req$$,$callback$$)=>{handlerWithSession(updateHandler,$ctrl$$,$req$$,$callback$$)};module.exports=withSesssion;module.exports.updateHandler=updateHandler;
@@ -16,23 +16,24 @@ sortObjectKeys($manualQ_staticQuery$$);return{type:"BATCH",staticQuery:$manualQ_
16
16
  $dynamicKey$jscomp$1_finalIdApp_join$$.where[$field_k$$],lodash.isObject($dynamicKey_queryForKey_v$$)?$manualQ_staticQuery$$[$field_k$$]=$dynamicKey_queryForKey_v$$:$manualQ_staticQuery$$[$dynamicKey_queryForKey_v$$]=$item$$[$field_k$$];$model$$.schema?.paths?.id_app&&(($cacheKey_cacheKey$jscomp$1_finalIdApp$jscomp$1_resolveIdApp_sortedStatic$jscomp$1_value$$=$cacheKey_cacheKey$jscomp$1_finalIdApp$jscomp$1_resolveIdApp_sortedStatic$jscomp$1_value$$($manualQ_staticQuery$$.id_app))?$manualQ_staticQuery$$.id_app=
17
17
  $cacheKey_cacheKey$jscomp$1_finalIdApp$jscomp$1_resolveIdApp_sortedStatic$jscomp$1_value$$:delete $manualQ_staticQuery$$.id_app,$finalIdAppForKey_queryForKey$$=$cacheKey_cacheKey$jscomp$1_finalIdApp$jscomp$1_resolveIdApp_sortedStatic$jscomp$1_value$$);if("_id"in $manualQ_staticQuery$$&&!isValidObjectId($manualQ_staticQuery$$._id))return{type:"SKIP"};$dynamicKey_queryForKey_v$$={...$manualQ_staticQuery$$};$cacheKey_cacheKey$jscomp$1_finalIdApp$jscomp$1_resolveIdApp_sortedStatic$jscomp$1_value$$=generateRedisKey($model$$.modelName,
18
18
  $dynamicKey_queryForKey_v$$,$finalIdAppForKey_queryForKey$$);return{type:"MANUAL",query:$manualQ_staticQuery$$,cacheKey:$cacheKey_cacheKey$jscomp$1_finalIdApp$jscomp$1_resolveIdApp_sortedStatic$jscomp$1_value$$}}
19
- function createQueryPlan($dynamicFields$jscomp$1_items$$,$joinFields$$,$modelOrigin$$,$id_app$$){const $batchPlan$$={},$manualQueries$$=[],$metaMap$$=new Map;$dynamicFields$jscomp$1_items$$.forEach($item$$=>{const $itemMetas$$=[];$joinFields$$.forEach($join$$=>{let $_model$$=typeof $modelOrigin$$!=="function"||$modelOrigin$$.findOne?$modelOrigin$$:$modelOrigin$$($item$$);lodash.isString($_model$$)&&($_model$$=mongoose.models[$_model$$]);if($_model$$){var $strategy$$=analyzeJoinStrategy($join$$,$item$$,
20
- $_model$$,$id_app$$);if($strategy$$&&$strategy$$.type!=="SKIP"){var $fields$$=$join$$.fields_need_get_data;if($strategy$$.type==="MANUAL")$manualQueries$$.push({model:$_model$$,modelName:$_model$$.modelName,query:$strategy$$.query,fields:$fields$$,item:$item$$,join:$join$$,cacheKey:$strategy$$.cacheKey}),$itemMetas$$.push({type:"MANUAL",join:$join$$,cacheKey:$strategy$$.cacheKey});else if($strategy$$.type==="BATCH"){const {signature:$signature$$,dynamicKey:$dynamicKey$$,dynamicValue:$dynamicValue$$,
21
- staticQuery:$staticQuery$$}=$strategy$$;$batchPlan$$[$signature$$]||($batchPlan$$[$signature$$]={model:$_model$$,staticQuery:$staticQuery$$,dynamicKey:$dynamicKey$$,signature:$signature$$,values:new Set,fields:void 0});mergeFields($batchPlan$$[$signature$$],$fields$$);$batchPlan$$[$signature$$].values.add($dynamicValue$$);$itemMetas$$.push({type:"BATCH",join:$join$$,cacheKey:`${$signature$$}_VAL_${$dynamicValue$$==null?"__NULL__":$dynamicKey$$==="_id"?$dynamicValue$$.toString():$dynamicValue$$}`})}}}});
22
- $itemMetas$$.length&&$metaMap$$.set($item$$,$itemMetas$$)});$dynamicFields$jscomp$1_items$$=findDynamicFields($manualQueries$$.map($m$$=>$m$$.query));if($dynamicFields$jscomp$1_items$$.length===1){const $dynamicKey$$=$dynamicFields$jscomp$1_items$$[0],$remainingManualQueries$$=[];$manualQueries$$.forEach($mq$$=>{var $newBatchCacheKey_val$$=$mq$$.query[$dynamicKey$$],$itemMetas$jscomp$1_metaToUpdate_staticQuery$$={...$mq$$.query};delete $itemMetas$jscomp$1_metaToUpdate_staticQuery$$[$dynamicKey$$];
23
- var $signature$jscomp$1_sortedStatic$$=sortObjectKeys($itemMetas$jscomp$1_metaToUpdate_staticQuery$$);$signature$jscomp$1_sortedStatic$$=`${$mq$$.modelName}_${JSON.stringify($signature$jscomp$1_sortedStatic$$)}_${$dynamicKey$$}`;if($dynamicKey$$!=="_id"||isValidObjectId($newBatchCacheKey_val$$)){if($batchPlan$$[$signature$jscomp$1_sortedStatic$$]||($batchPlan$$[$signature$jscomp$1_sortedStatic$$]={model:$mq$$.model,staticQuery:$itemMetas$jscomp$1_metaToUpdate_staticQuery$$,dynamicKey:$dynamicKey$$,
24
- signature:$signature$jscomp$1_sortedStatic$$,values:new Set,fields:void 0}),mergeFields($batchPlan$$[$signature$jscomp$1_sortedStatic$$],$mq$$.fields),$batchPlan$$[$signature$jscomp$1_sortedStatic$$].values.add($newBatchCacheKey_val$$),$newBatchCacheKey_val$$=`${$signature$jscomp$1_sortedStatic$$}_VAL_${$newBatchCacheKey_val$$==null?"__NULL__":$dynamicKey$$==="_id"?$newBatchCacheKey_val$$.toString():$newBatchCacheKey_val$$}`,$itemMetas$jscomp$1_metaToUpdate_staticQuery$$=$metaMap$$.get($mq$$.item))if($itemMetas$jscomp$1_metaToUpdate_staticQuery$$=
25
- $itemMetas$jscomp$1_metaToUpdate_staticQuery$$.find($m$$=>$m$$.cacheKey===$mq$$.cacheKey))$itemMetas$jscomp$1_metaToUpdate_staticQuery$$.type="BATCH",$itemMetas$jscomp$1_metaToUpdate_staticQuery$$.cacheKey=$newBatchCacheKey_val$$}else $remainingManualQueries$$.push($mq$$)});$manualQueries$$.length=0;$remainingManualQueries$$.length>0&&$manualQueries$$.push(...$remainingManualQueries$$)}return{batchPlan:$batchPlan$$,manualQueries:$manualQueries$$,metaMap:$metaMap$$}}
26
- function mergeFields($plan$$,$newFields$$){$plan$$.fields!==null&&($newFields$$===void 0?$plan$$.fields=null:($plan$$.fields?Object.assign($plan$$.fields,$newFields$$):$plan$$.fields={...$newFields$$},$plan$$.dynamicKey&&($plan$$.fields[$plan$$.dynamicKey]=1)))}
19
+ function createQueryPlan($dynamicFields$jscomp$1_items$$,$joinFields$$,$modelOrigin$$,$id_app$$){const $batchPlan$$={},$manualQueries$$=[],$metaMap$$=new Map;$dynamicFields$jscomp$1_items$$.forEach($item$$=>{const $itemMetas$$=[];$joinFields$$.forEach($join$$=>{var $_model$jscomp$1_cacheKey$$=typeof $modelOrigin$$!=="function"||$modelOrigin$$.findOne?$modelOrigin$$:$modelOrigin$$($item$$);lodash.isString($_model$jscomp$1_cacheKey$$)&&($_model$jscomp$1_cacheKey$$=mongoose.models[$_model$jscomp$1_cacheKey$$]);
20
+ if($_model$jscomp$1_cacheKey$$){var $strategy$$=analyzeJoinStrategy($join$$,$item$$,$_model$jscomp$1_cacheKey$$,$id_app$$);if($strategy$$&&$strategy$$.type!=="SKIP"){var $fields$$=$join$$.fields_need_get_data;if($strategy$$.type==="MANUAL")$manualQueries$$.push({model:$_model$jscomp$1_cacheKey$$,modelName:$_model$jscomp$1_cacheKey$$.modelName,query:$strategy$$.query,fields:$fields$$,item:$item$$,join:$join$$,cacheKey:$strategy$$.cacheKey}),$itemMetas$$.push({type:"MANUAL",join:$join$$,cacheKey:$strategy$$.cacheKey});
21
+ else if($strategy$$.type==="BATCH"){const {signature:$signature$$,dynamicKey:$dynamicKey$$,dynamicValue:$dynamicValue$$,staticQuery:$staticQuery$$}=$strategy$$;$batchPlan$$[$signature$$]||($batchPlan$$[$signature$$]={model:$_model$jscomp$1_cacheKey$$,staticQuery:$staticQuery$$,dynamicKey:$dynamicKey$$,signature:$signature$$,values:new Set,fields:void 0});mergeFields($batchPlan$$[$signature$$],$fields$$);$batchPlan$$[$signature$$].values.add($dynamicValue$$);$_model$jscomp$1_cacheKey$$=`${$signature$$}_VAL_${$dynamicValue$$==
22
+ null?"__NULL__":$dynamicKey$$==="_id"?$dynamicValue$$.toString():$dynamicValue$$}`.replace(/\./g,"_");$itemMetas$$.push({type:"BATCH",join:$join$$,cacheKey:$_model$jscomp$1_cacheKey$$})}}}});$itemMetas$$.length&&$metaMap$$.set($item$$,$itemMetas$$)});$dynamicFields$jscomp$1_items$$=findDynamicFields($manualQueries$$.map($m$$=>$m$$.query));if($dynamicFields$jscomp$1_items$$.length===1){const $dynamicKey$$=$dynamicFields$jscomp$1_items$$[0],$remainingManualQueries$$=[];$manualQueries$$.forEach($mq$$=>
23
+ {var $newBatchCacheKey_val$$=$mq$$.query[$dynamicKey$$],$itemMetas$jscomp$1_metaToUpdate_staticQuery$$={...$mq$$.query};delete $itemMetas$jscomp$1_metaToUpdate_staticQuery$$[$dynamicKey$$];var $signature$jscomp$1_sortedStatic$$=sortObjectKeys($itemMetas$jscomp$1_metaToUpdate_staticQuery$$);$signature$jscomp$1_sortedStatic$$=`${$mq$$.modelName}_${JSON.stringify($signature$jscomp$1_sortedStatic$$)}_${$dynamicKey$$}`;if($dynamicKey$$!=="_id"||isValidObjectId($newBatchCacheKey_val$$)){if($batchPlan$$[$signature$jscomp$1_sortedStatic$$]||
24
+ ($batchPlan$$[$signature$jscomp$1_sortedStatic$$]={model:$mq$$.model,staticQuery:$itemMetas$jscomp$1_metaToUpdate_staticQuery$$,dynamicKey:$dynamicKey$$,signature:$signature$jscomp$1_sortedStatic$$,values:new Set,fields:void 0}),mergeFields($batchPlan$$[$signature$jscomp$1_sortedStatic$$],$mq$$.fields),$batchPlan$$[$signature$jscomp$1_sortedStatic$$].values.add($newBatchCacheKey_val$$),$newBatchCacheKey_val$$=`${$signature$jscomp$1_sortedStatic$$}_VAL_${$newBatchCacheKey_val$$==null?"__NULL__":$dynamicKey$$===
25
+ "_id"?$newBatchCacheKey_val$$.toString():$newBatchCacheKey_val$$}`.replace(/\./g,"_"),$itemMetas$jscomp$1_metaToUpdate_staticQuery$$=$metaMap$$.get($mq$$.item))if($itemMetas$jscomp$1_metaToUpdate_staticQuery$$=$itemMetas$jscomp$1_metaToUpdate_staticQuery$$.find($m$$=>$m$$.cacheKey===$mq$$.cacheKey))$itemMetas$jscomp$1_metaToUpdate_staticQuery$$.type="BATCH",$itemMetas$jscomp$1_metaToUpdate_staticQuery$$.cacheKey=$newBatchCacheKey_val$$}else $remainingManualQueries$$.push($mq$$)});$manualQueries$$.length=
26
+ 0;$remainingManualQueries$$.length>0&&$manualQueries$$.push(...$remainingManualQueries$$)}return{batchPlan:$batchPlan$$,manualQueries:$manualQueries$$,metaMap:$metaMap$$}}function mergeFields($plan$$,$newFields$$){$plan$$.fields!==null&&($newFields$$===void 0?$plan$$.fields=null:($plan$$.fields?Object.assign($plan$$.fields,$newFields$$):$plan$$.fields={...$newFields$$},$plan$$.dynamicKey&&($plan$$.fields[$plan$$.dynamicKey]=1)))}
27
27
  async function executeQueries($batchPlan$$,$manualQueries$$,$options$$,$id_app$$){const $fetchedCache$$={};await runWithoutSession(async()=>{const $promises$$=[];Object.values($batchPlan$$).forEach($plan$$=>{const $values$$=Array.from($plan$$.values).filter($v$$=>$v$$!=null);$values$$.length&&$promises$$.push((async()=>{try{const $modelName$$=$plan$$.model.modelName,$isCacheEnabled$$=$options$$.cache&&cachedKeys&&cachedKeys[$modelName$$];let $missingValues$$=[...$values$$];if($isCacheEnabled$$&&global.clientRedis){const $redisMap$$=
28
- $values$$.map($val$$=>{var $rKey_tempQ$$={...$plan$$.staticQuery};$rKey_tempQ$$[$plan$$.dynamicKey]=$val$$;$rKey_tempQ$$=generateRedisKey($modelName$$,$rKey_tempQ$$,$id_app$$);return{val:$val$$,rKey:$rKey_tempQ$$}}),$keysToGet$$=$redisMap$$.map($i$$=>$i$$.rKey),$results$$=await redisMGet($keysToGet$$)||[];$missingValues$$=[];$results$$.forEach(($jsonStr$$,$i$$)=>{$i$$=$redisMap$$[$i$$].val;if($jsonStr$$)try{const $data$$=JSON.parse($jsonStr$$);$data$$._id&&($data$$._id=$data$$._id.toString());$fetchedCache$$[`${$plan$$.signature}_VAL_${$i$$==
29
- null?"__NULL__":$plan$$.dynamicKey==="_id"?$i$$.toString():$i$$}`]=$data$$}catch($e$$){console.error("[joinData] parse d\u1eef li\u1ec7u t\u1eeb redis",$e$$),$missingValues$$.push($i$$)}else $missingValues$$.push($i$$)})}$plan$$.dynamicKey==="_id"&&($missingValues$$=$missingValues$$.filter($m$$=>isValidObjectId($m$$)));if($missingValues$$.length){const $query$$={...$plan$$.staticQuery,[$plan$$.dynamicKey]:{$in:$missingValues$$}};$id_app$$&&$plan$$.model.schema.paths.id_app&&($query$$.id_app=$id_app$$);
30
- let $mq$$=$plan$$.model.find($query$$);$plan$$.fields&&($mq$$=$mq$$.select($plan$$.fields));(await $mq$$.lean()).forEach($row$$=>{$row$$._id&&($row$$._id=$row$$._id.toString());let $val$$=$row$$[$plan$$.dynamicKey];$fetchedCache$$[`${$plan$$.signature}_VAL_${$val$$==null?"__NULL__":$plan$$.dynamicKey==="_id"?$val$$.toString():$val$$}`]=$row$$})}}catch($e$$){console.error("[joinData] Batch Error:",$e$$)}})())});const $pendingRequests$$=new Map;$manualQueries$$.forEach($mq$$=>{const $key$$=$mq$$.cacheKey;
31
- if($pendingRequests$$.has($key$$))$promises$$.push($pendingRequests$$.get($key$$));else{var $executionPromise$$=(async()=>{try{let $data$$=null;if($options$$.cache&&cachedKeys&&cachedKeys[$mq$$.modelName]&&global.clientRedis){const $jsonStr$$=await redisGet($mq$$.cacheKey);if($jsonStr$$)try{$data$$=JSON.parse($jsonStr$$)}catch($e$$){console.warn("JSON parse error from Redis:",$mq$$.cacheKey)}}if(!$data$$){console.log("[joinData][manualQueries]",$mq$$.model.modelName,$mq$$.query);let $query$$=$mq$$.model.findOne($mq$$.query);
32
- $mq$$.fields&&($query$$=$query$$.select($mq$$.fields));$data$$=await $query$$.lean()}$data$$?($data$$._id&&($data$$._id=$data$$._id.toString()),$fetchedCache$$[$mq$$.cacheKey]=$data$$):$fetchedCache$$[$mq$$.cacheKey]=null}catch($e$$){console.error("Manual Query Error:",$e$$),$fetchedCache$$[$mq$$.cacheKey]=null}finally{$pendingRequests$$.delete($key$$)}})();$pendingRequests$$.set($key$$,$executionPromise$$);$promises$$.push($executionPromise$$)}});await Promise.all($promises$$)});return $fetchedCache$$}
28
+ $values$$.map($val$$=>{var $rKey_tempQ$$={...$plan$$.staticQuery};$rKey_tempQ$$[$plan$$.dynamicKey]=$val$$;$rKey_tempQ$$=generateRedisKey($modelName$$,$rKey_tempQ$$,$id_app$$);return{val:$val$$,rKey:$rKey_tempQ$$}}),$keysToGet$$=$redisMap$$.map($i$$=>$i$$.rKey),$results$$=await redisMGet($keysToGet$$)||[];$missingValues$$=[];$results$$.forEach(($jsonStr$$,$i$$)=>{$i$$=$redisMap$$[$i$$].val;if($jsonStr$$)try{const $data$$=JSON.parse($jsonStr$$);$data$$._id&&($data$$._id=$data$$._id.toString());const $cacheKey$$=
29
+ `${$plan$$.signature}_VAL_${$i$$==null?"__NULL__":$plan$$.dynamicKey==="_id"?$i$$.toString():$i$$}`.replace(/\./g,"_");$fetchedCache$$[$cacheKey$$]=$data$$}catch($e$$){console.error("[joinData] parse d\u1eef li\u1ec7u t\u1eeb redis",$e$$),$missingValues$$.push($i$$)}else $missingValues$$.push($i$$)})}$plan$$.dynamicKey==="_id"&&($missingValues$$=$missingValues$$.filter($m$$=>isValidObjectId($m$$)));if($missingValues$$.length){const $query$$={...$plan$$.staticQuery,[$plan$$.dynamicKey]:{$in:$missingValues$$}};
30
+ $id_app$$&&$plan$$.model.schema.paths.id_app&&($query$$.id_app=$id_app$$);let $mq$$=$plan$$.model.find($query$$);$plan$$.fields&&($mq$$=$mq$$.select($plan$$.fields));(await $mq$$.lean()).forEach($row$$=>{$row$$._id&&($row$$._id=$row$$._id.toString());var $cacheKey$jscomp$4_val$$=$row$$[$plan$$.dynamicKey];$cacheKey$jscomp$4_val$$=`${$plan$$.signature}_VAL_${$cacheKey$jscomp$4_val$$==null?"__NULL__":$plan$$.dynamicKey==="_id"?$cacheKey$jscomp$4_val$$.toString():$cacheKey$jscomp$4_val$$}`.replace(/\./g,
31
+ "_");$fetchedCache$$[$cacheKey$jscomp$4_val$$]=$row$$})}}catch($e$$){console.error("[joinData] Batch Error:",$e$$)}})())});const $pendingRequests$$=new Map;$manualQueries$$.forEach($mq$$=>{const $key$$=$mq$$.cacheKey;if($pendingRequests$$.has($key$$))$promises$$.push($pendingRequests$$.get($key$$));else{var $executionPromise$$=(async()=>{try{let $data$$=null;if($options$$.cache&&cachedKeys&&cachedKeys[$mq$$.modelName]&&global.clientRedis){const $jsonStr$$=await redisGet($mq$$.cacheKey);if($jsonStr$$)try{$data$$=
32
+ JSON.parse($jsonStr$$)}catch($e$$){console.warn("JSON parse error from Redis:",$mq$$.cacheKey)}}if(!$data$$){console.log("[joinData][manualQueries]",$mq$$.model.modelName,$mq$$.query);let $query$$=$mq$$.model.findOne($mq$$.query);$mq$$.fields&&($query$$=$query$$.select($mq$$.fields));$data$$=await $query$$.lean()}$data$$?($data$$._id&&($data$$._id=$data$$._id.toString()),$fetchedCache$$[$mq$$.cacheKey]=$data$$):$fetchedCache$$[$mq$$.cacheKey]=null}catch($e$$){console.error("[joinData][executeQueries] Manual Query Error:",
33
+ $e$$),$fetchedCache$$[$mq$$.cacheKey]=null}finally{$pendingRequests$$.delete($key$$)}})();$pendingRequests$$.set($key$$,$executionPromise$$);$promises$$.push($executionPromise$$)}});await Promise.all($promises$$)});return $fetchedCache$$}
33
34
  async function mapResultsToItems($data$jscomp$2_items$$,$metaMap$$,$dataCache$$,$options$$){for(let $item$$ of $data$jscomp$2_items$$){$data$jscomp$2_items$$=$metaMap$$.get($item$$)||[];$options$$.cache&&!$item$$.__refs&&($item$$.__refs={});for(let $meta$$ of $data$jscomp$2_items$$){const {join:$join$$,cacheKey:$cacheKey$$}=$meta$$;$data$jscomp$2_items$$=$dataCache$$[$cacheKey$$];!$data$jscomp$2_items$$&&$options$$.cache&&$item$$.__refs&&$item$$.__refs[$cacheKey$$]&&($data$jscomp$2_items$$=$item$$.__refs[$cacheKey$$]);
34
35
  $data$jscomp$2_items$$=$data$jscomp$2_items$$||null;$options$$.cache&&($item$$.__refs[$cacheKey$$]=$data$jscomp$2_items$$);await applyFields($item$$,$data$jscomp$2_items$$||{},$join$$)}}}
35
- async function applyFields($item$$,$data$$,$join$$){$data$$&&Object.keys($data$$).length!=0&&($join$$.fields&&(lodash.isFunction($join$$.fields)?$join$$.fields($item$$,$data$$):(Array.isArray($join$$.fields)?$join$$.fields:[$join$$.fields]).forEach($map$$=>{if(lodash.isObject($map$$))if($map$$.name&&$map$$.value)$item$$[$map$$.name]=$data$$[$map$$.value];else for(let $key_map$$ in $map$$)$item$$[$key_map$$]=$data$$[$map$$[$key_map$$]];else $item$$[$map$$]=$data$$[$map$$]})),$join$$.setFields&&$join$$.setFields($item$$,
36
- $data$$),$join$$.asyncSetFields&&await $join$$.asyncSetFields($item$$,$data$$,()=>{}).catch(console.error))}
36
+ async function applyFields($item$$,$data$$,$join$$){if($data$$&&Object.keys($data$$).length!=0)try{$join$$.fields&&(lodash.isFunction($join$$.fields)?$join$$.fields($item$$,$data$$):(Array.isArray($join$$.fields)?$join$$.fields:[$join$$.fields]).forEach($map$$=>{if(lodash.isObject($map$$))if($map$$.name&&$map$$.value)$item$$[$map$$.name]=$data$$[$map$$.value];else for(let $key_map$$ in $map$$)$item$$[$key_map$$]=$data$$[$map$$[$key_map$$]];else $item$$[$map$$]=$data$$[$map$$]})),$join$$.setFields&&
37
+ $join$$.setFields($item$$,$data$$),$join$$.asyncSetFields&&await $join$$.asyncSetFields($item$$,$data$$,()=>{}).catch(console.error)}catch($e$$){console.error("[joinData] [applyFields]",$e$$.message,JSON.stringify({item:$item$$,data:$data$$,join:$join$$},null,2))}}
37
38
  Array.prototype.joinModel9=async function($args_id_app$$,$dataCache$jscomp$1_model$$,$joinFields$$,$fn$$,$options$$={cache:!0}){$args_id_app$$=normalizeArgs(this,$args_id_app$$,$dataCache$jscomp$1_model$$,$joinFields$$,$fn$$,$options$$);if(!$args_id_app$$.items.length)return safeCallback($args_id_app$$.fn,$args_id_app$$.items),$args_id_app$$.items;const {batchPlan:$batchPlan$$,manualQueries:$manualQueries$$,metaMap:$metaMap$$}=createQueryPlan($args_id_app$$.items,$args_id_app$$.joinFields,$args_id_app$$.modelOrigin,
38
39
  $args_id_app$$.id_app);$dataCache$jscomp$1_model$$=await executeQueries($batchPlan$$,$manualQueries$$,$args_id_app$$.options,$args_id_app$$.id_app);await mapResultsToItems($args_id_app$$.items,$metaMap$$,$dataCache$jscomp$1_model$$,$args_id_app$$.options);safeCallback($args_id_app$$.fn,$args_id_app$$.items);return $args_id_app$$.items};
@@ -1,9 +1,9 @@
1
1
  const async=require("async"),underscore=require("underscore"),moment=require("moment"),{onAfterCommit}=require("./sessionContext"),models=[{name:"user",key:["email"]},{name:"participant",key:["email"]},{name:"usergroup",key:["_id"]},{name:"dmvt",key:["ma_vt"]},{name:"customer",key:["ma_kh","_id"]},{name:"app",key:["_id"]},{name:"group",key:["_id"]},{name:"dokho",key:["_id"]},{name:"dvcs",key:["_id","ma_dvcs"]},{name:"dmkho",key:["ma_kho","_id"]},{name:"dmbp",key:["ma_bp","_id"]},{name:"dmnv",key:["ma_nv",
2
2
  "_id"]},{name:"dmphi",key:["ma_phi","_id"]},{name:"dmdt",key:["ma_dt","_id"]},{name:"account",key:["tk"]},{name:"trangthai",key:[$obj$$=>`:trangthai:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`:trangthai:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]},{name:"trangthaiapp",key:[$obj$$=>`${$obj$$._id.toString()}:ma_ct:${$obj$$.ma_ct}:ma_trang_thai:${$obj$$.ma_trang_thai}`,$obj$$=>`${$obj$$._id.toString()}:ma_trang_thai:${$obj$$.ma_trang_thai}:ma_ct:${$obj$$.ma_ct}`]}];
3
3
  exports.sortObjectKeys=$obj$$=>Object.keys($obj$$).sort().reduce(($acc$$,$key$$)=>({...$acc$$,[$key$$]:$obj$$[$key$$]}),{});
4
- exports.generateRedisKey=($d_session_modelName$$,$query_query_sorted$$,$id_app$$,$key$jscomp$11_val$$)=>{$query_query_sorted$$=exports.sortObjectKeys($query_query_sorted$$);$d_session_modelName$$=$d_session_modelName$$||"";if(!$key$jscomp$11_val$$&&$query_query_sorted$$._id)$d_session_modelName$$="stp:"+$query_query_sorted$$._id;else if($key$jscomp$11_val$$){if(typeof $key$jscomp$11_val$$=="function")return $key$jscomp$11_val$$($query_query_sorted$$);if($key$jscomp$11_val$$!=="id_app"&&$query_query_sorted$$[$key$jscomp$11_val$$]!==
5
- void 0&&$query_query_sorted$$[$key$jscomp$11_val$$]!==null){var $key$$=$query_query_sorted$$[$key$jscomp$11_val$$];$d_session_modelName$$=$d_session_modelName$$?`${$d_session_modelName$$}:${$key$jscomp$11_val$$}:${$key$$}`:`${$key$jscomp$11_val$$}:${$key$$}`}}else for($key$$ in $query_query_sorted$$)$key$$!=="id_app"&&$query_query_sorted$$[$key$$]!==void 0&&$query_query_sorted$$[$key$$]!==null&&($key$jscomp$11_val$$=$query_query_sorted$$[$key$$],$d_session_modelName$$=$d_session_modelName$$?`${$d_session_modelName$$}:${$key$$}:${$key$jscomp$11_val$$}`:
6
- `${$key$$}:${$key$jscomp$11_val$$}`);return($id_app$$=$id_app$$||$query_query_sorted$$.id_app)?"id_app:"+$id_app$$+":"+$d_session_modelName$$:":"+$d_session_modelName$$};exports.cachedKeys=()=>{let $_keys$$={};models.forEach($model$$=>{$_keys$$[$model$$.name]=1});return $_keys$$};
4
+ exports.generateRedisKey=($d_session_modelName$$,$query_query_sorted$$,$id_app$$,$key$jscomp$11_val$$)=>{$query_query_sorted$$=exports.sortObjectKeys($query_query_sorted$$);$d_session_modelName$$=$d_session_modelName$$||"";if(!$key$jscomp$11_val$$&&$query_query_sorted$$._id)$d_session_modelName$$="flex:"+$query_query_sorted$$._id;else if($key$jscomp$11_val$$){if(typeof $key$jscomp$11_val$$=="function")return $key$jscomp$11_val$$($query_query_sorted$$).replace(/\./g,"_");if($key$jscomp$11_val$$!==
5
+ "id_app"&&$query_query_sorted$$[$key$jscomp$11_val$$]!==void 0&&$query_query_sorted$$[$key$jscomp$11_val$$]!==null){var $key$$=$query_query_sorted$$[$key$jscomp$11_val$$];$d_session_modelName$$=$d_session_modelName$$?`${$d_session_modelName$$}:${$key$jscomp$11_val$$}:${$key$$}`:`${$key$jscomp$11_val$$}:${$key$$}`}}else for($key$$ in $query_query_sorted$$)$key$$!=="id_app"&&$query_query_sorted$$[$key$$]!==void 0&&$query_query_sorted$$[$key$$]!==null&&($key$jscomp$11_val$$=$query_query_sorted$$[$key$$],
6
+ $d_session_modelName$$=$d_session_modelName$$?`${$d_session_modelName$$}:${$key$$}:${$key$jscomp$11_val$$}`:`${$key$$}:${$key$jscomp$11_val$$}`);$id_app$$=$id_app$$||$query_query_sorted$$.id_app;return($id_app$$?"id_app:"+$id_app$$+":"+$d_session_modelName$$:":"+$d_session_modelName$$).replace(/\./g,"_")};exports.cachedKeys=()=>{let $_keys$$={};models.forEach($model$$=>{$_keys$$[$model$$.name]=1});return $_keys$$};
7
7
  exports.set=async function($model_name$$=null,$obj$$=null,$callback$$=()=>{}){onAfterCommit(async()=>{$obj$$&&$obj$$.toObject&&($obj$$=$obj$$.toObject());if($obj$$&&!$obj$$._id)return console.error("[redis-cache] Error when cache data: Obj does not have _id",$obj$$),$callback$$();if($obj$$){let $query_caches$$=await global.getModel("cache").find({data:{$regex:$obj$$._id.toString()}},{query:1,id_app:1,key:1}).lean();$query_caches$$.length>0&&await Promise.all($query_caches$$.map($r$$=>global.getModel("cache").deleteMany({id_app:$r$$.id_app,
8
8
  key:$r$$.key,query:$r$$.query})));if(["dmgiaban","dmchietkhau","dmkhuyenmai","dmtt"].indexOf($model_name$$)>=0||$model_name$$.indexOf("ecom")==0)await global.getModel("cache").deleteMany({id_app:$obj$$.id_app,key:"dmvt"}),await global.getModel("cache").deleteMany({id_app:"system",key:"dmvt"})}async.mapLimit(models.filter($f$$=>!$model_name$$||$f$$.name==$model_name$$),5,($model$$,$callback$$)=>{$obj$$?($model$$.key.forEach($_key_key$$=>{$_key_key$$=exports.generateRedisKey($model$$.name,$obj$$,$obj$$.id_app,
9
9
  $_key_key$$);global.clientRedis.set($_key_key$$,JSON.stringify($obj$$))}),$callback$$(null)):(console.log("[redis-cache] \u0111ang cache d\u1eef li\u1ec7u t\u1edbi redis...",$model$$.name),global.getModel(""+$model$$.name).find({}).lean().then($rs$$=>{$rs$$.forEach($obj$$=>{$model$$.key.forEach($_key$jscomp$1_key$$=>{$_key$jscomp$1_key$$=exports.generateRedisKey($model$$.name,$obj$$,$obj$$.id_app,$_key$jscomp$1_key$$);global.clientRedis.set($_key$jscomp$1_key$$,JSON.stringify($obj$$))})});$callback$$(null)}).catch($e$$=>
@@ -1,4 +1,4 @@
1
1
  const fs=require("fs"),pug=require("pug"),docx=require("docx-templates").default,ngcompile=require("ng-node-compile"),ejs=require("ejs"),moment=require("moment"),numeral=require("numeral");
2
- module.exports=async function($template$$,$_data$$,$callback$$){const $data$$={...$_data$$,...configs};if(!fs.existsSync($template$$))return $callback$$("Do not find the template file");switch($template$$.split(".").pop().toLowerCase()){case "pug":$callback$$(null,pug.renderFile($template$$,{data:$data$$,moment,numeral}));break;case "docx":try{const $data_docx$$=fs.readFileSync($template$$),$result$$=await docx({template:$data_docx$$,data:$data$$,cmdDelimiter:["{{","}}"]}),$finalBuffer$$=Buffer.from($result$$);
2
+ module.exports=async function($template$$,$_data$$,$callback$$){const $data$$={...$_data$$};if(!fs.existsSync($template$$))return $callback$$("Do not find the template file");switch($template$$.split(".").pop().toLowerCase()){case "pug":$callback$$(null,pug.renderFile($template$$,{data:$data$$,moment,numeral}));break;case "docx":try{const $data_docx$$=fs.readFileSync($template$$),$result$$=await docx({template:$data_docx$$,data:$data$$,cmdDelimiter:["{{","}}"]}),$finalBuffer$$=Buffer.from($result$$);
3
3
  $callback$$(null,$finalBuffer$$)}catch($e$$){$callback$$($e$$)}break;case "ng":fs.readFile($template$$,function($error$$,$html$$){if($error$$)return $callback$$($error$$);try{let $ngEnviorment$$=new ngcompile([]);$callback$$(null,$ngEnviorment$$.$compile($html$$.toString())($data$$))}catch($e$$){$callback$$($e$$)}});break;default:fs.readFile($template$$,function($error$$,$html$$){if($error$$)return $callback$$($error$$);try{let $rs$$=ejs.render($html$$.toString(),{data:$data$$,moment,numeral});$callback$$(null,
4
4
  $rs$$)}catch($e$$){$callback$$($e$$)}})}};
@@ -68,9 +68,9 @@ await model.findOne($_c$$);if($rq$$.date_approved)throw"Y\u00eau c\u1ea7u n\u00e
68
68
  $u$$.email.indexOf($user_approved$$)>=0))throw"User n\u00e0y kh\u00f4ng c\u00f3 quy\u1ec1n duy\u1ec7t y\u00eau c\u1ea7u n\u00e0y";$approve_user_approved_name$$=await $rq$$.save();if($rq$$.update_after_approve&&$rq$$.update_after_approve.data){console.log("[approve] t\u00ecm controller c\u1ee7a ch\u1ee9ng t\u1eeb \u0111\u00e3 duy\u1ec7t",$rq$$.update_after_approve.module||$rq$$.update_after_approve.model);let $module_name$$=$rq$$.update_after_approve.module||$rq$$.update_after_approve.model,$ctrl$$;
69
69
  $module_name$$&&($ctrl$$=global.controllers[$module_name$$.toUpperCase()]);let $_m$$;$rq$$.update_after_approve.model?$_m$$=global.getModel($rq$$.update_after_approve.model):$ctrl$$&&($_m$$=$ctrl$$.getProperty("model"));if(!$_m$$){console.error("[approve] kh\u00f4ng t\u00ecm th\u1ea5y model c\u1ee7a ch\u1ee9ng t\u1eeb",$rq$$.update_after_approve.model||$module_name$$.toUpperCase());return}console.log("[approve] c\u1eadp nh\u1eadt data cho ch\u1ee9ng t\u1eeb sau khi duy\u1ec7t...",$module_name$$);
70
70
  await $_m$$.updateOne({_id:$rq$$.id_ct},$rq$$.update_after_approve.data);if($ctrl$$){const $obj$$=await $_m$$.findOne({_id:$rq$$.id_ct});if($obj$$){onAfterCommit(()=>{$ctrl$$.emit("saved",$obj$$);$ctrl$$.emit("updated",$obj$$)});const $u$$=await global.getModel("user").findOne({email:$user_approved$$});$u$$.current_id_app=$obj$$.id_app;const $app_info$$=await App.findOne({_id:$obj$$.id_app});console.log("[approve] post s\u1ed5 s\u00e1ch sau khi duy\u1ec7t ch\u1ee9ng t\u1eeb...",$ctrl$$.name,$module_name$$,
71
- $obj$$.so_ct,$obj$$.trang_thai);$ctrl$$.postData($obj$$,$e$$=>{$e$$&&console.error("[approve] [postData]",$e$$,$module_name$$,$obj$$.so_ct,$obj$$.trang_thai)},{kiem_tra_han_muc_cong_no:!1});$ctrl$$.handleAfterAproved&&await $ctrl$$.handleAfterAproved($obj$$,$rq$$);await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.onView($u$$,[$obj$$.toObject()],async($channel_e$$,$rs$$)=>{$channel_e$$=`${$module_name$$.toLowerCase()}-${"request_approved"}`;$obj$$.id_app&&($channel_e$$=`${$channel_e$$}-${$obj$$.id_app}`);
72
- let $message$$=JSON.stringify($rs$$[0]);try{await global.clientRedis.publish($channel_e$$,$message$$)}catch($e$$){console.error("[approve] [sendNotifyApproved] fire event","request_approved",$e$$)}$ctrl$$.requestApprove($app_info$$,$u$$,$rs$$[0],$e$$=>{if($e$$)return $reject$$($e$$);$resolve$$()},null,$rq$$)})})}else console.error("[approve] kh\u00f4ng tim th\u1ea5y l\u1ed7i data \u0111\u00e3 duy\u1ec7t theo id_ct",$rq$$.id_ct)}else console.error("[approve] kh\u00f4ng t\u00ecm th\u1ea5y controller c\u1ee7a ch\u1ee9ng t\u1eeb",
73
- $module_name$$)}else console.log("[approve] kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u c\u1ea7n c\u1eadp nh\u1eadt sau khi \u0111\u00e3 duy\u1ec7t");onAfterCommit(()=>{model.sendNotifyApproved($rq$$,$token$$)});return $approve_user_approved_name$$});$callback$$(null,$result_approve$$)}catch($e$$){$callback$$($e$$)}};
71
+ $obj$$.so_ct,$obj$$.trang_thai);$ctrl$$.postData($obj$$,$e$$=>{$e$$&&console.error("[approve] [postData]",$e$$,$module_name$$,$obj$$.so_ct,$obj$$.trang_thai)},{kiem_tra_han_muc_cong_no:!1});$ctrl$$.handleAfterAproved&&await $ctrl$$.handleAfterAproved($obj$$,$rq$$);await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.onView($u$$,[$obj$$.toObject()],async($channel_e$$,$rs$$)=>{$channel_e$$&&console.error("[approve][approved][onView]",$channel_e$$);$channel_e$$=`${$module_name$$.toLowerCase()}-${"request_approved"}`;
72
+ $obj$$.id_app&&($channel_e$$=`${$channel_e$$}-${$obj$$.id_app}`);let $message$$=JSON.stringify($rs$$[0]);try{await global.clientRedis.publish($channel_e$$,$message$$)}catch($e$$){console.error("[approve] [sendNotifyApproved] fire event","request_approved",$e$$)}console.log("[approve][approved][requestApprove] t\u1ea1o y\u00eau c\u1ea7u duy\u1ec7t ti\u1ebfp theo...");$ctrl$$.requestApprove($app_info$$,$u$$,$rs$$[0],$e$$=>{if($e$$)return $reject$$($e$$);$resolve$$()},null,$rq$$)})})}else console.error("[approve] kh\u00f4ng tim th\u1ea5y l\u1ed7i data \u0111\u00e3 duy\u1ec7t theo id_ct",
73
+ $rq$$.id_ct)}else console.error("[approve] kh\u00f4ng t\u00ecm th\u1ea5y controller c\u1ee7a ch\u1ee9ng t\u1eeb",$module_name$$)}else console.log("[approve] kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u c\u1ea7n c\u1eadp nh\u1eadt sau khi \u0111\u00e3 duy\u1ec7t");onAfterCommit(()=>{model.sendNotifyApproved($rq$$,$token$$)});return $approve_user_approved_name$$});$callback$$(null,$result_approve$$)}catch($e$$){console.error("[approve][approved]",$e$$),$callback$$($e$$)}};
74
74
  model.deny=async function($encrypted$$,$callback$$,$token$$,$options$$={reason:""}){try{const $result_reject$$=await executeInTransaction(async()=>{let $user_denied$$;if(underscore.isObject($encrypted$$)){var $_c$jscomp$2__id$$=$encrypted$$.id_request;$user_denied$$=$encrypted$$.email;var $approve$$=$encrypted$$.name;var $key_data$jscomp$1_trang_thai$$=$encrypted$$.trang_thai}else $key_data$jscomp$1_trang_thai$$=utils.decrypt($encrypted$$),$_c$jscomp$2__id$$=$key_data$jscomp$1_trang_thai$$.id_request,
75
75
  $user_denied$$=$key_data$jscomp$1_trang_thai$$.email,$approve$$=$key_data$jscomp$1_trang_thai$$.name,$key_data$jscomp$1_trang_thai$$=$key_data$jscomp$1_trang_thai$$.trang_thai;if(!$_c$jscomp$2__id$$||!$user_denied$$)throw"request id and deny user are required";if(!global.mongoose.Types.ObjectId.isValid($_c$jscomp$2__id$$))throw"request id '"+$_c$jscomp$2__id$$+"' is not valid";$_c$jscomp$2__id$$={_id:$_c$jscomp$2__id$$};$key_data$jscomp$1_trang_thai$$!==void 0&&$key_data$jscomp$1_trang_thai$$!==null&&
76
76
  ($_c$jscomp$2__id$$.trang_thai=$key_data$jscomp$1_trang_thai$$);const $rq$$=await model.findOne($_c$jscomp$2__id$$);if($rq$$.date_approved)throw"Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t b\u1edfi "+$rq$$.user_approved_name;if($rq$$.date_denied)throw"Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 b\u1ecb t\u1eeb ch\u1ed1i duy\u1ec7t b\u1edfi "+$rq$$.user_denied_name;$rq$$.date_denied=new Date;$rq$$.user_denied=$user_denied$$;$rq$$.user_denied_name=$approve$$;$rq$$.denied_reason=
@@ -88,5 +88,5 @@ $option$jscomp$2_template$$.option&&$option$jscomp$2_template$$.option.system&&(
88
88
  $emails$$=[$rq$$.user_request],$rqs$$=$requests$$.map($a$$=>$a$$.user_request),$aps$$=$requests$$.filter($r$$=>$r$$._id.toString()!==$rq$$._id.toString()).map($a$$=>$a$$.user_approved);$emails$$=[...(new Set($emails$$.concat($rqs$$).concat($aps$$)))].filter($r$$=>$r$$);$emails$$.length>0&&App.emitEvent($rq$$.id_app,"request_denied",{_id:$rq$$.id_ct,id_app:$rq$$.id_app,title:$title$$,body:$title$$,email_content:$email_content$$,code:$rq$$.ma_ct,allow_unsubcribe:!1,attachments:$rq$$.data._id?await File.find({id_link:$rq$$.data._id}).lean():
89
89
  void 0},null,$emails$$,!0,!0)}catch($e$$){console.error("Error send email",$e$$.message)}}else console.log("don't find email template or report template to send notify email to request user")});if($rq$$.update_after_deny&&$rq$$.update_after_deny.data){let $module_name$$=$rq$$.update_after_deny.module||$rq$$.update_after_deny.model,$ctrl$$;$module_name$$&&($ctrl$$=global.controllers[$module_name$$.toUpperCase()]);let $_m$$;$rq$$.update_after_deny.model?$_m$$=global.getModel($rq$$.update_after_deny.model):
90
90
  $ctrl$$&&($_m$$=$ctrl$$.getProperty("model"));if(!$_m$$)return;await $_m$$.updateOne({_id:$rq$$.id_ct},$rq$$.update_after_deny.data);if($ctrl$$){const $obj$$=await $_m$$.findOne({_id:$rq$$.id_ct});$obj$$&&(onAfterCommit(()=>{$ctrl$$.emit("saved",$obj$$);$ctrl$$.emit("updated",$obj$$)}),await new Promise(($resolve$$,$reject$$)=>{(async()=>{$ctrl$$.postData($obj$$,async $e$jscomp$12_u$$=>{if($e$jscomp$12_u$$)return $reject$$($e$jscomp$12_u$$);if($ctrl$$.handleAfterDenied)try{await $ctrl$$.handleAfterDenied($obj$$,
91
- $rq$$)}catch($e$$){return $reject$$($e$$)}$e$jscomp$12_u$$=await global.getModel("user").findOne({email:$user_denied$$});$e$jscomp$12_u$$.current_id_app=$obj$$.id_app;$ctrl$$.onView($e$jscomp$12_u$$,[$obj$$.toObject()],async($channel$jscomp$1_e$$,$message$jscomp$10_rs$$)=>{$channel$jscomp$1_e$$=`${$module_name$$.toLowerCase()}-${"request_denied"}`;$obj$$.id_app&&($channel$jscomp$1_e$$=`${$channel$jscomp$1_e$$}-${$obj$$.id_app}`);$message$jscomp$10_rs$$=JSON.stringify($message$jscomp$10_rs$$[0]);try{await global.clientRedis.publish($channel$jscomp$1_e$$,
92
- $message$jscomp$10_rs$$)}catch($e$$){console.error("[approve] [sendNotifyDenied] fire event","request_denied",$e$$)}$resolve$$()})},{kiem_tra_han_muc_cong_no:!1})})()}))}}$callback$$(null,$approve$$)});$callback$$(null,$result_reject$$)}catch($e$$){$callback$$($e$$)}};module.exports=model;
91
+ $rq$$)}catch($e$$){return $reject$$($e$$)}$e$jscomp$12_u$$=await global.getModel("user").findOne({email:$user_denied$$});$e$jscomp$12_u$$.current_id_app=$obj$$.id_app;$ctrl$$.onView($e$jscomp$12_u$$,[$obj$$.toObject()],async($channel$jscomp$1_e$$,$message$jscomp$10_rs$$)=>{$channel$jscomp$1_e$$&&console.error("[approve][denied][onView]",$channel$jscomp$1_e$$);$channel$jscomp$1_e$$=`${$module_name$$.toLowerCase()}-${"request_denied"}`;$obj$$.id_app&&($channel$jscomp$1_e$$=`${$channel$jscomp$1_e$$}-${$obj$$.id_app}`);
92
+ $message$jscomp$10_rs$$=JSON.stringify($message$jscomp$10_rs$$[0]);try{await global.clientRedis.publish($channel$jscomp$1_e$$,$message$jscomp$10_rs$$)}catch($e$$){console.error("[approve] [sendNotifyDenied] fire event","request_denied",$e$$)}$resolve$$()})},{kiem_tra_han_muc_cong_no:!1})})()}))}}$callback$$(null,$approve$$)});$callback$$(null,$result_reject$$)}catch($e$$){console.error("[approve][denied]",$e$$),$callback$$($e$$)}};module.exports=model;
@@ -1,22 +1,23 @@
1
1
  const model=global.getModel("checkin"),customer=global.getModel("customer"),moment=require("moment"),dmnv=global.getModel("dmnv"),chamcong=global.getModel("chamcong"),User=global.getModel("user"),controller=require("../../controllers/controller"),PostBook=require("../../libs/post-book");function deg2rad($deg$$){return Math.PI/180*$deg$$}
2
2
  function getDistanceFromLatLonInM($a$$,$dLon_lon1$$,$lat2$$,$lon2$$){const $dLat$$=deg2rad($lat2$$-$a$$);$dLon_lon1$$=deg2rad($lon2$$-$dLon_lon1$$);$a$$=Math.sin($dLat$$/2)*Math.sin($dLat$$/2)+Math.cos(deg2rad($a$$))*Math.cos(deg2rad($lat2$$))*Math.sin($dLon_lon1$$/2)*Math.sin($dLon_lon1$$/2);return 2*Math.atan2(Math.sqrt($a$$),Math.sqrt(1-$a$$))*6371E3}
3
- const postData=async($obj$$,$callback$$)=>{if($obj$$.trang_thai!="1")return $callback$$();if(!$obj$$.device_id)return $callback$$("C\u1ea7n th\u00f4ng tin ID c\u1ee7a thi\u1ebft b\u1ecb (device_id)");const $nv$$=await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,$or:[{device_user_id:$obj$$.device_user_id},{user:$obj$$.device_user_id}]}).lean();if(!$nv$$)return $callback$$(`Ch\u01b0a khai b\u00e1o th\u00f4ng tin nh\u00e2n vi\u00ean cho '${$obj$$.device_user_id}'.`);if($nv$$.trusted_device_id){if($nv$$.trusted_device_id!=
4
- $obj$$.device_id)return $callback$$("Thi\u1ebft b\u1ecb ch\u1ea5m c\u00f4ng kh\u00f4ng h\u1ee3p l\u1ec7. B\u1ea1n c\u1ea7n d\u00f9ng thi\u1ebft b\u1ecb \u0111\u00e3 ch\u1ea5m c\u00f4ng l\u1ea7n tr\u01b0\u1edbc ho\u1eb7c li\u00ean h\u1ec7 v\u1edbi admin \u0111\u1ec3 \u0111\u0103ng k\u00fd thi\u1ebft b\u1ecb m\u1edbi.");$nv$$.trusted_device_id=$obj$$.device_id}var $cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,trusted_device_id:$obj$$.device_id},
5
- {_id:1}).lean();if($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$&&$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$._id!==$nv$$._id)return $callback$$("Thi\u1ebft b\u1ecb n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ch\u1ea5m cho nh\u00e2n vi\u00ean kh\u00e1c. N\u1ebfu b\u1ea1n c\u1ea7n thay \u0111\u1ed5i h\u00e3y li\u00ean h\u1ec7 v\u1edbi admin.");if($obj$$.location&&$obj$$.location.latitude&&$obj$$.location.longitude){var $candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=
6
- null;$nv$$.ma_cn&&($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=await global.getModel("dmchinhanh").findOne({id_app:$obj$$.id_app,ma_cn:$nv$$.ma_cn,status:!0}).lean());if(!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$)return $callback$$("Ch\u01b0a khai b\u00e1o chi nh\u00e1nh l\u00e0m vi\u1ec7c cho nh\u00e2n vi\u00ean n\u00e0y");if(!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location||!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.latitude||
7
- !$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.longitude)return $callback$$(`Ch\u01b0a khai b\u00e1o v\u1ecb tr\u00ed c\u1ee7a chi nh\u00e1nh ${$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.ten_cn}`);$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=getDistanceFromLatLonInM($obj$$.location.latitude,$obj$$.location.longitude,$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.latitude,
8
- $candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.longitude);$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.allowed_radius||50;if($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$>$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$&&!$obj$$.ma_kh)return console.warn(`[CheckIn Fail] Distance: ${$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}m. User: ${$obj$$.device_user_id}`),
9
- $callback$$(`V\u1ecb tr\u00ed ch\u1ea5m c\u00f4ng kh\u00f4ng h\u1ee3p l\u1ec7. B\u1ea1n \u0111ang c\u00e1ch c\u00f4ng ty ${Math.round($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$)}m (Cho ph\u00e9p: ${$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$}m).`)}else return $callback$$("Kh\u00f4ng x\u00e1c \u0111\u1ecbnh \u0111\u01b0\u1ee3c v\u1ecb tr\u00ed c\u1ee7a b\u1ea1n.");$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=await model.find({id_app:$obj$$.id_app,
10
- device_user_id:$obj$$.device_user_id,record_time:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}}).sort({record_time:1}).lean();let $gio_vao$$,$gio_ra$$,$ma_loai_cong$$;$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$.length>0&&($gio_vao$$=$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$[0].record_time);$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$.length>1&&($gio_ra$$=$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$[$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$.length-
11
- 1].record_time);$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=$gio_vao$$&&$gio_ra$$?moment($gio_ra$$).diff(moment($gio_vao$$),"hours"):0;if($gio_vao$$){$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=moment($obj$$.record_time).day().toString();$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$={id_app:$obj$$.id_app,status:!0,$and:[{$or:[{nhung_ngay_trong_tuan:{$exists:!1}},{nhung_ngay_trong_tuan:$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$}]},
12
- {$or:[{tong_gio_lam_den:{$gte:$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}},{tong_gio_lam_den:0}]},{$or:[{tong_gio_lam_tu:{$lte:$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}},{tong_gio_lam_tu:0}]}]};$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=await global.getModel("dmloaicong").find($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$).sort({tong_gio_lam_tu:-1,ngay_cong:-1}).lean();const $getMinutesFromMidnight$$=
13
- $dateStr_m$$=>{if(!$dateStr_m$$)return null;$dateStr_m$$=moment($dateStr_m$$);return $dateStr_m$$.hours()*60+$dateStr_m$$.minutes()},$input_vao_mins$$=$getMinutesFromMidnight$$($gio_vao$$),$input_ra_mins$$=$getMinutesFromMidnight$$($gio_ra$$||$gio_vao$$);if($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.find($lc$$=>$lc$$.gio_vao_toi_thieu&&$getMinutesFromMidnight$$($lc$$.gio_vao_toi_thieu)<
14
- $input_vao_mins$$||$lc$$.gio_ra_toi_thieu&&$getMinutesFromMidnight$$($lc$$.gio_ra_toi_thieu)>$input_ra_mins$$?!1:!0))$ma_loai_cong$$=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.ma_loai_cong}$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$nv$$.ma_bp;$nv$$.bo_phan&&$nv$$.bo_phan.length>0&&($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$nv$$.bo_phan[0].ma_bp);let $data$$=$obj$$.toObject?$obj$$.toObject():
15
- {...$obj$$};$data$$.id_checkin=$obj$$.device_user_id;$data$$.ngay=$obj$$.record_time;$data$$.ma_loai_cong=$ma_loai_cong$$||"UNKNOW";$data$$.ma_nv=$nv$$.ma_nv;$data$$.ma_bp=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$;delete $data$$._id;delete $data$$.trang_thai;$data$$.gio_vao=$gio_vao$$;$data$$.gio_ra=$gio_ra$$;$data$$.tong_gio_lam=$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$;await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id,
16
- ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});(new PostBook($obj$$,[$data$$],chamcong)).run(async($e$$,$rs$$)=>{$e$$||await global.getModel("dmnv").updateOne({_id:$nv$$._id},{trusted_device_id:$obj$$.device_id});$callback$$($e$$,$rs$$)})};
17
- module.exports=function($router$$){(new controller($router$$,model,"checkin",{notNeedRight:!0,sort:{record_time:-1},onView:async($user$$,$items$$,$next$$)=>{await $items$$.filter($item$$=>$item$$.trang_thai==="1").asyncJoinModel2($user$$.current_id_app,dmnv,{where:$item$$=>({$or:[{device_user_id:$item$$.device_user_id},{user:$item$$.device_user_id}]}),fields:["ma_nv","ten_nv","picture"]});await $items$$.filter($item$$=>$item$$.trang_thai==="2"||$item$$.trang_thai==="3").asyncJoinModel2($user$$.current_id_app,
18
- customer,{where:$item$$=>({$or:[{device_user_id:$item$$.device_user_id},{of_user:$item$$.device_user_id}]}),fields:["ma_kh","ten_kh","picture"]});await $items$$.filter($item$$=>$item$$.trang_thai==="3"&&$item$$.device_user_id2).asyncJoinModel2($user$$.current_id_app,dmnv,{where:{device_user_id2:"device_user_id"},fields:["ma_nv","ten_nv",{picture_nv:"picture"}]});await $items$$.filter($item$$=>!$item$$.picture).asyncJoinModel2(null,User,{where:{of_user:"email"},fields:["picture"]});await $items$$.filter($item$$=>
19
- !$item$$.picture).asyncJoinModel2(null,User,{where:{user:"email"},fields:["picture"]});$next$$(null,$items$$)},onCreating:async($user$$,$obj$$,$next$$)=>{await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id||$user$$.email,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});$next$$(null,$obj$$)},onUpdating:async($user$$,$data$$,$obj$$,$next$$)=>{$data$$.device_user_id=$obj$$.device_user_id;await chamcong.deleteMany({id_app:$obj$$.id_app,
20
- id_checkin:$obj$$.device_user_id,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});$next$$(null,$data$$,$obj$$)},onDeleting:async($user$$,$obj$$,$next$$)=>{await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});$next$$(null,$obj$$)},onUpdated:async($user$$,$obj$$,$next$$)=>{postData($obj$$,
21
- async $e$$=>{if($e$$)return await model.deleteOne({_id:$obj$$._id}),$next$$($e$$);$next$$(null,$obj$$)})},onDeleted:async($obj_post_query_checkin_user$$,$obj$$,$next$$)=>{$obj_post_query_checkin_user$$={id_app:$obj$$.id_app,device_user_id:$obj$$.device_user_id,record_time:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}};($obj_post_query_checkin_user$$=await model.findOne($obj_post_query_checkin_user$$).lean())?postData($obj_post_query_checkin_user$$,
22
- $e$$=>{if($e$$)return $next$$($e$$);$next$$(null,$obj$$)}):$next$$(null,$obj$$)},onCreated:async($user$$,$obj$$,$next$$)=>{postData($obj$$,async $e$$=>{if($e$$)return await model.deleteOne({_id:$obj$$._id}),$next$$($e$$);$next$$(null,$obj$$)})}})).route()};
3
+ const postData=async($obj$$,$callback$$)=>{if($obj$$.trang_thai!="1")return $callback$$();if(global.configs?.required_device_id&&!$obj$$.device_id)return $callback$$("C\u1ea7n th\u00f4ng tin ID c\u1ee7a thi\u1ebft b\u1ecb (device_id)");const $nv$$=await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,$or:[{device_user_id:$obj$$.device_user_id},{user:$obj$$.device_user_id}]}).lean();if(!$nv$$)return $callback$$(`Ch\u01b0a khai b\u00e1o th\u00f4ng tin nh\u00e2n vi\u00ean cho '${$obj$$.device_user_id}'.`);
4
+ if($nv$$.trusted_device_id){if($nv$$.trusted_device_id!=$obj$$.device_id)return $callback$$("Thi\u1ebft b\u1ecb ch\u1ea5m c\u00f4ng kh\u00f4ng h\u1ee3p l\u1ec7. B\u1ea1n c\u1ea7n d\u00f9ng thi\u1ebft b\u1ecb \u0111\u00e3 ch\u1ea5m c\u00f4ng l\u1ea7n tr\u01b0\u1edbc ho\u1eb7c li\u00ean h\u1ec7 v\u1edbi admin \u0111\u1ec3 \u0111\u0103ng k\u00fd thi\u1ebft b\u1ecb m\u1edbi.");$nv$$.trusted_device_id=$obj$$.device_id}if($obj$$.device_id){var $cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=
5
+ await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,trusted_device_id:$obj$$.device_id},{_id:1}).lean();if($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$&&$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$._id!==$nv$$._id)return $callback$$("Thi\u1ebft b\u1ecb n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ch\u1ea5m cho nh\u00e2n vi\u00ean kh\u00e1c. N\u1ebfu b\u1ea1n c\u1ea7n thay \u0111\u1ed5i h\u00e3y li\u00ean h\u1ec7 v\u1edbi admin.")}if($obj$$.location&&
6
+ $obj$$.location.latitude&&$obj$$.location.longitude){var $candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=null;$nv$$.ma_cn&&($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=await global.getModel("dmchinhanh").findOne({id_app:$obj$$.id_app,ma_cn:$nv$$.ma_cn,status:!0}).lean());if(!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$)return $callback$$("Ch\u01b0a khai b\u00e1o chi nh\u00e1nh l\u00e0m vi\u1ec7c cho nh\u00e2n vi\u00ean n\u00e0y");
7
+ if(!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location||!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.latitude||!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.longitude)return $callback$$(`Ch\u01b0a khai b\u00e1o v\u1ecb tr\u00ed c\u1ee7a chi nh\u00e1nh ${$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.ten_cn}`);$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=
8
+ getDistanceFromLatLonInM($obj$$.location.latitude,$obj$$.location.longitude,$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.latitude,$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.longitude);$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.allowed_radius||50;if($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$>
9
+ $candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$&&!$obj$$.ma_kh)return console.warn(`[CheckIn Fail] Distance: ${$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}m. User: ${$obj$$.device_user_id}`),$callback$$(`V\u1ecb tr\u00ed ch\u1ea5m c\u00f4ng kh\u00f4ng h\u1ee3p l\u1ec7. B\u1ea1n \u0111ang c\u00e1ch c\u00f4ng ty ${Math.round($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$)}m (Cho ph\u00e9p: ${$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$}m).`)}else if(global.configs?.required_device_id)return $callback$$("Kh\u00f4ng x\u00e1c \u0111\u1ecbnh \u0111\u01b0\u1ee3c v\u1ecb tr\u00ed c\u1ee7a b\u1ea1n.");
10
+ $cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=await model.find({id_app:$obj$$.id_app,device_user_id:$obj$$.device_user_id,record_time:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}}).sort({record_time:1}).lean();let $gio_vao$$,$gio_ra$$,$ma_loai_cong$$;$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$.length>0&&($gio_vao$$=$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$[0].record_time);
11
+ $cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$.length>1&&($gio_ra$$=$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$[$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$.length-1].record_time);$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=$gio_vao$$&&$gio_ra$$?moment($gio_ra$$).diff(moment($gio_vao$$),"hours"):0;if($gio_vao$$){$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=moment($obj$$.record_time).day().toString();
12
+ $candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$={id_app:$obj$$.id_app,status:!0,$and:[{$or:[{nhung_ngay_trong_tuan:{$exists:!1}},{nhung_ngay_trong_tuan:$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$}]},{$or:[{tong_gio_lam_den:{$gte:$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}},{tong_gio_lam_den:0}]},{$or:[{tong_gio_lam_tu:{$lte:$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}},{tong_gio_lam_tu:0}]}]};
13
+ $candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=await global.getModel("dmloaicong").find($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$).sort({tong_gio_lam_tu:-1,ngay_cong:-1}).lean();const $getMinutesFromMidnight$$=$dateStr_m$$=>{if(!$dateStr_m$$)return null;$dateStr_m$$=moment($dateStr_m$$);return $dateStr_m$$.hours()*60+$dateStr_m$$.minutes()},$input_vao_mins$$=$getMinutesFromMidnight$$($gio_vao$$),$input_ra_mins$$=$getMinutesFromMidnight$$($gio_ra$$||
14
+ $gio_vao$$);if($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.find($lc$$=>$lc$$.gio_vao_toi_thieu&&$getMinutesFromMidnight$$($lc$$.gio_vao_toi_thieu)<$input_vao_mins$$||$lc$$.gio_ra_toi_thieu&&$getMinutesFromMidnight$$($lc$$.gio_ra_toi_thieu)>$input_ra_mins$$?!1:!0))$ma_loai_cong$$=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.ma_loai_cong}$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=
15
+ $nv$$.ma_bp;$nv$$.bo_phan&&$nv$$.bo_phan.length>0&&($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$nv$$.bo_phan[0].ma_bp);let $data$$=$obj$$.toObject?$obj$$.toObject():{...$obj$$};$data$$.id_checkin=$obj$$.device_user_id;$data$$.ngay=$obj$$.record_time;$data$$.ma_loai_cong=$ma_loai_cong$$||"UNKNOW";$data$$.ma_nv=$nv$$.ma_nv;$data$$.ma_bp=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$;delete $data$$._id;delete $data$$.trang_thai;
16
+ $data$$.gio_vao=$gio_vao$$;$data$$.gio_ra=$gio_ra$$;$data$$.tong_gio_lam=$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$;await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});(new PostBook($obj$$,[$data$$],chamcong)).run(async($e$$,$rs$$)=>{$e$$||await global.getModel("dmnv").updateOne({_id:$nv$$._id},{trusted_device_id:$obj$$.device_id});
17
+ $callback$$($e$$,$rs$$)})};
18
+ module.exports=function($router$$){(new controller($router$$,model,"checkin",{notNeedRight:!0,sort:{record_time:-1},onView:async($user$$,$items$$,$next$$)=>{await $items$$.filter($item$$=>$item$$.trang_thai==="1").asyncJoinModel2($user$$.current_id_app,dmnv,{where:$item$$=>({$or:[{device_user_id:$item$$.device_user_id},{user:$item$$.device_user_id}]}),fields:["ma_nv","ten_nv","picture"]});await $items$$.filter($item$$=>$item$$.trang_thai==="2"||$item$$.trang_thai==="3").asyncJoinModel2($user$$.current_id_app,customer,
19
+ {where:$item$$=>({$or:[{device_user_id:$item$$.device_user_id},{of_user:$item$$.device_user_id}]}),fields:["ma_kh","ten_kh","picture"]});await $items$$.filter($item$$=>$item$$.trang_thai==="3"&&$item$$.device_user_id2).asyncJoinModel2($user$$.current_id_app,dmnv,{where:{device_user_id2:"device_user_id"},fields:["ma_nv","ten_nv",{picture_nv:"picture"}]});await $items$$.filter($item$$=>!$item$$.picture).asyncJoinModel2(null,User,{where:{of_user:"email"},fields:["picture"]});await $items$$.filter($item$$=>
20
+ !$item$$.picture).asyncJoinModel2(null,User,{where:{user:"email"},fields:["picture"]});await $items$$.filter($item$$=>$item$$.ma_kh).asyncJoinModel2($user$$.current_id_app,"customer",{where:"ma_kh",fields:["ten_kh"]});$next$$(null,$items$$)},onCreating:async($user$$,$obj$$,$next$$)=>{global.configs?.required_device_id&&$obj$$.location&&($obj$$.record_time=new Date);await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id||$user$$.email,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),
21
+ $lte:moment($obj$$.record_time).endOf("date").toDate()}});$next$$(null,$obj$$)},onUpdating:async($user$$,$data$$,$obj$$,$next$$)=>{$data$$.device_user_id=$obj$$.device_user_id;delete $data$$.record_time;await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});$next$$(null,$data$$,$obj$$)},onDeleting:async($user$$,$obj$$,$next$$)=>{await chamcong.deleteMany({id_app:$obj$$.id_app,
22
+ id_checkin:$obj$$.device_user_id,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});$next$$(null,$obj$$)},onUpdated:async($user$$,$obj$$,$next$$)=>{postData($obj$$,async $e$$=>{if($e$$)return await model.deleteOne({_id:$obj$$._id}),$next$$($e$$);$next$$(null,$obj$$)})},onDeleted:async($obj_post_query_checkin_user$$,$obj$$,$next$$)=>{$obj_post_query_checkin_user$$={id_app:$obj$$.id_app,device_user_id:$obj$$.device_user_id,record_time:{$gte:moment($obj$$.record_time).startOf("date").toDate(),
23
+ $lte:moment($obj$$.record_time).endOf("date").toDate()}};($obj_post_query_checkin_user$$=await model.findOne($obj_post_query_checkin_user$$).lean())?postData($obj_post_query_checkin_user$$,$e$$=>{if($e$$)return $next$$($e$$);$next$$(null,$obj$$)}):$next$$(null,$obj$$)},onCreated:async($user$$,$obj$$,$next$$)=>{postData($obj$$,async $e$$=>{if($e$$)return await model.deleteOne({_id:$obj$$._id}),$next$$($e$$);$next$$(null,$obj$$)})}})).route()};
@@ -3,8 +3,8 @@ module.exports=function($router$$){(new controller($router$$,model,"participant"
3
3
  $condition$$)},onFound:($user$$,$condition$$,$items$$,$next$$)=>{$next$$(null,$items$$)},onView:($user$$,$items$$,$next$$)=>{async.series({u:$callback$$=>{$items$$.joinModel2(null,User,[{where:{email:"email"},fields:[{picture:"picture"},{email2:"email2"}],setFields:($item$$,$ref$$)=>{$item$$.name||($item$$.name=$ref$$.name);$ref$$.local&&!$ref$$.local.active&&($item$$.active=!1,model.updateOne({_id:$item$$._id},{active:!1}))}}],function(){$callback$$()})},group:$callback$$=>{$items$$.joinModel2($user$$.current_id_app,
4
4
  usergroup,[{where:{group_id:"_id"},fields:["group_name","is_customer_group","is_employee_group"]}],function(){$callback$$()})},verified:$callback$$=>{mongoose.models.assuser_identity?$items$$.joinModel2($user$$.current_id_app,global.getModel("assuser_identity"),[{where:{email:"user_created"},fields:[{trang_thai_xac_thuc:"trang_thai"}],setFields:($item$$,$ref$$)=>{$item$$.name||($item$$.name=$ref$$.name)}}],function(){$items$$.filter($i$$=>$i$$.trang_thai_xac_thuc).joinModel2(null,global.getModel("trangthai"),
5
5
  [{where:$item$$=>({ma_trang_thai:$item$$.trang_thai_xac_thuc,ma_ct:"ASSUSER_IDENTITY"}),fields:[{ten_trang_thai_xac_thuc:"ten_trang_thai"},"color"]}],function(){$callback$$()})}):$callback$$()}},()=>{$items$$.forEach($item$$=>{$item$$.real_name&&($item$$.name=$item$$.real_name);delete $item$$.password});$next$$(null,$items$$)})},onUpdating:async($user$$,$data$$,$obj$$,$next$$)=>{if($data$$.phone){let $u$$=await global.getModel("user").findOne({$or:[{"local.phone":$data$$.phone},{email:$data$$.phone}]});
6
- if($u$$&&$u$$.email!==$obj$$.email)return $next$$("S\u1ed1 \u0111i\u1ec7n tho\u1ea1i "+$data$$.phone+" \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng")}delete $data$$.password;if($data$$.admin&&!$obj$$.admin&&!$user$$.appAdmin)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n \u0111\u1eb7t ng\u01b0\u1eddi n\u00e0y l\u00e0 ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb");$next$$(null,$data$$,$obj$$)},onUpdated:async($u$jscomp$1_user$$,$obj$$,$next$$)=>{$obj$$.phone&&($u$jscomp$1_user$$=await User.findOne({email:$obj$$.email}))&&
6
+ if($u$$&&$u$$.email!==$obj$$.email)return $next$$("S\u1ed1 \u0111i\u1ec7n tho\u1ea1i "+$data$$.phone+" \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng")}delete $data$$.password;if($data$$.admin&&!$obj$$.admin&&!$user$$.appAdmin)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n \u0111\u1eb7t ng\u01b0\u1eddi n\u00e0y l\u00e0 ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb");$next$$(null,$data$$,$obj$$)},onUpdated:async($u$jscomp$1_user$$,$obj$$,$next$$)=>{$obj$$?.phone&&($u$jscomp$1_user$$=await User.findOne({email:$obj$$.email}))&&
7
7
  ($u$jscomp$1_user$$.local=$u$jscomp$1_user$$.local||{},$u$jscomp$1_user$$.local.phone=$obj$$.phone,await $u$jscomp$1_user$$.save(),redisCache.set("user",$u$jscomp$1_user$$.toObject(),function($e$$){$e$$&&console.error($e$$)}));$next$$(null,$obj$$)},onCreating:async($u$jscomp$2_user$$,$data$$,$next$$)=>{if($data$$.auto_create_user&&$data$$.password&&$data$$.phone&&($u$jscomp$2_user$$=await global.getModel("user").findOne({$or:[{"local.phone":$data$$.phone},{email:$data$$.phone}]}))&&$u$jscomp$2_user$$.email!==
8
- $data$$.email)return $next$$("S\u1ed1 \u0111i\u1ec7n tho\u1ea1i "+$data$$.phone+" \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng");$next$$(null,$data$$)},onCreated:async($user$$,$_obj$$,$next$$)=>{const $obj$$=await model.findOne({_id:$_obj$$._id});$obj$$.auto_create_user&&$obj$$.password?User.findOne({email:$obj$$.email},async($e$$,$rs$$)=>{if($e$$)return console.error("[participant] [created] error find user:",$e$$),$next$$(null,$_obj$$);if($rs$$)return console.log("[participant] user exists, update participant password..."),
8
+ $data$$.email)return $next$$("S\u1ed1 \u0111i\u1ec7n tho\u1ea1i "+$data$$.phone+" \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng");$next$$(null,$data$$)},onCreated:async($user$$,$_obj$$,$next$$)=>{const $obj$$=await model.findOne({_id:$_obj$$._id});$obj$$?.auto_create_user&&$obj$$?.password?User.findOne({email:$obj$$.email},async($e$$,$rs$$)=>{if($e$$)return console.error("[participant] [created] error find user:",$e$$),$next$$(null,$_obj$$);if($rs$$)return console.log("[participant] user exists, update participant password..."),
9
9
  $rs$$.password=$rs$$.generateHash($obj$$.email+$obj$$.password),await $rs$$.save(),$next$$(null,$_obj$$);$e$$=new User;$e$$.email=$obj$$.email;$e$$.name=$obj$$.name;$e$$.local={};$e$$.local.email=$obj$$.email;$e$$.local.name=$obj$$.name;$e$$.local.phone=$obj$$.phone;$e$$.local.active=!0;$e$$.local.password=$e$$.generateHash($e$$.email+$obj$$.password);$e$$.save(($e$$,$_user$$)=>{if($e$$)return model.remove({_id:$obj$$._id}),$next$$(`Kh\u00f4ng th\u1ec3 t\u1ea1o ng\u01b0\u1eddi d\u00f9ng ${$obj$$.email}, L\u1ed7i: ${$e$$.message}`);
10
10
  redisCache.set("user",$_user$$.toObject(),function($e$$){$e$$&&console.error($e$$)});$next$$(null,$_obj$$)})}):$next$$(null,$_obj$$)}})).route()};
@@ -14,7 +14,7 @@ $res$$){findByToken($req$$.query.access_token,$req$$.ip||$req$$.headers["x-forwa
14
14
  "1"||($error$jscomp$4_user$$.local.name=$profile$$.name,$error$jscomp$4_user$$.name=$profile$$.name));if($_phone_identify_key$$=$profile$$.phone){let $tmp_u$$=await User.findOne({$or:[{"local.phone":$_phone_identify_key$$,email:$_phone_identify_key$$}]});if($tmp_u$$&&$tmp_u$$.email!==$error$jscomp$4_user$$.email)return $res$$.status(400).send({error:`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$_phone_identify_key$$} \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng`})}$_phone_identify_key$$!=void 0&&($error$jscomp$4_user$$.local.phone=
15
15
  $_phone_identify_key$$);$profile$$.address!=void 0&&($error$jscomp$4_user$$.local.address=$profile$$.address);$profile$$.zalo!=void 0&&($error$jscomp$4_user$$.local.zalo=$profile$$.zalo);$profile$$.whatsapp!=void 0&&($error$jscomp$4_user$$.local.whatsapp=$profile$$.whatsapp);$profile$$.facebook!=void 0&&($error$jscomp$4_user$$.local.facebook=$profile$$.facebook);$profile$$.company!=void 0&&($error$jscomp$4_user$$.local.company=$profile$$.company);$profile$$.picture!=void 0&&($error$jscomp$4_user$$.local.picture=
16
16
  $profile$$.picture);if($profile$$.email2!=void 0){if($profile$$.email2&&!validator.isEmail($profile$$.email2))return $res$$.status(400).send({error:`Email ${$profile$$.email2} kh\u00f4ng h\u1ee3p l\u1ec7`});$error$jscomp$4_user$$.email2=$profile$$.email2}$error$jscomp$4_user$$.user_updated=$req$$.user.email;$error$jscomp$4_user$$.date_updated=new Date;User.findByIdAndUpdate($_user$$._id,$error$jscomp$4_user$$,async function($error$$,$rs$$){if($error$$||!$rs$$)return $res$$.status(400).send({error:$error$$||
17
- "User kh\u00f4ng t\u1ed3n t\u1ea1i"});log.create({id_app:"CHANGEPROFILE",id_func:"CHANGEPROFILE",action:"CHANGEPROFILE"},$_user$$.email,$req$$.header("user-agent"),$req$$);Customer.findOne({of_user:$rs$$.email,ma_kh:$rs$$.email.toUpperCase()},($e$$,$cust$$)=>{$cust$$?($cust$$.ten_kh=$rs$$.name,$cust$$.save(($e$$,$_cust$$)=>{if($e$$)return console.error("can't update ten_kh for user",$rs$$.name,$e$$);global.clientRedis.set("stp:"+$_cust$$._id.toString(),"")})):console.error("Not found customer of user",
17
+ "User kh\u00f4ng t\u1ed3n t\u1ea1i"});log.create({id_app:"CHANGEPROFILE",id_func:"CHANGEPROFILE",action:"CHANGEPROFILE"},$_user$$.email,$req$$.header("user-agent"),$req$$);Customer.findOne({of_user:$rs$$.email,ma_kh:$rs$$.email.toUpperCase()},($e$$,$cust$$)=>{$cust$$?($cust$$.ten_kh=$rs$$.name,$cust$$.save(($e$$,$_cust$$)=>{if($e$$)return console.error("can't update ten_kh for user",$rs$$.name,$e$$);global.clientRedis.set("flex:"+$_cust$$._id.toString(),"")})):console.error("Not found customer of user",
18
18
  $rs$$.email)});$_user$$=await User.findById($_user$$._id).lean();redisCache.set("user",$_user$$,function($e$$){$e$$?console.error($e$$):console.log("cache user infomation to redis");$res$$.send("\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng")})})}else $res$$.status(404).send({error:"Not found"})})});$router$$.route("/activeByAdmin/:user").get(function($req$$,$res$$){const $usersAdmin$$=[...configs.admins,...(configs.subAdmins||[])];findByToken($req$$.query.access_token,$req$$.ip||$req$$.headers["x-forwarded-for"]||
19
19
  $req$$.connection.remoteAddress,function($error$$,$user$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$});if(!$user$$)return $res$$.status(400).send({error:"Token kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb"});if(underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase()))User.findOne({email:$req$$.params.user},function($e$$,$u$$){if($e$$||!$u$$)return $res$$.status(400).send({error:$req$$.params.user+" ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd"});
20
20
  $u$$.local=$u$$.local||{};$u$$.local.active=!0;$u$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);redisCache.set("user",$u$$.toObject(),function($e$$){$e$$?console.error($e$$):console.log("cache user infomation to redis")});$res$$.send({message:"\u0110\u00e3 k\u00edch ho\u1ea1t th\u00e0nh c\u00f4ng"})})});else return $res$$.status(400).send({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n k\u00edch ho\u1ea1t t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng"})})});$router$$.route("/unActiveByAdmin/:user").get(function($req$$,
@@ -14,20 +14,20 @@ $v_vatvao$$.tk_co=$v_vatvao$$.tk_du_thue;$v_vatvao$$.tien_nt=$v_vatvao$$.t_thue_
14
14
  $d$jscomp$11_detail$$.tien_nhap_nt;$d$jscomp$11_detail$$.tien=$d$jscomp$11_detail$$.tien_nhap;$details_sc$$.push($d$jscomp$11_detail$$)});for(let $detail$$ of $obj$$.details.filter($d$$=>$d$$.gt_vt_du)){const $vt_du$$={...$detail$$,sl_nhap:0};$vt_du$$.gia_von_nt=$vt_du$$.gia_von=0;$vt_du$$.tien_nhap=$vt_du$$.tien_nhap_nt=0;$detail$$.tk_no=$detail$$.tk_co;$detail$$.ma_kh||($detail$$.ma_kh=$obj$$.ma_kh);$detail$$.tk_co=$detail$$.tk_dt_vt_du||$detail$$.tk_dt;$detail$$.tien_nt=$detail$$.gt_vt_du;$detail$$.tien=
15
15
  $detail$$.gt_vt_du;$details_sc$$.push($vt_du$$)}(new PostSocai($obj$$,$details_sc$$,void 0,void 0,$_options$$)).run(function($e$$,$rs$$){$callback$$($e$$,$rs$$)})},post_tdttco:function($callback$$){account.findOne({tk:$obj$$.tk_co,id_app:$obj$$.id_app},{tk_cn:1},function($error$$,$tk$$){if($error$$)return $callback$$($error$$);$tk$$&&$tk$$.tk_cn===!0?(new PostBook($obj$$,[{...$obj$$}],Tdttco,function($obj$$,$callback$$){$obj$$.so_hd=$obj$$.so_ct;$obj$$.ngay_hd=$obj$$.ngay_ct;$obj$$.tien_nt=$obj$$.details.csum("tien_hang_nt")-
16
16
  $obj$$.details.csum("tien_ck_nt")-$obj$$.details.csum("gt_vt_du")+$obj$$.details.csum("tien_phi_nt")+($obj$$.vatvaos||[]).csum("t_thue_nt");$obj$$.tien=$obj$$.details.csum("tien_hang")-$obj$$.details.csum("tien_ck")-$obj$$.details.csum("gt_vt_du")+$obj$$.details.csum("tien_phi")+($obj$$.vatvaos||[]).csum("t_thue");$callback$$($obj$$)})).run(function($e$$,$rs$$){$callback$$($e$$,$rs$$)}):Tdttco.deleteMany({id_ct:$obj$$._id},function(){$callback$$($error$$)})})}},function($e$$,$rs$$){$fn$$($e$$,$rs$$)})};
17
- const $valid$$=async($_po1_i_i$jscomp$1_i$$,$obj$$,$next$$)=>{for($_po1_i_i$jscomp$1_i$$=0;$_po1_i_i$jscomp$1_i$$<$obj$$.details.length;$_po1_i_i$jscomp$1_i$$++){var $ctcpmh_detail$jscomp$6_vatvao$$=$obj$$.details[$_po1_i_i$jscomp$1_i$$];$ctcpmh_detail$jscomp$6_vatvao$$.line=$_po1_i_i$jscomp$1_i$$;$ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap_nt=($ctcpmh_detail$jscomp$6_vatvao$$.tien_hang_nt||0)+($ctcpmh_detail$jscomp$6_vatvao$$.tien_phi_nt||0)-($ctcpmh_detail$jscomp$6_vatvao$$.tien_ck_nt||0);$ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap=
18
- ($ctcpmh_detail$jscomp$6_vatvao$$.tien_hang||0)+($ctcpmh_detail$jscomp$6_vatvao$$.tien_phi||0)-($ctcpmh_detail$jscomp$6_vatvao$$.tien_ck||0);$obj$$.ma_nt==="VND"&&($ctcpmh_detail$jscomp$6_vatvao$$.tien_hang=$ctcpmh_detail$jscomp$6_vatvao$$.tien_hang_nt=Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_hang_nt),$ctcpmh_detail$jscomp$6_vatvao$$.tien_ck=$ctcpmh_detail$jscomp$6_vatvao$$.tien_ck_nt=Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_ck_nt),$ctcpmh_detail$jscomp$6_vatvao$$.tien_phi=$ctcpmh_detail$jscomp$6_vatvao$$.tien_phi_nt=
19
- Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_phi_nt),$ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap=$ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap_nt=Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap_nt))}if($obj$$.vatvaos)for($_po1_i_i$jscomp$1_i$$=0;$_po1_i_i$jscomp$1_i$$<$obj$$.vatvaos.length;$_po1_i_i$jscomp$1_i$$++)$ctcpmh_detail$jscomp$6_vatvao$$=$obj$$.vatvaos[$_po1_i_i$jscomp$1_i$$],$ctcpmh_detail$jscomp$6_vatvao$$.line=$_po1_i_i$jscomp$1_i$$,$obj$$.ma_nt==="VND"&&($ctcpmh_detail$jscomp$6_vatvao$$.t_thue=
20
- $ctcpmh_detail$jscomp$6_vatvao$$.t_thue_nt);if($obj$$.ctcpmhs)for($_po1_i_i$jscomp$1_i$$=0;$_po1_i_i$jscomp$1_i$$<$obj$$.ctcpmhs.length;$_po1_i_i$jscomp$1_i$$++)$ctcpmh_detail$jscomp$6_vatvao$$=$obj$$.ctcpmhs[$_po1_i_i$jscomp$1_i$$],$ctcpmh_detail$jscomp$6_vatvao$$.line=$_po1_i_i$jscomp$1_i$$,$obj$$.ma_nt==="VND"&&($ctcpmh_detail$jscomp$6_vatvao$$.tien_cp=$ctcpmh_detail$jscomp$6_vatvao$$.tien_cp_nt=Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_cp_nt));$obj$$.id_po1&&!$obj$$.id_contract&&($_po1_i_i$jscomp$1_i$$=
21
- await po1.findOne({_id:$obj$$.id_po1,id_app:$obj$$.id_app}))&&($obj$$.id_contract=$_po1_i_i$jscomp$1_i$$.id_contract);$obj$$.id_contract?purchasecontract.findOne({_id:$obj$$.id_contract}).lean().exec(($e$$,$c$$)=>{$c$$&&($obj$$.ma_hd=$c$$.ma_hd);$next$$(null,$obj$$)}):$next$$(null,$obj$$)};$contr_router$$.creating=function($user$$,$obj$$,$next$$){$obj$$.details||($obj$$.details=[]);$valid$$($user$$,$obj$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$obj$$)})};$contr_router$$.updating=
22
- function($user$$,$data$$,$obj$$,$next$$){Tdttco_tt.findOne({id_hd:$obj$$._id,id_app:$obj$$.id_app},function($error$$,$ct_tt$$){if($error$$)return $next$$($error$$);$ct_tt$$?$next$$(`Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt phi\u1ebfu n\u00e0y do \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n b\u1edfi ${$ct_tt$$.ma_ct||"ch\u1ee9ng t\u1eeb"}: ${$ct_tt$$.so_ct}, ng\u00e0y ${moment($ct_tt$$.ngay_ct).format("DD/MM/YYYY")}`):$valid$$($user$$,$data$$,async function($error$$){if($error$$)return $next$$($error$$);
23
- await Dmgiaban.deleteMany({id_app:$obj$$.id_app,id_ct:$obj$$._id.toString()});$next$$(null,$data$$,$obj$$)})})};$contr_router$$.deleting=function($user$$,$obj$$,$next$$){Tdttco_tt.findOne({id_hd:$obj$$._id,id_app:$obj$$.id_app},async function($error$$,$ct_tt$$){if($error$$)return $next$$($error$$);$ct_tt$$?$next$$(`Kh\u00f4ng th\u1ec3 xo\u00e1 phi\u1ebfu n\u00e0y do \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n b\u1edfi ${$ct_tt$$.ma_ct||"ch\u1ee9ng t\u1eeb"}: ${$ct_tt$$.so_ct}, ng\u00e0y ${moment($ct_tt$$.ngay_ct).format("DD/MM/YYYY")}`):
24
- (await Dmgiaban.deleteMany({id_app:$obj$$.id_app,id_ct:$obj$$._id.toString()}),$next$$(null,$obj$$))})};$contr_router$$.on("saved",function($obj$$){$obj$$.id_po1&&po1.updateMany({_id:$obj$$.id_po1,id_app:$obj$$.id_app},{id_pn1:$obj$$._id.toString(),trang_thai:"7"},($e$$,$rs$$)=>{console.log("update po1",$obj$$.id_po1,$rs$$);po1.findOne({_id:$obj$$.id_po,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.PO1,$e$$=>{$e$$&&console.error($e$$)})})})});$contr_router$$.on("deleted",
25
- function($obj$$){$obj$$.id_po1&&po1.updateMany({_id:$obj$$.id_po1,id_app:$obj$$.id_app},{id_pn1:"",trang_thai:"3"},()=>{po1.updateMany({_id:$obj$$.id_po1,id_app:$obj$$.id_app,id_pnh:{$nin:["",null,void 0]}},{trang_thai:"6"},($e$$,$rs$$)=>{console.log("update po1",$rs$$);po1.findOne({_id:$obj$$.id_po1,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.PO1,$e$$=>{$e$$&&console.error($e$$)})})})})});$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=
26
- $user$$.current_id_app;async.parallel({dt:function($callback$$){$items$$.filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback$$()})},kh:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kh).joinModel($id_app$$,customer,[{akey:"ma_kh",bkey:"ma_kh",fields:[{name:"ten_kh",value:"ten_kh"}]}],function(){$callback$$()})},kho:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kho).joinModel($id_app$$,
27
- dmkho,[{akey:"ma_kho",bkey:"ma_kho",fields:[{name:"ten_kho",value:"ten_kho"}]}],function(){$callback$$()})},trangthai:function($callback$$){$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai","color"]}],function(){$callback$$()})},contract:function($callback$$){$items$$.filter($item$$=>$item$$.ma_hd).joinModel2($id_app$$,contract,[{where:{ma_hd:"so_hd"},fields:["ten_hd","ten_hd"]}],function(){$callback$$()})},
28
- t_tien:function($callback$$){$items$$.forEach(function($r$$){$r$$.t_thue_vao=0;$r$$.t_thue_vao_nt=0;$r$$.t_tien_nhap=0;$r$$.t_tien_nhap_nt=0;$r$$.details&&($r$$.t_sl=$r$$.details.csum("sl_nhap"),$r$$.t_tien_hang=$r$$.details.csum("tien_hang"),$r$$.t_tien_hang_nt=$r$$.details.csum("tien_hang_nt"),$r$$.t_ck=$r$$.details.csum("tien_ck"),$r$$.t_ck_nt=$r$$.details.csum("tien_ck_nt"),$r$$.t_cp=$r$$.details.csum("tien_phi"),$r$$.t_cp_nt=$r$$.details.csum("tien_phi_nt"),$r$$.t_tien_nhap=$r$$.details.csum("tien_nhap"),
29
- $r$$.t_tien_nhap_nt=$r$$.details.csum("tien_nhap_nt"));$r$$.vatvaos&&($r$$.t_thue_vao=$r$$.vatvaos.csum("t_thue"),$r$$.t_thue_vao_nt=$r$$.vatvaos.csum("t_thue_nt"));$r$$.ctcpmhs&&($r$$.t_cp_cpb_nt=$r$$.ctcpmhs.csum("tien_cp_nt"),$r$$.t_cp_cpb=$r$$.ctcpmhs.csum("tien_cp"));$r$$.t_tt=$r$$.t_tien_nhap+$r$$.t_thue_vao;$r$$.t_tt_nt=$r$$.t_tien_nhap_nt+$r$$.t_thue_vao_nt});$callback$$()},details_vt:function($callback$$){async.each($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>
30
- $item$$.ma_vt).joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:["ten_vt","ma_tt1_yn","ma_tt2_yn","ma_tt3_yn","ma_lo_yn"]}],function(){$callback1$$()})},function(){$callback$$()})},details_vt_du:function($callback$$){async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($d$$=>$d$$.ma_vt_du).joinModel2($id_app$$,dmvt,[{where:{ma_vt_du:"ma_vt"},fields:{ten_vt_du:"ten_vt"}}],function(){$callback1$$()})},function(){$callback$$()})},details_dt:function($callback$$){async.map($items$$,
31
- function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_contract:function($callback$$){async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_hd).joinModel($id_app$$,contract,[{akey:"ma_hd",bkey:"so_hd",fields:[{name:"ten_hd",value:"ten_hd"}]}],function(){$callback1$$()})},function(){$callback$$()})},
32
- details_phi:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_phi).joinModel($id_app$$,dmphi,[{akey:"ma_phi",bkey:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_cpmh:function($callback$$){async.each($items$$,function($ctcpmhs_r$$,$callback1$$){($ctcpmhs_r$$=$ctcpmhs_r$$.ctcpmhs)?$ctcpmhs_r$$.filter($item$$=>$item$$.ma_cp).joinModel($id_app$$,dmcpmh,[{akey:"ma_cp",
33
- bkey:"ma_cp",fields:[{name:"ten_cp",value:"ten_cp"}]}],function(){$callback1$$()}):$callback1$$()},function(){$callback$$()})}},function(){$fn$$(null,$items$$)})}};
17
+ const $valid$$=async($_po1_i_i$jscomp$1_i$$,$obj$$,$next$$)=>{await ($obj$$.details||[]).filter($d$$=>!$d$$.tk_vt).asyncJoinModel2($obj$$.id_app,"dmvt",{where:"ma_vt",fields:["tk_vt"]});for($_po1_i_i$jscomp$1_i$$=0;$_po1_i_i$jscomp$1_i$$<$obj$$.details.length;$_po1_i_i$jscomp$1_i$$++){var $ctcpmh_detail$jscomp$6_vatvao$$=$obj$$.details[$_po1_i_i$jscomp$1_i$$];$ctcpmh_detail$jscomp$6_vatvao$$.line=$_po1_i_i$jscomp$1_i$$;$ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap_nt=($ctcpmh_detail$jscomp$6_vatvao$$.tien_hang_nt||
18
+ 0)+($ctcpmh_detail$jscomp$6_vatvao$$.tien_phi_nt||0)-($ctcpmh_detail$jscomp$6_vatvao$$.tien_ck_nt||0);$ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap=($ctcpmh_detail$jscomp$6_vatvao$$.tien_hang||0)+($ctcpmh_detail$jscomp$6_vatvao$$.tien_phi||0)-($ctcpmh_detail$jscomp$6_vatvao$$.tien_ck||0);$obj$$.ma_nt==="VND"&&($ctcpmh_detail$jscomp$6_vatvao$$.tien_hang=$ctcpmh_detail$jscomp$6_vatvao$$.tien_hang_nt=Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_hang_nt),$ctcpmh_detail$jscomp$6_vatvao$$.tien_ck=$ctcpmh_detail$jscomp$6_vatvao$$.tien_ck_nt=
19
+ Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_ck_nt),$ctcpmh_detail$jscomp$6_vatvao$$.tien_phi=$ctcpmh_detail$jscomp$6_vatvao$$.tien_phi_nt=Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_phi_nt),$ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap=$ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap_nt=Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_nhap_nt))}if($obj$$.vatvaos)for($_po1_i_i$jscomp$1_i$$=0;$_po1_i_i$jscomp$1_i$$<$obj$$.vatvaos.length;$_po1_i_i$jscomp$1_i$$++)$ctcpmh_detail$jscomp$6_vatvao$$=
20
+ $obj$$.vatvaos[$_po1_i_i$jscomp$1_i$$],$ctcpmh_detail$jscomp$6_vatvao$$.line=$_po1_i_i$jscomp$1_i$$,$obj$$.ma_nt==="VND"&&($ctcpmh_detail$jscomp$6_vatvao$$.t_thue=$ctcpmh_detail$jscomp$6_vatvao$$.t_thue_nt);if($obj$$.ctcpmhs)for($_po1_i_i$jscomp$1_i$$=0;$_po1_i_i$jscomp$1_i$$<$obj$$.ctcpmhs.length;$_po1_i_i$jscomp$1_i$$++)$ctcpmh_detail$jscomp$6_vatvao$$=$obj$$.ctcpmhs[$_po1_i_i$jscomp$1_i$$],$ctcpmh_detail$jscomp$6_vatvao$$.line=$_po1_i_i$jscomp$1_i$$,$obj$$.ma_nt==="VND"&&($ctcpmh_detail$jscomp$6_vatvao$$.tien_cp=
21
+ $ctcpmh_detail$jscomp$6_vatvao$$.tien_cp_nt=Math.roundBy($ctcpmh_detail$jscomp$6_vatvao$$.tien_cp_nt));$obj$$.id_po1&&!$obj$$.id_contract&&($_po1_i_i$jscomp$1_i$$=await po1.findOne({_id:$obj$$.id_po1,id_app:$obj$$.id_app}))&&($obj$$.id_contract=$_po1_i_i$jscomp$1_i$$.id_contract);$obj$$.id_contract?purchasecontract.findOne({_id:$obj$$.id_contract}).lean().exec(($e$$,$c$$)=>{$c$$&&($obj$$.ma_hd=$c$$.ma_hd);$next$$(null,$obj$$)}):$next$$(null,$obj$$)};$contr_router$$.creating=function($user$$,$obj$$,
22
+ $next$$){$obj$$.details||($obj$$.details=[]);$valid$$($user$$,$obj$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$obj$$)})};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){Tdttco_tt.findOne({id_hd:$obj$$._id,id_app:$obj$$.id_app},function($error$$,$ct_tt$$){if($error$$)return $next$$($error$$);$ct_tt$$?$next$$(`Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt phi\u1ebfu n\u00e0y do \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n b\u1edfi ${$ct_tt$$.ma_ct||"ch\u1ee9ng t\u1eeb"}: ${$ct_tt$$.so_ct}, ng\u00e0y ${moment($ct_tt$$.ngay_ct).format("DD/MM/YYYY")}`):
23
+ $valid$$($user$$,$data$$,async function($error$$){if($error$$)return $next$$($error$$);await Dmgiaban.deleteMany({id_app:$obj$$.id_app,id_ct:$obj$$._id.toString()});$next$$(null,$data$$,$obj$$)})})};$contr_router$$.deleting=function($user$$,$obj$$,$next$$){Tdttco_tt.findOne({id_hd:$obj$$._id,id_app:$obj$$.id_app},async function($error$$,$ct_tt$$){if($error$$)return $next$$($error$$);$ct_tt$$?$next$$(`Kh\u00f4ng th\u1ec3 xo\u00e1 phi\u1ebfu n\u00e0y do \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n b\u1edfi ${$ct_tt$$.ma_ct||
24
+ "ch\u1ee9ng t\u1eeb"}: ${$ct_tt$$.so_ct}, ng\u00e0y ${moment($ct_tt$$.ngay_ct).format("DD/MM/YYYY")}`):(await Dmgiaban.deleteMany({id_app:$obj$$.id_app,id_ct:$obj$$._id.toString()}),$next$$(null,$obj$$))})};$contr_router$$.on("saved",function($obj$$){$obj$$.id_po1&&po1.updateMany({_id:$obj$$.id_po1,id_app:$obj$$.id_app},{id_pn1:$obj$$._id.toString(),trang_thai:"7"},($e$$,$rs$$)=>{console.log("update po1",$obj$$.id_po1,$rs$$);po1.findOne({_id:$obj$$.id_po,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&
25
+ controller.postData($_obj$$,global.controllers.PO1,$e$$=>{$e$$&&console.error($e$$)})})})});$contr_router$$.on("deleted",function($obj$$){$obj$$.id_po1&&po1.updateMany({_id:$obj$$.id_po1,id_app:$obj$$.id_app},{id_pn1:"",trang_thai:"3"},()=>{po1.updateMany({_id:$obj$$.id_po1,id_app:$obj$$.id_app,id_pnh:{$nin:["",null,void 0]}},{trang_thai:"6"},($e$$,$rs$$)=>{console.log("update po1",$rs$$);po1.findOne({_id:$obj$$.id_po1,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.PO1,
26
+ $e$$=>{$e$$&&console.error($e$$)})})})})});$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.parallel({dt:function($callback$$){$items$$.filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback$$()})},kh:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kh).joinModel($id_app$$,customer,[{akey:"ma_kh",bkey:"ma_kh",fields:[{name:"ten_kh",value:"ten_kh"}]}],
27
+ function(){$callback$$()})},kho:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kho).joinModel($id_app$$,dmkho,[{akey:"ma_kho",bkey:"ma_kho",fields:[{name:"ten_kho",value:"ten_kho"}]}],function(){$callback$$()})},trangthai:function($callback$$){$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai","color"]}],function(){$callback$$()})},contract:function($callback$$){$items$$.filter($item$$=>$item$$.ma_hd).joinModel2($id_app$$,
28
+ contract,[{where:{ma_hd:"so_hd"},fields:["ten_hd","ten_hd"]}],function(){$callback$$()})},t_tien:function($callback$$){$items$$.forEach(function($r$$){$r$$.t_thue_vao=0;$r$$.t_thue_vao_nt=0;$r$$.t_tien_nhap=0;$r$$.t_tien_nhap_nt=0;$r$$.details&&($r$$.t_sl=$r$$.details.csum("sl_nhap"),$r$$.t_tien_hang=$r$$.details.csum("tien_hang"),$r$$.t_tien_hang_nt=$r$$.details.csum("tien_hang_nt"),$r$$.t_ck=$r$$.details.csum("tien_ck"),$r$$.t_ck_nt=$r$$.details.csum("tien_ck_nt"),$r$$.t_cp=$r$$.details.csum("tien_phi"),
29
+ $r$$.t_cp_nt=$r$$.details.csum("tien_phi_nt"),$r$$.t_tien_nhap=$r$$.details.csum("tien_nhap"),$r$$.t_tien_nhap_nt=$r$$.details.csum("tien_nhap_nt"));$r$$.vatvaos&&($r$$.t_thue_vao=$r$$.vatvaos.csum("t_thue"),$r$$.t_thue_vao_nt=$r$$.vatvaos.csum("t_thue_nt"));$r$$.ctcpmhs&&($r$$.t_cp_cpb_nt=$r$$.ctcpmhs.csum("tien_cp_nt"),$r$$.t_cp_cpb=$r$$.ctcpmhs.csum("tien_cp"));$r$$.t_tt=$r$$.t_tien_nhap+$r$$.t_thue_vao;$r$$.t_tt_nt=$r$$.t_tien_nhap_nt+$r$$.t_thue_vao_nt});$callback$$()},details_vt:function($callback$$){async.each($items$$,
30
+ function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_vt).joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:["ten_vt","ma_tt1_yn","ma_tt2_yn","ma_tt3_yn","ma_lo_yn"]}],function(){$callback1$$()})},function(){$callback$$()})},details_vt_du:function($callback$$){async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($d$$=>$d$$.ma_vt_du).joinModel2($id_app$$,dmvt,[{where:{ma_vt_du:"ma_vt"},fields:{ten_vt_du:"ten_vt"}}],function(){$callback1$$()})},function(){$callback$$()})},
31
+ details_dt:function($callback$$){async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_contract:function($callback$$){async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_hd).joinModel($id_app$$,contract,[{akey:"ma_hd",bkey:"so_hd",fields:[{name:"ten_hd",value:"ten_hd"}]}],
32
+ function(){$callback1$$()})},function(){$callback$$()})},details_phi:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_phi).joinModel($id_app$$,dmphi,[{akey:"ma_phi",bkey:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_cpmh:function($callback$$){async.each($items$$,function($ctcpmhs_r$$,$callback1$$){($ctcpmhs_r$$=$ctcpmhs_r$$.ctcpmhs)?$ctcpmhs_r$$.filter($item$$=>
33
+ $item$$.ma_cp).joinModel($id_app$$,dmcpmh,[{akey:"ma_cp",bkey:"ma_cp",fields:[{name:"ten_cp",value:"ten_cp"}]}],function(){$callback1$$()}):$callback1$$()},function(){$callback$$()})}},function(){$fn$$(null,$items$$)})}};