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,41 +1,26 @@
1
- const async=require("async"),_=require("lodash"),{JSONParser}=require("../libs/utils"),{createHandler}=require("./createHandler"),{updateHandler}=require("./updateHandler"),{executeInTransaction}=require("../libs/sessionContext.js"),create=async($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add")=>{$req$$=$req$$||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;createHandler($ctrl$$,$req$$,($e_obj_created$$,
2
- $returnvalue$$)=>{if($e_obj_created$$)return $callback$$($e_obj_created$$);({obj_created:$e_obj_created$$}=$returnvalue$$);$callback$$(null,$e_obj_created$$)})},update=async function($user$$,$ctrl$$,$id$$,$data$$,$callback$$,$action$$,$req$$,$_action$$="update"){$req$$=$req$$||{};$req$$.action=$action$$;$req$$._action=$_action$$;$req$$.user=$user$$;$req$$.id=$id$$;$req$$.data=$data$$;updateHandler($ctrl$$,$req$$,($e$$,$returnvalue$$)=>{if($e$$)return $callback$$($e$$);$callback$$(null,$returnvalue$$.new_obj)})};
3
- async function importHandler($user$$,$ctrl$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null,listinfo_code:null}){const $model$$=$ctrl$$.model;let $replace$$=$options$$.replace,$rows_error$$=[];var $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=global.getModel("listinfo"),$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.findOne({code:($options$$.listinfo_code||$ctrl$$.name).toLowerCase()}).lean();let $modelJoins$$=
4
- [];$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$&&(await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.updateModel($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$,$ctrl$$.model),$modelJoins$$=($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.fields||[]).filter($f$$=>$f$$.ref_model&&$f$$.ref_field=="_id"));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});if(configs.limitRowImport&&$data$$.length>configs.limitRowImport)return $callback_main$$("S\u1ed1 d\u00f2ng import t\u1ed1i \u0111a 1 l\u1ea7n l\u00e0 "+
5
- configs.limitRowImport);Logger.info("[importHanlder] \u0110ang import t\u1edbi",$model$$.modelName,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u...");if($model$$.modelName!=="group"){var $nh_kh$$=$data$$.filter($r$$=>$r$$.ten_nh_kh);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_nh_kh2);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_nh_kh3);$model$$.schema.paths.details&&($nh_kh$$=$nh_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,
6
- $b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh)),$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh2)),$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh3)));var $nh_kh_ten_nh_kh1s$$=
7
- await $nh_kh$$.filter($c$$=>$c$$.ten_nh_kh&&!$c$$.nh_kh).asyncGroupBy(["ten_nh_kh"],[]);for(let $nh_kh1$$ of $nh_kh_ten_nh_kh1s$$){$nh_kh_ten_nh_kh1s$$={};$nh_kh_ten_nh_kh1s$$.id_app=$id_app$$;$nh_kh_ten_nh_kh1s$$.group_name=$nh_kh1$$.ten_nh_kh;$nh_kh_ten_nh_kh1s$$.group_type="CUSTOMER";$nh_kh_ten_nh_kh1s$$.group_kind=1;$nh_kh_ten_nh_kh1s$$.status=!0;$nh_kh_ten_nh_kh1s$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh1$$.ten_nh_kh,id_app:$id_app$$,
8
- group_kind:1,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$nh_kh$$.filter($c$$=>$c$$.ten_nh_kh==$nh_kh1$$.ten_nh_kh).forEach($c$$=>{$c$$.nh_kh=$check$$._id.toString()});else{const $new_nh_kh$$=await global.getModel("group").create($nh_kh_ten_nh_kh1s$$);$nh_kh$$.filter($c$$=>$c$$.ten_nh_kh==$nh_kh1$$.ten_nh_kh).forEach($c$$=>{$c$$.nh_kh=$new_nh_kh$$._id.toString()})}}$nh_kh$$=await $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2&&!$c$$.nh_kh2).asyncGroupBy(["ten_nh_kh2"],[]);
9
- for(let $nh_kh2$$ of $nh_kh$$){$nh_kh$$={};$nh_kh$$.id_app=$id_app$$;$nh_kh$$.group_name=$nh_kh2$$.ten_nh_kh2;$nh_kh$$.group_type="CUSTOMER";$nh_kh$$.group_kind=2;$nh_kh$$.status=!0;$nh_kh$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh2$$.ten_nh_kh2,id_app:$id_app$$,group_kind:2,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2==$nh_kh2$$.ten_nh_kh2).forEach($c$$=>{$c$$.nh_kh2=$check$$._id.toString()});
10
- else{const $new_nh_kh$$=await global.getModel("group").create($nh_kh$$);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2==$nh_kh2$$.ten_nh_kh2).forEach($c$$=>{$c$$.nh_kh2=$new_nh_kh$$._id.toString()})}}$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh3&&!$c$$.nh_kh3).asyncGroupBy(["ten_nh_kh3"],[]);for(let $nh_kh3$$ of $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$={};$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.id_app=
11
- $id_app$$;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_name=$nh_kh3$$.ten_nh_kh3;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_type="CUSTOMER";$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_kind=3;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.status=!0;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh3$$.ten_nh_kh3,id_app:$id_app$$,group_kind:3,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>
12
- $c$$.ten_nh_kh3==$nh_kh3$$.ten_nh_kh3).forEach($c$$=>{$c$$.nh_kh3=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom kh3",$nh_kh3$$.ten_nh_kh3);const $new_nh_kh$$=await global.getModel("group").create($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh3==$nh_kh3$$.ten_nh_kh3).forEach($c$$=>{$c$$.nh_kh3=$new_nh_kh$$._id.toString()})}}}if($model$$.modelName!=="customer"){$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=
13
- [];$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_kh);$model$$.schema.paths.details&&($custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.map($kh$$=>{$kh$$.ma_kh||
14
- ($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||"",nh_kh:$kh$$.nh_kh,ten_nh_kh:$kh$$.ten_nh_kh,ten_nh_kh2:$kh$$.ten_nh_kh2,nh_kh2:$kh$$.nh_kh2,ten_nh_kh3:$kh$$.ten_nh_kh3,nh_kh3:$kh$$.nh_kh3}});$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.asyncGroupBy("ma_kh ten_kh dia_chi dien_thoai ma_so_thue nh_kh nh_kh2 nh_kh3".split(" "),
15
- []);for(var $dvts_kh$$ of $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$)$dvts_kh$$.id_app=$id_app$$,$dvts_kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($dvts_kh$$)}$dvts_kh$$=[];if($model$$.modelName!=="dmkho"){$model$$.schema.paths.ma_kho&&($dvts_kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));
16
- $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$dvts_kh$$.map($kh$$=>{$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho}});$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.asyncGroupBy(["ma_kho","ten_kho"],[]);for(let $kho$$ of $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$)$kho$$.id_app=$id_app$$,$kho$$.user_created=
17
- $user$$.email,$kho$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho$$),$dvts_kh$$.filter($c$$=>!$c$$.ma_kho&&$c$$.ten_kho===$kho$$.ten_kho).forEach($c$$=>{$c$$.ma_kho=$kho$$.ma_kho})}if($model$$.modelName!=="dmnvt"){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$data$$.filter($r$$=>!$r$$.ma_nvt&&$r$$.ten_nvt);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>!$r$$.ma_nvt2&&$r$$.ten_nvt2);
18
- $dvts_kh$$=$data$$.filter($r$$=>!$r$$.ma_nvt3&&$r$$.ten_nvt3);$model$$.schema.paths.details&&($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>!$r$$.ma_nvt&&$r$$.ten_nvt)),$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>
19
- !$r$$.ma_nvt2&&$r$$.ten_nvt2)),$dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>!$r$$.ma_nvt3&&$r$$.ten_nvt3)));$nh_kh$$=await $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt).asyncGroupBy(["ten_nvt"],[]);for(let $nh_vt1$$ of $nh_kh$$){$nh_kh$$={};$nh_kh$$.id_app=$id_app$$;$nh_kh$$.ten_nvt=$nh_vt1$$.ten_nvt;$nh_kh$$.group_kind=1;$nh_kh$$.status=!0;$nh_kh$$.user_created=$user$$.email;let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt1$$.ten_nvt,
20
- id_app:$id_app$$,group_kind:1},{_id:1}).lean();if($check$$)$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt==$nh_vt1$$.ten_nvt).forEach($c$$=>{$c$$.ma_nvt=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu",$nh_vt1$$.ten_nvt);const $new_nvt$$=await global.getModel("dmnvt").create($nh_kh$$);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt==$nh_vt1$$.ten_nvt).forEach($c$$=>{$c$$.ma_nvt=$new_nvt$$._id.toString()})}}$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=
21
- await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nvt2).asyncGroupBy(["ten_nvt2"],[]);for(let $nh_vt2$$ of $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$={};$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.id_app=$id_app$$;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.ten_nvt=$nh_vt2$$.ten_nvt2;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_kind=2;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.status=!0;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.user_created=$user$$.email;
22
- let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt2$$.ten_nvt2,id_app:$id_app$$,group_kind:2},{_id:1}).lean();if($check$$)$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nvt2==$nh_vt2$$.ten_nvt2).forEach($c$$=>{$c$$.ma_nvt2=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu 2",$nh_vt2$$.ten_nvt2);const $new_nvt$$=await global.getModel("dmnvt").create($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>
23
- $c$$.ten_nvt2==$nh_vt2$$.ten_nvt2).forEach($c$$=>{$c$$.ma_nvt2=$new_nvt$$._id.toString()})}}$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $dvts_kh$$.filter($c$$=>$c$$.ten_nvt3).asyncGroupBy(["ten_nvt3"],[]);for(let $nh_vt3$$ of $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$){$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$={};$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.id_app=$id_app$$;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.ten_nvt=
24
- $nh_vt3$$.ten_nvt3;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.group_kind=3;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.status=!0;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.user_created=$user$$.email;let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt3$$.ten_nvt3,id_app:$id_app$$,group_kind:3},{_id:1}).lean();if($check$$)$dvts_kh$$.filter($c$$=>$c$$.ten_nvt3==$nh_vt3$$.ten_nvt3).forEach($c$$=>{$c$$.ma_nvt3=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu 3",
25
- $nh_vt3$$.ten_nvt3);const $new_nvt$$=await global.getModel("dmnvt").create($custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$);$dvts_kh$$.filter($c$$=>$c$$.ten_nvt3==$nh_vt3$$.ten_nvt3).forEach($c$$=>{$c$$.ma_nvt3=$new_nvt$$._id.toString()})}}}if($model$$.modelName!=="dmdvt"){$dvts_kh$$=$data$$.filter($r$$=>$r$$.ma_dvt);$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_dvt)));$dvts_kh$$=
26
- await $dvts_kh$$.asyncGroupBy(["ma_dvt"],[]);for(var $dvt_vts$$ of $dvts_kh$$)$dvt_vts$$.id_app=$id_app$$,$dvt_vts$$.ten_dvt=$dvt_vts$$.ma_dvt,$dvt_vts$$.status=!0,$dvt_vts$$.user_created=$user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_vts$$.ma_dvt,id_app:$id_app$$}).lean()||(Logger.info("[importHanlder] create dvt",$dvt_vts$$),await global.getModel("dmdvt").create($dvt_vts$$))}if($model$$.modelName!=="dmvt"){$dvt_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt);$model$$.schema.paths.details&&
27
- ($dvt_vts$$=$dvt_vts$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));$dvt_vts$$=$dvt_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",ma_nvt:$vt$$.ma_nvt,ten_nvt:$vt$$.ten_nvt,ma_nvt2:$vt$$.ma_nvt2,ten_nvt2:$vt$$.ten_nvt2,ma_nvt3:$vt$$.ma_nvt3,ten_nvt3:$vt$$.ten_nvt3,user_created:$user$$.email}));$dvt_vts$$=await $dvt_vts$$.asyncGroupBy("ma_vt ten_vt ma_dvt ma_nvt ten_nvt ma_nvt2 ten_nvt2 ma_nvt3 ten_nvt3".split(" "),
28
- []);$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(var $limit_vt$$ of $dvt_vts$$)$limit_vt$$.id_app=
29
- $id_app$$,$limit_vt$$.tk_vt=$dvts_kh$$,$limit_vt$$.tk_gv=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$,$limit_vt$$.tk_dt=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$,$limit_vt$$.status=!0,$limit_vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$limit_vt$$.ma_vt,id_app:$id_app$$}).lean()||(Logger.info("[importHanlder] create product",$limit_vt$$),await global.getModel("dmvt").create($limit_vt$$),$model$$.modelName!=="dmqddvt"&&await global.getModel("dmqddvt").create({id_app:$id_app$$,
30
- status:!0,ma_vt:$limit_vt$$.ma_vt,ma_dvt:$limit_vt$$.ma_dvt,tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)||delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});Logger.error("[importHanlder] begin import",$ctrl$$.name);$limit_vt$$=100;if($ctrl$$.options?.unique_imp||$ctrl$$.unique&&$ctrl$$.unique.length>0)$limit_vt$$=1;async.mapLimit($data$$,
31
- $limit_vt$$,function($row$$,$callback$$){const $row_keys$$=Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>{let $data_type$$=$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase(),$data_value$$=$row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&($data_type$$=="mixed"||$data_type$$=="array")&&($data_value$$=$data_value$$.trim(),$data_value$$.indexOf("[")==0||$data_value$$.indexOf("{")==0))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],
32
- Logger.error("[importHanlder] Error parse data",$e$$)}});setImmediate(async()=>{for(let $i$$=0;$i$$<$modelJoins$$.length;$i$$++){let $field_ref$$=$modelJoins$$[$i$$];if($row$$[$field_ref$$.name]){let $new_data_ref$$=await global.getModel("originimportid").findOne({id_app:$id_app$$,old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&
33
- $id_app$$!=$row$$.id_app&&delete $row$$._id;delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&$ctrl$$.unique.length>0||$row$$._id)){let $query$$={};if($ctrl$$.options?.unique_imp||$ctrl$$.unique&&$ctrl$$.unique.length>0){if($ctrl$$.options.unique_imp&&$row$$[$ctrl$$.options.unique_imp]!=null&&$row$$[$ctrl$$.options.unique_imp]!=void 0&&$row$$[$ctrl$$.options.unique_imp]!="")$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){$row_keys$$.indexOf($k$$)>=
34
- 0&&($query$$[$k$$]=$row$$[$k$$],$query$$[$k$$]==void 0&&delete $query$$[$k$$])}),Object.keys($query$$).length<1)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u c\u1ea7n c\u00f3 \u00edt nh\u1ea5t m\u1ed9t gi\u00e1 tr\u1ecb:"+$ctrl$$.unique.join(","));$ctrl$$.require_id_app!=0&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;await executeInTransaction(()=>new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{const $rss$$=await $ctrl$$.model.find($query$$).inTxn().lean();
35
- if($rss$$.length>1)return $reject$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+Object.values($query$$).join("-")+" \u0111\u00e3 t\u1ed3n t\u1ea1i nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n");let $foundObject$$;$rss$$.length===1&&($foundObject$$=$rss$$[0]);$foundObject$$?($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),Logger.info("[importHanlder] update..."),update($user$$,
36
- $ctrl$$,$foundObject$$._id,$row$$,function($e$$){if($e$$){let $_e$$=$e$$;_.isArray($_e$$)||($_e$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$$})}Logger.info("[importHanlder] updated successfull");$resolve$$()},"import",$options$$.req,"import")):(Logger.info("[importHanlder] create..."),create($user$$,$ctrl$$,$row$$,async function($e$jscomp$4_i$$,$_e$$){if($e$jscomp$4_i$$)$_e$$=$e$jscomp$4_i$$,_.isArray($_e$$)||($_e$$=[{error:$e$jscomp$4_i$$.error||$e$jscomp$4_i$$,
37
- code:$e$jscomp$4_i$$.code}]),$rows_error$$.push({row:$row$$,error:$_e$$});else if($row$$._id_new__=$_e$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$_e$$.id_app,old_id:$old_id$$},{id_app:$_e$$.id_app,old_id:$old_id$$,new_id:$_e$$._id.toString()},{new:!0,upsert:!0}),$e$jscomp$4_i$$=0;$e$jscomp$4_i$$<$data$$.length;$e$jscomp$4_i$$++){const $_r$$=$data$$[$e$jscomp$4_i$$];for(let $key$$ in $_r$$)$key$$!="_id"&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=
38
- $_e$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$_e$$._id.toString()}))}$resolve$$()},$row$$._id,$options$$.req,"import"))})})).then(()=>{$callback$$()}).catch($error$$=>{Logger.error("[importHanlder] L\u1ed7i t\u00ecm object:",$error$$.message);$callback$$($error$$)})}else await executeInTransaction(()=>new Promise($resolve$$=>{create($user$$,$ctrl$$,$row$$,async function($e$jscomp$5_i$$,$_e$jscomp$2_new_row$$){if($e$jscomp$5_i$$)Logger.error("[importHanlder] error import data, creating...",
39
- $e$jscomp$5_i$$),$_e$jscomp$2_new_row$$=$e$jscomp$5_i$$,_.isArray($_e$jscomp$2_new_row$$)||($_e$jscomp$2_new_row$$=[{error:$e$jscomp$5_i$$.error||$e$jscomp$5_i$$,code:$e$jscomp$5_i$$.code}]),$rows_error$$.push({error:$_e$jscomp$2_new_row$$});else if($row$$._id_new__=$_e$jscomp$2_new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$_e$jscomp$2_new_row$$.id_app,old_id:$old_id$$},{id_app:$_e$jscomp$2_new_row$$.id_app,old_id:$old_id$$,new_id:$_e$jscomp$2_new_row$$._id.toString()},
40
- {new:!0,upsert:!0}),$e$jscomp$5_i$$=0;$e$jscomp$5_i$$<$data$$.length;$e$jscomp$5_i$$++){const $_r$$=$data$$[$e$jscomp$5_i$$];for(let $key$$ in $_r$$)$key$$!="_id"&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$_e$jscomp$2_new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$_e$jscomp$2_new_row$$._id.toString()}))}$resolve$$()},$row$$._id,$options$$.req,"import")})),$callback$$()})},function($error$$){if($error$$)return Logger.error("[importHanlder]",$error$$),
41
- $callback_main$$($error$$);Logger.info(`[importHanlder] \u0110\u00e3 import t\u1edbi ${$ctrl$$.name} th\u00e0nh c\u00f4ng: ${$data$$.length-$rows_error$$.length} d\u00f2ng, th\u1ea5t b\u1ea1i: ${$rows_error$$.length} d\u00f2ng`);$callback_main$$(null,{rows_imported:$data$$.length-$rows_error$$.length,rows_error:$rows_error$$})})}module.exports=importHandler;
1
+ const {JSONParser}=require("../libs/utils"),{createHandler}=require("./createHandler"),{updateHandler}=require("./updateHandler"),{executeInTransaction}=require("../libs/sessionContext.js"),isString=$v$$=>typeof $v$$==="string",isArray=$v$$=>Array.isArray($v$$),create=($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add")=>{$req$$=$req$$||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;createHandler($ctrl$$,
2
+ $req$$,($e$$,$returnvalue$$)=>{if($e$$)return $callback$$($e$$);$callback$$(null,$returnvalue$$.obj_created)})},update=($user$$,$ctrl$$,$id$$,$data$$,$callback$$,$action$$,$req$$,$_action$$="update")=>{$req$$=$req$$||{};$req$$.action=$action$$;$req$$._action=$_action$$;$req$$.user=$user$$;$req$$.id=$id$$;$req$$.data=$data$$;updateHandler($ctrl$$,$req$$,($e$$,$returnvalue$$)=>{if($e$$)return $callback$$($e$$);$callback$$(null,$returnvalue$$.new_obj)})};
3
+ async function runSequential($items$$,$handler$$){for(const $item$$ of $items$$)await $handler$$($item$$)}
4
+ async function upsertGroups({rows:$name_rows$$,nameField:$doc_existing_nameField_resolvedId$$,idField:$idField$$,query:$query$$,buildDoc:$buildDoc$$,id_app:$id_app$$,user:$user$$}){const $seen$$=new Map;for(const $row$$ of $name_rows$$)($name_rows$$=$row$$[$doc_existing_nameField_resolvedId$$])&&!$seen$$.has($name_rows$$)&&$seen$$.set($name_rows$$,[]),$name_rows$$&&$seen$$.get($name_rows$$).push($row$$);for(const [$name$$,$rowsWithName$$]of $seen$$)if(!$rowsWithName$$.every($r$$=>$r$$[$idField$$])){($doc_existing_nameField_resolvedId$$=
5
+ await global.getModel($query$$.modelName).findOne({...$query$$.filter($name$$),id_app:$id_app$$},{_id:1}).lean())?$doc_existing_nameField_resolvedId$$=$doc_existing_nameField_resolvedId$$._id.toString():($doc_existing_nameField_resolvedId$$=$buildDoc$$($name$$),$doc_existing_nameField_resolvedId$$.id_app=$id_app$$,$doc_existing_nameField_resolvedId$$.status=!0,$doc_existing_nameField_resolvedId$$.user_created=$user$$.email,$doc_existing_nameField_resolvedId$$=(await global.getModel($query$$.modelName).create($doc_existing_nameField_resolvedId$$))._id.toString(),
6
+ Logger.info(`[importHandler] created ${$query$$.modelName}`,$name$$));for(const $row$$ of $rowsWithName$$)$row$$[$idField$$]||($row$$[$idField$$]=$doc_existing_nameField_resolvedId$$)}}function collectRows($data$$,$model$$,$filterFn$$){let $rows$$=$data$$.filter($filterFn$$);$model$$.schema.paths.details&&($rows$$=$rows$$.concat($data$$.flatMap($v$$=>$v$$.details||[]).filter($filterFn$$)));return $rows$$}
7
+ async function importHandler($user$$,$ctrl$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null,listinfo_code:null}){const $model$$=$ctrl$$.model,$replace$$=$options$$.replace,$rows_error$$=[];var $findTk_listInfo$$=global.getModel("listinfo");const $info$$=await $findTk_listInfo$$.findOne({code:($options$$.listinfo_code||$ctrl$$.name).toLowerCase()}).lean();let $modelJoins$$=[];$info$$&&(await $findTk_listInfo$$.updateModel($info$$,$ctrl$$.model),$modelJoins$$=($info$$.fields||[]).filter($f$$=>
8
+ $f$$.ref_model&&$f$$.ref_field==="_id"));$data$$=$data$$.filter($row$$=>Object.values($row$$).some($v$$=>$v$$));if(configs.limitRowImport&&$data$$.length>configs.limitRowImport)return $callback_main$$("S\u1ed1 d\u00f2ng import t\u1ed1i \u0111a 1 l\u1ea7n l\u00e0 "+configs.limitRowImport);Logger.info("[importHandler] \u0110ang import t\u1edbi",$model$$.modelName,$data$$.length,"d\u00f2ng d\u1eef li\u1ec7u...");try{if($model$$.modelName!=="group")for(const [$nameField$$,$idField$$,$kind$$]of[["ten_nh_kh",
9
+ "nh_kh",1],["ten_nh_kh2","nh_kh2",2],["ten_nh_kh3","nh_kh3",3]]){const $rows$$=collectRows($data$$,$model$$,$r$$=>$r$$[$nameField$$]);await upsertGroups({rows:$rows$$,nameField:$nameField$$,idField:$idField$$,id_app:$id_app$$,user:$user$$,query:{modelName:"group",filter:$name$$=>({group_name:$name$$,group_kind:$kind$$,group_type:"CUSTOMER"})},buildDoc:$name$$=>({group_name:$name$$,group_type:"CUSTOMER",group_kind:$kind$$})})}if($model$$.modelName!=="customer"){const $uniqueCusts$$=await collectRows($data$$,
10
+ $model$$,$r$$=>$r$$.ten_kh).map($kh$$=>{$kh$$.ma_kh||($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||"",nh_kh:$kh$$.nh_kh,ten_nh_kh:$kh$$.ten_nh_kh,nh_kh2:$kh$$.nh_kh2,ten_nh_kh2:$kh$$.ten_nh_kh2,nh_kh3:$kh$$.nh_kh3,ten_nh_kh3:$kh$$.ten_nh_kh3}}).asyncGroupBy("ma_kh ten_kh dia_chi dien_thoai ma_so_thue nh_kh nh_kh2 nh_kh3".split(" "),
11
+ []);for(const $kh$$ of $uniqueCusts$$)$kh$$.id_app=$id_app$$,$kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($kh$$)}if($model$$.modelName!=="dmkho"){const $khos$$=collectRows($data$$,$model$$,$r$$=>$r$$.ten_kho).map($kh$$=>{$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho,_src:$kh$$}}),$uniqueKhos$$=await $khos$$.map($k$$=>({ma_kho:$k$$.ma_kho,ten_kho:$k$$.ten_kho})).asyncGroupBy(["ma_kho",
12
+ "ten_kho"],[]);for(const $kho$$ of $uniqueKhos$$)$kho$$.id_app=$id_app$$,$kho$$.user_created=$user$$.email,$kho$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho$$),$khos$$.filter($k$$=>!$k$$._src.ma_kho&&$k$$._src.ten_kho===$kho$$.ten_kho).forEach($k$$=>{$k$$._src.ma_kho=$kho$$.ma_kho})}if($model$$.modelName!=="dmnvt")for(const [$nameField$$,$idField$$,$kind$$]of[["ten_nvt","ma_nvt",1],["ten_nvt2","ma_nvt2",
13
+ 2],["ten_nvt3","ma_nvt3",3]]){const $maField$$=$idField$$,$rows$$=collectRows($data$$,$model$$,$r$$=>!$r$$[$maField$$]&&$r$$[$nameField$$]);await upsertGroups({rows:$rows$$,nameField:$nameField$$,idField:$idField$$,id_app:$id_app$$,user:$user$$,query:{modelName:"dmnvt",filter:$name$$=>({ten_nvt:$name$$,group_kind:$kind$$})},buildDoc:$name$$=>({ten_nvt:$name$$,group_kind:$kind$$})})}if($model$$.modelName!=="dmdvt"){const $uniqueDvts$$=await collectRows($data$$,$model$$,$r$$=>$r$$.ma_dvt).asyncGroupBy(["ma_dvt"],
14
+ []);for(const $dvt$$ of $uniqueDvts$$)$dvt$$.id_app=$id_app$$,$dvt$$.ten_dvt=$dvt$$.ma_dvt,$dvt$$.status=!0,$dvt$$.user_created=$user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt$$.ma_dvt,id_app:$id_app$$}).lean()||(Logger.info("[importHandler] create dvt",$dvt$$),await global.getModel("dmdvt").create($dvt$$))}if($model$$.modelName!=="dmvt"){let $vts$$=collectRows($data$$,$model$$,$r$$=>$r$$.ma_vt&&$r$$.ten_vt).map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||
15
+ "Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",ma_nvt:$vt$$.ma_nvt,ten_nvt:$vt$$.ten_nvt,ma_nvt2:$vt$$.ma_nvt2,ten_nvt2:$vt$$.ten_nvt2,ma_nvt3:$vt$$.ma_nvt3,ten_nvt3:$vt$$.ten_nvt3,user_created:$user$$.email}));$vts$$=await $vts$$.asyncGroupBy("ma_vt ten_vt ma_dvt ma_nvt ten_nvt ma_nvt2 ten_nvt2 ma_nvt3 ten_nvt3".split(" "),[]);$findTk_listInfo$$=async $prefix$$=>(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^"+$prefix$$,$options:"i"}},{tk:1}).lean()||{}).tk;const [$tk_vt$$,
16
+ $tk_gv$$,$tk_dt$$]=await Promise.all([$findTk_listInfo$$("156"),$findTk_listInfo$$("632"),$findTk_listInfo$$("511")]);for(const $vt$$ of $vts$$)$vt$$.id_app=$id_app$$,$vt$$.tk_vt=$tk_vt$$,$vt$$.tk_gv=$tk_gv$$,$vt$$.tk_dt=$tk_dt$$,$vt$$.status=!0,$vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$vt$$.ma_vt,id_app:$id_app$$}).lean()||(Logger.info("[importHandler] create product",$vt$$),await global.getModel("dmvt").create($vt$$),$model$$.modelName!=="dmqddvt"&&await global.getModel("dmqddvt").create({id_app:$id_app$$,
17
+ status:!0,ma_vt:$vt$$.ma_vt,ma_dvt:$vt$$.ma_dvt,tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)||delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});Logger.info("[importHandler] begin import",$ctrl$$.name);await runSequential($data$$,async $row$$=>{for(var $key$$ of Object.keys($row$$)){if(!$ctrl$$.model.schema.paths[$key$$])continue;var $dataType_trimmed$$=
18
+ $ctrl$$.model.schema.paths[$key$$].instance.toLowerCase();const $dataValue$$=$row$$[$key$$];if($dataValue$$&&isString($dataValue$$)&&($dataType_trimmed$$==="mixed"||$dataType_trimmed$$==="array")&&($dataType_trimmed$$=$dataValue$$.trim(),$dataType_trimmed$$[0]==="["||$dataType_trimmed$$[0]==="{"))try{$row$$[$key$$]=JSONParser($dataType_trimmed$$)}catch($e$$){delete $row$$[$key$$],Logger.error("[importHandler] Error parse data",$e$$)}}for(var $field_ref_hasUnique_row_keys$$ of $modelJoins$$)$row$$[$field_ref_hasUnique_row_keys$$.name]&&
19
+ ($key$$=await global.getModel("originimportid").findOne({id_app:$id_app$$,old_id:$row$$[$field_ref_hasUnique_row_keys$$.name]}).lean())&&($row$$[$field_ref_hasUnique_row_keys$$.name]=$key$$.new_id);delete $row$$.__v;const $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&$id_app$$!==$row$$.id_app&&delete $row$$._id;delete $row$$.id_app;const $pushError$$=$e$$=>{$rows_error$$.push({row:$row$$,error:isArray($e$$)?$e$$:[{error:$e$$.error||$e$$,code:$e$$.code}]})},
20
+ $handleOldId$$=async $new_row$$=>{$row$$._id_new__=$new_row$$._id.toString();if($old_id$$){await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},{new:!0,upsert:!0});for(const $_r$$ of $data$$)for(const $key$$ of Object.keys($_r$$))$key$$!=="_id"&&$_r$$[$key$$]===$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},
21
+ {[$key$$]:$new_row$$._id.toString()}))}};$field_ref_hasUnique_row_keys$$=$ctrl$$.options?.unique_imp||$ctrl$$.unique&&$ctrl$$.unique.length>0;if($replace$$&&($field_ref_hasUnique_row_keys$$||$row$$._id)){let $query$$={};if($field_ref_hasUnique_row_keys$$){if($ctrl$$.options.unique_imp&&$row$$[$ctrl$$.options.unique_imp]!=null&&$row$$[$ctrl$$.options.unique_imp]!=="")$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else{$field_ref_hasUnique_row_keys$$=Object.keys($row$$);for(const $k$$ of $ctrl$$.unique)$field_ref_hasUnique_row_keys$$.includes($k$$)&&
22
+ $row$$[$k$$]!==void 0&&($query$$[$k$$]=$row$$[$k$$]);if(Object.keys($query$$).length<1){$rows_error$$.push({row:$row$$,error:[{error:"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u c\u1ea7n c\u00f3 \u00edt nh\u1ea5t m\u1ed9t gi\u00e1 tr\u1ecb: "+$ctrl$$.unique.join(",")}]});return}}$ctrl$$.require_id_app!==!1&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;await executeInTransaction(()=>new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{const $rss$$=await $ctrl$$.model.find($query$$).inTxn().lean();
23
+ if($rss$$.length>1)return $reject$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+Object.values($query$$).join("-")+" \u0111\u00e3 t\u1ed3n t\u1ea1i nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n");const $found$$=$rss$$[0];$found$$?($row$$.id_app=$found$$.id_app,$row$$._id=$found$$._id.toString(),($ctrl$$.unique||[]).forEach($k$$=>{$row$$[$k$$]=$found$$[$k$$]}),Logger.info("[importHandler] update..."),update($user$$,$ctrl$$,$found$$._id,$row$$,$e$$=>{$e$$&&$pushError$$($e$$);Logger.info("[importHandler] updated successfully");
24
+ $resolve$$()},"import",$options$$.req,"import")):(Logger.info("[importHandler] create..."),create($user$$,$ctrl$$,$row$$,async($e$$,$new_row$$)=>{$e$$?$pushError$$($e$$):await $handleOldId$$($new_row$$);$resolve$$()},$row$$._id,$options$$.req,"import"))})})).catch($error$$=>{Logger.error("[importHandler] L\u1ed7i t\u00ecm object:",$error$$.message);$rows_error$$.push({row:$row$$,error:[{error:$error$$.message||$error$$}]})})}else await executeInTransaction(()=>new Promise($resolve$$=>{create($user$$,
25
+ $ctrl$$,$row$$,async($e$$,$new_row$$)=>{$e$$?(Logger.error("[importHandler] error import data, creating...",$e$$),$pushError$$($e$$)):await $handleOldId$$($new_row$$);$resolve$$()},$row$$._id,$options$$.req,"import")}))})}catch($error$$){return Logger.error("[importHandler]",$error$$),$callback_main$$($error$$)}Logger.info(`[importHandler] \u0110\u00e3 import t\u1edbi ${$ctrl$$.name} th\u00e0nh c\u00f4ng: ${$data$$.length-$rows_error$$.length} d\u00f2ng, th\u1ea5t b\u1ea1i: ${$rows_error$$.length} d\u00f2ng`);
26
+ $callback_main$$(null,{rows_imported:$data$$.length-$rows_error$$.length,rows_error:$rows_error$$})}module.exports=importHandler;
@@ -0,0 +1,41 @@
1
+ const async=require("async"),_=require("lodash"),{JSONParser}=require("../libs/utils"),{createHandler}=require("./createHandler"),{updateHandler}=require("./updateHandler"),{executeInTransaction}=require("../libs/sessionContext.js"),create=async($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add")=>{$req$$=$req$$||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;createHandler($ctrl$$,$req$$,($e_obj_created$$,
2
+ $returnvalue$$)=>{if($e_obj_created$$)return $callback$$($e_obj_created$$);({obj_created:$e_obj_created$$}=$returnvalue$$);$callback$$(null,$e_obj_created$$)})},update=async function($user$$,$ctrl$$,$id$$,$data$$,$callback$$,$action$$,$req$$,$_action$$="update"){$req$$=$req$$||{};$req$$.action=$action$$;$req$$._action=$_action$$;$req$$.user=$user$$;$req$$.id=$id$$;$req$$.data=$data$$;updateHandler($ctrl$$,$req$$,($e$$,$returnvalue$$)=>{if($e$$)return $callback$$($e$$);$callback$$(null,$returnvalue$$.new_obj)})};
3
+ async function importHandler($user$$,$ctrl$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null,listinfo_code:null}){const $model$$=$ctrl$$.model;let $replace$$=$options$$.replace,$rows_error$$=[];var $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=global.getModel("listinfo"),$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.findOne({code:($options$$.listinfo_code||$ctrl$$.name).toLowerCase()}).lean();let $modelJoins$$=
4
+ [];$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$&&(await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.updateModel($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$,$ctrl$$.model),$modelJoins$$=($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.fields||[]).filter($f$$=>$f$$.ref_model&&$f$$.ref_field=="_id"));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});if(configs.limitRowImport&&$data$$.length>configs.limitRowImport)return $callback_main$$("S\u1ed1 d\u00f2ng import t\u1ed1i \u0111a 1 l\u1ea7n l\u00e0 "+
5
+ configs.limitRowImport);Logger.info("[importHanlder] \u0110ang import t\u1edbi",$model$$.modelName,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u...");if($model$$.modelName!=="group"){var $nh_kh$$=$data$$.filter($r$$=>$r$$.ten_nh_kh);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_nh_kh2);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_nh_kh3);$model$$.schema.paths.details&&($nh_kh$$=$nh_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,
6
+ $b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh)),$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh2)),$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_nh_kh3)));var $nh_kh_ten_nh_kh1s$$=
7
+ await $nh_kh$$.filter($c$$=>$c$$.ten_nh_kh&&!$c$$.nh_kh).asyncGroupBy(["ten_nh_kh"],[]);for(let $nh_kh1$$ of $nh_kh_ten_nh_kh1s$$){$nh_kh_ten_nh_kh1s$$={};$nh_kh_ten_nh_kh1s$$.id_app=$id_app$$;$nh_kh_ten_nh_kh1s$$.group_name=$nh_kh1$$.ten_nh_kh;$nh_kh_ten_nh_kh1s$$.group_type="CUSTOMER";$nh_kh_ten_nh_kh1s$$.group_kind=1;$nh_kh_ten_nh_kh1s$$.status=!0;$nh_kh_ten_nh_kh1s$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh1$$.ten_nh_kh,id_app:$id_app$$,
8
+ group_kind:1,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$nh_kh$$.filter($c$$=>$c$$.ten_nh_kh==$nh_kh1$$.ten_nh_kh).forEach($c$$=>{$c$$.nh_kh=$check$$._id.toString()});else{const $new_nh_kh$$=await global.getModel("group").create($nh_kh_ten_nh_kh1s$$);$nh_kh$$.filter($c$$=>$c$$.ten_nh_kh==$nh_kh1$$.ten_nh_kh).forEach($c$$=>{$c$$.nh_kh=$new_nh_kh$$._id.toString()})}}$nh_kh$$=await $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2&&!$c$$.nh_kh2).asyncGroupBy(["ten_nh_kh2"],[]);
9
+ for(let $nh_kh2$$ of $nh_kh$$){$nh_kh$$={};$nh_kh$$.id_app=$id_app$$;$nh_kh$$.group_name=$nh_kh2$$.ten_nh_kh2;$nh_kh$$.group_type="CUSTOMER";$nh_kh$$.group_kind=2;$nh_kh$$.status=!0;$nh_kh$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh2$$.ten_nh_kh2,id_app:$id_app$$,group_kind:2,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2==$nh_kh2$$.ten_nh_kh2).forEach($c$$=>{$c$$.nh_kh2=$check$$._id.toString()});
10
+ else{const $new_nh_kh$$=await global.getModel("group").create($nh_kh$$);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh2==$nh_kh2$$.ten_nh_kh2).forEach($c$$=>{$c$$.nh_kh2=$new_nh_kh$$._id.toString()})}}$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh3&&!$c$$.nh_kh3).asyncGroupBy(["ten_nh_kh3"],[]);for(let $nh_kh3$$ of $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$={};$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.id_app=
11
+ $id_app$$;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_name=$nh_kh3$$.ten_nh_kh3;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_type="CUSTOMER";$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_kind=3;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.status=!0;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.user_created=$user$$.email;let $check$$=await global.getModel("group").findOne({group_name:$nh_kh3$$.ten_nh_kh3,id_app:$id_app$$,group_kind:3,group_type:"CUSTOMER"},{_id:1}).lean();if($check$$)$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>
12
+ $c$$.ten_nh_kh3==$nh_kh3$$.ten_nh_kh3).forEach($c$$=>{$c$$.nh_kh3=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom kh3",$nh_kh3$$.ten_nh_kh3);const $new_nh_kh$$=await global.getModel("group").create($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nh_kh3==$nh_kh3$$.ten_nh_kh3).forEach($c$$=>{$c$$.nh_kh3=$new_nh_kh$$._id.toString()})}}}if($model$$.modelName!=="customer"){$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=
13
+ [];$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>$r$$.ten_kh);$model$$.schema.paths.details&&($custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.map($kh$$=>{$kh$$.ma_kh||
14
+ ($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||"",nh_kh:$kh$$.nh_kh,ten_nh_kh:$kh$$.ten_nh_kh,ten_nh_kh2:$kh$$.ten_nh_kh2,nh_kh2:$kh$$.nh_kh2,ten_nh_kh3:$kh$$.ten_nh_kh3,nh_kh3:$kh$$.nh_kh3}});$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.asyncGroupBy("ma_kh ten_kh dia_chi dien_thoai ma_so_thue nh_kh nh_kh2 nh_kh3".split(" "),
15
+ []);for(var $dvts_kh$$ of $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$)$dvts_kh$$.id_app=$id_app$$,$dvts_kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($dvts_kh$$)}$dvts_kh$$=[];if($model$$.modelName!=="dmkho"){$model$$.schema.paths.ma_kho&&($dvts_kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));
16
+ $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$dvts_kh$$.map($kh$$=>{$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho}});$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.asyncGroupBy(["ma_kho","ten_kho"],[]);for(let $kho$$ of $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$)$kho$$.id_app=$id_app$$,$kho$$.user_created=
17
+ $user$$.email,$kho$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho$$),$dvts_kh$$.filter($c$$=>!$c$$.ma_kho&&$c$$.ten_kho===$kho$$.ten_kho).forEach($c$$=>{$c$$.ma_kho=$kho$$.ma_kho})}if($model$$.modelName!=="dmnvt"){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$data$$.filter($r$$=>!$r$$.ma_nvt&&$r$$.ten_nvt);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$data$$.filter($r$$=>!$r$$.ma_nvt2&&$r$$.ten_nvt2);
18
+ $dvts_kh$$=$data$$.filter($r$$=>!$r$$.ma_nvt3&&$r$$.ten_nvt3);$model$$.schema.paths.details&&($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>!$r$$.ma_nvt&&$r$$.ten_nvt)),$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>
19
+ !$r$$.ma_nvt2&&$r$$.ten_nvt2)),$dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>!$r$$.ma_nvt3&&$r$$.ten_nvt3)));$nh_kh$$=await $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt).asyncGroupBy(["ten_nvt"],[]);for(let $nh_vt1$$ of $nh_kh$$){$nh_kh$$={};$nh_kh$$.id_app=$id_app$$;$nh_kh$$.ten_nvt=$nh_vt1$$.ten_nvt;$nh_kh$$.group_kind=1;$nh_kh$$.status=!0;$nh_kh$$.user_created=$user$$.email;let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt1$$.ten_nvt,
20
+ id_app:$id_app$$,group_kind:1},{_id:1}).lean();if($check$$)$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt==$nh_vt1$$.ten_nvt).forEach($c$$=>{$c$$.ma_nvt=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu",$nh_vt1$$.ten_nvt);const $new_nvt$$=await global.getModel("dmnvt").create($nh_kh$$);$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.filter($c$$=>$c$$.ten_nvt==$nh_vt1$$.ten_nvt).forEach($c$$=>{$c$$.ma_nvt=$new_nvt$$._id.toString()})}}$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=
21
+ await $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nvt2).asyncGroupBy(["ten_nvt2"],[]);for(let $nh_vt2$$ of $info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$){$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$={};$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.id_app=$id_app$$;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.ten_nvt=$nh_vt2$$.ten_nvt2;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.group_kind=2;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.status=!0;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$.user_created=$user$$.email;
22
+ let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt2$$.ten_nvt2,id_app:$id_app$$,group_kind:2},{_id:1}).lean();if($check$$)$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>$c$$.ten_nvt2==$nh_vt2$$.ten_nvt2).forEach($c$$=>{$c$$.ma_nvt2=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu 2",$nh_vt2$$.ten_nvt2);const $new_nvt$$=await global.getModel("dmnvt").create($info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$);$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.filter($c$$=>
23
+ $c$$.ten_nvt2==$nh_vt2$$.ten_nvt2).forEach($c$$=>{$c$$.ma_nvt2=$new_nvt$$._id.toString()})}}$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=await $dvts_kh$$.filter($c$$=>$c$$.ten_nvt3).asyncGroupBy(["ten_nvt3"],[]);for(let $nh_vt3$$ of $custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$){$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$={};$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.id_app=$id_app$$;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.ten_nvt=
24
+ $nh_vt3$$.ten_nvt3;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.group_kind=3;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.status=!0;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$.user_created=$user$$.email;let $check$$=await global.getModel("dmnvt").findOne({ten_nvt:$nh_vt3$$.ten_nvt3,id_app:$id_app$$,group_kind:3},{_id:1}).lean();if($check$$)$dvts_kh$$.filter($c$$=>$c$$.ten_nvt3==$nh_vt3$$.ten_nvt3).forEach($c$$=>{$c$$.ma_nvt3=$check$$._id.toString()});else{Logger.info("[importHanlder] create nhom vat tu 3",
25
+ $nh_vt3$$.ten_nvt3);const $new_nvt$$=await global.getModel("dmnvt").create($custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$);$dvts_kh$$.filter($c$$=>$c$$.ten_nvt3==$nh_vt3$$.ten_nvt3).forEach($c$$=>{$c$$.ma_nvt3=$new_nvt$$._id.toString()})}}}if($model$$.modelName!=="dmdvt"){$dvts_kh$$=$data$$.filter($r$$=>$r$$.ma_dvt);$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_dvt)));$dvts_kh$$=
26
+ await $dvts_kh$$.asyncGroupBy(["ma_dvt"],[]);for(var $dvt_vts$$ of $dvts_kh$$)$dvt_vts$$.id_app=$id_app$$,$dvt_vts$$.ten_dvt=$dvt_vts$$.ma_dvt,$dvt_vts$$.status=!0,$dvt_vts$$.user_created=$user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_vts$$.ma_dvt,id_app:$id_app$$}).lean()||(Logger.info("[importHanlder] create dvt",$dvt_vts$$),await global.getModel("dmdvt").create($dvt_vts$$))}if($model$$.modelName!=="dmvt"){$dvt_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt);$model$$.schema.paths.details&&
27
+ ($dvt_vts$$=$dvt_vts$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));$dvt_vts$$=$dvt_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",ma_nvt:$vt$$.ma_nvt,ten_nvt:$vt$$.ten_nvt,ma_nvt2:$vt$$.ma_nvt2,ten_nvt2:$vt$$.ten_nvt2,ma_nvt3:$vt$$.ma_nvt3,ten_nvt3:$vt$$.ten_nvt3,user_created:$user$$.email}));$dvt_vts$$=await $dvt_vts$$.asyncGroupBy("ma_vt ten_vt ma_dvt ma_nvt ten_nvt ma_nvt2 ten_nvt2 ma_nvt3 ten_nvt3".split(" "),
28
+ []);$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(var $limit_vt$$ of $dvt_vts$$)$limit_vt$$.id_app=
29
+ $id_app$$,$limit_vt$$.tk_vt=$dvts_kh$$,$limit_vt$$.tk_gv=$custs_kho_will_creates_listInfo_new_custs_nh_kh3s_nh_vt$$,$limit_vt$$.tk_dt=$info_nh_kh$jscomp$2_nh_kh2s_nh_vt$$,$limit_vt$$.status=!0,$limit_vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$limit_vt$$.ma_vt,id_app:$id_app$$}).lean()||(Logger.info("[importHanlder] create product",$limit_vt$$),await global.getModel("dmvt").create($limit_vt$$),$model$$.modelName!=="dmqddvt"&&await global.getModel("dmqddvt").create({id_app:$id_app$$,
30
+ status:!0,ma_vt:$limit_vt$$.ma_vt,ma_dvt:$limit_vt$$.ma_dvt,tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)||delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});Logger.error("[importHanlder] begin import",$ctrl$$.name);$limit_vt$$=100;if($ctrl$$.options?.unique_imp||$ctrl$$.unique&&$ctrl$$.unique.length>0)$limit_vt$$=1;async.mapLimit($data$$,
31
+ $limit_vt$$,function($row$$,$callback$$){const $row_keys$$=Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>{let $data_type$$=$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase(),$data_value$$=$row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&($data_type$$=="mixed"||$data_type$$=="array")&&($data_value$$=$data_value$$.trim(),$data_value$$.indexOf("[")==0||$data_value$$.indexOf("{")==0))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],
32
+ Logger.error("[importHanlder] Error parse data",$e$$)}});setImmediate(async()=>{for(let $i$$=0;$i$$<$modelJoins$$.length;$i$$++){let $field_ref$$=$modelJoins$$[$i$$];if($row$$[$field_ref$$.name]){let $new_data_ref$$=await global.getModel("originimportid").findOne({id_app:$id_app$$,old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&
33
+ $id_app$$!=$row$$.id_app&&delete $row$$._id;delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&$ctrl$$.unique.length>0||$row$$._id)){let $query$$={};if($ctrl$$.options?.unique_imp||$ctrl$$.unique&&$ctrl$$.unique.length>0){if($ctrl$$.options.unique_imp&&$row$$[$ctrl$$.options.unique_imp]!=null&&$row$$[$ctrl$$.options.unique_imp]!=void 0&&$row$$[$ctrl$$.options.unique_imp]!="")$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){$row_keys$$.indexOf($k$$)>=
34
+ 0&&($query$$[$k$$]=$row$$[$k$$],$query$$[$k$$]==void 0&&delete $query$$[$k$$])}),Object.keys($query$$).length<1)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u c\u1ea7n c\u00f3 \u00edt nh\u1ea5t m\u1ed9t gi\u00e1 tr\u1ecb:"+$ctrl$$.unique.join(","));$ctrl$$.require_id_app!=0&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;await executeInTransaction(()=>new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{const $rss$$=await $ctrl$$.model.find($query$$).inTxn().lean();
35
+ if($rss$$.length>1)return $reject$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+Object.values($query$$).join("-")+" \u0111\u00e3 t\u1ed3n t\u1ea1i nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n");let $foundObject$$;$rss$$.length===1&&($foundObject$$=$rss$$[0]);$foundObject$$?($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),Logger.info("[importHanlder] update..."),update($user$$,
36
+ $ctrl$$,$foundObject$$._id,$row$$,function($e$$){if($e$$){let $_e$$=$e$$;_.isArray($_e$$)||($_e$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$$})}Logger.info("[importHanlder] updated successfull");$resolve$$()},"import",$options$$.req,"import")):(Logger.info("[importHanlder] create..."),create($user$$,$ctrl$$,$row$$,async function($e$jscomp$4_i$$,$_e$$){if($e$jscomp$4_i$$)$_e$$=$e$jscomp$4_i$$,_.isArray($_e$$)||($_e$$=[{error:$e$jscomp$4_i$$.error||$e$jscomp$4_i$$,
37
+ code:$e$jscomp$4_i$$.code}]),$rows_error$$.push({row:$row$$,error:$_e$$});else if($row$$._id_new__=$_e$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$_e$$.id_app,old_id:$old_id$$},{id_app:$_e$$.id_app,old_id:$old_id$$,new_id:$_e$$._id.toString()},{new:!0,upsert:!0}),$e$jscomp$4_i$$=0;$e$jscomp$4_i$$<$data$$.length;$e$jscomp$4_i$$++){const $_r$$=$data$$[$e$jscomp$4_i$$];for(let $key$$ in $_r$$)$key$$!="_id"&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=
38
+ $_e$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$_e$$._id.toString()}))}$resolve$$()},$row$$._id,$options$$.req,"import"))})})).then(()=>{$callback$$()}).catch($error$$=>{Logger.error("[importHanlder] L\u1ed7i t\u00ecm object:",$error$$.message);$callback$$($error$$)})}else await executeInTransaction(()=>new Promise($resolve$$=>{create($user$$,$ctrl$$,$row$$,async function($e$jscomp$5_i$$,$_e$jscomp$2_new_row$$){if($e$jscomp$5_i$$)Logger.error("[importHanlder] error import data, creating...",
39
+ $e$jscomp$5_i$$),$_e$jscomp$2_new_row$$=$e$jscomp$5_i$$,_.isArray($_e$jscomp$2_new_row$$)||($_e$jscomp$2_new_row$$=[{error:$e$jscomp$5_i$$.error||$e$jscomp$5_i$$,code:$e$jscomp$5_i$$.code}]),$rows_error$$.push({error:$_e$jscomp$2_new_row$$});else if($row$$._id_new__=$_e$jscomp$2_new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$_e$jscomp$2_new_row$$.id_app,old_id:$old_id$$},{id_app:$_e$jscomp$2_new_row$$.id_app,old_id:$old_id$$,new_id:$_e$jscomp$2_new_row$$._id.toString()},
40
+ {new:!0,upsert:!0}),$e$jscomp$5_i$$=0;$e$jscomp$5_i$$<$data$$.length;$e$jscomp$5_i$$++){const $_r$$=$data$$[$e$jscomp$5_i$$];for(let $key$$ in $_r$$)$key$$!="_id"&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$_e$jscomp$2_new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$_e$jscomp$2_new_row$$._id.toString()}))}$resolve$$()},$row$$._id,$options$$.req,"import")})),$callback$$()})},function($error$$){if($error$$)return Logger.error("[importHanlder]",$error$$),
41
+ $callback_main$$($error$$);Logger.info(`[importHanlder] \u0110\u00e3 import t\u1edbi ${$ctrl$$.name} th\u00e0nh c\u00f4ng: ${$data$$.length-$rows_error$$.length} d\u00f2ng, th\u1ea5t b\u1ea1i: ${$rows_error$$.length} d\u00f2ng`);$callback_main$$(null,{rows_imported:$data$$.length-$rows_error$$.length,rows_error:$rows_error$$})})}module.exports=importHandler;
@@ -1,13 +1,16 @@
1
1
  const moment=require("moment"),_=require("lodash"),permission=require("../libs/permission"),{JSONParser}=require("../libs/utils"),{getCacheReport,setCacheReport}=require("../libs/redis-cache"),{executeInTransaction}=require("../libs/sessionContext"),rptHandler=async($ctrl$$,$req$$,$callback$$,$res$$)=>{const $rptId$$=$ctrl$$.module,$module$$=$ctrl$$.module,$options$$=$ctrl$$.options;let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user);delete $req$$.query.rpt;let $body$$={};_.isObject($req$$.body)&&
