flexbiz-server 12.6.13 → 12.6.16

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 (129) hide show
  1. package/README.md +439 -4
  2. package/package.json +4 -3
  3. package/server/agents/agents.js +1 -0
  4. package/server/agents/ai_memory_manager.js +6 -0
  5. package/server/agents/ceoAgent.js +43 -0
  6. package/server/agents/chatController.js +6 -0
  7. package/server/agents/cskhAgent.js +43 -0
  8. package/server/agents/flowAgent.js +43 -0
  9. package/server/agents/prompts/ceo.js +2 -0
  10. package/server/agents/prompts/flow.js +2 -0
  11. package/server/agents/staffAgent.js +44 -0
  12. package/server/agents/tools/financeTools.js +57 -0
  13. package/server/agents/tools/flowTools.js +36 -0
  14. package/server/agents/tools/kpiTools.js +104 -0
  15. package/server/agents/tools/masterDataTools.js +74 -0
  16. package/server/agents/tools/okrTools.js +21 -0
  17. package/server/agents/tools/ragTools.js +21 -0
  18. package/server/agents/tools/reportTools.js +43 -0
  19. package/server/agents/tools/staffTools.js +13 -0
  20. package/server/agents/tools/stockTools.js +41 -0
  21. package/server/agents/tools/systemTools.js +52 -0
  22. package/server/agents/tools/taskTools.js +23 -0
  23. package/server/agents/tools/utils.js +57 -0
  24. package/server/app.js +7 -7
  25. package/server/controllers/controller.js +31 -29
  26. package/server/controllers/controllerRPT.js +31 -29
  27. package/server/controllers/findHandler.js +22 -21
  28. package/server/controllers/importFromExcelHandler.js +17 -14
  29. package/server/controllers/importHandler.js +26 -41
  30. package/server/controllers/importHandler_old.js +41 -0
  31. package/server/controllers/rptHandler.js +14 -11
  32. package/server/controllers/viewHandler.js +7 -7
  33. package/server/flow/FlowEngine.js +49 -45
  34. package/server/flow/WebhookManager.js +1 -1
  35. package/server/flow/handlers.js +2 -2
  36. package/server/flow/nodes/userform.js +28 -0
  37. package/server/flow/utils.js +12 -4
  38. package/server/global.js +4 -3
  39. package/server/libs/cdpstk.js +1 -1
  40. package/server/libs/ckvt.js +12 -11
  41. package/server/libs/ckvtcapphat.js +5 -5
  42. package/server/libs/ckvtnpp.js +8 -8
  43. package/server/libs/ckvttt.js +6 -5
  44. package/server/libs/ctvt.js +7 -6
  45. package/server/libs/ctvtnpp.js +7 -6
  46. package/server/libs/ctvttt.js +6 -6
  47. package/server/libs/databanle.js +17 -18
  48. package/server/libs/databanle_old.js +18 -0
  49. package/server/libs/databanletheongay.js +25 -29
  50. package/server/libs/dktk.js +3 -3
  51. package/server/libs/dkvt.js +11 -11
  52. package/server/libs/dkvtnpp.js +7 -6
  53. package/server/libs/dkvttt.js +7 -6
  54. package/server/libs/docs.js +72 -36
  55. package/server/libs/dtbanletheosp.js +16 -19
  56. package/server/libs/fifo_dk.js +8 -0
  57. package/server/libs/fifo_group.js +4 -0
  58. package/server/libs/fifo_trace_query.js +12 -0
  59. package/server/libs/getGiaban.js +59 -70
  60. package/server/libs/getGiaban_old.js +70 -0
  61. package/server/libs/joinData.js +3 -3
  62. package/server/libs/joinData_bk.js +44 -0
  63. package/server/libs/kpistatus.js +24 -17
  64. package/server/libs/permission.js +54 -56
  65. package/server/libs/permission_old.js +58 -0
  66. package/server/libs/post-book.js +1 -1
  67. package/server/libs/post-socai.js +2 -1
  68. package/server/libs/post-sokho.js +11 -11
  69. package/server/libs/prototypes.js +13 -12
  70. package/server/libs/queryBuilding.js +11 -10
  71. package/server/libs/redis-cache.js +22 -10
  72. package/server/libs/sctcnkh.js +19 -17
  73. package/server/libs/socaitk.js +1 -1
  74. package/server/libs/thnxt.js +17 -14
  75. package/server/libs/thnxtnpp.js +8 -8
  76. package/server/libs/thnxttt.js +8 -7
  77. package/server/libs/tinhgia1vt_fifo.js +22 -0
  78. package/server/libs/tinhgiafifo.js +28 -0
  79. package/server/libs/utils.js +37 -19
  80. package/server/models/app.js +1 -1
  81. package/server/models/approve.js +8 -8
  82. package/server/models/cacheDataReport.js +2 -2
  83. package/server/models/cacheSessionReport.js +5 -1
  84. package/server/models/cdvt.js +2 -2
  85. package/server/models/checkin.js +2 -2
  86. package/server/models/chitietluongds.js +1 -1
  87. package/server/models/contract.js +1 -1
  88. package/server/models/csluongtheods.js +2 -2
  89. package/server/models/ctds2.js +7 -6
  90. package/server/models/custom_report.js +1 -0
  91. package/server/models/dmdt.js +2 -2
  92. package/server/models/dmkho.js +5 -4
  93. package/server/models/dmnvt.js +5 -4
  94. package/server/models/fifo_dk.js +2 -0
  95. package/server/models/fifo_lot.js +3 -0
  96. package/server/models/fifo_trace.js +4 -0
  97. package/server/models/flowpending.js +2 -0
  98. package/server/models/group.js +3 -5
  99. package/server/models/listinfo.js +61 -33
  100. package/server/models/schedule.js +4 -3
  101. package/server/models/task.js +1 -1
  102. package/server/models/trangthai.js +2 -2
  103. package/server/modules/lists/bg-fifo_dk.js +8 -0
  104. package/server/modules/lists/ls-checkin.js +1 -1
  105. package/server/modules/lists/ls-customer.js +23 -26
  106. package/server/modules/lists/ls-dmbp.js +5 -5
  107. package/server/modules/lists/ls-dmkho.js +7 -1
  108. package/server/modules/lists/ls-dmnhtask.js +1 -1
  109. package/server/modules/lists/ls-dmvt.js +52 -70
  110. package/server/modules/lists/ls-flowpending.js +3 -0
  111. package/server/modules/lists/ls-participant.js +6 -4
  112. package/server/modules/lists/ls-task.js +6 -6
  113. package/server/modules/reports/calc-tinhgiafifo.js +8 -0
  114. package/server/modules/reports/calc-tinhluong.js +17 -16
  115. package/server/modules/reports/rp-baoCaoFifoKy.js +1 -0
  116. package/server/modules/reports/rp-congviectheobp.js +4 -4
  117. package/server/modules/reports/rp-congviectheodt.js +1 -1
  118. package/server/modules/reports/rp-congviectheokh.js +1 -1
  119. package/server/modules/reports/rp-congviectheonv.js +1 -1
  120. package/server/modules/reports/rp-dtbanletheoct.js +22 -23
  121. package/server/modules/reports/rp-dtbanletheokh.js +17 -20
  122. package/server/modules/reports/rp-dtbanletheokho.js +15 -18
  123. package/server/modules/reports/rp-hoahong.js +1 -1
  124. package/server/modules/reports/rp-sctvt.js +1 -1
  125. package/server/modules/reports/rp-sosanhkhvatt2.js +1 -1
  126. package/server/modules/reports/rp-thnxt.js +8 -8
  127. package/server/modules/reports/rp-tongquannvbh.js +1 -1
  128. package/server/modules/systems/sys-app.js +5 -5
  129. package/server/modules/vouchers/vo-so1.js +14 -14
@@ -1,28 +1,29 @@
1
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"),{bodyToJson,ERRORS,getNextSequence,asyncPostData,pushNotification,runWebhooks}=require("./controllerUtils"),handlers=require("./handlers");
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
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.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;this.creating=$options$$.onCreating;
5
- 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 asyncView($user$$,$items$$,$options$$){const $self$$=
6
- 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$$,$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$$=
7
- 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$$}):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$$=
8
- 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$$=>{$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"},
9
- 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||($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;
10
- 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$$=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"],
11
- ["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&&($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$$);
12
- $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$$+$rs$$})`):$callback$$()):$callback$$()})},$e$$=>{$callback$$($e$$)})})():
13
- $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$$,$_options$$={method:"GET",not_use_worker:!1,action_code:"view"}){const $self$$=
14
- 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"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;
15
- 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)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||
16
- $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$$=this.router;$_options$$.method=="DELETE"?$router$$.route($url$$).delete($handler_routeAction$$):
17
- $_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,$obj_request$$);let $obj$$;$obj$$=$obj_request$$.toObject?utils.convertObjectIdsToStrings($obj_request$$.toObject()):
18
- _.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&&$str_func$jscomp$2_str_func$$.custom_approve_user.forEach($trang_thai_approve$$=>{let $update_after_approve$$,
19
- $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$$={}}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,
20
- 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",$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,
21
- ...(($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$$=`return ${$approveData_condition$$}`);try{return evalute($approveData_condition$$,{master:$obj$$,data:$obj$$})}catch($e$$){return Logger.error("check condition approve",$e$$,$approveData_condition$$),
22
- !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$$,{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$$=
23
- $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$$=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",
24
- $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();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$$=
25
- $approveData$$.approve_users_custom;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);let $ds_nguoi_duyet_custom$$=await evalute(`return (async ()=>{
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 ()=>{
26
27
  try{
27
28
  ${$str_func$$}
28
29
  }catch(e){
@@ -111,12 +112,13 @@ ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)r
111
112
  controller.prototype.asyncPostData=function($obj$$,$options$$={}){Logger.info("[controller] postData",this.name);return asyncPostData($obj$$,this,$options$$)};
112
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(),
113
114
  $setRoute$$&&$setRoute$$(this.router))};
114
- 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||{};$req$$.body={q:$condition$$,...$options$$};try{const $result$$=await new Promise(($resolve$$,$reject$$)=>{let $id_app$$=$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$$===
115
- "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$$,$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$$==
116
- "function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};controller.runWebhooks=runWebhooks;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$$)}};
117
- controller.asyncPostData=async function($obj$$,$ctrl$$,$options$$={}){Logger.info("[controller] asyncPostData",this.name);return executeInTransaction(async()=>await asyncPostData($obj$$,$ctrl$$,$options$$),{useParent:!0})};controller.pushNotification=pushNotification;
118
- 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$$);
119
- ({obj_created:$e$jscomp$62_obj_created$$}=$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$$;}};
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$$;}};
120
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$$});
121
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$$)})});
122
124
  return $callback$$&&typeof $callback$$=="function"?$callback$$(null,$result$$):$result$$}catch($e$$){if($callback$$&&typeof $callback$$=="function")return $callback$$($e$$);throw $e$$;}};
@@ -1,36 +1,38 @@
1
1
  const _=require("lodash"),crypto=require("crypto"),numeral=require("numeral"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),reportinfo=global.getModel("reportinfo"),{evalute,getParameterData}=require("../libs/utils"),utils=require("../libs/utils"),handlers=require("./handlers"),{getCurrentSession,getCurrentStore}=require("../libs/sessionContext");
