UNPKG

flexbiz-server

Version:

Flexible Server

18 lines (17 loc) 8.53 kB
const async=require("async"),_=require("lodash"),excelReport=require("excel-report"),fs=require("fs"),path=require("path"),permission=require("../libs/permission"),htmlReport=require("../libs/htmlReport"),textReport=require("../libs/textReport"),{ERRORS,getParameters,prepareParameters}=require("./controllerUtils"),exportHandler=($ctrl$$,$req$$,$callback$$)=>{const $user$$=$req$$.user,$model$$=$ctrl$$.model,$query$$=$req$$.query;let $listinfo_code$$=$req$$.query["listinfo-code"];async.series([function($callback$$){let $id$$= $query$$._id;if(!$id$$)return $callback$$({error:"H\u00e0m n\u00e0y y\u00eau c\u1ea7u tham s\u1ed1 _id"});let $ids$$=$id$$.split(",");$model$$.find({_id:{$in:$ids$$}}).lean().then(function($obj$$){setImmediate(()=>{global.getModel("log").create({id_app:$user$$.current_id_app,id_func:$ctrl$$.name,action:"ExportTOExcel",data:{id:$id$$}},$user$$.email,$req$$.user_agent,$req$$)});if($obj$$.length==0)return $callback$$({error:ERRORS.ERR_NOT_HAVE_DATA,code:ERRORS.ERR_NOT_HAVE_DATA_CODE});$ctrl$$.getting? async.mapLimit($obj$$,20,function($ob$$,$callback$$){setImmediate(()=>{$ctrl$$.getting($user$$,$ob$$._id,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null)},$ob$$)})},function($e$$){if($e$$)return Logger.error("exportToExcel",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.obj=$obj$$;$callback$$()}):($req$$.obj=$obj$$,$callback$$())}).catch($e$$=>{Logger.error("exportToExcel query",$e$$);return $e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message|| $e$$})})},function($callback$$){async.mapLimit($req$$.obj,20,function($obj$$,$callback$$){setImmediate(async()=>{let $notNeedRight$$=await $ctrl$$.notNeedRight($user$$,{action:"view"});permission.hasRight($obj$$.id_app,$user$$.email,$ctrl$$.module,"view",function($error$$,$permission$$){$permission$$?$callback$$():($error$$=$error$$||"",$callback$$({error:$error$$.error||$error$$||ERRORS.ERR_NOT_PERMIT,code:$error$$.code||ERRORS.ERR_NOT_PERMIT_CODE}))},{data:$obj$$,notNeedRight:$notNeedRight$$,listinfo_code:$listinfo_code$$})})}, function($e$$){if($e$$)return Logger.error("exportToExcel permission",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$callback$$()})},function($callback$$){let $objs$$=$req$$.obj;if($objs$$)$ctrl$$.onView($user$$,$objs$$,function($e$$,$viewValue$$){if($e$$)return Logger.error("exportToExcel onview",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.obj=$viewValue$$;$callback$$()},{req:$req$$});else $callback$$()},function($callback$$){let $objs$$= $req$$.obj;$ctrl$$.options.onExport&&$objs$$?async.mapLimit($objs$$,20,function($obj$$,$callback$$){setImmediate(()=>{$ctrl$$.options.onExport($user$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$()})})},function($e$$){if($e$$)return Logger.error("exportToExcel onExport",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$callback$$()}):$callback$$()},function($callback$$){let $rpt_id$$=$req$$.params.rpt_id,$id_app$$=$query$$.id_app,$query_rpt$$= {ma_cn:($query$$["listinfo-code"]||$ctrl$$.module).toUpperCase(),id_app:$id_app$$};global.getModel("rpt").find($query_rpt$$).lean().then(function($rps$$){let $objs$$=$req$$.obj,$rs$$=_.find($rps$$,function($r$$){return $r$$._id.toString()===$rpt_id$$});if(!$rs$$)return $callback$$({error:"Kh\u00f4ng t\u00ecm th\u1ea5y file m\u1eabu"});global.getModel("app").findOne({_id:$id_app$$},{viettel_user:0,viettel_password:0,viettel_url_service:0,vnpt_user:0,vnpt_password:0,vnpt_url_service:0,easy_user:0,easy_password:0, easy_url_service:0,zalo_app_id:0,zalo_secret_key:0,zalo_code:0,zalo_oa_id:0,zalo_code_verifier:0,zalo_code_challenge:0,zalo_access_token:0,zalo_refresh_token:0,google_credentials:0,sip_uri:0,sip_password:0,sip_websocket:0,voiip_access_token:0,voiip_webhook:0,wallet_address:0,wallet_token:0,owner:0,default_password:0,email_host:0,email_port:0,email_secure:0,email_authMethod:0,email_user:0,email_pass:0,email_name:0,exfields:0,ssl_key:0,ssl_cert:0,ssl_ca:0}).lean().then(function($_app$$){setImmediate(()=> {delete $_app$$.participants;delete $_app$$.expire_date;delete $_app$$.sale_online;_.extend($_app$$,$query$$);delete $_app$$.access_token;let $data4export$$=[];$objs$$.forEach(function($_data_obj$$){for(let $_obj_c$$ in $_data_obj$$)if(_.isObject($_data_obj$$[$_obj_c$$]))for(let $k$$ in $_data_obj$$[$_obj_c$$])if($k$$.indexOf("ngay")>=0||$k$$.indexOf("date")>=0)try{$_data_obj$$[$_obj_c$$+"_"+$k$$]=new Date($_data_obj$$[$_obj_c$$][$k$$])}catch($e$$){$_data_obj$$[$_obj_c$$+"_"+$k$$]=$_data_obj$$[$_obj_c$$][$k$$]}else $_data_obj$$[$_obj_c$$+ "_"+$k$$]=$_data_obj$$[$_obj_c$$][$k$$];$_data_obj$$={obj:$_data_obj$$};_.extend($_data_obj$$,$_app$$);$data4export$$.push($_data_obj$$)});getParameters($id_app$$,$rps$$,($e$$,$parameters$$)=>{if($e$$)return Logger.error("exportToExcel get params",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});async.mapLimit($data4export$$,20,function($_data$$,$callback$$){setImmediate(()=>{prepareParameters($ctrl$$,$parameters$$,$_data$$,$_data$$.obj,function($e$$,$rs$$){if($e$$)return $callback$$($e$$); delete $_data$$.obj;$callback$$(null,$rs$$)})})},async function($e$$){setImmediate(async()=>{if($e$$)return Logger.error("exportToExcel",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});if($query$$.print){Logger.info("render print page....");if(!$rs$$.html_template)return $callback$$({error:"Ch\u01b0a khai b\u00e1o m\u1eabu in"});let $cac_lien$$=$rs$$.cac_lien;$cac_lien$$&&$cac_lien$$.length!=0||($cac_lien$$=[{ma_lien:1,ten_lien:"Li\u00ean 1"}]);try{let $pages$$=[];async.mapLimit($data4export$$, 20,($_data$$,$callback$$)=>{$_data$$.datasource={...$_data$$};$_data$$.company={...$_app$$};async.mapSeries($cac_lien$$,async $lien_page$$=>{$_data$$.lien=$lien_page$$;$lien_page$$=await htmlReport($rs$$._id,$_data$$);$pages$$.push($lien_page$$)},()=>{$callback$$()})},()=>{$req$$.data=$pages$$;$req$$.ext="print";$callback$$(null)})}catch($e$$){return Logger.error("exportToExcel",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$})}}else if($query$$.json)$req$$.data=$data4export$$, $req$$.ext="json",$callback$$(null);else{if(!$rs$$.file_mau_in)return $callback$$({error:"Ch\u01b0a khai b\u00e1o file excel m\u1eabu"});var $dir_root_templates_id_file$$=configs.paths.templates||__dirname;let $templatePath$$;if($rs$$.file_mau_in.indexOf("/file/download")>0){$dir_root_templates_id_file$$=$rs$$.file_mau_in.split("/").pop();const $file$$=global.getModel("file");try{var $_data$$=await $file$$.findOne({_id:$dir_root_templates_id_file$$});$_data$$||$callback$$({error:"Kh\u00f4ng t\u00ecm th\u1ea5y m\u1eabu"}); let $file_name$$=$_data$$.file.name,$root$$=configs.paths.uploads;$root$$||($root$$=__dirname,$root$$=path.dirname($root$$),$root$$=path.join($root$$,"uploads"));$templatePath$$=path.join($root$$,$file_name$$)}catch($e$$){return $callback$$({error:$e$$.message||"Kh\u00f4ng t\u00ecm th\u1ea5y m\u1eabu"})}}else $templatePath$$=path.dirname($dir_root_templates_id_file$$)+$rs$$.file_mau_in;if(!$templatePath$$||!fs.existsSync($templatePath$$))return $callback$$({error:"File m\u1eabu kh\u00f4ng t\u1ed3n t\u1ea1i"}); let $ext$$=$templatePath$$.split(".").pop();$ext$$==="xlsx"?excelReport($templatePath$$,$data4export$$,function($e$$,$result$$){setImmediate(()=>{if($e$$)return Logger.error($e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$result$$;$req$$.ext="xlsx";$callback$$(null)})},{timezone:configs.timezone||"Asia/Ho_Chi_Minh"}):($_data$$=$data4export$$[0],$_data$$.datasource={...$_data$$},$_data$$.company={...$_app$$},textReport($templatePath$$,$_data$$,function($e$$, $result$$){setImmediate(()=>{if($e$$)return Logger.error("exportToExcel textreport",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$ext$$==="docx"?($req$$.data=$result$$,$req$$.ext="docx"):($req$$.data=$result$$,$req$$.ext="text");$callback$$(null)})}))}})})})})}).catch($error$$=>{Logger.error($error$$);return $callback$$({error:"Kh\u00f4ng t\u1ed3n t\u1ea1i c\u00f4ng ty n\u00e0y"})})}).catch($e$$=>{Logger.error("exportToExcel find rpt",$e$$);return $e$$.error?$callback$$($e$$): $callback$$({error:$e$$.message||$e$$})})}],$e$$=>{if($e$$)return $callback$$($e$$);Logger.info("[exportHandler] \u0110\u00e3 xu\u1ea5t ra",$req$$.ext);$callback$$(null,{ext:$req$$.ext,data:$req$$.data})})};module.exports=exportHandler;