flexbiz-server 12.7.6 → 12.7.8

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.
Files changed (95) hide show
  1. package/package.json +3 -3
  2. package/server/auths/rateLimiterMiddleware.js +3 -3
  3. package/server/controllers/controller.js +41 -41
  4. package/server/controllers/controllerUtils.js +61 -61
  5. package/server/controllers/controllerUtils_v1.js +72 -0
  6. package/server/controllers/controller_old.js +129 -0
  7. package/server/controllers/createHandler.js +34 -34
  8. package/server/controllers/createHandler_old.js +35 -0
  9. package/server/controllers/deleteHandler.js +11 -12
  10. package/server/controllers/deleteHandler_old.js +12 -0
  11. package/server/controllers/exportHandler.js +19 -17
  12. package/server/controllers/exportHandler_old.js +17 -0
  13. package/server/controllers/findHandler.js +61 -55
  14. package/server/controllers/findHandler_old.js +74 -0
  15. package/server/controllers/importFromGsHandler.js +10 -10
  16. package/server/controllers/importFromJsonHandler.js +6 -6
  17. package/server/controllers/importFromJsonHandler_old.js +6 -0
  18. package/server/controllers/updateBookHandler.js +1 -1
  19. package/server/controllers/updateFieldHandler.js +12 -13
  20. package/server/controllers/updateFieldHandler_old.js +13 -0
  21. package/server/controllers/updateHandler.js +38 -40
  22. package/server/controllers/updateHandler_old.js +40 -0
  23. package/server/controllers/viewHandler.js +13 -14
  24. package/server/controllers/viewHandler_old.js +14 -0
  25. package/server/flow/nodes/aiAnalysis.js +1 -1
  26. package/server/global.js +3 -5
  27. package/server/libs/WorkerStaticPool.js +14 -14
  28. package/server/libs/asyncCompat.js +10 -0
  29. package/server/libs/createSocaitheongay.js +1 -1
  30. package/server/libs/invoiceVnpt.js +1 -1
  31. package/server/libs/post-book.js +2 -2
  32. package/server/libs/post-sokho.js +5 -5
  33. package/server/libs/redis-cache.js +2 -2
  34. package/server/models/assabcihandler.js +1 -1
  35. package/server/models/counter.js +2 -2
  36. package/server/models/listinfo.js +200 -225
  37. package/server/models/listinfo_old.js +124 -0
  38. package/server/models/po1.js +4 -4
  39. package/server/models/purchase_contract.js +3 -3
  40. package/server/models/smsaccount.js +2 -2
  41. package/server/models/tdttco.js +3 -3
  42. package/server/models/tdttno.js +3 -3
  43. package/server/modules/lists/ls-afflink.js +1 -1
  44. package/server/modules/lists/ls-assbooking.js +1 -1
  45. package/server/modules/lists/ls-assinvestment.js +11 -11
  46. package/server/modules/lists/ls-asskey.js +2 -2
  47. package/server/modules/lists/ls-assneedtobuy.js +1 -1
  48. package/server/modules/lists/ls-assperiod.js +1 -1
  49. package/server/modules/lists/ls-asssell.js +1 -1
  50. package/server/modules/lists/ls-cart.js +14 -14
  51. package/server/modules/lists/ls-congdoansx.js +1 -1
  52. package/server/modules/lists/ls-consultant.js +2 -2
  53. package/server/modules/lists/ls-dkhoc.js +2 -2
  54. package/server/modules/lists/ls-dmban.js +1 -1
  55. package/server/modules/lists/ls-dmbp.js +2 -2
  56. package/server/modules/lists/ls-dmdoi.js +1 -1
  57. package/server/modules/lists/ls-dmnhtask.js +2 -2
  58. package/server/modules/lists/ls-dmvt.js +3 -3
  59. package/server/modules/lists/ls-file.js +1 -1
  60. package/server/modules/lists/ls-giaoca.js +1 -1
  61. package/server/modules/lists/ls-introducer.js +2 -2
  62. package/server/modules/lists/ls-kbm-bcqt.js +1 -1
  63. package/server/modules/lists/ls-news.js +1 -1
  64. package/server/modules/lists/ls-participant.js +1 -1
  65. package/server/modules/lists/ls-rpt.js +1 -1
  66. package/server/modules/lists/ls-smsaccount.js +1 -1
  67. package/server/modules/lists/ls-sosanxuat.js +1 -1
  68. package/server/modules/lists/ls-support.js +1 -1
  69. package/server/modules/public/callin.js +1 -1
  70. package/server/modules/reports/calc-tinhgiafifo.js +1 -1
  71. package/server/modules/reports/calc-tinhgiatb.js +1 -1
  72. package/server/modules/reports/calc-tinhgiathanh.js +1 -1
  73. package/server/modules/reports/calc-tinhluong.js +1 -1
  74. package/server/modules/reports/rp-assbonus.js +1 -1
  75. package/server/modules/reports/rp-bkchamcong.js +1 -1
  76. package/server/modules/reports/rp-cdpsdiem.js +1 -1
  77. package/server/modules/reports/rp-cdpskh.js +1 -1
  78. package/server/modules/reports/rp-cdpsnphep.js +1 -1
  79. package/server/modules/reports/rp-kcsns.js +1 -1
  80. package/server/modules/reports/rp-sctbhxh.js +1 -1
  81. package/server/modules/reports/rp-sctluong.js +1 -1
  82. package/server/modules/reports/rp-sctthuetncn.js +1 -1
  83. package/server/modules/reports/rp-sctvt.js +1 -1
  84. package/server/modules/reports/rp-sctvtnpp.js +1 -1
  85. package/server/modules/reports/rp-sctvttt.js +1 -1
  86. package/server/modules/reports/rp-thgt.js +1 -1
  87. package/server/modules/systems/sys-labelinfo.js +2 -3
  88. package/server/modules/systems/sys-listinfo.js +1 -1
  89. package/server/modules/systems/sys-menuinfo.js +1 -4
  90. package/server/modules/systems/sys-moduleinfo.js +2 -4
  91. package/server/modules/systems/sys-notification.js +1 -1
  92. package/server/route.js +1 -1
  93. package/server/workers/backupApp.js +1 -1
  94. package/server/workers/calcGrid.js +1 -1
  95. package/server/workers/runScript.js +1 -1