2
2
  ($body$$=$req$$.body);let $query$$={...$req$$.query,...$body$$};try{$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());$query$$.tu_ngay_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_kt).startOf("date").toDate());$query$$.den_ngay_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_kt).endOf("date").toDate());$query$$.tu_ngay_gio&&($query$$.tu_ngay=moment($query$$.tu_ngay_gio).toDate());
3
- $query$$.den_ngay_gio&&($query$$.den_ngay=moment($query$$.den_ngay_gio).toDate());$query$$.tu_ngay_gio_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_gio_kt).toDate());$query$$.den_ngay_gio_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_gio_kt).toDate());for(let $q$$ in $query$$)if(!$query$$[$q$$])delete $query$$[$q$$];else if(_.isString($query$$[$q$$])&&($query$$[$q$$].indexOf("[")>=0||$query$$[$q$$].indexOf("{")>=0))try{$query$$[$q$$]=JSONParser($query$$[$q$$])}catch($e$$){Logger.error("[rptHanlder]can't parse json",
4
- $query$$[$q$$],$rptId$$)}$req$$.query=$query$$;let $limit$$=Number($req$$.query.limit||20)||20,$page$$=Number($req$$.query.page||1)||1,$skip$$=($page$$-1)*$limit$$;$skip$$<0&&($skip$$=0);$query$$.pagination&&Logger.warn("[rptHandler] pagination",{rptId:$rptId$$,limit:$limit$$,page:$page$$,skip:$skip$$,id_session:$query$$.id_session});const $_query$$=Object.assign({},$query$$);delete $_query$$.id_rpt;delete $_query$$.t;delete $_query$$.jsonstream;delete $_query$$.cType;delete $_query$$.refresh_required;
5
- delete $_query$$.isDrilldown;let $getData$$;const $getDataFromServer$$=$ctrl$$.getDataFunc();if($query$$.pagination&&$query$$.id_session&&!$query$$.refresh_required&&!$options$$.stream){Logger.info("[rptHandler] get cache",$rptId$$,$query$$.id_session,"...");let $cacheData$$=await getCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$query$$.id_session,$limit$$,$query$$.page,null);$getData$$=$cacheData$$&&$cacheData$$.pagination?function($req$$,$callback$$){$callback$$(null,$cacheData$$,
6
- !1,!0)}:$getDataFromServer$$}else $getData$$=$getDataFromServer$$;let $streamData$$=function(){let $prechunk$$,$_interval$$,$sendHeader_yn$$,$rows$$=[];$getData$$($req$$,async($error$$,$data$$,$stream$$,$from_cache$$)=>{if($error$$){Logger.error(`\u274c [rptHanlder] ${$rptId$$} l\u1ed7i:`,$error$$);if(!$sendHeader_yn$$||!$options$$.stream||!$res$$)return $callback$$({error:$error$$.message||$error$$});$_interval$$&&clearInterval($_interval$$);setTimeout(()=>{$res$$.end(JSON.stringify({error:$error$$.toString()}))},
7
- 1E3)}else if($options$$.stream&&$res$$)switch($stream$$){case "begin":Logger.info("begin stream",$rptId$$,"...");$query$$.jsonstream?$res$$.setHeader("Content-Type","application/jsonstream"):($res$$.setHeader("Content-Type","application/json"),$res$$.setHeader("status",200),$res$$.write(""));$sendHeader_yn$$=!0;$_interval$$=setInterval(()=>{Logger.info("running stream","log",$rptId$$,"...");$res$$.write("")},100);break;case "running":Logger.info("running stream",$rptId$$,"...");$res$$.write("");break;
8
- case "data":Logger.info("data stream",$rptId$$,"...");_.isArray($data$$)?$rows$$=$rows$$.concat($data$$):$rows$$.push($data$$);$query$$.jsonstream?$res$$.write(JSON.stringify($data$$)+"$$end%"):$prechunk$$?$res$$.write(","+JSON.stringify($data$$)):$res$$.write(JSON.stringify($data$$));$prechunk$$=$data$$;break;case "end":$_interval$$&&clearInterval($_interval$$);setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},
9
- $req$$.user.email,$req$$.user_agent,$req$$)});setTimeout(function(){Logger.info("end stream",$rptId$$,"...");$res$$.end();$callback$$(null,"__end_stream__")},1E3);break;default:Logger.info($stream$$,$rptId$$,"..."),$res$$.write("")}else setImmediate(()=>{global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$)}),setImmediate(async()=>{let $report$$=$data$$;if(_.isArray($report$$)){if($query$$.fields){let $fields$$=
10
- $query$$.fields.split(",");$report$$=$report$$.map($item$$=>{let $_item$$={};$fields$$.forEach($field$$=>{$_item$$[$field$$]=$item$$[$field$$]});return $_item$$})}if($query$$.group_by&&$query$$.group_by_summary)try{$report$$=await $report$$.asyncGroupBy($query$$.group_by.split(","),$query$$.group_by_summary.split(","))}catch($e$$){return Logger.error("report groupBy data",$e$$,$rptId$$,"..."),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}}if($req$$.query.pagination&&!$from_cache$$)try{let $session$$=
11
- await setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$report$$,JSON.stringify($_query$$)),$data_cache$$=$session$$.data_cache||[],$total$$=$data_cache$$.length;$callback$$(null,{...($session$$.info||{}),id_session:$session$$._id.toString(),data:$data_cache$$.slice($skip$$,$skip$$+$limit$$),pagination:{limit:$limit$$,page:$page$$,total:$total$$,totalPages:Math.ceil($total$$/$limit$$)}})}catch($e$$){Logger.error("[rptHandler] L\u1ed7i cache report",$e$$),$callback$$(null,$report$$)}else $callback$$(null,
12
- $report$$)})})};$options$$.require_id_app===!1?$streamData$$():permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view",($error$$,$hr$$)=>{$hr$$?$streamData$$():$callback$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xem b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}catch($e$$){return $e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}},rptHandlerAsync=($ctrl$$,$req$$,$res$$)=>new Promise(($resolve$$,$reject$$)=>{rptHandler($ctrl$$,$req$$,($e$$,
13
- $rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)},$res$$)}),withSesssion=async($ctrl$$,$req$$,$callback$$,$res$$)=>{if($ctrl$$.options?.useSession)try{const $rs$$=await executeInTransaction(()=>rptHandlerAsync($ctrl$$,$req$$,$res$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}else rptHandler($ctrl$$,$req$$,$callback$$,$res$$)};module.exports=withSesssion;
3
+ $query$$.den_ngay_gio&&($query$$.den_ngay=moment($query$$.den_ngay_gio).toDate());$query$$.tu_ngay_gio_kt&&($query$$.tu_ngay_kt=moment($query$$.tu_ngay_gio_kt).toDate());$query$$.den_ngay_gio_kt&&($query$$.den_ngay_kt=moment($query$$.den_ngay_gio_kt).toDate());$query$$.groupBy=$query$$.groupBy||$query$$.groupby||$query$$.group_by;for(let $q$$ in $query$$)if(!$query$$[$q$$])delete $query$$[$q$$];else if(_.isString($query$$[$q$$])&&($query$$[$q$$].indexOf("[")>=0||$query$$[$q$$].indexOf("{")>=0))try{$query$$[$q$$]=
4
+ JSONParser($query$$[$q$$])}catch($e$$){Logger.error("[rptHanlder]can't parse json",$query$$[$q$$],$rptId$$)}$req$$.query=$query$$;let $limit$$=Number($req$$.query.limit||20)||20,$page$$=Number($req$$.query.page||1)||1,$skip$$=($page$$-1)*$limit$$;$skip$$<0&&($skip$$=0);$query$$.pagination&&Logger.warn("[rptHandler] pagination",{rptId:$rptId$$,limit:$limit$$,page:$page$$,skip:$skip$$,id_session:$query$$.id_session});const $_query$$=Object.assign({},$query$$);delete $_query$$.id_rpt;delete $_query$$.t;
5
+ delete $_query$$.jsonstream;delete $_query$$.cType;delete $_query$$.refresh_required;delete $_query$$.isDrilldown;let $getData$$;const $getDataFromServer$$=$ctrl$$.getDataFunc();if($query$$.pagination&&$query$$.id_session&&!$query$$.refresh_required&&!$options$$.stream){Logger.info("[rptHandler] get cache",$rptId$$,$query$$.id_session,"...");let $cacheData$$=await getCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$query$$.id_session,$limit$$,$query$$.page,null);Logger.info("[rptHandler] pagination cache data",
6
+ $cacheData$$?.pagination);$cacheData$$&&$cacheData$$.pagination?(Logger.info("[rptHandler] get data from cache",$rptId$$,$query$$.id_session,JSON.stringify($cacheData$$.pagination,null,2),"..."),$getData$$=function($req$$,$callback$$){$callback$$(null,$cacheData$$,!1,!0)}):$getData$$=$getDataFromServer$$}else $getData$$=$getDataFromServer$$;let $streamData$$=function(){let $prechunk$$,$_interval$$,$sendHeader_yn$$,$rows$$=[];$getData$$($req$$,async($error$$,$data$$,$stream$$,$from_cache$$)=>{if($error$$){Logger.error(`\u274c [rptHanlder] ${$rptId$$} l\u1ed7i:`,
7
+ $error$$);if(!$sendHeader_yn$$||!$options$$.stream||!$res$$)return $callback$$({error:$error$$.message||$error$$});$_interval$$&&clearInterval($_interval$$);setTimeout(()=>{$res$$.end(JSON.stringify({error:$error$$.toString()}))},1E3)}else if($options$$.stream&&$res$$)switch($stream$$){case "begin":Logger.info("[rptHandler] begin stream",$rptId$$,"...");$query$$.jsonstream?$res$$.setHeader("Content-Type","application/jsonstream"):($res$$.setHeader("Content-Type","application/json"),$res$$.setHeader("status",
8
+ 200),$res$$.write(""));$sendHeader_yn$$=!0;$_interval$$=setInterval(()=>{Logger.info("[rptHandler] running stream","log",$rptId$$,"...");$res$$.write("")},100);break;case "running":Logger.info("[rptHandler] running stream",$rptId$$,"...");$res$$.write("");break;case "data":Logger.info("[rptHandler] data stream",$rptId$$,"...");_.isArray($data$$)?$rows$$=$rows$$.concat($data$$):$rows$$.push($data$$);$query$$.jsonstream?$res$$.write(JSON.stringify($data$$)+"$$end%"):$prechunk$$?$res$$.write(","+JSON.stringify($data$$)):
9
+ $res$$.write(JSON.stringify($data$$));$prechunk$$=$data$$;break;case "end":$_interval$$&&clearInterval($_interval$$);global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$);setTimeout(function(){Logger.info("[rptHandler] end stream",$rptId$$,"...");$res$$.end();$callback$$(null,"__end_stream__")},1E3);break;default:Logger.info($stream$$,$rptId$$,"..."),$res$$.write("")}else if($options$$.stream&&
10
+ $stream$$==="data"&&(Logger.info("[rptHandler] Nh\u1eadn data t\u1eeb stream..."),_.isArray($data$$)?(Logger.info("[rptHandler] data stream",$rptId$$,"..."),$rows$$=$rows$$.concat($data$$)):$rows$$.push($data$$)),!$options$$.stream||$stream$$==="end"){Logger.info("[rptHandler] B\u00e1o c\u00e1o \u0111\u00e3 ch\u1ea1y xong. ghi log v\u00e0 chu\u1ea9n b\u1ecb k\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1...");let $report$$;$stream$$==="end"?(Logger.info("[rptHandler] end stream",$rptId$$,"..."),$report$$=$rows$$):
11
+ $report$$=$data$$;global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$rptId$$,action:"VIEWRPT",data:{condition:JSON.stringify($query$$)}},$req$$.user.email,$req$$.user_agent,$req$$);setImmediate(async()=>{if(_.isArray($report$$)){if($query$$.fields){Logger.info("[rptHandler] Ch\u1ec9 l\u1ea5y c\u00e1c field \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh:",$query$$.fields);let $fields$$=$query$$.fields.split(",");$report$$=$report$$.map($item$$=>{let $_item$$={};$fields$$.forEach($field$$=>
12
+ {$_item$$[$field$$]=$item$$[$field$$]});return $_item$$})}if($query$$.group_by&&$query$$.group_by_summary){Logger.info("[rptHandler] group by:",$query$$.group_by,$query$$.group_by_summary);try{$report$$=await $report$$.asyncGroupBy($query$$.group_by.split(","),$query$$.group_by_summary.split(","))}catch($e$$){return Logger.error("[rptHandler] report groupBy data",$e$$,$rptId$$,"..."),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}}}if($req$$.query.pagination&&!$from_cache$$)try{Logger.info("[rptHandler] t\u1ea1o cache...");
13
+ let $session$$=await setCacheReport($req$$.user.email,$req$$.user.current_id_app,$rptId$$,$report$$,JSON.stringify($_query$$)),$info$$=$session$$.info||{},$data_cache$$=$session$$.data_cache||[],$total$$=$data_cache$$.length;Logger.info("[rptHandler] tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3...");$callback$$(null,{...$info$$,id_session:$session$$._id.toString(),data:$data_cache$$.slice($skip$$,$skip$$+$limit$$),pagination:{limit:$limit$$,page:$page$$,total:$total$$,totalPages:Math.ceil($total$$/$limit$$)}})}catch($e$$){Logger.error("[rptHandler] L\u1ed7i cache report",
14
+ $e$$),$callback$$(null,$report$$)}else $callback$$(null,$report$$)})}})};$options$$.require_id_app===!1?$streamData$$():permission.hasRight($req$$.params.id_app,$req$$.user.email,$module$$,"view",($error$$,$hr$$)=>{$hr$$?$streamData$$():$callback$$({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n xem b\u00e1o c\u00e1o n\u00e0y"})},{notNeedRight:$notNeedRight$$})}catch($e$$){return $e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}},rptHandlerAsync=($ctrl$$,$req$$,$res$$)=>new Promise(($resolve$$,
15
+ $reject$$)=>{rptHandler($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)},$res$$)}),withSesssion=async($ctrl$$,$req$$,$callback$$,$res$$)=>{if($ctrl$$.options?.useSession)try{Logger.warn("[rptHandler] ch\u1ea1y b\u00e1o c\u00e1o trong m\u1ed9t session",$ctrl$$.name);const $rs$$=await executeInTransaction(()=>rptHandlerAsync($ctrl$$,$req$$,$res$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}else rptHandler($ctrl$$,$req$$,$callback$$,$res$$)};
16
+ module.exports=withSesssion;
@@ -5,10 +5,10 @@ const async=require("async"),_=require("lodash"),view=async($user$$,$self$$,$row
5
5
  !$item$$.from_cached).asyncJoinModel2(null,global.getModel("user"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});$callback$$(null)})},_approve:$callback$$=>{!$fields_load$$||$fields_load$$.indexOf("approve_data")>=0?async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{global.getModel("approve").find({id_ct:$item$$._id.toString(),id_app:$item$$.id_app},{data:0,request_content:0}).sort({data_created:-1}).lean().then(async $rs$$=>{setImmediate(async()=>{$item$$.approve_data=$rs$$||
6
6
  [];$item$$.approved_latest=$item$$.approve_data.filter($a$$=>$a$$.user_approved||$a$$.user_denied)[0];$item$$.approve_next=$item$$.approve_data.filter($a$$=>!$a$$.user_approved&&!$a$$.user_denied)[0];await $item$$.approve_data.filter($r$$=>$r$$.user_approved).asyncJoinModel2($item$$.id_app,global.getModel("participant"),{where:{user_approved:"email"},fields:{user_approved_name:"name",signature_image:"signature_image"}});await $item$$.approve_data.filter($r$$=>$r$$.user_denied).asyncJoinModel2($item$$.id_app,
7
7
  global.getModel("participant"),{where:{user_denied:"email"},fields:{user_denied_name:"name",signature_image:"signature_image"}});$next$$(null)})}).catch($e$$=>{Logger.error($e$$)})})},()=>{$callback$$(null)}):$callback$$(null)},transfer_ct:$callback$$=>{if(_.has($schema_paths$$,"id_ct_chuyen")&&$user$$.current_app_info&&$user$$.current_app_info.options&&$user$$.current_app_info.options.id_app_thue)async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{$model$$.findOne({id_app:$user$$.current_app_info.options.id_app_thue,
8
- id_ct_chuyen:$item$$._id.toString()},{_id:1}).lean().then(async $rs$$=>{$rs$$&&($item$$.id_ct_nhan=$rs$$._id);$next$$(null)}).catch($e$$=>{Logger.error($e$$)})})},()=>{$callback$$(null)});else return $callback$$()},posted:$callback$$=>{$options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)?async.mapLimit($items$$,10,($item$$,$next$$)=>{setImmediate(async()=>{let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;
9
- var $exists_exists$$={_id:1};if($book$$=="sokho"&&$item$$.details?.length>0)if(await $item$$.details.asyncJoinModel2($item$$.id_app,"dmvt",{where:"ma_vt",fields:["tg_tk"]}),$exists_exists$$.ma_vt=1,$exists_exists$$=await global.getModel($book$$).find({id_app:$item$$.id_app,id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$exists_exists$$.length>0){let $ds_vt_voucher$$=$item$$.details.filter($d$$=>$d$$.tg_tk).map($d$$=>$d$$.ma_vt).sort(($a$$,$b$$)=>$a$$-$b$$),$ds_vt_book$$=$exists_exists$$.map($d$$=>
10
- $d$$.ma_vt).sort(($a$$,$b$$)=>$a$$-$b$$);$ds_vt_voucher$$.find($v$$=>$ds_vt_book$$.indexOf($v$$)<0)?$item$$[`${$book$$}_posted`]=!1:$item$$[`${$book$$}_posted`]=!0}else $item$$[`${$book$$}_posted`]=!1;else $exists_exists$$=await global.getModel($book$$).findOne({id_app:$item$$.id_app,id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$item$$[`${$book$$}_posted`]=!!$exists_exists$$;$next$$()})},()=>{$callback$$(null)}):$callback$$()}},$e$$=>{if($e$$)return $next$$($e$$);if($options$$&&$options$$.req&&
11
- ($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)){let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;$items$$=$items$$.filter($r$$=>$options$$.req.query.show_posted_book?$r$$[`${$book$$}_posted`]:!$r$$[`${$book$$}_posted`])}let $items_need_view$$=$items$$.filter($i$$=>!$i$$.from_cached),$items_cached$$=$items$$.filter($i$$=>$i$$.from_cached);async.series({view:$callback$$=>{if($self$$.view)try{$self$$.view($user$$,$items_need_view$$,
12
- function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)})},$options$$)}catch($e$$){Logger.error("Error on view of",$name$$,$e$$),$callback$$(null,$items_need_view$$)}else $callback$$(null,$items_need_view$$)},dynamicView:$callback$$=>{$self$$.dynamicView?$self$$.dynamicView($user$$,$items_need_view$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||
13
- $items_need_view$$;$callback$$(null,$items_need_view$$)},{listinfo_code:$listinfo_code$$,req:$options$$?.req}):$callback$$(null,$items_need_view$$)},viewRequired:$callback$$=>{$items$$=[...$items_cached$$,...$items_need_view$$].sort(($a$$,$b$$)=>$a$$.stt_sorted-$b$$.stt_sorted);if($self$$.viewRequired)try{$self$$.viewRequired($user$$,$items$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items$$=$rs$$||$items$$;$callback$$(null,$items$$)},$options$$)}catch($e$$){Logger.error("Error on viewRequired of",
14
- $name$$,$e$$),$callback$$(null,$items$$)}else $callback$$(null,$items$$)}},$error$$=>{if($error$$)return $next$$($error$$);$next$$(null,$items$$)})})};module.exports=view;
8
+ id_ct_chuyen:$item$$._id.toString()},{_id:1}).lean().then(async $rs$$=>{$rs$$&&($item$$.id_ct_nhan=$rs$$._id);$next$$(null)}).catch($e$$=>{Logger.error($e$$)})})},()=>{$callback$$(null)});else return $callback$$()},posted:$callback$$=>{$options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)?(Logger.info(`[viewHandler] x\u1eed l\u00fd y\u00eau c\u1ea7u ki\u1ec3m tra post s\u1ed5 query: ${JSON.stringify($options$$.req.query,null,2)}, items: ${$items$$.length}`),
9
+ async.mapLimit($items$$,10,($item$$,$next$$)=>{setImmediate(async()=>{let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;var $exists_exists$$={_id:1};if($book$$=="sokho"&&$item$$.details?.length>0)if(await $item$$.details.asyncJoinModel2($item$$.id_app,"dmvt",{where:"ma_vt",fields:["tg_tk"]}),$exists_exists$$.ma_vt=1,$exists_exists$$=await global.getModel($book$$).find({id_app:$item$$.id_app,id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$exists_exists$$.length>
10
+ 0){let $ds_vt_voucher$$=$item$$.details.filter($d$$=>$d$$.tg_tk).map($d$$=>$d$$.ma_vt).sort(($a$$,$b$$)=>$a$$-$b$$),$ds_vt_book$$=$exists_exists$$.map($d$$=>$d$$.ma_vt).sort(($a$$,$b$$)=>$a$$-$b$$);$ds_vt_voucher$$.find($v$$=>$ds_vt_book$$.indexOf($v$$)<0)?$item$$[`${$book$$}_posted`]=!1:$item$$[`${$book$$}_posted`]=!0}else $item$$[`${$book$$}_posted`]=!1;else $exists_exists$$=await global.getModel($book$$).findOne({id_app:$item$$.id_app,id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$item$$[`${$book$$}_posted`]=
11
+ !!$exists_exists$$;$next$$()})},()=>{$callback$$(null)})):$callback$$()}},$e$$=>{if($e$$)return $next$$($e$$);if($options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)){let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;$items$$=$items$$.filter($r$$=>$options$$.req.query.show_posted_book?$r$$[`${$book$$}_posted`]:!$r$$[`${$book$$}_posted`])}let $items_need_view$$=$items$$.filter($i$$=>!$i$$.from_cached),
12
+ $items_cached$$=$items$$.filter($i$$=>$i$$.from_cached);async.series({view:$callback$$=>{if($self$$.view)try{$self$$.view($user$$,$items_need_view$$,function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)})},$options$$)}catch($e$$){Logger.error("Error on view of",$name$$,$e$$),$callback$$(null,$items_need_view$$)}else $callback$$(null,$items_need_view$$)},dynamicView:$callback$$=>{$self$$.dynamicView?
13
+ $self$$.dynamicView($user$$,$items_need_view$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)},{listinfo_code:$listinfo_code$$,req:$options$$?.req}):$callback$$(null,$items_need_view$$)},viewRequired:$callback$$=>{$items$$=[...$items_cached$$,...$items_need_view$$].sort(($a$$,$b$$)=>$a$$.stt_sorted-$b$$.stt_sorted);if($self$$.viewRequired)try{$self$$.viewRequired($user$$,$items$$,function($error$$,
14
+ $rs$$){if($error$$)return $callback$$($error$$);$items$$=$rs$$||$items$$;$callback$$(null,$items$$)},$options$$)}catch($e$$){Logger.error("Error on viewRequired of",$name$$,$e$$),$callback$$(null,$items$$)}else $callback$$(null,$items$$)}},$error$$=>{if($error$$)return $next$$($error$$);$next$$(null,$items$$)})})};module.exports=view;