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.
- package/package.json +11 -3
- package/server/app.js +11 -10
- package/server/auths/local.js +6 -6
- package/server/cluster.js +11 -12
- package/server/controllers/controller.js +14 -3
- package/server/controllers/controllerRPT.js +4 -4
- package/server/controllers/controllerUtils.js +12 -12
- package/server/controllers/createHandler.js +20 -21
- package/server/controllers/deleteHandler.js +3 -3
- package/server/controllers/findHandler.js +49 -48
- package/server/controllers/updateHandler.js +25 -26
- package/server/controllers/viewHandler.js +14 -14
- package/server/flow/handlers.js +2 -2
- package/server/flow/nodes/aiAnalysis.js +7 -7
- package/server/flow/nodes/checkAction.js +7 -0
- package/server/flow/nodes/email.js +7 -8
- package/server/flow/utils.js +58 -1
- package/server/global.js +1 -1
- package/server/libs/WorkerStaticPool.js +19 -18
- package/server/libs/cdpskh.js +3 -2
- package/server/libs/cdpstk.js +11 -11
- package/server/libs/cktk.js +3 -3
- package/server/libs/ckvt.js +10 -10
- package/server/libs/ckvtnpp.js +6 -5
- package/server/libs/ckvttt.js +5 -5
- package/server/libs/ctvt.js +6 -6
- package/server/libs/dkcn.js +1 -1
- package/server/libs/dktk.js +4 -3
- package/server/libs/docs.js +31 -25
- package/server/libs/dtbanletheosp.js +4 -1
- package/server/libs/email.js +2 -2
- package/server/libs/executiveDashboard.js +8 -0
- package/server/libs/getGiaban.js +2 -2
- package/server/libs/kpistatus.js +38 -36
- package/server/libs/kqchamcong.js +12 -0
- package/server/libs/kqhdkd.js +8 -0
- package/server/libs/post-book.js +4 -3
- package/server/libs/post-socai.js +2 -2
- package/server/libs/post-sokho.js +5 -5
- package/server/libs/redis-cache.js +0 -0
- package/server/libs/sctcnkh.js +18 -0
- package/server/libs/sessionContext.js +6 -11
- package/server/libs/socaitk.js +9 -0
- package/server/libs/thnxt.js +2 -1
- package/server/libs/tinhgiatb.js +4 -4
- package/server/libs/tuoinophaithu.js +11 -10
- package/server/libs/tuoinophaitra.js +12 -10
- package/server/libs/utils.js +8 -4
- package/server/libs/vectorService.js +12 -8
- package/server/models/actionLog.js +2 -0
- package/server/models/aimemory.js +1 -0
- package/server/models/app.js +3 -2
- package/server/models/approve.js +4 -4
- package/server/models/chat_message.js +2 -0
- package/server/models/chat_session.js +2 -0
- package/server/models/checkin.js +2 -2
- package/server/models/chitietluongds.js +4 -3
- package/server/models/customer.js +8 -9
- package/server/models/data_list_config.js +2 -2
- package/server/models/dmchietkhau.js +3 -4
- package/server/models/dmchietkhauhd.js +3 -4
- package/server/models/dmdiemthuong.js +2 -4
- package/server/models/dmhoahonghd.js +2 -3
- package/server/models/dmhoahongnpp.js +2 -3
- package/server/models/dmletet.js +2 -2
- package/server/models/dmphatdichvu.js +1 -2
- package/server/models/filechunk.js +2 -2
- package/server/models/hd2.js +9 -11
- package/server/models/hd3.js +10 -11
- package/server/models/listinfo.js +3 -1
- package/server/models/pc0.js +4 -4
- package/server/models/pn1.js +9 -11
- package/server/models/pn2.js +3 -3
- package/server/models/pnc.js +9 -10
- package/server/models/pnh.js +5 -6
- package/server/models/pnk.js +7 -7
- package/server/models/pxc.js +9 -10
- package/server/models/pxh.js +6 -7
- package/server/models/pxk.js +7 -8
- package/server/models/schedule.js +17 -16
- package/server/models/sokho.js +10 -11
- package/server/models/step.js +1 -1
- package/server/modules/lists/bg-cdvt.js +1 -1
- package/server/modules/lists/bg-cdvtnpp.js +1 -1
- package/server/modules/lists/ls-chat_session.js +5 -0
- package/server/modules/lists/ls-checkin.js +11 -12
- package/server/modules/lists/ls-chitietluongds.js +2 -2
- package/server/modules/lists/ls-customer.js +20 -20
- package/server/modules/lists/ls-dmnv.js +12 -11
- package/server/modules/lists/ls-file.js +5 -5
- package/server/modules/lists/ls-mailsent.js +3 -3
- package/server/modules/lists/ls-warranty.js +3 -4
- package/server/modules/reports/calc-tinhluong.js +42 -40
- package/server/modules/reports/rp-dtbanlekempk.js +1 -1
- package/server/modules/reports/rp-dtbanletheoctkempk.js +13 -13
- package/server/modules/reports/rp-kgchamcong.js +1 -12
- package/server/modules/reports/rp-kqhdkd.js +1 -7
- package/server/modules/reports/rp-phanbochitienchohoadon.js +1 -1
- package/server/modules/reports/rp-ptcttct.js +2 -2
- package/server/modules/reports/rp-sctcnkh.js +4 -19
- package/server/modules/reports/rp-socaitk.js +1 -8
- package/server/modules/systems/sys-app.js +20 -19
- package/server/modules/vouchers/vo-hd2.js +71 -85
- package/server/modules/vouchers/vo-hd3.js +15 -21
- package/server/modules/vouchers/vo-pbl.js +48 -48
- package/server/modules/vouchers/vo-pc1.js +11 -11
- package/server/modules/vouchers/vo-pc2.js +13 -12
- package/server/modules/vouchers/vo-pgh.js +12 -15
- package/server/modules/vouchers/vo-pn1.js +27 -33
- package/server/modules/vouchers/vo-pnc.js +14 -15
- package/server/modules/vouchers/vo-pnh.js +12 -15
- package/server/modules/vouchers/vo-pnk.js +11 -15
- package/server/modules/vouchers/vo-po1.js +0 -0
- package/server/modules/vouchers/vo-pxc.js +24 -22
- package/server/modules/vouchers/vo-pxh.js +13 -22
- package/server/modules/vouchers/vo-pxk.js +11 -16
- package/server/route.js +32 -32
- package/server/workers/inputWorker.js +8 -8
- package/server/workers/reportWorker.js +3 -4
- package/server/workers/sendEmail.js +11 -11
- package/server/workers/worker-utils.js +3 -1
- package/server/actions/mailtemplate.js +0 -142
- package/server/actions/schedule.js +0 -23
- package/server/libs/schedule.js +0 -18
- package/server/models/bds_area.js +0 -4
- package/server/models/bds_block.js +0 -3
- package/server/models/bds_building.js +0 -4
- package/server/models/bds_floor.js +0 -3
- package/server/models/bds_floordetail.js +0 -9
- package/server/models/bds_nhadat.js +0 -13
- package/server/models/bds_nhadat_moigioi_ban.js +0 -3
- package/server/models/bds_nhomnhadat.js +0 -4
- package/server/models/bds_phanloainhadat.js +0 -3
- package/server/models/campaign.js +0 -6
- package/server/models/form.js +0 -3
- package/server/models/formvalue.js +0 -3
- package/server/models/hlink.js +0 -2
- package/server/models/hlinkvalue.js +0 -2
- package/server/models/kbm_bcdkt.js +0 -4
- package/server/models/kbm_kqhdkd.js +0 -3
- package/server/models/kbm_lcttgt.js +0 -5
- package/server/models/kbm_lctttt.js +0 -4
- package/server/models/kbm_pttct.js +0 -4
- package/server/models/kbm_tkgtgt.js +0 -5
- package/server/models/mailschedule.js +0 -2
- package/server/models/waitevent.js +0 -2
- package/server/modules/lists/ls-bds_area.js +0 -3
- package/server/modules/lists/ls-bds_block.js +0 -1
- package/server/modules/lists/ls-bds_building.js +0 -3
- package/server/modules/lists/ls-bds_dmnhbds.js +0 -6
- package/server/modules/lists/ls-bds_floor.js +0 -2
- package/server/modules/lists/ls-bds_floordetail.js +0 -19
- package/server/modules/lists/ls-bds_nhadat.js +0 -19
- package/server/modules/lists/ls-bds_nhadat_moigioi_ban.js +0 -9
- package/server/modules/lists/ls-bds_nhomnhadat.js +0 -1
- package/server/modules/lists/ls-bds_phanloainhadat.js +0 -1
- package/server/modules/lists/ls-campaign.js +0 -1
- package/server/modules/lists/ls-dmnhnd.js +0 -1
- package/server/modules/lists/ls-formvalue.js +0 -1
- package/server/modules/lists/ls-hlink.js +0 -1
- package/server/modules/lists/ls-hlinkvalue.js +0 -1
- package/server/modules/lists/ls-mailschedule.js +0 -7
- package/server/modules/lists/ls-waitevent.js +0 -1
- package/server/modules/public/form.js +0 -7
- 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.
|
|
7
|
-
|
|
8
|
-
$
|
|
9
|
-
$
|
|
10
|
-
|
|
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$$)})})};
|
package/server/libs/thnxt.js
CHANGED
|
@@ -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||"")});
|
|
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$$;}};
|
package/server/libs/tinhgiatb.js
CHANGED
|
@@ -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$$,$
|
|
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
|
|
30
|
-
$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,
|
|
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$$=
|
|
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$$=
|
|
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$$})
|
|
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
|
|
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
|
|
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})
|
|
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<=
|
|
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$$)})})}
|
|
10
|
-
$report$$.filter($r$$=>$r$$.tien_hd_nt>0)
|
|
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
|
|
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&&
|
|
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&&
|
|
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
|
|
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,
|
|
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=
|
|
7
|
-
|
|
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<=
|
|
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>
|
|
10
|
-
($report$$=$report$$.filter($r$$=>$r$$.tuoi_no>=$condition$$.
|
|
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$$)})};
|
package/server/libs/utils.js
CHANGED
|
@@ -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
|
|
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";
|
|
89
|
-
exports.
|
|
90
|
-
|
|
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"),
|
|
2
|
-
|
|
3
|
-
|
|
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
|
|
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$$})});
|
|
10
|
-
$error$$.message)}}
|
|
11
|
-
|
|
12
|
-
|
|
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);
|
package/server/models/app.js
CHANGED
|
@@ -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,
|
|
9
|
-
default:""}
|
|
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$$)})})};
|
package/server/models/approve.js
CHANGED
|
@@ -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..."
|
|
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);
|
package/server/models/checkin.js
CHANGED
|
@@ -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:
|
|
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},
|
|
10
|
-
default:""},user_updated:{type:String,default:""}},{toJSON:{virtuals:!0}});
|
|
11
|
-
|
|
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"}
|
|
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 $
|
|
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
|
|
28
|
-
$
|
|
29
|
-
if($
|
|
30
|
-
($trang_thai$$="5");$
|
|
31
|
-
|
|
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$$}),$
|
|
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,
|
|
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:""}
|
|
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})
|
|
9
|
-
|
|
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:""}
|
|
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
|
|
5
|
-
|
|
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:""}
|
|
3
|
-
|
|
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;
|