UNPKG

flexbiz-server

Version:

Flexible Server

67 lines (65 loc) 30.9 kB
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}= 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"}}; 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$$]= 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$$, [$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$$} const hasRight=async($ctrl$$,$req$$,$listinfo_code$$,$id_app$$,$shareRoute$$)=>{if(!$shareRoute$$)return new Promise(($resolve$$,$reject$$)=>{setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,{action:"view"});permission.hasRight($id_app$$,$req$$.user.email,$ctrl$$.module,"view",function($e$$,$permission$$){$e$$&&Logger.error("[findHandler] [hasRight] L\u1ed7i Kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp:",$req$$.user.email,$e$$);if($ctrl$$.options.onQuery)$ctrl$$.options.onQuery($req$$, $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&& $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$$, $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$$, 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;let $all_app$$=$query$$.all_app;$req$$.query=$query$$;if($query$$.sort)if(typeof $query$$.sort=="object")var $or_sort$$=$query$$.sort;else try{$or_sort$$= JSONParser($query$$.sort)}catch($e$$){throw Logger.error("error parse json",$e$$,$query$$.sort),`Sort ${$query$$.sort} is not valid`;}!$or_sort$$&&$ctrl$$.sort&&($or_sort$$=Object.assign({},$ctrl$$.sort));$req$$.sort=$or_sort$$;$req$$.fetch_by_groups=$query$$.fetch_by_groups;delete $query$$.fetch_by_groups;let $condition$$={};$or_sort$$=[];const $hasCodeByName$$=$k$$=>FIELDS_NEED_CONVERT_CODE[$k$$]&&_.has($ctrl$$.model.schema.paths,FIELDS_NEED_CONVERT_CODE[$k$$].code)&&$ctrl$$.model.modelName!==FIELDS_NEED_CONVERT_CODE[$k$$].model? !0:!1;for(var $k$$ in $query$$)if($k$$!=="id_app"&&$k$$!=="access_token"&&$k$$!=="limit")if($k$$==="_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($k$$==="q"&&$query$$[$k$$])try{let $q$$=_.isObject($query$$[$k$$])?$query$$[$k$$]:JSONParser($query$$[$k$$]);$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$$ in $q$$)if(typeof $q$$[$k$$]=="string"&&$ctrl$$.model.schema.paths[$k$$]?.instance?.toLowerCase()=="date"){let {fromDate:$fromDate$$,toDate:$toDate$$}= getDateRangeByType($q$$[$k$$]);$fromDate$$&&$toDate$$&&($q$$[$k$$]={$gte:$fromDate$$,$lte:$toDate$$})}($condition$$=$q$$)||($condition$$={});continue}catch($e$$){throw Logger.error("find condition",$e$$,$query$$[$k$$]),"Condition is not valid";}if($k$$!=="fields"&&(_.has($ctrl$$.model.schema.paths,$k$$)||$hasCodeByName$$($k$$)))if($ctrl$$.options.findExact[$k$$])$condition$$[$k$$]=$query$$[$k$$];else{let $item$$={};if($ctrl$$.model.schema.paths[$k$$].instance.toLowerCase()=="number")$item$$[$k$$]= Number($query$$[$k$$]);else if($ctrl$$.model.schema.paths[$k$$].instance.toLowerCase()=="date"){let {fromDate:$fromDate$$,toDate:$toDate$$}=getDateRangeByType($query$$[$k$$]);$item$$[$k$$]=$fromDate$$&&$toDate$$?{$gte:$fromDate$$,$lte:$toDate$$}:new Date($query$$[$k$$])}else $ctrl$$.model.schema.paths[$k$$].instance.toLowerCase()=="string"?$item$$[$k$$]={$regex:($query$$[$k$$]||"").trim(),$options:"i"}:$item$$[$k$$]=$query$$[$k$$];$or_sort$$.push($item$$)}else $k$$==="$text"&&$or_sort$$.push({$text:{$search:$query$$[$k$$]}})}$or_sort$$.length!== 0&&($query$$.cType==="$and"?$condition$$.$and=$or_sort$$:$condition$$.$or=$or_sort$$);$k$$=queryBuilding.convertLegacyQuery(_.cloneDeep($condition$$));$condition$$=queryBuilding.buildSearchQuery($k$$);$appConditions_shareRoute$$||$ctrl$$.require_id_app==0?$appConditions_shareRoute$$=[{id_app:$req$$.user.current_id_app,condition:{...$condition$$,id_app:$req$$.user.current_id_app}}]:($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$$=$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,$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,$_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$$})})}),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,$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("");$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=[]),$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$$!=$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"&&($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$$==="_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$$=>$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$$);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]=$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>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$$));$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$$,$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$$,...$fields_fields$jscomp$1_groups_number_notfields_rows_number$$}:$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$$&&(($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$$}:$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"});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$$=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$$}]);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]",$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$$]!=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$$&&$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||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$$}=$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;$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$$=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!=="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$$=$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$$};$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",$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=$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||$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$$}`;$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,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"});$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$$=`${$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$$={};$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 ()=>{ try{ ${$excelTemplate$$.handle_data} }catch(e){ return {error:e} } })`;try{if(($app_dir_root_template_fileName$$=await evalute($_rs_func_string_rs$$,{data:$app_dir_root_template_fileName$$,moment,numeral,_,utils})())&&$app_dir_root_template_fileName$$.error)return Logger.error($app_dir_root_template_fileName$$.error,$_rs_func_string_rs$$),$callback$$({error:$app_dir_root_template_fileName$$.error.message||$app_dir_root_template_fileName$$.error.error||$app_dir_root_template_fileName$$.error})}catch($e$$){return Logger.error($e$$,$_rs_func_string_rs$$), $callback$$({error:$e$$.message||$e$$.error||$e$$})}}excelReport($_groupBy_template$jscomp$1_template$$,$app_dir_root_template_fileName$$,function($e$$,$result$$){if($e$$)return Logger.error("excelReport",$e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$result$$;$req$$.dataType="xlsx";$callback$$("0")},{timezone:configs.timezone||"Asia/Ho_Chi_Minh"})}else $req$$.query.print&&$req$$.query.id_rpt&&global.mongoose.Types.ObjectId.isValid($req$$.query.id_rpt)?htmlReport($req$$.query.id_rpt, {...$req$$.user.current_app_info,...$req$$.query,company:{...$req$$.user.current_app_info},detail:$_rs_func_string_rs$$.e_view,details:$_rs_func_string_rs$$.e_view,items:$_rs_func_string_rs$$.e_view}).then($rs$$=>{$req$$.result=$rs$$;$callback$$("0")},$e$$=>{Logger.error("htmlReport",$e$$);$callback$$($e$$)}):($_rs_func_string_rs$$=$_rs_func_string_rs$$.e_view,$req$$.query.groupBy?($_groupBy_template$jscomp$1_template$$=$req$$.query.groupBy.split(","),$_rs_func_string_rs$$.groupBy($_groupBy_template$jscomp$1_template$$, [],($e$$,$_items$$)=>{if($e$$)return Logger.error("jsonReport",$e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});$req$$.result=$_items$$;$callback$$("0")})):($req$$.result=$_rs_func_string_rs$$,$callback$$("0")))})})})})})}],$e$$=>{if($e$$&&$e$$!="0")return $callback$$($e$$);$callback$$(null,{result:$req$$.pagination?{data:$req$$.result,pagination:$req$$.pagination}:$req$$.result,dataType:$req$$.dataType||"json"})})};module.exports=findHanlder;