2
- class controllerRPT{constructor($router$$,$rptId$$,$fecthData$$,$options$$={}){this.module=this.name=$rptId$$;this.router=$router$$;this.options=$options$$;this.fecthDataFunc=$fecthData$$;global.report_controllers[$rptId$$.toUpperCase()]=this;this.base_path=$options$$.require_id_app===!1?"/":"/:id_app/";this.getData=this.getData.bind(this);this.createRoute=this.createRoute.bind(this);this.notNeedRight=async($user$$,$_options$$={})=>{let $nnr$$=$options$$.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=
3
- $nnr$$($user$$,$_options$$));return $nnr$$};this.handleResult=async($req$$,$data_response$$,$callback$$)=>{if($data_response$$.error)return $callback$$($data_response$$.error);$data_response$$=$data_response$$.result;var $func_string_rptInfo$$=await reportinfo.findOne({code:($req$$.query.report_info_code||$rptId$$).toLowerCase()}).lean();if($func_string_rptInfo$$&&$func_string_rptInfo$$.handle_data_expression_server){if($func_string_rptInfo$$.handle_data_expression_server.indexOf("async ")>=0)return $callback$$("async function is not allow");
4
- $func_string_rptInfo$$=`return (async ()=>{
2
+ class controllerRPT{constructor($router$$,$rptId$$,$fecthData$$,$options$$={}){this.module=this.name=$rptId$$;this.router=$router$$;this.options=$options$$;this.fecthDataFunc=$fecthData$$;global.report_controllers[$rptId$$.toUpperCase()]=this;this.base_path=$options$$.require_id_app===!1?"/":"/:id_app/";this.getData=this.getData.bind(this);this.runReport=this.runReport.bind(this);this.createRoute=this.createRoute.bind(this);this.notNeedRight=async($user$$,$_options$$={})=>{let $nnr$$=$options$$.notNeedRight;
3
+ _.isFunction($nnr$$)&&($nnr$$=$nnr$$($user$$,$_options$$));return $nnr$$};this.handleResult=async($req$$,$data_response$$,$callback$$)=>{if($data_response$$.error)return $callback$$($data_response$$.error);$data_response$$=$data_response$$.result;var $func_string_rptInfo$$=await reportinfo.findOne({code:($req$$.query.report_info_code||$rptId$$).toLowerCase()}).lean();if($func_string_rptInfo$$&&$func_string_rptInfo$$.handle_data_expression_server){if($func_string_rptInfo$$.handle_data_expression_server.indexOf("async ")>=
4
+ 0)return $callback$$("async function is not allow");$func_string_rptInfo$$=`return (async ()=>{
5
5
  try{
6
6
  ${$func_string_rptInfo$$.handle_data_expression_server}
7
7
  }catch(e){
8
8
  return {error:e}
9
9
  }
10
-
11
10
  })`;try{let $rs$$=await evalute($func_string_rptInfo$$,{data:$data_response$$,moment,numeral,condition:$req$$.query,user:$req$$.user,_,utils,getData:getParameterData})();if($rs$$){if($rs$$.error)return Logger.error("handle_data_expression_server",$rs$$.error,$func_string_rptInfo$$,$rptId$$),$callback$$($rs$$.error.message||$rs$$.error);$data_response$$=$rs$$}}catch($e$$){return Logger.error("handle_data_expression_server",$e$$,$func_string_rptInfo$$,$rptId$$),$callback$$($e$$.message||$e$$)}}$callback$$(null,
12
- $data_response$$)};this.getDataFunc=()=>{const $currentStore$$=getCurrentStore();Logger.info(`\u2705 [rptHanlder] [getDataFunc], storeId=${$currentStore$$?.storeId||"none"},sessionID=${getCurrentSession()?._debugId}`);return $options$$.stream?$fecthData$$:async($req$$,$callback$$)=>{Logger.info(`\u2705 [rptHanlder] Ch\u1ea1y b\u00e1o c\u00e1o ${$rptId$$}, sessionID=${getCurrentSession()?._debugId}`);try{await $fecthData$$($req$$,($e$$,$data$$)=>{this.handleResult($req$$,{error:$e$$,result:$data$$},
13
- ($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}catch($e$$){$callback$$($e$$)}}};const $mainRoute$$=async($req$$,$res$$)=>{if($options$$.stream)handlers.rptHandler(this,$req$$,($e$$,$rs$$)=>{if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$e$$,data:$rs$$},$res$$);if($e$$)return $e$$.error?$res$$.status(500).send($e$$):$res$$.status(500).send({error:$e$$.message||$e$$});$rs$$=="__end_stream__"?Logger.info("[controllerRPT] end stream...",$rptId$$):$res$$.send($rs$$)},$res$$);else{const {query:$query$$,
14
- body:$body$$,user:$user$$,params:$params$$,files:$files$$,protocol:$protocol$$}=$req$$;var $_req_host$$=configs?.api_url||$req$$.get("hostName");const $user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{if($_req_host$$={handler:"rptHandler",protocol:$protocol$$,host:$_req_host$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&
15
- $options$$.queue!=0){const $id_task$$=`report-${crypto.randomBytes(20).toString("hex")}`;if($options$$.waiting_message){const $status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$res$$.status(202).send([{message:$options$$.waiting_message,status_task:$status_task$$}])}global.reportMainPool.exec({id_task:$id_task$$,req:$_req_host$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,
16
- {error:$response$$.error,data:$response$$.result},$res$$);if($response$$.error)return $res$$.status(400).send($response$$.error);$res$$.send($response$$.result)}})}else $options$$.waiting_message&&$res$$.status(202).send([{message:$options$$.waiting_message}]),handlers.rptHandler(this,$_req_host$$,($e$$,$returnvalue$$)=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$e$$,data:$returnvalue$$},$res$$);if($e$$)return $res$$.status(400).send($e$$);
17
- $res$$.send($returnvalue$$)}})}catch($e$$){Logger.error("L\u1ed7i t\u1ea1o job cho b\u00e1o c\u00e1o",$rptId$$,$e$$),$res$$.status(400).send($e$$)}}},$excelRoute$$=async($ip$jscomp$1_req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$,protocol:$protocol$$}=$ip$jscomp$1_req$$;var $_req$jscomp$1_host$$=configs?.api_url||$ip$jscomp$1_req$$.get("host");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"]||
18
- $ip$jscomp$1_req$$.connection.remoteAddress;try{if($_req$jscomp$1_host$$={handler:"rptExcelHandler",protocol:$protocol$$,host:$_req$jscomp$1_host$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip$jscomp$1_req$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=0){const $id_task$$=`report-export-${crypto.randomBytes(20).toString("hex")}`;global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$1_host$$,module:$rptId$$.toUpperCase(),
19
- configs:JSON.stringify(configs)},$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=>{if($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.error)return $res$$.status(400).send($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.error);var $result_returnvalue$$=$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.result;$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=$result_returnvalue$$.type;$result_returnvalue$$=$result_returnvalue$$.data;switch($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$){case "xlsx":Logger.info("[controllerRPT] send file from worker...",
20
- $data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$,typeof $result_returnvalue$$);if(typeof $result_returnvalue$$=="string")return $res$$.send($result_returnvalue$$);$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xlsx');$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=$result_returnvalue$$;$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$?.type===
21
- "Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data)&&($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=Buffer.from($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data));$res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.length);$res$$.end($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$);break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");
22
- $res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".docx');$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=$result_returnvalue$$;$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$?.type==="Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data)&&($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=Buffer.from($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data));$res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.length);
23
- $res$$.end($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$);break;case "xml":$res$$.setHeader("Content-Type","application/xml");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xml');$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=$result_returnvalue$$;$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$?.type==="Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data)&&($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=
24
- Buffer.from($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data));$res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.length);$res$$.end($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$);break;default:$res$$.send($result_returnvalue$$)}})}else handlers.rptExcelHandler(this,$_req$jscomp$1_host$$,($e$jscomp$7_result$$,$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$)=>{if($e$jscomp$7_result$$)return $res$$.status(400).send($e$jscomp$7_result$$);
25
- $e$jscomp$7_result$$=$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data;switch($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.type){case "xlsx":Logger.info("[controllerRPT] send xls file...");if(typeof $e$jscomp$7_result$$=="string")return $res$$.send($e$jscomp$7_result$$);$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xlsx');$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=
26
- $e$jscomp$7_result$$;$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data)&&($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=Buffer.from($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.length);$res$$.end($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$);break;case "docx":$res$$.setHeader("Content-Type",
27
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".docx');$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=$e$jscomp$7_result$$;$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data)&&($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=Buffer.from($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data));
28
- $res$$.setHeader("Content-Length",$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.length);$res$$.end($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$);break;case "xml":$res$$.setHeader("Content-Type","application/xml");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xml');$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=$e$jscomp$7_result$$;$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data)&&
29
- ($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=Buffer.from($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.length);$res$$.end($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$);break;default:$res$$.send($e$jscomp$7_result$$)}})}catch($e$$){$res$$.status(400).send($e$$)}};$router$$&&($router$$.route(`${this.base_path+this.module}`).get($mainRoute$$),$router$$.route(`${this.base_path+
30
- this.module}`).post($mainRoute$$),$router$$.route(`${this.base_path+this.module}/excel`).get($excelRoute$$),$router$$.route(`${this.base_path+this.module}/excel`).post($excelRoute$$),$router$$.route(`${this.base_path+this.module}/export`).get($excelRoute$$),$router$$.route(`${this.base_path+this.module}/export`).post($excelRoute$$))}getData($req$$,$callback$$){const $ctrl$$=this;let $callback_run$$=!1;setImmediate(()=>{try{$ctrl$$.fecthDataFunc($req$$,($err$$,$data$$,$event$$)=>{if($ctrl$$.options?.stream){if($err$$)return $callback$$($err$$);
31
- $event$$!="data"||$callback_run$$||($callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)}))}else $callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}catch($e$$){Logger.error("[report controller] [getData]",$e$$),$callback$$($e$$.message)}})}createRoute($routeName$$,$callbackRoute_handler$$,$_options$$={method:"GET",not_use_worker:!1,action_code:"view"}){const $self$$=this;$_options$$.method=
32
- $_options$$.method?$_options$$.method.toUpperCase():"GET";const $route_action_key$$=`rpt_route_action_${$self$$.module}_${$routeName$$}_${$_options$$.method}`;$self$$[$route_action_key$$]=$callbackRoute_handler$$;$callbackRoute_handler$$=async function($ip$jscomp$2_req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$ip$jscomp$2_req$$;var $_req$jscomp$2_user_agent$$=$ip$jscomp$2_req$$.header("user-agent");$ip$jscomp$2_req$$=$ip$jscomp$2_req$$.ip||$ip$jscomp$2_req$$.headers["x-forwarded-for"]||
33
- $ip$jscomp$2_req$$.connection.remoteAddress;try{if($_req$jscomp$2_user_agent$$={handler:"rptCreateRouteHandler",routeName:$routeName$$,_options:$_options$$,route_action_key:$route_action_key$$,query:{...$query$$,...($body$$||{})},body:$body$$,user:$user$$,params:$params$$,user_agent:$_req$jscomp$2_user_agent$$,ip:$ip$jscomp$2_req$$,files:$files$$},!global.reportMainPool||global.reportMainPool.fullQueue()||$_options$$.not_use_worker)handlers.rptCreateRouteHandler($self$$,$_req$jscomp$2_user_agent$$,
34
- ($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($returnvalue$$)});else{const $id_task$$=`report-create-route-${crypto.randomBytes(20).toString("hex")}`;global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$2_user_agent$$,module:$self$$.module.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$6_result$$=>{if($response$jscomp$6_result$$.error)return $res$$.status(400).send($response$jscomp$6_result$$.error);({result:$response$jscomp$6_result$$}=
35
- $response$jscomp$6_result$$);$res$$.send($response$jscomp$6_result$$)})}}catch($e$$){$res$$.status(400).send($e$$)}};this.router&&($_options$$.method=="DELETE"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).delete($callbackRoute_handler$$):$_options$$.method=="POST"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).post($callbackRoute_handler$$):$_options$$.method=="PUT"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).put($callbackRoute_handler$$):
36
- (this.router.route(`${this.base_path+this.module}/${$routeName$$}`).get($callbackRoute_handler$$),this.router.route(`${this.base_path+this.module}/${$routeName$$}`).post($callbackRoute_handler$$)))}}module.exports=controllerRPT;
11
+ $data_response$$)};this.getDataFunc=()=>{const $currentStore$$=getCurrentStore();Logger.info(`\u2705 [ControllerRpt] [getDataFunc], storeId=${$currentStore$$?.storeId||"none"},sessionID=${getCurrentSession()?._debugId}`);return $options$$.stream?$fecthData$$:async($req$$,$callback$$)=>{Logger.info(`\u2705 [ControllerRpt] Ch\u1ea1y b\u00e1o c\u00e1o ${$rptId$$}, sessionID=${getCurrentSession()?._debugId}`);try{await $fecthData$$($req$$,($e$jscomp$1_response$$,$data$$)=>{$e$jscomp$1_response$$={error:$e$jscomp$1_response$$,
12
+ result:$data$$};Logger.info(`[ControllerRpt] x\u1eed l\u00fd k\u1ebft qu\u1ea3: ${$rptId$$}`);this.handleResult($req$$,$e$jscomp$1_response$$,($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})}catch($e$$){$callback$$($e$$)}}};const $mainRoute$$=async($req$$,$res$$)=>{if($options$$.stream)handlers.rptHandler(this,$req$$,($e$$,$rs$$)=>{if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$e$$,data:$rs$$},$res$$);if($e$$)return $e$$.error?$res$$.status(500).send($e$$):$res$$.status(500).send({error:$e$$.message||
13
+ $e$$});$rs$$=="__end_stream__"?Logger.info("[controllerRPT] end stream...",$rptId$$):$res$$.send($rs$$)},$res$$);else{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$,protocol:$protocol$$}=$req$$;var $_req_host$$=configs?.api_url||$req$$.get("hostName");const $user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{if($_req_host$$={handler:"rptHandler",protocol:$protocol$$,host:$_req_host$$,query:$query$$,
14
+ body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=0){const $id_task$$=`report-${crypto.randomBytes(20).toString("hex")}`;if($options$$.waiting_message){const $status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$res$$.status(202).send([{message:$options$$.waiting_message,status_task:$status_task$$}])}global.reportMainPool.exec({id_task:$id_task$$,req:$_req_host$$,
15
+ module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,{error:$response$$.error,data:$response$$.result},$res$$);if($response$$.error)return $res$$.status(400).send($response$$.error);$res$$.send($response$$.result)}})}else $options$$.waiting_message&&$res$$.status(202).send([{message:$options$$.waiting_message}]),handlers.rptHandler(this,$_req_host$$,($e$$,$returnvalue$$)=>{if(!$options$$.waiting_message){if($options$$.resHandler)return $options$$.resHandler($req$$,
16
+ {error:$e$$,data:$returnvalue$$},$res$$);if($e$$)return $res$$.status(400).send($e$$);$res$$.send($returnvalue$$)}})}catch($e$$){Logger.error("L\u1ed7i t\u1ea1o job cho b\u00e1o c\u00e1o",$rptId$$,$e$$),$res$$.status(400).send($e$$)}}},$excelRoute$$=async($ip$jscomp$1_req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$,protocol:$protocol$$}=$ip$jscomp$1_req$$;var $_req$jscomp$1_host$$=configs?.api_url||$ip$jscomp$1_req$$.get("host");const $user_agent$$=
17
+ $ip$jscomp$1_req$$.header("user-agent");$ip$jscomp$1_req$$=$ip$jscomp$1_req$$.ip||$ip$jscomp$1_req$$.headers["x-forwarded-for"]||$ip$jscomp$1_req$$.connection.remoteAddress;try{if($_req$jscomp$1_host$$={handler:"rptExcelHandler",protocol:$protocol$$,host:$_req$jscomp$1_host$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip$jscomp$1_req$$,files:$files$$},global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=0){const $id_task$$=`report-export-${crypto.randomBytes(20).toString("hex")}`;
18
+ global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$1_host$$,module:$rptId$$.toUpperCase(),configs:JSON.stringify(configs)},$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=>{if($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.error)return $res$$.status(400).send($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.error);var $result_returnvalue$$=$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.result;$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=
19
+ $result_returnvalue$$.type;$result_returnvalue$$=$result_returnvalue$$.data;switch($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$){case "xlsx":Logger.info("[controllerRPT] send file from worker...",$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$,typeof $result_returnvalue$$);if(typeof $result_returnvalue$$=="string")return $res$$.send($result_returnvalue$$);$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",
20
+ 'attachment; filename="'+$rptId$$+'".xlsx');$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=$result_returnvalue$$;$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$?.type==="Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data)&&($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=Buffer.from($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data));$res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.length);
21
+ $res$$.end($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$);break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".docx');$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=$result_returnvalue$$;$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$?.type==="Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data)&&
22
+ ($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=Buffer.from($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data));$res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.length);$res$$.end($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$);break;case "xml":$res$$.setHeader("Content-Type","application/xml");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xml');$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=
23
+ $result_returnvalue$$;$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$?.type==="Buffer"&&Array.isArray($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data)&&($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$=Buffer.from($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.data));$res$$.setHeader("Content-Length",$data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$.length);$res$$.end($data$jscomp$2_data$jscomp$3_data$jscomp$4_ext_response$$);break;default:$res$$.send($result_returnvalue$$)}})}else handlers.rptExcelHandler(this,
24
+ $_req$jscomp$1_host$$,($e$jscomp$7_result$$,$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$)=>{if($e$jscomp$7_result$$)return $res$$.status(400).send($e$jscomp$7_result$$);$e$jscomp$7_result$$=$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data;switch($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.type){case "xlsx":Logger.info("[controllerRPT] send xls file...");if(typeof $e$jscomp$7_result$$=="string")return $res$$.send($e$jscomp$7_result$$);$res$$.setHeader("Content-Type",
25
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".xlsx');$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=$e$jscomp$7_result$$;$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data)&&($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=Buffer.from($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data));
26
+ $res$$.setHeader("Content-Length",$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.length);$res$$.end($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$);break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$rptId$$+'".docx');$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=$e$jscomp$7_result$$;$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$?.type===
27
+ "Buffer"&&Array.isArray($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data)&&($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=Buffer.from($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.length);$res$$.end($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$);break;case "xml":$res$$.setHeader("Content-Type","application/xml");$res$$.setHeader("Content-Disposition",'attachment; filename="'+
28
+ $rptId$$+'".xml');$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=$e$jscomp$7_result$$;$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$?.type==="Buffer"&&Array.isArray($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data)&&($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$=Buffer.from($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$.length);$res$$.end($data$jscomp$5_data$jscomp$6_data$jscomp$7_returnvalue$$);
29
+ break;default:$res$$.send($e$jscomp$7_result$$)}})}catch($e$$){$res$$.status(400).send($e$$)}};$router$$&&($router$$.route(`${this.base_path+this.module}`).get($mainRoute$$),$router$$.route(`${this.base_path+this.module}`).post($mainRoute$$),$router$$.route(`${this.base_path+this.module}/excel`).get($excelRoute$$),$router$$.route(`${this.base_path+this.module}/excel`).post($excelRoute$$),$router$$.route(`${this.base_path+this.module}/export`).get($excelRoute$$),$router$$.route(`${this.base_path+this.module}/export`).post($excelRoute$$))}async getData($req$$,
30
+ $callback$$){const $ctrl$$=this;let $callback_run$$=!1;try{const $rs$$=await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.fecthDataFunc($req$$,($err$$,$data$$,$event$$)=>{if($ctrl$$.options?.stream){if($err$$)return $reject$$($err$$);$event$$!="data"||$callback_run$$||($callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)}))}else $callback_run$$=!0,this.handleResult($req$$,{error:$err$$,result:$data$$},($e$$,$rs$$)=>
31
+ {if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})})});return $callback$$?$callback$$(null,$rs$$):$rs$$}catch($e$$){Logger.error("[report controller] [getData]",$e$$);if($callback$$)return $callback$$($e$$.message);throw $e$$;}}runReport($user$$,$condition_id_app$$={},$req$$,$options$$={pagination:1,limit:10}){$req$$=$req$$||{};$req$$.query={...($req$$.query||{}),...$options$$};$req$$.body=$condition_id_app$$;$req$$.host="";$req$$.user_agent="";$req$$.ip="";$condition_id_app$$=$req$$.query.id_app||
32
+ $condition_id_app$$.id_app;if(this.require_id_app&&!$condition_id_app$$)return this("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=$condition_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$$;$req$$.handler="rptHandler";$req$$.params={};return new Promise(($resolve$$,
33
+ $reject$$)=>{try{if(global.reportMainPool&&!global.reportMainPool.fullQueue()&&$options$$.queue!=0){const $id_task$$=`report-export-${crypto.randomBytes(20).toString("hex")}`;global.reportMainPool.exec({id_task:$id_task$$,req:$req$$,module:this.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $reject$$($response$$.error);$resolve$$($response$$.result)})}else handlers.rptHandler(this,$req$$,($e$$,$returnvalue$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($returnvalue$$)})}catch($e$$){$reject$$($e$$)}})}createRoute($routeName$$,
34
+ $callbackRoute_handler$$,$_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$$=`rpt_route_action_${$self$$.module}_${$routeName$$}_${$_options$$.method}`;$self$$[$route_action_key$$]=$callbackRoute_handler$$;$callbackRoute_handler$$=async function($ip$jscomp$2_req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,files:$files$$}=$ip$jscomp$2_req$$;
35
+ var $_req$jscomp$2_user_agent$$=$ip$jscomp$2_req$$.header("user-agent");$ip$jscomp$2_req$$=$ip$jscomp$2_req$$.ip||$ip$jscomp$2_req$$.headers["x-forwarded-for"]||$ip$jscomp$2_req$$.connection.remoteAddress;try{if($_req$jscomp$2_user_agent$$={handler:"rptCreateRouteHandler",routeName:$routeName$$,_options:$_options$$,route_action_key:$route_action_key$$,query:{...$query$$,...($body$$||{})},body:$body$$,user:$user$$,params:$params$$,user_agent:$_req$jscomp$2_user_agent$$,ip:$ip$jscomp$2_req$$,files:$files$$},
36
+ !global.reportMainPool||global.reportMainPool.fullQueue()||$_options$$.not_use_worker)handlers.rptCreateRouteHandler($self$$,$_req$jscomp$2_user_agent$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($returnvalue$$)});else{const $id_task$$=`report-create-route-${crypto.randomBytes(20).toString("hex")}`;global.reportMainPool.exec({id_task:$id_task$$,req:$_req$jscomp$2_user_agent$$,module:$self$$.module.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$7_result$$=>
37
+ {if($response$jscomp$7_result$$.error)return $res$$.status(400).send($response$jscomp$7_result$$.error);({result:$response$jscomp$7_result$$}=$response$jscomp$7_result$$);$res$$.send($response$jscomp$7_result$$)})}}catch($e$$){$res$$.status(400).send($e$$)}};this.router&&($_options$$.method=="DELETE"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).delete($callbackRoute_handler$$):$_options$$.method=="POST"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).post($callbackRoute_handler$$):
38
+ $_options$$.method=="PUT"?this.router.route(`${this.base_path+this.module}/${$routeName$$}`).put($callbackRoute_handler$$):(this.router.route(`${this.base_path+this.module}/${$routeName$$}`).get($callbackRoute_handler$$),this.router.route(`${this.base_path+this.module}/${$routeName$$}`).post($callbackRoute_handler$$)))}}module.exports=controllerRPT;
@@ -7,23 +7,23 @@ const hasRight=async($ctrl$$,$req$$,$listinfo_code$$,$id_app$$,$shareRoute$$)=>{
7
7
  $e$$=>{if($e$$)return $reject$$({error:$e$$.error||$e$$.message||$e$$});if(!$permission$$)return $resolve$$("0");$resolve$$($permission$$)});else{if(!$permission$$)return $resolve$$("0");$resolve$$($permission$$)}},{notNeedRight:$notNeedRight$$,right_code:$listinfo_code$$})})})},handleDynamicCondition=async($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$)=>{let {condition:$condition$$,id_app:$id_app$$}=$appCondition$$,$userInfo$$={...$req$$.user,current_id_app:$id_app$$};!$id_app$$||$userInfo$$.current_app_info&&
8
8
  $userInfo$$.current_app_info?._id?.toString()==$id_app$$||($userInfo$$.current_app_info=await global.getModel("app").findOne({_id:$id_app$$}).lean());$appCondition$$.userInfo=$userInfo$$;let $new_condition$$=await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.finding?$ctrl$$.finding($userInfo$$,$condition$$,function($error$$,$condition$$){if($error$$)return $reject$$({error:$error$$.message||$error$$.error||$error$$});$ctrl$$.dynamicFinding?$ctrl$$.dynamicFinding($userInfo$$,$condition$$,function($e$$,
9
9
  $condition$$){if($e$$)return Logger.error("dynamicFinding",$e$$),$e$$.error?$reject$$($e$$):$reject$$({error:$e$$.message||$e$$});$resolve$$($condition$$)},{listinfo_code:$listinfo_code$$,req:$req$$}):$resolve$$($condition$$)},{req:$req$$}):$ctrl$$.dynamicFinding?$ctrl$$.dynamicFinding($userInfo$$,$condition$$,function($e$$,$condition$$){if($e$$)return Logger.error("dynamicFinding",$e$$),$e$$.error?$reject$$($e$$):$reject$$({error:$e$$.message||$e$$});$resolve$$($condition$$)},{listinfo_code:$listinfo_code$$,
10
- req:$req$$}):$resolve$$($condition$$)});$appCondition$$.condition=$new_condition$$;return $appCondition$$},buildCondition=async($ctrl$$,$req$$,$listinfo_code$$,$appConditions_shareRoute$$)=>{var $body_ds_id_app$$={};_.isObject($req$$.body)&&($body_ds_id_app$$=$req$$.body);let $query$$={...$req$$.query,...$body_ds_id_app$$};($body_ds_id_app$$=$query$$.id_apps)&&typeof $body_ds_id_app$$=="string"&&($body_ds_id_app$$=[$body_ds_id_app$$]);let $all_app$$=$query$$.all_app;$req$$.query=$query$$;if($query$$.sort)if(typeof $query$$.sort==
11
- "object")var $or_sort$$=$query$$.sort;else try{$or_sort$$=JSONParser($query$$.sort)}catch($e$$){throw Logger.error("error parse json",$e$$,$query$$.sort),`Sort ${$query$$.sort} is not valid`;}!$or_sort$$&&$ctrl$$.sort&&($or_sort$$=Object.assign({},$ctrl$$.sort));$req$$.sort=$or_sort$$;$req$$.fetch_by_groups=$query$$.fetch_by_groups;delete $query$$.fetch_by_groups;let $condition$$={};$or_sort$$=[];const $hasCodeByName$$=$k$$=>FIELDS_NEED_CONVERT_CODE[$k$$]&&_.has($ctrl$$.model.schema.paths,FIELDS_NEED_CONVERT_CODE[$k$$].code)&&
12
- $ctrl$$.model.modelName!==FIELDS_NEED_CONVERT_CODE[$k$$].model?!0:!1;for(var $key$$ in $query$$)if($key$$!=="id_app"&&$key$$!=="access_token"&&$key$$!=="limit")if($key$$==="_id"&&global.mongoose.Types.ObjectId.isValid($query$$._id))try{let $id$$=global.mongoose.Types.ObjectId($query$$._id);$or_sort$$.push({_id:$id$$})}catch($error$$){Logger.error("find condition",$error$$)}else{if($key$$==="q"&&$query$$[$key$$])try{let $q$$=_.isObject($query$$[$key$$])?$query$$[$key$$]:JSONParser($query$$[$key$$]);
13
- $req$$.fetch_by_groups=$req$$.fetch_by_groups||$q$$.fetch_by_groups;delete $q$$.fetch_by_groups;$body_ds_id_app$$=$q$$.id_apps||$body_ds_id_app$$;$all_app$$=$q$$.all_app||$all_app$$;delete $q$$.all_app;delete $q$$.id_apps;if(Object.keys($q$$).includes("_id"))if(!$q$$._id)delete $q$$._id;else if(typeof $q$$._id!=="object"&&!global.mongoose.Types.ObjectId.isValid($q$$._id))throw Logger.error("Condition is not valid",$q$$),"Condition is not valid";for(let $k_q$$ in $q$$)if(typeof $q$$[$k_q$$]=="string"&&
14
- $ctrl$$.model.schema.paths[$k_q$$]?.instance?.toLowerCase()=="date"){let {fromDate:$fromDate$$,toDate:$toDate$$}=getDateRangeByType($q$$[$k_q$$]);$fromDate$$&&$toDate$$&&($q$$[$k_q$$]={$gte:$fromDate$$,$lte:$toDate$$})}($condition$$=$q$$)||($condition$$={});continue}catch($e$$){throw Logger.error("find condition",$e$$,$query$$[$key$$]),"Condition is not valid";}if($key$$!=="fields"&&(_.has($ctrl$$.model.schema.paths,$key$$)||$hasCodeByName$$($key$$)))if($ctrl$$.options.findExact[$key$$])$condition$$[$key$$]=
15
- $query$$[$key$$];else{let $item$$={};if($ctrl$$.model.schema.paths[$key$$]?.instance?.toLowerCase()=="number")$item$$[$key$$]=Number($query$$[$key$$]);else if($ctrl$$.model.schema.paths[$key$$]?.instance?.toLowerCase()=="date"){let {fromDate:$fromDate$$,toDate:$toDate$$}=getDateRangeByType($query$$[$key$$]);$item$$[$key$$]=$fromDate$$&&$toDate$$?{$gte:$fromDate$$,$lte:$toDate$$}:new Date($query$$[$key$$])}else $ctrl$$.model.schema.paths[$key$$]?.instance?.toLowerCase()=="string"?$item$$[$key$$]={$regex:($query$$[$key$$]||
16
- "").trim(),$options:"i"}:$item$$[$key$$]=$query$$[$key$$];$or_sort$$.push($item$$)}else $key$$==="$text"&&$or_sort$$.push({$text:{$search:$query$$[$key$$]}})}$or_sort$$.length!==0&&($query$$.cType==="$and"?$condition$$.$and=$or_sort$$:$condition$$.$or=$or_sort$$);$key$$=queryBuilding.convertLegacyQuery(_.cloneDeep($condition$$));$condition$$=queryBuilding.buildSearchQuery($key$$);$appConditions_shareRoute$$||$ctrl$$.require_id_app==0?$appConditions_shareRoute$$=[{id_app:$req$$.user.current_id_app,
17
- condition:{id_app:$req$$.user.current_id_app,...$condition$$}}]:($body_ds_id_app$$=($body_ds_id_app$$||[]).filter($id$$=>global.mongoose.Types.ObjectId.isValid($id$$)),$body_ds_id_app$$.length==0&&($all_app$$?(Logger.warn("[findHanlder] t\u00ecm t\u1ea5t c\u1ea3 c\u00e1c c\u00f4ng ty c\u00f3 quy\u1ec1n..."),$body_ds_id_app$$=(await global.getModel("participant").find({email:$req$$.user.email},{id_app:1}).lean()).map($a$$=>$a$$.id_app)):$body_ds_id_app$$=[$req$$.user.current_id_app]),$appConditions_shareRoute$$=
18
- $body_ds_id_app$$.map($id_app$$=>({id_app:$id_app$$,condition:{...$condition$$,id_app:$id_app$$}})));return Promise.all($appConditions_shareRoute$$.map($appCondition$$=>handleDynamicCondition($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$)))},getRightByItem=async($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$,$shareRoute$$)=>$shareRoute$$?$appCondition$$:new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,{action:"view"});permission.getRightByItem($appCondition$$.id_app,
19
- $ctrl$$.model,$req$$.user.email,function($e$$,$_condition$$,$admin$$){if($e$$)return Logger.error("[findHandler] [getRightByItem] L\u1ed7i Kh\u00f4ng c\u00f3 quy\u1ec1n:",$e$$),$reject$$({error:$e$$.error||$e$$.message||$e$$,code:$e$$.code||ERRORS.ERR_NOT_PERMIT_CODE});if($appCondition$$.addmin=$admin$$)return $resolve$$($appCondition$$);$appCondition$$.condition||($appCondition$$.condition={});$appCondition$$.condition.$and||($appCondition$$.condition.$and=[]);if($ctrl$$.options.onRightByItem)$ctrl$$.options.onRightByItem($req$$.user,
20
- $_condition$$,($e$$,$_condition$$)=>{if($e$$)return $reject$$({error:$e$$.error||$e$$.message||$e$$});_.isObject($_condition$$)&&Object.keys($_condition$$).length>0&&$appCondition$$.condition.$and.push($_condition$$);$appCondition$$.condition_assign=$_condition$$;$resolve$$($appCondition$$)});else _.isObject($_condition$$)&&Object.keys($_condition$$).length>0&&$appCondition$$.condition.$and.push($_condition$$),$resolve$$($appCondition$$)},$ctrl$$.name,{notNeedRight:$notNeedRight$$,right_code:$listinfo_code$$})})}),
21
- getRightByCollectionRef=async($ctrl$$,$req$$,$appCondition$$,$shareRoute$$)=>$shareRoute$$||$appCondition$$.admin||!$appCondition$$.condition_assign||Object.keys($appCondition$$.condition_assign).length===0?$appCondition$$:new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{if($ctrl$$.options.assignWiths){let $condition_assignwiths$$={};async.map($ctrl$$.options.assignWiths,($col$$,$callback$$)=>{let $m$$=global.getModel($col$$.ref_collection);permission.getRightByItem($appCondition$$.id_app,
22
- $m$$,$req$$.user.email,function($e$$,$_condition$$,$admin$$){if($e$$)return $callback$$({e:$e$$.error||$e$$.message||$e$$,code:$e$$.code||ERRORS.ERR_NOT_PERMIT_CODE});if($admin$$)return $callback$$(null);$_condition$$.id_app=$appCondition$$.id_app;$appCondition$$.condition[$col$$.ref_field]&&($_condition$$[$col$$.ref_field]=$appCondition$$.condition[$col$$.ref_field]);$m$$.find($_condition$$,{[$col$$.ref_field]:1}).lean().then($dsdt_rs$$=>{$dsdt_rs$$=$dsdt_rs$$.map($r$$=>$r$$[$col$$.ref_field]);$dsdt_rs$$.push("");
23
- $dsdt_rs$$.push(null);$condition_assignwiths$$[$col$$.field]={$in:$dsdt_rs$$};$callback$$()}).catch($e$$=>{$callback$$($e$$)})},$col$$.ref_module)},$condition$jscomp$6_e$$=>{if($condition$jscomp$6_e$$)return $reject$$({error:$condition$jscomp$6_e$$.error||$condition$jscomp$6_e$$.message||$condition$jscomp$6_e$$});Object.keys($condition_assignwiths$$).length>0&&($condition$jscomp$6_e$$=$appCondition$$.condition_assign||$appCondition$$.condition,$condition$jscomp$6_e$$.$and||($condition$jscomp$6_e$$.$and=
24
- []),$condition$jscomp$6_e$$.$and.push($condition_assignwiths$$),$appCondition$$.condition=$condition$jscomp$6_e$$);$resolve$$($appCondition$$)})}else $resolve$$($appCondition$$)})}),findHanlder=async($ctrl$$,$req$$,$callback$$)=>{let $model$$=$ctrl$$.model,$shareRoute$$=$req$$.shareRoute,$listinfo_code$$=$req$$?.body?.["listinfo-code"]||$req$$?.query["listinfo-code"]||$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"];if(($listinfo_code$$=$listinfo_code$$||$ctrl$$.name)&&$listinfo_code$$!=
25
- $ctrl$$.name){var $condition$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$condition$$?($condition$$.api_code||$condition$$.code)!=$ctrl$$.name&&($listinfo_code$$=$ctrl$$.name):$listinfo_code$$=$ctrl$$.name}let $appConditions$$;try{$appConditions$$=await buildCondition($ctrl$$,$req$$,$listinfo_code$$,$shareRoute$$);for(let $appCondition$$ of $appConditions$$){await hasRight($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$.id_app,$shareRoute$$)=="0"&&
26
- ($appCondition$$.condition._id={$in:[]});await getRightByItem($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$,$shareRoute$$);await getRightByCollectionRef($ctrl$$,$req$$,$appCondition$$,$shareRoute$$);({condition:$condition$$}=$appCondition$$);for(let $key_q$$ in $condition$$)if($key_q$$==="_id"||$key_q$$.startsWith("$")||$key_q$$.includes(".")||_.has($model$$.schema.paths,$key_q$$)||delete $condition$$[$key_q$$],$key_q$$=="$and"){for(let $dk$$ of $condition$$.$and)for(let $key_q$$ in $dk$$)$key_q$$===
10
+ req:$req$$}):$resolve$$($condition$$)});$appCondition$$.condition=$new_condition$$;return $appCondition$$},buildCondition=async($ctrl$$,$req$$,$listinfo_code$$,$appConditions_shareRoute$$)=>{var $body_ds_id_app$$={};_.isObject($req$$.body)&&($body_ds_id_app$$=$req$$.body);let $query$$={...$req$$.query,...$body_ds_id_app$$};$query$$.tu_ngay&&($query$$.tu_ngay=moment($query$$.tu_ngay).startOf("date").toDate());$query$$.den_ngay&&($query$$.den_ngay=moment($query$$.den_ngay).endOf("date").toDate());($body_ds_id_app$$=
11
+ $query$$.id_apps)&&typeof $body_ds_id_app$$=="string"&&($body_ds_id_app$$=[$body_ds_id_app$$]);let $all_app$$=$query$$.all_app;$req$$.query=$query$$;if($query$$.sort)if(typeof $query$$.sort=="object")var $or_sort$$=$query$$.sort;else try{$or_sort$$=JSONParser($query$$.sort)}catch($e$$){throw Logger.error("error parse json",$e$$,$query$$.sort),`Sort ${$query$$.sort} is not valid`;}!$or_sort$$&&$ctrl$$.sort&&($or_sort$$=Object.assign({},$ctrl$$.sort));$req$$.sort=$or_sort$$;$req$$.fetch_by_groups=$query$$.fetch_by_groups;
12
+ delete $query$$.fetch_by_groups;let $condition$$={};$or_sort$$=[];const $hasCodeByName$$=$k$$=>FIELDS_NEED_CONVERT_CODE[$k$$]&&_.has($ctrl$$.model.schema.paths,FIELDS_NEED_CONVERT_CODE[$k$$].code)&&$ctrl$$.model.modelName!==FIELDS_NEED_CONVERT_CODE[$k$$].model?!0:!1;for(var $key$$ in $query$$)if($key$$!=="id_app"&&$key$$!=="access_token"&&$key$$!=="limit")if($key$$==="_id"&&global.mongoose.Types.ObjectId.isValid($query$$._id))try{let $id$$=global.mongoose.Types.ObjectId($query$$._id);$or_sort$$.push({_id:$id$$})}catch($error$$){Logger.error("find condition",
13
+ $error$$)}else{if($key$$==="q"&&$query$$[$key$$])try{let $q$$=_.isObject($query$$[$key$$])?$query$$[$key$$]:JSONParser($query$$[$key$$]);$req$$.fetch_by_groups=$req$$.fetch_by_groups||$q$$.fetch_by_groups;delete $q$$.fetch_by_groups;$body_ds_id_app$$=$q$$.id_apps||$body_ds_id_app$$;$all_app$$=$q$$.all_app||$all_app$$;delete $q$$.all_app;delete $q$$.id_apps;if(Object.keys($q$$).includes("_id"))if(!$q$$._id)delete $q$$._id;else if(typeof $q$$._id!=="object"&&!global.mongoose.Types.ObjectId.isValid($q$$._id))throw Logger.error("Condition is not valid",
14
+ $q$$),"Condition is not valid";for(let $k_q$$ in $q$$)if(typeof $q$$[$k_q$$]=="string"&&$ctrl$$.model.schema.paths[$k_q$$]?.instance?.toLowerCase()=="date"){let {fromDate:$fromDate$$,toDate:$toDate$$}=getDateRangeByType($q$$[$k_q$$]);$fromDate$$&&$toDate$$&&($q$$[$k_q$$]={$gte:$fromDate$$,$lte:$toDate$$})}($condition$$=$q$$)||($condition$$={});continue}catch($e$$){throw Logger.error("find condition",$e$$,$query$$[$key$$]),"Condition is not valid";}if($key$$!=="fields"&&(_.has($ctrl$$.model.schema.paths,
15
+ $key$$)||$hasCodeByName$$($key$$)))if($ctrl$$.options.findExact[$key$$])$condition$$[$key$$]=$query$$[$key$$];else{let $item$$={};if($ctrl$$.model.schema.paths[$key$$]?.instance?.toLowerCase()=="number")$item$$[$key$$]=Number($query$$[$key$$]);else if($ctrl$$.model.schema.paths[$key$$]?.instance?.toLowerCase()=="date"){let {fromDate:$fromDate$$,toDate:$toDate$$}=getDateRangeByType($query$$[$key$$]);$item$$[$key$$]=$fromDate$$&&$toDate$$?{$gte:$fromDate$$,$lte:$toDate$$}:new Date($query$$[$key$$])}else $ctrl$$.model.schema.paths[$key$$]?.instance?.toLowerCase()==
16
+ "string"?$item$$[$key$$]={$regex:($query$$[$key$$]||"").trim(),$options:"i"}:$item$$[$key$$]=$query$$[$key$$];$or_sort$$.push($item$$)}else $key$$==="$text"&&$or_sort$$.push({$text:{$search:$query$$[$key$$]}})}$or_sort$$.length!==0&&($query$$.cType==="$and"?$condition$$.$and=$or_sort$$:$condition$$.$or=$or_sort$$);$key$$=queryBuilding.convertLegacyQuery(_.cloneDeep($condition$$));$condition$$=queryBuilding.buildSearchQuery($key$$);$appConditions_shareRoute$$||$ctrl$$.require_id_app==0?$appConditions_shareRoute$$=
17
+ [{id_app:$req$$.user.current_id_app,condition:{id_app:$req$$.user.current_id_app,...$condition$$}}]:($body_ds_id_app$$=($body_ds_id_app$$||[]).filter($id$$=>global.mongoose.Types.ObjectId.isValid($id$$)),$body_ds_id_app$$.length==0&&($all_app$$?(Logger.warn("[findHanlder] t\u00ecm t\u1ea5t c\u1ea3 c\u00e1c c\u00f4ng ty c\u00f3 quy\u1ec1n..."),$body_ds_id_app$$=(await global.getModel("participant").find({email:$req$$.user.email},{id_app:1}).lean()).map($a$$=>$a$$.id_app)):$body_ds_id_app$$=[$req$$.user.current_id_app]),
18
+ $appConditions_shareRoute$$=$body_ds_id_app$$.map($id_app$$=>({id_app:$id_app$$,condition:{...$condition$$,id_app:$id_app$$}})));return Promise.all($appConditions_shareRoute$$.map($appCondition$$=>handleDynamicCondition($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$)))},getRightByItem=async($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$,$shareRoute$$)=>$shareRoute$$?$appCondition$$:new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,
19
+ {action:"view"});permission.getRightByItem($appCondition$$.id_app,$ctrl$$.model,$req$$.user.email,function($e$$,$_condition$$,$admin$$){if($e$$)return Logger.error("[findHandler] [getRightByItem] L\u1ed7i Kh\u00f4ng c\u00f3 quy\u1ec1n:",$e$$),$reject$$({error:$e$$.error||$e$$.message||$e$$,code:$e$$.code||ERRORS.ERR_NOT_PERMIT_CODE});if($appCondition$$.addmin=$admin$$)return $resolve$$($appCondition$$);$appCondition$$.condition||($appCondition$$.condition={});$appCondition$$.condition.$and||($appCondition$$.condition.$and=
20
+ []);if($ctrl$$.options.onRightByItem)$ctrl$$.options.onRightByItem($req$$.user,$_condition$$,($e$$,$_condition$$)=>{if($e$$)return $reject$$({error:$e$$.error||$e$$.message||$e$$});_.isObject($_condition$$)&&Object.keys($_condition$$).length>0&&$appCondition$$.condition.$and.push($_condition$$);$appCondition$$.condition_assign=$_condition$$;$resolve$$($appCondition$$)});else _.isObject($_condition$$)&&Object.keys($_condition$$).length>0&&$appCondition$$.condition.$and.push($_condition$$),$resolve$$($appCondition$$)},
21
+ $ctrl$$.name,{notNeedRight:$notNeedRight$$,right_code:$listinfo_code$$})})}),getRightByCollectionRef=async($ctrl$$,$req$$,$appCondition$$,$shareRoute$$)=>$shareRoute$$||$appCondition$$.admin||!$appCondition$$.condition_assign||Object.keys($appCondition$$.condition_assign).length===0?$appCondition$$:new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{if($ctrl$$.options.assignWiths){let $condition_assignwiths$$={};async.map($ctrl$$.options.assignWiths,($col$$,$callback$$)=>{let $m$$=global.getModel($col$$.ref_collection);
22
+ permission.getRightByItem($appCondition$$.id_app,$m$$,$req$$.user.email,function($e$$,$_condition$$,$admin$$){if($e$$)return $callback$$({e:$e$$.error||$e$$.message||$e$$,code:$e$$.code||ERRORS.ERR_NOT_PERMIT_CODE});if($admin$$)return $callback$$(null);$_condition$$.id_app=$appCondition$$.id_app;$appCondition$$.condition[$col$$.ref_field]&&($_condition$$[$col$$.ref_field]=$appCondition$$.condition[$col$$.ref_field]);$m$$.find($_condition$$,{[$col$$.ref_field]:1}).lean().then($dsdt_rs$$=>{$dsdt_rs$$=
23
+ $dsdt_rs$$.map($r$$=>$r$$[$col$$.ref_field]);$dsdt_rs$$.push("");$dsdt_rs$$.push(null);$condition_assignwiths$$[$col$$.field]={$in:$dsdt_rs$$};$callback$$()}).catch($e$$=>{$callback$$($e$$)})},$col$$.ref_module)},$condition$jscomp$6_e$$=>{if($condition$jscomp$6_e$$)return $reject$$({error:$condition$jscomp$6_e$$.error||$condition$jscomp$6_e$$.message||$condition$jscomp$6_e$$});Object.keys($condition_assignwiths$$).length>0&&($condition$jscomp$6_e$$=$appCondition$$.condition_assign||$appCondition$$.condition,
24
+ $condition$jscomp$6_e$$.$and||($condition$jscomp$6_e$$.$and=[]),$condition$jscomp$6_e$$.$and.push($condition_assignwiths$$),$appCondition$$.condition=$condition$jscomp$6_e$$);$resolve$$($appCondition$$)})}else $resolve$$($appCondition$$)})}),findHanlder=async($ctrl$$,$req$$,$callback$$)=>{let $model$$=$ctrl$$.model,$shareRoute$$=$req$$.shareRoute,$listinfo_code$$=$req$$?.body?.["listinfo-code"]||$req$$?.query["listinfo-code"]||$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"];
25
+ if(($listinfo_code$$=$listinfo_code$$||$ctrl$$.name)&&$listinfo_code$$!=$ctrl$$.name){var $condition$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$condition$$?($condition$$.api_code||$condition$$.code)!=$ctrl$$.name&&($listinfo_code$$=$ctrl$$.name):$listinfo_code$$=$ctrl$$.name}let $appConditions$$;try{$appConditions$$=await buildCondition($ctrl$$,$req$$,$listinfo_code$$,$shareRoute$$);for(let $appCondition$$ of $appConditions$$){await hasRight($ctrl$$,
26
+ $req$$,$listinfo_code$$,$appCondition$$.id_app,$shareRoute$$)=="0"&&($appCondition$$.condition._id={$in:[]});await getRightByItem($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$,$shareRoute$$);await getRightByCollectionRef($ctrl$$,$req$$,$appCondition$$,$shareRoute$$);({condition:$condition$$}=$appCondition$$);for(let $key_q$$ in $condition$$)if($key_q$$==="_id"||$key_q$$.startsWith("$")||$key_q$$.includes(".")||_.has($model$$.schema.paths,$key_q$$)||delete $condition$$[$key_q$$],$key_q$$=="$and"){for(let $dk$$ of $condition$$.$and)for(let $key_q$$ in $dk$$)$key_q$$===
27
27
  "_id"||$key_q$$.startsWith("$")||$key_q$$.includes(".")||_.has($model$$.schema.paths,$key_q$$)||delete $dk$$[$key_q$$];$condition$$.$and=$condition$$.$and.filter($a$$=>Object.keys($a$$).length>0)}$appCondition$$.id_app&&($condition$$=await convertNamesToCodes($appCondition$$.id_app,$condition$$,FIELDS_NEED_CONVERT_CODE,$model$$),$appCondition$$.condition=$condition$$);if($shareRoute$$){$condition$$.shared=!0;let $id_sellers$$=(await global.getModel("app").find({sale_online:!0},{_id:1}).lean()).map($a$$=>
28
28
  $a$$._id);$condition$$.$and||($condition$$.$and=[]);$condition$$.$and.push({id_app:{$in:$id_sellers$$}});$condition$$.id_app&&$condition$$.$and.push({id_app:$condition$$.id_app})}else _.has($model$$.schema.paths,"id_app")&&$ctrl$$.require_id_app!==!1&&($condition$$.id_app=$appCondition$$.id_app);$req$$.user.email==="public"&&_.has($model$$.schema.paths,"session_created")&&($condition$$.session_created=($req$$.cookies||{}).uid);_.extend($condition$$,$ctrl$$.keyValues);utils.deleteEmptyObject($condition$$);
29
29
  delete $condition$$.$where;_.has($model$$.schema.paths,"ma_ct")&&$ctrl$$.options.isVoucher&&($condition$$.ma_ct=$ctrl$$.name.toUpperCase());let $condition_group$$;$req$$.fetch_by_groups&&$req$$.fetch_by_groups.model_group&&$req$$.fetch_by_groups.field&&($condition_group$$=$req$$.fetch_by_groups.condition||{},$condition_group$$.status=!0,$condition_group$$.id_app=$appCondition$$.id_app,$condition$$[$req$$.fetch_by_groups.field]&&($condition_group$$[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]=
@@ -44,9 +44,9 @@ $limit$$?($key$$=(Number($page$$)-1)*$limit$$,$key$$<0&&($key$$=0),$query$$.skip
44
44
  $explainResult$$.executionStats||{};$callback$$(null,[{queryPlanner:{parsedQuery:$parsedQuery$$,winningPlan:$winningPlan$$},executionStats:{executionSuccess:$executionSuccess$$,nReturned:$nReturned$$,executionTimeMillis:$executionTimeMillis$$,totalKeysExamined:$totalKeysExamined$$,totalDocsExamined:$totalDocsExamined$$},_id:""}])}catch($e$$){$callback$$($e$$)}}else $query$$.lean().then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})})};let $data_log$$=$req$$.query;delete $data_log$$.access_token;
45
45
  $appConditions$$.forEach($a$jscomp$11_id_app$$=>{({id_app:$a$jscomp$11_id_app$$}=$a$jscomp$11_id_app$$);$req$$.user&&!$data_log$$.count&&$ctrl$$.name!=="log"&&$ctrl$$.name!=="labelinfo"&&$ctrl$$.name!=="listinfo"&&$ctrl$$.name!=="reportinfo"&&$ctrl$$.name!=="moduleinfo"&&$ctrl$$.name!=="options"&&global.getModel("log").create({id_app:$a$jscomp$11_id_app$$,id_func:$ctrl$$.name,action:"QUERY",data:{condition:JSON.stringify($data_log$$)}},$req$$.user.email,$req$$.user_agent,$req$$)});let $page_fetch$$=
46
46
  Number($req$$.query.page||0);isNaN($page_fetch$$)&&($page_fetch$$=0);let $limit$$=$req$$.query.limit;$limit$$&&=Number($limit$$);isNaN($limit$$)&&($limit$$=0);$req$$.query.type_data!=="xlsx"&&$req$$.query.type_data!=="json_file"&&$req$$.query.type_data!=="json_export"&&$req$$.query.rpt!="1"&&($limit$$||=$ctrl$$.require_id_app!==!1&&$ctrl$$.name!=="right"&&$ctrl$$.name!=="labelinfo"?20:500,$limit$$&&$limit$$>500&&!$req$$.query.print&&$ctrl$$.require_id_app!==!1&&$ctrl$$.name!=="right"&&$ctrl$$.name!==
47
- "labelinfo"&&($limit$$=500));$req$$.pagination&&($limit$$||=20,$req$$.pagination.page=$page_fetch$$?$page_fetch$$:1,$req$$.pagination.limit=$limit$$,$req$$.pagination.totalPages=Math.ceil($req$$.pagination.total/$limit$$));let $condition_groups$$=[];if($condition_group$$.length>0){let $field_ref$$=$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field;$fields_fields$jscomp$1_groups_number_notfields_rows_number$$={[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]:1};let $limit_group$$=
48
- $req$$.fetch_by_groups.limit_group||10,$page$$=Number($req$$.query.page||0);isNaN($page$$)&&($page$$=0);let $skip$$=0;$page$$>1&&($skip$$=($page$$-1)*$limit_group$$);$skip$$<0&&($skip$$=0);(await global.getModel($req$$.fetch_by_groups.model_group).find($condition_group$$,$fields_fields$jscomp$1_groups_number_notfields_rows_number$$).sort({stt:1,[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]:1}).skip($skip$$).limit($limit_group$$).lean()).forEach($g$$=>{let $c$$={...$condition$$};
49
- $c$$[$req$$.fetch_by_groups.field]=$g$$[$field_ref$$];$condition_groups$$.push($c$$)});$condition_groups$$.length==0?$condition_groups$$=[$condition$$]:($page_fetch$$=0,$req$$.fetch_by_groups.limit&&($limit$$=Math.max(Number($req$$.fetch_by_groups.limit),Math.round($limit$$/$condition_groups$$.length))))}else $condition_groups$$=[$condition$$];async.map($condition_groups$$,($condition$$,$cb$$)=>{$fetchData$$($condition$$,$limit$$,$page_fetch$$,$cb$$)},($e$$,$obj4views$$)=>{if($e$$)return Logger.error("exec query find",
47
+ "labelinfo"&&($limit$$=500));$req$$.pagination&&($limit$$||=20,$req$$.pagination.page=$page_fetch$$?$page_fetch$$:1,$req$$.pagination.limit=$limit$$,$req$$.pagination.totalPages=Math.ceil($req$$.pagination.total/$req$$.pagination.limit));let $condition_groups$$=[];if($condition_group$$.length>0){let $field_ref$$=$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field;$fields_fields$jscomp$1_groups_number_notfields_rows_number$$={[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]:1};
48
+ let $limit_group$$=$req$$.fetch_by_groups.limit_group||10,$page$$=Number($req$$.query.page||0);isNaN($page$$)&&($page$$=0);let $skip$$=0;$page$$>1&&($skip$$=($page$$-1)*$limit_group$$);$skip$$<0&&($skip$$=0);(await global.getModel($req$$.fetch_by_groups.model_group).find($condition_group$$,$fields_fields$jscomp$1_groups_number_notfields_rows_number$$).sort({stt:1,[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]:1}).skip($skip$$).limit($limit_group$$).lean()).forEach($g$$=>{let $c$$=
49
+ {...$condition$$};$c$$[$req$$.fetch_by_groups.field]=$g$$[$field_ref$$];$condition_groups$$.push($c$$)});$condition_groups$$.length==0?$condition_groups$$=[$condition$$]:($page_fetch$$=0,$req$$.fetch_by_groups.limit&&($limit$$=Math.max(Number($req$$.fetch_by_groups.limit),Math.round($limit$$/$condition_groups$$.length))))}else $condition_groups$$=[$condition$$];async.map($condition_groups$$,($condition$$,$cb$$)=>{$fetchData$$($condition$$,$limit$$,$page_fetch$$,$cb$$)},($e$$,$obj4views$$)=>{if($e$$)return Logger.error("exec query find",
50
50
  $e$$,JSON.stringify($condition$$)),$callback$$({error:$e$$.error||$e$$.message||$e$$});let $obj4view$$=$obj4views$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$obj4view$$||=[];async.parallel({found:function($callback$$){$ctrl$$.found?$ctrl$$.found($req$$.user,$condition$$,$obj4view$$,function($error$$,$items$$){setImmediate(()=>{$callback$$($error$$,$items$$)})}):$callback$$(null,$obj4view$$)},set_collection_name:function($callback$$){$obj4view$$.forEach($obj$$=>{$obj$$.collection_name||($obj$$.collection_name=
51
51
  $ctrl$$.collection_name)});$callback$$(null)}},function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$({error:$error$$.error||$error$$.message||$error$$});$obj4view$$=$rs$$.found;async.parallel({e_view:function($callback$$){$ctrl$$.onView($req$$.user,$obj4view$$,($error$$,$viewValue$$)=>{if($error$$)return Logger.error("Erron on view:",$error$$),$callback$$($error$$);$callback$$(null,$viewValue$$)},{req:$req$$,shareRoute:$shareRoute$$})}},async function($e$$,$_rs_func_string_rs$$){if($error$$)return $callback$$({error:$error$$.error||
52
52
  $error$$.message||$error$$});if($req$$.query.type_data==="json_file"){var {template:$_groupBy_template$jscomp$1_template$$}=$req$$.body;try{var $app_dir_root_template_fileName$$=await createTmpFile(`${$_groupBy_template$jscomp$1_template$$?.title||$ctrl$$.name}.json`,JSON.stringify($_rs_func_string_rs$$.e_view,null,2)),$downloadUrl_template_id$$=$req$$.host?.startsWith("http")?`${$req$$.host}/downloads/temp/${$app_dir_root_template_fileName$$}`:`https://${$req$$.host}/downloads/temp/${$app_dir_root_template_fileName$$}`;
@@ -64,4 +64,5 @@ $excelTemplate$$=await global.getModel("exportexceltemplate").findById($download
64
64
  })`;try{if(($app_dir_root_template_fileName$$=await evalute($_rs_func_string_rs$$,{data:$app_dir_root_template_fileName$$,moment,numeral,_,utils})())&&$app_dir_root_template_fileName$$.error)return Logger.error($app_dir_root_template_fileName$$.error,$_rs_func_string_rs$$),$callback$$({error:$app_dir_root_template_fileName$$.error.message||$app_dir_root_template_fileName$$.error.error||$app_dir_root_template_fileName$$.error})}catch($e$$){return Logger.error($e$$,$_rs_func_string_rs$$),
65
65
  $callback$$({error:$e$$.message||$e$$.error||$e$$})}}excelReport($_groupBy_template$jscomp$1_template$$,$app_dir_root_template_fileName$$,function($e$$,$result$$){if($e$$)return Logger.error("excelReport",$e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$result$$;$req$$.dataType="xlsx";$callback$$("0")},{timezone:configs.timezone||"Asia/Ho_Chi_Minh"})}else $req$$.query.print&&$req$$.query.id_rpt&&global.mongoose.Types.ObjectId.isValid($req$$.query.id_rpt)?htmlReport($req$$.query.id_rpt,
66
66
  {...$req$$.user.current_app_info,...$req$$.query,company:{...$req$$.user.current_app_info},detail:$_rs_func_string_rs$$.e_view,details:$_rs_func_string_rs$$.e_view,items:$_rs_func_string_rs$$.e_view}).then($rs$$=>{$req$$.result=$rs$$;$callback$$("0")},$e$$=>{Logger.error("htmlReport",$e$$);$callback$$($e$$)}):($_rs_func_string_rs$$=$_rs_func_string_rs$$.e_view,$req$$.query.groupBy?($_groupBy_template$jscomp$1_template$$=$req$$.query.groupBy.split(","),$_rs_func_string_rs$$.groupBy($_groupBy_template$jscomp$1_template$$,
67
- [],($e$$,$_items$$)=>{if($e$$)return Logger.error("jsonReport",$e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$_items$$;$callback$$("0")})):($req$$.result=$_rs_func_string_rs$$,$callback$$("0")))})})})})})}],$e$$=>{if($e$$&&$e$$!="0")return $callback$$($e$$);$callback$$(null,{result:$req$$.pagination?{data:$req$$.result,pagination:$req$$.pagination}:$req$$.result,dataType:$req$$.dataType||"json"})})};module.exports=findHanlder;
67
+ [],($e$$,$_items$$)=>{if($e$$)return Logger.error("jsonReport",$e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$_items$$;$callback$$("0")})):($req$$.result=$_rs_func_string_rs$$,$callback$$("0")))})})})})})}],$e$jscomp$24_result$$=>{if($e$jscomp$24_result$$&&$e$jscomp$24_result$$!="0")return $callback$$($e$jscomp$24_result$$);$req$$.pagination?($req$$.pagination.total>$req$$.result.length&&$req$$.pagination.totalPages==1&&($req$$.pagination.total=$req$$.result.length),$e$jscomp$24_result$$=
68
+ {data:$req$$.result,pagination:$req$$.pagination}):$e$jscomp$24_result$$=$req$$.result;$callback$$(null,{result:$e$jscomp$24_result$$,dataType:$req$$.dataType||"json"})})};module.exports=findHanlder;
@@ -1,14 +1,17 @@
1
- const fs=require("fs"),path=require("path"),async=require("async"),_=require("lodash"),excel=require("../libs/excel"),StaticPool=require("../libs/WorkerStaticPool"),{JSONParser}=require("../libs/utils"),importFromExcel=($ctrl$$,$req$$,$mainCallback$$)=>{const $name$$=$ctrl$$.name;async.series([function($callback$$){setImmediate(async()=>{if(!$req$$.files.xlsx)return $callback$$({error:"Kh\u00f4ng t\u00ecm th\u1ea5y file xlsx"});let $parseOptions$$={};Logger.info("[importFromExcel] read file excel");
2
- let $map_root$$=configs.paths.maps,$map_file$$;$map_root$$&&($map_file$$=$map_root$$+"/"+$name$$+".js");$map_file$$&&fs.existsSync($map_file$$)||($map_file$$=path.dirname(__dirname)+"/maps/"+$name$$+".js");fs.existsSync($map_file$$)&&($parseOptions$$=await new Promise($resolve$$=>{setImmediate(()=>{$resolve$$(require($map_file$$))})}));if($ctrl$$.options.onPreExcelParse){const $onPreExcelParse$$=$ctrl$$.options.onPreExcelParse;await new Promise($resolve$$=>{setImmediate(()=>{$onPreExcelParse$$($parseOptions$$);
3
- $resolve$$()})})}let $filePath$$=$req$$.files.xlsx.path;Logger.info("[importFromExcel] parse file excel");excel.parse($filePath$$,function($e$$,$data$$,$columns$$){setImmediate(()=>{fs.unlink($filePath$$,function($e$$){$e$$&&Logger.error("[importFromExcel] Can't delete file tmp:"+$filePath$$,$e$$)});if($e$$)return Logger.error("[importFromExcel] error parse excel file",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$data$$=$data$$.filter($d$$=>Object.keys($d$$).length>
4
- 0);if($data$$.length>5E4)return Logger.info("[importFromExcel] Data is too large",$data$$.length),$callback$$({error:"S\u1ed1 d\u00f2ng import qu\u00e1 l\u1edbn. M\u1ed7i l\u1ea7n import ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p t\u1ed1i \u0111a 50 000 d\u00f2ng"});$ctrl$$.excelParse&&$ctrl$$.excelParse($data$$,$columns$$);var $dir_workers_poolName$$=configs.paths.workers;let $onImportProcess$$;$dir_workers_poolName$$&&($onImportProcess$$=$dir_workers_poolName$$+"/"+$name$$.toLowerCase()+"OnImport.js");
5
- $onImportProcess$$&&fs.existsSync($onImportProcess$$)||($dir_workers_poolName$$=path.dirname(__dirname)+"/workers",$onImportProcess$$=$dir_workers_poolName$$+"/"+$name$$.toLowerCase()+"OnImport.js");fs.existsSync($onImportProcess$$)?($dir_workers_poolName$$=`${$name$$}excelParsePool`,global[$dir_workers_poolName$$]||(global[$dir_workers_poolName$$]=new StaticPool($onImportProcess$$,0,1)),global[$dir_workers_poolName$$].exec({user:$req$$.user,data:$data$$,columns:$columns$$,configs:{database:configs.database}},
6
- $response$$=>{if($response$$.error)return $callback$$({error:$response$$.error||"\u0110\u00e3 c\u00f3 l\u1ed7i khi x\u1eed l\u00fd d\u1eef li\u1ec7u"});$req$$.data=$response$$.data||$data$$;$req$$.columns=$response$$.columns||$columns$$;$callback$$()})):$ctrl$$.options.onImport?(Logger.info("[importFromExcel] [onImport]..."),$ctrl$$.options.onImport($req$$.user,$data$$,$columns$$,function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return Logger.error("[importFromExcel] [onImport]",$e$$),$e$$.error?
7
- $callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$req$$.columns=$columns$$;$callback$$()})})):(Logger.info("[importFromExcel] \u0111\u00e3 ho\u00e0n th\u00e0nh import..."),setImmediate(()=>{$req$$.data=$data$$;$req$$.columns=$columns$$;$callback$$()}))})},$parseOptions$$)})},function($callback$$){Logger.info("[importFromExcel] prepare data...");let $data$$=$req$$.data;var $columns$$=$req$$.columns;$columns$$._error||($columns$$._error="Error");let $master_columns$$=
8
- [],$detail_col$$,$details$$={},$detail_yn$$=!1;for(let $column_name$$ in $columns$$)$column_name$$.indexOf("$")>0?($detail_yn$$=!0,$columns$$=$column_name$$.split("$")[0],$detail_col$$=$column_name$$.split("$")[1],$details$$[$columns$$]||($details$$[$columns$$]={},$details$$[$columns$$].columns=[]),$details$$[$columns$$].columns.push($detail_col$$)):$master_columns$$.push($column_name$$);if(!$detail_yn$$)return $callback$$();let $data_new$$=[],$row_master$$,$row_master_exists$$;async.mapLimit($data$$,
9
- 100,($row$$,$cb$$)=>{setImmediate(()=>{$row_master$$={exfields:{}};$row_master_exists$$=null;$master_columns$$.forEach(function($column$$){if($column$$.indexOf("exfields.")===0){let $_c$$=$column$$.replace("exfields.","");$row_master$$.exfields[$_c$$]=$row$$[$column$$]}else $row_master$$[$column$$]=$row$$[$column$$]});for(let $i$$=0;$i$$<$data_new$$.length;$i$$++){let $m$$=$data_new$$[$i$$],$is_eq$$=!0;$master_columns$$.forEach(function($column$$){_.isEqual($m$$[$column$$],$row_master$$[$column$$])||
10
- ($is_eq$$=!1)});$is_eq$$&&($row_master_exists$$=$m$$)}$row_master_exists$$?$row_master$$=$row_master_exists$$:$data_new$$.push($row_master$$);let $row_detail$$;for(let $detail_name$$ in $details$$)$row_detail$$={},$details$$[$detail_name$$].columns.forEach(function($column$$){$row$$[$detail_name$$+"$"+$column$$]&&($row_detail$$[$column$$]=$row$$[$detail_name$$+"$"+$column$$])}),$row_master$$[$detail_name$$]||($row_master$$[$detail_name$$]=[]),_.keys($row_detail$$).length>0&&$row_master$$[$detail_name$$].push($row_detail$$);
11
- $cb$$()})},()=>{$req$$.data=$data_new$$;$callback$$()})},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data||[],$columns$$=$req$$.columns;for(let $row$$ of $data$$){let $_first$$=$row$$._first;$_first$$&&$_first$$.length>0&&_.extend($row$$,$_first$$[0])}let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){Logger.error("[importFromExcel] parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,
12
- $req$$.user.current_id_app,$data$$,async($e$jscomp$4_message$$,$rs$$)=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTEXCEL",data:{data:$data$$,columns:$columns$$,status_task:$req$$.status_task},result:{error:$e$jscomp$4_message$$,result:$rs$$,finished_at:new Date}},$req$$.user.email,$req$$.user_agent,$req$$);if($e$jscomp$4_message$$)return Logger.error("[importFromExcel] import",$e$jscomp$4_message$$),$e$jscomp$4_message$$.error?($e$jscomp$4_message$$.message=
13
- $e$jscomp$4_message$$.message||$e$jscomp$4_message$$.error,$callback$$($e$jscomp$4_message$$)):$callback$$({error:$e$jscomp$4_message$$.message||$e$jscomp$4_message$$,message:$e$jscomp$4_message$$.message||$e$jscomp$4_message$$});$rs$$.rows_error.length===0?($req$$.result=$rs$$,$callback$$()):($e$jscomp$4_message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$jscomp$4_message$$,error:$rs$$.error||$rs$$}))},
14
- {replace:$req$$.query.update===!0||$req$$.query.update=="true",req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromExcel;
1
+ const fs=require("fs"),path=require("path"),excel=require("../libs/excel"),StaticPool=require("../libs/WorkerStaticPool"),{JSONParser}=require("../libs/utils");function runSeries($steps$$,$done$$){function $next$$($err$$){if($err$$)return $done$$($err$$);if($i$$>=$steps$$.length)return $done$$(null);$steps$$[$i$$++]($next$$)}let $i$$=0;$next$$(null)}function normalizeVal($v$$){return typeof $v$$==="string"?$v$$.trim():$v$$}
2
+ function buildMasterKey($row$$,$masterColumns$$){return $masterColumns$$.map($col$$=>JSON.stringify(normalizeVal($row$$[$col$$]))).join("|\u00a7|")}function buildMasterRow($row$$,$masterColumns$$){const $master$$={exfields:{}};for(const $col$$ of $masterColumns$$)$col$$.startsWith("exfields.")?$master$$.exfields[$col$$.slice(9)]=normalizeVal($row$$[$col$$]):$master$$[$col$$]=normalizeVal($row$$[$col$$]);return $master$$}
3
+ const importFromExcel=($ctrl$$,$req$$,$mainCallback$$)=>{const $name$$=$ctrl$$.name;runSeries([function($callback$$){if(!$req$$.files.xlsx)return $callback$$({error:"Kh\u00f4ng t\u00ecm th\u1ea5y file xlsx"});let $parseOptions$$={};var $customMap_mapFile_mapRoot$$=configs.paths.maps;$customMap_mapFile_mapRoot$$=$customMap_mapFile_mapRoot$$&&path.join($customMap_mapFile_mapRoot$$,`${$name$$}.js`);const $defaultMap$$=path.join(path.dirname(__dirname),"maps",`${$name$$}.js`);($customMap_mapFile_mapRoot$$=
4
+ $customMap_mapFile_mapRoot$$&&fs.existsSync($customMap_mapFile_mapRoot$$)?$customMap_mapFile_mapRoot$$:fs.existsSync($defaultMap$$)?$defaultMap$$:null)&&($parseOptions$$=require($customMap_mapFile_mapRoot$$));if($ctrl$$.options.onPreExcelParse)$ctrl$$.options.onPreExcelParse($parseOptions$$);const $filePath$$=$req$$.files.xlsx.path;Logger.info("[importFromExcel] parse file excel");excel.parse($filePath$$,($defaultWorker_e_onImportProcess_workerName$$,$data$$,$columns$$)=>{fs.unlink($filePath$$,$err$$=>
5
+ {$err$$&&Logger.error("[importFromExcel] Can't delete tmp file: "+$filePath$$,$err$$)});if($defaultWorker_e_onImportProcess_workerName$$)return Logger.error("[importFromExcel] error parse excel file",$defaultWorker_e_onImportProcess_workerName$$),$callback$$($defaultWorker_e_onImportProcess_workerName$$.error?$defaultWorker_e_onImportProcess_workerName$$:{error:$defaultWorker_e_onImportProcess_workerName$$.message||$defaultWorker_e_onImportProcess_workerName$$});$data$$=$data$$.filter($d$$=>Object.keys($d$$).length>
6
+ 0);if($data$$.length>5E4)return Logger.info("[importFromExcel] Data too large",$data$$.length),$callback$$({error:"S\u1ed1 d\u00f2ng import qu\u00e1 l\u1edbn. M\u1ed7i l\u1ea7n import ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p t\u1ed1i \u0111a 50 000 d\u00f2ng"});$ctrl$$.excelParse&&$ctrl$$.excelParse($data$$,$columns$$);var $customWorker_dirWorkers_poolName$$=configs.paths.workers;$defaultWorker_e_onImportProcess_workerName$$=`${$name$$.toLowerCase()}OnImport.js`;$customWorker_dirWorkers_poolName$$=
7
+ $customWorker_dirWorkers_poolName$$&&path.join($customWorker_dirWorkers_poolName$$,$defaultWorker_e_onImportProcess_workerName$$);$defaultWorker_e_onImportProcess_workerName$$=path.join(path.dirname(__dirname),"workers",$defaultWorker_e_onImportProcess_workerName$$);($defaultWorker_e_onImportProcess_workerName$$=$customWorker_dirWorkers_poolName$$&&fs.existsSync($customWorker_dirWorkers_poolName$$)?$customWorker_dirWorkers_poolName$$:fs.existsSync($defaultWorker_e_onImportProcess_workerName$$)?$defaultWorker_e_onImportProcess_workerName$$:
8
+ null)?($customWorker_dirWorkers_poolName$$=`${$name$$}excelParsePool`,global[$customWorker_dirWorkers_poolName$$]||(global[$customWorker_dirWorkers_poolName$$]=new StaticPool($defaultWorker_e_onImportProcess_workerName$$,0,1)),global[$customWorker_dirWorkers_poolName$$].exec({user:$req$$.user,data:$data$$,columns:$columns$$,configs:{database:configs.database}},$response$$=>{if($response$$.error)return $callback$$({error:$response$$.error||"\u0110\u00e3 c\u00f3 l\u1ed7i khi x\u1eed l\u00fd d\u1eef li\u1ec7u"});
9
+ $req$$.data=$response$$.data||$data$$;$req$$.columns=$response$$.columns||$columns$$;$callback$$()})):$ctrl$$.options.onImport?(Logger.info("[importFromExcel] [onImport]..."),$ctrl$$.options.onImport($req$$.user,$data$$,$columns$$,($err$$,$newData$$)=>{if($err$$)return Logger.error("[importFromExcel] [onImport]",$err$$),$callback$$($err$$.error?$err$$:{error:$err$$.message||$err$$});$req$$.data=$newData$$||$data$$;$req$$.columns=$columns$$;$callback$$()})):(Logger.info("[importFromExcel] \u0111\u00e3 ho\u00e0n th\u00e0nh import..."),
10
+ $req$$.data=$data$$,$req$$.columns=$columns$$,$callback$$())},$parseOptions$$)},function($callback$$){Logger.info("[importFromExcel] prepare data...");var $data$$=$req$$.data,$columns$jscomp$1_detailName_detailRow_key$$=$req$$.columns;$columns$jscomp$1_detailName_detailRow_key$$._error||($columns$jscomp$1_detailName_detailRow_key$$._error="Error");const $masterColumns$$=[],$details$$={};var $data_new_hasDetail$$=!1;for(var $colName_masterMap$$ in $columns$jscomp$1_detailName_detailRow_key$$){var $detailCol_sepIdx_val$$=
11
+ $colName_masterMap$$.indexOf("$");$detailCol_sepIdx_val$$>0?($data_new_hasDetail$$=!0,$columns$jscomp$1_detailName_detailRow_key$$=$colName_masterMap$$.substring(0,$detailCol_sepIdx_val$$),$detailCol_sepIdx_val$$=$colName_masterMap$$.substring($detailCol_sepIdx_val$$+1),$details$$[$columns$jscomp$1_detailName_detailRow_key$$]||($details$$[$columns$jscomp$1_detailName_detailRow_key$$]={columns:[]}),$details$$[$columns$jscomp$1_detailName_detailRow_key$$].columns.push($detailCol_sepIdx_val$$)):$masterColumns$$.push($colName_masterMap$$)}if(!$data_new_hasDetail$$)return $callback$$();
12
+ $data_new_hasDetail$$=[];$colName_masterMap$$=new Map;for(const $row$$ of $data$$){$columns$jscomp$1_detailName_detailRow_key$$=buildMasterKey($row$$,$masterColumns$$);$data$$=$colName_masterMap$$.get($columns$jscomp$1_detailName_detailRow_key$$);$data$$||($data$$=buildMasterRow($row$$,$masterColumns$$),$colName_masterMap$$.set($columns$jscomp$1_detailName_detailRow_key$$,$data$$),$data_new_hasDetail$$.push($data$$));for(const $detailName$$ in $details$$){$columns$jscomp$1_detailName_detailRow_key$$=
13
+ {};for(const $detailCol$$ of $details$$[$detailName$$].columns)$detailCol_sepIdx_val$$=$row$$[`${$detailName$$}$${$detailCol$$}`],$detailCol_sepIdx_val$$!==void 0&&$detailCol_sepIdx_val$$!==null&&$detailCol_sepIdx_val$$!==""&&($columns$jscomp$1_detailName_detailRow_key$$[$detailCol$$]=$detailCol_sepIdx_val$$);Object.keys($columns$jscomp$1_detailName_detailRow_key$$).length>0&&($data$$[$detailName$$]||($data$$[$detailName$$]=[]),$data$$[$detailName$$].push($columns$jscomp$1_detailName_detailRow_key$$))}}$req$$.data=
14
+ $data_new_hasDetail$$;$callback$$()},function($callback$$){const $data$$=$req$$.data||[],$columns$$=$req$$.columns;for(var $row$jscomp$0$$ of $data$$)Array.isArray($row$jscomp$0$$._first)&&$row$jscomp$0$$._first.length>0&&Object.assign($row$jscomp$0$$,$row$jscomp$0$$._first[0]);if($row$jscomp$0$$=$req$$.query.values){try{$row$jscomp$0$$=JSONParser($row$jscomp$0$$)}catch($e$$){Logger.error("[importFromExcel] parse values",$e$$),$row$jscomp$0$$=null}if($row$jscomp$0$$)for(const $row$$ of $data$$)Object.assign($row$$,
15
+ $row$jscomp$0$$)}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$jscomp$2_message$$,$msg_rs$$)=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTEXCEL",data:{data:$data$$,columns:$columns$$,status_task:$req$$.status_task},result:{error:$e$jscomp$2_message$$,result:$msg_rs$$,finished_at:new Date}},$req$$.user.email,$req$$.user_agent,$req$$);if($e$jscomp$2_message$$)return Logger.error("[importFromExcel] import",$e$jscomp$2_message$$),
16
+ $msg_rs$$=$e$jscomp$2_message$$.message||$e$jscomp$2_message$$.error||$e$jscomp$2_message$$,$callback$$({error:$msg_rs$$,message:$msg_rs$$});if($msg_rs$$.rows_error.length===0)return $req$$.result=$msg_rs$$,$callback$$();$e$jscomp$2_message$$=[...(new Set($msg_rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($err$$=>$err$$.error||$err$$)))].join(", "))))].join(", ");$callback$$({message:$e$jscomp$2_message$$,error:$msg_rs$$.error||$msg_rs$$})},{replace:$req$$.query.update===!0||$req$$.query.update===
17
+ "true",req:$req$$})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromExcel;