flexbiz-server 12.6.11 → 12.6.13

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 (165) hide show
  1. package/package.json +11 -3
  2. package/server/app.js +11 -10
  3. package/server/auths/local.js +6 -6
  4. package/server/cluster.js +11 -12
  5. package/server/controllers/controller.js +14 -3
  6. package/server/controllers/controllerRPT.js +4 -4
  7. package/server/controllers/controllerUtils.js +12 -12
  8. package/server/controllers/createHandler.js +20 -21
  9. package/server/controllers/deleteHandler.js +3 -3
  10. package/server/controllers/findHandler.js +49 -48
  11. package/server/controllers/updateHandler.js +25 -26
  12. package/server/controllers/viewHandler.js +14 -14
  13. package/server/flow/handlers.js +2 -2
  14. package/server/flow/nodes/aiAnalysis.js +7 -7
  15. package/server/flow/nodes/checkAction.js +7 -0
  16. package/server/flow/nodes/email.js +7 -8
  17. package/server/flow/utils.js +58 -1
  18. package/server/global.js +1 -1
  19. package/server/libs/WorkerStaticPool.js +19 -18
  20. package/server/libs/cdpskh.js +3 -2
  21. package/server/libs/cdpstk.js +11 -11
  22. package/server/libs/cktk.js +3 -3
  23. package/server/libs/ckvt.js +10 -10
  24. package/server/libs/ckvtnpp.js +6 -5
  25. package/server/libs/ckvttt.js +5 -5
  26. package/server/libs/ctvt.js +6 -6
  27. package/server/libs/dkcn.js +1 -1
  28. package/server/libs/dktk.js +4 -3
  29. package/server/libs/docs.js +31 -25
  30. package/server/libs/dtbanletheosp.js +4 -1
  31. package/server/libs/email.js +2 -2
  32. package/server/libs/executiveDashboard.js +8 -0
  33. package/server/libs/getGiaban.js +2 -2
  34. package/server/libs/kpistatus.js +38 -36
  35. package/server/libs/kqchamcong.js +12 -0
  36. package/server/libs/kqhdkd.js +8 -0
  37. package/server/libs/post-book.js +4 -3
  38. package/server/libs/post-socai.js +2 -2
  39. package/server/libs/post-sokho.js +5 -5
  40. package/server/libs/redis-cache.js +0 -0
  41. package/server/libs/sctcnkh.js +18 -0
  42. package/server/libs/sessionContext.js +6 -11
  43. package/server/libs/socaitk.js +9 -0
  44. package/server/libs/thnxt.js +2 -1
  45. package/server/libs/tinhgiatb.js +4 -4
  46. package/server/libs/tuoinophaithu.js +11 -10
  47. package/server/libs/tuoinophaitra.js +12 -10
  48. package/server/libs/utils.js +8 -4
  49. package/server/libs/vectorService.js +12 -8
  50. package/server/models/actionLog.js +2 -0
  51. package/server/models/aimemory.js +1 -0
  52. package/server/models/app.js +3 -2
  53. package/server/models/approve.js +4 -4
  54. package/server/models/chat_message.js +2 -0
  55. package/server/models/chat_session.js +2 -0
  56. package/server/models/checkin.js +2 -2
  57. package/server/models/chitietluongds.js +4 -3
  58. package/server/models/customer.js +8 -9
  59. package/server/models/data_list_config.js +2 -2
  60. package/server/models/dmchietkhau.js +3 -4
  61. package/server/models/dmchietkhauhd.js +3 -4
  62. package/server/models/dmdiemthuong.js +2 -4
  63. package/server/models/dmhoahonghd.js +2 -3
  64. package/server/models/dmhoahongnpp.js +2 -3
  65. package/server/models/dmletet.js +2 -2
  66. package/server/models/dmphatdichvu.js +1 -2
  67. package/server/models/filechunk.js +2 -2
  68. package/server/models/hd2.js +9 -11
  69. package/server/models/hd3.js +10 -11
  70. package/server/models/listinfo.js +3 -1
  71. package/server/models/pc0.js +4 -4
  72. package/server/models/pn1.js +9 -11
  73. package/server/models/pn2.js +3 -3
  74. package/server/models/pnc.js +9 -10
  75. package/server/models/pnh.js +5 -6
  76. package/server/models/pnk.js +7 -7
  77. package/server/models/pxc.js +9 -10
  78. package/server/models/pxh.js +6 -7
  79. package/server/models/pxk.js +7 -8
  80. package/server/models/schedule.js +17 -16
  81. package/server/models/sokho.js +10 -11
  82. package/server/models/step.js +1 -1
  83. package/server/modules/lists/bg-cdvt.js +1 -1
  84. package/server/modules/lists/bg-cdvtnpp.js +1 -1
  85. package/server/modules/lists/ls-chat_session.js +5 -0
  86. package/server/modules/lists/ls-checkin.js +11 -12
  87. package/server/modules/lists/ls-chitietluongds.js +2 -2
  88. package/server/modules/lists/ls-customer.js +20 -20
  89. package/server/modules/lists/ls-dmnv.js +12 -11
  90. package/server/modules/lists/ls-file.js +5 -5
  91. package/server/modules/lists/ls-mailsent.js +3 -3
  92. package/server/modules/lists/ls-warranty.js +3 -4
  93. package/server/modules/reports/calc-tinhluong.js +42 -40
  94. package/server/modules/reports/rp-dtbanlekempk.js +1 -1
  95. package/server/modules/reports/rp-dtbanletheoctkempk.js +13 -13
  96. package/server/modules/reports/rp-kgchamcong.js +1 -12
  97. package/server/modules/reports/rp-kqhdkd.js +1 -7
  98. package/server/modules/reports/rp-phanbochitienchohoadon.js +1 -1
  99. package/server/modules/reports/rp-ptcttct.js +2 -2
  100. package/server/modules/reports/rp-sctcnkh.js +4 -19
  101. package/server/modules/reports/rp-socaitk.js +1 -8
  102. package/server/modules/systems/sys-app.js +20 -19
  103. package/server/modules/vouchers/vo-hd2.js +71 -85
  104. package/server/modules/vouchers/vo-hd3.js +15 -21
  105. package/server/modules/vouchers/vo-pbl.js +48 -48
  106. package/server/modules/vouchers/vo-pc1.js +11 -11
  107. package/server/modules/vouchers/vo-pc2.js +13 -12
  108. package/server/modules/vouchers/vo-pgh.js +12 -15
  109. package/server/modules/vouchers/vo-pn1.js +27 -33
  110. package/server/modules/vouchers/vo-pnc.js +14 -15
  111. package/server/modules/vouchers/vo-pnh.js +12 -15
  112. package/server/modules/vouchers/vo-pnk.js +11 -15
  113. package/server/modules/vouchers/vo-po1.js +0 -0
  114. package/server/modules/vouchers/vo-pxc.js +24 -22
  115. package/server/modules/vouchers/vo-pxh.js +13 -22
  116. package/server/modules/vouchers/vo-pxk.js +11 -16
  117. package/server/route.js +32 -32
  118. package/server/workers/inputWorker.js +8 -8
  119. package/server/workers/reportWorker.js +3 -4
  120. package/server/workers/sendEmail.js +11 -11
  121. package/server/workers/worker-utils.js +3 -1
  122. package/server/actions/mailtemplate.js +0 -142
  123. package/server/actions/schedule.js +0 -23
  124. package/server/libs/schedule.js +0 -18
  125. package/server/models/bds_area.js +0 -4
  126. package/server/models/bds_block.js +0 -3
  127. package/server/models/bds_building.js +0 -4
  128. package/server/models/bds_floor.js +0 -3
  129. package/server/models/bds_floordetail.js +0 -9
  130. package/server/models/bds_nhadat.js +0 -13
  131. package/server/models/bds_nhadat_moigioi_ban.js +0 -3
  132. package/server/models/bds_nhomnhadat.js +0 -4
  133. package/server/models/bds_phanloainhadat.js +0 -3
  134. package/server/models/campaign.js +0 -6
  135. package/server/models/form.js +0 -3
  136. package/server/models/formvalue.js +0 -3
  137. package/server/models/hlink.js +0 -2
  138. package/server/models/hlinkvalue.js +0 -2
  139. package/server/models/kbm_bcdkt.js +0 -4
  140. package/server/models/kbm_kqhdkd.js +0 -3
  141. package/server/models/kbm_lcttgt.js +0 -5
  142. package/server/models/kbm_lctttt.js +0 -4
  143. package/server/models/kbm_pttct.js +0 -4
  144. package/server/models/kbm_tkgtgt.js +0 -5
  145. package/server/models/mailschedule.js +0 -2
  146. package/server/models/waitevent.js +0 -2
  147. package/server/modules/lists/ls-bds_area.js +0 -3
  148. package/server/modules/lists/ls-bds_block.js +0 -1
  149. package/server/modules/lists/ls-bds_building.js +0 -3
  150. package/server/modules/lists/ls-bds_dmnhbds.js +0 -6
  151. package/server/modules/lists/ls-bds_floor.js +0 -2
  152. package/server/modules/lists/ls-bds_floordetail.js +0 -19
  153. package/server/modules/lists/ls-bds_nhadat.js +0 -19
  154. package/server/modules/lists/ls-bds_nhadat_moigioi_ban.js +0 -9
  155. package/server/modules/lists/ls-bds_nhomnhadat.js +0 -1
  156. package/server/modules/lists/ls-bds_phanloainhadat.js +0 -1
  157. package/server/modules/lists/ls-campaign.js +0 -1
  158. package/server/modules/lists/ls-dmnhnd.js +0 -1
  159. package/server/modules/lists/ls-formvalue.js +0 -1
  160. package/server/modules/lists/ls-hlink.js +0 -1
  161. package/server/modules/lists/ls-hlinkvalue.js +0 -1
  162. package/server/modules/lists/ls-mailschedule.js +0 -7
  163. package/server/modules/lists/ls-waitevent.js +0 -1
  164. package/server/modules/public/form.js +0 -7
  165. package/server/modules/public/hlink.js +0 -3
@@ -1,19 +1,14 @@
1
1
  /*
2
2
  Prevent Closure Compiler rename this file */
3
3
  const {AsyncLocalStorage}=require("node:async_hooks"),storage=new AsyncLocalStorage;exports.storage=storage;global.SESSION_STORE_MAP=new Map;exports.getCurrentStore=function(){return storage.getStore()};const SESSION_EXCLUDE_MODELS="log token trangthai trangthaiapp otp cache notification email tontucthoi listinfo reportinfo options labelinfo dmqddvt".split(" ");let globalStoreCounter=0,globalSessionCounter=0;
4
+ exports.withTimeout=($promise$$,$timeoutMs$$,$txnName$$="Transaction")=>{let $timeoutId$$;const $timeoutPromise$$=new Promise(($_$$,$reject$$)=>{$timeoutId$$=setTimeout(()=>{const $err$$=Error(`[Timeout] ${$txnName$$} exceeded limit of ${$timeoutMs$$}ms`);$err$$.isCustomTimeout=!0;$reject$$($err$$)},$timeoutMs$$)});return Promise.race([$promise$$,$timeoutPromise$$]).finally(()=>{clearTimeout($timeoutId$$)})};
4
5
  exports.runWithSession=async function($session$$,$fn$$){if(!$session$$)throw Error("Session kh\u00f4ng t\u1ed3n t\u1ea1i");if(exports.getCurrentStore())return $fn$$();const $storeId$$=++globalStoreCounter,$sessionId$$=$session$$?._debugId||`txn-${++globalSessionCounter}`;$session$$&&!$session$$._debugId&&($session$$._debugId=$sessionId$$);Logger.info(`[runWithSession] start storeId=${$storeId$$}, sessionId=${$sessionId$$}, ctrl=${$session$$?.ctrl_name}`);return storage.run({session:$session$$,storeId:$storeId$$,
5
6
  sessionId:$sessionId$$},async()=>await $fn$$())};
6
- exports.handlerWithSession=async function($handler$$,$ctrl$$,$req$$,$callback$$,...$extraArgs$$){let $attempt$$=0;for(;$attempt$$<3;){const $session$$=await mongoose.startSession();$session$$.ctrl_name=$ctrl$$.name;let $afterCommitCallbacks$$=[],$storeId_for_log$$="unknown";var $err_transactionResult$$=null;try{$err_transactionResult$$=await exports.runWithSession($session$$,()=>{const $label_time$$=`\u2705 Th\u1eddi gian ch\u1ea1y session ${$session$$._debugId}:`;console.time($label_time$$);$storeId_for_log$$=
7
- exports.getCurrentStore()?.storeId||"unknown-store";Logger.info(`\ud83d\udd25 [handlerWithSession] Attempt ${$attempt$$+1} start storeId=${$storeId_for_log$$}, ctrl=${$ctrl$$.name}`);return new Promise(($resolve$$,$reject$$)=>{(async()=>{await $session$$.startTransaction();let $finished$$=!1;$handler$$($ctrl$$,$req$$,async($error$$,$result$$)=>{if(!$finished$$){$finished$$=!0;console.timeEnd($label_time$$);try{$error$$?(Logger.error("\u274c [handlerWithSession] error in handler, aborting...",$ctrl$$.name,
8
- $error$$.message,$error$$?.errorLabels),setTimeout(async()=>{await $session$$.abortTransaction();$reject$$($error$$)},200)):($session$$&&$session$$.afterCommit&&($afterCommitCallbacks$$=[...$session$$.afterCommit]),Logger.info("\u2705 [handlerWithSession] committing...",$ctrl$$.name,", s\u1ed1 l\u01b0\u1ee3ng callback afterCommit:",$afterCommitCallbacks$$.length),await $session$$.commitTransaction(),$resolve$$($result$$))}catch($e$$){Logger.error("\u274c [handlerWithSession] error during commit/abort",
9
- $e$$),await $session$$.abortTransaction().catch(()=>{}),$reject$$($e$$)}}},...$extraArgs$$)})()})});await $session$$.endSession();Logger.info("\u2705 [handlerWithSession] transaction committed, session closed");Logger.info(`\ud83d\udd25 [onAfterCommit] running ${$afterCommitCallbacks$$.length} callbacks for storeId=${$storeId_for_log$$}`);$afterCommitCallbacks$$.length>0&&await exports.runWithoutSession(async()=>{for(const $cb$$ of $afterCommitCallbacks$$)try{await $cb$$()}catch($err$$){Logger.error("\u274c [onAfterCommit error]",
10
- $err$$)}});$callback$$(null,$err_transactionResult$$);return}catch($err$$){if(await $session$$.endSession().catch(()=>{}),Logger.warn("\u274c [handlerWithSession] transaction failed, session closed"),$attempt$$++,($err$$?.errorLabels?.includes("TransientTransactionError")||$err$$?.errorLabels?.includes("UnknownTransactionCommitResult")||$err$$?.code===112||$err$$?.message?.includes("Write conflict"))&&$attempt$$<3){const $delay$$=200*Math.pow(2,$attempt$$-1);Logger.warn(`\u26a0\ufe0f [handlerWithSession] Retry transaction (attempt ${$attempt$$}/${3}) after ${$delay$$}ms`);
11
- await new Promise($res$$=>setTimeout($res$$,$delay$$))}else{Logger.error(`\u274c [handlerWithSession] Transaction failed permanently (${$ctrl$$.name})`,$err$$);$callback$$($err$$);return}}}$err_transactionResult$$=Error("Transaction failed after 3 retries");Logger.error(`\u274c [handlerWithSession] Max retries exceeded (${$ctrl$$.name})`);$callback$$($err_transactionResult$$)};
12
- exports.executeInTransaction=async function($fn$$,$options$jscomp$2_parentSession_session$$={useParent:!1,forceSession:!1}){const {useParent:$useParent$$=!1,forceSession:$forceSession$$=!1}=$options$jscomp$2_parentSession_session$$;$options$jscomp$2_parentSession_session$$=exports.getCurrentSession();if($useParent$$&&$options$jscomp$2_parentSession_session$$&&!$options$jscomp$2_parentSession_session$$.hasEnded)return Logger.info(`\ud83d\udd17 [executeInTransaction] Join existing transaction ID=${$options$jscomp$2_parentSession_session$$._debugId||
13
- $options$jscomp$2_parentSession_session$$.id.id}`),await $fn$$($options$jscomp$2_parentSession_session$$);$options$jscomp$2_parentSession_session$$=await mongoose.startSession();const $outerSessionId$$=`txn-auto-${++globalSessionCounter}`;$options$jscomp$2_parentSession_session$$._debugId=$outerSessionId$$;let $result$$=null,$committedCallbacks$$=[];try{await $options$jscomp$2_parentSession_session$$.withTransaction(async $sessionInTxn$$=>{$sessionInTxn$$.afterCommit=[];const $context$$={session:$sessionInTxn$$,
14
- storeId:++globalStoreCounter,sessionId:$sessionInTxn$$._debugId||$outerSessionId$$,forceSession:$forceSession$$};await storage.run($context$$,async()=>{Logger.info(`\ud83d\udd04 [executeInTransaction] Start/Retry txnId=${$context$$.sessionId} storeId=${$context$$.storeId}`);$result$$=await $fn$$($sessionInTxn$$)});$sessionInTxn$$.afterCommit&&$sessionInTxn$$.afterCommit.length>0&&($committedCallbacks$$=[...$sessionInTxn$$.afterCommit])},{readPreference:"primary",readConcern:{level:"local"},writeConcern:{w:"majority"},
15
- maxCommitTimeMS:5E3})}catch($error$$){const $isTransientError$$=$error$$.hasErrorLabel&&$error$$.hasErrorLabel("TransientTransactionError"),$isWriteConflict$$=$error$$.code===112;if($isTransientError$$||$isWriteConflict$$)throw Logger.error("\u274c[executeInTransaction] WriteConflict/Timeout after max retries:",$error$$),Error("D\u1eef li\u1ec7u n\u00e0y \u0111ang \u0111\u01b0\u1ee3c x\u1eed l\u00fd b\u1edfi ti\u1ebfn tr\u00ecnh kh\u00e1c. Vui l\u00f2ng th\u1eed l\u1ea1i sau.");Logger.error("\u274c[executeInTransaction] Failed permanently:",
16
- $error$$);throw $error$$;}finally{await $options$jscomp$2_parentSession_session$$.endSession()}$committedCallbacks$$.length>0&&(Logger.info(`\ud83d\udd25 [executeInTransaction] Running ${$committedCallbacks$$.length} afterCommit callbacks`),exports.runWithoutSession(async()=>{for(const $cb$$ of $committedCallbacks$$)try{await $cb$$()}catch($err$$){Logger.error("\u274c [executeInTransaction] afterCommit error",$err$$)}}));return $result$$};
7
+ exports.executeInTransaction=async function($fn$$,$options$$={useParent:!1,forceSession:!1,timeLimitMs:0}){const {useParent:$useParent$$=!1,forceSession:$forceSession$$=!1,timeLimitMs:$timeLimitMs$$}=$options$$;$options$$=exports.getCurrentSession();if($useParent$$&&$options$$&&!$options$$.hasEnded)return Logger.info(`\ud83d\udd17 [executeInTransaction] Join existing transaction ID=${$options$$._debugId||$options$$.id.id}`),await $fn$$($options$$);const $session$$=await mongoose.startSession(),$outerSessionId$$=
8
+ `txn-auto-${++globalSessionCounter}`;$session$$._debugId=$outerSessionId$$;let $result$$=null,$committedCallbacks$$=[];try{await $session$$.withTransaction(async $sessionInTxn$$=>{$sessionInTxn$$.afterCommit=[];const $context$$={session:$sessionInTxn$$,storeId:++globalStoreCounter,sessionId:$sessionInTxn$$._debugId||$outerSessionId$$,forceSession:$forceSession$$};$timeLimitMs$$?await $session$$.withTimeout(storage.run($context$$,async()=>{Logger.info(`\ud83d\udd04 [executeInTransaction] Start/Retry txnId=${$context$$.sessionId} storeId=${$context$$.storeId}`);
9
+ $result$$=await $fn$$($sessionInTxn$$)}),$timeLimitMs$$,"executeInTransaction"):await storage.run($context$$,async()=>{Logger.info(`\ud83d\udd04 [executeInTransaction] Start/Retry txnId=${$context$$.sessionId} storeId=${$context$$.storeId}`);$result$$=await $fn$$($sessionInTxn$$)});$sessionInTxn$$.afterCommit&&$sessionInTxn$$.afterCommit.length>0&&($committedCallbacks$$=[...$sessionInTxn$$.afterCommit])},{readPreference:"primary",readConcern:{level:"local"},writeConcern:{w:"majority"},maxCommitTimeMS:5E3})}catch($error$$){const $isTransientError$$=
10
+ $error$$.hasErrorLabel&&$error$$.hasErrorLabel("TransientTransactionError"),$isWriteConflict$$=$error$$.code===112;if($isTransientError$$||$isWriteConflict$$)throw Logger.error("\u274c[executeInTransaction] WriteConflict/Timeout after max retries:",$error$$),Error("D\u1eef li\u1ec7u n\u00e0y \u0111ang \u0111\u01b0\u1ee3c x\u1eed l\u00fd b\u1edfi ti\u1ebfn tr\u00ecnh kh\u00e1c. Vui l\u00f2ng th\u1eed l\u1ea1i sau.");Logger.error("\u274c[executeInTransaction] Failed permanently:",$error$$);throw $error$$;
11
+ }finally{await $session$$.endSession()}$committedCallbacks$$.length>0&&(Logger.info(`\ud83d\udd25 [executeInTransaction] Running ${$committedCallbacks$$.length} afterCommit callbacks`),exports.runWithoutSession(async()=>{for(const $cb$$ of $committedCallbacks$$)try{await $cb$$()}catch($err$$){Logger.error("\u274c [executeInTransaction] afterCommit error",$err$$)}}));return $result$$};
17
12
  exports.onAfterCommit=async function($cb$$,$description$$="",$session$$=null,$store$$=null){$store$$=$store$$||storage.getStore();$session$$=$session$$||$store$$?.session;$store$$&&$session$$&&exports.isSessionActive($session$$)?($session$$.afterCommit=$session$$.afterCommit||[],$session$$.afterCommit.push($cb$$),$description$$&&Logger.info(`[onAfterCommit] added callback, storeId=${$store$$.storeId}, count=${$session$$.afterCommit.length},des=${$description$$}`)):($description$$&&Logger.info("[onAfterCommit] no active session, running immediately",
18
13
  $description$$,", storeId=",$store$$?.storeId),await exports.runWithoutSession($cb$$))};exports.getAfterCommitList=function(){return exports.getCurrentSession()?.afterCommit||[]};exports.runWithoutSession=async function($fn$$){return storage.run({session:void 0},$fn$$)};exports.getCurrentSession=function(){return storage.getStore()?.session};
19
14
  exports.isModelExcludedFromSession=function($model_name$$){$model_name$$=typeof $model_name$$==="string"?$model_name$$:$model_name$$?.modelName;return!(!$model_name$$||!SESSION_EXCLUDE_MODELS.includes($model_name$$))};exports.isSessionActive=function($session$$){if(!$session$$)return!1;try{return $session$$.inTransaction()&&!$session$$.hasEnded}catch{return!1}};Logger.info("[sessionContext] \u2705 Loaded");
@@ -0,0 +1,9 @@
1
+ const Vsocai=require("./vsocai"),Customer=global.getModel("customer"),dktk=require("./dktk"),async=require("async"),moment=require("moment");
2
+ module.exports=async $condition$$=>{if(!($condition$$.id_app&&$condition$$.tk&&$condition$$.tu_ngay&&$condition$$.den_ngay))throw Error("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1 id_app,tk,tu_ngay,den_ngay");$condition$$.tu_ngay=moment($condition$$.tu_ngay).startOf("month").toDate();$condition$$.den_ngay=moment($condition$$.den_ngay).endOf("month").toDate();$condition$$.bu_tru=!0;const $id_app$$=$condition$$.id_app;return new Promise(($resolve$$,$reject$$)=>{async.parallel({dk:function($callback$$){const $query$$=
3
+ {...$condition$$};$query$$.ngay=$condition$$.tu_ngay;dktk($query$$,function($data_error$$,$result$$){if($data_error$$)return $callback$$($data_error$$);$data_error$$={systotal:1,sysorder:0,bold:!0,dien_giai:"\u0110\u1ea7u k\u1ef3",ps_no:$result$$.csum("du_no00"),ps_co:$result$$.csum("du_co00"),ps_no_nt:$result$$.csum("du_no_nt00"),ps_co_nt:$result$$.csum("du_co_nt00")};$callback$$(null,$data_error$$)})},ps:function($callback$$){const $query$$={id_app:$condition$$.id_app,tk:{$regex:"^"+$condition$$.tk,
4
+ $options:"i"},ngay_ct:{$gte:$condition$$.tu_ngay,$lte:$condition$$.den_ngay}};$condition$$.ma_dvcs&&($query$$.ma_dvcs=$condition$$.ma_dvcs);Vsocai.find($query$$,function($error$$,$result$$){if($error$$)return $callback$$($error$$);$result$$.forEach(function($r$$){$r$$.systotal=0;$r$$.sysorder=5;$r$$.bold=!1});$error$$={systotal:1,sysorder:6,bold:!0,dien_giai:"T\u1ed5ng c\u1ed9ng ph\u00e1t sinh",ps_no:$result$$.csum("ps_no"),ps_co:$result$$.csum("ps_co"),ps_no_nt:$result$$.csum("ps_no_nt"),ps_co_nt:$result$$.csum("ps_co_nt")};
5
+ $result$$.push($error$$);$result$$.push({systotal:0,sysorder:2,bold:!0,dien_giai:"Ph\u00e1t sinh trong k\u1ef3",ps_no:0,ps_co:0,ps_no_nt:0,ps_co_nt:0});$callback$$(null,$result$$)},{groupBy:!0,sortData:!0,model:$condition$$.model_socai||"socai"})}},async function($data$jscomp$1_error$$,$results_so_ck_nt$$){if($data$jscomp$1_error$$)return $reject$$($data$jscomp$1_error$$);$data$jscomp$1_error$$=$results_so_ck_nt$$.ps;$data$jscomp$1_error$$.push($results_so_ck_nt$$.dk);await $data$jscomp$1_error$$.asyncJoinModel2($id_app$$,
6
+ Customer,[{where:"ma_kh",fields:[{name:"ten_kh",value:"ten_kh"}]}]);$results_so_ck_nt$$=$data$jscomp$1_error$$.csum("ps_no_nt",{systotal:1})-$data$jscomp$1_error$$.csum("ps_co_nt",{systotal:1});const $so_ck$$=$data$jscomp$1_error$$.csum("ps_no",{systotal:1})-$data$jscomp$1_error$$.csum("ps_co",{systotal:1}),$dong_cuoi_ky$$={systotal:1,sysorder:9,bold:!0,dien_giai:"Cu\u1ed1i k\u1ef3",ps_no:0,ps_co:0,ps_no_nt:0,ps_co_nt:0};$results_so_ck_nt$$>0&&($dong_cuoi_ky$$.ps_no_nt=$results_so_ck_nt$$);$so_ck$$>
7
+ 0&&($dong_cuoi_ky$$.ps_no=$so_ck$$);$results_so_ck_nt$$<0&&($dong_cuoi_ky$$.ps_co_nt=Math.abs($results_so_ck_nt$$));$so_ck$$<0&&($dong_cuoi_ky$$.ps_co=Math.abs($so_ck$$));$data$jscomp$1_error$$.push($dong_cuoi_ky$$);$data$jscomp$1_error$$=$data$jscomp$1_error$$.sort(($a$$,$b$$)=>{var $date2Diff_dateDiff_soCtDiff_sysorderDiff$$=$a$$.sysorder-$b$$.sysorder;if($date2Diff_dateDiff_soCtDiff_sysorderDiff$$!==0)return $date2Diff_dateDiff_soCtDiff_sysorderDiff$$;$date2Diff_dateDiff_soCtDiff_sysorderDiff$$=
8
+ new Date($a$$.ngay_ct_full)-new Date($b$$.ngay_ct_full);if($date2Diff_dateDiff_soCtDiff_sysorderDiff$$!==0)return $date2Diff_dateDiff_soCtDiff_sysorderDiff$$;$date2Diff_dateDiff_soCtDiff_sysorderDiff$$=new Date($a$$.date_created)-new Date($b$$.date_created);if($date2Diff_dateDiff_soCtDiff_sysorderDiff$$!==0)return $date2Diff_dateDiff_soCtDiff_sysorderDiff$$;$date2Diff_dateDiff_soCtDiff_sysorderDiff$$=$a$$.so_ct.localeCompare($b$$.so_ct);return $date2Diff_dateDiff_soCtDiff_sysorderDiff$$!==0?$date2Diff_dateDiff_soCtDiff_sysorderDiff$$:
9
+ ($b$$.ps_no>0)-($a$$.ps_no>0)});$resolve$$($data$jscomp$1_error$$)})})};
@@ -10,4 +10,5 @@ $row$$.dvt=$JSCompiler_temp_const$jscomp$0$$.dvt,$row$$.ma_nvt=$JSCompiler_temp_
10
10
  $groupBy$$),ton_dau:0,du_dau:0,sl_nhap:0,sl_xuat:0,tien_nhap:0,tien_xuat:0,ten_vt:$row$$.ten_vt||"",dvt:$row$$.dvt||""};$JSCompiler_temp_const$$.call($JSCompiler_temp_const$jscomp$0$$,$key$$,$JSCompiler_inline_result$$)}$JSCompiler_temp_const$jscomp$0$$=$dataMap$$.get($key$$);$type$$==="dn"?($JSCompiler_temp_const$jscomp$0$$.ton_dau+=$row$$.ton00||0,$JSCompiler_temp_const$jscomp$0$$.du_dau+=$row$$.du00||0):$type$$==="ps"&&($JSCompiler_temp_const$jscomp$0$$.sl_nhap+=$row$$.sl_nhap||0,$JSCompiler_temp_const$jscomp$0$$.sl_xuat+=
11
11
  $row$$.sl_xuat||0,$JSCompiler_temp_const$jscomp$0$$.tien_nhap+=$row$$.tien_nhap||0,$JSCompiler_temp_const$jscomp$0$$.tien_xuat+=$row$$.tien_xuat||0)}};$app_processData$$($dnData$$,"dn");$app_processData$$($psData$$,"ps");let $result$$=Array.from($dataMap$$.values()).map($r$$=>{$r$$.ton_dau=utils.round($r$$.ton_dau,$f_sl$$);$r$$.du_dau=Math.roundBy($r$$.du_dau,$f_tien$$);$r$$.sl_nhap=utils.round($r$$.sl_nhap,$f_sl$$);$r$$.sl_xuat=utils.round($r$$.sl_xuat,$f_sl$$);$r$$.tien_nhap=Math.roundBy($r$$.tien_nhap,
12
12
  $f_tien$$);$r$$.tien_xuat=Math.roundBy($r$$.tien_xuat,$f_tien$$);$r$$.ton_cuoi=utils.round($r$$.ton_dau+$r$$.sl_nhap-$r$$.sl_xuat,$f_sl$$);$r$$.du_cuoi=Math.roundBy($r$$.du_dau+$r$$.tien_nhap-$r$$.tien_xuat,$f_tien$$);return $r$$});$result$$=$result$$.filter($r$$=>Math.abs($r$$.ton_dau)+Math.abs($r$$.du_dau)+Math.abs($r$$.sl_nhap)+Math.abs($r$$.tien_nhap)+Math.abs($r$$.sl_xuat)+Math.abs($r$$.tien_xuat)+Math.abs($r$$.ton_cuoi)+Math.abs($r$$.du_cuoi)!==0);$result$$.sort(($a$$,$b$$)=>{const $cmpVt$$=
13
- ($a$$.ma_vt||"").localeCompare($b$$.ma_vt||"");return $cmpVt$$!==0?$cmpVt$$:($a$$.ma_kho||"").localeCompare($b$$.ma_kho||"")});console.timeEnd("[thnxt] Total "+$uniqueId$$);$fn$$&&$fn$$(null,$result$$,$groupBy$$);return $result$$}catch($error$$){throw console.error("StockSummary Error:",$error$$),$fn$$&&$fn$$($error$$.message||$error$$),$error$$;}};
13
+ ($a$$.ma_vt||"").localeCompare($b$$.ma_vt||"");return $cmpVt$$!==0?$cmpVt$$:($a$$.ma_kho||"").localeCompare($b$$.ma_kho||"")});if($condition$$.tinh_tong_cong||$condition$$.chi_hien_tong_cong){let $total_row$$={bold:!0,ten_vt:"T\u1ed5ng c\u1ed9ng",ton_dau:0,du_dau:0,sl_nhap:0,sl_xuat:0,tien_nhap:0,tien_xuat:0,ton_cuoi:0,du_cuoi:0};$result$$.forEach($r$$=>{$total_row$$.ton_dau+=$r$$.ton_dau||0;$total_row$$.du_dau+=$r$$.du_dau||0;$total_row$$.sl_nhap+=$r$$.sl_nhap||0;$total_row$$.sl_xuat+=$r$$.sl_xuat||
14
+ 0;$total_row$$.tien_nhap+=$r$$.tien_nhap||0;$total_row$$.tien_xuat+=$r$$.tien_xuat||0;$total_row$$.ton_cuoi+=$r$$.ton_cuoi||0;$total_row$$.du_cuoi+=$r$$.du_cuoi||0});$condition$$.chi_hien_tong_cong?$result$$=[$total_row$$]:$result$$.push($total_row$$)}console.timeEnd("[thnxt] Total "+$uniqueId$$);return $fn$$?$fn$$(null,$result$$,$groupBy$$):$result$$}catch($error$$){Logger.error("StockSummary Error:",$error$$);if($fn$$)return $fn$$($error$$.message||$error$$);throw $error$$;}};
@@ -1,7 +1,7 @@
1
1
  const ckvt=require("./ckvt"),sokho=global.getModel("sokho"),socai=global.getModel("socai"),dmvt=global.getModel("dmvt"),giatb=global.getModel("giatb"),dmqddvt=global.getModel("dmqddvt"),tinhgiatb1vt=require("./tinhgiatb1vt"),_=require("lodash"),Controller=require("../controllers/controller"),moment=require("moment"),{getCurrentSession}=require("./sessionContext"),getRawData=$doc$$=>typeof $doc$$.toObject==="function"?$doc$$.toObject():$doc$$,tinhGiaTbPromise=$query$$=>new Promise(($resolve$$,$reject$$)=>
2
2
  {tinhgiatb1vt($query$$,($err$$,$data$$)=>{if($err$$)return $reject$$($err$$);$resolve$$($data$$)})}),postDataPromise=($data$$,$ctrl$$)=>new Promise(($resolve$$,$reject$$)=>{Controller.postData($data$$,$ctrl$$,($err$$,$rs$$)=>{if($err$$)return $reject$$($err$$);$resolve$$($rs$$)},{kiem_tra_han_muc_cong_no:!1})});
3
- module.exports=async function($condition$$,$fn$$){try{if(!($condition$$&&$condition$$.tu_thang&&$condition$$.den_thang&&$condition$$.nam&&$condition$$.id_app))throw Error("L\u1ed7i: T\u00ednh n\u0103ng n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_thang, den_thang, nam, id_app");var $t_tu_thang$$=Number($condition$$.tu_thang),$d_voucher_den_thang$$=Number($condition$$.den_thang);const $ma_kho$$=$condition$$.ma_kho,$id_app$$=$condition$$.id_app,$tu_ngay$$=moment(new Date($condition$$.nam,$t_tu_thang$$-
4
- 1,15)).startOf("month").toDate(),$den_ngay$$=moment(new Date($condition$$.nam,$d_voucher_den_thang$$-1,15)).endOf("month").toDate();var $session_thangs$$=getCurrentSession(),$app_query_dmvt$$=await global.getModel("app").findOne({_id:$id_app$$},{options:1}).lean();if(!$app_query_dmvt$$)throw Error("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");const $f_tien$$=($app_query_dmvt$$.options||{}).f_tien||0;$app_query_dmvt$$={id_app:$id_app$$,gia_xuat:"1"};$condition$$.ma_nvt&&($app_query_dmvt$$.ma_nvt=
3
+ module.exports=async function($condition$$,$callback$$){try{if(!($condition$$&&$condition$$.tu_thang&&$condition$$.den_thang&&$condition$$.nam&&$condition$$.id_app))throw Error("L\u1ed7i: T\u00ednh n\u0103ng n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_thang, den_thang, nam, id_app");var $t_tu_thang$$=Number($condition$$.tu_thang),$d_voucher_den_thang$$=Number($condition$$.den_thang);const $ma_kho$$=$condition$$.ma_kho,$id_app$$=$condition$$.id_app,$tu_ngay$$=moment(new Date($condition$$.nam,
4
+ $t_tu_thang$$-1,15)).startOf("month").toDate(),$den_ngay$$=moment(new Date($condition$$.nam,$d_voucher_den_thang$$-1,15)).endOf("month").toDate();var $session_thangs$$=getCurrentSession(),$app_query_dmvt$$=await global.getModel("app").findOne({_id:$id_app$$},{options:1}).lean();if(!$app_query_dmvt$$)throw Error("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");const $f_tien$$=($app_query_dmvt$$.options||{}).f_tien||0;$app_query_dmvt$$={id_app:$id_app$$,gia_xuat:"1"};$condition$$.ma_nvt&&($app_query_dmvt$$.ma_nvt=
5
5
  $condition$$.ma_nvt);$condition$$.ma_ncc&&($app_query_dmvt$$.ma_ncc=$condition$$.ma_ncc);$condition$$.ma_vt&&($app_query_dmvt$$.ma_vt=$condition$$.ma_vt);Logger.info(`\ud83d\udd25[tinhgiatb] Start | Kho: ${$ma_kho$$} | Session: ${$session_thangs$$?._debugId}`);const $dmqdList$$=await dmqddvt.find({id_app:$id_app$$}).lean(),$mapQuyDoi$$=new Map;$dmqdList$$.forEach($qd$$=>{$mapQuyDoi$$.set(`${$qd$$.ma_vt}-${$qd$$.ma_dvt}`,($qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd)||1)});const $listVt$$=await dmvt.find($app_query_dmvt$$).lean();
6
6
  Logger.info(`\ud83d\ude80 [tinhgiatb] B\u1eaft \u0111\u1ea7u t\u00ednh gi\u00e1 cho ${$listVt$$.length} v\u1eadt t\u01b0 (Ch\u1ea1y song song)...`);const $bang_gia$$=await (async $ma_vt$jscomp$1_query$$=>{$ma_vt$jscomp$1_query$$={id_app:$id_app$$,tu_ngay:$tu_ngay$$,den_ngay:$den_ngay$$,ma_vt:$ma_vt$jscomp$1_query$$,ma_kho:$ma_kho$$};try{return(await tinhGiaTbPromise($ma_vt$jscomp$1_query$$)).map($giaData$$=>({...$giaData$$,id_app:$id_app$$,ma_kho:$ma_kho$$,status:!0}))}catch($err$$){throw Logger.error("[tinhgiatb] L\u1ed7i t\u00ednh gi\u00e1 VT:",
7
7
  $ma_vt$jscomp$1_query$$.ma_vt,$err$$.message),$err$$;}})($listVt$$.map($d$$=>$d$$.ma_vt)),$mapGiaTB$$=new Map;$bang_gia$$.forEach($g$$=>$mapGiaTB$$.set($g$$.ma_vt,$g$$.gia));for($session_thangs$$=[];$t_tu_thang$$<=$d_voucher_den_thang$$;$t_tu_thang$$++)$session_thangs$$.push($t_tu_thang$$);const $ma_vts$$=$bang_gia$$.map($g$$=>$g$$.ma_vt);let $query_delete_gia$$={id_app:$id_app$$,ma_vt:{$in:$ma_vts$$},nam:$condition$$.nam,thang:{$in:$session_thangs$$}};$ma_kho$$&&($query_delete_gia$$.ma_kho=$ma_kho$$);
@@ -26,5 +26,5 @@ $ctrl$$)}}Logger.info("[tinhgiatb] Ki\u1ec3m tra ch\u00eanh l\u1ec7ch...");let $
26
26
  Math.abs($r$$.ton00)<.001)),$descVouchersX$$=_.sortBy([...$vouchers_x$$.values()],$v$$=>-(new Date($v$$.ngay_ct)).getTime()),$descVouchersN$$=_.sortBy([...$vouchers_n$$.values()],$v$$=>-(new Date($v$$.ngay_ct)).getTime());let $chung_tu_cap_nhat_chenh_lech$$=new Map;for(const $vt$$ of $validDuCuoiKy$$)$d_voucher_den_thang$$=null,($d_voucher_den_thang$$=$descVouchersX$$.find($x$$=>{const $det$$=($x$$.details||[]).find($vc$$=>$vc$$.ma_vt==$vt$$.ma_vt&&!$vc$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===$vc$$.ma_kho||
27
27
  $ma_kho$$===$x$$.ma_kho));return $det$$?($det$$.tien_xuat_nt+=$vt$$.du00,$det$$.tien_xuat=Math.roundBy($det$$.tien_xuat_nt,$f_tien$$),$det$$.sl_xuat&&($det$$.gia_von=$det$$.gia_von_nt=Math.roundBy($det$$.tien_xuat_nt/$det$$.sl_xuat,0)),!0):!1}))||($d_voucher_den_thang$$=$descVouchersN$$.find($n$$=>{const $det$$=($n$$.details||[]).find($vc$$=>$vc$$.ma_vt==$vt$$.ma_vt&&!$vc$$.pn_gia_tb&&(!$ma_kho$$||$ma_kho$$===$vc$$.ma_kho||$ma_kho$$===$n$$.ma_kho));return $det$$?($det$$.tien_nhap_nt-=$vt$$.du00,$det$$.tien_nhap=
28
28
  Math.roundBy($det$$.tien_nhap_nt,$f_tien$$),$det$$.sl_nhap&&($det$$.gia_von=$det$$.gia_von_nt=Math.roundBy($det$$.tien_nhap_nt/$det$$.sl_nhap,0)),!0):!1})),$d_voucher_den_thang$$&&$chung_tu_cap_nhat_chenh_lech$$.set($d_voucher_den_thang$$._id.toString(),$d_voucher_den_thang$$);if($chung_tu_cap_nhat_chenh_lech$$.size>0){Logger.info(`\u26a0\ufe0f [tinhgiatb] Updating ${$chung_tu_cap_nhat_chenh_lech$$.size} vouchers for discrepancy...`);for(const $voucher$$ of $chung_tu_cap_nhat_chenh_lech$$.values()){const $voucherData$$=
29
- getRawData($voucher$$),$ctrl$$=global.controllers[$voucherData$$.ma_ct.toUpperCase()];await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucherData$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher$$._id},$voucherData$$);$ctrl$$&&$ctrl$$.post&&await postDataPromise($voucherData$$,$ctrl$$)}}await new Promise($resolve$$=>{$bang_gia$$.joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt"}],$resolve$$)});$fn$$(null,$bang_gia$$)}catch($e$$){Logger.error("\u274c [tinhgiatb] Critical Error:",
30
- $e$$),$fn$$($e$$)}};
29
+ getRawData($voucher$$),$ctrl$$=global.controllers[$voucherData$$.ma_ct.toUpperCase()];await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucherData$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher$$._id},$voucherData$$);$ctrl$$&&$ctrl$$.post&&await postDataPromise($voucherData$$,$ctrl$$)}}await $bang_gia$$.asyncJoinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt"}]);return $callback$$?$callback$$(null,$bang_gia$$):$bang_gia$$}catch($e$$){Logger.error("\u274c [tinhgiatb] Critical Error:",
30
+ $e$$);if($callback$$)return $callback$$($e$$);throw $e$$;}};
@@ -1,10 +1,11 @@
1
- const tdttno=global.getModel("tdttno"),tdttno_tt=global.getModel("tdttno_tt"),async=require("async"),moment=require("moment"),func=async $condition$$=>{let $objs$$=await tdttno.find({id_app:$condition$$.id_app,ngay_tt:{$exists:!1}});for(let $obj$$ of $objs$$)Logger.info("update ngay_tt",$obj$$.ngay_hd),$obj$$.ngay_tt=moment($obj$$.ngay_hd).add($obj$$.han_tt||0,"days").toDate(),await $obj$$.save();await tdttno.updateMany({id_app:$condition$$.id_app,ngay_tt:{$exists:!1}},{date_updated:new Date});return new Promise(($resolve$$,
2
- $reject$$)=>{if(!$condition$$.id_app)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u tham s\u1ed1: id_app");$condition$$.den_ngay||($condition$$.den_ngay=moment().endOf("date").toDate());$condition$$.tuoi_no&&($condition$$.tuoi_no=Number($condition$$.tuoi_no),$condition$$.tuoi_no>0&&($condition$$.tuoi_no_min=$condition$$.tuoi_no));let $ngay_tt_min$$,$ngay_tt_max$$;$condition$$.tuoi_no_min&&($ngay_tt_min$$=moment().add($condition$$.tuoi_no_min,"days").toDate());$condition$$.tuoi_no_max&&
3
- ($ngay_tt_max$$=moment().add($condition$$.tuoi_no_max,"days").toDate());async.series({invoices:function($callback$$){setImmediate(async()=>{const $query$$={id_app:$condition$$.id_app};$query$$.ngay_ct={$lte:$condition$$.den_ngay};$condition$$.tu_ngay&&($query$$.ngay_ct.$gte=$condition$$.tu_ngay);$condition$$.ma_dvcs&&($query$$.ma_dvcs=$condition$$.ma_dvcs);if(!$condition$$.ma_kh&&($condition$$.nh_kh||$condition$$.phu_trach)){let $_q$$={};$condition$$.nh_kh&&($_q$$.nh_kh=$condition$$.nh_kh);$condition$$.phu_trach&&
4
- ($_q$$.phu_trach=$condition$$.phu_trach);$condition$$.ma_kh=await global.getModel("customer").getList($condition$$.id_app,$_q$$,"ma_kh")}$condition$$.ma_kh&&($query$$.ma_kh=$condition$$.ma_kh);$condition$$.so_ct&&($query$$.so_ct=$condition$$.so_ct);$condition$$.so_hd&&($query$$.so_hd=$condition$$.so_hd);$condition$$.tat_toan!==void 0&&($query$$.tat_toan=$condition$$.tat_toan);$ngay_tt_min$$&&($query$$.ngay_tt={$gte:$ngay_tt_min$$});$ngay_tt_max$$&&($query$$.ngay_tt?$query$$.ngay_tt.$lte=$ngay_tt_max$$:
5
- $query$$.ngay_tt={$lte:$ngay_tt_max$$});tdttno.find($query$$).lean().then(function($results$$){const $invoices$$=[];for(let $i$$=0;$i$$<$results$$.length;$i$$++){const $invoice$$=$results$$[$i$$];$invoice$$.line=$i$$;$invoices$$.push($invoice$$)}$callback$$(null,$invoices$$)}).catch($e$$=>{$callback$$($e$$)})})}},($error$$,$results$$)=>{if($error$$)return $reject$$($error$$);let $report$$=[];async.map($results$$.invoices,function($invoice$$,$callback$$){setImmediate(()=>{const $t_invoice$$={sysorder:1,
6
- bold:!1,tat_toan:$invoice$$.tat_toan,id_ct:$invoice$$.id_ct,ma_ct:$invoice$$.ma_ct,id_hd:$invoice$$.id_ct,so_ct:$invoice$$.so_ct,ngay_ct:$invoice$$.ngay_ct,so_hd:$invoice$$.so_hd,ngay_hd:$invoice$$.ngay_hd,tien_hd_nt:$invoice$$.tien_nt};$t_invoice$$.ma_nt_hd=$invoice$$.ma_nt;$t_invoice$$.ty_gia_hd=$invoice$$.ty_gia;$t_invoice$$.ma_kh=$invoice$$.ma_kh;$t_invoice$$.ma_dt=$invoice$$.ma_dt;$t_invoice$$.ma_nv=$invoice$$.ma_nv;$t_invoice$$.dien_giai=$invoice$$.dien_giai;$t_invoice$$.tien_nt=0;$t_invoice$$.tien=
7
- 0;$t_invoice$$.da_thanh_toan_nt=0;$t_invoice$$.con_lai_nt=0;$t_invoice$$.thanh_toan_qd=0;$t_invoice$$.tk_co=$invoice$$.tk_no;$t_invoice$$.han_tt=$invoice$$.han_tt?$invoice$$.han_tt:0;$report$$.push($t_invoice$$);tdttno_tt.find({id_tdtt:$invoice$$._id,id_app:$invoice$$.id_app}).sort({ngay_ct:1}).lean().then(function($results$$){let $da_thanh_toan_nt$$=0;$results$$.forEach(function($invoice_tt$$){$da_thanh_toan_nt$$+=$invoice_tt$$.thanh_toan_qd});$t_invoice$$.da_thanh_toan_nt=$da_thanh_toan_nt$$;$t_invoice$$.con_lai_nt=
8
- $t_invoice$$.tien_hd_nt-$t_invoice$$.da_thanh_toan_nt;$t_invoice$$.tat_toan&&($t_invoice$$.con_lai_nt=0);$t_invoice$$.con_lai_nt!==0?($t_invoice$$.tuoi_no=moment().diff(moment($t_invoice$$.ngay_hd),"days"),$t_invoice$$.so_ngay_trong_han=Math.max(0,$t_invoice$$.han_tt-$t_invoice$$.tuoi_no),$t_invoice$$.so_ngay_qua_han=Math.max(0,$t_invoice$$.tuoi_no-$t_invoice$$.han_tt),$t_invoice$$.so_ngay_qua_han>0&&$t_invoice$$.so_ngay_qua_han<=30&&($t_invoice$$.qua_han1=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>
9
- 30&&$t_invoice$$.so_ngay_qua_han<=60&&($t_invoice$$.qua_han2=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>60&&$t_invoice$$.so_ngay_qua_han<=90&&($t_invoice$$.qua_han3=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>90&&($t_invoice$$.qua_han4=$t_invoice$$.con_lai_nt)):($t_invoice$$.tuoi_no=0,$t_invoice$$.so_ngay_trong_han=0,$t_invoice$$.so_ngay_qua_han=0);$callback$$(null,$t_invoice$$)}).catch($e$$=>{$callback$$($e$$)})})},$error$$=>{if($error$$)return $reject$$($error$$);$report$$=
10
- $report$$.filter($r$$=>$r$$.tien_hd_nt>0);$resolve$$($report$$)})})})};module.exports=($condition$$,$callback$$)=>{if(!$callback$$)return func($condition$$);func($condition$$).then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})};
1
+ const tdttno=global.getModel("tdttno"),tdttno_tt=global.getModel("tdttno_tt"),async=require("async"),moment=require("moment"),func=async $condition$$=>{if(!$condition$$?.id_app)throw"B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u id_app";let $objs$$=await tdttno.find({id_app:$condition$$.id_app,ngay_tt:{$exists:!1}}).lean();for(let $obj$$ of $objs$$)Logger.info("update ngay_tt",$obj$$.ngay_hd),$obj$$.ngay_tt=moment($obj$$.ngay_hd).add($obj$$.han_tt||0,"days").toDate(),await $obj$$.save();await tdttno.updateMany({id_app:$condition$$.id_app,
2
+ ngay_tt:{$exists:!1}},{date_updated:new Date});return new Promise(($resolve$$,$reject$$)=>{if(!$condition$$.id_app)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u tham s\u1ed1: id_app");$condition$$.den_ngay||($condition$$.den_ngay=moment().endOf("date").toDate());$condition$$.tuoi_no&&($condition$$.tuoi_no=Number($condition$$.tuoi_no),$condition$$.tuoi_no>0&&($condition$$.tuoi_no_min=$condition$$.tuoi_no));let $ngay_tt_min$$,$ngay_tt_max$$;$condition$$.tuoi_no_min&&($ngay_tt_min$$=
3
+ moment().add($condition$$.tuoi_no_min,"days").toDate());$condition$$.tuoi_no_max&&($ngay_tt_max$$=moment().add($condition$$.tuoi_no_max,"days").toDate());async.series({invoices:function($callback$$){setImmediate(async()=>{const $query$$={id_app:$condition$$.id_app};$query$$.ngay_ct={$lte:$condition$$.den_ngay};$condition$$.tu_ngay&&($query$$.ngay_ct.$gte=$condition$$.tu_ngay);$condition$$.ma_dvcs&&($query$$.ma_dvcs=$condition$$.ma_dvcs);if(!$condition$$.ma_kh&&($condition$$.nh_kh||$condition$$.phu_trach)){let $_q$$=
4
+ {};$condition$$.nh_kh&&($_q$$.nh_kh=$condition$$.nh_kh);$condition$$.phu_trach&&($_q$$.phu_trach=$condition$$.phu_trach);$condition$$.ma_kh=await global.getModel("customer").getList($condition$$.id_app,$_q$$,"ma_kh")}$condition$$.ma_kh&&($query$$.ma_kh=$condition$$.ma_kh);$condition$$.so_ct&&($query$$.so_ct=$condition$$.so_ct);$condition$$.so_hd&&($query$$.so_hd=$condition$$.so_hd);$condition$$.tat_toan!==void 0&&($query$$.tat_toan=$condition$$.tat_toan);$ngay_tt_min$$&&($query$$.ngay_tt={$gte:$ngay_tt_min$$});
5
+ $ngay_tt_max$$&&($query$$.ngay_tt?$query$$.ngay_tt.$lte=$ngay_tt_max$$:$query$$.ngay_tt={$lte:$ngay_tt_max$$});tdttno.find($query$$).lean().then(function($results$$){const $invoices$$=[];for(let $i$$=0;$i$$<$results$$.length;$i$$++){const $invoice$$=$results$$[$i$$];$invoice$$.line=$i$$;$invoices$$.push($invoice$$)}$callback$$(null,$invoices$$)}).catch($e$$=>{$callback$$($e$$)})})}},($error$$,$results$$)=>{if($error$$)return $reject$$($error$$);let $report$$=[];async.map($results$$.invoices,function($invoice$$,
6
+ $callback$$){setImmediate(()=>{const $t_invoice$$={sysorder:1,bold:!1,tat_toan:$invoice$$.tat_toan,id_ct:$invoice$$.id_ct,ma_ct:$invoice$$.ma_ct,id_hd:$invoice$$.id_ct,so_ct:$invoice$$.so_ct,ngay_ct:$invoice$$.ngay_ct,so_hd:$invoice$$.so_hd,ngay_hd:$invoice$$.ngay_hd,tien_hd_nt:$invoice$$.tien_nt};$t_invoice$$.ma_nt_hd=$invoice$$.ma_nt;$t_invoice$$.ty_gia_hd=$invoice$$.ty_gia;$t_invoice$$.ma_kh=$invoice$$.ma_kh;$t_invoice$$.ma_dt=$invoice$$.ma_dt;$t_invoice$$.ma_nv=$invoice$$.ma_nv;$t_invoice$$.dien_giai=
7
+ $invoice$$.dien_giai;$t_invoice$$.tien_nt=0;$t_invoice$$.tien=0;$t_invoice$$.da_thanh_toan_nt=0;$t_invoice$$.con_lai_nt=0;$t_invoice$$.thanh_toan_qd=0;$t_invoice$$.tk_co=$invoice$$.tk_no;$t_invoice$$.han_tt=$invoice$$.han_tt?$invoice$$.han_tt:0;$report$$.push($t_invoice$$);tdttno_tt.find({id_tdtt:$invoice$$._id,id_app:$invoice$$.id_app}).sort({ngay_ct:1}).lean().then(function($results$$){let $da_thanh_toan_nt$$=0;$results$$.forEach(function($invoice_tt$$){$da_thanh_toan_nt$$+=$invoice_tt$$.thanh_toan_qd});
8
+ $t_invoice$$.da_thanh_toan_nt=$da_thanh_toan_nt$$;$t_invoice$$.con_lai_nt=$t_invoice$$.tien_hd_nt-$t_invoice$$.da_thanh_toan_nt;$t_invoice$$.tat_toan&&($t_invoice$$.con_lai_nt=0);$t_invoice$$.con_lai_nt!==0?($t_invoice$$.tuoi_no=moment().diff(moment($t_invoice$$.ngay_hd),"days"),$t_invoice$$.so_ngay_trong_han=Math.max(0,$t_invoice$$.han_tt-$t_invoice$$.tuoi_no),$t_invoice$$.so_ngay_qua_han=Math.max(0,$t_invoice$$.tuoi_no-$t_invoice$$.han_tt),$t_invoice$$.so_ngay_qua_han>0&&$t_invoice$$.so_ngay_qua_han<=
9
+ 30&&($t_invoice$$.qua_han1=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>30&&$t_invoice$$.so_ngay_qua_han<=60&&($t_invoice$$.qua_han2=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>60&&$t_invoice$$.so_ngay_qua_han<=90&&($t_invoice$$.qua_han3=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>90&&($t_invoice$$.qua_han4=$t_invoice$$.con_lai_nt)):($t_invoice$$.tuoi_no=0,$t_invoice$$.so_ngay_trong_han=0,$t_invoice$$.so_ngay_qua_han=0);$callback$$(null,$t_invoice$$)}).catch($e$$=>{$callback$$($e$$)})})},
10
+ $error$$=>{if($error$$)return $reject$$($error$$);$report$$=$report$$.filter($r$$=>$r$$.tien_hd_nt>0);if($condition$$.tinh_tong_cong||$condition$$.chi_hien_tong_cong){let $total_row$$={sysorder:2,bold:!0,dien_giai:"T\u1ed5ng c\u1ed9ng",tien_hd_nt:0,da_thanh_toan_nt:0,con_lai_nt:0,qua_han1:0,qua_han2:0,qua_han3:0,qua_han4:0};$report$$.forEach($r$$=>{$total_row$$.tien_hd_nt+=$r$$.tien_hd_nt||0;$total_row$$.da_thanh_toan_nt+=$r$$.da_thanh_toan_nt||0;$total_row$$.con_lai_nt+=$r$$.con_lai_nt||0;$total_row$$.qua_han1+=
11
+ $r$$.qua_han1||0;$total_row$$.qua_han2+=$r$$.qua_han2||0;$total_row$$.qua_han3+=$r$$.qua_han3||0;$total_row$$.qua_han4+=$r$$.qua_han4||0});$condition$$.chi_hien_tong_cong?$report$$=[$total_row$$]:$report$$.push($total_row$$)}$resolve$$($report$$)})})})};module.exports=($condition$$,$callback$$)=>{if(!$callback$$)return func($condition$$);func($condition$$).then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})};
@@ -1,10 +1,12 @@
1
- const async=require("async"),tdttco=global.getModel("tdttco"),tdttco_tt=global.getModel("tdttco_tt"),moment=require("moment"),func=async $condition$$=>{let $objs$$=await tdttco.find({id_app:$condition$$.id_app,ngay_tt:{$exists:!1}});for(let $obj$$ of $objs$$)Logger.info("update ngay_tt",$obj$$.ngay_hd),$obj$$.ngay_tt=moment($obj$$.ngay_hd).add($obj$$.han_tt||0,"days").toDate(),await $obj$$.save();return new Promise(($resolve$$,$reject$$)=>{if(!$condition$$.id_app)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u tham s\u1ed1: id_app");
2
- $condition$$.den_ngay||($condition$$.den_ngay=moment().endOf("date").toDate());$condition$$.tuoi_no&&($condition$$.tuoi_no=Number($condition$$.tuoi_no),$condition$$.tuoi_no>0&&($condition$$.tuoi_no_min=$condition$$.tuoi_no));let $ngay_tt_min$$,$ngay_tt_max$$;$condition$$.tuoi_no_min&&($ngay_tt_min$$=moment().add($condition$$.tuoi_no_min,"days").toDate());$condition$$.tuoi_no_max&&($ngay_tt_max$$=moment().add($condition$$.tuoi_no_max,"days").toDate());async.series({invoices:function($callback$$){setImmediate(async()=>
3
- {const $query$$={id_app:$condition$$.id_app};$query$$.ngay_ct={$lte:$condition$$.den_ngay};$condition$$.tu_ngay&&($query$$.ngay_ct.$gte=$condition$$.tu_ngay);$condition$$.ma_dvcs&&($query$$.ma_dvcs=$condition$$.ma_dvcs);if(!$condition$$.ma_kh&&($condition$$.nh_kh||$condition$$.phu_trach)){let $_q$$={};$condition$$.nh_kh&&($_q$$.nh_kh=$condition$$.nh_kh);$condition$$.phu_trach&&($_q$$.phu_trach=$condition$$.phu_trach);$condition$$.ma_kh=await global.getModel("customer").getList($condition$$.id_app,
4
- $_q$$,"ma_kh")}$condition$$.ma_kh&&($query$$.ma_kh=$condition$$.ma_kh);$condition$$.so_ct&&($query$$.so_ct=$condition$$.so_ct);$condition$$.so_hd&&($query$$.so_hd=$condition$$.so_hd);$condition$$.tat_toan!==void 0&&($query$$.tat_toan=$condition$$.tat_toan);$ngay_tt_min$$&&($query$$.ngay_tt={$gte:$ngay_tt_min$$});$ngay_tt_max$$&&($query$$.ngay_tt?$query$$.ngay_tt.$lte=$ngay_tt_max$$:$query$$.ngay_tt={$lte:$ngay_tt_max$$});tdttco.find($query$$).lean().then(function($results$$){const $invoices$$=[];
5
- for(let $i$$=0;$i$$<$results$$.length;$i$$++){var $invoice$$=$results$$[$i$$];$invoice$$.line=$i$$;$invoices$$.push($invoice$$)}$callback$$(null,$invoices$$)}).catch($e$$=>{$callback$$($e$$)})})}},($error$$,$results$$)=>{if($error$$)return $reject$$($error$$);let $report$$=[];async.map($results$$.invoices,function($invoice$$,$callback$$){const $t_invoice$$={sysorder:1,bold:!1,tat_toan:$invoice$$.tat_toan,id_ct:$invoice$$.id_ct,ma_ct:$invoice$$.ma_ct,id_hd:$invoice$$.id_ct,so_ct:$invoice$$.so_ct,ngay_ct:$invoice$$.ngay_ct,
6
- so_hd:$invoice$$.so_hd,ngay_hd:$invoice$$.ngay_hd,tien_hd_nt:$invoice$$.tien_nt};$t_invoice$$.ma_nt_hd=$invoice$$.ma_nt;$t_invoice$$.ty_gia_hd=$invoice$$.ty_gia;$t_invoice$$.ma_kh=$invoice$$.ma_kh;$t_invoice$$.ma_dt=$invoice$$.ma_dt;$t_invoice$$.ma_nv=$invoice$$.ma_nv;$t_invoice$$.dien_giai=$invoice$$.dien_giai;$t_invoice$$.tien_nt=0;$t_invoice$$.tien=0;$t_invoice$$.da_thanh_toan_nt=0;$t_invoice$$.con_lai_nt=0;$t_invoice$$.thanh_toan_qd=0;$t_invoice$$.tk_co=$invoice$$.tk_no;$t_invoice$$.han_tt=$invoice$$.han_tt?
7
- $invoice$$.han_tt:0;$report$$.push($t_invoice$$);tdttco_tt.find({id_tdtt:$invoice$$._id,id_app:$invoice$$.id_app}).sort({ngay_ct:1}).lean().then(function($results$$){let $da_thanh_toan_nt$$=0;$results$$.forEach(function($invoice_tt$$){$da_thanh_toan_nt$$+=$invoice_tt$$.thanh_toan_qd});$t_invoice$$.da_thanh_toan_nt=$da_thanh_toan_nt$$;$t_invoice$$.con_lai_nt=$t_invoice$$.tien_hd_nt-$t_invoice$$.da_thanh_toan_nt;$t_invoice$$.tat_toan&&($t_invoice$$.con_lai_nt=0);$t_invoice$$.con_lai_nt!==0?($t_invoice$$.tuoi_no=
8
- moment().diff(moment($t_invoice$$.ngay_hd),"days"),$t_invoice$$.so_ngay_trong_han=Math.max(0,$t_invoice$$.han_tt-$t_invoice$$.tuoi_no),$t_invoice$$.so_ngay_qua_han=Math.max(0,$t_invoice$$.tuoi_no-$t_invoice$$.han_tt),$t_invoice$$.so_ngay_qua_han>0&&$t_invoice$$.so_ngay_qua_han<=30&&($t_invoice$$.qua_han1=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>30&&$t_invoice$$.so_ngay_qua_han<=60&&($t_invoice$$.qua_han2=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>60&&$t_invoice$$.so_ngay_qua_han<=
9
- 90&&($t_invoice$$.qua_han3=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>90&&($t_invoice$$.qua_han4=$t_invoice$$.con_lai_nt)):($t_invoice$$.tuoi_no=0,$t_invoice$$.so_ngay_trong_han=0,$t_invoice$$.so_ngay_qua_han=0);$callback$$(null,$t_invoice$$)}).catch($e$$=>{$callback$$($e$$)})},$error$$=>{if($error$$)return $reject$$($error$$);$report$$=$report$$.filter($r$$=>$r$$.tien_hd_nt>0);$condition$$.tuoi_no&&($report$$=$report$$.filter($r$$=>$r$$.tuoi_no>=$condition$$.tuoi_no));$condition$$.tuoi_no_min&&
10
- ($report$$=$report$$.filter($r$$=>$r$$.tuoi_no>=$condition$$.tuoi_no_min));$condition$$.tuoi_no_max&&($report$$=$report$$.filter($r$$=>$r$$.tuoi_no<=$condition$$.tuoi_no_max));$resolve$$($report$$)})})})};module.exports=($condition$$,$callback$$)=>{if(!$callback$$)return func($condition$$);func($condition$$).then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})};
1
+ const async=require("async"),tdttco=global.getModel("tdttco"),tdttco_tt=global.getModel("tdttco_tt"),moment=require("moment"),func=async $condition$$=>{if(!$condition$$?.id_app)throw"B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u id_app";let $objs$$=await tdttco.find({id_app:$condition$$.id_app,ngay_tt:{$exists:!1}}).lean();for(let $obj$$ of $objs$$)Logger.info("update ngay_tt",$obj$$.ngay_hd),$obj$$.ngay_tt=moment($obj$$.ngay_hd).add($obj$$.han_tt||0,"days").toDate(),await $obj$$.save();return new Promise(($resolve$$,
2
+ $reject$$)=>{if(!$condition$$.id_app)return $reject$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u tham s\u1ed1: id_app");$condition$$.den_ngay||($condition$$.den_ngay=moment().endOf("date").toDate());$condition$$.tuoi_no&&($condition$$.tuoi_no=Number($condition$$.tuoi_no),$condition$$.tuoi_no>0&&($condition$$.tuoi_no_min=$condition$$.tuoi_no));let $ngay_tt_min$$,$ngay_tt_max$$;$condition$$.tuoi_no_min&&($ngay_tt_min$$=moment().add($condition$$.tuoi_no_min,"days").toDate());$condition$$.tuoi_no_max&&
3
+ ($ngay_tt_max$$=moment().add($condition$$.tuoi_no_max,"days").toDate());async.series({invoices:function($callback$$){setImmediate(async()=>{const $query$$={id_app:$condition$$.id_app};$query$$.ngay_ct={$lte:$condition$$.den_ngay};$condition$$.tu_ngay&&($query$$.ngay_ct.$gte=$condition$$.tu_ngay);$condition$$.ma_dvcs&&($query$$.ma_dvcs=$condition$$.ma_dvcs);if(!$condition$$.ma_kh&&($condition$$.nh_kh||$condition$$.phu_trach)){let $_q$$={};$condition$$.nh_kh&&($_q$$.nh_kh=$condition$$.nh_kh);$condition$$.phu_trach&&
4
+ ($_q$$.phu_trach=$condition$$.phu_trach);$condition$$.ma_kh=await global.getModel("customer").getList($condition$$.id_app,$_q$$,"ma_kh")}$condition$$.ma_kh&&($query$$.ma_kh=$condition$$.ma_kh);$condition$$.so_ct&&($query$$.so_ct=$condition$$.so_ct);$condition$$.so_hd&&($query$$.so_hd=$condition$$.so_hd);$condition$$.tat_toan!==void 0&&($query$$.tat_toan=$condition$$.tat_toan);$ngay_tt_min$$&&($query$$.ngay_tt={$gte:$ngay_tt_min$$});$ngay_tt_max$$&&($query$$.ngay_tt?$query$$.ngay_tt.$lte=$ngay_tt_max$$:
5
+ $query$$.ngay_tt={$lte:$ngay_tt_max$$});tdttco.find($query$$).lean().then(function($results$$){const $invoices$$=[];for(let $i$$=0;$i$$<$results$$.length;$i$$++){var $invoice$$=$results$$[$i$$];$invoice$$.line=$i$$;$invoices$$.push($invoice$$)}$callback$$(null,$invoices$$)}).catch($e$$=>{$callback$$($e$$)})})}},($error$$,$results$$)=>{if($error$$)return $reject$$($error$$);let $report$$=[];async.map($results$$.invoices,function($invoice$$,$callback$$){const $t_invoice$$={sysorder:1,bold:!1,tat_toan:$invoice$$.tat_toan,
6
+ id_ct:$invoice$$.id_ct,ma_ct:$invoice$$.ma_ct,id_hd:$invoice$$.id_ct,so_ct:$invoice$$.so_ct,ngay_ct:$invoice$$.ngay_ct,so_hd:$invoice$$.so_hd,ngay_hd:$invoice$$.ngay_hd,tien_hd_nt:$invoice$$.tien_nt};$t_invoice$$.ma_nt_hd=$invoice$$.ma_nt;$t_invoice$$.ty_gia_hd=$invoice$$.ty_gia;$t_invoice$$.ma_kh=$invoice$$.ma_kh;$t_invoice$$.ma_dt=$invoice$$.ma_dt;$t_invoice$$.ma_nv=$invoice$$.ma_nv;$t_invoice$$.dien_giai=$invoice$$.dien_giai;$t_invoice$$.tien_nt=0;$t_invoice$$.tien=0;$t_invoice$$.da_thanh_toan_nt=
7
+ 0;$t_invoice$$.con_lai_nt=0;$t_invoice$$.thanh_toan_qd=0;$t_invoice$$.tk_co=$invoice$$.tk_no;$t_invoice$$.han_tt=$invoice$$.han_tt?$invoice$$.han_tt:0;$report$$.push($t_invoice$$);tdttco_tt.find({id_tdtt:$invoice$$._id,id_app:$invoice$$.id_app}).sort({ngay_ct:1}).lean().then(function($results$$){let $da_thanh_toan_nt$$=0;$results$$.forEach(function($invoice_tt$$){$da_thanh_toan_nt$$+=$invoice_tt$$.thanh_toan_qd});$t_invoice$$.da_thanh_toan_nt=$da_thanh_toan_nt$$;$t_invoice$$.con_lai_nt=$t_invoice$$.tien_hd_nt-
8
+ $t_invoice$$.da_thanh_toan_nt;$t_invoice$$.tat_toan&&($t_invoice$$.con_lai_nt=0);$t_invoice$$.con_lai_nt!==0?($t_invoice$$.tuoi_no=moment().diff(moment($t_invoice$$.ngay_hd),"days"),$t_invoice$$.so_ngay_trong_han=Math.max(0,$t_invoice$$.han_tt-$t_invoice$$.tuoi_no),$t_invoice$$.so_ngay_qua_han=Math.max(0,$t_invoice$$.tuoi_no-$t_invoice$$.han_tt),$t_invoice$$.so_ngay_qua_han>0&&$t_invoice$$.so_ngay_qua_han<=30&&($t_invoice$$.qua_han1=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>30&&$t_invoice$$.so_ngay_qua_han<=
9
+ 60&&($t_invoice$$.qua_han2=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>60&&$t_invoice$$.so_ngay_qua_han<=90&&($t_invoice$$.qua_han3=$t_invoice$$.con_lai_nt),$t_invoice$$.so_ngay_qua_han>90&&($t_invoice$$.qua_han4=$t_invoice$$.con_lai_nt)):($t_invoice$$.tuoi_no=0,$t_invoice$$.so_ngay_trong_han=0,$t_invoice$$.so_ngay_qua_han=0);$callback$$(null,$t_invoice$$)}).catch($e$$=>{$callback$$($e$$)})},$error$$=>{if($error$$)return $reject$$($error$$);$report$$=$report$$.filter($r$$=>$r$$.tien_hd_nt>
10
+ 0);$condition$$.tuoi_no&&($report$$=$report$$.filter($r$$=>$r$$.tuoi_no>=$condition$$.tuoi_no));$condition$$.tuoi_no_min&&($report$$=$report$$.filter($r$$=>$r$$.tuoi_no>=$condition$$.tuoi_no_min));$condition$$.tuoi_no_max&&($report$$=$report$$.filter($r$$=>$r$$.tuoi_no<=$condition$$.tuoi_no_max));if($condition$$.tinh_tong_cong||$condition$$.chi_hien_tong_cong){let $total_row$$={sysorder:2,bold:!0,dien_giai:"T\u1ed5ng c\u1ed9ng",tien_hd_nt:0,da_thanh_toan_nt:0,con_lai_nt:0,qua_han1:0,qua_han2:0,qua_han3:0,
11
+ qua_han4:0};$report$$.forEach($r$$=>{$total_row$$.tien_hd_nt+=$r$$.tien_hd_nt||0;$total_row$$.da_thanh_toan_nt+=$r$$.da_thanh_toan_nt||0;$total_row$$.con_lai_nt+=$r$$.con_lai_nt||0;$total_row$$.qua_han1+=$r$$.qua_han1||0;$total_row$$.qua_han2+=$r$$.qua_han2||0;$total_row$$.qua_han3+=$r$$.qua_han3||0;$total_row$$.qua_han4+=$r$$.qua_han4||0});$condition$$.chi_hien_tong_cong?$report$$=[$total_row$$]:$report$$.push($total_row$$)}$resolve$$($report$$)})})})};
12
+ module.exports=($condition$$,$callback$$)=>{if(!$callback$$)return func($condition$$);func($condition$$).then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})};
@@ -12,7 +12,7 @@ function($digit$$){return $digit$$+" tr\u0103m"}),$hundred$$="",$ten$$="",$digit
12
12
  $hundred$$&&$ten$$&&($hundred$$+=" ");$ten$$&&$digit$$&&($ten$$+=" ");return[$hundred$$,$ten$$,$digit$$].join("")}
13
13
  function breakDownNumber($digits_number$$){$digits_number$$=$digits_number$$.toString().split("");$digits_number$$=_.map(_.range(0,(3-$digits_number$$.length%3)%3),function(){return 0}).concat($digits_number$$);return _.chain($digits_number$$).map(Number).groupBy(function($element$$,$index$$){return Math.floor($index$$/3)}).toArray().map(function($group$$){return _.object(["hundred","ten","digit"],$group$$)}).value()}
14
14
  function convertFractionPart($fractionPart$$){$fractionPart$$=convertGroup(breakDownNumber($fractionPart$$*100)[0]);var $mapping$$={"m\u01b0\u1eddi":"m\u1ed9t","hai m\u01b0\u01a1i":"hai","ba m\u01b0\u01a1i":"ba","b\u1ed1n m\u01b0\u01a1i":"b\u1ed1n","n\u0103m m\u01b0\u01a1i":"n\u0103m","s\u00e1u m\u01b0\u01a1i":"s\u00e1u","b\u1ea3y m\u01b0\u01a1i":"b\u1ea3y","t\u00e1m m\u01b0\u01a1i":"t\u00e1m","ch\u00edn m\u01b0\u01a1i":"ch\u00edn","m\u1ed9t":"kh\u00f4ng m\u1ed9t",hai:"kh\u00f4ng hai",ba:"kh\u00f4ng ba",
15
- "b\u1ed1n":"kh\u00f4ng b\u1ed1n","n\u0103m":"kh\u00f4ng n\u0103m","s\u00e1u":"kh\u00f4ng s\u00e1u","b\u1ea3y":"kh\u00f4ng b\u1ea3y","t\u00e1m":"kh\u00f4ng t\u00e1m","ch\u00edn":"kh\u00f4ng ch\u00edn"};$fractionPart$$ in $mapping$$&&($fractionPart$$=$mapping$$[$fractionPart$$]);return $fractionPart$$}function round($number$$,$precision$$){return isNaN($number$$)||$number$$===null?0:Number(Math.round($number$$+"e"+$precision$$)+"e-"+$precision$$)}exports.round=round;
15
+ "b\u1ed1n":"kh\u00f4ng b\u1ed1n","n\u0103m":"kh\u00f4ng n\u0103m","s\u00e1u":"kh\u00f4ng s\u00e1u","b\u1ea3y":"kh\u00f4ng b\u1ea3y","t\u00e1m":"kh\u00f4ng t\u00e1m","ch\u00edn":"kh\u00f4ng ch\u00edn"};$fractionPart$$ in $mapping$$&&($fractionPart$$=$mapping$$[$fractionPart$$]);return $fractionPart$$}function round($number$$,$precision$$=0){return isNaN($number$$)||$number$$===null?0:Number(Math.round($number$$+"e"+$precision$$)+"e-"+$precision$$)}exports.round=round;
16
16
  function getInfoFromQuery($obj$$,$_query$$,$callback$$){setImmediate(()=>{let $query$$;try{$_query$$=$_query$$.trim();if(!$_query$$)return $callback$$();try{$_query$$.startsWith("{")||($_query$$="{"+$_query$$+"}");$_query$$.includes("return ")||($_query$$="return "+$_query$$);if($_query$$.indexOf("async ")>=0)return $callback$$("async function is not allow");$query$$=evalute($_query$$,{obj:$obj$$})}catch($e$$){Logger.info("error when parse json",$_query$$)}if(!$query$$)return $callback$$("Query is invalid: "+
17
17
  $_query$$);if(!$query$$.collection||!$query$$.field)return $callback$$();$query$$.collection=="dmkh"&&($query$$.collection="customer");$query$$.collection=="dmtk"&&($query$$.collection="account");let $condition$$=$query$$.condition;if($condition$$){$condition$$=JSON.stringify($condition$$);for(var $fields_m$$ in $obj$$)$condition$$=$condition$$.replace(new RegExp("m."+$fields_m$$,"g"),$obj$$[$fields_m$$]);$condition$$=JSON.parse($condition$$)}else $condition$$={};let $col$$=global.getModel(""+$query$$.collection);
18
18
  $fields_m$$={};$fields_m$$[$query$$.field]=1;$fields_m$$.mnemonic=-1;$fields_m$$.private_key=-1;$obj$$.id_app&&($condition$$.id_app=$obj$$.id_app);$col$$.findOne($condition$$,$fields_m$$).lean().then(function($rs$$){$rs$$?$callback$$(null,$rs$$[$query$$.field]):$callback$$()}).catch($e$$=>{$callback$$($e$$)})}catch($e$$){Logger.error($e$$),$callback$$("error execute query: "+$_query$$)}})}exports.getInfoFromQuery=getInfoFromQuery;
@@ -85,9 +85,10 @@ function sanitizeHtm($html_restoredHtml$$){if(typeof $html_restoredHtml$$!=="str
85
85
  $placeholders$$[parseInt($index$$,10)]||"");$isSafe_tempHtml$$=$sanitizedAfterTokens$$===$isSafe_tempHtml$$;return{safe:$isSafe_tempHtml$$,cleaned:$html_restoredHtml$$,reason:$isSafe_tempHtml$$?"Chu\u1ed7i an to\u00e0n.":"\u0110\u00e3 lo\u1ea1i b\u1ecf n\u1ed9i dung ho\u1eb7c thu\u1ed9c t\u00ednh kh\u00f4ng an to\u00e0n."}}exports.sanitizeHtm=sanitizeHtm;
86
86
  exports.buildQueryByDateHour=($from_startHour$$,$conditions_endHour_to$$,$options$$={})=>{const {startOperator:$startOperator$$="gte",endOperator:$endOperator$$="lte"}=$options$$,$startOpKey$$=`$${$startOperator$$}`,$endOpKey$$=`$${$endOperator$$}`;$options$$=new Date($from_startHour$$);$options$$.setHours(0,0,0,0);const $endDay$$=new Date($conditions_endHour_to$$);$endDay$$.setHours(0,0,0,0);$from_startHour$$=$from_startHour$$.getHours();$conditions_endHour_to$$=$conditions_endHour_to$$.getHours();
87
87
  if($options$$.getTime()===$endDay$$.getTime())return{ngay_ct:$options$$,gio:{[$startOpKey$$]:$from_startHour$$,[$endOpKey$$]:$conditions_endHour_to$$}};$conditions_endHour_to$$=[{ngay_ct:$options$$,gio:{[$startOpKey$$]:$from_startHour$$}},{ngay_ct:$endDay$$,gio:{[$endOpKey$$]:$conditions_endHour_to$$}}];($endDay$$.getTime()-$options$$.getTime())/864E5>1&&$conditions_endHour_to$$.push({ngay_ct:{$gt:$options$$,$lt:$endDay$$}});return{$or:$conditions_endHour_to$$}};
88
- const ALGORITHM="aes-256-cbc",KEY_LENGTH=32,IV_LENGTH=16,SALT="KKKHHHHK";exports.encrypt=$data$$=>{var $cipher_key$$=crypto.scryptSync(configs.cryptoPassword||"PVT@1",SALT,KEY_LENGTH);const $iv$$=crypto.randomBytes(IV_LENGTH);$cipher_key$$=crypto.createCipheriv(ALGORITHM,$cipher_key$$,$iv$$);$data$$=JSON.stringify($data$$);$data$$=$cipher_key$$.update($data$$,"utf8","hex");$data$$+=$cipher_key$$.final("hex");return $iv$$.toString("hex")+":"+$data$$};
89
- exports.decrypt=$decrypted_encryptedText_iv$$=>{var $decipher_key$jscomp$15_password$$=configs.cryptoPassword||"PVT@1";const [$ivHex$$,$encryptedData$$]=$decrypted_encryptedText_iv$$.split(":");if(!$ivHex$$||!$encryptedData$$)throw Error("\u0110\u1ecbnh d\u1ea1ng d\u1eef li\u1ec7u m\u00e3 h\u00f3a kh\u00f4ng h\u1ee3p l\u1ec7.");$decrypted_encryptedText_iv$$=Buffer.from($ivHex$$,"hex");$decipher_key$jscomp$15_password$$=crypto.scryptSync($decipher_key$jscomp$15_password$$,SALT,KEY_LENGTH);$decipher_key$jscomp$15_password$$=
90
- crypto.createDecipheriv(ALGORITHM,$decipher_key$jscomp$15_password$$,$decrypted_encryptedText_iv$$);$decrypted_encryptedText_iv$$=$decipher_key$jscomp$15_password$$.update($encryptedData$$,"hex","utf8");$decrypted_encryptedText_iv$$+=$decipher_key$jscomp$15_password$$.final("utf8");return JSON.parse($decrypted_encryptedText_iv$$)};
88
+ const ALGORITHM="aes-256-cbc",KEY_LENGTH=32,IV_LENGTH=16,SALT="KKKHHHHK";
89
+ exports.encrypt=$data$$=>{if($data$$===void 0||$data$$===null)$data$$="";var $cipher_key$$=crypto.scryptSync(configs.cryptoPassword||"PVT@1",SALT,KEY_LENGTH);const $iv$$=crypto.randomBytes(IV_LENGTH);$cipher_key$$=crypto.createCipheriv(ALGORITHM,$cipher_key$$,$iv$$);$data$$=typeof $data$$=="object"?JSON.stringify($data$$):$data$$.toString();$data$$=$cipher_key$$.update($data$$,"utf8","hex");$data$$+=$cipher_key$$.final("hex");return $iv$$.toString("hex")+":"+$data$$};
90
+ exports.decrypt=($decrypted_encryptedText_iv$$,$parseJson$$=!0)=>{var $decipher_key$jscomp$15_password$$=configs.cryptoPassword||"PVT@1";const [$ivHex$$,$encryptedData$$]=$decrypted_encryptedText_iv$$.split(":");if(!$ivHex$$||!$encryptedData$$)throw Error("\u0110\u1ecbnh d\u1ea1ng d\u1eef li\u1ec7u m\u00e3 h\u00f3a kh\u00f4ng h\u1ee3p l\u1ec7.");$decrypted_encryptedText_iv$$=Buffer.from($ivHex$$,"hex");$decipher_key$jscomp$15_password$$=crypto.scryptSync($decipher_key$jscomp$15_password$$,SALT,KEY_LENGTH);
91
+ $decipher_key$jscomp$15_password$$=crypto.createDecipheriv(ALGORITHM,$decipher_key$jscomp$15_password$$,$decrypted_encryptedText_iv$$);$decrypted_encryptedText_iv$$=$decipher_key$jscomp$15_password$$.update($encryptedData$$,"hex","utf8");$decrypted_encryptedText_iv$$+=$decipher_key$jscomp$15_password$$.final("utf8");return $parseJson$$?JSON.parse($decrypted_encryptedText_iv$$):$decrypted_encryptedText_iv$$};
91
92
  exports.retryStrategyRedis=$options$$=>{if($options$$.error&&$options$$.error.code==="ECONNREFUSED")return Logger.error("L\u1ed7i k\u1ebft n\u1ed1i Redis: Server t\u1eeb ch\u1ed1i k\u1ebft n\u1ed1i."),Error("Server t\u1eeb ch\u1ed1i k\u1ebft n\u1ed1i.");if($options$$.attempt>10)return Logger.error("\u0110\u00e3 th\u1eed k\u1ebft n\u1ed1i l\u1ea1i Redis qu\u00e1 10 l\u1ea7n. B\u1ecf cu\u1ed9c."),Error("Kh\u00f4ng th\u1ec3 k\u1ebft n\u1ed1i \u0111\u1ebfn Redis sau nhi\u1ec1u l\u1ea7n th\u1eed.");const $delay$$=
92
93
  Math.min($options$$.attempt*100,3E3);Logger.info(`M\u1ea5t k\u1ebft n\u1ed1i Redis. Th\u1eed k\u1ebft n\u1ed1i l\u1ea1i sau ${$delay$$}ms. L\u1ea7n th\u1eed th\u1ee9 ${$options$$.attempt}...`);return $delay$$};
93
94
  const transform=require("lodash/transform"),isEqual=require("lodash/isEqual"),isObject=require("lodash/isObject"),difference=function($object$$,$base$$){return transform($object$$,($result$$,$value$$,$key$$)=>{isEqual($value$$,$base$$[$key$$])||($result$$[$key$$]=isObject($value$$)&&isObject($base$$[$key$$])?difference($value$$,$base$$[$key$$]):$value$$)})};exports.difference=difference;
@@ -95,3 +96,6 @@ const getDateRangeByType=$type$$=>{let $fromDate$$="",$toDate$$="";switch($type$
95
96
  "month").startOf("month").format("YYYY-MM-DD");$toDate$$=moment().subtract(1,"month").endOf("month").format("YYYY-MM-DD");break;case "thisYear":$fromDate$$=moment().startOf("year").format("YYYY-MM-DD"),$toDate$$=moment().endOf("year").format("YYYY-MM-DD")}return{fromDate:$fromDate$$,toDate:$toDate$$}};exports.getDateRangeByType=getDateRangeByType;
96
97
  const fs=require("fs"),getDir=$dirName$$=>{let $dirPath$$=configs.paths[$dirName$$];$dirPath$$||($dirPath$$=__dirname,$dirPath$$=path.dirname($dirPath$$),$dirPath$$=path.dirname($dirPath$$),$dirPath$$=path.join($dirPath$$,$dirName$$));fs.existsSync($dirPath$$)||fs.mkdirSync($dirPath$$);return $dirPath$$};exports.getDir=getDir;
97
98
  const getPathFile=$file_file_name$$=>{if($file_file_name$$.file&&$file_file_name$$.file.name){$file_file_name$$=$file_file_name$$.file.name;var $root$$=getDir("uploads");return path.join($root$$,$file_file_name$$)}};exports.getPathFile=getPathFile;
99
+ function restoreObjectIds($data$$){const $walk$$=$buffer$jscomp$inline_2_value$$=>{if($buffer$jscomp$inline_2_value$$===null||typeof $buffer$jscomp$inline_2_value$$!=="object"||$buffer$jscomp$inline_2_value$$ instanceof Date||$buffer$jscomp$inline_2_value$$ instanceof RegExp||Buffer.isBuffer($buffer$jscomp$inline_2_value$$))return $buffer$jscomp$inline_2_value$$;if(Array.isArray($buffer$jscomp$inline_2_value$$))return $buffer$jscomp$inline_2_value$$.map($walk$$);if($buffer$jscomp$inline_2_value$$&&
100
+ typeof $buffer$jscomp$inline_2_value$$==="object"&&$buffer$jscomp$inline_2_value$$._bsontype==="ObjectID"&&$buffer$jscomp$inline_2_value$$.id&&typeof $buffer$jscomp$inline_2_value$$.id==="object")return $buffer$jscomp$inline_2_value$$=Buffer.from(Object.values($buffer$jscomp$inline_2_value$$.id)),new mongoose.Types.ObjectId($buffer$jscomp$inline_2_value$$);const $result$$={};for(const $key$$ in $buffer$jscomp$inline_2_value$$)Object.prototype.hasOwnProperty.call($buffer$jscomp$inline_2_value$$,$key$$)&&
101
+ ($result$$[$key$$]=$walk$$($buffer$jscomp$inline_2_value$$[$key$$]));return $result$$};return $walk$$($data$$)}exports.restoreObjectIds=restoreObjectIds;
@@ -1,12 +1,16 @@
1
- const fs=require("fs"),path=require("path"),PDFParser=require("pdf2json"),mammoth=require("mammoth"),xlsx=require("xlsx"),FileChunk=global.getModel("filechunk"),{getPathFile}=require("./utils"),StaticPool=require("../libs/WorkerStaticPool");
2
- async function extractTextFromFile($filePath$$){const $ext$$=path.extname($filePath$$).toLowerCase();let $rawText$$="";switch($ext$$){case ".pdf":$rawText$$=await new Promise(($resolve$$,$reject$$)=>{const $pdfParser$$=new PDFParser(this,1);$pdfParser$$.on("pdfParser_dataError",$errData$$=>$reject$$($errData$$.parserError));$pdfParser$$.on("pdfParser_dataReady",()=>{$resolve$$($pdfParser$$.getRawTextContent())});$pdfParser$$.loadPDF($filePath$$)});break;case ".docx":$rawText$$=(await mammoth.extractRawText({path:$filePath$$})).value;
3
- break;case ".xlsx":case ".xls":const $workbook$$=xlsx.readFile($filePath$$);$workbook$$.SheetNames.forEach($sheetName$$=>{const $csvData$$=xlsx.utils.sheet_to_csv($workbook$$.Sheets[$sheetName$$]);$csvData$$.trim()&&($rawText$$+=`\n--- D\u1eef li\u1ec7u t\u1eeb Sheet: ${$sheetName$$} ---\n`,$rawText$$+=$csvData$$,$rawText$$+="\n-----------------------------------\n")});break;case ".txt":case ".md":case ".csv":$rawText$$=fs.readFileSync($filePath$$,"utf8");break;default:throw Error(`H\u1ec7 th\u1ed1ng ch\u01b0a h\u1ed7 tr\u1ee3 b\u00f3c t\u00e1ch n\u1ed9i dung cho \u0111\u1ecbnh d\u1ea1ng: ${$ext$$}`);
1
+ const fs=require("fs"),path=require("path"),mammoth=require("mammoth"),xlsx=require("xlsx"),FileChunk=global.getModel("filechunk"),{getPathFile}=require("./utils"),StaticPool=require("../libs/WorkerStaticPool"),{translateDocToText}=require("../agents/tools/utils");for(const $key$$ in[])Object.prototype.hasOwnProperty.call(Array.prototype,$key$$)&&Object.defineProperty(Array.prototype,$key$$,{enumerable:!1});typeof global.DOMMatrix==="undefined"&&(global.DOMMatrix=require("dommatrix"));
2
+ const {PDFParse}=require("pdf-parse");
3
+ async function extractTextFromFile($filePath$$){const $ext$$=path.extname($filePath$$).toLowerCase();let $rawText$$="";switch($ext$$){case ".pdf":try{const $dataBuffer$$=fs.readFileSync($filePath$$),$uint8ArrayData$$=new Uint8Array($dataBuffer$$);$rawText$$=(await (new PDFParse($uint8ArrayData$$)).getText()).text}catch($pdfError$$){throw console.error(`L\u1ed7i b\u00f3c t\u00e1ch PDF ${$filePath$$}:`,$pdfError$$),$pdfError$$;}break;case ".docx":$rawText$$=(await mammoth.extractRawText({path:$filePath$$})).value;break;
4
+ case ".xlsx":case ".xls":const $workbook$$=xlsx.readFile($filePath$$);$workbook$$.SheetNames.forEach($sheetName$$=>{const $csvData$$=xlsx.utils.sheet_to_csv($workbook$$.Sheets[$sheetName$$]);$csvData$$.trim()&&($rawText$$+=`\n--- D\u1eef li\u1ec7u t\u1eeb Sheet: ${$sheetName$$} ---\n`,$rawText$$+=$csvData$$,$rawText$$+="\n-----------------------------------\n")});break;case ".txt":case ".md":case ".csv":$rawText$$=fs.readFileSync($filePath$$,"utf8");break;default:throw Error(`H\u1ec7 th\u1ed1ng ch\u01b0a h\u1ed7 tr\u1ee3 b\u00f3c t\u00e1ch n\u1ed9i dung cho \u0111\u1ecbnh d\u1ea1ng: ${$ext$$}`);
4
5
  }return $rawText$$}
5
6
  async function generateEmbedding($text$$){try{const $response$$=await fetch(`${process.env.OLLAMA_BASE_URL||"http://localhost:11434"}/api/embeddings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:"nomic-embed-text",prompt:$text$$})});if(!$response$$.ok)throw Error(`L\u1ed7i t\u1eeb Ollama API: ${$response$$.statusText}`);return(await $response$$.json()).embedding}catch($error$$){throw Logger.error("[vectorService] L\u1ed7i khi g\u1ecdi Ollama Embedding:",$error$$.message),
6
7
  Logger.warn("[vectorService] C\u00e0i \u0111\u1eb7t Ollama: ","\n docker run -d -v ollama_data:/root/.ollama -p 11434:11434 --name ollama_server ollama/ollama\n docker exec -it ollama_server ollama pull nomic-embed-text\n "),$error$$;}}
7
8
  function splitTextIntoChunks($cleanText_text$$,$chunkSize$$=1E3,$chunkOverlap$$=200){const $chunks$$=[];let $startIndex$$=0;for($cleanText_text$$=$cleanText_text$$.replace(/\s+/g," ").trim();$startIndex$$<$cleanText_text$$.length;){const $chunk$$=$cleanText_text$$.substring($startIndex$$,$startIndex$$+$chunkSize$$);$chunks$$.push($chunk$$);$startIndex$$+=$chunkSize$$-$chunkOverlap$$}return $chunks$$}
8
- async function processAndStoreFile($fileDoc$$){try{console.log(`[B\u1eaft \u0111\u1ea7u] X\u1eed l\u00fd file: ${$fileDoc$$.filename||$fileDoc$$._id}`);const $filePath$$=getPathFile($fileDoc$$);if(!fs.existsSync($filePath$$))throw Error(`Kh\u00f4ng t\u00ecm th\u1ea5y file t\u1ea1i \u0111\u01b0\u1eddng d\u1eabn: ${$filePath$$}`);const $rawText$$=await extractTextFromFile($filePath$$);if($rawText$$&&$rawText$$.trim()!==""){var $chunks$$=splitTextIntoChunks($rawText$$,1E3,200);console.log(`- C\u1eaft th\u00e0nh c\u00f4ng ${$chunks$$.length} chunks.`);
9
- var $chunkPromises$$=$chunks$$.map(async($chunkContent$$,$index$$)=>{const $vectorEmbedding$$=await generateEmbedding($chunkContent$$);return FileChunk.create({file_id:$fileDoc$$._id,chunk_index:$index$$,content:$chunkContent$$,metadata:{department:$fileDoc$$.department||"general",docType:$fileDoc$$.docType||"unknown",accessLevel:$fileDoc$$.accessLevel||"internal"},embedding:$vectorEmbedding$$})});await Promise.all($chunkPromises$$);console.log(`[Th\u00e0nh c\u00f4ng] \u0110\u00e3 vector h\u00f3a to\u00e0n b\u1ed9 d\u1eef li\u1ec7u c\u1ee7a file ${$fileDoc$$._id}`)}else console.warn(`[C\u1ea3nh b\u00e1o] File ${$filePath$$} tr\u1ed1ng ho\u1eb7c kh\u00f4ng c\u00f3 text \u0111\u1ec3 tr\u00edch xu\u1ea5t.`)}catch($error$$){console.error(`[L\u1ed7i] X\u1eed l\u00fd file ${$fileDoc$$._id} th\u1ea5t b\u1ea1i:`,
10
- $error$$.message)}}
11
- const processAndStoreFileWorker=$file$$=>{const $fileWorker$$=path.dirname(__dirname)+"/workers/inputWorker.js";global.createVectorContentFile||(global.createVectorContentFile=new StaticPool($fileWorker$$,0,1));return new Promise(($resolve$$,$reject$$)=>{global.createVectorContentFile.exec({processFile:$file$$,configs:{database:configs.database}},$response$$=>{if($response$$.error)return $reject$$({error:$response$$.error||"\u0110\u00e3 c\u00f3 l\u1ed7i khi x\u1eed l\u00fd d\u1eef li\u1ec7u"});$resolve$$($response$$)})})};
12
- module.exports={processAndStoreFile,processAndStoreFileWorker,generateEmbedding,extractTextFromFile};
9
+ async function processFile($fileDoc$$){try{Logger.info(`[vectorService][B\u1eaft \u0111\u1ea7u] X\u1eed l\u00fd file: ${$fileDoc$$.file?.name||$fileDoc$$._id}`);const $filePath$$=getPathFile($fileDoc$$);if(!fs.existsSync($filePath$$))throw Error(`[vectorService]Kh\u00f4ng t\u00ecm th\u1ea5y file t\u1ea1i \u0111\u01b0\u1eddng d\u1eabn: ${$filePath$$}`);const $rawText$$=await extractTextFromFile($filePath$$);if($rawText$$&&$rawText$$.trim()!==""){var $chunks$$=splitTextIntoChunks($rawText$$,1E3,200);
10
+ Logger.info(`[vectorService]- C\u1eaft th\u00e0nh c\u00f4ng ${$chunks$$.length} chunks.`);var $chunkPromises$$=$chunks$$.map(async($chunkContent$$,$index$$)=>{const $vectorEmbedding$$=await generateEmbedding($chunkContent$$);return FileChunk.create({id_app:$fileDoc$$.id_app,file_id:$fileDoc$$._id,chunk_index:$index$$,content:$chunkContent$$,metadata:{department:$fileDoc$$.department||"general",docType:$fileDoc$$.docType||"unknown",accessLevel:$fileDoc$$.accessLevel||"internal"},embedding:$vectorEmbedding$$})});
11
+ await Promise.all($chunkPromises$$);Logger.info(`[vectorService][Th\u00e0nh c\u00f4ng] \u0110\u00e3 vector h\u00f3a to\u00e0n b\u1ed9 d\u1eef li\u1ec7u c\u1ee7a file ${$fileDoc$$._id}`)}else Logger.warn(`[vectorService][C\u1ea3nh b\u00e1o] File ${$filePath$$} tr\u1ed1ng ho\u1eb7c kh\u00f4ng c\u00f3 text \u0111\u1ec3 tr\u00edch xu\u1ea5t.`)}catch($error$$){Logger.error(`[vectorService][L\u1ed7i] X\u1eed l\u00fd file ${$fileDoc$$._id} th\u1ea5t b\u1ea1i:`,$error$$.message)}}
12
+ async function processData($doc$$,$listInfoCode$$,$user_id$$){if($doc$$.id_app&&$listInfoCode$$!="file")try{if($listInfoCode$$=$listInfoCode$$||$doc$$.listinfo_code){console.log(`[B\u1eaft \u0111\u1ea7u] Vector h\u00f3a d\u1eef li\u1ec7u [${$listInfoCode$$}] - ID: ${$doc$$._id.toString()}`);var $chunkContent$$=(await translateDocToText($doc$$,$listInfoCode$$)).trim();if($chunkContent$$&&$chunkContent$$.includes("- ")){await FileChunk.deleteMany({id_app:$doc$$.id_app,file_id:$doc$$._id.toString(),
13
+ "metadata.docType":$listInfoCode$$});var $vectorEmbedding$$=await generateEmbedding($chunkContent$$);await FileChunk.create({id_app:$doc$$.id_app,file_id:$doc$$._id.toString(),chunk_index:0,content:$chunkContent$$,metadata:{department:"erp_system",docType:$listInfoCode$$,user_id:$user_id$$,accessLevel:"internal"},embedding:$vectorEmbedding$$});console.log(`[Th\u00e0nh c\u00f4ng] \u0110\u00e3 vector h\u00f3a ID ${$doc$$._id}`)}else console.warn(`[B\u1ecf qua] D\u1eef li\u1ec7u [${$listInfoCode$$}] ID ${$doc$$._id.toString()} r\u1ed7ng.`)}else console.warn("[B\u1ecf qua] thi\u1ebfu listinfo code.")}catch($error$$){console.error(`[L\u1ed7i] X\u1eed l\u00fd d\u1eef li\u1ec7u ${$listInfoCode$$} ID ${$doc$$._id} th\u1ea5t b\u1ea1i:`,
14
+ $error$$.message)}else console.warn("[B\u1ecf qua] kh\u00f4ng t\u1ea1o vector cho d\u1eef li\u1ec7u kh\u00f4ng c\u00f3 id_app ho\u1eb7c file")}
15
+ const processDataWorker=($data$$,$dataType$$="data",$listInfoCode$$=null,$user_id$$)=>{const $fileWorker$$=path.dirname(__dirname)+"/workers/inputWorker.js";global.createVectorContentFile||(global.createVectorContentFile=new StaticPool($fileWorker$$,0,1));return new Promise(($resolve$$,$reject$$)=>{global.createVectorContentFile.exec({processData:$data$$,listInfoCode:$listInfoCode$$,user_id:$user_id$$,dataType:$dataType$$,configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $reject$$({error:$response$$.error||
16
+ "\u0110\u00e3 c\u00f3 l\u1ed7i khi x\u1eed l\u00fd d\u1eef li\u1ec7u"});$resolve$$($response$$)})})};module.exports={processFile,processData,processDataWorker,generateEmbedding,extractTextFromFile};
@@ -0,0 +1,2 @@
1
+ const mongoose=require("mongoose"),actionLogSchema=new mongoose.Schema({idempotencyKey:{type:String,required:!0,unique:!0,index:!0},actionType:{type:String,required:!0,index:!0},status:{type:String,enum:["PENDING","SUCCESS","FAILED"],default:"PENDING"},payload:{type:mongoose.Schema.Types.Mixed,default:{}},result:{type:mongoose.Schema.Types.Mixed,default:{}},expiresAt:{type:Date,default:()=>new Date(+new Date+2592E6),index:{expires:"0s"}}},{timestamps:!0}),ActionLog=mongoose.model("actionLog",actionLogSchema);
2
+ module.exports=ActionLog;
@@ -0,0 +1 @@
1
+ const mongoose=require("mongoose"),aiMemorySchema=new mongoose.Schema({id_app:{type:String,required:!0},user_id:{type:String,required:!0,index:!0},core_memories:[{type:String}],last_summarized_date:{type:Date,default:Date.now}},{timestamps:!0});module.exports=mongoose.model("aimemory",aiMemorySchema);
@@ -5,8 +5,9 @@ ma_so_thue:{type:String,maxlength:1024},dia_chi_xuat_hoa_don:String,nguoi_nop_th
5
5
  ty_le_hoa_hong:Number,tang_gioi_thieu_denom:String,ten_chu_tai_khoan:String,tai_khoan_ngan_hang:String,ten_ngan_hang:String,chi_nhanh_ngan_hang:String,so_bin:String,so_ngay_lam_mot_thang:{type:Number,default:24},logo:{type:String,maxlength:1024},logo_watermark:{type:String,maxlength:1024},account_types_accept:[],options:{},allow_modules:[String],partner:String,server:String,owner:String,default_password:String,google_credentials:String,email_host:String,email_port:Number,email_secure:{type:Boolean,
6
6
  default:!0},email_authMethod:{type:String,default:"LOGIN"},email_user:String,email_pass:String,email_name:String,invoice_service:String,viettel_version:{type:String,maxlength:1024},viettel_user:{type:String,maxlength:1024},viettel_password:{type:String,maxlength:1024},viettel_token:{type:String},viettel_url_service:{type:String,maxlength:1024},viettel_direct_issue:Boolean,ma_hoa_don:String,ky_hieu_hoa_don:String,so_serial:String,vnpt_user:{type:String,maxlength:1024},vnpt_password:{type:String,maxlength:1024},
7
7
  vnpt_url_service:{type:String,maxlength:1024},vnpt_ky_hieu_hoa_don:String,vnpt_so_serial:String,easy_user:{type:String,maxlength:1024},easy_password:{type:String,maxlength:1024},easy_url_service:{type:String,maxlength:1024},easy_ky_hieu_hoa_don:String,easy_so_serial:String,facebook_webhook_verify_token:String,facebook_webhook:String,sip_uri:String,sip_password:String,sip_websocket:String,voiip_access_token:String,voiip_webhook:String,zalo_app_id:String,zalo_secret_key:String,zalo_code:String,zalo_oa_id:String,
8
- zalo_code_verifier:String,zalo_code_challenge:String,zalo_access_token:String,zalo_refresh_token:String,zalo_expires_in:Number,zalo_updated:Date,zalo_otp_template_id:String,exfields:global.Schema.Types.Mixed,domain:String,ssl_key:String,ssl_cert:String,ssl_ca:String,expire_date:Date,trang_thai:{type:String,default:"0"},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,
9
- default:""}});(global.configs||{}).createIndexes&&(appScheam.index({app_code:1},{unique:!0}),appScheam.index({name:1,province:1}),appScheam.index({menu_code:1}),appScheam.index({trang_thai:1}),appScheam.index({sale_online:1}),appScheam.index({date_created:1}),appScheam.index({date_updated:1}),appScheam.index({user_created:"text"},{name:"app_index_created"}),appScheam.index({name:"text",province:"text",name_en:"text",address:"text",phone:"text",email:"text",ma_so_thue:"text"},{name:"app_index"}));
8
+ zalo_code_verifier:String,zalo_code_challenge:String,zalo_access_token:String,zalo_refresh_token:String,zalo_expires_in:Number,zalo_updated:Date,zalo_otp_template_id:String,exfields:global.Schema.Types.Mixed,domain:String,ssl_key:String,ssl_cert:String,ssl_ca:String,openapi_key:String,openapi_gpt_model:String,expire_date:Date,trang_thai:{type:String,default:"0"},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,
9
+ default:""},user_updated:{type:String,default:""}});
10
+ (global.configs||{}).createIndexes&&(appScheam.index({app_code:1},{unique:!0}),appScheam.index({name:1,province:1}),appScheam.index({menu_code:1}),appScheam.index({trang_thai:1}),appScheam.index({sale_online:1}),appScheam.index({date_created:1}),appScheam.index({date_updated:1}),appScheam.index({user_created:"text"},{name:"app_index_created"}),appScheam.index({name:"text",province:"text",name_en:"text",address:"text",phone:"text",email:"text",ma_so_thue:"text"},{name:"app_index"}));
10
11
  const App=global.mongoose.models.app||global.mongoose.model("app",appScheam);
11
12
  App.participants=async $app$$=>{_.isString($app$$)&&($app$$=await App.getInfo($app$$));let $participants$$=await Participant.find({id_app:$app$$._id});if($app$$.user_created&&!$participants$$.find($p$$=>$p$$.email===$app$$.user_created)){let $_p$$={email:$app$$.user_created,name:$app$$.user_created.split("@")[0],admin:!0,active:!0,cancel:!1,id_app:$app$$._id};$participants$$.push($_p$$);Participant.createParticipant($_p$$,$e$$=>{$e$$&&Logger.error("create participant for user owner",$e$$)})}return $participants$$};
12
13
  App.getInfo=async function($id_app$$,$field$$){return new Promise(($resolve$$,$reject$$)=>{App.findOne({_id:$id_app$$}).lean().then($rs$$=>{if(!$rs$$)return $reject$$(Error("App is not exists"));$resolve$$($field$$?$rs$$[$field$$]:$rs$$)}).catch($e$$=>{$reject$$($e$$)})})};
@@ -65,11 +65,11 @@ $emails$$=[$rq$$.user_request],$rqs$$=$requests$$.map($a$$=>$a$$.user_request),$
65
65
  await File.find({id_link:$rq$$.data._id}).lean():void 0},null,$emails$$,!0,!0)}catch($e$$){Logger.error("Error send email",$e$$.message)}}).catch($e$$=>{Logger.error($e$$)}):Logger.info("don't find email template or report template to send notify email to request user")}).catch($e$$=>{Logger.error($e$$)})}};
66
66
  model.approve=async function($encrypted$$,$callback$$,$token$$,$options$$={reason:""}){try{const $result_approve$$=await executeInTransaction(async()=>{Logger.info("[approve] \u0111ang duy\u1ec7t y\u00eau c\u1ea7u....");let $user_approved$$;if(underscore.isObject($encrypted$$)){var $_c$$=$encrypted$$.id_request;$user_approved$$=$encrypted$$.email;var $approve_user_approved_name$$=$encrypted$$.name;var $key_data_trang_thai$$=$encrypted$$.trang_thai}else $key_data_trang_thai$$=utils.decrypt($encrypted$$),
67
67
  $_c$$=$key_data_trang_thai$$.id_request,$user_approved$$=$key_data_trang_thai$$.email,$approve_user_approved_name$$=$key_data_trang_thai$$.name,$key_data_trang_thai$$=$key_data_trang_thai$$.trang_thai;if(!$_c$$||!$user_approved$$)throw"request id and approve user are required";if(!global.mongoose.Types.ObjectId.isValid($_c$$))throw"request id '"+$_c$$+"' is not valid";$_c$$={_id:$_c$$};$key_data_trang_thai$$!==void 0&&$key_data_trang_thai$$!==null&&($_c$$.trang_thai=$key_data_trang_thai$$);const $rq$$=
68
- await model.findOne($_c$$);if(!$rq$$)throw"Y\u00eau c\u1ea7u kh\u00f4ng t\u1ed3n t\u1ea1i";if($rq$$.date_approved)throw"Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t b\u1edfi "+$rq$$.user_approved_name;if($rq$$.date_denied)throw"Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 b\u1ecb t\u1eeb ch\u1ed1i duy\u1ec7t b\u1edfi "+$rq$$.user_denied_name;$rq$$.date_approved=new Date;$rq$$.user_approved=$user_approved$$;$rq$$.user_approved_name=$approve_user_approved_name$$;$rq$$.approved_reason=
68
+ await model.findOne($_c$$).inTxn();if(!$rq$$)throw"Y\u00eau c\u1ea7u kh\u00f4ng t\u1ed3n t\u1ea1i";if($rq$$.date_approved)throw"Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t b\u1edfi "+$rq$$.user_approved_name;if($rq$$.date_denied)throw"Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 b\u1ecb t\u1eeb ch\u1ed1i duy\u1ec7t b\u1edfi "+$rq$$.user_denied_name;$rq$$.date_approved=new Date;$rq$$.user_approved=$user_approved$$;$rq$$.user_approved_name=$approve_user_approved_name$$;$rq$$.approved_reason=
69
69
  $options$$.reason||"";if(!$rq$$.user_approves||!$rq$$.user_approves.find($u$$=>$u$$.email.indexOf($user_approved$$)>=0))throw"User n\u00e0y kh\u00f4ng c\u00f3 quy\u1ec1n duy\u1ec7t y\u00eau c\u1ea7u n\u00e0y";$approve_user_approved_name$$=await $rq$$.save();if($rq$$.update_after_approve&&$rq$$.update_after_approve.data){Logger.info("[approve] t\u00ecm controller c\u1ee7a ch\u1ee9ng t\u1eeb \u0111\u00e3 duy\u1ec7t",$rq$$.update_after_approve.module||$rq$$.update_after_approve.model);let $module_name$$=
70
70
  $rq$$.update_after_approve.module||$rq$$.update_after_approve.model,$ctrl$$;$module_name$$&&($ctrl$$=global.controllers[$module_name$$.toUpperCase()]);let $_m$$;$rq$$.update_after_approve.model?$_m$$=global.getModel($rq$$.update_after_approve.model):$ctrl$$&&($_m$$=$ctrl$$.getProperty("model"));if(!$_m$$){Logger.error("[approve] kh\u00f4ng t\u00ecm th\u1ea5y model c\u1ee7a ch\u1ee9ng t\u1eeb",$rq$$.update_after_approve.model||$module_name$$.toUpperCase());return}Logger.info("[approve] c\u1eadp nh\u1eadt data cho ch\u1ee9ng t\u1eeb sau khi duy\u1ec7t...",
71
- $module_name$$);await $_m$$.updateOne({_id:$rq$$.id_ct},$rq$$.update_after_approve.data);if($ctrl$$){const $obj$$=await $_m$$.findOne({_id:$rq$$.id_ct});if($obj$$){onAfterCommit(()=>{$ctrl$$.emit("saved",$obj$$);$ctrl$$.emit("updated",$obj$$)});const $u$$=await global.getModel("user").findOne({email:$user_approved$$});$u$$.current_id_app=$obj$$.id_app;const $app_info$$=await App.findOne({_id:$obj$$.id_app});Logger.info("[approve] post s\u1ed5 s\u00e1ch sau khi duy\u1ec7t ch\u1ee9ng t\u1eeb...",$ctrl$$.name,
72
- $module_name$$,$obj$$.so_ct,$obj$$.trang_thai);await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.postData($obj$$,$e$$=>{if($e$$)return Logger.error("[approve] [postData]",$e$$,$module_name$$,$obj$$.so_ct,$obj$$.trang_thai),$reject$$($e$$);$resolve$$()},{kiem_tra_han_muc_cong_no:!1})});$ctrl$$.handleAfterAproved&&await $ctrl$$.handleAfterAproved($obj$$,$rq$$);await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.onView($u$$,[$obj$$.toObject()],async($channel_e$$,$rs$$)=>{$channel_e$$&&Logger.error("[approve][approved][onView]",
71
+ $module_name$$);await $_m$$.updateOne({_id:$rq$$.id_ct},$rq$$.update_after_approve.data);if($ctrl$$){const $obj$$=await $_m$$.findOne({_id:$rq$$.id_ct}).inTxn();if($obj$$){onAfterCommit(()=>{$ctrl$$.emit("saved",$obj$$);$ctrl$$.emit("updated",$obj$$)});const $u$$=await global.getModel("user").findOne({email:$user_approved$$});$u$$.current_id_app=$obj$$.id_app;const $app_info$$=await App.findOne({_id:$obj$$.id_app});Logger.info("[approve] post s\u1ed5 s\u00e1ch sau khi duy\u1ec7t ch\u1ee9ng t\u1eeb...",
72
+ $ctrl$$.name,$module_name$$,$obj$$.so_ct,$obj$$.trang_thai);await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.postData($obj$$,$e$$=>{if($e$$)return Logger.error("[approve] [postData]",$e$$,$module_name$$,$obj$$.so_ct,$obj$$.trang_thai),$reject$$($e$$);$resolve$$()},{kiem_tra_han_muc_cong_no:!1})});$ctrl$$.handleAfterAproved&&await $ctrl$$.handleAfterAproved($obj$$,$rq$$);await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.onView($u$$,[$obj$$.toObject()],async($channel_e$$,$rs$$)=>{$channel_e$$&&Logger.error("[approve][approved][onView]",
73
73
  $channel_e$$);$channel_e$$=`${$module_name$$.toLowerCase()}-${"request_approved"}`;$obj$$.id_app&&($channel_e$$=`${$channel_e$$}-${$obj$$.id_app}`);let $message$$=JSON.stringify($rs$$[0]);try{await global.clientRedis.publish($channel_e$$,$message$$)}catch($e$$){Logger.error("[approve] [sendNotifyApproved] fire event","request_approved",$e$$)}Logger.info("[approve][approved][requestApprove] t\u1ea1o y\u00eau c\u1ea7u duy\u1ec7t ti\u1ebfp theo...");$ctrl$$.requestApprove($app_info$$,$u$$,$rs$$[0],$e$$=>
74
74
  {if($e$$)return $reject$$($e$$);$resolve$$()},null,$rq$$)})})}else Logger.error("[approve] kh\u00f4ng tim th\u1ea5y l\u1ed7i data \u0111\u00e3 duy\u1ec7t theo id_ct",$rq$$.id_ct)}else Logger.error("[approve] kh\u00f4ng t\u00ecm th\u1ea5y controller c\u1ee7a ch\u1ee9ng t\u1eeb",$module_name$$)}else Logger.info("[approve] kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u c\u1ea7n c\u1eadp nh\u1eadt sau khi \u0111\u00e3 duy\u1ec7t");onAfterCommit(()=>{model.sendNotifyApproved($rq$$,$token$$)});return $approve_user_approved_name$$});
75
75
  $callback$$(null,$result_approve$$)}catch($e$$){Logger.error("[approve][approved]",$e$$),$callback$$($e$$)}};
@@ -90,6 +90,6 @@ await $requests$$.asyncJoinModel2($rq$$.id_app,participant,{where:{user_approved
90
90
  <hr/> ${$option$jscomp$2_template$$} ${footerEmailTemplate($requests$$.filter($r$$=>$r$$.user_approved||$r$$.user_denied))}`;let $ngEnviorment$$=new ngcompile([]);$_data$jscomp$3_app_info$$={user_request:{name:$rq$$.user_request_name,email:$rq$$.user_request},user_deny:{name:$rq$$.user_denied_name,email:$rq$$.user_denied},datasource:$rq$$.data,company:$_data$jscomp$3_app_info$$,app_info:$_data$jscomp$3_app_info$$,doc_so:utils.numberToWord};try{let $email_content$$=$ngEnviorment$$.$compile($option$jscomp$2_template$$)($_data$jscomp$3_app_info$$),
91
91
  $emails$$=[$rq$$.user_request],$rqs$$=$requests$$.map($a$$=>$a$$.user_request),$aps$$=$requests$$.filter($r$$=>$r$$._id.toString()!==$rq$$._id.toString()).map($a$$=>$a$$.user_approved);$emails$$=[...(new Set($emails$$.concat($rqs$$).concat($aps$$)))].filter($r$$=>$r$$);$emails$$.length>0&&App.emitEvent($rq$$.id_app,"request_denied",{_id:$rq$$.id_ct,id_app:$rq$$.id_app,title:$title$$,body:$title$$,email_content:$email_content$$,code:$rq$$.ma_ct,allow_unsubcribe:!1,attachments:$rq$$.data._id?await File.find({id_link:$rq$$.data._id}).lean():
92
92
  void 0},null,$emails$$,!0,!0)}catch($e$$){Logger.error("Error send email",$e$$.message)}}else Logger.info("don't find email template or report template to send notify email to request user")});if($rq$$.update_after_deny&&$rq$$.update_after_deny.data){let $module_name$$=$rq$$.update_after_deny.module||$rq$$.update_after_deny.model,$ctrl$$;$module_name$$&&($ctrl$$=global.controllers[$module_name$$.toUpperCase()]);let $_m$$;$rq$$.update_after_deny.model?$_m$$=global.getModel($rq$$.update_after_deny.model):
93
- $ctrl$$&&($_m$$=$ctrl$$.getProperty("model"));if(!$_m$$)return;await $_m$$.updateOne({_id:$rq$$.id_ct},$rq$$.update_after_deny.data);if($ctrl$$){const $obj$$=await $_m$$.findOne({_id:$rq$$.id_ct});$obj$$&&(onAfterCommit(()=>{$ctrl$$.emit("saved",$obj$$);$ctrl$$.emit("updated",$obj$$)}),await new Promise(($resolve$$,$reject$$)=>{(async()=>{$ctrl$$.postData($obj$$,async $e$jscomp$12_u$$=>{if($e$jscomp$12_u$$)return $reject$$($e$jscomp$12_u$$);if($ctrl$$.handleAfterDenied)try{await $ctrl$$.handleAfterDenied($obj$$,
93
+ $ctrl$$&&($_m$$=$ctrl$$.getProperty("model"));if(!$_m$$)return;await $_m$$.updateOne({_id:$rq$$.id_ct},$rq$$.update_after_deny.data);if($ctrl$$){const $obj$$=await $_m$$.findOne({_id:$rq$$.id_ct}).inTxn();$obj$$&&(onAfterCommit(()=>{$ctrl$$.emit("saved",$obj$$);$ctrl$$.emit("updated",$obj$$)}),await new Promise(($resolve$$,$reject$$)=>{(async()=>{$ctrl$$.postData($obj$$,async $e$jscomp$12_u$$=>{if($e$jscomp$12_u$$)return $reject$$($e$jscomp$12_u$$);if($ctrl$$.handleAfterDenied)try{await $ctrl$$.handleAfterDenied($obj$$,
94
94
  $rq$$)}catch($e$$){return $reject$$($e$$)}$e$jscomp$12_u$$=await global.getModel("user").findOne({email:$user_denied$$});$e$jscomp$12_u$$.current_id_app=$obj$$.id_app;$ctrl$$.onView($e$jscomp$12_u$$,[$obj$$.toObject()],async($channel$jscomp$1_e$$,$message$jscomp$10_rs$$)=>{$channel$jscomp$1_e$$&&Logger.error("[approve][denied][onView]",$channel$jscomp$1_e$$);$channel$jscomp$1_e$$=`${$module_name$$.toLowerCase()}-${"request_denied"}`;$obj$$.id_app&&($channel$jscomp$1_e$$=`${$channel$jscomp$1_e$$}-${$obj$$.id_app}`);
95
95
  $message$jscomp$10_rs$$=JSON.stringify($message$jscomp$10_rs$$[0]);try{await global.clientRedis.publish($channel$jscomp$1_e$$,$message$jscomp$10_rs$$)}catch($e$$){Logger.error("[approve] [sendNotifyDenied] fire event","request_denied",$e$$)}$resolve$$()})},{kiem_tra_han_muc_cong_no:!1})})()}))}}$callback$$(null,$approve$$)});$callback$$(null,$result_reject$$)}catch($e$$){Logger.error("[approve][denied]",$e$$),$callback$$($e$$)}};module.exports=model;
@@ -0,0 +1,2 @@
1
+ const ChatMessageSchema=new mongoose.Schema({id_app:{type:String,required:!0,index:!0},session_id:{type:mongoose.Schema.Types.ObjectId,ref:"chat_session",required:!0,index:!0},role:{type:String,enum:["system","user","assistant","data","tool"],required:!0},content:{type:String},tool_call_id:{type:mongoose.Schema.Types.Mixed},tool_calls:{type:mongoose.Schema.Types.Mixed},messages:{type:mongoose.Schema.Types.Mixed},files:[String],status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},
2
+ date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});module.exports=mongoose.model("chat_message",ChatMessageSchema);
@@ -0,0 +1,2 @@
1
+ const ChatSessionSchema=new mongoose.Schema({id_app:{type:String,required:!0,index:!0},user_id:{type:String,required:!0,index:!0},title:{type:String,default:"\u0110o\u1ea1n chat m\u1edbi"},system_prompt:{type:String},is_active:{type:Boolean,default:!0},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
2
+ ChatSessionSchema.pre("save",function($next$$){this.date_updated=new Date;$next$$()});module.exports=mongoose.model("chat_session",ChatSessionSchema);
@@ -1,4 +1,4 @@
1
- const checkinSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},device_user_id:{type:String,required:!0,maxlength:32,trim:!0},device_user_id2:{type:String,maxlength:32,trim:!0},device_user_id3:{type:String,maxlength:32,trim:!0},record_time:{type:Date,default:Date.now},ma_ct:{type:String,default:"CHECKIN",trim:!0},trang_thai:{type:String,default:"1"},location:Schema.Types.Mixed,hinh:String,ma_kh:String,note:String,device_id:String,exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},
2
- date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
1
+ const checkinSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},device_user_id:{type:String,required:!0,maxlength:1024,trim:!0},device_user_id2:{type:String,maxlength:1024,trim:!0},device_user_id3:{type:String,maxlength:1024,trim:!0},record_time:{type:Date,default:Date.now},ma_ct:{type:String,default:"CHECKIN",trim:!0},trang_thai:{type:String,default:"1"},location:Schema.Types.Mixed,hinh:String,ma_kh:String,note:String,device_id:String,exfields:Schema.Types.Mixed,status:{type:Boolean,
2
+ default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
3
3
  (global.configs||{}).createIndexes&&(checkinSchema.index({id_app:1,device_user_id:1}),checkinSchema.index({id_app:1,device_user_id:1,record_time:-1}),checkinSchema.index({id_app:1,device_user_id:1,location:1}),checkinSchema.index({id_app:1,device_user_id:1,ma_kh:1}),checkinSchema.index({id_app:1,device_user_id2:1}),checkinSchema.index({id_app:1,device_user_id3:1}),checkinSchema.index({id_app:1,status:1}),checkinSchema.index({id_app:1,trang_thai:1}),checkinSchema.index({id_app:1,trang_thai:1,user_created:1,
4
4
  visible_to:1,visible_to_users:1}));const model=mongoose.models.checkin||mongoose.model("checkin",checkinSchema);module.exports=model;
@@ -6,6 +6,7 @@ default:0},ma_kh:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},dien
6
6
  maxlength:32,trim:!0},phu_xe:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},loai_phuong_tien:String,ma_lo:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},han_sd:{type:Date},ma_vt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},gio:Number,ngay:Number,thang:Number,quy:Number,
7
7
  nam:Number,ma_kenh:String,ma_td1:Schema.Types.Mixed,ma_td2:Schema.Types.Mixed,ma_td3:Schema.Types.Mixed,ma_td4:Schema.Types.Mixed,ma_td5:Schema.Types.Mixed,ma_td6:Schema.Types.Mixed,ma_td7:Schema.Types.Mixed,ma_td8:Schema.Types.Mixed,ma_td9:Schema.Types.Mixed,pt_thanh_toan:String,pt_thanh_toan2:String,tien_paymentByPoints:Number,tien_evoucher:Number,cashier:String,ma_sp:{type:String,default:"",uppercase:!0,maxlength:1024,trim:!0},sl_sp:Number,ma_dvt_sp:{type:String,maxlength:32,trim:!0},ma_tt1_sp:{type:String,
8
8
  default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2_sp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3_sp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_cum_chi_tiet:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_cum_chi_tiet:{type:String,default:"",maxlength:1024},ma_cong_doan:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},id_lenhsx:{type:String,maxlength:1024},id_dinhmucsx:{type:String,maxlength:1024},id_lenhcapphat:{type:String,maxlength:1024},
9
- id_cs:{type:String,maxlength:1024},id_cs_ck:{type:String,maxlength:1024},ma_ca:{type:String,uppercase:!0,maxlength:32,trim:!0},trang_thai:{type:String,maxlength:32},id_reason:{type:String,maxlength:1024},luong_goc:Number,luong_theo_ds:Number,ds_yeu_cau:Number,don_gia_luong:Number,ty_le_nv_phu_giup:Number,cong_thuc:String,dien_giai_luong:String,line:Number,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,
10
- default:""},user_updated:{type:String,default:""}},{toJSON:{virtuals:!0}});(global.configs||{}).createIndexes&&(chitietluongdsSchema.index({id_app:1}),chitietluongdsSchema.index({id_app:1,ma_ct:1,so_ct:1,ngay_ct:-1}),chitietluongdsSchema.index({id_app:1,nam:-1,thang:-1,ma_nv:1,ma_bp:1}),chitietluongdsSchema.index({id_app:1,ma_vt:1,ngay_ct:-1}),chitietluongdsSchema.index({id_app:1,ma_kho:1,ma_vt:1,ngay_ct:-1}),chitietluongdsSchema.index({id_app:1,ma_sp:1,ngay_ct:-1}));
11
- const model=mongoose.models.chitietluongds||mongoose.model("chitietluongds",chitietluongdsSchema);if((global.configs||{}).createIndexes)model.on("index",async function($err$$){$err$$?Logger.error("chitietluongds index error",$err$$):console.info("chitietluongds indexing complete")});module.exports=model;
9
+ id_cs:{type:String,maxlength:1024},id_cs_ck:{type:String,maxlength:1024},ma_ca:{type:String,uppercase:!0,maxlength:32,trim:!0},trang_thai:{type:String,maxlength:32},id_reason:{type:String,maxlength:1024},luong_goc:Number,luong_theo_ds:Number,ds_yeu_cau:Number,don_gia_luong:Number,ty_le_nv_phu_giup:Number,cong_thuc:String,dien_giai_luong:String,id_cs_luong:{type:String,maxlength:1024},ten_cs_luong:{type:String},line:Number,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},
10
+ date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}},{toJSON:{virtuals:!0}});
11
+ (global.configs||{}).createIndexes&&(chitietluongdsSchema.index({id_app:1}),chitietluongdsSchema.index({id_app:1,ma_ct:1,so_ct:1,ngay_ct:-1}),chitietluongdsSchema.index({id_app:1,nam:-1,thang:-1,ma_nv:1,ma_bp:1}),chitietluongdsSchema.index({id_app:1,ma_vt:1,ngay_ct:-1}),chitietluongdsSchema.index({id_app:1,ma_kho:1,ma_vt:1,ngay_ct:-1}),chitietluongdsSchema.index({id_app:1,ma_sp:1,ngay_ct:-1}));const model=mongoose.models.chitietluongds||mongoose.model("chitietluongds",chitietluongdsSchema);
12
+ if((global.configs||{}).createIndexes)model.on("index",async function($err$$){$err$$?Logger.error("chitietluongds index error",$err$$):console.info("chitietluongds indexing complete")});module.exports=model;
@@ -15,18 +15,17 @@ user_created:1,visible_to:1,visible_to_users:1}),customerSchema.index({id_app:1,
15
15
  user_created:1,visible_to:1,visible_to_users:1,ma_kh:1,ten_kh:1,dien_thoai:1,email:1,ma_so_thue:1,dia_chi:1}),customerSchema.index({id_app:1,trang_thai:1,of_user:1,phu_trach:1,user_created:1,visible_to:1,visible_to_users:1,ma_kh:1,ten_kh:1,tinh_thanh:1}),customerSchema.index({id_app:1,trang_thai:1,of_user:1,phu_trach:1,user_created:1,visible_to:1,visible_to_users:1,ma_kh:1,ten_kh:1,tinh_thanh:1,quan_huyen:1}),customerSchema.index({id_app:1,trang_thai:1,of_user:1,phu_trach:1,user_created:1,visible_to:1,
16
16
  visible_to_users:1,ma_kh:1,ten_kh:1,tinh_thanh:1,quan_huyen:1,xa_phuong:1,dia_chi:1,dien_thoai:1,email:1,ma_so_thue:1,nh_kh:1}),customerSchema.index({id_app:1,ma_kh:"text",ten_kh:"text",dia_chi:"text",xa_phuong:"text",quan_huyen:"text",tinh_thanh:"text",dien_thoai:"text",email:"text",ma_so_thue:"text",phu_trach:"text"},{name:"customer_index",default_language:"none"}));const model=mongoose.models.customer||mongoose.model("customer",customerSchema);
17
17
  if((global.configs||{}).createIndexes)model.on("index",async function($err$$){$err$$?(Logger.error("Customer index error",$err$$),(await model.aggregate([{$group:{_id:{id_app:"$id_app",ma_kh:"$ma_kh"},count:{$sum:1},ids:{$push:"$_id"}}},{$match:{count:{$gt:1}}}])).forEach($d$$=>{console.info("customer duplication",$d$$._id,$d$$.ids);$d$$.ids.forEach(($id$$,$index$$)=>{$index$$>0&&console.info("you should delete customer",$id$$)})})):console.info("Customer indexing complete")});
18
- model.referenceKeys={ma_kh:[{model:"cdkh",key:"ma_kh",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong b\u1ea3ng c\u00e2n \u0111\u1ed1i kh\u00e1ch h\u00e0ng"},{model:"socai",key:"ma_kh_no",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong s\u1ed5 c\u00e1i"},{model:"socai",key:"ma_kh_co",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u s\u1ed5 c\u00e1i"},{model:"sokho",key:"ma_kh",
19
- error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u s\u1ed5 kho"},{model:"so1",key:"ma_kh",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u \u1edf \u0111\u01a1n \u0111\u1eb7t h\u00e0ng \u0111\u01a1n \u0111\u1eb7t h\u00e0ng"},{model:"pbl",key:"ma_kh",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u \u1edf phi\u1ebfu b\u00e1n l\u1ebb"}]};
18
+ model.referenceKeys={ma_kh:[{model:"cdkh",key:"ma_kh",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong b\u1ea3ng c\u00e2n \u0111\u1ed1i kh\u00e1ch h\u00e0ng"},{model:"socai",key:"ma_kh_no",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong s\u1ed5 c\u00e1i"},{model:"socai",key:"ma_kh_co",error:"Kh\u00e1ch h\u00e0ng ${obj.ten_kh} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u s\u1ed5 c\u00e1i"}]};
20
19
  model.createCustomerCode=function($id_app$$,$ma_kh$$,$lanthu$$,$callback$$){$ma_kh$$=$ma_kh$$.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase();model.findOne({ma_kh:$ma_kh$$,id_app:$id_app$$},function($e$$,$rs$$){if($e$$)return $callback$$($e$$);if($rs$$)$lanthu$$+=1,$ma_kh$$=$ma_kh$$.substring(0,$ma_kh$$.length-$lanthu$$.toString().length)+$lanthu$$.toString(),model.createCustomerCode($id_app$$,$ma_kh$$,$lanthu$$,$callback$$);else return $callback$$(null,$ma_kh$$)})};
21
20
  model.asyncCreateCustomerCode=async($id_app$$,$ma_kh$$,$lanthu$$)=>{$lanthu$$||=0;$ma_kh$$.length>32&&($ma_kh$$=$ma_kh$$.substring(0,32));return new Promise($resolve$$=>{model.createCustomerCode($id_app$$,$ma_kh$$,$lanthu$$,($e$$,$rs$$)=>{$resolve$$($rs$$||"")})})};
22
21
  model.getInfo=async($id_app$$,$condition$$,$fields$$)=>{$condition$$.id_app=$id_app$$;return new Promise(($resolve$$,$reject$$)=>{model.findOne($condition$$).lean().then($rs$$=>{if(!$rs$$)return $reject$$("Can't find customer information");$resolve$$($fields$$?$rs$$[$fields$$]:$rs$$)}).catch($e$$=>{$reject$$($e$$.message)})})};
23
22
  model.getList=async($id_app$$,$condition$$,$field$$)=>{$condition$$.id_app=$id_app$$;return new Promise(($resolve$$,$reject$$)=>{model.find($condition$$).lean().then($rs$$=>{$resolve$$($field$$?$rs$$.map($r$$=>$r$$[$field$$]):$rs$$)}).catch($e$$=>{$reject$$(Error($e$$.message))})})};
24
23
  model.asyncCreateCustomer=async $data$$=>{if($data$$.of_user){var $_cust__cust$$=await model.findOne({id_app:$data$$.id_app,of_user:$data$$.of_user});if($_cust__cust$$)return $_cust__cust$$}$data$$.ma_kh||($data$$.ma_kh=await model.asyncCreateCustomerCode($data$$.id_app,$data$$.ten_kh));return($_cust__cust$$=await model.findOne({id_app:$data$$.id_app,ma_kh:$data$$.ma_kh}))?$_cust__cust$$:new Promise(($resolve$$,$reject$$)=>{$data$$.email&&!validator.isEmail($data$$.email)&&($data$$.email="");model.create($data$$,
25
24
  ($e$$,$rs$$)=>$e$$?$reject$$(Error($e$$.message)):$resolve$$($rs$$))})};model.buyVouchers=["SO1","SO9","HD2","HD1","PBL"];
26
- model.updateActives=async $cust_o_kh$$=>{let $has_changed$$=!1,$_id$$,$kh$$;if($cust_o_kh$$.ma_kh&&$cust_o_kh$$.id_app)($kh$$=await model.findOne({id_app:$cust_o_kh$$.id_app,ma_kh:$cust_o_kh$$.ma_kh},{_id:1,ngay_tuong_tac_gan_nhat:1,ngay_mua_gan_nhat:1,trang_thai:1}))&&($_id$$=$kh$$._id.toString());else{var $link_ngay_tuong_tac_gan_nhat$$=$cust_o_kh$$.id_kh||$cust_o_kh$$.id_link;$link_ngay_tuong_tac_gan_nhat$$&&global.mongoose.Types.ObjectId.isValid($link_ngay_tuong_tac_gan_nhat$$)&&($kh$$=await model.findOne({_id:$link_ngay_tuong_tac_gan_nhat$$},
27
- {_id:1,ngay_tuong_tac_gan_nhat:1,ngay_mua_gan_nhat:1,trang_thai:1}))&&($_id$$=$kh$$._id.toString())}if(!$kh$$)return{};let $ngay_mua_gan_nhat$$,$ngay_mua_dau_tien$$,$trang_thai$$=$kh$$.trang_thai;$link_ngay_tuong_tac_gan_nhat$$=$kh$$.ngay_tuong_tac_gan_nhat;$cust_o_kh$$.date_created&&(!$kh$$.ngay_tuong_tac_gan_nhat||(new Date($kh$$.ngay_tuong_tac_gan_nhat)).getTime()<(new Date($cust_o_kh$$.date_created)).getTime())&&$_id$$!=($cust_o_kh$$._id||"").toString()&&($link_ngay_tuong_tac_gan_nhat$$=$cust_o_kh$$.date_created,
28
- $has_changed$$=!0,$kh$$.trang_thai=="3"&&($trang_thai$$="5"));var $dhdt_dhgn$$=await global.getModel("sokho").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1,so_ct:1,ma_ct:1,ma_vt:1,gia_ban_nt:1}).sort({ngay_ct:1}).lean();$dhdt_dhgn$$||=await global.getModel("sokhonpp").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1,so_ct:1,ma_ct:1,ma_vt:1,gia_ban_nt:1}).sort({ngay_ct:1}).lean();
29
- if($dhdt_dhgn$$)$kh$$.ngay_mua_dau_tien&&(new Date($dhdt_dhgn$$.ngay_ct)).getTime()==(new Date($kh$$.ngay_mua_dau_tien)).getTime()||($has_changed$$=!0,$ngay_mua_dau_tien$$=$dhdt_dhgn$$.ngay_ct),$kh$$.trang_thai==="9"||$kh$$.trang_thai=="1"&&!$kh$$.ngay_mua_gan_nhat||($has_changed$$=!0,$trang_thai$$="1");else if($kh$$.ngay_mua_gan_nhat||$kh$$.ngay_mua_dau_tien)$has_changed$$=!0,$kh$$.ngay_mua_gan_nhat=null,$ngay_mua_dau_tien$$=$ngay_mua_gan_nhat$$=$kh$$.ngay_mua_dau_tien=null,$kh$$.trang_thai=="1"&&
30
- ($trang_thai$$="5");$dhdt_dhgn$$&&(($dhdt_dhgn$$=await global.getModel("sokho").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1}).sort({ngay_ct:-1}).lean())||await global.getModel("sokhonpp").findOne({ma_kh:$cust_o_kh$$.ma_kh,id_app:$cust_o_kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1}).sort({ngay_ct:-1}).lean(),!$dhdt_dhgn$$||$kh$$.ngay_mua_gan_nhat&&(new Date($dhdt_dhgn$$.ngay_ct)).getTime()==(new Date($kh$$.ngay_mua_gan_nhat)).getTime()||
31
- ($has_changed$$=!0,$ngay_mua_gan_nhat$$=$dhdt_dhgn$$.ngay_ct));$has_changed$$&&($ngay_mua_gan_nhat$$=$ngay_mua_gan_nhat$$||$kh$$.ngay_mua_gan_nhat,$ngay_mua_dau_tien$$=$ngay_mua_dau_tien$$||$kh$$.ngay_mua_dau_tien,$link_ngay_tuong_tac_gan_nhat$$=$link_ngay_tuong_tac_gan_nhat$$||$kh$$.ngay_tuong_tac_gan_nhat,Logger.warn("[customer][updateActives]",JSON.stringify({ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$,trang_thai:$trang_thai$$},
32
- null,2)),await model.updateOne({_id:$_id$$},{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$,trang_thai:$trang_thai$$}),$cust_o_kh$$=await model.findById($kh$$._id).lean(),redisCache.set("customer",$cust_o_kh$$));return{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$}};module.exports=model;
25
+ model.updateActives=async $data$$=>{var $has_changed_o_kh$$=!1;let $_id$$,$kh$$;if($data$$.ma_kh&&$data$$.id_app)($kh$$=await model.findOne({id_app:$data$$.id_app,ma_kh:$data$$.ma_kh},{_id:1,ma_kh:1,id_app:1,ngay_tuong_tac_gan_nhat:1,ngay_mua_gan_nhat:1,trang_thai:1}).lean())&&($_id$$=$kh$$._id.toString());else{var $link_ngay_tuong_tac_gan_nhat$$=$data$$.id_kh||$data$$.id_link;$link_ngay_tuong_tac_gan_nhat$$&&global.mongoose.Types.ObjectId.isValid($link_ngay_tuong_tac_gan_nhat$$)&&($kh$$=await model.findOne({_id:$link_ngay_tuong_tac_gan_nhat$$},
26
+ {_id:1,ma_kh:1,id_app:1,ngay_tuong_tac_gan_nhat:1,ngay_mua_gan_nhat:1,trang_thai:1}).lean())&&($_id$$=$kh$$._id.toString())}if(!$kh$$)return{};let $ngay_mua_gan_nhat$$,$ngay_mua_dau_tien$$,$trang_thai$$=$kh$$.trang_thai;$link_ngay_tuong_tac_gan_nhat$$=$kh$$.ngay_tuong_tac_gan_nhat;const $ngay_tuong_tac$$=new Date($data$$.date_created);(!$link_ngay_tuong_tac_gan_nhat$$||$ngay_tuong_tac$$>new Date($link_ngay_tuong_tac_gan_nhat$$))&&$_id$$!=($data$$._id||"").toString()&&($link_ngay_tuong_tac_gan_nhat$$=
27
+ $ngay_tuong_tac$$,$has_changed_o_kh$$=!0,$kh$$.trang_thai=="3"&&($trang_thai$$="5"));($data$$=await global.getModel("sokho").findOne({ma_kh:$kh$$.ma_kh,id_app:$kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1,so_ct:1,ma_ct:1,ma_vt:1,gia_ban_nt:1}).sort({ngay_ct:1}).lean())||($data$$=await global.getModel("sokhonpp").findOne({ma_kh:$kh$$.ma_kh,id_app:$kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1,so_ct:1,ma_ct:1,ma_vt:1,gia_ban_nt:1}).sort({ngay_ct:1}).lean());
28
+ if($data$$)$kh$$.ngay_mua_dau_tien&&(new Date($data$$.ngay_ct)).getTime()==(new Date($kh$$.ngay_mua_dau_tien)).getTime()||($has_changed_o_kh$$=!0,$ngay_mua_dau_tien$$=$data$$.ngay_ct),$kh$$.trang_thai==="9"||$kh$$.trang_thai=="1"&&!$kh$$.ngay_mua_gan_nhat||($has_changed_o_kh$$=!0,$trang_thai$$="1");else if($kh$$.ngay_mua_gan_nhat||$kh$$.ngay_mua_dau_tien)$has_changed_o_kh$$=!0,$kh$$.ngay_mua_gan_nhat=null,$ngay_mua_dau_tien$$=$ngay_mua_gan_nhat$$=$kh$$.ngay_mua_dau_tien=null,$kh$$.trang_thai=="1"&&
29
+ ($trang_thai$$="5");$data$$&&(($data$$=await global.getModel("sokho").findOne({ma_kh:$kh$$.ma_kh,id_app:$kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1}).sort({ngay_ct:-1}).lean())||await global.getModel("sokhonpp").findOne({ma_kh:$kh$$.ma_kh,id_app:$kh$$.id_app,gia_ban_nt:{$gt:0},ma_ct:{$in:model.buyVouchers}},{ngay_ct:1}).sort({ngay_ct:-1}).lean(),!$data$$||$kh$$.ngay_mua_gan_nhat&&(new Date($data$$.ngay_ct)).getTime()==(new Date($kh$$.ngay_mua_gan_nhat)).getTime()||($has_changed_o_kh$$=
30
+ !0,$ngay_mua_gan_nhat$$=$data$$.ngay_ct));$has_changed_o_kh$$&&($ngay_mua_gan_nhat$$=$ngay_mua_gan_nhat$$||$kh$$.ngay_mua_gan_nhat,$ngay_mua_dau_tien$$=$ngay_mua_dau_tien$$||$kh$$.ngay_mua_dau_tien,$link_ngay_tuong_tac_gan_nhat$$=$link_ngay_tuong_tac_gan_nhat$$||$kh$$.ngay_tuong_tac_gan_nhat,Logger.info("[customer][updateActives]",JSON.stringify({ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$,trang_thai:$trang_thai$$},
31
+ null,2)),await model.updateOne({_id:$_id$$},{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$,trang_thai:$trang_thai$$}),$has_changed_o_kh$$=await model.findById($kh$$._id).lean(),redisCache.set("customer",$has_changed_o_kh$$));return{ngay_mua_gan_nhat:$ngay_mua_gan_nhat$$,ngay_mua_dau_tien:$ngay_mua_dau_tien$$,ngay_tuong_tac_gan_nhat:$link_ngay_tuong_tac_gan_nhat$$}};module.exports=model;
@@ -3,5 +3,5 @@ required:!0},sort:{type:Schema.Types.Mixed,required:!0}}),FieldSchema=new Schema
3
3
  default:!0},slider:{type:Boolean,default:!1},marks:{type:Schema.Types.Mixed},gridEdit:{type:Schema.Types.Mixed},gridView:{type:Schema.Types.Mixed},gridFilter:{type:Schema.Types.Mixed},hideInForm:{type:Schema.Types.Mixed,default:!1},hideInList:{type:Schema.Types.Mixed,default:!1},hideInView:{type:Schema.Types.Mixed,default:!1},searchable:{type:Schema.Types.Mixed,default:!0},readOnly:{type:Schema.Types.Mixed,default:!1},options:[OptionSchema],default:{type:Schema.Types.Mixed},actionScript:{type:String},