@@ -0,0 +1,129 @@
1
+ const EventEmitter=require("events").EventEmitter,_=require("lodash"),ckvt=require("../libs/ckvt"),OptionsModel=global.getModel("options"),Approve=global.getModel("approve"),trangthai=global.getModel("trangthai"),Participant=global.getModel("participant"),async=require("async"),crypto=require("crypto"),permission=require("../libs/permission"),utils=require("../libs/utils"),templatevoucher=global.getModel("templatevoucher"),{evalute}=require("../libs/utils"),redisCache=require("../libs/redis-cache"),
2
+ dmqddvt=global.getModel("dmqddvt"),{executeInTransaction,runWithoutSession}=require("../libs/sessionContext.js"),importHandler=require("./importHandler"),viewHandler=require("./viewHandler"),{buildJsonSchema}=require("../libs/docs"),{bodyToJson,ERRORS,getNextSequence,asyncPostData,pushNotification,runWebhooks}=require("./controllerUtils"),handlers=require("./handlers");global.__schemaCache=global.__schemaCache||new Map;
3
+ class controller{constructor($router$$,$model$$,$name$$,$options$$={isVoucher:void 0,sort:void 0,check_stock:void 0,unique:void 0,require_id_app:void 0,notNeedRight:void 0,onPopulate:void 0}){this.module=this.name=$name$$;this.model=$model$$;this.model_name=$model$$.modelName.toLowerCase();this.router=$router$$;global.controllers[$name$$.trim().toUpperCase()]=this;$options$$.findExact||($options$$.findExact={});this.keyValues=$options$$.keyValues;this.keyValues||(this.keyValues={});$options$$.require_id_app===
4
+ void 0||$options$$.require_id_app===!0?(this.require_id_app=!0,this.route_name=`/:id_app/${this.module}`):(this.require_id_app=!1,this.route_name=`/${this.module}`);this.collection_name=$options$$.collection_name?$options$$.collection_name:$name$$;this.isVoucher=$options$$.isVoucher;this.sort=$options$$.sort;this.unique=$options$$.unique;this.getting=$options$$.onGetting;this.finding=$options$$.onFinding;this.found=$options$$.onFound;this.validating=$options$$.onValidating;this.saving=$options$$.onSaving;
5
+ this.creating=$options$$.onCreating;this.created=$options$$.onCreated;this.updating=$options$$.onUpdating;this.updated=$options$$.onUpdated;this.deleting=$options$$.onDeleting;this.deleted=$options$$.onDeleted;this.approveData=$options$$.approveData;this.populate=$options$$.onPopulate;this.view=$options$$.onView;this.viewRequired=$options$$.onViewRequired;this.cache=$options$$.cache;this.excelParse=$options$$.onExcelParse;this.options=$options$$;this.replaceIfExists=$options$$.replaceIfExists}async getJsonSchema($id_app_schema$$){let $configCacheKey$$=
6
+ `${this.name}_${$id_app_schema$$}`;if(global.__schemaCache&&global.__schemaCache.has($configCacheKey$$)){var $cachedData_listinfo$$=global.__schemaCache.get($configCacheKey$$);if(Date.now()-$cachedData_listinfo$$.timestamp<(global.CONFIG_CACHE_TTL||36E5))return $cachedData_listinfo$$.schema;global.__schemaCache.delete($configCacheKey$$)}$cachedData_listinfo$$=await global.getModel("listinfo").findOne({code:this.name.trim().toLowerCase()}).lean();if(!$cachedData_listinfo$$)return Logger.info("[Controller][getJsonSchema] kh\u00f4ng t\u00ecm th\u1ea5y schema v\u1edbi listinfo_code",
7
+ this.name.trim().toLowerCase()),null;$id_app_schema$$=await buildJsonSchema($cachedData_listinfo$$.fields||[],void 0,$id_app_schema$$);global.__schemaCache.set($configCacheKey$$,{timestamp:Date.now(),schema:$id_app_schema$$});return $id_app_schema$$}async asyncView($user$$,$items$$,$options$$){const $self$$=this;return new Promise($resolve$$=>{$self$$.onView($user$$,$items$$,($error$$,$rs$$)=>{if($error$$)return Logger.error($error$$),$resolve$$($items$$);$resolve$$($rs$$)},$options$$)})}async onView($user$$,
8
+ $rows$$,$next$$,$options$$){viewHandler($user$$,this,$rows$$,$next$$,$options$$)}async notNeedRight($user$$,$_options$$={}){let $nnr$$=this.options.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=$nnr$$($user$$,$_options$$));return $nnr$$}getProperty($name$$){return this[$name$$]}getNextId(){let $ma_ct$$=this.name;this.router.route(`${this.route_name}/next/:field`).get(($field_req$$,$res$$)=>{let $id_app$$=$field_req$$.user.current_id_app;$field_req$$=$field_req$$.params.field;$field_req$$==="so_ct"?$res$$.send({[$field_req$$]:$ma_ct$$}):
9
+ getNextSequence($id_app$$,$ma_ct$$,$field_req$$,($e$$,$rs$$)=>{if($e$$)return Logger.error("getNextId",$e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});$res$$.send($rs$$)})})}async checkData($appInfo$$,$data$$,$fn$$){const $options$$=this.options;if($data$$.trang_thai&&$data$$.ma_ct){let $tt$$=await trangthai.findOne({ma_ct:$data$$.ma_ct,ma_trang_thai:$data$$.trang_thai},{check_data:1}).lean();if($tt$$&&$tt$$.check_data==0)return $fn$$()}async.series({checkTonKho:$callback$$=>
10
+ {$data$$.details&&$appInfo$$&&$appInfo$$.options&&$appInfo$$.options.khong_xuat_kho_am&&$options$$.check_stock!=0?(async()=>{let $details$$=$data$$.details.filter($d$$=>$d$$.ma_vt&&$d$$.sl_xuat);await $details$$.asyncJoinModel2($appInfo$$._id,"dmvt",{where:{ma_vt:"ma_vt"},fields:["tg_tk","kg_kiem_tra_ton_kho","kg_kiem_tra_ton_kho_tt",{cb:"combo"},"ten_vt"]});$details$$.forEach($d$$=>{!$d$$.combo&&$d$$.cb&&($d$$.combo=$d$$.cb)});$details$$=$details$$.filter($d$$=>$d$$.tg_tk&&!$d$$.kg_kiem_tra_ton_kho||
11
+ ($d$$.combo||[]).length>0);$details$$=$details$$.map($detail$$=>$detail$$.combo&&$detail$$.combo.length>0?$detail$$.combo.map($c$$=>{$c$$=$c$$.toObject?utils.convertObjectIdsToStrings($c$$.toObject()):{...$c$$};$c$$.sl_xuat*=$detail$$.sl_xuat;$c$$.ma_kho=$detail$$.ma_kho;return $c$$}):[$detail$$]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);await $details$$.asyncJoinModel2($appInfo$$._id,dmqddvt,{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:"ty_le_qd"});let $data_sokho$$=[];$data$$._id&&($data_sokho$$=
12
+ await global.getModel("sokho").find({id_ct:$data$$._id.toString(),id_app:$appInfo$$._id}).lean());$details$$.forEach($d$$=>{$d$$.he_so_qd=$d$$.ty_le_qd||1;$d$$.sl_xuat_qd=$d$$.he_so_qd*$d$$.sl_xuat});$details$$=await $details$$.asyncGroupBy(["ma_vt","ma_kho","ten_vt"],["sl_xuat_qd"]);async.map($details$$,($d$$,$callback$$)=>{let $ma_kho$$=$d$$.ma_kho||$data$$.ma_kho||$data$$.ma_kho_x,$query$$={ma_vt:$d$$.ma_vt,ma_kho:$ma_kho$$,ngay:new Date,id_app:$appInfo$$._id};$d$$.kg_kiem_tra_ton_kho_tt||($d$$.ma_lo&&
13
+ ($query$$.ma_lo=$d$$.ma_lo),$d$$.han_sd&&($query$$.han_sd=$d$$.han_sd),$d$$.ma_tt1&&($query$$.ma_tt1=$d$$.ma_tt1),$d$$.ma_tt2&&($query$$.ma_tt2=$d$$.ma_tt2),$d$$.ma_tt3&&($query$$.ma_tt3=$d$$.ma_tt3));ckvt($query$$,function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$?($e$$=$rs$$.csum("ton"),$rs$$=$data_sokho$$.filter($s$$=>$s$$.ma_vt===$d$$.ma_vt&&$s$$.ma_kho===$ma_kho$$).reduce(($a$$,$b$$)=>($a$$.sl_xuat_qd||0)+($b$$.sl_xuat_qd||0),0),$d$$.sl_xuat_qd>utils.round($e$$+$rs$$,2)?$callback$$(`S\u1ea3n ph\u1ea9m ${$d$$.ma_vt} - ${$d$$.ten_vt} c\u00f3 s\u1ed1 l\u01b0\u1ee3ng xu\u1ea5t quy \u0111\u1ed5i (${$d$$.sl_xuat_qd}) l\u1edbn h\u01a1n s\u1ed1 l\u01b0\u1ee3ng t\u1ed3n quy \u0111\u1ed5i (${$e$$+
14
+ $rs$$})`):$callback$$()):$callback$$()})},$e$$=>{$callback$$($e$$)})})():$callback$$()}},$e$$=>{$fn$$($e$$)})}async cacheData($obj$$,$callback$$){$obj$$&&$obj$$.toObject&&($obj$$=utils.convertObjectIdsToStrings($obj$$.toObject()));await redisCache.set(this.model_name,$obj$$,$callback$$)}async deleteData($obj$$,$callback$$){$obj$$&&$obj$$.toObject&&($obj$$=utils.convertObjectIdsToStrings($obj$$.toObject()));await redisCache.remove(this.model_name,$obj$$,$callback$$)}createRoute($routeName$$,$handler_routeAction$$,
15
+ $_options$$={method:"GET",not_use_worker:!1,action_code:"view"}){const $self$$=this;$_options$$.method=$_options$$.method?$_options$$.method.toUpperCase():"GET";const $route_action_key$$=`route_action_${$self$$.name}_${$routeName$$}_${$_options$$.method}`;$self$$[$route_action_key$$]=$handler_routeAction$$;$handler_routeAction$$=async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),
16
+ $ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"createRouteHandler",routeName:$routeName$$,_options:$_options$$,route_action_key:$route_action_key$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};global.inputMainPool&&!$_options$$.not_use_worker?global.inputMainPool.exec({req:$_req$$,module:$self$$.name.toUpperCase(),configs:JSON.stringify(configs)},
17
+ $response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error});$res$$.send($response$$.result)}):handlers.createRouteHandler($self$$,$_req$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}};let $url$$=`${this.route_name}/${$routeName$$}`,$router$$=
18
+ this.router;$_options$$.method=="DELETE"?$router$$.route($url$$).delete($handler_routeAction$$):$_options$$.method=="POST"?$router$$.route($url$$).post($handler_routeAction$$):$_options$$.method=="PUT"?$router$$.route($url$$).put($handler_routeAction$$):$router$$.route($url$$).get($handler_routeAction$$)}async requestApprove($app_info_listinfo_code$$,$user_request$$,$obj_request$$,$next$$,$str_func$jscomp$2_str_func$$,$preRequest$$){let $ctrl$$=this;if(!$app_info_listinfo_code$$)return $next$$(null,
19
+ $obj_request$$);let $obj$$;$obj$$=$obj_request$$.toObject?utils.convertObjectIdsToStrings($obj_request$$.toObject()):_.cloneDeep($obj_request$$);$obj$$.ma_ct=$obj$$.ma_ct||$ctrl$$.name;let $approveDatas$$=[];$app_info_listinfo_code$$=$obj$$.listinfo_code||$ctrl$$.name;$str_func$jscomp$2_str_func$$||($str_func$jscomp$2_str_func$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$app_info_listinfo_code$$},{option:1}).lean()||{}).option);$str_func$jscomp$2_str_func$$&&$str_func$jscomp$2_str_func$$.custom_approve_user&&
20
+ $str_func$jscomp$2_str_func$$.custom_approve_user.forEach($trang_thai_approve$$=>{let $update_after_approve$$,$update_after_deny$$;if($trang_thai_approve$$.update_after_approve)try{let $str_func$$=$trang_thai_approve$$.update_after_approve;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);$update_after_approve$$=evalute($str_func$$)}catch($e$$){Logger.error("[controller][requestApprove] request approve",$e$$,$trang_thai_approve$$.update_after_approve),$update_after_approve$$=
21
+ {}}else $update_after_approve$$={};$trang_thai_approve$$.update_after_approve={module:$ctrl$$.name,cho_phep_cap_nhat_khi_da_duyet:$trang_thai_approve$$.cho_phep_cap_nhat_khi_da_duyet,data:{trang_thai:$trang_thai_approve$$.trang_thai2,...($update_after_approve$$.data||{})}};if($trang_thai_approve$$.update_after_deny)try{let $str_func$$=$trang_thai_approve$$.update_after_deny;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);$update_after_deny$$=evalute($str_func$$)}catch($e$$){Logger.error("request approve",
22
+ $e$$)}if($update_after_deny$$||$trang_thai_approve$$.trang_thai3)$trang_thai_approve$$.update_after_deny={module:$ctrl$$.name,data:{trang_thai:$trang_thai_approve$$.trang_thai3,...(($update_after_deny$$||{}).data||{})}};$approveDatas$$.push($trang_thai_approve$$)});$approveDatas$$=$approveDatas$$.filter($approveData_condition$$=>{$approveData_condition$$=$approveData_condition$$.condition;if(!$approveData_condition$$)return!0;$approveData_condition$$.indexOf("return ")<0&&($approveData_condition$$=
23
+ `return ${$approveData_condition$$}`);try{return evalute($approveData_condition$$,{master:$obj$$,data:$obj$$})}catch($e$$){return Logger.error("check condition approve",$e$$,$approveData_condition$$),!1}});try{for(let $approveData$$ of $approveDatas$$.filter($a$$=>$a$$.approve_users||$a$$.approve_users_custom||$a$$.approve_phu_trach_bp)){let $title$$=$approveData$$.title||"Y\u00eau c\u1ea7u duy\u1ec7t";if($title$$.indexOf("return ")>=0){$str_func$jscomp$2_str_func$$=$title$$;try{$title$$=evalute($str_func$jscomp$2_str_func$$,
24
+ {master:$obj$$,data:$obj$$})}catch($e$$){Logger.error("request approve",$e$$,$str_func$jscomp$2_str_func$$)}}let $ds_nguoi_duyet$$=$approveData$$.approve_users,$update_after_approve$$=$approveData$$.update_after_approve,$update_after_deny$$=$approveData$$.update_after_deny;if(_.isString($ds_nguoi_duyet$$))try{if($str_func$jscomp$2_str_func$$=$ds_nguoi_duyet$$,$str_func$jscomp$2_str_func$$.indexOf("return ")<0&&($str_func$jscomp$2_str_func$$=`return ${$str_func$jscomp$2_str_func$$}`),$ds_nguoi_duyet$$=
25
+ evalute($str_func$jscomp$2_str_func$$,{master:$obj$$,data:$obj$$,preRequest:$preRequest$$}),!_.isArray($ds_nguoi_duyet$$)){Logger.error("danh s\u00e1ch ng\u01b0\u1eddi duy\u1ec7t ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng, hi\u1ec7n t\u1ea1i \u0111ang l\u00e0",$ds_nguoi_duyet$$);return}}catch($e$$){Logger.error("request approve",$e$$,$ds_nguoi_duyet$$);return}if($approveData$$.approve_phu_trach_bp&&$obj$$.ma_nv){let $nv$$=await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,ma_nv:$obj$$.ma_nv},{ma_bp:1}).lean();
26
+ if($nv$$?.ma_bp){let $bp$$=await global.getModel("dmbp").findOne({id_app:$obj$$.id_app,ma_bp:$nv$$?.ma_bp},{phu_trach:1}).lean();$bp$$?.phu_trach&&$ds_nguoi_duyet$$.push($bp$$?.phu_trach)}}if($approveData$$.approve_users_custom)try{let $str_func$$=$approveData$$.approve_users_custom;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);let $ds_nguoi_duyet_custom$$=await evalute(`return (async ()=>{
27
+ try{
28
+ ${$str_func$$}
29
+ }catch(e){
30
+ return {error:e}
31
+ }
32
+ })`,{master:$obj$$,data:$obj$$,preRequest:$preRequest$$,utils})();$ds_nguoi_duyet_custom$$&&(_.isArray($ds_nguoi_duyet_custom$$)?$ds_nguoi_duyet$$=[...$ds_nguoi_duyet$$,...$ds_nguoi_duyet_custom$$]:Logger.error("[controller][requestapprove] danh s\u00e1ch ng\u01b0\u1eddi duy\u1ec7t ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng, hi\u1ec7n t\u1ea1i \u0111ang l\u00e0",$ds_nguoi_duyet_custom$$))}catch($e$$){Logger.error("[controller][requestapprove] ",$e$$,$approveData$$.approve_users_custom)}Logger.info("[controller][requestapprove] Danh sach ng\u01b0\u1eddi duy\u1ec7t \u0111\u1ea7y \u0111\u1ee7",
33
+ $ds_nguoi_duyet$$);if($ds_nguoi_duyet$$&&$ds_nguoi_duyet$$.length!==0&&($ds_nguoi_duyet$$=[...(new Set($ds_nguoi_duyet$$))],$obj$$.trang_thai==$approveData$$.trang_thai)){let $user_approves$$=$ds_nguoi_duyet$$.map($nguoi_duyet$$=>({email:$nguoi_duyet$$,name:$nguoi_duyet$$}));await $user_approves$$.asyncJoinModel2($obj$$.id_app,Participant,{where:"email",fields:"name"});await [$user_request$$].asyncJoinModel2($obj$$.id_app,Participant,{where:"email",fields:"name"});await new Promise(($resolve$$,$reject$$)=>
34
+ {Approve.request($user_request$$,$user_approves$$,$title$$,$obj$$,$e$$=>{if($e$$)return $reject$$($e$$);$resolve$$()},$update_after_approve$$,$approveData$$.template_content,$update_after_deny$$)})}}$next$$(null,$obj$$)}catch($e$$){$next$$($e$$)}}async import($user$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null,listinfo_code:null}){importHandler($user$$,this,$id_app$$,$data$$,$callback_main$$,$options$$)}pushNotification($_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=
35
+ !1,$options$$={title:"",data:{}}){return pushNotification(this,$_obj$$,$eventName$$,$old_obj$$,$justFireEvents$$,$options$$)}}controller.prototype.__proto__=EventEmitter.prototype;controller.prototype.asyncGetNextSequence=async($id_app$$,$ma_ct$$,$field$$="so_ct",$options$$)=>new Promise($resolve$$=>{getNextSequence($id_app$$,$ma_ct$$,$field$$,($error$$,$rs$$)=>{if($error$$)return Error($error$$);$resolve$$($rs$$)},$options$$)});
36
+ controller.prototype.getFieldNoRight=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/field-not-right/:fieldName`).get(async($req$$,$res$$)=>{let $fieldName$$=$req$$.params.fieldName;try{(await permission.getFieldNotRight($req$$.user.current_id_app,$req$$.user.email,$ctrl$$.name)).indexOf($fieldName$$)>=0?$res$$.send({allow:!1}):$res$$.send({allow:!0})}catch($e$$){$res$$.state(400).send($e$$.message)}})};
37
+ controller.prototype.find=function($_route_name_route_name$$,$shareRoute$$=!1,$method$$="GET"){let $ctrl$$=this;const $handlerResult$$=($res$$,$data$$)=>{const {result:$result$$,dataType:$dataType$$}=$data$$;$dataType$$=="xlsx"?($res$$.setHeader("Content-Type","application/vnd.openxmlformats"),$res$$.setHeader("Content-Disposition","attachment; filename="+$ctrl$$.name+".xlsx"),$res$$.end($result$$,"binary")):$res$$.send($result$$)},$findRoute$$=async($ip$jscomp$1_req$$,$res$$)=>{const {query:$query$$,
38
+ body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,protocol:$protocol$$}=$ip$jscomp$1_req$$;var $_req$$=configs?.api_url||$ip$jscomp$1_req$$.get("hostName");const $user_agent$$=$ip$jscomp$1_req$$.header("user-agent");$ip$jscomp$1_req$$=$ip$jscomp$1_req$$.ip||$ip$jscomp$1_req$$.headers["x-forwarded-for"]||$ip$jscomp$1_req$$.connection.remoteAddress;try{if($_req$$={handler:"findHandler",protocol:$protocol$$,host:$_req$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
39
+ user_agent:$user_agent$$,ip:$ip$jscomp$1_req$$,shareRoute:$shareRoute$$},global.inputMainPool){const $id_task$$=`task-find-${crypto.randomBytes(20).toString("hex")}`;global.inputMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||
40
+ $response$$.error,code:$response$$.code});$handlerResult$$($res$$,$response$$.result)})}else handlers.findHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);$handlerResult$$($res$$,$returnvalue$$)})}catch($e$$){$res$$.status(400).send($e$$)}};$_route_name_route_name$$=$_route_name_route_name$$||this.route_name;$method$$==="GET"?(this.router.route($_route_name_route_name$$).get($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").get($findRoute$$)):
41
+ (this.router.route($_route_name_route_name$$).post($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").post($findRoute$$))};
42
+ controller.prototype.get=function($route_name$$,$shareRoute$$=!1){const $ctrl$$=this;this.router.route(`${$route_name$$||this.route_name}/:id`).get(async function($req$$,$res$$){let $id$$=$req$$.params.id;if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(404).send({error:ERRORS.ERR_ID_INVALID,code:ERRORS.ERR_ID_INVALID_CODE});let $body$$={_id:$id$$};const $user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,
43
+ {query:$query$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$;if($ctrl$$.getting)try{await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.getting($user$$,$id$$,$e$$=>{if($e$$)return $reject$$($e$$);$resolve$$()})})}catch($e$$){return $res$$.status(400).send($e$$)}try{handlers.findHandler($ctrl$$,{query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,shareRoute:$shareRoute$$,originalUrl:$req$$.originalUrl},($e$jscomp$19_result$$,$returnvalue$$)=>
44
+ {if($e$jscomp$19_result$$)return $res$$.status(400).send($e$jscomp$19_result$$);({result:$e$jscomp$19_result$$}=$returnvalue$$);if($e$jscomp$19_result$$.length==0)return $res$$.status(404).send({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});$res$$.send($e$jscomp$19_result$$[0])})}catch($e$$){Logger.error($e$$),$res$$.status(400).send($e$$)}})};
45
+ controller.prototype.postAgainHandler=async function($user$$,$condition$$,$callback$$,$options$$={req:null}){let $model$$=this.model,$ctrl$$=this;if(!$ctrl$$.post)return $callback$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 th\u1ef1c hi\u1ec7n xong"});const $update_tk_vt$$=$condition$$.update_tk_vt;delete $condition$$.update_tk_vt;const $user_update$$={date_updated:new Date,user_updated:$user$$.email},$objsrepost$$=await $model$$.find($condition$$).sort({ngay_ct:1}).lean();Logger.info("[postagain] start repost",
46
+ $condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);async.mapSeries($objsrepost$$,function($obj$$,$callback$$){setImmediate(async()=>{await runWithoutSession(async()=>{await executeInTransaction(async()=>{Logger.info("postAgain: handle data before post",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($ctrl$$.reposting)try{await $ctrl$$.reposting($user$$,$obj$$)}catch($e$$){return $callback$$({error:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u tr\u01b0\u1edbc khi repost ch\u1ee9ng t\u1eeb:"+
47
+ $obj$$.so_ct+", L\u1ed7i: "+($e$$.message||$e$$.error||"")})}$update_tk_vt$$&&$obj$$.details&&(Logger.info("postAgain: update tk_vt..."),await $obj$$.details.filter($d$$=>$d$$.ma_vt).asyncJoinModel2($obj$$.id_app,global.getModel("dmvt"),{where:"ma_vt",fields:"tk_vt"}),$user_update$$.details=$obj$$.details);try{Logger.info("postAgain: update voucher..."),await $model$$.updateOne({_id:$obj$$._id},{...$user_update$$})}catch($e$$){return Logger.error("postAgain: error update data before repost",$e$$),
48
+ $callback$$({error:"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u ch\u1ee9ng t\u1eeb "+$obj$$.so_ct+",Error:"+$e$$.message||$e$$.error||""})}try{let $rs$$=await asyncPostData($obj$$,$ctrl$$,{req:$options$$.req,kiem_tra_han_muc_cong_no:!1});$callback$$(null,$rs$$)}catch($e$$){$callback$$({error:$e$$.message||$e$$.error||"Kh\u00f4ng th\u1ec3 post s\u1ed5 s\u00e1ch ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct})}})})})},function($e$$){if($e$$)return Logger.error("[postAgain]: Error",
49
+ $e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});Logger.info("postAgain: finished",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);$callback$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n xong"})})};
50
+ controller.prototype.updateBook=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/action/postagain`).get(async($req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"updateBookHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
51
+ user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-update-book-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",status_task:$status_task$$});
52
+ global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$25_response$$=>{if($e$jscomp$25_response$$=$e$jscomp$25_response$$.error)return global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch",$e$jscomp$25_response$$.message||$e$jscomp$25_response$$.error||$e$jscomp$25_response$$,null,{id_app:$req$$.user.current_id_app},
53
+ !0,$req$$.access_token,!0);global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong",null,{id_app:$req$$.user.current_id_app},!0,$req$$.access_token,!0)})}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),
54
+ handlers.updateBookHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch",$e$$.message||$e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,$req$$.access_token,!0);global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong",
55
+ null,{id_app:$req$$.user.current_id_app},!0,$req$$.access_token,!0)})}catch($e$$){$res$$.status(400).send($e$$)}})};
56
+ controller.prototype.updateKey=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/updatekey/:_id/:field/:new_value`).get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.updateKeyHandler($ctrl$$,{type_job:"updateKey",query:$query$$,body:$body$$,user:$user$$,params:$params$$,
57
+ headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
58
+ controller.prototype.updateField=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/update/:field`).get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.updateFieldHandler($ctrl$$,{type_job:"updateField",query:$query$$,body:$body$$,user:$user$$,params:$params$$,
59
+ headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
60
+ controller.prototype.exportToExcel=function(){let $ctrl$$=this;const $handlerResult$$=($res$$,$data$jscomp$3_data$jscomp$4_returnvalue$$)=>{switch($data$jscomp$3_data$jscomp$4_returnvalue$$.ext){case "xlsx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$ctrl$$.name+'".xlsx');$data$jscomp$3_data$jscomp$4_returnvalue$$=$data$jscomp$3_data$jscomp$4_returnvalue$$.data;$data$jscomp$3_data$jscomp$4_returnvalue$$?.type==
61
+ "Buffer"&&$data$jscomp$3_data$jscomp$4_returnvalue$$?.data&&($data$jscomp$3_data$jscomp$4_returnvalue$$=Buffer.from($data$jscomp$3_data$jscomp$4_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$3_data$jscomp$4_returnvalue$$.length);$res$$.end($data$jscomp$3_data$jscomp$4_returnvalue$$);break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$ctrl$$.name+
62
+ '".docx');$data$jscomp$3_data$jscomp$4_returnvalue$$=$data$jscomp$3_data$jscomp$4_returnvalue$$.data;$data$jscomp$3_data$jscomp$4_returnvalue$$?.type=="Buffer"&&$data$jscomp$3_data$jscomp$4_returnvalue$$?.data&&($data$jscomp$3_data$jscomp$4_returnvalue$$=Buffer.from($data$jscomp$3_data$jscomp$4_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$3_data$jscomp$4_returnvalue$$.length);$res$$.end($data$jscomp$3_data$jscomp$4_returnvalue$$);break;case "print":$res$$.send($data$jscomp$3_data$jscomp$4_returnvalue$$.data.join('<p style="page-break-before: always"></p>'));
63
+ break;case "json":$res$$.json($data$jscomp$3_data$jscomp$4_returnvalue$$.data);break;default:$res$$.send($data$jscomp$3_data$jscomp$4_returnvalue$$.data)}},$handleRoute$$=async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"exportHandler",query:$query$$,body:$body$$,user:$user$$,
64
+ params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,originalUrl:$req$$.originalUrl};global.inputMainPool?global.inputMainPool.exec({req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error});Logger.info("[controller][export] X\u1eed l\u00fd k\u1ebft qu\u1ea3...",
65
+ $response$$?.result?.ext);$handlerResult$$($res$$,$response$$.result)}):handlers.exportHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);$handlerResult$$($res$$,$returnvalue$$)})}catch($e$$){$res$$.status(400).send($e$$)}};this.router.route(`${this.route_name}/excel/:rpt_id`).get($handleRoute$$);this.router.route(`${this.route_name}/export/:rpt_id`).get($handleRoute$$)};
66
+ controller.prototype.importFromGoogleSheet=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/import/googlesheet`).get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"importFromGsHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
67
+ user_agent:$user_agent$$,ip:$ip$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-import-google-sheet-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$_req$$.status_task=$status_task$$;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",
68
+ status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$34_response$$=>{if($e$jscomp$34_response$$=$e$jscomp$34_response$$.error)return Logger.error("\u274c [importFromGoogleSheet] l\u1ed7i",$e$jscomp$34_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$34_response$$.message||$e$jscomp$34_response$$.error||
69
+ $e$jscomp$34_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromGoogleSheet] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
70
+ !0,null,!0)},1728E5)}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),handlers.importFromGsHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return Logger.error("\u274c [importFromGoogleSheet] l\u1ed7i",$e$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$.message||
71
+ $e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromGoogleSheet] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
72
+ !0,null,!0)})}catch($e$$){$res$$.status(400).send($e$$)}})};
73
+ controller.prototype.importFromJson=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/import/json`).post(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"importFromJsonHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
74
+ user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-import-json-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$_req$$.status_task=$status_task$$;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",
75
+ status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$37_response$$=>{if($e$jscomp$37_response$$=$e$jscomp$37_response$$.error)return Logger.error("\u274c [importFromJson] l\u1ed7i",$e$jscomp$37_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$37_response$$.message||$e$jscomp$37_response$$.error||
76
+ $e$jscomp$37_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromJson] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
77
+ !0,null,!0)},1728E5)}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),handlers.importFromJsonHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return Logger.error("\u274c [importFromJson] l\u1ed7i",$e$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$.message||
78
+ $e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromJson] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},!0,
79
+ null,!0)})}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$),$res$$.status(400).send($e$$)}})};
80
+ controller.prototype.importFromExcel=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/import/excel`).post(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"importFromExcelHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
81
+ user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-import-excel-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$_req$$.status_task=$status_task$$;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",
82
+ status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$40_response$$=>{if($e$jscomp$40_response$$=$e$jscomp$40_response$$.error)return Logger.error("\u274c [importFromExcel] l\u1ed7i",$e$jscomp$40_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$40_response$$.message||$e$jscomp$40_response$$.error||
83
+ $e$jscomp$40_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromExcel] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
84
+ !0,null,!0)},1728E5)}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),handlers.importFromExcelHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return Logger.error("\u274c [importFromExcel] l\u1ed7i",$e$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$.message||
85
+ $e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromExcel] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},!0,
86
+ null,!0)})}catch($e$$){$res$$.status(400).send($e$$)}})};
87
+ controller.prototype.create=function(){const $ctrl$$=this;this.router.route(this.route_name).post(async function($req$$,$res$$){let $body$$=$req$$.body;if(!$body$$)return $res$$.status(411).send({error:"Kh\u00f4ng c\u00f3 n\u1ed9i dung c\u1ea7n l\u01b0u"});!Array.isArray($body$$)&&$req$$.files&&_.keys($req$$.files).length>0&&($body$$.return!="JSON"&&($req$$.uploadFile=!0),_.extend($body$$,$req$$.files));const {query:$query$$,user:$user$$,params:$params$$,files:$files$$,uploadFile:$uploadFile$$,headers:$headers$$}=
88
+ $req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"createHandler",query:$query$$,data:$body$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,uploadFile:$uploadFile$$,originalUrl:$req$$.originalUrl};global.inputMainPool?global.inputMainPool.exec({req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$7_result$$=>
89
+ {if($response$jscomp$7_result$$.error)return $res$$.status(400).send({error:$response$jscomp$7_result$$.error.error||$response$jscomp$7_result$$.error.message||$response$jscomp$7_result$$.error,message:$response$jscomp$7_result$$.message||$response$jscomp$7_result$$.error.error||$response$jscomp$7_result$$.error.message||$response$jscomp$7_result$$.error,code:$response$jscomp$7_result$$.code});$response$jscomp$7_result$$=$response$jscomp$7_result$$.result;if(Array.isArray($response$jscomp$7_result$$))for(let $rs$$ of $response$jscomp$7_result$$)pushNotification($ctrl$$,
90
+ $rs$$.obj_created,"new",null,null,{exclude_token:($req$$.query||{}).access_token});else pushNotification($ctrl$$,$response$jscomp$7_result$$.obj_created,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$req$$.query.return_data===!1?$res$$.send({_id:Array.isArray($response$jscomp$7_result$$)?$response$jscomp$7_result$$.map($o$$=>$o$$.obj_created?._id):$response$jscomp$7_result$$.obj_created?._id}):$res$$.send(Array.isArray($response$jscomp$7_result$$)?$response$jscomp$7_result$$.map($o$$=>
91
+ $o$$.obj_created):$response$jscomp$7_result$$.obj_created)}):handlers.createHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);if(Array.isArray($returnvalue$$))for(let $rs$$ of $returnvalue$$)pushNotification($ctrl$$,$rs$$.obj_created,"new",null,null,{exclude_token:($req$$.query||{}).access_token});else pushNotification($ctrl$$,$returnvalue$$.obj_created,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$req$$.query.return_data===!1?$res$$.send({_id:Array.isArray($returnvalue$$)?
92
+ $returnvalue$$.map($o$$=>$o$$.obj_created?._id):$returnvalue$$.obj_created?._id}):$res$$.send(Array.isArray($returnvalue$$)?$returnvalue$$.map($o$$=>$o$$.obj_created):$returnvalue$$.obj_created)})}catch($e$$){$res$$.status(400).send($e$$)}})};
93
+ controller.prototype.quickCreate=function(){let $model$$=this.model,$name$$=this.name,$ctrl$$=this,$createFromTemplate$$=async($req$$,$res$$,$body$jscomp$11_query$$)=>{if(!$body$jscomp$11_query$$){$body$jscomp$11_query$$=$req$$.params.template_code;if(!$body$jscomp$11_query$$)return $res$$.status(400).send({error:"M\u1eabu d\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i"});$body$jscomp$11_query$$={id_app:$req$$.user.current_id_app,voucher_code:$name$$.toUpperCase(),code:$body$jscomp$11_query$$};$body$jscomp$11_query$$=
94
+ await templatevoucher.findOne($body$jscomp$11_query$$).lean();if(!$body$jscomp$11_query$$)return $res$$.status(400).send({error:"M\u1eabu d\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i"})}$body$jscomp$11_query$$=$body$jscomp$11_query$$.data||{};delete $body$jscomp$11_query$$.so_ct;delete $body$jscomp$11_query$$.ngay_ct;delete $body$jscomp$11_query$$.user_created;delete $body$jscomp$11_query$$.date_created;delete $body$jscomp$11_query$$.user_updated;delete $body$jscomp$11_query$$.date_updated;delete $body$jscomp$11_query$$._id;
95
+ delete $body$jscomp$11_query$$.pkey;delete $body$jscomp$11_query$$.__v;let $_data$$=$req$$.query;$req$$.body&&($_data$$=Object.assign($_data$$,$req$$.body));for(let $key$$ in $_data$$)$_data$$[$key$$]&&$key$$!=="access_token"&&$key$$!=="token"&&$key$$!=="_id"&&(_.has($model$$.schema.paths,$key$$)&&($body$jscomp$11_query$$[$key$$]=$_data$$[$key$$]),$body$jscomp$11_query$$.details&&$body$jscomp$11_query$$.details.forEach($d$$=>{$d$$[$key$$]=$_data$$[$key$$]}));const {query:$query$$,user:$user$$,params:$params$$,
96
+ files:$files$$,uploadFile:$uploadFile$$,headers:$headers$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.createHandler($ctrl$$,{query:$query$$,body:$body$jscomp$11_query$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,uploadFile:$uploadFile$$,originalUrl:$req$$.originalUrl},($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);({obj_created:$e$$}=
97
+ $returnvalue$$);pushNotification($ctrl$$,$e$$,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$req$$.query.return_data===!1?$res$$.send({_id:$e$$._id.toString()}):$res$$.send($e$$)})}catch($e$$){$res$$.status(400).send($e$$)}};this.router.route(`${this.route_name}/quickcreate/:template_code`).get(function($req$$,$res$$){$createFromTemplate$$($req$$,$res$$)});this.router.route(`${this.route_name}/quickcreate/:template_code`).post(function($req$$,$res$$){$createFromTemplate$$($req$$,
98
+ $res$$)})};
99
+ controller.prototype.update=function(){let $ctrl$$=this;this.router.route(this.route_name+"/:id").put(async function($req$$,$res$$){let $body$$=$req$$.body;$req$$.files&&_.extend($body$$,$req$$.files);let $data$$;try{$data$$=bodyToJson($body$$)}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$})}let {query:$query$$,user:$user$$,params:$params$$,files:$files$$,uploadFile:$uploadFile$$,headers:$headers$$}=$req$$;$params$$=_.cloneDeep($params$$);$query$$=_.cloneDeep($query$$);const $user_agent$$=
100
+ $req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,$id$$=$req$$.params.id;try{const $_req$$={handler:"updateHandler",query:$query$$,headers:$headers$$,_action:"update",id:$id$$,data:$data$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,uploadFile:$uploadFile$$,originalUrl:$req$$.originalUrl};global.inputMainPool?global.inputMainPool.exec({req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},
101
+ $response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error,code:$response$$.code});let {new_obj:$new_obj$$,old_obj:$old_obj$$}=$response$$.result;pushNotification($ctrl$$,$new_obj$$,"update",$old_obj$$,null,{exclude_token:$req$$.query.access_token});$req$$.query.return_data===!1?$res$$.send({_id:$new_obj$$._id.toString()}):
102
+ $res$$.send($new_obj$$)}):handlers.updateHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$});let {new_obj:$new_obj$$,old_obj:$old_obj$$}=$returnvalue$$;pushNotification($ctrl$$,$new_obj$$,"update",$old_obj$$,null,{exclude_token:$req$$.query.access_token});$req$$.query.return_data===!1?$res$$.send({_id:$new_obj$$._id.toString()}):$res$$.send($new_obj$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
103
+ controller.prototype.delete=function(){let $ctrl$$=this;this.router.route(this.route_name+"/:id").delete(async($req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.deleteHandler($ctrl$$,{query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,
104
+ files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$,code:$e$$.code});$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
105
+ controller.prototype.deleteMany=function($route_name$$){let $ctrl$$=this;this.router.route(`${$route_name$$||this.route_name}/action/delete`).post(async($req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"deleteManyHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
106
+ user_agent:$user_agent$$,ip:$ip$$,originalUrl:$req$$.originalUrl};global.inputMainPool?global.inputMainPool.exec({req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error,code:$response$$.code});$res$$.send($response$$.result)}):handlers.deleteManyHandler($ctrl$$,
107
+ $_req$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$});$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
108
+ controller.prototype.history=function(){let $ctrl$$=this;this.router.route(this.route_name+"/g/history/:id").get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.historyHandler($ctrl$$,{type_job:"history",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
109
+ user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$});$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
110
+ controller.prototype.logs=function(){let $ctrl$$=this;this.router.route(this.route_name+"/g/log/:action").get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.logHandler($ctrl$$,{type_job:"log",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,
111
+ ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$});$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};controller.prototype.postData=async function($obj$$,$cb$$,$options$$={}){Logger.info("[controller] postData",this.name);const $self$$=this;try{let $rs$$=await executeInTransaction(async()=>await asyncPostData($obj$$,$self$$,$options$$),{useParent:!0});$cb$$(null,$rs$$)}catch($e$$){$cb$$($e$$)}};
112
+ controller.prototype.asyncPostData=function($obj$$,$options$$={}){Logger.info("[controller] postData",this.name);return asyncPostData($obj$$,this,$options$$)};
113
+ controller.prototype.route=function($setRoute$$){configs.lite||(this.history(),this.logs(),this.find("/search"+this.route_name,!1,"POST"),this.find(),this.get(),this.find(`/${this.module}/shared`,!0),this.get(`/${this.module}/shared`,!0),this.getFieldNoRight(),this.create(),this.quickCreate(),this.update(),this.delete(),this.deleteMany(),this.getNextId(),this.exportToExcel(),this.importFromExcel(),this.importFromJson(),this.importFromGoogleSheet(),this.updateField(),this.updateKey(),this.updateBook(),
114
+ $setRoute$$&&$setRoute$$(this.router))};
115
+ controller.prototype.findData=async function($user$$,$condition$$,$options$$={limit:20,page:1,fields:void 0,sort:void 0,pagination:0,count:0,"listinfo-code":void 0},$req$$,$callback$$){const $ctrl$$=this;$req$$=$req$$||{};$req$$.query=$req$$.query||{};$options$$.fields&&typeof $options$$.fields=="object"&&!Array.isArray($options$$.fields)&&($options$$.fields=Object.keys($options$$.fields));$req$$.body={q:$condition$$,...$options$$};try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{let $id_app$$=
116
+ $req$$.query.id_app||$condition$$.id_app;if($ctrl$$.require_id_app&&!$id_app$$)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u \u0111i\u1ec1u ki\u1ec7n id_app");typeof $user$$==="string"&&($user$$={email:$user$$});$user$$.current_id_app||($user$$.current_id_app=$id_app$$);!$user$$.current_app_info&&$user$$.current_id_ap&&($user$$.current_app_info={_id:$user$$.current_id_ap,name:$user$$.current_id_ap});$req$$.user=$user$$;handlers.findHandler($ctrl$$,$req$$,($e$jscomp$59_result$$,
117
+ $returnvalue$$)=>{if($e$jscomp$59_result$$)return $reject$$($e$jscomp$59_result$$);({result:$e$jscomp$59_result$$}=$returnvalue$$);$resolve$$($e$jscomp$59_result$$)})});return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};controller.runWebhooks=runWebhooks;
118
+ controller.postData=async function($obj$$,$ctrl$$,$cb$$,$options$$={}){Logger.info("[controller] postData",this.name);try{let $rs$$=await executeInTransaction(async()=>await asyncPostData($obj$$,$ctrl$$,$options$$),{useParent:!0});$cb$$(null,$rs$$)}catch($e$$){$cb$$($e$$)}};controller.asyncPostData=async function($obj$$,$ctrl$$,$options$$={}){Logger.info("[controller] asyncPostData",this.name);return executeInTransaction(async()=>await asyncPostData($obj$$,$ctrl$$,$options$$),{useParent:!0})};
119
+ controller.pushNotification=pushNotification;
120
+ controller.create=async function($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add"){$req$$=$req$$||{};$req$$.query=$req$$.query||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{handlers.createHandler($ctrl$$,$req$$,($e$jscomp$62_obj_created$$,$returnvalue$$)=>{if($e$jscomp$62_obj_created$$)return $reject$$($e$jscomp$62_obj_created$$);({obj_created:$e$jscomp$62_obj_created$$}=
121
+ $returnvalue$$);pushNotification($ctrl$$,$e$jscomp$62_obj_created$$,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$resolve$$($e$jscomp$62_obj_created$$)})});return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};
122
+ controller.prototype.createData=async function($user$$,$data$$,$callback$$,$req$$,$action$$="add"){const $ctrl$$=this;$req$$=$req$$||{};$req$$.query=$req$$.query||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.action=$action$$;try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{let $id_app$$=$req$$.query.id_app||$data$$.id_app;if($ctrl$$.require_id_app&&!$id_app$$)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u id_app");typeof $user$$==="string"&&($user$$={email:$user$$});
123
+ $user$$.current_id_app||($user$$.current_id_app=$id_app$$);!$user$$.current_app_info&&$user$$.current_id_ap&&($user$$.current_app_info={_id:$user$$.current_id_ap,name:$user$$.current_id_ap});$req$$.user=$user$$;handlers.createHandler($ctrl$$,$req$$,($e$jscomp$64_obj_created$$,$returnvalue$$)=>{if($e$jscomp$64_obj_created$$)return $reject$$($e$jscomp$64_obj_created$$);({obj_created:$e$jscomp$64_obj_created$$}=$returnvalue$$);pushNotification($ctrl$$,$e$jscomp$64_obj_created$$,"new",null,null);$resolve$$($e$jscomp$64_obj_created$$)})});
124
+ return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};
125
+ controller.prototype.updateData=async function($user$$,$_id$$,$data$$,$callback$$,$req$$,$action$$="update"){const $ctrl$$=this;$req$$=$req$$||{};$req$$.query=$req$$.query||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.action=$action$$;$req$$._action=$action$$;$req$$.id=$_id$$;try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{let $id_app$$=$req$$.query.id_app||$data$$.id_app;if($ctrl$$.require_id_app&&!$id_app$$)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u id_app");
126
+ typeof $user$$==="string"&&($user$$={email:$user$$});$user$$.current_id_app||($user$$.current_id_app=$id_app$$);!$user$$.current_app_info&&$user$$.current_id_ap&&($user$$.current_app_info={_id:$user$$.current_id_ap,name:$user$$.current_id_ap});$req$$.user=$user$$;handlers.updateHandler($ctrl$$,$req$$,($e$$,$returnvalue$$)=>{if($e$$)return $reject$$($e$$);let {new_obj:$new_obj$$,old_obj:$old_obj$$}=$returnvalue$$;pushNotification($ctrl$$,$new_obj$$,$action$$,$old_obj$$,null);$resolve$$($new_obj$$)})});
127
+ return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};
128
+ controller.delete=async function($user$$,$ctrl$$,$id$$,$callback$$,$req$$){$req$$=$req$$||{};$req$$.user=$user$$;const $body$$=$req$$.body||{},$query$$=$req$$.query||{},$params$$=$req$$.params||{};$params$$.id=$id$$;const $headers$$=$req$$.headers||{},$files$$=$req$$.files||{};try{let $result$$=await new Promise(($resolve$$,$reject$$)=>{handlers.deleteHandler($ctrl$$,{query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:"",ip:"",files:$files$$,originalUrl:""},($e$$,
129
+ $rs$$)=>{if($e$$)return $reject$$({error:$e$$.error||$e$$.message||$e$$,code:$e$$.code});$resolve$$($rs$$)})});return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};module.exports=controller;
@@ -1,35 +1,35 @@
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,executeInTransaction}=require("../libs/sessionContext.js"),{evalute,convertObjectIdsToStrings}=require("../libs/utils"),{asyncBodyToJson,ERRORS,getNextSequence,isExists,createIdRef,fields_sync_master_detail,postData,runWebhooks,
2
- cleanDataByMongooseSchema}=require("./controllerUtils"),createHandler=async($ctrl$$,$req$$,$callback$$)=>{$req$$.headers=$req$$.headers||{};$req$$.body=$req$$.body||{};$req$$.query=$req$$.query||{};$req$$.data=$req$$.data||{};let {user:$user$$,data:$data$$,id_be_supply_by_user:$id_be_supply_by_user$$,action:$action$$}=$req$$;$action$$||="add";let $listinfo_code$$=$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"]||$req$$.query?.["listinfo-code"]||$data$$?.listinfo_code;if($listinfo_code$$&&
3
- $listinfo_code$$!=$ctrl$$.name){Logger.warn(`[createHandler] listinfo_code (${$listinfo_code$$}) # controller code (${$ctrl$$.name}). \u0110ang ki\u1ec3m tra t\u00ednh h\u1ee3p l\u1ec7 c\u1ee7a listinfo_code`);var $api_code_listinfo$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$api_code_listinfo$$?($api_code_listinfo$$=$api_code_listinfo$$.api_code||$api_code_listinfo$$.code,$api_code_listinfo$$!=$ctrl$$.name&&(Logger.warn(`[createHandler] api_code (${$api_code_listinfo$$}) v\u00e0 controller name (${$ctrl$$.name}) kh\u00f4ng kh\u1edbp nhau. S\u1eeda d\u1ee5ng controller name (${$ctrl$$.name}) cho listinfo_code`),
1
+ const 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,executeInTransaction}=require("../libs/sessionContext.js"),{evalute,convertObjectIdsToStrings}=require("../libs/utils"),{asyncBodyToJson,ERRORS,getNextSequence,isExists,createIdRef,fields_sync_master_detail,postData,runWebhooks,cleanDataByMongooseSchema}=
2
+ require("./controllerUtils"),File=global.getModel("file"),Support=global.getModel("support"),createHandlerCore=async($ctrl$$,$req$$)=>{$req$$.headers=$req$$.headers||{};$req$$.body=$req$$.body||{};$req$$.query=$req$$.query||{};$req$$.data=$req$$.data||{};let {user:$user$$,data:$data$$,id_be_supply_by_user:$id_be_supply_by_user$$,action:$action$$}=$req$$;$action$$||="add";let $listinfo_code$$=$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"]||$req$$.query?.["listinfo-code"]||$data$$?.listinfo_code;
3
+ if($listinfo_code$$&&$listinfo_code$$!=$ctrl$$.name){Logger.warn(`[createHandler] listinfo_code (${$listinfo_code$$}) # controller code (${$ctrl$$.name}). \u0110ang ki\u1ec3m tra t\u00ednh h\u1ee3p l\u1ec7 c\u1ee7a listinfo_code`);var $api_code_listinfo$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$api_code_listinfo$$?($api_code_listinfo$$=$api_code_listinfo$$.api_code||$api_code_listinfo$$.code,$api_code_listinfo$$!=$ctrl$$.name&&(Logger.warn(`[createHandler] api_code (${$api_code_listinfo$$}) v\u00e0 controller name (${$ctrl$$.name}) kh\u00f4ng kh\u1edbp nhau. S\u1eeda d\u1ee5ng controller name (${$ctrl$$.name}) cho listinfo_code`),
4
4
  $listinfo_code$$=$ctrl$$.name)):(Logger.warn(`[createHandler] listinfo_code (${$listinfo_code$$}) kh\u00f4ng t\u1ed3n t\u1ea1i. S\u1eeda d\u1ee5ng controller name (${$ctrl$$.name}) cho listinfo_code`),$listinfo_code$$=$ctrl$$.name)}$listinfo_code$$=$listinfo_code$$||$ctrl$$.name;$req$$.headers=$req$$.headers||{};$req$$.headers["Listinfo-Code"]=$listinfo_code$$;$data$$.listinfo_code=$listinfo_code$$;try{const $model$$=$ctrl$$.model;let $voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,
5
- 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$$,$user$$.current_id_app,$voucher_options$$)}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&
6
- ($v_data$$.ma_ct=$ctrl$$.name.toUpperCase());delete $v_data$$.session_created;delete $v_data$$.session_updated;$req$$&&$schema_paths$$.session_created&&($v_data$$.session_created=($req$$.cookies||{}).uid);if($ctrl$$.options.requireRecaptchaToken&&configs.GOOGLE_RECAPTCHA_SECRET_KEY){if(!$v_data$$["g-recaptcha-response"])return $callback$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u g-recaptcha-response");try{await permission.verifyReCaptcha($v_data$$["g-recaptcha-response"])}catch($e$$){return $callback$$($e$$.message||
7
- $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})}$schema_paths$$.id_app&&($v_data$$.id_app=$user$$.current_id_app);if($ctrl$$.dynamicCreating)try{$v_data$$=
8
- 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$$)}$v_data$$=cleanDataByMongooseSchema($v_data$$,$model$$.schema);const $obj$$=new $model$$;$schema_paths$$.exfields&&($obj$$.exfields=$v_data$$.exfields||{});for(let $f$$ in $v_data$$)$schema_paths$$[$f$$]&&
9
- ($obj$$.set($f$$,$v_data$$[$f$$]),$f$$!=="exfields"||$obj$$.exfields||($obj$$.exfields={}));$schema_paths$$.id_app&&($obj$$.id_app=$user$$.current_id_app);const $checkVoucherNumber$$=$callback$$=>{if($model$$.schema.paths.ngay_ct&&$obj$$.ngay_ct)if($voucher_options$$&&($voucher_options$$?.trang_thai_create_voucher_numbers?.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$voucher_options$$.check_so_ct&&$voucher_options$$.check_so_ct!=="0"){let $query_check$$=
10
- {id_app:$obj$$.id_app,so_ct:$obj$$.so_ct,listinfo_code:$listinfo_code$$},$tu_ngay$$,$den_ngay$$;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("day").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("day").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "2":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("month").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("month").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};
11
- break;case "3":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("quarter").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "8":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("year").toDate(),$den_ngay$$=moment($obj$$.ngay_ct).endOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().then($rs$$=>{if($rs$$){let $msgError$$="S\u1ed1 ch\u1ee9ng t\u1eeb "+
12
- $obj$$.so_ct+" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c";if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else $callback$$()}).catch($e$$=>{Logger.error($e$$)})}else $callback$$();else $callback$$()},$File$$=global.getModel("file"),$Support$$=global.getModel("support");async.waterfall([function($callback$$){setImmediate(async function(){let $notNeedRight$$=
13
- await $ctrl$$.notNeedRight($user$$,{action:$action$$,obj:$obj$$});permission.hasRight($obj$$.id_app,$user$$.email,$ctrl$$.module,$action$$,function($error$$,$hr$$,$c_app$$){if($error$$||!$hr$$)return $error$$=$error$$||"",$callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE});$ctrl$$.checkData($c_app$$,$obj$$,$e$$=>{if($e$$)return $callback$$($e$$);$ctrl$$.creating?$ctrl$$.creating($user$$,$obj$$,function($error$$,$_obj$$){if($error$$)return $callback$$($error$$);
14
- for(let $f$$ of Object.keys($schema_paths$$))$error$$=$_obj$$.get?$_obj$$.get($f$$):$_obj$$[$f$$],$obj$$.set($f$$,$error$$);$callback$$(null,$obj$$)},{data:$data$$,action:$action$$}):$callback$$(null,$obj$$)})},{data:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$,user:$user$$})})},($obj$$,$callback$$)=>{let $ma_ct$$=$listinfo_code$$||$ctrl$$.name;const $condition_qct$$={status:!0,id_app:$obj$$.id_app,cac_ma_ct:$ma_ct$$.toLowerCase()};let $_options_qct$$;$_options_qct$$=$obj$$.toObject?
15
- convertObjectIdsToStrings($obj$$.toObject()):{...$obj$$};let $keys_options$$=Object.keys($_options_qct$$);global.getModel("dmqct").find($condition_qct$$).lean().then($qcts_rs$$=>{$qcts_rs$$=($qcts_rs$$||[]).filter($qct$$=>$qct$$.field!=="so_ct"&&!$obj$$[$qct$$.field]&&$model$$.schema.paths[$qct$$.field]);$qcts_rs$$=$qcts_rs$$.filter($qct$$=>{if($qct$$.dieu_kien&&$keys_options$$.length>0)try{let $str_func$$=$qct$$.dieu_kien;$str_func$$.indexOf("return ")!==0&&($str_func$$=`return ${$str_func$$}`);
16
- return $str_func$$.indexOf("async ")>0?!1:evalute($str_func$$,{...$_options_qct$$,master:{...$_options_qct$$},moment,numeral})}catch($e$$){return Logger.error("Error find quyen chung tu",$e$$.message,$qct$$.dieu_kien),!1}else return!0});async.mapSeries($qcts_rs$$,($qct$$,$cb$$)=>{let $field$$=$qct$$.field,$_options$$={...$_options_qct$$};$_options$$.id_qct=$qct$$._id.toString();let $count$$=0;async.whilst(function($cb$$){$cb$$(null,$count$$<10)},function($callback$$){getNextSequence($obj$$.id_app,
17
- $ma_ct$$,$field$$,function($e$$,$rs$$){setImmediate(async()=>{if($e$$)return $callback$$($e$$);$obj$$[$field$$]=$rs$$[$field$$];$qct$$.check_duplicate?await $model$$.findOne({id_app:$obj$$.id_app,[$field$$]:$obj$$[$field$$]},{[$field$$]:1}).lean()?$count$$>=9?$callback$$(`Kh\u00f4ng th\u1ec3 t\u1ef1 \u0111\u1ed9ng t\u1ea1o gi\u00e1 tr\u1ecb cho field ${$field$$}. Gi\u00e1 tr\u1ecb "${$obj$$[$field$$]}" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ki\u1ec3m tra l\u1ea1i th\u00f4ng s\u1ed1 quy\u1ec3n ch\u1ee9ng t\u1eeb sao cho gi\u00e1 tr\u1ecb s\u1ebd t\u1ea1o ra kh\u00f4ng b\u1ecb tr\u00f9ng v\u1edbi gi\u00e1 tr\u1ecb \u0111\u00e3 c\u00f3`):
18
- ($count$$++,$callback$$()):($count$$=99999,$callback$$()):($count$$=99999,$callback$$())})},$_options$$)},function($err$$){$cb$$($err$$)})},$e$$=>{$callback$$($e$$)})}).catch($e$$=>{Logger.error($e$$)})},$callback$$=>{if((!$voucher_options$$?.trang_thai_create_voucher_numbers||$voucher_options$$?.trang_thai_create_voucher_numbers.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$model$$.schema.paths.so_ct)if($obj$$.so_ct&&$obj$$.so_ct.toUpperCase()!==
19
- ($listinfo_code$$||$ctrl$$.name).toUpperCase()&&$obj$$.so_ct.toUpperCase()!==$ctrl$$.name.toUpperCase())$checkVoucherNumber$$($error$$=>{$callback$$($error$$)});else{let $count$$=0;async.whilst(function($cb$$){$cb$$(null,$count$$<100)},function($callback$$){getNextSequence($obj$$.id_app,$listinfo_code$$||$ctrl$$.name,"so_ct",function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$obj$$.so_ct=$rs$$.so_ct;$checkVoucherNumber$$($error$$=>{$error$$?$count$$>=99?$callback$$($error$$):($count$$++,$callback$$()):
20
- ($count$$=99999,$callback$$())})},$obj$$)},function($err$$){$callback$$($err$$)})}else $callback$$()},function($callback$$){setImmediate(async()=>{if($model$$.schema.paths.ma_dvcs&&$ctrl$$.name!=="dvcs")try{if($obj$$.ma_dvcs)if(global.mongoose.Types.ObjectId.isValid($obj$$.ma_dvcs)){let $_id_dvcs$$=global.mongoose.Types.ObjectId($obj$$.ma_dvcs);await global.getModel("dvcs").findOne({_id:$_id_dvcs$$}).lean()?$callback$$():global.getModel("dvcs").create({_id:$_id_dvcs$$,id_app:$obj$$.id_app,ma_dvcs:"IMPORTED",
21
- ten_dvcs:"Imported"},$e$$=>{$e$$&&Logger.error("Can't import dvcs",$e$$);$callback$$()})}else $callback$$();else{let $dvcs$$=await global.getModel("dvcs").findOne({id_app:$obj$$.id_app,status:!0}).inTxn().lean();$dvcs$$||($dvcs$$=await global.getModel("dvcs").create({id_app:$obj$$.id_app,ma_dvcs:"CTY",ten_dvcs:"C\u00f4ng ty"}),console.log("[createHandler] t\u1ef1 t\u1ea1o dvcs m\u1edbi",$dvcs$$));$obj$$.ma_dvcs=$dvcs$$._id.toString();$callback$$()}}catch($e$$){Logger.error("[createHandler] t\u1ea1o \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf",
22
- $e$$),$callback$$("Kh\u00f4ng th\u1ec3 t\u1ea1o \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf m\u1eb7c \u0111\u1ecbnh")}else $callback$$()})},$callback$$=>{$ctrl$$.validating||($ctrl$$.validating=($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)});$ctrl$$.validating($user$$,$obj$$,$e$$=>{if($e$$)return $callback$$($e$$);$obj$$.user_created=$action$$=="import"?$obj$$.user_created||$user$$.email:$user$$.email;$obj$$.user_updated=$user$$.email;$obj$$.date_created=new Date;$obj$$.date_updated=new Date;validate($obj$$,
23
- async $error$$=>{setImmediate(async()=>{if($error$$){let $msgError$$=$error$$;if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else{if($id_be_supply_by_user$$&&global.mongoose.Types.ObjectId.isValid($id_be_supply_by_user$$)){let $_id$$=global.mongoose.Types.ObjectId($id_be_supply_by_user$$);await $model$$.findOne({_id:$_id$$},{_id:1})||($obj$$._id=$_id$$)}$callback$$()}})},
24
- $voucher_options$$)},{action:$action$$})},function($callback$$){isExists($model$$,$ctrl$$.unique,$obj$$,$ctrl$$.replaceIfExists,async($error$$,$kq$$)=>{setImmediate(async()=>{if($error$$||$kq$$){let $msgError$$=$error$$||ERRORS.ERR_ALREADY_EXIST;if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$({error:$msgError$$,code:ERRORS.ERR_ALREADY_EXIST_CODE})});else $callback$$({error:$msgError$$,code:ERRORS.ERR_ALREADY_EXIST_CODE})}else{for(let $k$$ in $ctrl$$.keyValues)$obj$$[$k$$]=
25
- $ctrl$$.keyValues[$k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&_.isArray($obj$$[$model_path$$])).forEach($model_path$$=>{$model$$.schema.paths[$model_path$$].schema&&$model$$.schema.paths[$model_path$$].schema.paths&&Object.keys($model$$.schema.paths[$model_path$$].schema.paths).filter($path$$=>$path$$!=="line"&&$path$$!=="_id"&&$path$$!=="__v"&&fields_sync_master_detail.indexOf($path$$)>=0).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>
26
- !$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,$obj$$);if($ctrl$$.saving)try{await $ctrl$$.saving($user$$,$obj$$,$action$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$ctrl$$.emit("saving",$obj$$);$obj$$.save(function($error$$,$obj_created$$){setImmediate(async()=>{if($error$$){if($ctrl$$.options.onErrorSave)$ctrl$$.options.onErrorSave($user$$,$obj$$,$error$$,$action$$);let $msgErrors$$=[];for(let $k$$ in $error$$.errors)$msgErrors$$.push($error$$.errors[$k$$].message);
27
- $msgErrors$$.length==0&&($msgErrors$$=$error$$.message);$msgErrors$$||=JSON.stringify($error$$);if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&Logger.error("onErrorCreating",$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$)}else $ctrl$$.populate&&($obj_created$$=$model$$.findById($obj_created$$._id).inTxn(),$obj_created$$=await $ctrl$$.populate($obj_created$$)),postData($obj_created$$,$ctrl$$,function($msgErrors$$){if($msgErrors$$)if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,
28
- $obj$$,$e$$=>{$e$$&&($msgErrors$$=$msgErrors$$+"\n"+$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$);else{const $obj_created_cv$$=convertObjectIdsToStrings($obj_created$$.toObject());onAfterCommit(async()=>{$ctrl$$.emit("saved",$obj_created$$);$ctrl$$.emit("created",$obj_created$$);$model$$.modelName!="customer"&&global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj_created$$);$req$$&&setImmediate(()=>{global.getModel("log").create({id_app:$user$$.current_id_app,
29
- id_func:$ctrl$$.name,action:$action$$.toUpperCase(),data:{id:$obj_created_cv$$._id.toString(),data:$obj_created_cv$$}},$user$$.email,$req$$.user_agent,$req$$)});runWebhooks($ctrl$$,$obj_created_cv$$,$action$$.toUpperCase(),$voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$action$$)});$callback$$(null,$obj_created_cv$$)}},{req:$req$$})})})}})})},function($obj$$,$callback$$){setImmediate(async()=>{let $co_gia_tri_tam$$=!1;if($obj$$.exfields&&$obj$$.exfields.__files__){for(let $_file$$ of $obj$$.exfields.__files__)await $File$$.updateOne({_id:$_file$$._id},
30
- {id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name});delete $obj$$.exfields.__files__;$co_gia_tri_tam$$=!0}if($obj$$.exfields&&$obj$$.exfields.__supports__){for(let $_support$$ of $obj$$.exfields.__supports__)await $Support$$.updateOne({_id:$_support$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name});delete $obj$$.exfields.__supports__;$co_gia_tri_tam$$=!0}$co_gia_tri_tam$$&&await $model$$.updateOne({_id:$obj$$._id},{exfields:$obj$$.exfields});$ctrl$$.created?
31
- $ctrl$$.created($user$$,$obj$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$rs$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$rs$$)},{listinfo_code:$listinfo_code$$}):$callback$$(null,$rs$$)}):$ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$}):$callback$$(null,$obj$$)})},
32
- function($obj$$,$callback$$){$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,$callback$$){Logger.info("[createHandler] createView...");$action$$==="import"||$req$$&&($req$$.query||{}).return_data==0?$callback$$(null,{_id:$obj_created_cv$$._id.toString()}):($obj_created_cv$$.collection_name=$ctrl$$.collection_name,$ctrl$$.onView($user$$,[$obj_created_cv$$],($error$jscomp$13_html_rs$$,$viewValues$$)=>{if($error$jscomp$13_html_rs$$)return $callback$$($error$jscomp$13_html_rs$$);
33
- $error$jscomp$13_html_rs$$=$viewValues$$?$viewValues$$[0]:$obj_created_cv$$;$req$$&&$req$$.uploadFile?($error$jscomp$13_html_rs$$="<html><title>OK</title><body>"+JSON.stringify($error$jscomp$13_html_rs$$)+"</body></html>",$callback$$(null,$error$jscomp$13_html_rs$$)):$callback$$(null,$error$jscomp$13_html_rs$$)},{req:$req$$}))}],($e$$,$obj_created$$)=>{$e$$?(Logger.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],
34
- $callback$$(null,{obj_created:$obj_created$$}))})}catch($e$$){Logger.error("[createHanlder]",$ctrl$$.name,$e$$),$callback$$($e$$)}},createHandlerAsync=($ctrl$$,$req$$)=>new Promise(($resolve$$,$reject$$)=>{if(!$req$$.data)return $reject$$("Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 x\u1eed l\u00fd");createHandler($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(async()=>
35
- {var $datas_r$$=$req$$.data;if(Array.isArray($datas_r$$)){let $rs$$=[];for(let $data$$ of $datas_r$$)$req$$.data=$data$$,$req$$.body=$data$$,$datas_r$$=await createHandlerAsync($ctrl$$,$req$$),$rs$$.push($datas_r$$);return $rs$$}return createHandlerAsync($ctrl$$,$req$$)});$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};module.exports=withSesssion;module.exports.createHandler=createHandler;
5
+ 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$$,$user$$.current_id_app,$voucher_options$$)}catch($e$$){throw $e$$.message||$e$$.error||$e$$;}$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&
6
+ ($v_data$$.ma_ct=$ctrl$$.name.toUpperCase());delete $v_data$$.session_created;delete $v_data$$.session_updated;$req$$&&$schema_paths$$.session_created&&($v_data$$.session_created=($req$$.cookies||{}).uid);if($ctrl$$.options.requireRecaptchaToken&&configs.GOOGLE_RECAPTCHA_SECRET_KEY){if(!$v_data$$["g-recaptcha-response"])throw"Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u g-recaptcha-response";try{await permission.verifyReCaptcha($v_data$$["g-recaptcha-response"])}catch($e$$){throw $e$$.message||
7
+ $e$$.error||$e$$;}}let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($v_data$$,{action:$action$$,user:$user$$}));if($requireOtp$$&&$action$$!="import")try{await permission.verifyOTP($user$$.email,$v_data$$["otp-id"],$v_data$$["otp-code"])}catch($e$$){throw{error:$e$$.message||$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP};}$schema_paths$$.id_app&&($v_data$$.id_app=$user$$.current_id_app);if($ctrl$$.dynamicCreating)try{$v_data$$=await new Promise(($resolve$$,
8
+ $reject$$)=>{$ctrl$$.dynamicCreating($user$$,$v_data$$,($error$$,$result$$)=>$error$$?$reject$$($error$$):$resolve$$($result$$),{listinfo_code:$listinfo_code$$,req:$req$$})})}catch($e$$){throw $e$$.message||$e$$.error||$e$$;}$v_data$$=cleanDataByMongooseSchema($v_data$$,$model$$.schema);const $obj$$=new $model$$;$schema_paths$$.exfields&&($obj$$.exfields=$v_data$$.exfields||{});for(let $f$$ in $v_data$$)$schema_paths$$[$f$$]&&($obj$$.set($f$$,$v_data$$[$f$$]),$f$$!=="exfields"||$obj$$.exfields||($obj$$.exfields=
9
+ {}));$schema_paths$$.id_app&&($obj$$.id_app=$user$$.current_id_app);const $runOnErrorCreating$$=$msgError$$=>new Promise($resolve$$=>{if(!$ctrl$$.options.onErrorCreating)return $resolve$$($msgError$$);$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$resolve$$($msgError$$)})}),$checkVoucherNumber$$=async()=>{if($model$$.schema.paths.ngay_ct&&$obj$$.ngay_ct&&$voucher_options$$&&($voucher_options$$?.trang_thai_create_voucher_numbers?.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=
10
+ 0)&&$voucher_options$$.check_so_ct&&$voucher_options$$.check_so_ct!=="0"){var $query_check$$={id_app:$obj$$.id_app,so_ct:$obj$$.so_ct,listinfo_code:$listinfo_code$$};switch($voucher_options$$.check_so_ct){case "1":var $tu_ngay$$=moment($obj$$.ngay_ct).startOf("day").toDate();var $den_ngay$$=moment($obj$$.ngay_ct).endOf("day").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "2":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("month").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("month").toDate();
11
+ $query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "3":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("quarter").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "8":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("year").toDate(),$den_ngay$$=moment($obj$$.ngay_ct).endOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$}}if(await $model$$.findOne($query_check$$,{so_ct:1}).lean())throw await $runOnErrorCreating$$("S\u1ed1 ch\u1ee9ng t\u1eeb "+
12
+ $obj$$.so_ct+" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c");}};await (async()=>{const $notNeedRight$$=await $ctrl$$.notNeedRight($user$$,{action:$action$$,obj:$obj$$}),{c_app:$c_app$$}=await new Promise(($resolve$$,$reject$$)=>{permission.hasRight($obj$$.id_app,$user$$.email,$ctrl$$.module,$action$$,($error$$,$hr$$,$c_app$$)=>{if($error$$||!$hr$$)return $error$$=$error$$||"",$reject$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||
13
+ ERRORS.ERR_NOT_PERMIT_CODE});$resolve$$({hr:$hr$$,c_app:$c_app$$})},{data:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$,user:$user$$})});await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.checkData($c_app$$,$obj$$,$e$$=>$e$$?$reject$$($e$$):$resolve$$())});if($ctrl$$.creating){const $_obj$$=await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.creating($user$$,$obj$$,($error$$,$_obj$$)=>$error$$?$reject$$($error$$):$resolve$$($_obj$$),{data:$data$$,action:$action$$})});for(let $f$$ of Object.keys($schema_paths$$)){const $v$$=
14
+ $_obj$$.get?$_obj$$.get($f$$):$_obj$$[$f$$];$obj$$.set($f$$,$v$$)}}})();await (async()=>{const $ma_ct$$=$listinfo_code$$||$ctrl$$.name;var $condition_qct_field_qcts$$={status:!0,id_app:$obj$$.id_app,cac_ma_ct:$ma_ct$$.toLowerCase()};const $_options_qct$$=$obj$$.toObject?convertObjectIdsToStrings($obj$$.toObject()):{...$obj$$},$keys_options$$=Object.keys($_options_qct$$);$condition_qct_field_qcts$$=(await global.getModel("dmqct").find($condition_qct_field_qcts$$).lean()||[]).filter($qct$$=>$qct$$.field!==
15
+ "so_ct"&&!$obj$$[$qct$$.field]&&$model$$.schema.paths[$qct$$.field]);$condition_qct_field_qcts$$=$condition_qct_field_qcts$$.filter($qct$$=>{if($qct$$.dieu_kien&&$keys_options$$.length>0)try{let $str_func$$=$qct$$.dieu_kien;$str_func$$.indexOf("return ")!==0&&($str_func$$=`return ${$str_func$$}`);return $str_func$$.indexOf("async ")>0?!1:evalute($str_func$$,{...$_options_qct$$,master:{...$_options_qct$$},moment,numeral})}catch($e$$){return Logger.error("Error find quyen chung tu",$e$$.message,$qct$$.dieu_kien),
16
+ !1}else return!0});for(const $qct$$ of $condition_qct_field_qcts$$){$condition_qct_field_qcts$$=$qct$$.field;const $_options$$={...$_options_qct$$,id_qct:$qct$$._id.toString()};for(let $count$$=0;$count$$<10;$count$$++){const $rsSeq$$=await getNextSequence($obj$$.id_app,$ma_ct$$,$condition_qct_field_qcts$$,$_options$$);$obj$$[$condition_qct_field_qcts$$]=$rsSeq$$[$condition_qct_field_qcts$$];if(!$qct$$.check_duplicate)break;if(!await $model$$.findOne({id_app:$obj$$.id_app,[$condition_qct_field_qcts$$]:$obj$$[$condition_qct_field_qcts$$]},
17
+ {[$condition_qct_field_qcts$$]:1}).lean())break;if($count$$>=9)throw`Kh\u00f4ng th\u1ec3 t\u1ef1 \u0111\u1ed9ng t\u1ea1o gi\u00e1 tr\u1ecb cho field ${$condition_qct_field_qcts$$}. Gi\u00e1 tr\u1ecb "${$obj$$[$condition_qct_field_qcts$$]}" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ki\u1ec3m tra l\u1ea1i th\u00f4ng s\u1ed1 quy\u1ec3n ch\u1ee9ng t\u1eeb sao cho gi\u00e1 tr\u1ecb s\u1ebd t\u1ea1o ra kh\u00f4ng b\u1ecb tr\u00f9ng v\u1edbi gi\u00e1 tr\u1ecb \u0111\u00e3 c\u00f3`;}}})();await (async()=>
18
+ {if((!$voucher_options$$?.trang_thai_create_voucher_numbers||$voucher_options$$?.trang_thai_create_voucher_numbers.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$model$$.schema.paths.so_ct)if($obj$$.so_ct&&$obj$$.so_ct.toUpperCase()!==($listinfo_code$$||$ctrl$$.name).toUpperCase()&&$obj$$.so_ct.toUpperCase()!==$ctrl$$.name.toUpperCase())await $checkVoucherNumber$$();else for(let $count$$=0;$count$$<100;$count$$++){const $rs$$=await getNextSequence($obj$$.id_app,
19
+ $listinfo_code$$||$ctrl$$.name,"so_ct",$obj$$);$obj$$.so_ct=$rs$$.so_ct;try{await $checkVoucherNumber$$();break}catch($error$$){if($count$$>=99)throw $error$$;}}})();await (async()=>{if($model$$.schema.paths.ma_dvcs&&$ctrl$$.name!=="dvcs")try{if(!$obj$$.ma_dvcs){let $dvcs$$=await global.getModel("dvcs").findOne({id_app:$obj$$.id_app,status:!0}).inTxn().lean();$dvcs$$||($dvcs$$=await global.getModel("dvcs").create({id_app:$obj$$.id_app,ma_dvcs:"CTY",ten_dvcs:"C\u00f4ng ty"}),Logger.info("[createHandler] t\u1ef1 t\u1ea1o dvcs m\u1edbi",
20
+ $dvcs$$));$obj$$.ma_dvcs=$dvcs$$._id.toString()}else if(global.mongoose.Types.ObjectId.isValid($obj$$.ma_dvcs)){const $_id_dvcs$$=global.mongoose.Types.ObjectId($obj$$.ma_dvcs);if(!await global.getModel("dvcs").findOne({_id:$_id_dvcs$$}).lean())try{await global.getModel("dvcs").create({_id:$_id_dvcs$$,id_app:$obj$$.id_app,ma_dvcs:"IMPORTED",ten_dvcs:"Imported"})}catch($e$$){Logger.error("Can't import dvcs",$e$$)}}}catch($e$$){throw Logger.error("[createHandler] t\u1ea1o \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf",
21
+ $e$$),"Kh\u00f4ng th\u1ec3 t\u1ea1o \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf m\u1eb7c \u0111\u1ecbnh";}})();await (async()=>{$ctrl$$.validating||($ctrl$$.validating=($u$$,$o$$,$next$$)=>$next$$(null,$o$$));await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.validating($user$$,$obj$$,$e$$=>$e$$?$reject$$($e$$):$resolve$$(),{action:$action$$})});$obj$$.user_created=$action$$=="import"?$obj$$.user_created||$user$$.email:$user$$.email;$obj$$.user_updated=$user$$.email;$obj$$.date_created=new Date;$obj$$.date_updated=
22
+ new Date;try{await new Promise(($resolve$$,$reject$$)=>{validate($obj$$,$error$$=>$error$$?$reject$$($error$$):$resolve$$(),$voucher_options$$)})}catch($error$$){throw await $runOnErrorCreating$$($error$$);}if($id_be_supply_by_user$$&&global.mongoose.Types.ObjectId.isValid($id_be_supply_by_user$$)){const $_id$$=global.mongoose.Types.ObjectId($id_be_supply_by_user$$);await $model$$.findOne({_id:$_id$$},{_id:1})||($obj$$._id=$_id$$)}})();let $result$$=await (async()=>{var $kq_msgErrors$$=!1;try{$kq_msgErrors$$=
23
+ await isExists($model$$,$ctrl$$.unique,$obj$$,$ctrl$$.replaceIfExists)}catch($error$$){throw{error:await $runOnErrorCreating$$($error$$||ERRORS.ERR_ALREADY_EXIST),code:ERRORS.ERR_ALREADY_EXIST_CODE};}if($kq_msgErrors$$)throw{error:await $runOnErrorCreating$$(ERRORS.ERR_ALREADY_EXIST),code:ERRORS.ERR_ALREADY_EXIST_CODE};for(let $k$$ in $ctrl$$.keyValues)$obj$$[$k$$]=$ctrl$$.keyValues[$k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&_.isArray($obj$$[$model_path$$])).forEach($model_path$$=>
24
+ {const $childSchema$$=$model$$.schema.paths[$model_path$$].schema;$childSchema$$&&$childSchema$$.paths&&Object.keys($childSchema$$.paths).filter($path$$=>$path$$!=="line"&&$path$$!=="_id"&&$path$$!=="__v"&&fields_sync_master_detail.indexOf($path$$)>=0).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,$obj$$);if($ctrl$$.saving)try{await $ctrl$$.saving($user$$,$obj$$,
25
+ $action$$)}catch($e$$){throw{error:$e$$.message||$e$$.error||$e$$};}$ctrl$$.emit("saving",$obj$$);let $obj_created$$;try{$obj_created$$=await $obj$$.save()}catch($error$$){if($ctrl$$.options.onErrorSave)$ctrl$$.options.onErrorSave($user$$,$obj$$,$error$$,$action$$);$kq_msgErrors$$=[];for(let $k$$ in $error$$.errors)$kq_msgErrors$$.push($error$$.errors[$k$$].message);$kq_msgErrors$$.length==0&&($kq_msgErrors$$=$error$$.message);$kq_msgErrors$$||=JSON.stringify($error$$);$ctrl$$.options.onErrorCreating&&
26
+ await new Promise($resolve$$=>{$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&Logger.error("onErrorCreating",$e$$);$resolve$$()})});throw $kq_msgErrors$$;}$ctrl$$.populate&&($obj_created$$=$model$$.findById($obj_created$$._id).inTxn(),$obj_created$$=await $ctrl$$.populate($obj_created$$));try{await postData($obj_created$$,$ctrl$$,{req:$req$$})}catch($msgErrors$$){throw await $runOnErrorCreating$$($msgErrors$$);}const $obj_created_cv$$=convertObjectIdsToStrings($obj_created$$.toObject());
27
+ onAfterCommit(async()=>{$ctrl$$.emit("saved",$obj_created$$);$ctrl$$.emit("created",$obj_created$$);$model$$.modelName!="customer"&&global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj_created$$);$req$$&&global.getModel("log").create({id_app:$user$$.current_id_app,id_func:$ctrl$$.name,action:$action$$.toUpperCase(),data:{id:$obj_created_cv$$._id.toString(),data:$obj_created_cv$$}},$user$$.email,$req$$.user_agent,$req$$);runWebhooks($ctrl$$,$obj_created_cv$$,$action$$.toUpperCase(),
28
+ $voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$action$$)});return $obj_created_cv$$})();$result$$=await (async $obj_created_cv$$=>{let $co_gia_tri_tam$$=!1;$obj_created_cv$$.exfields&&$obj_created_cv$$.exfields.__files__&&(await Promise.all($obj_created_cv$$.exfields.__files__.map($_file$$=>File.updateOne({_id:$_file$$._id},{id_link:$obj_created_cv$$._id.toString(),collection_link:$ctrl$$.collection_name}))),delete $obj_created_cv$$.exfields.__files__,$co_gia_tri_tam$$=!0);
29
+ $obj_created_cv$$.exfields&&$obj_created_cv$$.exfields.__supports__&&(await Promise.all($obj_created_cv$$.exfields.__supports__.map($_support$$=>Support.updateOne({_id:$_support$$._id},{id_link:$obj_created_cv$$._id.toString(),collection_link:$ctrl$$.collection_name}))),delete $obj_created_cv$$.exfields.__supports__,$co_gia_tri_tam$$=!0);$co_gia_tri_tam$$&&await $model$$.updateOne({_id:$obj_created_cv$$._id},{exfields:$obj_created_cv$$.exfields});if($ctrl$$.created){const $rs$$=await new Promise(($resolve$$,
30
+ $reject$$)=>{$ctrl$$.created($user$$,$obj_created_cv$$,($error$$,$r$$)=>$error$$?$reject$$($error$$):$resolve$$($r$$))});$ctrl$$.dynamicCreated&&await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.dynamicCreated($user$$,$rs$$,$error$$=>$error$$?$reject$$($error$$):$resolve$$(),{listinfo_code:$listinfo_code$$})});return $rs$$}$ctrl$$.dynamicCreated&&await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.dynamicCreated($user$$,$obj_created_cv$$,$error$$=>$error$$?$reject$$($error$$):$resolve$$(),{listinfo_code:$listinfo_code$$})});
31
+ return $obj_created_cv$$})($result$$);$result$$=await ($obj_created_cv$$=>new Promise(($resolve$$,$reject$$)=>{$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj_created_cv$$,($error$$,$o$$)=>$error$$?$reject$$($error$$):$resolve$$($o$$),$voucher_options$$)}))($result$$);const $obj_created$$=await (async $obj_created_cv$$=>{Logger.info("[createHandler] createView...");if($action$$==="import"||$req$$&&($req$$.query||{}).return_data==0)return{_id:$obj_created_cv$$._id.toString()};$obj_created_cv$$.collection_name=
32
+ $ctrl$$.collection_name;var $rs$$=await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.onView($user$$,[$obj_created_cv$$],($error$$,$vv$$)=>$error$$?$reject$$($error$$):$resolve$$($vv$$),{req:$req$$})});$rs$$=$rs$$?$rs$$[0]:$obj_created_cv$$;return $req$$&&$req$$.uploadFile?"<html><title>OK</title><body>"+JSON.stringify($rs$$)+"</body></html>":$rs$$})($result$$);let $name_cached$$=$model$$.collection.name;$user$$.current_id_app&&($name_cached$$+=$user$$.current_id_app);delete global.cacheDatas[$name_cached$$];
33
+ return{obj_created:$obj_created$$}}catch($e$$){throw Logger.error("[createHanlder]",$ctrl$$.name,$e$$),$e$$;}},createHandler=function($ctrl$$,$req$$,$callback$$){createHandlerCore($ctrl$$,$req$$).then($rs$$=>$callback$$(null,$rs$$),$e$$=>$callback$$($e$$))},createHandlerAsync=($ctrl$$,$req$$)=>$req$$.data?createHandlerCore($ctrl$$,$req$$):Promise.reject("Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 x\u1eed l\u00fd"),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(async()=>
34
+ {var $datas_r$$=$req$$.data;if(Array.isArray($datas_r$$)){let $results$$=[];for(let $data$$ of $datas_r$$)$req$$.data=$data$$,$req$$.body=$data$$,$datas_r$$=await createHandlerAsync($ctrl$$,$req$$),$results$$.push($datas_r$$);return $results$$}return createHandlerAsync($ctrl$$,$req$$)});$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};module.exports=withSesssion;module.exports.createHandler=createHandler;module.exports.createHandlerAsync=createHandlerAsync;
35
+ module.exports.createHandlerCore=createHandlerCore;
@@ -0,0 +1,35 @@
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,executeInTransaction}=require("../libs/sessionContext.js"),{evalute,convertObjectIdsToStrings}=require("../libs/utils"),{asyncBodyToJson,ERRORS,getNextSequence,isExists,createIdRef,fields_sync_master_detail,postData,runWebhooks,
2
+ cleanDataByMongooseSchema}=require("./controllerUtils"),createHandler=async($ctrl$$,$req$$,$callback$$)=>{$req$$.headers=$req$$.headers||{};$req$$.body=$req$$.body||{};$req$$.query=$req$$.query||{};$req$$.data=$req$$.data||{};let {user:$user$$,data:$data$$,id_be_supply_by_user:$id_be_supply_by_user$$,action:$action$$}=$req$$;$action$$||="add";let $listinfo_code$$=$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"]||$req$$.query?.["listinfo-code"]||$data$$?.listinfo_code;if($listinfo_code$$&&
3
+ $listinfo_code$$!=$ctrl$$.name){Logger.warn(`[createHandler] listinfo_code (${$listinfo_code$$}) # controller code (${$ctrl$$.name}). \u0110ang ki\u1ec3m tra t\u00ednh h\u1ee3p l\u1ec7 c\u1ee7a listinfo_code`);var $api_code_listinfo$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$api_code_listinfo$$?($api_code_listinfo$$=$api_code_listinfo$$.api_code||$api_code_listinfo$$.code,$api_code_listinfo$$!=$ctrl$$.name&&(Logger.warn(`[createHandler] api_code (${$api_code_listinfo$$}) v\u00e0 controller name (${$ctrl$$.name}) kh\u00f4ng kh\u1edbp nhau. S\u1eeda d\u1ee5ng controller name (${$ctrl$$.name}) cho listinfo_code`),
4
+ $listinfo_code$$=$ctrl$$.name)):(Logger.warn(`[createHandler] listinfo_code (${$listinfo_code$$}) kh\u00f4ng t\u1ed3n t\u1ea1i. S\u1eeda d\u1ee5ng controller name (${$ctrl$$.name}) cho listinfo_code`),$listinfo_code$$=$ctrl$$.name)}$listinfo_code$$=$listinfo_code$$||$ctrl$$.name;$req$$.headers=$req$$.headers||{};$req$$.headers["Listinfo-Code"]=$listinfo_code$$;$data$$.listinfo_code=$listinfo_code$$;try{const $model$$=$ctrl$$.model;let $voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,
5
+ 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$$,$user$$.current_id_app,$voucher_options$$)}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&
6
+ ($v_data$$.ma_ct=$ctrl$$.name.toUpperCase());delete $v_data$$.session_created;delete $v_data$$.session_updated;$req$$&&$schema_paths$$.session_created&&($v_data$$.session_created=($req$$.cookies||{}).uid);if($ctrl$$.options.requireRecaptchaToken&&configs.GOOGLE_RECAPTCHA_SECRET_KEY){if(!$v_data$$["g-recaptcha-response"])return $callback$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u g-recaptcha-response");try{await permission.verifyReCaptcha($v_data$$["g-recaptcha-response"])}catch($e$$){return $callback$$($e$$.message||
7
+ $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})}$schema_paths$$.id_app&&($v_data$$.id_app=$user$$.current_id_app);if($ctrl$$.dynamicCreating)try{$v_data$$=
8
+ 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$$)}$v_data$$=cleanDataByMongooseSchema($v_data$$,$model$$.schema);const $obj$$=new $model$$;$schema_paths$$.exfields&&($obj$$.exfields=$v_data$$.exfields||{});for(let $f$$ in $v_data$$)$schema_paths$$[$f$$]&&
9
+ ($obj$$.set($f$$,$v_data$$[$f$$]),$f$$!=="exfields"||$obj$$.exfields||($obj$$.exfields={}));$schema_paths$$.id_app&&($obj$$.id_app=$user$$.current_id_app);const $checkVoucherNumber$$=$callback$$=>{if($model$$.schema.paths.ngay_ct&&$obj$$.ngay_ct)if($voucher_options$$&&($voucher_options$$?.trang_thai_create_voucher_numbers?.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$voucher_options$$.check_so_ct&&$voucher_options$$.check_so_ct!=="0"){let $query_check$$=
10
+ {id_app:$obj$$.id_app,so_ct:$obj$$.so_ct,listinfo_code:$listinfo_code$$},$tu_ngay$$,$den_ngay$$;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("day").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("day").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "2":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("month").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("month").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};
11
+ break;case "3":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("quarter").toDate();$den_ngay$$=moment($obj$$.ngay_ct).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "8":$tu_ngay$$=moment($obj$$.ngay_ct).startOf("year").toDate(),$den_ngay$$=moment($obj$$.ngay_ct).endOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().then($rs$$=>{if($rs$$){let $msgError$$="S\u1ed1 ch\u1ee9ng t\u1eeb "+
12
+ $obj$$.so_ct+" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c";if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else $callback$$()}).catch($e$$=>{Logger.error($e$$)})}else $callback$$();else $callback$$()},$File$$=global.getModel("file"),$Support$$=global.getModel("support");async.waterfall([function($callback$$){setImmediate(async function(){let $notNeedRight$$=
13
+ await $ctrl$$.notNeedRight($user$$,{action:$action$$,obj:$obj$$});permission.hasRight($obj$$.id_app,$user$$.email,$ctrl$$.module,$action$$,function($error$$,$hr$$,$c_app$$){if($error$$||!$hr$$)return $error$$=$error$$||"",$callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE});$ctrl$$.checkData($c_app$$,$obj$$,$e$$=>{if($e$$)return $callback$$($e$$);$ctrl$$.creating?$ctrl$$.creating($user$$,$obj$$,function($error$$,$_obj$$){if($error$$)return $callback$$($error$$);
14
+ for(let $f$$ of Object.keys($schema_paths$$))$error$$=$_obj$$.get?$_obj$$.get($f$$):$_obj$$[$f$$],$obj$$.set($f$$,$error$$);$callback$$(null,$obj$$)},{data:$data$$,action:$action$$}):$callback$$(null,$obj$$)})},{data:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$,user:$user$$})})},($obj$$,$callback$$)=>{let $ma_ct$$=$listinfo_code$$||$ctrl$$.name;const $condition_qct$$={status:!0,id_app:$obj$$.id_app,cac_ma_ct:$ma_ct$$.toLowerCase()};let $_options_qct$$;$_options_qct$$=$obj$$.toObject?
15
+ convertObjectIdsToStrings($obj$$.toObject()):{...$obj$$};let $keys_options$$=Object.keys($_options_qct$$);global.getModel("dmqct").find($condition_qct$$).lean().then($qcts_rs$$=>{$qcts_rs$$=($qcts_rs$$||[]).filter($qct$$=>$qct$$.field!=="so_ct"&&!$obj$$[$qct$$.field]&&$model$$.schema.paths[$qct$$.field]);$qcts_rs$$=$qcts_rs$$.filter($qct$$=>{if($qct$$.dieu_kien&&$keys_options$$.length>0)try{let $str_func$$=$qct$$.dieu_kien;$str_func$$.indexOf("return ")!==0&&($str_func$$=`return ${$str_func$$}`);
16
+ return $str_func$$.indexOf("async ")>0?!1:evalute($str_func$$,{...$_options_qct$$,master:{...$_options_qct$$},moment,numeral})}catch($e$$){return Logger.error("Error find quyen chung tu",$e$$.message,$qct$$.dieu_kien),!1}else return!0});async.mapSeries($qcts_rs$$,($qct$$,$cb$$)=>{let $field$$=$qct$$.field,$_options$$={...$_options_qct$$};$_options$$.id_qct=$qct$$._id.toString();let $count$$=0;async.whilst(function($cb$$){$cb$$(null,$count$$<10)},function($callback$$){getNextSequence($obj$$.id_app,
17
+ $ma_ct$$,$field$$,function($e$$,$rs$$){setImmediate(async()=>{if($e$$)return $callback$$($e$$);$obj$$[$field$$]=$rs$$[$field$$];$qct$$.check_duplicate?await $model$$.findOne({id_app:$obj$$.id_app,[$field$$]:$obj$$[$field$$]},{[$field$$]:1}).lean()?$count$$>=9?$callback$$(`Kh\u00f4ng th\u1ec3 t\u1ef1 \u0111\u1ed9ng t\u1ea1o gi\u00e1 tr\u1ecb cho field ${$field$$}. Gi\u00e1 tr\u1ecb "${$obj$$[$field$$]}" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ki\u1ec3m tra l\u1ea1i th\u00f4ng s\u1ed1 quy\u1ec3n ch\u1ee9ng t\u1eeb sao cho gi\u00e1 tr\u1ecb s\u1ebd t\u1ea1o ra kh\u00f4ng b\u1ecb tr\u00f9ng v\u1edbi gi\u00e1 tr\u1ecb \u0111\u00e3 c\u00f3`):
18
+ ($count$$++,$callback$$()):($count$$=99999,$callback$$()):($count$$=99999,$callback$$())})},$_options$$)},function($err$$){$cb$$($err$$)})},$e$$=>{$callback$$($e$$)})}).catch($e$$=>{Logger.error($e$$)})},$callback$$=>{if((!$voucher_options$$?.trang_thai_create_voucher_numbers||$voucher_options$$?.trang_thai_create_voucher_numbers.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($obj$$.trang_thai)>=0)&&$model$$.schema.paths.so_ct)if($obj$$.so_ct&&$obj$$.so_ct.toUpperCase()!==
19
+ ($listinfo_code$$||$ctrl$$.name).toUpperCase()&&$obj$$.so_ct.toUpperCase()!==$ctrl$$.name.toUpperCase())$checkVoucherNumber$$($error$$=>{$callback$$($error$$)});else{let $count$$=0;async.whilst(function($cb$$){$cb$$(null,$count$$<100)},function($callback$$){getNextSequence($obj$$.id_app,$listinfo_code$$||$ctrl$$.name,"so_ct",function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$obj$$.so_ct=$rs$$.so_ct;$checkVoucherNumber$$($error$$=>{$error$$?$count$$>=99?$callback$$($error$$):($count$$++,$callback$$()):
20
+ ($count$$=99999,$callback$$())})},$obj$$)},function($err$$){$callback$$($err$$)})}else $callback$$()},function($callback$$){setImmediate(async()=>{if($model$$.schema.paths.ma_dvcs&&$ctrl$$.name!=="dvcs")try{if($obj$$.ma_dvcs)if(global.mongoose.Types.ObjectId.isValid($obj$$.ma_dvcs)){let $_id_dvcs$$=global.mongoose.Types.ObjectId($obj$$.ma_dvcs);await global.getModel("dvcs").findOne({_id:$_id_dvcs$$}).lean()?$callback$$():global.getModel("dvcs").create({_id:$_id_dvcs$$,id_app:$obj$$.id_app,ma_dvcs:"IMPORTED",
21
+ ten_dvcs:"Imported"},$e$$=>{$e$$&&Logger.error("Can't import dvcs",$e$$);$callback$$()})}else $callback$$();else{let $dvcs$$=await global.getModel("dvcs").findOne({id_app:$obj$$.id_app,status:!0}).inTxn().lean();$dvcs$$||($dvcs$$=await global.getModel("dvcs").create({id_app:$obj$$.id_app,ma_dvcs:"CTY",ten_dvcs:"C\u00f4ng ty"}),console.log("[createHandler] t\u1ef1 t\u1ea1o dvcs m\u1edbi",$dvcs$$));$obj$$.ma_dvcs=$dvcs$$._id.toString();$callback$$()}}catch($e$$){Logger.error("[createHandler] t\u1ea1o \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf",
22
+ $e$$),$callback$$("Kh\u00f4ng th\u1ec3 t\u1ea1o \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf m\u1eb7c \u0111\u1ecbnh")}else $callback$$()})},$callback$$=>{$ctrl$$.validating||($ctrl$$.validating=($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)});$ctrl$$.validating($user$$,$obj$$,$e$$=>{if($e$$)return $callback$$($e$$);$obj$$.user_created=$action$$=="import"?$obj$$.user_created||$user$$.email:$user$$.email;$obj$$.user_updated=$user$$.email;$obj$$.date_created=new Date;$obj$$.date_updated=new Date;validate($obj$$,
23
+ async $error$$=>{setImmediate(async()=>{if($error$$){let $msgError$$=$error$$;if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else{if($id_be_supply_by_user$$&&global.mongoose.Types.ObjectId.isValid($id_be_supply_by_user$$)){let $_id$$=global.mongoose.Types.ObjectId($id_be_supply_by_user$$);await $model$$.findOne({_id:$_id$$},{_id:1})||($obj$$._id=$_id$$)}$callback$$()}})},
24
+ $voucher_options$$)},{action:$action$$})},function($callback$$){isExists($model$$,$ctrl$$.unique,$obj$$,$ctrl$$.replaceIfExists,async($error$$,$kq$$)=>{setImmediate(async()=>{if($error$$||$kq$$){let $msgError$$=$error$$||ERRORS.ERR_ALREADY_EXIST;if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$({error:$msgError$$,code:ERRORS.ERR_ALREADY_EXIST_CODE})});else $callback$$({error:$msgError$$,code:ERRORS.ERR_ALREADY_EXIST_CODE})}else{for(let $k$$ in $ctrl$$.keyValues)$obj$$[$k$$]=
25
+ $ctrl$$.keyValues[$k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&_.isArray($obj$$[$model_path$$])).forEach($model_path$$=>{$model$$.schema.paths[$model_path$$].schema&&$model$$.schema.paths[$model_path$$].schema.paths&&Object.keys($model$$.schema.paths[$model_path$$].schema.paths).filter($path$$=>$path$$!=="line"&&$path$$!=="_id"&&$path$$!=="__v"&&fields_sync_master_detail.indexOf($path$$)>=0).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>
26
+ !$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,$obj$$);if($ctrl$$.saving)try{await $ctrl$$.saving($user$$,$obj$$,$action$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$ctrl$$.emit("saving",$obj$$);$obj$$.save(function($error$$,$obj_created$$){setImmediate(async()=>{if($error$$){if($ctrl$$.options.onErrorSave)$ctrl$$.options.onErrorSave($user$$,$obj$$,$error$$,$action$$);let $msgErrors$$=[];for(let $k$$ in $error$$.errors)$msgErrors$$.push($error$$.errors[$k$$].message);
27
+ $msgErrors$$.length==0&&($msgErrors$$=$error$$.message);$msgErrors$$||=JSON.stringify($error$$);if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$$,$e$$=>{$e$$&&Logger.error("onErrorCreating",$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$)}else $ctrl$$.populate&&($obj_created$$=$model$$.findById($obj_created$$._id).inTxn(),$obj_created$$=await $ctrl$$.populate($obj_created$$)),postData($obj_created$$,$ctrl$$,function($msgErrors$$){if($msgErrors$$)if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,
28
+ $obj$$,$e$$=>{$e$$&&($msgErrors$$=$msgErrors$$+"\n"+$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$);else{const $obj_created_cv$$=convertObjectIdsToStrings($obj_created$$.toObject());onAfterCommit(async()=>{$ctrl$$.emit("saved",$obj_created$$);$ctrl$$.emit("created",$obj_created$$);$model$$.modelName!="customer"&&global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj_created$$);$req$$&&setImmediate(()=>{global.getModel("log").create({id_app:$user$$.current_id_app,
29
+ id_func:$ctrl$$.name,action:$action$$.toUpperCase(),data:{id:$obj_created_cv$$._id.toString(),data:$obj_created_cv$$}},$user$$.email,$req$$.user_agent,$req$$)});runWebhooks($ctrl$$,$obj_created_cv$$,$action$$.toUpperCase(),$voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$action$$)});$callback$$(null,$obj_created_cv$$)}},{req:$req$$})})})}})})},function($obj$$,$callback$$){setImmediate(async()=>{let $co_gia_tri_tam$$=!1;if($obj$$.exfields&&$obj$$.exfields.__files__){for(let $_file$$ of $obj$$.exfields.__files__)await $File$$.updateOne({_id:$_file$$._id},
30
+ {id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name});delete $obj$$.exfields.__files__;$co_gia_tri_tam$$=!0}if($obj$$.exfields&&$obj$$.exfields.__supports__){for(let $_support$$ of $obj$$.exfields.__supports__)await $Support$$.updateOne({_id:$_support$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name});delete $obj$$.exfields.__supports__;$co_gia_tri_tam$$=!0}$co_gia_tri_tam$$&&await $model$$.updateOne({_id:$obj$$._id},{exfields:$obj$$.exfields});$ctrl$$.created?
31
+ $ctrl$$.created($user$$,$obj$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$rs$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$rs$$)},{listinfo_code:$listinfo_code$$}):$callback$$(null,$rs$$)}):$ctrl$$.dynamicCreated?$ctrl$$.dynamicCreated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$}):$callback$$(null,$obj$$)})},
32
+ function($obj$$,$callback$$){$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,$callback$$){Logger.info("[createHandler] createView...");$action$$==="import"||$req$$&&($req$$.query||{}).return_data==0?$callback$$(null,{_id:$obj_created_cv$$._id.toString()}):($obj_created_cv$$.collection_name=$ctrl$$.collection_name,$ctrl$$.onView($user$$,[$obj_created_cv$$],($error$jscomp$13_html_rs$$,$viewValues$$)=>{if($error$jscomp$13_html_rs$$)return $callback$$($error$jscomp$13_html_rs$$);
33
+ $error$jscomp$13_html_rs$$=$viewValues$$?$viewValues$$[0]:$obj_created_cv$$;$req$$&&$req$$.uploadFile?($error$jscomp$13_html_rs$$="<html><title>OK</title><body>"+JSON.stringify($error$jscomp$13_html_rs$$)+"</body></html>",$callback$$(null,$error$jscomp$13_html_rs$$)):$callback$$(null,$error$jscomp$13_html_rs$$)},{req:$req$$}))}],($e$$,$obj_created$$)=>{$e$$?(Logger.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],
34
+ $callback$$(null,{obj_created:$obj_created$$}))})}catch($e$$){Logger.error("[createHanlder]",$ctrl$$.name,$e$$),$callback$$($e$$)}},createHandlerAsync=($ctrl$$,$req$$)=>new Promise(($resolve$$,$reject$$)=>{if(!$req$$.data)return $reject$$("Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 x\u1eed l\u00fd");createHandler($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(async()=>
35
+ {var $datas_r$$=$req$$.data;if(Array.isArray($datas_r$$)){let $rs$$=[];for(let $data$$ of $datas_r$$)$req$$.data=$data$$,$req$$.body=$data$$,$datas_r$$=await createHandlerAsync($ctrl$$,$req$$),$rs$$.push($datas_r$$);return $rs$$}return createHandlerAsync($ctrl$$,$req$$)});$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};module.exports=withSesssion;module.exports.createHandler=createHandler;
@@ -1,12 +1,11 @@
1
- const async=require("async"),_=require("lodash"),validator=require("../libs/validator"),permission=require("../libs/permission"),{convertObjectIdsToStrings}=require("../libs/utils"),{onAfterCommit,executeInTransaction}=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;if($listinfo_code$$&&$listinfo_code$$!=$ctrl$$.name){const $listinfo$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$listinfo$$?($listinfo$$.api_code||
3
- $listinfo$$.code)!=$ctrl$$.name&&($listinfo_code$$=$ctrl$$.name):$listinfo_code$$=$ctrl$$.name}async.series([function($callback$$){setImmediate(async()=>{const $user$$=$req$$.user;if($obj$$.trang_thai){var $q_approve_requireOtp$$={id_app:$obj$$.id_app,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$$=
4
- (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$$=
5
- 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,
6
- {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})},
7
- {obj:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$,user:$user$$})})})},function($callback$$){let $obj$$=$req$$.obj;$ctrl$$.deleting?$ctrl$$.deleting($req$$.user,$obj$$,function($e$$,$obj$$){if($e$$)return Logger.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$$,
8
- 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$$){let $obj$$=$req$$.obj;$ctrl$$.emit("deleting",{...$obj$$});deletePost($req$$.user,$obj$$,async $e$$=>{if($e$$)return Logger.error("delete post",$e$$),$e$$.error?$callback$$($e$$):
9
- $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 Logger.error("delete object",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});onAfterCommit(async()=>{$ctrl$$.emit("deleted",$obj$$);$ctrl$$.deleteData({...$obj$$});global.getModel("log").create({id_app:$req$$.user.current_id_app,
10
- 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$$&&Logger.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})});$ctrl$$.deleted?
11
- $ctrl$$.deleted($req$$.user,$obj$$,function($e$$,$obj$$){if($e$$)return Logger.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)})},deleteHandlerAsync=($ctrl$$,$req$$)=>new Promise(($resolve$$,$reject$$)=>{deleteHandler($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}),
12
- withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(()=>deleteHandlerAsync($ctrl$$,$req$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};module.exports=withSesssion;
1
+ const _=require("lodash"),validator=require("../libs/validator"),permission=require("../libs/permission"),{convertObjectIdsToStrings}=require("../libs/utils"),{onAfterCommit,executeInTransaction}=require("../libs/sessionContext.js"),{ERRORS,checkReference,pushNotification,runWebhooks,deletePost}=require("./controllerUtils"),deleteHandlerCore=async($ctrl$$,$req$$)=>{let $model$$=$ctrl$$.model,$module$$=$ctrl$$.module,$_id$$=$req$$.params.id;if(!$_id$$||!global.mongoose.Types.ObjectId.isValid($_id$$))throw{error:"id is required"};
2
+ let $obj$$=await $model$$.findOne({_id:$_id$$});if(!$obj$$)throw{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;if($listinfo_code$$&&$listinfo_code$$!=$ctrl$$.name){var $listinfo_q_approve_requireOtp$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$listinfo_q_approve_requireOtp$$?
3
+ ($listinfo_q_approve_requireOtp$$.api_code||$listinfo_q_approve_requireOtp$$.code)!=$ctrl$$.name&&($listinfo_code$$=$ctrl$$.name):$listinfo_code$$=$ctrl$$.name}const $user$$=$req$$.user;if($obj$$.trang_thai&&($listinfo_q_approve_requireOtp$$={id_app:$obj$$.id_app,id_ct:$obj$$._id.toString(),user_approved:{$exists:!0}},await global.getModel("approve").findOne($listinfo_q_approve_requireOtp$$)))throw{error:"Kh\u00f4ng th\u1ec3 xo\u00e1 ch\u1ee9ng t\u1eeb n\u00e0y do n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t"};
4
+ 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(($resolve$$,$reject$$)=>{validator.unlockBook[0]($obj$$.id_app,$obj$$.ngay_ct,$unlock$$=>{if(!$unlock$$)return $reject$$(validator.unlockBook[1]);$resolve$$($unlock$$)},$voucher_options$$)})}catch($e$$){throw{error:$e$$.message||$e$$.error||
5
+ $e$$,code:ERRORS.BOOK_LOCK};}$obj$$=convertObjectIdsToStrings($obj$$.toObject());($listinfo_q_approve_requireOtp$$=$ctrl$$.options.requireOtp)&&_.isFunction($listinfo_q_approve_requireOtp$$)&&($listinfo_q_approve_requireOtp$$=$listinfo_q_approve_requireOtp$$($obj$$,{action:"delete",_id:$_id$$,user:$user$$}));if($listinfo_q_approve_requireOtp$$)try{await permission.verifyOTP($user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"])}catch($e$$){throw{error:$e$$.message||$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP};
6
+ }const $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,{action:"delete",obj:$obj$$});await new Promise(($resolve$$,$reject$$)=>{permission.hasRight($ctrl$$.require_id_app?$obj$$.id_app:void 0,$req$$.user.email,$module$$,"delete",($error$$,$hr$$)=>{if(!$hr$$)return $reject$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE});$resolve$$()},{obj:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$,user:$user$$})});try{await checkReference($model$$,
7
+ $obj$$)}catch($error$$){throw{error:ERRORS.ERR_ARISE+($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_ARISE_CODE};}$ctrl$$.deleting&&($obj$$=await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.deleting($req$$.user,$obj$$,($e$$,$o$$)=>{if($e$$)return Logger.error("deleting",$e$$),$e$$.error?$reject$$($e$$):$reject$$({error:$e$$.message||$e$$});$resolve$$($o$$)},{req:$req$$})}));$ctrl$$.dynamicDeleting&&($obj$$=await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.dynamicDeleting($req$$.user,
8
+ $obj$$,($error$$,$o$$)=>$error$$?$reject$$($error$$):$resolve$$($o$$),{listinfo_code:$listinfo_code$$,req:$req$$})}));$ctrl$$.emit("deleting",{...$obj$$});try{await deletePost($req$$.user,$obj$$)}catch($e$$){throw Logger.error("delete post",$e$$),$e$$.error?$e$$:{error:$e$$.message||$e$$};}if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$$)}catch($e$$){throw{error:$e$$.message||$e$$.error||$e$$};}try{await $model$$.deleteOne({_id:$obj$$._id})}catch($e$$){throw Logger.error("delete object",
9
+ $e$$),$e$$.error?$e$$:{error:$e$$.message||$e$$};}onAfterCommit(async()=>{$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$$);try{await global.getModel("link").deleteMany({$or:[{id_a:$obj$$._id},{id_b:$obj$$._id}]})}catch($e$$){Logger.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})});$ctrl$$.deleted&&($obj$$=await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.deleted($req$$.user,$obj$$,($e$$,$o$$)=>{if($e$$)return Logger.error("deleted",$e$$),$e$$.error?$reject$$($e$$):$reject$$({error:$e$$.message||$e$$});$resolve$$($o$$)})}));return $obj$$},deleteHandlerAsync=($ctrl$$,$req$$)=>deleteHandlerCore($ctrl$$,
11
+ $req$$),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(()=>deleteHandlerCore($ctrl$$,$req$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};module.exports=withSesssion;module.exports.deleteHandlerAsync=deleteHandlerAsync;module.exports.deleteHandlerCore=deleteHandlerCore;
@@ -0,0 +1,12 @@
1
+ const async=require("async"),_=require("lodash"),validator=require("../libs/validator"),permission=require("../libs/permission"),{convertObjectIdsToStrings}=require("../libs/utils"),{onAfterCommit,executeInTransaction}=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;if($listinfo_code$$&&$listinfo_code$$!=$ctrl$$.name){const $listinfo$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$listinfo$$?($listinfo$$.api_code||
3
+ $listinfo$$.code)!=$ctrl$$.name&&($listinfo_code$$=$ctrl$$.name):$listinfo_code$$=$ctrl$$.name}async.series([function($callback$$){setImmediate(async()=>{const $user$$=$req$$.user;if($obj$$.trang_thai){var $q_approve_requireOtp$$={id_app:$obj$$.id_app,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$$=
4
+ (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$$=
5
+ 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,
6
+ {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})},
7
+ {obj:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$,user:$user$$})})})},function($callback$$){let $obj$$=$req$$.obj;$ctrl$$.deleting?$ctrl$$.deleting($req$$.user,$obj$$,function($e$$,$obj$$){if($e$$)return Logger.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$$,
8
+ 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$$){let $obj$$=$req$$.obj;$ctrl$$.emit("deleting",{...$obj$$});deletePost($req$$.user,$obj$$,async $e$$=>{if($e$$)return Logger.error("delete post",$e$$),$e$$.error?$callback$$($e$$):
9
+ $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 Logger.error("delete object",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});onAfterCommit(async()=>{$ctrl$$.emit("deleted",$obj$$);$ctrl$$.deleteData({...$obj$$});global.getModel("log").create({id_app:$req$$.user.current_id_app,
10
+ 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$$&&Logger.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})});$ctrl$$.deleted?
11
+ $ctrl$$.deleted($req$$.user,$obj$$,function($e$$,$obj$$){if($e$$)return Logger.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)})},deleteHandlerAsync=($ctrl$$,$req$$)=>new Promise(($resolve$$,$reject$$)=>{deleteHandler($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}),
12
+ withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(()=>deleteHandlerAsync($ctrl$$,$req$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};module.exports=withSesssion;