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,5 +1,5 @@
|
|
|
1
1
|
const fs=require("fs"),path=require("path"),async=require("async"),_=require("lodash"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),numeral=require("numeral"),excelReport=require("excel-report"),{evalute,JSONParser,getDateRangeByType}=require("../libs/utils"),permission=require("../libs/permission"),htmlReport=require("../libs/htmlReport"),utils=require("../libs/utils"),queryBuilding=require("../libs/queryBuilding"),{createTmpFile,generateDefaultExcel}=
|
|
2
|
-
require("../libs/excelHelper"),{ERRORS}=require("./controllerUtils"),FIELDS_NEED_CONVERT_CODE={ten_kh:{code:"ma_kh",model:"customer"},ten_vt:{code:"ma_vt",model:"dmvt"},ten_nv:{code:"ma_nv",model:"dmnv"}};
|
|
2
|
+
require("../libs/excelHelper"),{ERRORS}=require("./controllerUtils"),FIELDS_NEED_CONVERT_CODE={ten_kh:{code:"ma_kh",model:"customer"},ten_vt:{code:"ma_vt",model:"dmvt"},ten_kho:{code:"ma_kho",model:"dmkho"},ten_phi:{code:"ma_phi",model:"dmphi"},ten_dt:{code:"ma_dt",model:"dmdt"},ten_bp:{code:"ma_bp",model:"dmbp"},ten_nv:{code:"ma_nv",model:"dmnv"}};
|
|
3
3
|
async function convertNamesToCodes($id_app$$,$condition$$,$FIELDS_NEED_CONVERT_CODE$$,$model$$){if(!$condition$$||typeof $condition$$!=="object")return $condition$$;if(Array.isArray($condition$$)){for(var $i_key_q$$=0;$i_key_q$$<$condition$$.length;$i_key_q$$++)$condition$$[$i_key_q$$]=await convertNamesToCodes($id_app$$,$condition$$[$i_key_q$$],$FIELDS_NEED_CONVERT_CODE$$,$model$$);return $condition$$}for($i_key_q$$ in $condition$$)if($i_key_q$$==="$or"||$i_key_q$$==="$and")$condition$$[$i_key_q$$]=
|
|
4
4
|
await convertNamesToCodes($id_app$$,$condition$$[$i_key_q$$],$FIELDS_NEED_CONVERT_CODE$$,$model$$);else{var $ds_fieldMapping$$=$FIELDS_NEED_CONVERT_CODE$$[$i_key_q$$];if($ds_fieldMapping$$){const $targetCodeField$$=$ds_fieldMapping$$.code;$id_app$$&&_.has($model$$.schema.paths,$targetCodeField$$)&&$model$$.modelName!==$ds_fieldMapping$$.model&&($condition$$[$targetCodeField$$]?_.has($model$$.schema.paths,$i_key_q$$)&&delete $condition$$[$i_key_q$$]:($ds_fieldMapping$$=await global.getModel($ds_fieldMapping$$.model).find({id_app:$id_app$$,
|
|
5
5
|
[$i_key_q$$]:$condition$$[$i_key_q$$]},{[$targetCodeField$$]:1}),$condition$$[$targetCodeField$$]={$in:$ds_fieldMapping$$.map($d$$=>$d$$[$targetCodeField$$])},delete $condition$$[$i_key_q$$]))}}return $condition$$}
|
|
@@ -7,53 +7,54 @@ const hasRight=async($ctrl$$,$req$$,$listinfo_code$$,$id_app$$,$shareRoute$$)=>{
|
|
|
7
7
|
$e$$=>{if($e$$)return $reject$$({error:$e$$.error||$e$$.message||$e$$});if(!$permission$$)return $resolve$$("0");$resolve$$($permission$$)});else{if(!$permission$$)return $resolve$$("0");$resolve$$($permission$$)}},{notNeedRight:$notNeedRight$$,right_code:$listinfo_code$$})})})},handleDynamicCondition=async($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$)=>{let {condition:$condition$$,id_app:$id_app$$}=$appCondition$$,$userInfo$$={...$req$$.user,current_id_app:$id_app$$};!$id_app$$||$userInfo$$.current_app_info&&
|
|
8
8
|
$userInfo$$.current_app_info?._id?.toString()==$id_app$$||($userInfo$$.current_app_info=await global.getModel("app").findOne({_id:$id_app$$}).lean());$appCondition$$.userInfo=$userInfo$$;let $new_condition$$=await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.finding?$ctrl$$.finding($userInfo$$,$condition$$,function($error$$,$condition$$){if($error$$)return $reject$$({error:$error$$.message||$error$$.error||$error$$});$ctrl$$.dynamicFinding?$ctrl$$.dynamicFinding($userInfo$$,$condition$$,function($e$$,
|
|
9
9
|
$condition$$){if($e$$)return Logger.error("dynamicFinding",$e$$),$e$$.error?$reject$$($e$$):$reject$$({error:$e$$.message||$e$$});$resolve$$($condition$$)},{listinfo_code:$listinfo_code$$,req:$req$$}):$resolve$$($condition$$)},{req:$req$$}):$ctrl$$.dynamicFinding?$ctrl$$.dynamicFinding($userInfo$$,$condition$$,function($e$$,$condition$$){if($e$$)return Logger.error("dynamicFinding",$e$$),$e$$.error?$reject$$($e$$):$reject$$({error:$e$$.message||$e$$});$resolve$$($condition$$)},{listinfo_code:$listinfo_code$$,
|
|
10
|
-
req:$req$$}):$resolve$$($condition$$)});$appCondition$$.condition=$new_condition$$;return $appCondition$$},buildCondition=async($ctrl$$,$req$$,$listinfo_code$$,$appConditions_shareRoute$$)=>{var $body_ds_id_app$$={};_.isObject($req$$.body)&&($body_ds_id_app$$=$req$$.body);let $query$$={...$req$$.query,...$body_ds_id_app$$}
|
|
11
|
-
JSONParser($query$$.sort)}catch($e$$){throw Logger.error("error parse json",$e$$,$query$$.sort),`Sort ${$query$$.sort} is not valid`;}!$or_sort$$&&$ctrl$$.sort&&($or_sort$$=Object.assign({},$ctrl$$.sort));$req$$.sort=$or_sort$$;$req$$.fetch_by_groups=$query$$.fetch_by_groups;delete $query$$.fetch_by_groups;let $condition$$={};$or_sort$$=[];const $hasCodeByName$$=$k$$=>FIELDS_NEED_CONVERT_CODE[$k$$]&&_.has($ctrl$$.model.schema.paths,FIELDS_NEED_CONVERT_CODE[$k$$].code)
|
|
12
|
-
|
|
13
|
-
$body_ds_id_app$$=$q$$.id_apps||$body_ds_id_app$$;$all_app$$=$q$$.all_app||$all_app$$;delete $q$$.all_app;delete $q$$.id_apps;if(Object.keys($q$$).includes("_id"))if(!$q$$._id)delete $q$$._id;else if(typeof $q$$._id!=="object"&&!global.mongoose.Types.ObjectId.isValid($q$$._id))throw Logger.error("Condition is not valid",$q$$),"Condition is not valid";for(let $
|
|
14
|
-
getDateRangeByType($q$$[$
|
|
15
|
-
Number($query$$[$
|
|
16
|
-
0&&($query$$.cType==="$and"?$condition$$.$and=$or_sort$$:$condition$$.$or=$or_sort$$);$
|
|
17
|
-
0&&($all_app$$?(Logger.warn("[findHanlder] t\u00ecm t\u1ea5t c\u1ea3 c\u00e1c c\u00f4ng ty c\u00f3 quy\u1ec1n..."),$body_ds_id_app$$=(await global.getModel("participant").find({email:$req$$.user.email},{id_app:1}).lean()).map($a$$=>$a$$.id_app)):$body_ds_id_app$$=[$req$$.user.current_id_app]),$appConditions_shareRoute
|
|
18
|
-
$req$$,$listinfo_code$$,$appCondition$$)))},getRightByItem=async($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$,$shareRoute$$)=>$shareRoute$$?$appCondition$$:new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,{action:"view"});permission.getRightByItem($appCondition$$.id_app
|
|
19
|
-
$e$$),$reject$$({error:$e$$.error||$e$$.message||$e$$,code:$e$$.code||ERRORS.ERR_NOT_PERMIT_CODE});if($appCondition$$.addmin=$admin$$)return $resolve$$($appCondition$$);$appCondition$$.condition||($appCondition$$.condition={});$appCondition$$.condition.$and||($appCondition$$.condition.$and=[]);if($ctrl$$.options.onRightByItem)$ctrl$$.options.onRightByItem($req$$.user
|
|
20
|
-
0&&$appCondition$$.condition.$and.push($_condition$$);$appCondition$$.condition_assign=$_condition$$;$resolve$$($appCondition$$)});else _.isObject($_condition$$)&&Object.keys($_condition$$).length>0&&$appCondition$$.condition.$and.push($_condition$$),$resolve$$($appCondition$$)},$ctrl$$.name,{notNeedRight:$notNeedRight$$,right_code:$listinfo_code$$})})}),
|
|
21
|
-
Object.keys($appCondition$$.condition_assign).length===0?$appCondition$$:new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{if($ctrl$$.options.assignWiths){let $condition_assignwiths$$={};async.map($ctrl$$.options.assignWiths,($col$$,$callback$$)=>{let $m$$=global.getModel($col$$.ref_collection);permission.getRightByItem($appCondition$$.id_app
|
|
22
|
-
if($admin$$)return $callback$$(null);$_condition$$.id_app=$appCondition$$.id_app;$appCondition$$.condition[$col$$.ref_field]&&($_condition$$[$col$$.ref_field]=$appCondition$$.condition[$col$$.ref_field]);$m$$.find($_condition$$,{[$col$$.ref_field]:1}).lean().then($dsdt_rs$$=>{$dsdt_rs$$=$dsdt_rs$$.map($r$$=>$r$$[$col$$.ref_field]);$dsdt_rs$$.push("")
|
|
23
|
-
$condition$jscomp$6_e$$=>{if($condition$jscomp$6_e$$)return $reject$$({error:$condition$jscomp$6_e$$.error||$condition$jscomp$6_e$$.message||$condition$jscomp$6_e$$});Object.keys($condition_assignwiths$$).length>0&&($condition$jscomp$6_e$$=$appCondition$$.condition_assign||$appCondition$$.condition,$condition$jscomp$6_e$$.$and||($condition$jscomp$6_e$$.$and=
|
|
24
|
-
findHanlder=async($ctrl$$,$req$$,$callback$$)=>{let $model$$=$ctrl$$.model,$shareRoute$$=$req$$.shareRoute,$listinfo_code$$=$req$$?.body?.["listinfo-code"]||$req$$?.query["listinfo-code"]||$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"];if(($listinfo_code$$=$listinfo_code$$||$ctrl$$.name)&&$listinfo_code
|
|
25
|
-
$ctrl$$.name&&($listinfo_code$$=$ctrl$$.name):$listinfo_code$$=$ctrl$$.name}let $appConditions$$;try{$appConditions$$=await buildCondition($ctrl$$,$req$$,$listinfo_code$$,$shareRoute$$);for(let $appCondition$$ of $appConditions$$){await hasRight($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$.id_app,$shareRoute$$)=="0"&&
|
|
26
|
-
$shareRoute$$);({condition:$condition$$}=$appCondition$$);for(let $key_q$$ in $condition$$)if($key_q$$==="_id"||$key_q$$.startsWith("$")||$key_q$$.includes(".")||_.has($model$$.schema.paths,$key_q$$)||delete $condition$$[$key_q$$],$key_q$$=="$and"){for(let $dk$$ of $condition$$.$and)for(let $key_q$$ in $dk$$)$key_q$$===
|
|
27
|
-
0)}$appCondition$$.id_app&&($condition$$=await convertNamesToCodes($appCondition$$.id_app,$condition$$,FIELDS_NEED_CONVERT_CODE,$model$$),$appCondition$$.condition=$condition$$);if($shareRoute$$){$condition$$.shared=!0;let $id_sellers$$=(await global.getModel("app").find({sale_online:!0},{_id:1}).lean()).map($a
|
|
28
|
-
"id_app")&&$ctrl$$.require_id_app!==!1&&($condition$$.id_app=$appCondition$$.id_app);$req$$.user.email==="public"&&_.has($model$$.schema.paths,"session_created")&&($condition$$.session_created=($req$$.cookies||{}).uid);_.extend($condition$$,$ctrl$$.keyValues);utils.deleteEmptyObject($condition$$);
|
|
29
|
-
$req$$.fetch_by_groups.field&&($condition_group$$=$req$$.fetch_by_groups.condition||{},$condition_group$$.status=!0,$condition_group$$.id_app=$appCondition$$.id_app,$condition$$[$req$$.fetch_by_groups.field]&&($condition_group$$[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]
|
|
30
|
-
$ctrl$$.name)}catch($e$$){$field_not_right$$=[]}$appCondition$$.field_not_right=$field_not_right$$}}catch($e$$){return $callback$$($e$$)}async.series([function($callback$$){setImmediate(async()=>{var $condition_group$$=$appConditions$$.filter($a$$=>Object.keys($a$$.condition).length>
|
|
31
|
-
$a$$.condition_group).map($a$$=>$a$$.condition_group)};if($req$$.query.count){var $fields_fields$jscomp$1_groups_number_notfields_rows_number$$=0;$condition_group$$.$or.length>0&&($fields_fields$jscomp$1_groups_number_notfields_rows_number$$=await global.getModel($req$$.fetch_by_groups.model_group).countDocuments($condition_group$$))
|
|
32
|
-
return $callback$$("0")}$req$$.query.pagination&&($fields_fields$jscomp$1_groups_number_notfields_rows_number$$=await $model$$.countDocuments($condition$$),$req$$.pagination={total:$fields_fields$jscomp$1_groups_number_notfields_rows_number$$});let $field_not_right$$=[...(new Set($appConditions$$.map($a$$=>$a$$.field_not_right).reduce(($a
|
|
33
|
-
(_.isArray($fields_fields$jscomp$1_groups_number_notfields_rows_number$$)?$fields_fields$jscomp$1_groups_number_notfields_rows_number$$.forEach($f$$=>{$f$$!=="_id"&&($gfields$$[$f$$]=1)}):_.isObject($fields_fields$jscomp$1_groups_number_notfields_rows_number$$)
|
|
34
|
-
"_id"&&($gfields$$[$f$$]=1)}));$field_not_right$$.forEach($f$$=>{Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)?delete $gfields$$[$f$$]:$gfields$$[$f$$]=0});!$fields_fields$jscomp$1_groups_number_notfields_rows_number$$&&
|
|
35
|
-
$
|
|
36
|
-
$gfields$$[$k$$]==1)?(delete $gfields$$.dataview_to,delete $gfields$$.dataview_to_users):($gfields$$.dataview_to=0,$gfields$$.dataview_to_users=0));$condition$$.$text&&($gfields$$||={},$gfields$$.textScore={$meta:"textScore"});
|
|
37
|
-
$limit$$,$page$$,$callback$$)=>{setImmediate(async()=>{let $query$$;if($req$$.query.group||$req$$.query.project||$req$$.query.match||$req$$.query.aggregate||$req$$.query.$aggregate)try{if($req$$.query.aggregate){var $aggregate_piples_sort$$=
|
|
38
|
-
$aggregate_piples_sort$$=[{$match:$condition$$},...$aggregate_piples_sort$$];$query$$=$model$$.aggregate($aggregate_piples_sort$$)}else{$query$$=$model$$.aggregate([{$match:$condition$$}]);
|
|
39
|
-
Object.keys($gfields$$).length>0)$project$$=$gfields$$;else if($project$$={_id:1},$group$$)for(let $key$$ in $group$$)$project$$[$key$$]=1;$query$$.project($project$$)}}catch($e$$){return Logger.error("[findHanlder]"
|
|
40
|
-
$req$$.sort;if(!$aggregate_piples_sort$$)$gfields$$.textScore&&($aggregate_piples_sort$$={textScore:{$meta:"textScore"}});else for(var $key$$ in $aggregate_piples_sort$$)if($key$$!=="textScore"&&$aggregate_piples_sort$$[$key$$]!=
|
|
41
|
-
0&&$query$$.sort($aggregate_piples_sort$$);if($req$$.pagination||$req$$.query.type_data!=="xlsx"&&$req$$.query.type_data!=="json_file"&&$req$$.query.type_data!=="json_export"&&$req$$.query.rpt!="1")$page
|
|
42
|
-
$req$$.query.explainQuery!="executionStats"&&($req$$.query.explainQuery="queryPlanner");try{const $filter$$=$query$$.getFilter(),$projection$$=$query$$.getOptions().projection||{},$skip$$=$query$$.getOptions().skip||
|
|
43
|
-
|
|
44
|
-
_id:""}])}catch($e$$){$callback$$($e$$)}}else $query$$.lean().then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})})};let $data_log$$=$req$$.query;delete $data_log$$.access_token
|
|
45
|
-
id_func:$ctrl$$.name,action:"QUERY",data:{condition:JSON.stringify($data_log$$)}},$req$$.user.email,$req$$.user_agent,$req$$)});let $page_fetch$$=
|
|
46
|
-
$ctrl$$.name!=="labelinfo"?20:500,$limit$$&&$limit$$>500&&!$req$$.query.print&&$ctrl$$.require_id_app!==!1&&$ctrl$$.name!=="right"&&$ctrl$$.name!==
|
|
47
|
-
$
|
|
48
|
-
$req$$.fetch_by_groups.
|
|
49
|
-
$
|
|
50
|
-
$
|
|
51
|
-
$callback$$(null
|
|
52
|
-
$
|
|
53
|
-
|
|
54
|
-
(configs.paths||{}).templates;let $excelTemplate$$;if($downloadUrl_template_id$$=$req$$.query.id_template){if(!global.mongoose.Types.ObjectId.isValid($downloadUrl_template_id$$))return $callback$$({error:"ID m\u1eabu file xu\u1ea5t kh\u00f4ng h\u1ee3p l\u1ec7"})
|
|
55
|
-
$app_dir_root_template_fileName$$?`${path.dirname($app_dir_root_template_fileName$$)}${$excelTemplate$$.file}`:`${path.dirname(__dirname)}${$excelTemplate$$.file}`}else $app_dir_root_template_fileName$$&&($_groupBy_template$jscomp$1_template
|
|
56
|
-
if(!fs.existsSync($_groupBy_template$jscomp$1_template$$))return $callback$$({error:"File m\u1eabu excel ch\u01b0a \u0111\u01b0\u1ee3c khai b\u00e1o t\u1ea1i '"+$_groupBy_template$jscomp$1_template$$+"'"});$app_dir_root_template_fileName$$=
|
|
10
|
+
req:$req$$}):$resolve$$($condition$$)});$appCondition$$.condition=$new_condition$$;return $appCondition$$},buildCondition=async($ctrl$$,$req$$,$listinfo_code$$,$appConditions_shareRoute$$)=>{var $body_ds_id_app$$={};_.isObject($req$$.body)&&($body_ds_id_app$$=$req$$.body);let $query$$={...$req$$.query,...$body_ds_id_app$$};($body_ds_id_app$$=$query$$.id_apps)&&typeof $body_ds_id_app$$=="string"&&($body_ds_id_app$$=[$body_ds_id_app$$]);let $all_app$$=$query$$.all_app;$req$$.query=$query$$;if($query$$.sort)if(typeof $query$$.sort==
|
|
11
|
+
"object")var $or_sort$$=$query$$.sort;else try{$or_sort$$=JSONParser($query$$.sort)}catch($e$$){throw Logger.error("error parse json",$e$$,$query$$.sort),`Sort ${$query$$.sort} is not valid`;}!$or_sort$$&&$ctrl$$.sort&&($or_sort$$=Object.assign({},$ctrl$$.sort));$req$$.sort=$or_sort$$;$req$$.fetch_by_groups=$query$$.fetch_by_groups;delete $query$$.fetch_by_groups;let $condition$$={};$or_sort$$=[];const $hasCodeByName$$=$k$$=>FIELDS_NEED_CONVERT_CODE[$k$$]&&_.has($ctrl$$.model.schema.paths,FIELDS_NEED_CONVERT_CODE[$k$$].code)&&
|
|
12
|
+
$ctrl$$.model.modelName!==FIELDS_NEED_CONVERT_CODE[$k$$].model?!0:!1;for(var $key$$ in $query$$)if($key$$!=="id_app"&&$key$$!=="access_token"&&$key$$!=="limit")if($key$$==="_id"&&global.mongoose.Types.ObjectId.isValid($query$$._id))try{let $id$$=global.mongoose.Types.ObjectId($query$$._id);$or_sort$$.push({_id:$id$$})}catch($error$$){Logger.error("find condition",$error$$)}else{if($key$$==="q"&&$query$$[$key$$])try{let $q$$=_.isObject($query$$[$key$$])?$query$$[$key$$]:JSONParser($query$$[$key$$]);
|
|
13
|
+
$req$$.fetch_by_groups=$req$$.fetch_by_groups||$q$$.fetch_by_groups;delete $q$$.fetch_by_groups;$body_ds_id_app$$=$q$$.id_apps||$body_ds_id_app$$;$all_app$$=$q$$.all_app||$all_app$$;delete $q$$.all_app;delete $q$$.id_apps;if(Object.keys($q$$).includes("_id"))if(!$q$$._id)delete $q$$._id;else if(typeof $q$$._id!=="object"&&!global.mongoose.Types.ObjectId.isValid($q$$._id))throw Logger.error("Condition is not valid",$q$$),"Condition is not valid";for(let $k_q$$ in $q$$)if(typeof $q$$[$k_q$$]=="string"&&
|
|
14
|
+
$ctrl$$.model.schema.paths[$k_q$$]?.instance?.toLowerCase()=="date"){let {fromDate:$fromDate$$,toDate:$toDate$$}=getDateRangeByType($q$$[$k_q$$]);$fromDate$$&&$toDate$$&&($q$$[$k_q$$]={$gte:$fromDate$$,$lte:$toDate$$})}($condition$$=$q$$)||($condition$$={});continue}catch($e$$){throw Logger.error("find condition",$e$$,$query$$[$key$$]),"Condition is not valid";}if($key$$!=="fields"&&(_.has($ctrl$$.model.schema.paths,$key$$)||$hasCodeByName$$($key$$)))if($ctrl$$.options.findExact[$key$$])$condition$$[$key$$]=
|
|
15
|
+
$query$$[$key$$];else{let $item$$={};if($ctrl$$.model.schema.paths[$key$$]?.instance?.toLowerCase()=="number")$item$$[$key$$]=Number($query$$[$key$$]);else if($ctrl$$.model.schema.paths[$key$$]?.instance?.toLowerCase()=="date"){let {fromDate:$fromDate$$,toDate:$toDate$$}=getDateRangeByType($query$$[$key$$]);$item$$[$key$$]=$fromDate$$&&$toDate$$?{$gte:$fromDate$$,$lte:$toDate$$}:new Date($query$$[$key$$])}else $ctrl$$.model.schema.paths[$key$$]?.instance?.toLowerCase()=="string"?$item$$[$key$$]={$regex:($query$$[$key$$]||
|
|
16
|
+
"").trim(),$options:"i"}:$item$$[$key$$]=$query$$[$key$$];$or_sort$$.push($item$$)}else $key$$==="$text"&&$or_sort$$.push({$text:{$search:$query$$[$key$$]}})}$or_sort$$.length!==0&&($query$$.cType==="$and"?$condition$$.$and=$or_sort$$:$condition$$.$or=$or_sort$$);$key$$=queryBuilding.convertLegacyQuery(_.cloneDeep($condition$$));$condition$$=queryBuilding.buildSearchQuery($key$$);$appConditions_shareRoute$$||$ctrl$$.require_id_app==0?$appConditions_shareRoute$$=[{id_app:$req$$.user.current_id_app,
|
|
17
|
+
condition:{id_app:$req$$.user.current_id_app,...$condition$$}}]:($body_ds_id_app$$=($body_ds_id_app$$||[]).filter($id$$=>global.mongoose.Types.ObjectId.isValid($id$$)),$body_ds_id_app$$.length==0&&($all_app$$?(Logger.warn("[findHanlder] t\u00ecm t\u1ea5t c\u1ea3 c\u00e1c c\u00f4ng ty c\u00f3 quy\u1ec1n..."),$body_ds_id_app$$=(await global.getModel("participant").find({email:$req$$.user.email},{id_app:1}).lean()).map($a$$=>$a$$.id_app)):$body_ds_id_app$$=[$req$$.user.current_id_app]),$appConditions_shareRoute$$=
|
|
18
|
+
$body_ds_id_app$$.map($id_app$$=>({id_app:$id_app$$,condition:{...$condition$$,id_app:$id_app$$}})));return Promise.all($appConditions_shareRoute$$.map($appCondition$$=>handleDynamicCondition($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$)))},getRightByItem=async($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$,$shareRoute$$)=>$shareRoute$$?$appCondition$$:new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,{action:"view"});permission.getRightByItem($appCondition$$.id_app,
|
|
19
|
+
$ctrl$$.model,$req$$.user.email,function($e$$,$_condition$$,$admin$$){if($e$$)return Logger.error("[findHandler] [getRightByItem] L\u1ed7i Kh\u00f4ng c\u00f3 quy\u1ec1n:",$e$$),$reject$$({error:$e$$.error||$e$$.message||$e$$,code:$e$$.code||ERRORS.ERR_NOT_PERMIT_CODE});if($appCondition$$.addmin=$admin$$)return $resolve$$($appCondition$$);$appCondition$$.condition||($appCondition$$.condition={});$appCondition$$.condition.$and||($appCondition$$.condition.$and=[]);if($ctrl$$.options.onRightByItem)$ctrl$$.options.onRightByItem($req$$.user,
|
|
20
|
+
$_condition$$,($e$$,$_condition$$)=>{if($e$$)return $reject$$({error:$e$$.error||$e$$.message||$e$$});_.isObject($_condition$$)&&Object.keys($_condition$$).length>0&&$appCondition$$.condition.$and.push($_condition$$);$appCondition$$.condition_assign=$_condition$$;$resolve$$($appCondition$$)});else _.isObject($_condition$$)&&Object.keys($_condition$$).length>0&&$appCondition$$.condition.$and.push($_condition$$),$resolve$$($appCondition$$)},$ctrl$$.name,{notNeedRight:$notNeedRight$$,right_code:$listinfo_code$$})})}),
|
|
21
|
+
getRightByCollectionRef=async($ctrl$$,$req$$,$appCondition$$,$shareRoute$$)=>$shareRoute$$||$appCondition$$.admin||!$appCondition$$.condition_assign||Object.keys($appCondition$$.condition_assign).length===0?$appCondition$$:new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{if($ctrl$$.options.assignWiths){let $condition_assignwiths$$={};async.map($ctrl$$.options.assignWiths,($col$$,$callback$$)=>{let $m$$=global.getModel($col$$.ref_collection);permission.getRightByItem($appCondition$$.id_app,
|
|
22
|
+
$m$$,$req$$.user.email,function($e$$,$_condition$$,$admin$$){if($e$$)return $callback$$({e:$e$$.error||$e$$.message||$e$$,code:$e$$.code||ERRORS.ERR_NOT_PERMIT_CODE});if($admin$$)return $callback$$(null);$_condition$$.id_app=$appCondition$$.id_app;$appCondition$$.condition[$col$$.ref_field]&&($_condition$$[$col$$.ref_field]=$appCondition$$.condition[$col$$.ref_field]);$m$$.find($_condition$$,{[$col$$.ref_field]:1}).lean().then($dsdt_rs$$=>{$dsdt_rs$$=$dsdt_rs$$.map($r$$=>$r$$[$col$$.ref_field]);$dsdt_rs$$.push("");
|
|
23
|
+
$dsdt_rs$$.push(null);$condition_assignwiths$$[$col$$.field]={$in:$dsdt_rs$$};$callback$$()}).catch($e$$=>{$callback$$($e$$)})},$col$$.ref_module)},$condition$jscomp$6_e$$=>{if($condition$jscomp$6_e$$)return $reject$$({error:$condition$jscomp$6_e$$.error||$condition$jscomp$6_e$$.message||$condition$jscomp$6_e$$});Object.keys($condition_assignwiths$$).length>0&&($condition$jscomp$6_e$$=$appCondition$$.condition_assign||$appCondition$$.condition,$condition$jscomp$6_e$$.$and||($condition$jscomp$6_e$$.$and=
|
|
24
|
+
[]),$condition$jscomp$6_e$$.$and.push($condition_assignwiths$$),$appCondition$$.condition=$condition$jscomp$6_e$$);$resolve$$($appCondition$$)})}else $resolve$$($appCondition$$)})}),findHanlder=async($ctrl$$,$req$$,$callback$$)=>{let $model$$=$ctrl$$.model,$shareRoute$$=$req$$.shareRoute,$listinfo_code$$=$req$$?.body?.["listinfo-code"]||$req$$?.query["listinfo-code"]||$req$$?.headers?.["listinfo-code"]||$req$$?.headers?.["Listinfo-Code"];if(($listinfo_code$$=$listinfo_code$$||$ctrl$$.name)&&$listinfo_code$$!=
|
|
25
|
+
$ctrl$$.name){var $condition$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$},{api_code:1,code:1}).lean();$condition$$?($condition$$.api_code||$condition$$.code)!=$ctrl$$.name&&($listinfo_code$$=$ctrl$$.name):$listinfo_code$$=$ctrl$$.name}let $appConditions$$;try{$appConditions$$=await buildCondition($ctrl$$,$req$$,$listinfo_code$$,$shareRoute$$);for(let $appCondition$$ of $appConditions$$){await hasRight($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$.id_app,$shareRoute$$)=="0"&&
|
|
26
|
+
($appCondition$$.condition._id={$in:[]});await getRightByItem($ctrl$$,$req$$,$listinfo_code$$,$appCondition$$,$shareRoute$$);await getRightByCollectionRef($ctrl$$,$req$$,$appCondition$$,$shareRoute$$);({condition:$condition$$}=$appCondition$$);for(let $key_q$$ in $condition$$)if($key_q$$==="_id"||$key_q$$.startsWith("$")||$key_q$$.includes(".")||_.has($model$$.schema.paths,$key_q$$)||delete $condition$$[$key_q$$],$key_q$$=="$and"){for(let $dk$$ of $condition$$.$and)for(let $key_q$$ in $dk$$)$key_q$$===
|
|
27
|
+
"_id"||$key_q$$.startsWith("$")||$key_q$$.includes(".")||_.has($model$$.schema.paths,$key_q$$)||delete $dk$$[$key_q$$];$condition$$.$and=$condition$$.$and.filter($a$$=>Object.keys($a$$).length>0)}$appCondition$$.id_app&&($condition$$=await convertNamesToCodes($appCondition$$.id_app,$condition$$,FIELDS_NEED_CONVERT_CODE,$model$$),$appCondition$$.condition=$condition$$);if($shareRoute$$){$condition$$.shared=!0;let $id_sellers$$=(await global.getModel("app").find({sale_online:!0},{_id:1}).lean()).map($a$$=>
|
|
28
|
+
$a$$._id);$condition$$.$and||($condition$$.$and=[]);$condition$$.$and.push({id_app:{$in:$id_sellers$$}});$condition$$.id_app&&$condition$$.$and.push({id_app:$condition$$.id_app})}else _.has($model$$.schema.paths,"id_app")&&$ctrl$$.require_id_app!==!1&&($condition$$.id_app=$appCondition$$.id_app);$req$$.user.email==="public"&&_.has($model$$.schema.paths,"session_created")&&($condition$$.session_created=($req$$.cookies||{}).uid);_.extend($condition$$,$ctrl$$.keyValues);utils.deleteEmptyObject($condition$$);
|
|
29
|
+
delete $condition$$.$where;_.has($model$$.schema.paths,"ma_ct")&&$ctrl$$.options.isVoucher&&($condition$$.ma_ct=$ctrl$$.name.toUpperCase());let $condition_group$$;$req$$.fetch_by_groups&&$req$$.fetch_by_groups.model_group&&$req$$.fetch_by_groups.field&&($condition_group$$=$req$$.fetch_by_groups.condition||{},$condition_group$$.status=!0,$condition_group$$.id_app=$appCondition$$.id_app,$condition$$[$req$$.fetch_by_groups.field]&&($condition_group$$[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]=
|
|
30
|
+
$condition$$[$req$$.fetch_by_groups.field]));$appCondition$$.condition_group=$condition_group$$;let $field_not_right$$;try{$field_not_right$$=await permission.getFieldNotRight($appCondition$$.id_app,$req$$.user.email,$ctrl$$.name)}catch($e$$){$field_not_right$$=[]}$appCondition$$.field_not_right=$field_not_right$$}}catch($e$$){return $callback$$($e$$)}async.series([function($callback$$){setImmediate(async()=>{var $condition_group$$=$appConditions$$.filter($a$$=>Object.keys($a$$.condition).length>
|
|
31
|
+
0).map($a$$=>$a$$.condition);let $condition$$;$condition$$=$condition_group$$.length==0?{}:$condition_group$$.length==1?$condition_group$$[0]:{$or:$condition_group$$};$condition_group$$={$or:$appConditions$$.filter($a$$=>$a$$.condition_group).map($a$$=>$a$$.condition_group)};if($req$$.query.count){var $fields_fields$jscomp$1_groups_number_notfields_rows_number$$=0;$condition_group$$.$or.length>0&&($fields_fields$jscomp$1_groups_number_notfields_rows_number$$=await global.getModel($req$$.fetch_by_groups.model_group).countDocuments($condition_group$$));
|
|
32
|
+
$condition_group$$=await $model$$.countDocuments($condition$$);$req$$.result={groups_number:$fields_fields$jscomp$1_groups_number_notfields_rows_number$$,rows_number:$condition_group$$};return $callback$$("0")}$req$$.query.pagination&&($fields_fields$jscomp$1_groups_number_notfields_rows_number$$=await $model$$.countDocuments($condition$$),$req$$.pagination={total:$fields_fields$jscomp$1_groups_number_notfields_rows_number$$});let $field_not_right$$=[...(new Set($appConditions$$.map($a$$=>$a$$.field_not_right).reduce(($a$$,
|
|
33
|
+
$b$$)=>$a$$.concat($b$$),[])))].filter($a$$=>$a$$);$fields_fields$jscomp$1_groups_number_notfields_rows_number$$=$req$$.query.fields;let $gfields$$={};$fields_fields$jscomp$1_groups_number_notfields_rows_number$$&&(_.isArray($fields_fields$jscomp$1_groups_number_notfields_rows_number$$)?$fields_fields$jscomp$1_groups_number_notfields_rows_number$$.forEach($f$$=>{$f$$!=="_id"&&($gfields$$[$f$$]=1)}):_.isObject($fields_fields$jscomp$1_groups_number_notfields_rows_number$$)?($gfields$$={...$gfields$$,
|
|
34
|
+
...$fields_fields$jscomp$1_groups_number_notfields_rows_number$$},$req$$.query.fields=Object.keys($gfields$$).join(",")):$fields_fields$jscomp$1_groups_number_notfields_rows_number$$.split(",").filter($f$$=>$f$$&&$field_not_right$$.indexOf($f$$)<0).forEach($f$$=>{$f$$!=="_id"&&($gfields$$[$f$$]=1)}));$field_not_right$$.forEach($f$$=>{Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)?delete $gfields$$[$f$$]:$gfields$$[$f$$]=0});!$fields_fields$jscomp$1_groups_number_notfields_rows_number$$&&
|
|
35
|
+
(($fields_fields$jscomp$1_groups_number_notfields_rows_number$$=$req$$.query.notfields)&&(_.isArray($fields_fields$jscomp$1_groups_number_notfields_rows_number$$)?$fields_fields$jscomp$1_groups_number_notfields_rows_number$$.forEach($f$$=>{$f$$&&$f$$!=="_id"&&(Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)?delete $gfields$$[$f$$]:$gfields$$[$f$$]=0)}):_.isObject($fields_fields$jscomp$1_groups_number_notfields_rows_number$$)?$gfields$$={...$gfields$$,...$fields_fields$jscomp$1_groups_number_notfields_rows_number$$}:
|
|
36
|
+
$fields_fields$jscomp$1_groups_number_notfields_rows_number$$.split(",").forEach($f$$=>{$f$$&&$f$$!=="_id"&&(Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)?delete $gfields$$[$f$$]:$gfields$$[$f$$]=0)})),$shareRoute$$||$req$$.user.email==="public")&&(Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)?(delete $gfields$$.dataview_to,delete $gfields$$.dataview_to_users):($gfields$$.dataview_to=0,$gfields$$.dataview_to_users=0));$condition$$.$text&&($gfields$$||={},$gfields$$.textScore={$meta:"textScore"});
|
|
37
|
+
delete $req$$.query_cache;$ctrl$$.cache&&($req$$.query_cache={..._.cloneDeep($req$$.query),..._.cloneDeep($condition$$)},delete $req$$.query_cache.q,delete $req$$.query_cache.refresh_required,$req$$.query_cache.gfields=_.cloneDeep($gfields$$));const $fetchData$$=($condition$$,$limit$$,$page$$,$callback$$)=>{setImmediate(async()=>{let $query$$;if($req$$.query.group||$req$$.query.project||$req$$.query.match||$req$$.query.aggregate||$req$$.query.$aggregate)try{if($req$$.query.aggregate){var $aggregate_piples_sort$$=
|
|
38
|
+
JSONParser($req$$.query.$aggregate||$req$$.query.aggregate);if(!Array.isArray($aggregate_piples_sort$$))return $callback$$({error:"Aggregate ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng"});if($aggregate_piples_sort$$.find($f$$=>$f$$.$lookup))return $callback$$({error:"Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p s\u1eed d\u1ee5ng $lookup trong aggregate"});$aggregate_piples_sort$$=[{$match:$condition$$},...$aggregate_piples_sort$$];$query$$=$model$$.aggregate($aggregate_piples_sort$$)}else{$query$$=$model$$.aggregate([{$match:$condition$$}]);
|
|
39
|
+
let $group$$;$req$$.query.group&&($group$$=JSONParser($req$$.query.group),$query$$.group($group$$));if($req$$.query.match){let $match$$=JSONParser($req$$.query.match);$query$$.match($match$$)}let $project$$;if($req$$.query.project)$project$$=JSONParser($req$$.query.project),$query$$.project($project$$);else if($gfields$$&&Object.keys($gfields$$).length>0)$project$$=$gfields$$;else if($project$$={_id:1},$group$$)for(let $key$$ in $group$$)$project$$[$key$$]=1;$query$$.project($project$$)}}catch($e$$){return Logger.error("[findHanlder]",
|
|
40
|
+
$e$$,$req$$.query),$callback$$({error:$e$$.message||$e$$.error||$e$$})}else _.has($model$$.schema.paths,"id_app")&&Object.keys($gfields$$).length>0&&Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)&&($gfields$$.id_app=1),$query$$=$model$$.find($condition$$,$gfields$$);$aggregate_piples_sort$$=$req$$.sort;if(!$aggregate_piples_sort$$)$gfields$$.textScore&&($aggregate_piples_sort$$={textScore:{$meta:"textScore"}});else for(var $key$$ in $aggregate_piples_sort$$)if($key$$!=="textScore"&&$aggregate_piples_sort$$[$key$$]!=
|
|
41
|
+
1&&$aggregate_piples_sort$$[$key$$]!=-1)return Logger.error("sort is valid",$aggregate_piples_sort$$,$key$$,$aggregate_piples_sort$$[$key$$]),$callback$$({error:`Sort ${JSON.stringify($aggregate_piples_sort$$)} is not valid`});$aggregate_piples_sort$$&&Object.keys($aggregate_piples_sort$$).length>0&&$query$$.sort($aggregate_piples_sort$$);if($req$$.pagination||$req$$.query.type_data!=="xlsx"&&$req$$.query.type_data!=="json_file"&&$req$$.query.type_data!=="json_export"&&$req$$.query.rpt!="1")$page$$&&
|
|
42
|
+
$limit$$?($key$$=(Number($page$$)-1)*$limit$$,$key$$<0&&($key$$=0),$query$$.skip($key$$).limit($limit$$)):$query$$.limit($limit$$);$ctrl$$.populate&&($query$$=$ctrl$$.populate($query$$));$query$$.lean&&($query$$=$query$$.lean());if($req$$.query.explainQuery){$req$$.query.explainQuery!="explainQuery"&&$req$$.query.explainQuery!="executionStats"&&($req$$.query.explainQuery="queryPlanner");try{const $filter$$=$query$$.getFilter(),$projection$$=$query$$.getOptions().projection||{},$skip$$=$query$$.getOptions().skip||
|
|
43
|
+
0,$limit$$=$query$$.getOptions().limit||0,$sort$$=$query$$.getOptions().sort||{},$explainResult$$=await $query$$.mongooseCollection.find($filter$$,{projection:$projection$$}).skip($skip$$).limit($limit$$).sort($sort$$).explain($req$$.query.explainQuery),{parsedQuery:$parsedQuery$$,winningPlan:$winningPlan$$}=$explainResult$$.queryPlanner||{},{executionSuccess:$executionSuccess$$,nReturned:$nReturned$$,executionTimeMillis:$executionTimeMillis$$,totalKeysExamined:$totalKeysExamined$$,totalDocsExamined:$totalDocsExamined$$}=
|
|
44
|
+
$explainResult$$.executionStats||{};$callback$$(null,[{queryPlanner:{parsedQuery:$parsedQuery$$,winningPlan:$winningPlan$$},executionStats:{executionSuccess:$executionSuccess$$,nReturned:$nReturned$$,executionTimeMillis:$executionTimeMillis$$,totalKeysExamined:$totalKeysExamined$$,totalDocsExamined:$totalDocsExamined$$},_id:""}])}catch($e$$){$callback$$($e$$)}}else $query$$.lean().then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})})};let $data_log$$=$req$$.query;delete $data_log$$.access_token;
|
|
45
|
+
$appConditions$$.forEach($a$jscomp$11_id_app$$=>{({id_app:$a$jscomp$11_id_app$$}=$a$jscomp$11_id_app$$);$req$$.user&&!$data_log$$.count&&$ctrl$$.name!=="log"&&$ctrl$$.name!=="labelinfo"&&$ctrl$$.name!=="listinfo"&&$ctrl$$.name!=="reportinfo"&&$ctrl$$.name!=="moduleinfo"&&$ctrl$$.name!=="options"&&global.getModel("log").create({id_app:$a$jscomp$11_id_app$$,id_func:$ctrl$$.name,action:"QUERY",data:{condition:JSON.stringify($data_log$$)}},$req$$.user.email,$req$$.user_agent,$req$$)});let $page_fetch$$=
|
|
46
|
+
Number($req$$.query.page||0);isNaN($page_fetch$$)&&($page_fetch$$=0);let $limit$$=$req$$.query.limit;$limit$$&&=Number($limit$$);isNaN($limit$$)&&($limit$$=0);$req$$.query.type_data!=="xlsx"&&$req$$.query.type_data!=="json_file"&&$req$$.query.type_data!=="json_export"&&$req$$.query.rpt!="1"&&($limit$$||=$ctrl$$.require_id_app!==!1&&$ctrl$$.name!=="right"&&$ctrl$$.name!=="labelinfo"?20:500,$limit$$&&$limit$$>500&&!$req$$.query.print&&$ctrl$$.require_id_app!==!1&&$ctrl$$.name!=="right"&&$ctrl$$.name!==
|
|
47
|
+
"labelinfo"&&($limit$$=500));$req$$.pagination&&($limit$$||=20,$req$$.pagination.page=$page_fetch$$?$page_fetch$$:1,$req$$.pagination.limit=$limit$$,$req$$.pagination.totalPages=Math.ceil($req$$.pagination.total/$limit$$));let $condition_groups$$=[];if($condition_group$$.length>0){let $field_ref$$=$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field;$fields_fields$jscomp$1_groups_number_notfields_rows_number$$={[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]:1};let $limit_group$$=
|
|
48
|
+
$req$$.fetch_by_groups.limit_group||10,$page$$=Number($req$$.query.page||0);isNaN($page$$)&&($page$$=0);let $skip$$=0;$page$$>1&&($skip$$=($page$$-1)*$limit_group$$);$skip$$<0&&($skip$$=0);(await global.getModel($req$$.fetch_by_groups.model_group).find($condition_group$$,$fields_fields$jscomp$1_groups_number_notfields_rows_number$$).sort({stt:1,[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]:1}).skip($skip$$).limit($limit_group$$).lean()).forEach($g$$=>{let $c$$={...$condition$$};
|
|
49
|
+
$c$$[$req$$.fetch_by_groups.field]=$g$$[$field_ref$$];$condition_groups$$.push($c$$)});$condition_groups$$.length==0?$condition_groups$$=[$condition$$]:($page_fetch$$=0,$req$$.fetch_by_groups.limit&&($limit$$=Math.max(Number($req$$.fetch_by_groups.limit),Math.round($limit$$/$condition_groups$$.length))))}else $condition_groups$$=[$condition$$];async.map($condition_groups$$,($condition$$,$cb$$)=>{$fetchData$$($condition$$,$limit$$,$page_fetch$$,$cb$$)},($e$$,$obj4views$$)=>{if($e$$)return Logger.error("exec query find",
|
|
50
|
+
$e$$,JSON.stringify($condition$$)),$callback$$({error:$e$$.error||$e$$.message||$e$$});let $obj4view$$=$obj4views$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$obj4view$$||=[];async.parallel({found:function($callback$$){$ctrl$$.found?$ctrl$$.found($req$$.user,$condition$$,$obj4view$$,function($error$$,$items$$){setImmediate(()=>{$callback$$($error$$,$items$$)})}):$callback$$(null,$obj4view$$)},set_collection_name:function($callback$$){$obj4view$$.forEach($obj$$=>{$obj$$.collection_name||($obj$$.collection_name=
|
|
51
|
+
$ctrl$$.collection_name)});$callback$$(null)}},function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$({error:$error$$.error||$error$$.message||$error$$});$obj4view$$=$rs$$.found;async.parallel({e_view:function($callback$$){$ctrl$$.onView($req$$.user,$obj4view$$,($error$$,$viewValue$$)=>{if($error$$)return Logger.error("Erron on view:",$error$$),$callback$$($error$$);$callback$$(null,$viewValue$$)},{req:$req$$,shareRoute:$shareRoute$$})}},async function($e$$,$_rs_func_string_rs$$){if($error$$)return $callback$$({error:$error$$.error||
|
|
52
|
+
$error$$.message||$error$$});if($req$$.query.type_data==="json_file"){var {template:$_groupBy_template$jscomp$1_template$$}=$req$$.body;try{var $app_dir_root_template_fileName$$=await createTmpFile(`${$_groupBy_template$jscomp$1_template$$?.title||$ctrl$$.name}.json`,JSON.stringify($_rs_func_string_rs$$.e_view,null,2)),$downloadUrl_template_id$$=$req$$.host?.startsWith("http")?`${$req$$.host}/downloads/temp/${$app_dir_root_template_fileName$$}`:`https://${$req$$.host}/downloads/temp/${$app_dir_root_template_fileName$$}`;
|
|
53
|
+
$req$$.result={url:$downloadUrl_template_id$$};$req$$.dataType="json";return $callback$$("0")}catch($e$$){return $callback$$($e$$)}}if($req$$.query.type_data==="xlsx"){if($req$$.body.template){({template:$_groupBy_template$jscomp$1_template$$}=$req$$.body);try{const $fileName$$=await generateDefaultExcel({title:$_groupBy_template$jscomp$1_template$$.title,data:$_rs_func_string_rs$$.e_view,columns:$_groupBy_template$jscomp$1_template$$.columns,filterFields:$_groupBy_template$jscomp$1_template$$.filterFields,
|
|
54
|
+
condition:$_groupBy_template$jscomp$1_template$$.condition||$req$$.body.q||$req$$.query||{}}),$downloadUrl$$=$req$$.host?.startsWith("http")?`${$req$$.host}/downloads/temp/${$fileName$$}`:`https://${$req$$.host}/downloads/temp/${$fileName$$}`;$req$$.result={url:$downloadUrl$$};$req$$.dataType="json";return $callback$$("0")}catch($e$$){return $callback$$($e$$)}}$app_dir_root_template_fileName$$=(configs.paths||{}).templates;let $excelTemplate$$;if($downloadUrl_template_id$$=$req$$.query.id_template){if(!global.mongoose.Types.ObjectId.isValid($downloadUrl_template_id$$))return $callback$$({error:"ID m\u1eabu file xu\u1ea5t kh\u00f4ng h\u1ee3p l\u1ec7"});
|
|
55
|
+
$excelTemplate$$=await global.getModel("exportexceltemplate").findById($downloadUrl_template_id$$);if(!$excelTemplate$$||!$excelTemplate$$.file)return $callback$$({error:"M\u1eabu file xu\u1ea5t kh\u00f4ng t\u1ed3n t\u1ea1i"});$_groupBy_template$jscomp$1_template$$=$app_dir_root_template_fileName$$?`${path.dirname($app_dir_root_template_fileName$$)}${$excelTemplate$$.file}`:`${path.dirname(__dirname)}${$excelTemplate$$.file}`}else $app_dir_root_template_fileName$$&&($_groupBy_template$jscomp$1_template$$=
|
|
56
|
+
`${$app_dir_root_template_fileName$$}/excels/lists/${$ctrl$$.name}.xlsx`),$_groupBy_template$jscomp$1_template$$&&fs.existsSync($_groupBy_template$jscomp$1_template$$)||($_groupBy_template$jscomp$1_template$$=`${path.dirname(__dirname)}/templates/excels/lists/${$ctrl$$.name}.xlsx`);if(!fs.existsSync($_groupBy_template$jscomp$1_template$$))return $callback$$({error:"File m\u1eabu excel ch\u01b0a \u0111\u01b0\u1ee3c khai b\u00e1o t\u1ea1i '"+$_groupBy_template$jscomp$1_template$$+"'"});$app_dir_root_template_fileName$$=
|
|
57
|
+
{};$app_dir_root_template_fileName$$.detail=$_rs_func_string_rs$$.e_view;$app_dir_root_template_fileName$$.items=$_rs_func_string_rs$$.e_view;if($excelTemplate$$&&$excelTemplate$$.handle_data){$_rs_func_string_rs$$=`return (async ()=>{
|
|
57
58
|
try{
|
|
58
59
|
${$excelTemplate$$.handle_data}
|
|
59
60
|
}catch(e){
|
|
@@ -6,8 +6,8 @@ $ctrl$$.name}$voucher_options$$=(await global.getModel("options").findOne({id_ap
|
|
|
6
6
|
try{await permission.verifyReCaptcha($data$$["g-recaptcha-response"])}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}}Logger.info("[updateHanlder] Ki\u1ec3m tra verify otp...");let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($data$$,{action:$_action$$,_id:$id$$,user:$user$$}));if($requireOtp$$&&$_action$$!=="import")try{await permission.verifyOTP($user$$.email,$data$$["otp-id"],$data$$["otp-code"])}catch($e$$){return $callback$$({error:$e$$.message||
|
|
7
7
|
$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP})}let $checkSoCT$$=function($obj$$,$callback$$){if($model$$.schema.paths.ngay_ct&&$model$$.schema.paths.so_ct&&$obj$$.ngay_ct&&$data$$.so_ct&&$obj$$.so_ct!==$data$$.so_ct&&$voucher_options$$?.check_so_ct&&$voucher_options$$?.check_so_ct!=="0"){let $query_check$$={id_app:$obj$$.id_app,so_ct:$data$$.so_ct,listinfo_code:$listinfo_code$$||$ctrl$$.name,_id:{$ne:$obj$$._id.toString()}},$tu_ngay$$;var $date_check_den_ngay$$=$data$$.ngay_ct||$obj$$.ngay_ct;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=
|
|
8
8
|
moment($date_check_den_ngay$$).startOf("date").toDate();$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("date").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "2":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("month").toDate();$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("month").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "3":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("quarter").toDate();
|
|
9
|
-
$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "8":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$date_check_den_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().then($rs$$=>{
|
|
10
|
-
|
|
9
|
+
$date_check_den_ngay$$=moment($date_check_den_ngay$$).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$};break;case "8":$tu_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$date_check_den_ngay$$=moment($date_check_den_ngay$$).startOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$date_check_den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().then($rs$$=>{if($rs$$)return $callback$$("S\u1ed1 ch\u1ee9ng t\u1eeb "+$data$$.so_ct+
|
|
10
|
+
" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c");$callback$$(null,$obj$$)}).catch($e$$=>{Logger.error($e$$)})}else $callback$$(null,$obj$$)};async.waterfall([function($callback$$){setImmediate(async function(){$data$$.trang_thai&&($data$$.trang_thai=$data$$.trang_thai.toString());if($data$$.trang_thai||$obj$$.trang_thai){var $old_obj_old_request_q_approve$$={id_ct:$obj$$._id.toString(),user_approved:{$exists:!0}};$old_obj_old_request_q_approve$$.trang_thai=
|
|
11
11
|
($data$$.trang_thai||$obj$$.trang_thai||"").toString();if(($old_obj_old_request_q_approve$$=await global.getModel("approve").findOne($old_obj_old_request_q_approve$$))&&$old_obj_old_request_q_approve$$.update_after_approve?.cho_phep_cap_nhat_khi_da_duyet!=1)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt ch\u1ee9ng t\u1eeb \u1edf tr\u1ea1ng th\u00e1i n\u00e0y do n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t")}Logger.info("[updateHanlder] ki\u1ec3m tra kho\u00e1 s\u1ed5...");if($obj$$.ngay_ct&&
|
|
12
12
|
$obj$$.id_app&&$obj$$.schema&&$obj$$.schema.validate&&$obj$$.schema.validate.ngay_ct)try{await new Promise(($rs$$,$rj$$)=>{validator.unlockBook[0]($obj$$.id_app,$obj$$.ngay_ct,$unlock$$=>{if(!$unlock$$)return $rj$$(validator.unlockBook[1]);$rs$$($unlock$$)},$voucher_options$$)})}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}$schema_paths$$.exfields&&($obj$$.exfields=$obj$$.exfields||{});$old_obj_old_request_q_approve$$=convertObjectIdsToStrings($obj$$.toObject());$current_obj$$=_.cloneDeep($old_obj_old_request_q_approve$$);
|
|
13
13
|
const $data_keys$$=Object.keys($data$$);for(let $key$$ in $old_obj_old_request_q_approve$$)$data_keys$$.indexOf($key$$)<0&&($data$$[$key$$]=$old_obj_old_request_q_approve$$[$key$$]);$callback$$(null,$obj$$)})},function($obj$$,$_callback$$){Logger.info("[updateHanlder] ki\u1ec3m tra quy\u1ec1n truy c\u1eadp...");setImmediate(async function(){let $notNeedRight$$=await $ctrl$$.notNeedRight($user$$,{action:$_action$$,data:$data$$,obj:$current_obj$$});async.series({old_data:$callback$$=>{permission.hasRight($user$$.current_id_app,
|
|
@@ -15,27 +15,26 @@ $user$$.email,$module$$,$_action$$,function($error$$,$hr$$,$c_app$$){setImmediat
|
|
|
15
15
|
$user$$.email,$module$$,$_action$$,function($error$$,$hr$$,$c_app$$){setImmediate(()=>{if($hr$$)$ctrl$$.checkData($c_app$$,{...$data$$,_id:$obj$$._id.toString()},$e$$=>{if($e$$)return $callback$$($e$$);$callback$$(null,$obj$$)});else return $callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE})})},{data:$data$$,obj:$current_obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})}},$e$$=>{$_callback$$($e$$,$obj$$)})})},($obj$$,
|
|
16
16
|
$_callback$$)=>{setImmediate(function(){let $current_trang_thai$$=$data$$.trang_thai||$obj$$.trang_thai,$current_so_ct$$=$data$$.so_ct||$obj$$.so_ct;if($current_trang_thai$$!==$obj$$.trang_thai&&(!$voucher_options$$?.trang_thai_create_voucher_numbers||$voucher_options$$?.trang_thai_create_voucher_numbers.length==0||$voucher_options$$?.trang_thai_create_voucher_numbers?.indexOf($current_trang_thai$$)>=0)&&$model$$.schema.paths.so_ct)if($current_so_ct$$&&$current_so_ct$$.toUpperCase()!==($listinfo_code$$||
|
|
17
17
|
$ctrl$$.name).toUpperCase()&&$current_so_ct$$.toUpperCase()!==$ctrl$$.name.toUpperCase())$checkSoCT$$($obj$$,$error$$=>{$_callback$$($error$$,$obj$$)});else{let $count$$=0;async.whilst(function($cb$$){$cb$$(null,$count$$<100)},function($callbackWhilst$$){getNextSequence($obj$$.id_app,$listinfo_code$$||$ctrl$$.name,"so_ct",function($e$$,$rs$$){setImmediate(()=>{if($e$$)return $callbackWhilst$$($e$$);$data$$.so_ct=$rs$$.so_ct;$checkSoCT$$($obj$$,$error$$=>{$error$$?$count$$>=99?$callbackWhilst$$($error$$):
|
|
18
|
-
($count$$++,$callbackWhilst$$()):($count$$=99999,$callbackWhilst$$())})})},{...($obj$$.toObject?$obj$$.toObject():$obj$$),...$data$$})},function($err$$){$_callback$$($err$$,$obj$$)})}else $_callback$$(null,$obj$$)})},$checkSoCT$$,($obj$$,$_callback$$)=>{(async($obj$$,$callback$$)=>{try{(await permission.getFieldNotRight($obj$$.id_app,$user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $data$$[$f$$]})}catch($e$$){Logger.error("Error get field not right",$e$$)}
|
|
19
|
-
$
|
|
20
|
-
$
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
$
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
$
|
|
32
|
-
$
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
$
|
|
37
|
-
|
|
38
|
-
$
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
module.exports=withSesssion;module.exports.updateHandler=updateHandler;
|
|
18
|
+
($count$$++,$callbackWhilst$$()):($count$$=99999,$callbackWhilst$$())})})},{...($obj$$.toObject?$obj$$.toObject():$obj$$),...$data$$})},function($err$$){$_callback$$($err$$,$obj$$)})}else $_callback$$(null,$obj$$)})},$checkSoCT$$,($obj$$,$_callback$$)=>{(async($obj$$,$callback$$)=>{try{(await permission.getFieldNotRight($obj$$.id_app,$user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $data$$[$f$$]})}catch($e$$){Logger.error("Error get field not right",$e$$)}$ctrl$$.updating?$ctrl$$.updating($user$$,
|
|
19
|
+
$data$$,$obj$$,function($error$$,$_data$$,$_obj$$){if($error$$)return $callback$$($error$$);if($ctrl$$.dynamicUpdating)$ctrl$$.dynamicUpdating($user$$,$_data$$,$_obj$$,function($error$$,$_data$$){if($error$$)return $callback$$($error$$);for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$,req:$req$$});else{for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)}}):$ctrl$$.dynamicUpdating?
|
|
20
|
+
$ctrl$$.dynamicUpdating($user$$,$data$$,$obj$$,function($error$$,$_data$$){if($error$$)return $callback$$($error$$);for(let $f$$ in $_data$$)$schema_paths$$[$f$$]&&($data$$[$f$$]=$_data$$[$f$$]);$callback$$(null,$obj$$)},{listinfo_code:$listinfo_code$$,req:$req$$}):$callback$$(null,$obj$$)})($obj$$,($err$$,$next$$)=>{$_callback$$($err$$,$next$$)})},function($obj$$,$callback$$){Logger.info("[updateHanlder] ki\u1ec3m tra s\u1ef1 t\u1ed3n t\u1ea1i...");if(!$unique$$||$unique$$.length===0)return $callback$$(null,
|
|
21
|
+
$obj$$);let $c1$$={},$c2$$={};$obj$$.id_app&&($c1$$.id_app=$obj$$.id_app,$c2$$.id_app||($c2$$.id_app=$obj$$.id_app));$unique$$.forEach(function($key$$){$c1$$[$key$$]=$obj$$[$key$$];$ctrl$$.model.schema.paths[$key$$]?($ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()=="number"?$c2$$[$key$$]=Number($data$$[$key$$]):$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()=="date"?$c2$$[$key$$]=new Date($data$$[$key$$]):$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()=="string"?$c2$$[$key$$]=
|
|
22
|
+
($data$$[$key$$]||"").toString():$c2$$[$key$$]=$data$$[$key$$],$c2$$[$key$$]||($c2$$[$key$$]=$c1$$[$key$$])):Logger.error("[updateHanlder] field",$key$$," is not exist. please check unique of controller")});_.isEqual($c1$$,$c2$$)!==!0?isExists($model$$,$unique$$,$c2$$,$ctrl$$.replaceIfExists,function($error$$,$kq$$){if($error$$||$kq$$){let $msgError$$=$error$$||ERRORS.ERR_ALREADY_EXIST;if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+
|
|
23
|
+
"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$)}else checkReference($model$$,$obj$$,function($error$$){if($error$$)return Logger.error("[updateHandler] Keys arise data",$c1$$,$c2$$,$error$$,$unique$$),$callback$$({error:ERRORS.ERR_KEY_ARISE+($error$$.error||$error$$.message||$error$$),code:ERRORS.ERR_KEY_ARISE_CODE,unique:$unique$$});$callback$$(null,$obj$$)},$unique$$)}):$callback$$(null,$obj$$)},function($obj$$,$_callback$$){const $callback$$=($err$$,$next$$)=>
|
|
24
|
+
{$_callback$$($err$$,$next$$)};let $keys$$=Object.keys($model$$.referenceKeys||{}).filter($key$$=>$key$$!=="_id");$unique$$&&($keys$$=$keys$$.filter($key$$=>$unique$$.indexOf($key$$).length<0));$keys$$.length===0?$_callback$$(null,$obj$$):checkReference($model$$,$obj$$,function($msgError$$){if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $callback$$({error:ERRORS.ERR_ARISE+
|
|
25
|
+
($msgError$$.error||$msgError$$.message||$msgError$$),code:ERRORS.ERR_ARISE_CODE});else $_callback$$(null,$obj$$)},$keys$$)},function($obj$$,$_callback$$){$ctrl$$.validating||($ctrl$$.validating=($user$$,$data$$,$next$$)=>{$next$$(null,$data$$)});$data$$=cleanDataByMongooseSchema($data$$,$model$$.schema);$data$$._id=$obj$$._id;$ctrl$$.validating($user$$,$data$$,($error$$,$data$$)=>{$error$$?$_callback$$($error$$,void 0):($data$$.date_updated=new Date,$data$$.user_updated=$user$$.email,delete $data$$.__v,
|
|
26
|
+
$ctrl$$.options.onUpdateExtending||($ctrl$$.options.onUpdateExtending=function($obj$$,$data$$,$action$$,$fn$$){$fn$$()}),$ctrl$$.options.onUpdateExtending($obj$$,$data$$,$action$$,function(){$schema_paths$$.exfields&&$data$$.exfields&&($obj$$.exfields=$data$$.exfields);delete $data$$.__v;for(let $f$$ in $data$$)$schema_paths$$[$f$$]&&$f$$!=="_id"&&($obj$$.set($f$$,$data$$[$f$$]),$f$$!=="exfields"||$obj$$.exfields||($obj$$.exfields={}));validate($obj$$,function($msgError$$){if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,
|
|
27
|
+
$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0);else $_callback$$(null,$obj$$)},$voucher_options$$)}))},{action:$action$$})},function($obj$$,$_callback$$){Logger.info("[updateHanlder] xo\u00e1 s\u1ed5 s\u00e1ch...");$current_obj$$&&($obj$$._id=$current_obj$$._id);deletePost($user$$,$obj$$,async $e$$=>{if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$$)}catch($e$$){Logger.error("[updatehandler] [deleteBooks] [dynamicDeletePost]",
|
|
28
|
+
$e$$);$_callback$$($e$$,void 0);return}$_callback$$($e$$,$obj$$)})},function($obj$$,$_callback$$){Logger.info("[updateHanlder] L\u01b0u t\u1edbi database...");const $callback$$=($err$$,$next$$)=>{$_callback$$($err$$,$next$$)};setImmediate(async()=>{$obj$$.ngay_ct&&($obj$$.ngay_ct=moment($obj$$.ngay_ct).toDate());for(var $$condition_k$$ in $ctrl$$.keyValues)$obj$$[$$condition_k$$]=$ctrl$$.keyValues[$$condition_k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&_.isArray($obj$$[$model_path$$])).forEach($model_path$$=>
|
|
29
|
+
{$model$$.schema.paths[$model_path$$].schema&&$model$$.schema.paths[$model_path$$].schema.paths&&Object.keys($model$$.schema.paths[$model_path$$].schema.paths).filter($path$$=>$path$$!=="line"&&$path$$!=="_id"&&$path$$!=="__v"&&fields_sync_master_detail.indexOf($path$$)>=0).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,$obj$$);if($ctrl$$.saving)try{await $ctrl$$.saving($user$$,
|
|
30
|
+
$obj$$,$_action$$)}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}$ctrl$$.emit("saving",$obj$$);$current_obj$$&&($obj$$._id=$current_obj$$._id);let $obj_created$$,$error$$;$data$$.$condition&&($$condition_k$$=$data$$.$condition,$$condition_k$$._id=$obj$$._id,await $model$$.findOne($$condition_k$$)||($error$$=ERRORS.ERR_CAN_NOT_UPDATE),delete $data$$.$condition);if(!$error$$)try{delete $obj$$.__v,$obj_created$$=await $obj$$.save(),$ctrl$$.populate&&($obj_created$$=$model$$.findById($obj_created$$._id).inTxn(),
|
|
31
|
+
$obj_created$$=await $ctrl$$.populate($obj_created$$))}catch($e$$){if($error$$=$e$$,$ctrl$$.options.onErrorSave)$ctrl$$.options.onErrorSave($user$$,$obj$$,$error$$,$_action$$)}if($error$$){let $msgErrors$$=[];for(let $k$$ in $error$$.errors)$msgErrors$$.push($error$$.errors[$k$$].message);$msgErrors$$.length==0&&($msgErrors$$=$error$$.message);$msgErrors$$||=JSON.stringify($error$$);if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&Logger.error("onErrorUpdating",
|
|
32
|
+
$e$$);$_callback$$({error:$msgErrors$$,code:ERRORS.ERR_CAN_NOT_UPDATE_CODE},void 0)},$current_obj$$);else $callback$$({error:$msgErrors$$,code:ERRORS.ERR_CAN_NOT_UPDATE_CODE})}else postData($obj_created$$,$ctrl$$,function($msgError$$){if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$_callback$$($msgError$$,void 0)},$current_obj$$);else $_callback$$($msgError$$,void 0);else{const $obj_created_cv$$=convertObjectIdsToStrings($obj_created$$.toObject());
|
|
33
|
+
onAfterCommit(async()=>{$ctrl$$.emit("saved",$obj_created$$,$current_obj$$);$ctrl$$.emit("updated",$obj_created$$);$model$$.modelName!="customer"&&global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj_created$$);runWebhooks($ctrl$$,$obj_created_cv$$,$_action$$.toUpperCase(),$voucher_options$$);await $ctrl$$.cacheData($obj_created_cv$$,void 0,$_action$$);$req$$&&global.getModel("log").create({id_app:$user$$.current_id_app,id_func:$ctrl$$.name,action:$_action$$.toUpperCase(),
|
|
34
|
+
data:{oldData:$current_obj$$,newData:$data$$,id:$obj$$._id.toString()}},$user$$.email,$req$$.user_agent,$req$$)});$_callback$$(null,$obj_created_cv$$)}},{req:$req$$})})},function($obj$$,$callback$$){Logger.info("[updateHanlder] X\u1eed l\u00fd sau khi updated...");$ctrl$$.updated?$ctrl$$.updated($user$$,$obj$$,function($error$$,$obj$$){if($error$$)return Logger.error("[updateHandler] [saved] error when saved",$error$$),$callback$$($error$$);$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,
|
|
35
|
+
function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):$callback$$(null,$obj$$)},$current_obj$$):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):$callback$$(null,$obj$$)},function($obj$$,$callback$$){Logger.info("[updateHanlder] requestApprove...");$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj_created_cv$$,
|
|
36
|
+
$callback$$){Logger.info("[updateHanlder] T\u1ea1o view...");setImmediate(async()=>{let $approve_data$$;$obj$$.trang_thai!=void 0&&($approve_data$$=await global.getModel("approve").findOne({id_ct:$obj_created_cv$$._id.toString(),"update_after_approve.data.trang_thai":$obj_created_cv$$.trang_thai.toString()}).lean(),!$approve_data$$||$approve_data$$.user_approved||$approve_data$$.user_denied?$approve_data$$=null:($approve_data$$.user_approved=$req$$.user.email,$approve_data$$.user_approved_name=$req$$.user.name,
|
|
37
|
+
$approve_data$$.date_approved=new Date,await global.getModel("approve").updateOne({_id:$approve_data$$._id},$approve_data$$)));$req$$&&$_action$$!="import"&&$req$$.query.return_data!==!1?($obj_created_cv$$.collection_name=$ctrl$$.collection_name,(await permission.getFieldNotRight($obj_created_cv$$.id_app,$user$$.email,$ctrl$$.name)).forEach($f$$=>{delete $obj_created_cv$$[$f$$]}),$ctrl$$.onView($user$$,[$obj_created_cv$$],function($error$$,$viewValue$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);
|
|
38
|
+
$approve_data$$&&onAfterCommit(async()=>{global.getModel("approve").sendNotifyApproved($approve_data$$,$req$$.query.access_token);let $channel$$=`${$ctrl$$.name.toLowerCase()}-${"request_approved"}`;$obj$$.id_app&&($channel$$=`${$channel$$}-${$obj$$.id_app}`);let $message$$=JSON.stringify($viewValue$$[0]);try{await global.clientRedis.publish($channel$$,$message$$)}catch($e$$){Logger.error("[approve] [sendNotifyApproved] fire event","request_approved",$e$$)}});$callback$$(null,$viewValue$$[0])})},
|
|
39
|
+
{req:$req$$})):(Logger.info("[updateHanlder] tr\u1ea3 v\u1ec1 k\u1ebft qu\u1ea3 sau khi import..."),$callback$$(null,{_id:$obj_created_cv$$._id}))})}],($e$$,$rs$$)=>{$e$$?(Logger.error($e$$),$callback$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],$callback$$(null,{new_obj:$rs$$,old_obj:$current_obj$$}))})}catch($e$$){Logger.error("[updateHanlder]",$ctrl$$.name,$e$$),$callback$$($e$$)}},updateHandlerAsync=($ctrl$$,$req$$)=>
|
|
40
|
+
new Promise(($resolve$$,$reject$$)=>{updateHandler($ctrl$$,$req$$,($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}),withSesssion=async($ctrl$$,$req$$,$callback$$)=>{try{const $rs$$=await executeInTransaction(async()=>updateHandlerAsync($ctrl$$,$req$$));$callback$$(null,$rs$$)}catch($e$$){$callback$$($e$$)}};module.exports=withSesssion;module.exports.updateHandler=updateHandler;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
const async=require("async"),_=require("lodash"),view=async($user$$,$self$$,$rows$$,$next$$,$options$$)=>{const $model$$=$self$$.model,$name$$=$self$$.name,$listinfo_code$$=$options$$?.req?.query?.["listinfo-code"]||$options$$?.req?.query?.listinfo_code||$options$$?.req?.headers?.["listinfo-code"]||$options$$?.req?.headers?.["Listinfo-Code"];let $fields_load$$="";$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&($fields_load$$=$options$$.req.query.fields
|
|
2
|
-
$model$$.schema.paths;for(let $index$$=0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];$item$$._id&&typeof $item$$._id!=="string"&&($item$$._id=$item$$._id.toString());delete $item$$.__v;$item$$.stt_sorted=$index$$;delete $item$$.from_cached;_.has($schema_paths$$,"exfields")&&!$item$$.exfields&&($item$$.exfields={})}let $items$$=$rows$$;async.parallel({app:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,
|
|
3
|
-
"app",{where:{id_app:"_id"},fields:{app_name:"name"}});$callback$$(null)})},_Participant_created:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,"participant",{where:{user_created:"email"},fields:{name_user_created:"name"}});await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.name_user_created
|
|
4
|
-
fields:{name_user_created:"name"}});$callback$$(null)})},_Participant_updated:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,global.getModel("participant"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.name_user_updated
|
|
5
|
-
{where:{user_updated:"email"},fields:{name_user_updated:"name"}});$callback$$(null)})},_approve:$callback$$=>{!$fields_load$$||$fields_load$$.indexOf("approve_data")>=0?async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{global.getModel("approve").find({id_ct:$item$$._id.toString(),id_app:$item$$.id_app},{data:0,request_content:0}).sort({data_created:-1}).lean().then(async $rs$$=>{setImmediate(async()=>{$item$$.approve_data=$rs$$||
|
|
6
|
-
$a$$.user_approved||$a$$.user_denied)[0];$item$$.approve_next=$item$$.approve_data.filter($a$$=>!$a$$.user_approved&&!$a$$.user_denied)[0];await $item$$.approve_data.filter($r$$=>$r$$.user_approved).asyncJoinModel2($item$$.id_app,global.getModel("participant"),{where:{user_approved:"email"},fields:{user_approved_name:"name",signature_image:"signature_image"}});await $item$$.approve_data.filter($r$$=>$r$$.user_denied).asyncJoinModel2($item$$.id_app,
|
|
7
|
-
fields:{user_denied_name:"name",signature_image:"signature_image"}});$next$$(null)})}).catch($e$$=>{Logger.error($e$$)})})},()=>{$callback$$(null)}):$callback$$(null)},transfer_ct:$callback$$=>{if(_.has($schema_paths$$,"id_ct_chuyen")&&$user$$.current_app_info&&$user$$.current_app_info.options&&$user$$.current_app_info.options.id_app_thue)async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{$model$$.findOne({id_app:$user$$.current_app_info.options.id_app_thue,
|
|
8
|
-
{_id:1}).lean().then(async $rs$$=>{$rs$$&&($item$$.id_ct_nhan=$rs$$._id);$next$$(null)}).catch($e$$=>{Logger.error($e$$)})})},()=>{$callback$$(null)});else return $callback$$()},posted:$callback$$=>{$options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)?async.mapLimit($items$$,10,($item$$,$next$$)=>{setImmediate(async()=>{let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;
|
|
9
|
-
"sokho"&&$item$$.details?.length>0)if(await $item$$.details.asyncJoinModel2($item$$.id_app,"dmvt",{where:"ma_vt",fields:["tg_tk"]}),$exists_exists$$.ma_vt=1,$exists_exists$$=await global.getModel($book$$).find({id_app:$item$$.id_app,id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$exists_exists$$.length>0){let $ds_vt_voucher$$=$item$$.details.filter($d$$=>$d$$.tg_tk).map($d$$=>$d$$.ma_vt).sort(($a$$,$b$$)=>$a$$-$b$$),$ds_vt_book$$=$exists_exists$$.map($d
|
|
10
|
-
$b$$);$ds_vt_voucher$$.find($v$$=>$ds_vt_book$$.indexOf($v$$)<0)?$item$$[`${$book$$}_posted`]=!1:$item$$[`${$book$$}_posted`]=!0}else $item$$[`${$book$$}_posted`]=!1;else $exists_exists$$=await global.getModel($book$$).findOne({id_app:$item$$.id_app,id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$item$$[`${$book$$}_posted`]=!!$exists_exists$$;$next$$()})},()=>{$callback$$(null)}):$callback$$()}},$e$$=>{if($e$$)return $next$$($e$$);if($options$$&&$options$$.req&&
|
|
11
|
-
$options$$.req.query.show_not_post_book)){let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;$items$$=$items$$.filter($r$$=>$options$$.req.query.show_posted_book?$r$$[`${$book$$}_posted`]:!$r$$[`${$book$$}_posted`])}let $items_need_view$$=$items$$.filter($i$$=>!$i$$.from_cached),$items_cached$$=$items$$.filter($i$$=>$i$$.from_cached);async.series({view:$callback$$=>{if($self$$.view)try{$self$$.view($user$$,$items_need_view$$,
|
|
12
|
-
{if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)})},$options$$)}catch($e$$){Logger.error("Error on view of",$name$$,$e$$),$callback$$(null,$items_need_view$$)}else $callback$$(null,$items_need_view$$)},dynamicView:$callback$$=>{$self$$.dynamicView?$self$$.dynamicView($user$$,$items_need_view$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items_need_view$$=$rs
|
|
13
|
-
{listinfo_code:$listinfo_code$$,req:$options$$?.req}):$callback$$(null,$items_need_view$$)},viewRequired:$callback$$=>{$items$$=[...$items_cached$$,...$items_need_view$$].sort(($a$$,$b$$)=>$a$$.stt_sorted-$b$$.stt_sorted);if($self$$.viewRequired)try{$self$$.viewRequired($user$$,$items$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items$$=$rs$$||$items$$;$callback$$(null,$items$$)},$options$$)}catch($e$$){Logger.error("Error on viewRequired of"
|
|
14
|
-
$items$$)}else $callback$$(null,$items$$)}},$error$$=>{if($error$$)return $next$$($error$$);$next$$(null,$items$$)})})};module.exports=view;
|
|
1
|
+
const async=require("async"),_=require("lodash"),view=async($user$$,$self$$,$rows$$,$next$$,$options$$)=>{const $model$$=$self$$.model,$name$$=$self$$.name,$listinfo_code$$=$options$$?.req?.query?.["listinfo-code"]||$options$$?.req?.query?.listinfo_code||$options$$?.req?.headers?.["listinfo-code"]||$options$$?.req?.headers?.["Listinfo-Code"];let $fields_load$$="";$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&($fields_load$$=$options$$.req.query.fields,typeof $fields_load$$==
|
|
2
|
+
"object"&&($fields_load$$=JSON.stringify($fields_load$$)));let $schema_paths$$=$model$$.schema.paths;for(let $index$$=0;$index$$<$rows$$.length;$index$$++){const $item$$=$rows$$[$index$$];$item$$._id&&typeof $item$$._id!=="string"&&($item$$._id=$item$$._id.toString());delete $item$$.__v;$item$$.stt_sorted=$index$$;delete $item$$.from_cached;_.has($schema_paths$$,"exfields")&&!$item$$.exfields&&($item$$.exfields={})}let $items$$=$rows$$;async.parallel({app:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,
|
|
3
|
+
"id_app")&&await $items$$.filter($item$$=>$item$$.id_app).asyncJoinModel2(null,"app",{where:{id_app:"_id"},fields:{app_name:"name"}});$callback$$(null)})},_Participant_created:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,"participant",{where:{user_created:"email"},fields:{name_user_created:"name"}});await $items$$.filter($item$$=>$item$$.user_created&&!$item$$.name_user_created&&
|
|
4
|
+
!$item$$.from_cached).asyncJoinModel2(null,"user",{where:{user_created:"email"},fields:{name_user_created:"name"}});$callback$$(null)})},_Participant_updated:$callback$$=>{setImmediate(async()=>{_.has($schema_paths$$,"id_app")&&await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.from_cached).asyncJoinModel2($user$$.current_id_app,global.getModel("participant"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});await $items$$.filter($item$$=>$item$$.user_updated&&!$item$$.name_user_updated&&
|
|
5
|
+
!$item$$.from_cached).asyncJoinModel2(null,global.getModel("user"),{where:{user_updated:"email"},fields:{name_user_updated:"name"}});$callback$$(null)})},_approve:$callback$$=>{!$fields_load$$||$fields_load$$.indexOf("approve_data")>=0?async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{global.getModel("approve").find({id_ct:$item$$._id.toString(),id_app:$item$$.id_app},{data:0,request_content:0}).sort({data_created:-1}).lean().then(async $rs$$=>{setImmediate(async()=>{$item$$.approve_data=$rs$$||
|
|
6
|
+
[];$item$$.approved_latest=$item$$.approve_data.filter($a$$=>$a$$.user_approved||$a$$.user_denied)[0];$item$$.approve_next=$item$$.approve_data.filter($a$$=>!$a$$.user_approved&&!$a$$.user_denied)[0];await $item$$.approve_data.filter($r$$=>$r$$.user_approved).asyncJoinModel2($item$$.id_app,global.getModel("participant"),{where:{user_approved:"email"},fields:{user_approved_name:"name",signature_image:"signature_image"}});await $item$$.approve_data.filter($r$$=>$r$$.user_denied).asyncJoinModel2($item$$.id_app,
|
|
7
|
+
global.getModel("participant"),{where:{user_denied:"email"},fields:{user_denied_name:"name",signature_image:"signature_image"}});$next$$(null)})}).catch($e$$=>{Logger.error($e$$)})})},()=>{$callback$$(null)}):$callback$$(null)},transfer_ct:$callback$$=>{if(_.has($schema_paths$$,"id_ct_chuyen")&&$user$$.current_app_info&&$user$$.current_app_info.options&&$user$$.current_app_info.options.id_app_thue)async.map($items$$,($item$$,$next$$)=>{setImmediate(()=>{$model$$.findOne({id_app:$user$$.current_app_info.options.id_app_thue,
|
|
8
|
+
id_ct_chuyen:$item$$._id.toString()},{_id:1}).lean().then(async $rs$$=>{$rs$$&&($item$$.id_ct_nhan=$rs$$._id);$next$$(null)}).catch($e$$=>{Logger.error($e$$)})})},()=>{$callback$$(null)});else return $callback$$()},posted:$callback$$=>{$options$$&&$options$$.req&&($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)?async.mapLimit($items$$,10,($item$$,$next$$)=>{setImmediate(async()=>{let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;
|
|
9
|
+
var $exists_exists$$={_id:1};if($book$$=="sokho"&&$item$$.details?.length>0)if(await $item$$.details.asyncJoinModel2($item$$.id_app,"dmvt",{where:"ma_vt",fields:["tg_tk"]}),$exists_exists$$.ma_vt=1,$exists_exists$$=await global.getModel($book$$).find({id_app:$item$$.id_app,id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$exists_exists$$.length>0){let $ds_vt_voucher$$=$item$$.details.filter($d$$=>$d$$.tg_tk).map($d$$=>$d$$.ma_vt).sort(($a$$,$b$$)=>$a$$-$b$$),$ds_vt_book$$=$exists_exists$$.map($d$$=>
|
|
10
|
+
$d$$.ma_vt).sort(($a$$,$b$$)=>$a$$-$b$$);$ds_vt_voucher$$.find($v$$=>$ds_vt_book$$.indexOf($v$$)<0)?$item$$[`${$book$$}_posted`]=!1:$item$$[`${$book$$}_posted`]=!0}else $item$$[`${$book$$}_posted`]=!1;else $exists_exists$$=await global.getModel($book$$).findOne({id_app:$item$$.id_app,id_ct:$item$$._id.toString()},$exists_exists$$).lean(),$item$$[`${$book$$}_posted`]=!!$exists_exists$$;$next$$()})},()=>{$callback$$(null)}):$callback$$()}},$e$$=>{if($e$$)return $next$$($e$$);if($options$$&&$options$$.req&&
|
|
11
|
+
($options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book)){let $book$$=$options$$.req.query.show_posted_book||$options$$.req.query.show_not_post_book;$items$$=$items$$.filter($r$$=>$options$$.req.query.show_posted_book?$r$$[`${$book$$}_posted`]:!$r$$[`${$book$$}_posted`])}let $items_need_view$$=$items$$.filter($i$$=>!$i$$.from_cached),$items_cached$$=$items$$.filter($i$$=>$i$$.from_cached);async.series({view:$callback$$=>{if($self$$.view)try{$self$$.view($user$$,$items_need_view$$,
|
|
12
|
+
function($error$$,$rs$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||$items_need_view$$;$callback$$(null,$items_need_view$$)})},$options$$)}catch($e$$){Logger.error("Error on view of",$name$$,$e$$),$callback$$(null,$items_need_view$$)}else $callback$$(null,$items_need_view$$)},dynamicView:$callback$$=>{$self$$.dynamicView?$self$$.dynamicView($user$$,$items_need_view$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items_need_view$$=$rs$$||
|
|
13
|
+
$items_need_view$$;$callback$$(null,$items_need_view$$)},{listinfo_code:$listinfo_code$$,req:$options$$?.req}):$callback$$(null,$items_need_view$$)},viewRequired:$callback$$=>{$items$$=[...$items_cached$$,...$items_need_view$$].sort(($a$$,$b$$)=>$a$$.stt_sorted-$b$$.stt_sorted);if($self$$.viewRequired)try{$self$$.viewRequired($user$$,$items$$,function($error$$,$rs$$){if($error$$)return $callback$$($error$$);$items$$=$rs$$||$items$$;$callback$$(null,$items$$)},$options$$)}catch($e$$){Logger.error("Error on viewRequired of",
|
|
14
|
+
$name$$,$e$$),$callback$$(null,$items$$)}else $callback$$(null,$items$$)}},$error$$=>{if($error$$)return $next$$($error$$);$next$$(null,$items$$)})})};module.exports=view;
|
package/server/flow/handlers.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const inject=require("./nodes/inject"),debug=require("./nodes/debug"),delay=require("./nodes/delay"),email=require("./nodes/email"),_function=require("./nodes/function"),forEachItem=require("./nodes/forEachItem"),_switch=require("./nodes/switch"),httprequest=require("./nodes/httprequest"),webhook=require("./nodes/webhook"),facebook=require("./nodes/facebook"),facebooksendmessage=require("./nodes/facebookSendMessage"),facebookconversations=require("./nodes/facebookConversations"),facebookcreatepost=
|
|
2
|
-
require("./nodes/facebookCreatePost"),aianalysis=require("./nodes/aiAnalysis"),savedata=require("./nodes/saveData"),customer=require("./nodes/customer"),report=require("./nodes/report"),data=require("./nodes/data"),event=require("./nodes/event"),pushnotification=require("./nodes/pushNotification"),zalosendmessage=require("./nodes/zaloSendMessage");
|
|
3
|
-
module.exports={inject,debug,function:_function,foreachitem:forEachItem,switch:_switch,delay,email,httprequest,webhook,facebook,facebooksendmessage,facebookconversations,facebookcreatepost,aianalysis,savedata,customer,report,data,event,pushnotification,zalosendmessage};
|
|
2
|
+
require("./nodes/facebookCreatePost"),aianalysis=require("./nodes/aiAnalysis"),savedata=require("./nodes/saveData"),customer=require("./nodes/customer"),report=require("./nodes/report"),data=require("./nodes/data"),event=require("./nodes/event"),pushnotification=require("./nodes/pushNotification"),zalosendmessage=require("./nodes/zaloSendMessage"),checkaction=require("./nodes/checkAction");
|
|
3
|
+
module.exports={inject,debug,function:_function,foreachitem:forEachItem,switch:_switch,delay,email,httprequest,webhook,facebook,facebooksendmessage,facebookconversations,facebookcreatepost,aianalysis,savedata,customer,report,data,event,pushnotification,zalosendmessage,checkaction};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const {runWorkflowAgent}=require("../../agents/agents"),async=require("async"),_=require("lodash");
|
|
2
2
|
function parseJsonReplacingOnlyQuotes($jsonStringWithEntities$$){if(typeof $jsonStringWithEntities$$!=="string")return Logger.error("Input must be a string."),null;let $correctedString$$=$jsonStringWithEntities$$.trim();try{return $correctedString$$.startsWith('"```json')?$correctedString$$=$correctedString$$.substring(8).trimStart():$correctedString$$.startsWith("```json")&&($correctedString$$=$correctedString$$.substring(7).trimStart()),$correctedString$$.endsWith("```")&&($correctedString$$=$correctedString$$.substring(0,
|
|
3
3
|
$correctedString$$.length-3).trimEnd()),$correctedString$$=$correctedString$$.replace(/"/g,'"'),JSON.parse($correctedString$$)}catch($error$$){return Logger.error("Error parsing JSON string after corrections:",$error$$),Logger.error("Original string:",$jsonStringWithEntities$$),Logger.error("Corrected string attempt:",$correctedString$$),$jsonStringWithEntities$$}}
|
|
4
|
-
async function aiAnalysisHandler($
|
|
5
|
-
Logger.info(`[${$
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"AbortError");
|
|
9
|
-
|
|
4
|
+
async function aiAnalysisHandler($flowState$$,$node$$,$payload$$,$abortSignal$$){const $nodeInstanceId$$=`${$flowState$$.instanceId}-${$node$$.id}`,$nodeLabel$$=$node$$.data?.name||$node$$.id||"AI Analysis Node",$id_app$$=$flowState$$.flowDefinition.id_app;let $prompt$$=$node$$.data?.prompt,$handle_multi_line$$=$node$$.data?.handle_multi_line;if(!$payload$$||$payload$$.length==0)throw Error("Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u \u0111\u1ec3 ph\u00e2n t\u00edch");if(!$prompt$$)throw Error("Thi\u1ebfu y\u00eau c\u1ea7u ph\u00e2n t\u00edch");
|
|
5
|
+
Logger.info(`[${$nodeInstanceId$$}] ${$nodeLabel$$}: Executing.`);if($abortSignal$$.aborted)throw Logger.info(`[${$nodeInstanceId$$}] ${$nodeLabel$$}: Aborted before execution.`),new DOMException("Aborted before AI analysis","AbortError");Logger.info(`[${$nodeInstanceId$$}] ${$nodeLabel$$}: Sending conversation to AI for analysis...`);try{const $analysisResults$$=await new Promise(($resolve$$,$reject$$)=>{if($handle_multi_line$$){let $conversationData$$;$conversationData$$=_.isArray($payload$$)?$payload$$:
|
|
6
|
+
[$payload$$];async.mapSeries($conversationData$$,($data$$,$cb$$)=>{setImmediate(async()=>{try{const $analysisResult$$=await runWorkflowAgent($id_app$$,null,null,`${$prompt$$}`,$payload$$);if($abortSignal$$.aborted)throw new DOMException("Aborted during/after AI analysis","AbortError");let $result$$=parseJsonReplacingOnlyQuotes($analysisResult$$.reply)||$analysisResult$$.reply;$result$$&&$result$$.length==1&&($result$$=$result$$[0]);$conversationData$$.length>10?setTimeout(()=>{$cb$$(null,$result$$)},
|
|
7
|
+
10):$cb$$(null,$result$$)}catch($e$$){$cb$$($e$$)}})},($e$$,$rs$$)=>{if($e$$)return $reject$$($e$$);$resolve$$($rs$$)})}else setImmediate(async()=>{try{const $analysisResult$$=await runWorkflowAgent($id_app$$,null,null,`${$prompt$$}`,$payload$$);if($abortSignal$$.aborted)throw new DOMException("Aborted during/after AI analysis","AbortError");let $result$$=parseJsonReplacingOnlyQuotes($analysisResult$$.reply)||$analysisResult$$.reply;$resolve$$($result$$)}catch($e$$){$reject$$($e$$)}})});if($abortSignal$$.aborted)throw Logger.info(`[${$nodeInstanceId$$}] ${$nodeLabel$$}: Aborted during/after AI analysis.`),
|
|
8
|
+
new DOMException("Aborted during/after AI analysis","AbortError");Logger.info(`[${$nodeInstanceId$$}] ${$nodeLabel$$}: AI analysis successful.`);return $analysisResults$$}catch($error$$){if($error$$.name==="AbortError"||$error$$ instanceof DOMException&&$error$$.name==="AbortError")throw Logger.info(`[${$nodeInstanceId$$}] ${$nodeLabel$$}: AI analysis explicitly aborted.`),$error$$;Logger.error(`[${$nodeInstanceId$$}] ${$nodeLabel$$}: Error during AI analysis:`,$error$$);throw Error(`AI analysis failed: ${$error$$.message}`);
|
|
9
|
+
}}module.exports=aiAnalysisHandler;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const _=require("lodash"),ActionLog=global.getModel("actionLog");
|
|
2
|
+
async function checkActionHandler($flowState_nodeInstanceId$$,$mode_node$$,$existingLog_payload$$,$abortSignal_extractedKey_result$$){$flowState_nodeInstanceId$$=`${$flowState_nodeInstanceId$$.instanceId}-${$mode_node$$.id}`;var $fullActionKey_keyPath_nodeData$$=$mode_node$$.data||{};$mode_node$$=$fullActionKey_keyPath_nodeData$$.mode||"check_and_lock";const $actionType$$=$fullActionKey_keyPath_nodeData$$.actionType||"UNKNOWN_ACTION";$fullActionKey_keyPath_nodeData$$=$fullActionKey_keyPath_nodeData$$.idempotencyKeyPath;
|
|
3
|
+
if($abortSignal_extractedKey_result$$.aborted)throw new DOMException("Aborted","AbortError");$abortSignal_extractedKey_result$$=$fullActionKey_keyPath_nodeData$$?_.get($existingLog_payload$$,$fullActionKey_keyPath_nodeData$$):null;if(!$abortSignal_extractedKey_result$$)throw Logger.error(`[${$flowState_nodeInstanceId$$}] Kh\u00f4ng t\u00ecm th\u1ea5y gi\u00e1 tr\u1ecb kh\u00f3a t\u1ea1i \u0111\u01b0\u1eddng d\u1eabn '${$fullActionKey_keyPath_nodeData$$}' trong payload.`),Error(`Missing Idempotency Key at path: ${$fullActionKey_keyPath_nodeData$$}`);
|
|
4
|
+
$fullActionKey_keyPath_nodeData$$=`${$actionType$$}_${$abortSignal_extractedKey_result$$}`;Logger.info(`[${$flowState_nodeInstanceId$$}] Ch\u1ea1y mode '${$mode_node$$}' cho kh\u00f3a: ${$fullActionKey_keyPath_nodeData$$}`);$abortSignal_extractedKey_result$$={isDuplicate:!1,actionKey:$fullActionKey_keyPath_nodeData$$,actionStatus:null,originalPayload:$existingLog_payload$$};try{switch($mode_node$$){case "check_and_lock":await (new ActionLog({idempotencyKey:$fullActionKey_keyPath_nodeData$$,actionType:$actionType$$,
|
|
5
|
+
status:"PENDING",payload:$existingLog_payload$$})).save();$abortSignal_extractedKey_result$$.actionStatus="PENDING";$abortSignal_extractedKey_result$$.isDuplicate=!1;break;case "mark_success":await ActionLog.updateOne({idempotencyKey:$fullActionKey_keyPath_nodeData$$},{$set:{status:"SUCCESS",result:$existingLog_payload$$}});$abortSignal_extractedKey_result$$.actionStatus="SUCCESS";break;case "mark_failed":await ActionLog.updateOne({idempotencyKey:$fullActionKey_keyPath_nodeData$$},{$set:{status:"FAILED",
|
|
6
|
+
result:$existingLog_payload$$}});$abortSignal_extractedKey_result$$.actionStatus="FAILED";break;default:throw Error(`Invalid mode: ${$mode_node$$}`);}}catch($error$$){if($error$$.code===11E3&&$mode_node$$==="check_and_lock")Logger.warn(`[${$flowState_nodeInstanceId$$}] PH\u00c1T HI\u1ec6N TR\u00d9NG L\u1eb6P: H\u00e0nh \u0111\u1ed9ng [${$fullActionKey_keyPath_nodeData$$}] \u0111\u00e3 ho\u1eb7c \u0111ang \u0111\u01b0\u1ee3c th\u1ef1c thi.`),$abortSignal_extractedKey_result$$.isDuplicate=!0,$existingLog_payload$$=
|
|
7
|
+
await ActionLog.findOne({idempotencyKey:$fullActionKey_keyPath_nodeData$$}).lean(),$abortSignal_extractedKey_result$$.actionStatus=$existingLog_payload$$?$existingLog_payload$$.status:"UNKNOWN";else throw Logger.error(`[${$flowState_nodeInstanceId$$}] Database Error:`,$error$$),$error$$;}return $abortSignal_extractedKey_result$$}module.exports=checkActionHandler;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
const emailService=require("../../libs/email"),_=require("lodash");function sendEmailPromise($options$$){return new Promise(($resolve$$,$reject$$)=>{emailService.sendHtml($options$$,function($error$$){if($error$$){const $err$$=Error($error$$.message||$error$$.error||String($error$$));$err$$.originalError=$error$$;return $reject$$($err$$)}$resolve$$()})})}
|
|
2
|
-
async function emailHandler($flowState_id_app_sendPromises$$,$app_info_node_nodeData$$,$
|
|
3
|
-
{};$app_info_node_nodeData$$.to&&$app_info_node_nodeData$$.subject&&$app_info_node_nodeData$$.message&&$
|
|
4
|
-
{status:"no_receivers",successful:[],failed:[]};if($abortSignal$$.aborted)throw Logger.info(`[${$nodeInstanceId$$}] Email node aborted before sending.`),new DOMException("Aborted before sending emails","AbortError");$app_info_node_nodeData$$=null;if($flowState_id_app_sendPromises$$=$flowState_id_app_sendPromises$$.flowDefinition.id_app)try{
|
|
5
|
-
|
|
6
|
-
$
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
module.exports=emailHandler;
|
|
2
|
+
async function emailHandler($flowState_id_app_sendPromises$$,$app_info_node_nodeData$$,$payload_validReceivers$$,$abortSignal$$){const $nodeInstanceId$$=`${$flowState_id_app_sendPromises$$.instanceId}-${$app_info_node_nodeData$$.id}`;Logger.info(`[${$nodeInstanceId$$}] Starting email node.`);let $receivers$$=[];$payload_validReceivers$$&&(_.isArray($payload_validReceivers$$)?$payload_validReceivers$$:[$payload_validReceivers$$]).forEach($item$$=>{_.isObject($item$$)&&$receivers$$.push({to:$item$$.to,
|
|
3
|
+
subject:$item$$.subject,message:$item$$.message,source:"payload",inputPayload:$item$$})});$app_info_node_nodeData$$=$app_info_node_nodeData$$.data||{};$app_info_node_nodeData$$.to&&$app_info_node_nodeData$$.subject&&$app_info_node_nodeData$$.message&&$receivers$$.push({to:$app_info_node_nodeData$$.to,subject:$app_info_node_nodeData$$.subject,message:$app_info_node_nodeData$$.message,source:"node_config",inputPayload:$payload_validReceivers$$});$payload_validReceivers$$=$receivers$$.filter($r$$=>$r$$&&
|
|
4
|
+
$r$$.to&&$r$$.subject&&$r$$.message);if($payload_validReceivers$$.length===0)return Logger.warn(`[${$nodeInstanceId$$}] No valid receivers found. Skipping email send.`),{status:"no_receivers",successful:[],failed:[]};if($abortSignal$$.aborted)throw Logger.info(`[${$nodeInstanceId$$}] Email node aborted before sending.`),new DOMException("Aborted before sending emails","AbortError");$app_info_node_nodeData$$=null;if($flowState_id_app_sendPromises$$=$flowState_id_app_sendPromises$$.flowDefinition.id_app)try{$app_info_node_nodeData$$=
|
|
5
|
+
await global.getModel("app").findOne({_id:$flowState_id_app_sendPromises$$}).lean()}catch($dbError$$){throw Logger.error(`[${$nodeInstanceId$$}] Failed to fetch app info:`,$dbError$$),Error(`Failed to fetch app info: ${$dbError$$.message}`);}$flowState_id_app_sendPromises$$=[];const $results$$={successful:[],failed:[]};for(const $receiver$$ of $payload_validReceivers$$){if($abortSignal$$.aborted){Logger.info(`[${$nodeInstanceId$$}] Email sending aborted during loop.`);$payload_validReceivers$$.slice($flowState_id_app_sendPromises$$.length).forEach($r$$=>
|
|
6
|
+
$results$$.failed.push({receiver:$r$$,error:"Aborted"}));break}const {to:$to$$,subject:$subject$$,message:$message$$}=$receiver$$,$sendPromise$$=sendEmailPromise({to:{address:$to$$},subject:$subject$$,html:$message$$,app_info:$app_info_node_nodeData$$}).then(()=>({status:"fulfilled",receiver:$receiver$$})).catch($error$$=>({status:"rejected",reason:$error$$,receiver:$receiver$$}));$flowState_id_app_sendPromises$$.push($sendPromise$$)}(await Promise.allSettled($flowState_id_app_sendPromises$$)).forEach($failedReceiver_result$$=>
|
|
7
|
+
{if($failedReceiver_result$$.status==="fulfilled")$results$$.successful.push($failedReceiver_result$$.value.receiver);else{const $originalReason$$=$failedReceiver_result$$.reason?.reason||$failedReceiver_result$$.reason||Error("Unknown rejection reason");$failedReceiver_result$$=$failedReceiver_result$$.reason?.receiver||{to:"unknown",subject:"unknown"};Logger.error(`[${$nodeInstanceId$$}] Failed to send email to ${$failedReceiver_result$$.to}:`,$originalReason$$.message||$originalReason$$);$results$$.failed.push({receiver:$failedReceiver_result$$,
|
|
8
|
+
error:$originalReason$$.message||String($originalReason$$)})}});if($abortSignal$$.aborted)throw new DOMException("Email sending process aborted","AbortError");Logger.info(`[${$nodeInstanceId$$}] Email sending finished. Successful: ${$results$$.successful.length}, Failed: ${$results$$.failed.length}`);return $results$$}module.exports=emailHandler;
|