4
4
  multiple:{type:Boolean,default:!1},api:{type:String},apiFields:{type:String},apiCondition:{type:Schema.Types.Mixed},apiConditionFn:{type:String},apiMapping:apiMappingSchema,canQuickAdd:{type:Boolean,default:!1},quickAddFields:{type:Schema.Types.Mixed},quickAddPrefill:{type:Schema.Types.Mixed},mapTo:[{type:String}],onValueChanged:{type:String,trim:!0},formStep:{type:Number},stepLabel:{type:String}},{_id:!1});FieldSchema.add({subFields:[FieldSchema]});
5
5
  const DataListConfigSchema=new Schema({moduleCode:{type:String,required:!0,unique:!0,index:!0},apiCode:{type:String,required:!0},title:{type:String,required:!0},canAdd:{type:Boolean,default:!0},canEdit:{type:Boolean,default:!0},canDelete:{type:Boolean,default:!0},canCopy:{type:Boolean,default:!0},requireLogin:{type:Boolean,default:!0},defaultViewMode:{type:String,enum:["table","card"],default:"table"},formSize:{type:String,enum:["sm","md","lg","full"],default:"md"},actionBarPosition:{type:String,
6
- enum:["top","bottom"],default:"bottom"},hideHeader:{type:Boolean,default:!1},limit:{type:Number,default:20},gridProps:{type:Schema.Types.Mixed,default:{xs:12,sm:6,md:4,lg:3}},condition:{type:Schema.Types.Mixed},defaultValues:{type:Schema.Types.Mixed},sortOptions:[optionsSchema],quickFilterConfig:quickFilterConfigSchema,customFormScript:{type:String,trim:!0},customListScript:{type:String,trim:!0},customViewScript:{type:String,trim:!0},fields:[FieldSchema],date_created:{type:Date,default:Date.now},
7
- date_updated:{type:Date},user_created:{type:String,default:""},user_updated:{type:String,default:""},status:{type:Boolean,default:!0}});DataListConfigSchema.pre("save",function($next$$){this.date_updated=Date.now();$next$$()});module.exports=mongoose.model("data_list_config",DataListConfigSchema);
6
+ enum:["top","bottom"],default:"bottom"},hideHeader:{type:Boolean,default:!1},limit:{type:Number,default:20},gridProps:{type:Schema.Types.Mixed,default:{xs:12,sm:6,md:4,lg:3}},condition:{type:Schema.Types.Mixed},conditionScript:{type:String},defaultValues:{type:Schema.Types.Mixed},sortOptions:[optionsSchema],quickFilterConfig:quickFilterConfigSchema,customFormScript:{type:String,trim:!0},customListScript:{type:String,trim:!0},customViewScript:{type:String,trim:!0},fields:[FieldSchema],date_created:{type:Date,
7
+ default:Date.now},date_updated:{type:Date},user_created:{type:String,default:""},user_updated:{type:String,default:""},status:{type:Boolean,default:!0}});DataListConfigSchema.pre("save",function($next$$){this.date_updated=Date.now();$next$$()});module.exports=mongoose.model("data_list_config",DataListConfigSchema);
@@ -1,9 +1,8 @@
1
1
  const dmchietkhauSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},stt_uu_tien:{type:Number,default:0},ma_chietkhau:{type:String,uppercase:!0,required:!0,maxlength:32},ten_chietkhau:{type:String,required:!0,maxlength:1024},ma_nhom:String,mieu_ta:{type:String},ma_vt:{type:String,uppercase:!0,default:"",maxlength:1024},ten_vt:String,ma_tt1:String,ma_tt2:String,ma_tt3:String,ma_nvt:{type:String,default:"",ref:"dmnvt",maxlength:32},ten_nvt:String,ma_nvt2:{type:String,maxlength:32},ten_nvt2:String,
2
2
  ma_nvt3:{type:String,maxlength:32},ten_nvt3:String,ma_nvt4:{type:String,maxlength:32},ten_nvt4:String,nh_tt:{type:String,maxlength:32},ten_nh_tt:String,nh_tt2:[],nh_tt3:[],nh_tt4:[],nh_tt5:[],ma_danh_muc:String,ma_kh:{type:String,default:"",maxlength:32},ten_kh:String,nh_kh:{type:String,default:"",maxlength:1024},ten_nh_kh:String,nh_kh2:[],nh_kh3:[],nh_kh4:[],nh_kh5:[],ma_kho:{type:String,default:"",maxlength:32},sl_tu:{type:Number,default:0},sl_den:{type:Number,default:0},t_sl_tu:{type:Number,default:0},
3
3
  t_sl_den:{type:Number,default:0},t_sl_ntt_tu:{type:Number,default:0},t_sl_ntt_den:{type:Number,default:0},t_tien_ntt_tu:{type:Number,default:0},t_tien_ntt_den:{type:Number,default:0},gt_hd_tu:{type:Number,default:0},gt_hd_den:{type:Number,default:0},sl_ap_dung:Number,tong_sl_ap_dung:Number,tien_ck:{type:Number,default:0},ty_le_ck:{type:Number,default:0},hieu_luc_tu:{type:Date,required:!0},hieu_luc_den:{type:Date,required:!0},ap_dung_lan_mua_thu:{type:Number},ap_dung_lan_mua_tu_thu:{type:Number},ap_dung_lan_mua_den_thu:{type:Number},
4
- picture:{type:String},exfields:Schema.Types.Mixed,newsfeed:{type:Boolean,default:!0},id_cs:String,ma_cs:String,online:{type:Boolean},offline:{type:Boolean},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},ma_vt_id:{type:Schema.Types.ObjectId,ref:"dmvt",localField:["ma_vt"],foreignField:["ma_vt"]},ma_kh_id:{type:Schema.Types.ObjectId,ref:"customer",localField:["ma_kh"],
5
- foreignField:["ma_kh"]},ma_kho_id:{type:Schema.Types.ObjectId,ref:"dmkho",localField:["ma_kho"],foreignField:["ma_kho"]}});
4
+ picture:{type:String},exfields:Schema.Types.Mixed,newsfeed:{type:Boolean,default:!0},id_cs:String,ma_cs:String,online:{type:Boolean},offline:{type:Boolean},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
6
5
  (global.configs||{}).createIndexes&&(dmchietkhauSchema.index({id_app:1,ma_nhom:1}),dmchietkhauSchema.index({id_app:1,sl_tu:1,sl_den:1,gt_hd_tu:1,gt_hd_den:1}),dmchietkhauSchema.index({id_app:1,ma_vt:1}),dmchietkhauSchema.index({id_app:1,ma_vt:1,ten_vt:1}),dmchietkhauSchema.index({id_app:1,id_cs:1,ma_cs:1}),dmchietkhauSchema.index({id_app:1,ma_bien_the_tt1:1,gia_tri_bien_the_tt1:1}),dmchietkhauSchema.index({id_app:1,ma_tt1:1}),dmchietkhauSchema.index({id_app:1,ma_tt2:1}),dmchietkhauSchema.index({id_app:1,
7
6
  ma_tt3:1}),dmchietkhauSchema.index({id_app:1,nh_tt:1}),dmchietkhauSchema.index({id_app:1,nh_tt2:1}),dmchietkhauSchema.index({id_app:1,nh_tt3:1}),dmchietkhauSchema.index({id_app:1,nh_tt4:1}),dmchietkhauSchema.index({id_app:1,nh_kh:1}),dmchietkhauSchema.index({id_app:1,nh_kh2:1}),dmchietkhauSchema.index({id_app:1,nh_kh3:1}),dmchietkhauSchema.index({id_app:1,nh_kh4:1}),dmchietkhauSchema.index({id_app:1,nh_kh5:1}),dmchietkhauSchema.index({id_app:1,flashsale:1}),dmchietkhauSchema.index({id_app:1,date_created:-1}),
8
- dmchietkhauSchema.index({id_app:1,user_created:1}),dmchietkhauSchema.index({id_app:1,online:1}),dmchietkhauSchema.index({id_app:1,offline:1}),dmchietkhauSchema.index({id_app:1,ma_vt:1,ma_nvt:1,ma_nvt2:1,ma_nvt3:1,ma_nvt4:1,ma_danh_muc:1,hieu_luc_tu:-1,hieu_luc_den:-1,stt_uu_tien:1,ap_dung_lan_mua_tu_thu:1,ap_dung_lan_mua_den_thu:1}),dmchietkhauSchema.index({mieu_ta:"text",ma_chietkhau:"text",ten_chietkhau:"text",ma_vt:"text",ten_vt:"text",ma_kh:"text",ten_kh:"text",ma_nvt:"text",ten_nvt:"text",nh_kh:"text",
9
- ten_nh_kh:"text"},{name:"dmchietkhau_index_text"}));dmchietkhauSchema.set("toObject",{virtuals:!0});dmchietkhauSchema.set("toJSON",{virtuals:!0});const model=mongoose.models.dmchietkhau||mongoose.model("dmchietkhau",dmchietkhauSchema);module.exports=model;
7
+ dmchietkhauSchema.index({id_app:1,user_created:1}),dmchietkhauSchema.index({id_app:1,online:1}),dmchietkhauSchema.index({id_app:1,offline:1}),dmchietkhauSchema.index({id_app:1,ma_vt:1,ma_nvt:1,ma_nvt2:1,ma_nvt3:1,ma_nvt4:1,ma_danh_muc:1,hieu_luc_tu:-1,hieu_luc_den:-1,stt_uu_tien:1,ap_dung_lan_mua_tu_thu:1,ap_dung_lan_mua_den_thu:1}));dmchietkhauSchema.set("toObject",{virtuals:!0});dmchietkhauSchema.set("toJSON",{virtuals:!0});const model=mongoose.models.dmchietkhau||mongoose.model("dmchietkhau",dmchietkhauSchema);
8
+ module.exports=model;
@@ -1,9 +1,8 @@
1
1
  const dmchietkhauhdSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},stt_uu_tien:{type:Number,default:0},ma_chietkhau:{type:String,uppercase:!0,required:!0,maxlength:32},ten_chietkhau:{type:String,required:!0,maxlength:1024},ma_nhom:String,mieu_ta:{type:String},ma_kh:{type:String,default:"",maxlength:32},ten_kh:String,nh_kh:{type:String,default:"",maxlength:1024},ten_nh_kh:String,nh_kh2:[],nh_kh3:[],nh_kh4:[],nh_kh5:[],ma_kho:{type:String,default:"",maxlength:32},ten_kho:String,gt_tu:{type:Number,
2
2
  default:0},gt_den:{type:Number,default:0},vts:[],sl_toi_thieu:{type:Number,default:0},tien_ck:{type:Number,default:0},ty_le_ck:{type:Number,default:0},so_tien_max:{type:Number,default:0},hieu_luc_tu:{type:Date,required:!0},hieu_luc_den:{type:Date,required:!0},ap_dung_lan_mua_thu:{type:Number},ap_dung_lan_mua_tu_thu:{type:Number},ap_dung_lan_mua_den_thu:{type:Number},details_km:[],picture:{type:String},exfields:Schema.Types.Mixed,newsfeed:{type:Boolean,default:!0},online:{type:Boolean},offline:{type:Boolean},
3
- status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},ma_kh_id:{type:Schema.Types.ObjectId,ref:"customer",localField:["ma_kh"],foreignField:["ma_kh"]},ma_kho_id:{type:Schema.Types.ObjectId,ref:"dmkho",localField:["ma_kho"],foreignField:["ma_kho"]}});
4
- (global.configs||{}).createIndexes&&(dmchietkhauhdSchema.index({id_app:1,ma_chietkhau:1,ma_kho:1,ma_kh:1,hieu_luc_tu:-1,hieu_luc_den:-1}),dmchietkhauhdSchema.index({ma_nhom:1}),dmchietkhauhdSchema.index({ap_dung_lan_mua_thu:1}),dmchietkhauhdSchema.index({ap_dung_lan_mua_tu_thu:1}),dmchietkhauhdSchema.index({ap_dung_lan_mua_den_thu:1}),dmchietkhauhdSchema.index({gt_tu:1}),dmchietkhauhdSchema.index({gt_den:1}),dmchietkhauhdSchema.index({ten_kho:1}),dmchietkhauhdSchema.index({nh_kh:1}),dmchietkhauhdSchema.index({ten_nh_kh:1}),
5
- dmchietkhauhdSchema.index({nh_kh2:1}),dmchietkhauhdSchema.index({nh_kh3:1}),dmchietkhauhdSchema.index({nh_kh4:1}),dmchietkhauhdSchema.index({nh_kh5:1}),dmchietkhauhdSchema.index({date_updated:-1}),dmchietkhauhdSchema.index({date_created:-1}),dmchietkhauhdSchema.index({user_created:1}),dmchietkhauhdSchema.index({online:1}),dmchietkhauhdSchema.index({offline:1}),dmchietkhauhdSchema.index({mieu_ta:"text",ma_chietkhau:"text",ten_chietkhau:"text",ma_kh:"text",ten_kh:"text",nh_kh:"text",ten_nh_kh:"text",
6
- ma_kho:"text",ten_kho:"text"},{name:"dmchietkhauhd_index_text"}),dmchietkhauhdSchema.set("toObject",{virtuals:!0}),dmchietkhauhdSchema.set("toJSON",{virtuals:!0}),dmchietkhauhdSchema.index({status:1}));
3
+ status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
4
+ (global.configs||{}).createIndexes&&(dmchietkhauhdSchema.index({id_app:1,ma_chietkhau:1,ma_kho:1,ma_kh:1,hieu_luc_tu:-1,hieu_luc_den:-1}),dmchietkhauhdSchema.index({id_app:1,ma_nhom:1}),dmchietkhauhdSchema.index({id_app:1,ap_dung_lan_mua_thu:1,ap_dung_lan_mua_tu_thu:1,ap_dung_lan_mua_den_thu:1}),dmchietkhauhdSchema.index({id_app:1,gt_tu:1,gt_den:1}),dmchietkhauhdSchema.index({id_app:1,nh_kh:1,nh_kh2:1,nh_kh3:1,nh_kh4:1,nh_kh5:1}),dmchietkhauhdSchema.index({id_app:1,date_created:-1}),dmchietkhauhdSchema.index({id_app:1,
5
+ user_created:1}),dmchietkhauhdSchema.index({id_app:1,online:1}),dmchietkhauhdSchema.index({id_app:1,offline:1}),dmchietkhauhdSchema.set("toObject",{virtuals:!0}),dmchietkhauhdSchema.set("toJSON",{virtuals:!0}),dmchietkhauhdSchema.index({status:1}));
7
6
  const model=mongoose.models.dmchietkhauhd||mongoose.model("dmchietkhauhd",dmchietkhauhdSchema),moment=require("moment"),calcDefaultDiscount=async($id_app_rs$$,$groups$$)=>{await $groups$$.filter($d$$=>$d$$.ma_nhom&&!$d$$.phuong_phap_ap_dung).asyncJoinModel2($id_app_rs$$,"dmnckkm",{where:{ma_nhom:"_id"},fields:["phuong_phap_ap_dung","nh_me",{stt_uu_tien:"stt"}]});$groups$$.forEach($g$$=>{switch($g$$.phuong_phap_ap_dung){case "TOI_THIEU":$g$$.ck=$g$$.cks.sort(($a$$,$b$$)=>$a$$.tien_ck-$b$$.tien_ck)[0];
8
7
  $g$$.ck.stt_uu_tien=$g$$.stt_uu_tien;break;case "TOI_DA":$g$$.ck=$g$$.cks.sort(($a$$,$b$$)=>$b$$.tien_ck-$a$$.tien_ck)[0];$g$$.ck.stt_uu_tien=$g$$.stt_uu_tien;break;case "CONG":$g$$.ck={ty_le_ck:0,tien_ck:$g$$.cks.map($c$$=>$c$$.tien_ck||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)};$g$$.ck.stt_uu_tien=$g$$.stt_uu_tien;break;default:$g$$.ck=$g$$.cks.sort(($a$$,$b$$)=>($a$$.stt_uu_tien||0)-($b$$.stt_uu_tien||0))[0],$g$$.ck.stt_uu_tien=$g$$.stt_uu_tien}delete $g$$.cks});if($groups$$.length==1)$id_app_rs$$=$groups$$[0].ck;
9
8
  else if($groups$$.find($g$$=>$g$$.nh_me)){$groups$$=$groups$$.map($g$$=>{$g$$.nh_me&&($g$$.ma_nhom=$g$$.nh_me,$g$$.nh_me="",$g$$.phuong_phap_ap_dung="");return $g$$});const $new_groups$$=[...(new Set($groups$$.map($d$$=>$d$$.ma_nhom||"")))].map($ma_nhom$$=>{const $cks$$=$groups$$.filter($d$$=>($d$$.ma_nhom||"")==$ma_nhom$$).map($g$$=>$g$$.ck);return{ma_nhom:$ma_nhom$$,cks:$cks$$}});$id_app_rs$$=await calcDefaultDiscount($id_app_rs$$,$new_groups$$)}else $id_app_rs$$=$groups$$.sort(($a$$,$b$$)=>($a$$.stt_uu_tien||
@@ -1,5 +1,3 @@
1
1
  const dmdiemthuongSchema=new Schema({id_app:{type:String,required:!0},ma:{type:String,uppercase:!0,required:!0,maxlength:32},ten:{type:String,required:!0,maxlength:1024},mieu_ta:{type:String},ma_kh:{type:String,default:"",maxlength:32},ten_kh:String,nh_kh:{type:String,default:"",maxlength:1024},ten_nh_kh:String,ma_vt:{type:String,uppercase:!0,default:"",maxlength:1024},ten_vt:String,ma_nvt:{type:String,default:"",ref:"dmnvt",maxlength:1024},ma_kho:{type:String,default:"",maxlength:32},tien:{type:Number,
2
- default:0},diem:{type:Number,default:0},hieu_luc_tu:{type:Date,required:!0},hieu_luc_den:{type:Date,required:!0},ap_dung_lan_mua_thu:{type:Number},picture:{type:String},exfields:Schema.Types.Mixed,newsfeed:{type:Boolean,default:!0},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},ma_kh_id:{type:Schema.Types.ObjectId,ref:"customer",localField:["ma_kh"],foreignField:["ma_kh"]},
3
- ma_kho_id:{type:Schema.Types.ObjectId,ref:"dmkho",localField:["ma_kho"],foreignField:["ma_kho"]}});
4
- (global.configs||{}).createIndexes&&(dmdiemthuongSchema.index({id_app:1,ma:1,ma_kho:1,ma_vt:1,ma_nvt:1,ma_kh:1,hieu_luc_tu:-1,hieu_luc_den:-1}),dmdiemthuongSchema.index({nh_kh:1}),dmdiemthuongSchema.index({date_updated:-1}),dmdiemthuongSchema.index({date_created:-1}),dmdiemthuongSchema.index({user_created:1}),dmdiemthuongSchema.index({mieu_ta:"text",nh_kh:"text",ten_nh_kh:"text",ma:"text",ten:"text",ma_vt:"text",ten_vt:"text",ma_kh:"text",ten_kh:"text"},{name:"dmdiemthuong_index_text"}),dmdiemthuongSchema.set("toObject",
5
- {virtuals:!0}),dmdiemthuongSchema.set("toJSON",{virtuals:!0}),dmdiemthuongSchema.index({status:1}));const model=mongoose.models.dmdiemthuong||mongoose.model("dmdiemthuong",dmdiemthuongSchema);module.exports=model;
2
+ default:0},diem:{type:Number,default:0},hieu_luc_tu:{type:Date,required:!0},hieu_luc_den:{type:Date,required:!0},ap_dung_lan_mua_thu:{type:Number},picture:{type:String},exfields:Schema.Types.Mixed,newsfeed:{type:Boolean,default:!0},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
3
+ (global.configs||{}).createIndexes&&(dmdiemthuongSchema.index({id_app:1,ma:1,ma_kho:1,ma_vt:1,ma_nvt:1,ma_kh:1,hieu_luc_tu:-1,hieu_luc_den:-1}),dmdiemthuongSchema.index({id_app:1,nh_kh:1}),dmdiemthuongSchema.index({id_app:1,date_created:-1}),dmdiemthuongSchema.set("toObject",{virtuals:!0}),dmdiemthuongSchema.set("toJSON",{virtuals:!0}),dmdiemthuongSchema.index({status:1}));const model=mongoose.models.dmdiemthuong||mongoose.model("dmdiemthuong",dmdiemthuongSchema);module.exports=model;