flexbiz-server
Version:
Flexible Server
113 lines • 51.1 kB
JavaScript
const EventEmitter=require("events").EventEmitter,_=require("lodash"),ckvt=require("../libs/ckvt"),OptionsModel=global.getModel("options"),Approve=global.getModel("approve"),trangthai=global.getModel("trangthai"),Participant=global.getModel("participant"),async=require("async"),crypto=require("crypto"),permission=require("../libs/permission"),utils=require("../libs/utils"),templatevoucher=global.getModel("templatevoucher"),{evalute}=require("../libs/utils"),redisCache=require("../libs/redis-cache"),
dmqddvt=global.getModel("dmqddvt"),{executeInTransaction,runWithoutSession}=require("../libs/sessionContext.js"),importHandler=require("./importHandler"),viewHandler=require("./viewHandler"),{bodyToJson,ERRORS,getNextSequence,asyncPostData,pushNotification,runWebhooks}=require("./controllerUtils"),handlers=require("./handlers");
class controller{constructor($router$$,$model$$,$name$$,$options$$={isVoucher:void 0,sort:void 0,check_stock:void 0,unique:void 0,require_id_app:void 0,notNeedRight:void 0,onPopulate:void 0}){this.module=this.name=$name$$;this.model=$model$$;this.model_name=$model$$.modelName.toLowerCase();this.router=$router$$;global.controllers[$name$$.trim().toUpperCase()]=this;$options$$.findExact||($options$$.findExact={});this.keyValues=$options$$.keyValues;this.keyValues||(this.keyValues={});$options$$.require_id_app===
void 0||$options$$.require_id_app===!0?(this.require_id_app=!0,this.route_name=`/:id_app/${this.module}`):(this.require_id_app=!1,this.route_name=`/${this.module}`);this.collection_name=$options$$.collection_name?$options$$.collection_name:$name$$;this.sort=$options$$.sort;this.unique=$options$$.unique;this.getting=$options$$.onGetting;this.finding=$options$$.onFinding;this.found=$options$$.onFound;this.validating=$options$$.onValidating;this.saving=$options$$.onSaving;this.creating=$options$$.onCreating;
this.created=$options$$.onCreated;this.updating=$options$$.onUpdating;this.updated=$options$$.onUpdated;this.deleting=$options$$.onDeleting;this.deleted=$options$$.onDeleted;this.approveData=$options$$.approveData;this.populate=$options$$.onPopulate;this.view=$options$$.onView;this.viewRequired=$options$$.onViewRequired;this.cache=$options$$.cache;this.excelParse=$options$$.onExcelParse;this.options=$options$$;this.replaceIfExists=$options$$.replaceIfExists}async asyncView($user$$,$items$$,$options$$){const $self$$=
this;return new Promise($resolve$$=>{$self$$.onView($user$$,$items$$,($error$$,$rs$$)=>{if($error$$)return Logger.error($error$$),$resolve$$($items$$);$resolve$$($rs$$)},$options$$)})}async onView($user$$,$rows$$,$next$$,$options$$){viewHandler($user$$,this,$rows$$,$next$$,$options$$)}async notNeedRight($user$$,$_options$$={}){let $nnr$$=this.options.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=$nnr$$($user$$,$_options$$));return $nnr$$}getProperty($name$$){return this[$name$$]}getNextId(){let $ma_ct$$=
this.name;this.router.route(`${this.route_name}/next/:field`).get(($field_req$$,$res$$)=>{let $id_app$$=$field_req$$.user.current_id_app;$field_req$$=$field_req$$.params.field;$field_req$$==="so_ct"?$res$$.send({[$field_req$$]:$ma_ct$$}):getNextSequence($id_app$$,$ma_ct$$,$field_req$$,($e$$,$rs$$)=>{if($e$$)return Logger.error("getNextId",$e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});$res$$.send($rs$$)})})}async checkData($appInfo$$,$data$$,$fn$$){const $options$$=
this.options;if($data$$.trang_thai&&$data$$.ma_ct){let $tt$$=await trangthai.findOne({ma_ct:$data$$.ma_ct,ma_trang_thai:$data$$.trang_thai},{check_data:1}).lean();if($tt$$&&$tt$$.check_data==0)return $fn$$()}async.series({checkTonKho:$callback$$=>{$data$$.details&&$appInfo$$&&$appInfo$$.options&&$appInfo$$.options.khong_xuat_kho_am&&$options$$.check_stock!=0?(async()=>{let $details$$=$data$$.details.filter($d$$=>$d$$.ma_vt&&$d$$.sl_xuat);await $details$$.asyncJoinModel2($appInfo$$._id,"dmvt",{where:{ma_vt:"ma_vt"},
fields:["tg_tk","kg_kiem_tra_ton_kho","kg_kiem_tra_ton_kho_tt",{cb:"combo"},"ten_vt"]});$details$$.forEach($d$$=>{!$d$$.combo&&$d$$.cb&&($d$$.combo=$d$$.cb)});$details$$=$details$$.filter($d$$=>$d$$.tg_tk&&!$d$$.kg_kiem_tra_ton_kho||($d$$.combo||[]).length>0);$details$$=$details$$.map($detail$$=>$detail$$.combo&&$detail$$.combo.length>0?$detail$$.combo.map($c$$=>{$c$$=$c$$.toObject?utils.convertObjectIdsToStrings($c$$.toObject()):{...$c$$};$c$$.sl_xuat*=$detail$$.sl_xuat;$c$$.ma_kho=$detail$$.ma_kho;
return $c$$}):[$detail$$]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);await $details$$.asyncJoinModel2($appInfo$$._id,dmqddvt,{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:"ty_le_qd"});let $data_sokho$$=[];$data$$._id&&($data_sokho$$=await global.getModel("sokho").find({id_ct:$data$$._id.toString(),id_app:$appInfo$$._id}).lean());$details$$.forEach($d$$=>{$d$$.he_so_qd=$d$$.ty_le_qd||1;$d$$.sl_xuat_qd=$d$$.he_so_qd*$d$$.sl_xuat});$details$$=await $details$$.asyncGroupBy(["ma_vt","ma_kho","ten_vt"],
["sl_xuat_qd"]);async.map($details$$,($d$$,$callback$$)=>{let $ma_kho$$=$d$$.ma_kho||$data$$.ma_kho||$data$$.ma_kho_x,$query$$={ma_vt:$d$$.ma_vt,ma_kho:$ma_kho$$,ngay:new Date,id_app:$appInfo$$._id};$d$$.kg_kiem_tra_ton_kho_tt||($d$$.ma_lo&&($query$$.ma_lo=$d$$.ma_lo),$d$$.han_sd&&($query$$.han_sd=$d$$.han_sd),$d$$.ma_tt1&&($query$$.ma_tt1=$d$$.ma_tt1),$d$$.ma_tt2&&($query$$.ma_tt2=$d$$.ma_tt2),$d$$.ma_tt3&&($query$$.ma_tt3=$d$$.ma_tt3));ckvt($query$$,function($e$$,$rs$$){if($e$$)return $callback$$($e$$);
$rs$$?($e$$=$rs$$.csum("ton"),$rs$$=$data_sokho$$.filter($s$$=>$s$$.ma_vt===$d$$.ma_vt&&$s$$.ma_kho===$ma_kho$$).reduce(($a$$,$b$$)=>($a$$.sl_xuat_qd||0)+($b$$.sl_xuat_qd||0),0),$d$$.sl_xuat_qd>utils.round($e$$+$rs$$,2)?$callback$$(`S\u1ea3n ph\u1ea9m ${$d$$.ma_vt} - ${$d$$.ten_vt} c\u00f3 s\u1ed1 l\u01b0\u1ee3ng xu\u1ea5t quy \u0111\u1ed5i (${$d$$.sl_xuat_qd}) l\u1edbn h\u01a1n s\u1ed1 l\u01b0\u1ee3ng t\u1ed3n quy \u0111\u1ed5i (${$e$$+$rs$$})`):$callback$$()):$callback$$()})},$e$$=>{$callback$$($e$$)})})():
$callback$$()}},$e$$=>{$fn$$($e$$)})}async cacheData($obj$$,$callback$$){$obj$$&&$obj$$.toObject&&($obj$$=utils.convertObjectIdsToStrings($obj$$.toObject()));await redisCache.set(this.model_name,$obj$$,$callback$$)}async deleteData($obj$$,$callback$$){$obj$$&&$obj$$.toObject&&($obj$$=utils.convertObjectIdsToStrings($obj$$.toObject()));await redisCache.remove(this.model_name,$obj$$,$callback$$)}createRoute($routeName$$,$handler_routeAction$$,$_options$$={method:"GET",not_use_worker:!1,action_code:"view"}){const $self$$=
this;$_options$$.method=$_options$$.method?$_options$$.method.toUpperCase():"GET";const $route_action_key$$=`route_action_${$self$$.name}_${$routeName$$}_${$_options$$.method}`;$self$$[$route_action_key$$]=$handler_routeAction$$;$handler_routeAction$$=async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;
try{const $_req$$={handler:"createRouteHandler",routeName:$routeName$$,_options:$_options$$,route_action_key:$route_action_key$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};global.inputMainPool&&!$_options$$.not_use_worker?global.inputMainPool.exec({req:$_req$$,module:$self$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||
$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error});$res$$.send($response$$.result)}):handlers.createRouteHandler($self$$,$_req$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}};let $url$$=`${this.route_name}/${$routeName$$}`,$router$$=this.router;$_options$$.method=="DELETE"?$router$$.route($url$$).delete($handler_routeAction$$):
$_options$$.method=="POST"?$router$$.route($url$$).post($handler_routeAction$$):$_options$$.method=="PUT"?$router$$.route($url$$).put($handler_routeAction$$):$router$$.route($url$$).get($handler_routeAction$$)}async requestApprove($app_info_listinfo_code$$,$user_request$$,$obj_request$$,$next$$,$str_func$jscomp$2_str_func$$,$preRequest$$){let $ctrl$$=this;if(!$app_info_listinfo_code$$)return $next$$(null,$obj_request$$);let $obj$$;$obj$$=$obj_request$$.toObject?utils.convertObjectIdsToStrings($obj_request$$.toObject()):
_.cloneDeep($obj_request$$);$obj$$.ma_ct=$obj$$.ma_ct||$ctrl$$.name;let $approveDatas$$=[];$app_info_listinfo_code$$=$obj$$.listinfo_code||$ctrl$$.name;$str_func$jscomp$2_str_func$$||($str_func$jscomp$2_str_func$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$app_info_listinfo_code$$},{option:1}).lean()||{}).option);$str_func$jscomp$2_str_func$$&&$str_func$jscomp$2_str_func$$.custom_approve_user&&$str_func$jscomp$2_str_func$$.custom_approve_user.forEach($trang_thai_approve$$=>{let $update_after_approve$$,
$update_after_deny$$;if($trang_thai_approve$$.update_after_approve)try{let $str_func$$=$trang_thai_approve$$.update_after_approve;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);$update_after_approve$$=evalute($str_func$$)}catch($e$$){Logger.error("[controller][requestApprove] request approve",$e$$,$trang_thai_approve$$.update_after_approve),$update_after_approve$$={}}else $update_after_approve$$={};$trang_thai_approve$$.update_after_approve={module:$ctrl$$.name,cho_phep_cap_nhat_khi_da_duyet:$trang_thai_approve$$.cho_phep_cap_nhat_khi_da_duyet,
data:{trang_thai:$trang_thai_approve$$.trang_thai2,...($update_after_approve$$.data||{})}};if($trang_thai_approve$$.update_after_deny)try{let $str_func$$=$trang_thai_approve$$.update_after_deny;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);$update_after_deny$$=evalute($str_func$$)}catch($e$$){Logger.error("request approve",$e$$)}if($update_after_deny$$||$trang_thai_approve$$.trang_thai3)$trang_thai_approve$$.update_after_deny={module:$ctrl$$.name,data:{trang_thai:$trang_thai_approve$$.trang_thai3,
...(($update_after_deny$$||{}).data||{})}};$approveDatas$$.push($trang_thai_approve$$)});$approveDatas$$=$approveDatas$$.filter($approveData_condition$$=>{$approveData_condition$$=$approveData_condition$$.condition;if(!$approveData_condition$$)return!0;$approveData_condition$$.indexOf("return ")<0&&($approveData_condition$$=`return ${$approveData_condition$$}`);try{return evalute($approveData_condition$$,{master:$obj$$,data:$obj$$})}catch($e$$){return Logger.error("check condition approve",$e$$,$approveData_condition$$),
!1}});try{for(let $approveData$$ of $approveDatas$$.filter($a$$=>$a$$.approve_users||$a$$.approve_users_custom||$a$$.approve_phu_trach_bp)){let $title$$=$approveData$$.title||"Y\u00eau c\u1ea7u duy\u1ec7t";if($title$$.indexOf("return ")>=0){$str_func$jscomp$2_str_func$$=$title$$;try{$title$$=evalute($str_func$jscomp$2_str_func$$,{master:$obj$$,data:$obj$$})}catch($e$$){Logger.error("request approve",$e$$,$str_func$jscomp$2_str_func$$)}}let $ds_nguoi_duyet$$=$approveData$$.approve_users,$update_after_approve$$=
$approveData$$.update_after_approve,$update_after_deny$$=$approveData$$.update_after_deny;if(_.isString($ds_nguoi_duyet$$))try{if($str_func$jscomp$2_str_func$$=$ds_nguoi_duyet$$,$str_func$jscomp$2_str_func$$.indexOf("return ")<0&&($str_func$jscomp$2_str_func$$=`return ${$str_func$jscomp$2_str_func$$}`),$ds_nguoi_duyet$$=evalute($str_func$jscomp$2_str_func$$,{master:$obj$$,data:$obj$$,preRequest:$preRequest$$}),!_.isArray($ds_nguoi_duyet$$)){Logger.error("danh s\u00e1ch ng\u01b0\u1eddi duy\u1ec7t ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng, hi\u1ec7n t\u1ea1i \u0111ang l\u00e0",
$ds_nguoi_duyet$$);return}}catch($e$$){Logger.error("request approve",$e$$,$ds_nguoi_duyet$$);return}if($approveData$$.approve_phu_trach_bp&&$obj$$.ma_nv){let $nv$$=await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,ma_nv:$obj$$.ma_nv},{ma_bp:1}).lean();if($nv$$?.ma_bp){let $bp$$=await global.getModel("dmbp").findOne({id_app:$obj$$.id_app,ma_bp:$nv$$?.ma_bp},{phu_trach:1}).lean();$bp$$?.phu_trach&&$ds_nguoi_duyet$$.push($bp$$?.phu_trach)}}if($approveData$$.approve_users_custom)try{let $str_func$$=
$approveData$$.approve_users_custom;$str_func$$.indexOf("return ")<0&&($str_func$$=`return ${$str_func$$}`);let $ds_nguoi_duyet_custom$$=await evalute(`return (async ()=>{
try{
${$str_func$$}
}catch(e){
return {error:e}
}
})`,{master:$obj$$,data:$obj$$,preRequest:$preRequest$$,utils})();$ds_nguoi_duyet_custom$$&&(_.isArray($ds_nguoi_duyet_custom$$)?$ds_nguoi_duyet$$=[...$ds_nguoi_duyet$$,...$ds_nguoi_duyet_custom$$]:Logger.error("[controller][requestapprove] danh s\u00e1ch ng\u01b0\u1eddi duy\u1ec7t ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng, hi\u1ec7n t\u1ea1i \u0111ang l\u00e0",$ds_nguoi_duyet_custom$$))}catch($e$$){Logger.error("[controller][requestapprove] ",$e$$,$approveData$$.approve_users_custom)}Logger.info("[controller][requestapprove] Danh sach ng\u01b0\u1eddi duy\u1ec7t \u0111\u1ea7y \u0111\u1ee7",
$ds_nguoi_duyet$$);if($ds_nguoi_duyet$$&&$ds_nguoi_duyet$$.length!==0&&($ds_nguoi_duyet$$=[...(new Set($ds_nguoi_duyet$$))],$obj$$.trang_thai==$approveData$$.trang_thai)){let $user_approves$$=$ds_nguoi_duyet$$.map($nguoi_duyet$$=>({email:$nguoi_duyet$$,name:$nguoi_duyet$$}));await $user_approves$$.asyncJoinModel2($obj$$.id_app,Participant,{where:"email",fields:"name"});await [$user_request$$].asyncJoinModel2($obj$$.id_app,Participant,{where:"email",fields:"name"});await new Promise(($resolve$$,$reject$$)=>
{Approve.request($user_request$$,$user_approves$$,$title$$,$obj$$,$e$$=>{if($e$$)return $reject$$($e$$);$resolve$$()},$update_after_approve$$,$approveData$$.template_content,$update_after_deny$$)})}}$next$$(null,$obj$$)}catch($e$$){$next$$($e$$)}}async import($user$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null,listinfo_code:null}){importHandler($user$$,this,$id_app$$,$data$$,$callback_main$$,$options$$)}pushNotification($_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=
!1,$options$$={title:"",data:{}}){return pushNotification(this,$_obj$$,$eventName$$,$old_obj$$,$justFireEvents$$,$options$$)}}controller.prototype.__proto__=EventEmitter.prototype;controller.prototype.asyncGetNextSequence=async($id_app$$,$ma_ct$$,$field$$="so_ct",$options$$)=>new Promise($resolve$$=>{getNextSequence($id_app$$,$ma_ct$$,$field$$,($error$$,$rs$$)=>{if($error$$)return Error($error$$);$resolve$$($rs$$)},$options$$)});
controller.prototype.getFieldNoRight=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/field-not-right/:fieldName`).get(async($req$$,$res$$)=>{let $fieldName$$=$req$$.params.fieldName;try{(await permission.getFieldNotRight($req$$.user.current_id_app,$req$$.user.email,$ctrl$$.name)).indexOf($fieldName$$)>=0?$res$$.send({allow:!1}):$res$$.send({allow:!0})}catch($e$$){$res$$.state(400).send($e$$.message)}})};
controller.prototype.find=function($_route_name_route_name$$,$shareRoute$$=!1,$method$$="GET"){let $ctrl$$=this;const $handlerResult$$=($res$$,$data$$)=>{const {result:$result$$,dataType:$dataType$$}=$data$$;$dataType$$=="xlsx"?($res$$.setHeader("Content-Type","application/vnd.openxmlformats"),$res$$.setHeader("Content-Disposition","attachment; filename="+$ctrl$$.name+".xlsx"),$res$$.end($result$$,"binary")):$res$$.send($result$$)},$findRoute$$=async($ip$jscomp$1_req$$,$res$$)=>{const {query:$query$$,
body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,protocol:$protocol$$}=$ip$jscomp$1_req$$;var $_req$$=configs?.api_url||$ip$jscomp$1_req$$.get("hostName");const $user_agent$$=$ip$jscomp$1_req$$.header("user-agent");$ip$jscomp$1_req$$=$ip$jscomp$1_req$$.ip||$ip$jscomp$1_req$$.headers["x-forwarded-for"]||$ip$jscomp$1_req$$.connection.remoteAddress;try{if($_req$$={handler:"findHandler",protocol:$protocol$$,host:$_req$$,query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
user_agent:$user_agent$$,ip:$ip$jscomp$1_req$$,shareRoute:$shareRoute$$},global.inputMainPool){const $id_task$$=`task-find-${crypto.randomBytes(20).toString("hex")}`;global.inputMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||
$response$$.error,code:$response$$.code});$handlerResult$$($res$$,$response$$.result)})}else handlers.findHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);$handlerResult$$($res$$,$returnvalue$$)})}catch($e$$){$res$$.status(400).send($e$$)}};$_route_name_route_name$$=$_route_name_route_name$$||this.route_name;$method$$==="GET"?(this.router.route($_route_name_route_name$$).get($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").get($findRoute$$)):
(this.router.route($_route_name_route_name$$).post($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").post($findRoute$$))};
controller.prototype.get=function($route_name$$,$shareRoute$$=!1){const $ctrl$$=this;this.router.route(`${$route_name$$||this.route_name}/:id`).get(async function($req$$,$res$$){let $id$$=$req$$.params.id;if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(404).send({error:ERRORS.ERR_ID_INVALID,code:ERRORS.ERR_ID_INVALID_CODE});let $body$$={_id:$id$$};const $user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,
{query:$query$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$;if($ctrl$$.getting)try{await new Promise(($resolve$$,$reject$$)=>{$ctrl$$.getting($user$$,$id$$,$e$$=>{if($e$$)return $reject$$($e$$);$resolve$$()})})}catch($e$$){return $res$$.status(400).send($e$$)}try{handlers.findHandler($ctrl$$,{query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,shareRoute:$shareRoute$$,originalUrl:$req$$.originalUrl},($e$jscomp$19_result$$,$returnvalue$$)=>
{if($e$jscomp$19_result$$)return $res$$.status(400).send($e$jscomp$19_result$$);({result:$e$jscomp$19_result$$}=$returnvalue$$);if($e$jscomp$19_result$$.length==0)return $res$$.status(404).send({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});$res$$.send($e$jscomp$19_result$$[0])})}catch($e$$){Logger.error($e$$),$res$$.status(400).send($e$$)}})};
controller.prototype.postAgainHandler=async function($user$$,$condition$$,$callback$$,$options$$={req:null}){let $model$$=this.model,$ctrl$$=this;if(!$ctrl$$.post)return $callback$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 th\u1ef1c hi\u1ec7n xong"});const $update_tk_vt$$=$condition$$.update_tk_vt;delete $condition$$.update_tk_vt;const $user_update$$={date_updated:new Date,user_updated:$user$$.email},$objsrepost$$=await $model$$.find($condition$$).sort({ngay_ct:1}).lean();Logger.info("[postagain] start repost",
$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);async.mapSeries($objsrepost$$,function($obj$$,$callback$$){setImmediate(async()=>{await runWithoutSession(async()=>{await executeInTransaction(async()=>{Logger.info("postAgain: handle data before post",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($ctrl$$.reposting)try{await $ctrl$$.reposting($user$$,$obj$$)}catch($e$$){return $callback$$({error:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u tr\u01b0\u1edbc khi repost ch\u1ee9ng t\u1eeb:"+
$obj$$.so_ct+", L\u1ed7i: "+($e$$.message||$e$$.error||"")})}$update_tk_vt$$&&$obj$$.details&&(Logger.info("postAgain: update tk_vt..."),await $obj$$.details.filter($d$$=>$d$$.ma_vt).asyncJoinModel2($obj$$.id_app,global.getModel("dmvt"),{where:"ma_vt",fields:"tk_vt"}),$user_update$$.details=$obj$$.details);try{Logger.info("postAgain: update voucher..."),await $model$$.updateOne({_id:$obj$$._id},{...$user_update$$})}catch($e$$){return Logger.error("postAgain: error update data before repost",$e$$),
$callback$$({error:"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u ch\u1ee9ng t\u1eeb "+$obj$$.so_ct+",Error:"+$e$$.message||$e$$.error||""})}try{let $rs$$=await asyncPostData($obj$$,$ctrl$$,{req:$options$$.req,kiem_tra_han_muc_cong_no:!1});$callback$$(null,$rs$$)}catch($e$$){$callback$$({error:$e$$.message||$e$$.error||"Kh\u00f4ng th\u1ec3 post s\u1ed5 s\u00e1ch ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct})}})})})},function($e$$){if($e$$)return Logger.error("[postAgain]: Error",
$e$$),$callback$$({error:$e$$.message||$e$$.error||$e$$});Logger.info("postAgain: finished",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);$callback$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n xong"})})};
controller.prototype.updateBook=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/action/postagain`).get(async($req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"updateBookHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-update-book-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",status_task:$status_task$$});
global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$25_response$$=>{if($e$jscomp$25_response$$=$e$jscomp$25_response$$.error)return global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch",$e$jscomp$25_response$$.message||$e$jscomp$25_response$$.error||$e$jscomp$25_response$$,null,{id_app:$req$$.user.current_id_app},
!0,$req$$.access_token,!0);global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong",null,{id_app:$req$$.user.current_id_app},!0,$req$$.access_token,!0)})}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),
handlers.updateBookHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch",$e$$.message||$e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,$req$$.access_token,!0);global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 c\u1eadp nh\u1eadt l\u1ea1i s\u1ed5 s\u00e1ch xong",
null,{id_app:$req$$.user.current_id_app},!0,$req$$.access_token,!0)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.updateKey=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/updatekey/:_id/:field/:new_value`).get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.updateKeyHandler($ctrl$$,{type_job:"updateKey",query:$query$$,body:$body$$,user:$user$$,params:$params$$,
headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.updateField=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/update/:field`).get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.updateFieldHandler($ctrl$$,{type_job:"updateField",query:$query$$,body:$body$$,user:$user$$,params:$params$$,
headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.exportToExcel=function(){let $ctrl$$=this;const $handlerResult$$=($res$$,$data$jscomp$3_data$jscomp$4_returnvalue$$)=>{switch($data$jscomp$3_data$jscomp$4_returnvalue$$.ext){case "xlsx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$ctrl$$.name+'".xlsx');$data$jscomp$3_data$jscomp$4_returnvalue$$=$data$jscomp$3_data$jscomp$4_returnvalue$$.data;$data$jscomp$3_data$jscomp$4_returnvalue$$?.type==
"Buffer"&&$data$jscomp$3_data$jscomp$4_returnvalue$$?.data&&($data$jscomp$3_data$jscomp$4_returnvalue$$=Buffer.from($data$jscomp$3_data$jscomp$4_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$3_data$jscomp$4_returnvalue$$.length);$res$$.end($data$jscomp$3_data$jscomp$4_returnvalue$$);break;case "docx":$res$$.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");$res$$.setHeader("Content-Disposition",'attachment; filename="'+$ctrl$$.name+
'".docx');$data$jscomp$3_data$jscomp$4_returnvalue$$=$data$jscomp$3_data$jscomp$4_returnvalue$$.data;$data$jscomp$3_data$jscomp$4_returnvalue$$?.type=="Buffer"&&$data$jscomp$3_data$jscomp$4_returnvalue$$?.data&&($data$jscomp$3_data$jscomp$4_returnvalue$$=Buffer.from($data$jscomp$3_data$jscomp$4_returnvalue$$.data));$res$$.setHeader("Content-Length",$data$jscomp$3_data$jscomp$4_returnvalue$$.length);$res$$.end($data$jscomp$3_data$jscomp$4_returnvalue$$);break;case "print":$res$$.send($data$jscomp$3_data$jscomp$4_returnvalue$$.data.join('<p style="page-break-before: always"></p>'));
break;case "json":$res$$.json($data$jscomp$3_data$jscomp$4_returnvalue$$.data);break;default:$res$$.send($data$jscomp$3_data$jscomp$4_returnvalue$$.data)}},$handleRoute$$=async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"exportHandler",query:$query$$,body:$body$$,user:$user$$,
params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,originalUrl:$req$$.originalUrl};global.inputMainPool?global.inputMainPool.exec({req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error});Logger.info("[controller][export] X\u1eed l\u00fd k\u1ebft qu\u1ea3...",
$response$$?.result?.ext);$handlerResult$$($res$$,$response$$.result)}):handlers.exportHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);$handlerResult$$($res$$,$returnvalue$$)})}catch($e$$){$res$$.status(400).send($e$$)}};this.router.route(`${this.route_name}/excel/:rpt_id`).get($handleRoute$$);this.router.route(`${this.route_name}/export/:rpt_id`).get($handleRoute$$)};
controller.prototype.importFromGoogleSheet=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/import/googlesheet`).get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"importFromGsHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
user_agent:$user_agent$$,ip:$ip$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-import-google-sheet-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$_req$$.status_task=$status_task$$;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",
status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$34_response$$=>{if($e$jscomp$34_response$$=$e$jscomp$34_response$$.error)return Logger.error("\u274c [importFromGoogleSheet] l\u1ed7i",$e$jscomp$34_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$34_response$$.message||$e$jscomp$34_response$$.error||
$e$jscomp$34_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromGoogleSheet] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
!0,null,!0)},1728E5)}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),handlers.importFromGsHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return Logger.error("\u274c [importFromGoogleSheet] l\u1ed7i",$e$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$.message||
$e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromGoogleSheet] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
!0,null,!0)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.importFromJson=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/import/json`).post(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"importFromJsonHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-import-json-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$_req$$.status_task=$status_task$$;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",
status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$37_response$$=>{if($e$jscomp$37_response$$=$e$jscomp$37_response$$.error)return Logger.error("\u274c [importFromJson] l\u1ed7i",$e$jscomp$37_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$37_response$$.message||$e$jscomp$37_response$$.error||
$e$jscomp$37_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromJson] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
!0,null,!0)},1728E5)}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),handlers.importFromJsonHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return Logger.error("\u274c [importFromJson] l\u1ed7i",$e$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$.message||
$e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromJson] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},!0,
null,!0)})}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$),$res$$.status(400).send($e$$)}})};
controller.prototype.importFromExcel=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/import/excel`).post(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"importFromExcelHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl};if(global.importDataMainPool){const $id_task$$=`task-import-excel-${crypto.randomBytes(20).toString("hex")}`,$status_task$$=`${configs.api_url||configs.domain}/task-status/${$id_task$$}`;$_req$$.status_task=$status_task$$;$res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o",
status_task:$status_task$$});global.importDataMainPool.exec({id_task:$id_task$$,req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$e$jscomp$40_response$$=>{if($e$jscomp$40_response$$=$e$jscomp$40_response$$.error)return Logger.error("\u274c [importFromExcel] l\u1ed7i",$e$jscomp$40_response$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$jscomp$40_response$$.message||$e$jscomp$40_response$$.error||
$e$jscomp$40_response$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromExcel] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},
!0,null,!0)},1728E5)}else $res$$.status(202).send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. Khi ho\u00e0n th\u00e0nh, ch\u01b0\u01a1ng tr\u00ecnh s\u1ebd g\u1eedi cho b\u1ea1n m\u1ed9t th\u00f4ng b\u00e1o"}),handlers.importFromExcelHandler($ctrl$$,$_req$$,$e$$=>{if($e$$)return Logger.error("\u274c [importFromExcel] l\u1ed7i",$e$$),global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Kh\u00f4ng th\u1ec3 import d\u1eef li\u1ec7u",$e$$.message||
$e$$.error||$e$$,null,{id_app:$req$$.user.current_id_app},!0,null,!0);Logger.info("\u2705[importFromExcel] \u0111\u00e3 import ho\u00e0n th\u00e0nh. G\u1eedi th\u00f4ng b\u00e1o t\u1edbi ng\u01b0\u1eddi th\u1ef1c hi\u1ec7n");global.getModel("notification").createNotification($req$$.user.email,$req$$.user.email,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 import d\u1eef li\u1ec7u xong",null,{id_app:$req$$.user.current_id_app},!0,
null,!0)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.create=function(){const $ctrl$$=this;this.router.route(this.route_name).post(async function($req$$,$res$$){let $body$$=$req$$.body;if(!$body$$)return $res$$.status(411).send({error:"Kh\u00f4ng c\u00f3 n\u1ed9i dung c\u1ea7n l\u01b0u"});!Array.isArray($body$$)&&$req$$.files&&_.keys($req$$.files).length>0&&($body$$.return!="JSON"&&($req$$.uploadFile=!0),_.extend($body$$,$req$$.files));const {query:$query$$,user:$user$$,params:$params$$,files:$files$$,uploadFile:$uploadFile$$,headers:$headers$$}=
$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"createHandler",query:$query$$,data:$body$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,uploadFile:$uploadFile$$,originalUrl:$req$$.originalUrl};global.inputMainPool?global.inputMainPool.exec({req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$jscomp$7_result$$=>
{if($response$jscomp$7_result$$.error)return $res$$.status(400).send({error:$response$jscomp$7_result$$.error.error||$response$jscomp$7_result$$.error.message||$response$jscomp$7_result$$.error,message:$response$jscomp$7_result$$.message||$response$jscomp$7_result$$.error.error||$response$jscomp$7_result$$.error.message||$response$jscomp$7_result$$.error,code:$response$jscomp$7_result$$.code});$response$jscomp$7_result$$=$response$jscomp$7_result$$.result;if(Array.isArray($response$jscomp$7_result$$))for(let $rs$$ of $response$jscomp$7_result$$)pushNotification($ctrl$$,
$rs$$.obj_created,"new",null,null,{exclude_token:($req$$.query||{}).access_token});else pushNotification($ctrl$$,$response$jscomp$7_result$$.obj_created,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$req$$.query.return_data===!1?$res$$.send({_id:Array.isArray($response$jscomp$7_result$$)?$response$jscomp$7_result$$.map($o$$=>$o$$.obj_created?._id):$response$jscomp$7_result$$.obj_created?._id}):$res$$.send(Array.isArray($response$jscomp$7_result$$)?$response$jscomp$7_result$$.map($o$$=>
$o$$.obj_created):$response$jscomp$7_result$$.obj_created)}):handlers.createHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);if(Array.isArray($returnvalue$$))for(let $rs$$ of $returnvalue$$)pushNotification($ctrl$$,$rs$$.obj_created,"new",null,null,{exclude_token:($req$$.query||{}).access_token});else pushNotification($ctrl$$,$returnvalue$$.obj_created,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$req$$.query.return_data===!1?$res$$.send({_id:Array.isArray($returnvalue$$)?
$returnvalue$$.map($o$$=>$o$$.obj_created?._id):$returnvalue$$.obj_created?._id}):$res$$.send(Array.isArray($returnvalue$$)?$returnvalue$$.map($o$$=>$o$$.obj_created):$returnvalue$$.obj_created)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.quickCreate=function(){let $model$$=this.model,$name$$=this.name,$ctrl$$=this,$createFromTemplate$$=async($req$$,$res$$,$body$jscomp$11_query$$)=>{if(!$body$jscomp$11_query$$){$body$jscomp$11_query$$=$req$$.params.template_code;if(!$body$jscomp$11_query$$)return $res$$.status(400).send({error:"M\u1eabu d\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i"});$body$jscomp$11_query$$={id_app:$req$$.user.current_id_app,voucher_code:$name$$.toUpperCase(),code:$body$jscomp$11_query$$};$body$jscomp$11_query$$=
await templatevoucher.findOne($body$jscomp$11_query$$).lean();if(!$body$jscomp$11_query$$)return $res$$.status(400).send({error:"M\u1eabu d\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i"})}$body$jscomp$11_query$$=$body$jscomp$11_query$$.data||{};delete $body$jscomp$11_query$$.so_ct;delete $body$jscomp$11_query$$.ngay_ct;delete $body$jscomp$11_query$$.user_created;delete $body$jscomp$11_query$$.date_created;delete $body$jscomp$11_query$$.user_updated;delete $body$jscomp$11_query$$.date_updated;delete $body$jscomp$11_query$$._id;
delete $body$jscomp$11_query$$.pkey;delete $body$jscomp$11_query$$.__v;let $_data$$=$req$$.query;$req$$.body&&($_data$$=Object.assign($_data$$,$req$$.body));for(let $key$$ in $_data$$)$_data$$[$key$$]&&$key$$!=="access_token"&&$key$$!=="token"&&$key$$!=="_id"&&(_.has($model$$.schema.paths,$key$$)&&($body$jscomp$11_query$$[$key$$]=$_data$$[$key$$]),$body$jscomp$11_query$$.details&&$body$jscomp$11_query$$.details.forEach($d$$=>{$d$$[$key$$]=$_data$$[$key$$]}));const {query:$query$$,user:$user$$,params:$params$$,
files:$files$$,uploadFile:$uploadFile$$,headers:$headers$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.createHandler($ctrl$$,{query:$query$$,body:$body$jscomp$11_query$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,uploadFile:$uploadFile$$,originalUrl:$req$$.originalUrl},($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send($e$$);({obj_created:$e$$}=
$returnvalue$$);pushNotification($ctrl$$,$e$$,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$req$$.query.return_data===!1?$res$$.send({_id:$e$$._id.toString()}):$res$$.send($e$$)})}catch($e$$){$res$$.status(400).send($e$$)}};this.router.route(`${this.route_name}/quickcreate/:template_code`).get(function($req$$,$res$$){$createFromTemplate$$($req$$,$res$$)});this.router.route(`${this.route_name}/quickcreate/:template_code`).post(function($req$$,$res$$){$createFromTemplate$$($req$$,
$res$$)})};
controller.prototype.update=function(){let $ctrl$$=this;this.router.route(this.route_name+"/:id").put(async function($req$$,$res$$){let $body$$=$req$$.body;$req$$.files&&_.extend($body$$,$req$$.files);let $data$$;try{$data$$=bodyToJson($body$$)}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$})}let {query:$query$$,user:$user$$,params:$params$$,files:$files$$,uploadFile:$uploadFile$$,headers:$headers$$}=$req$$;$params$$=_.cloneDeep($params$$);$query$$=_.cloneDeep($query$$);const $user_agent$$=
$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,$id$$=$req$$.params.id;try{const $_req$$={handler:"updateHandler",query:$query$$,headers:$headers$$,_action:"update",id:$id$$,data:$data$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip$$,files:$files$$,uploadFile:$uploadFile$$,originalUrl:$req$$.originalUrl};global.inputMainPool?global.inputMainPool.exec({req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},
$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error,code:$response$$.code});let {new_obj:$new_obj$$,old_obj:$old_obj$$}=$response$$.result;pushNotification($ctrl$$,$new_obj$$,"update",$old_obj$$,null,{exclude_token:$req$$.query.access_token});$req$$.query.return_data===!1?$res$$.send({_id:$new_obj$$._id.toString()}):
$res$$.send($new_obj$$)}):handlers.updateHandler($ctrl$$,$_req$$,($e$$,$returnvalue$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$});let {new_obj:$new_obj$$,old_obj:$old_obj$$}=$returnvalue$$;pushNotification($ctrl$$,$new_obj$$,"update",$old_obj$$,null,{exclude_token:$req$$.query.access_token});$req$$.query.return_data===!1?$res$$.send({_id:$new_obj$$._id.toString()}):$res$$.send($new_obj$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.delete=function(){let $ctrl$$=this;this.router.route(this.route_name+"/:id").delete(async($req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.deleteHandler($ctrl$$,{query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,ip:$ip$$,
files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$,code:$e$$.code});$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.deleteMany=function($route_name$$){let $ctrl$$=this;this.router.route(`${$route_name$$||this.route_name}/action/delete`).post(async($req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{const $_req$$={handler:"deleteManyHandler",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
user_agent:$user_agent$$,ip:$ip$$,originalUrl:$req$$.originalUrl};global.inputMainPool?global.inputMainPool.exec({req:$_req$$,module:$ctrl$$.name.toUpperCase(),configs:JSON.stringify(configs)},$response$$=>{if($response$$.error)return $res$$.status(400).send({error:$response$$.error.error||$response$$.error.message||$response$$.error,message:$response$$.message||$response$$.error.error||$response$$.error.message||$response$$.error,code:$response$$.code});$res$$.send($response$$.result)}):handlers.deleteManyHandler($ctrl$$,
$_req$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$});$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.history=function(){let $ctrl$$=this;this.router.route(this.route_name+"/g/history/:id").get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.historyHandler($ctrl$$,{type_job:"history",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,
user_agent:$user_agent$$,ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$});$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};
controller.prototype.logs=function(){let $ctrl$$=this;this.router.route(this.route_name+"/g/log/:action").get(async function($req$$,$res$$){const {query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,files:$files$$}=$req$$,$user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress;try{handlers.logHandler($ctrl$$,{type_job:"log",query:$query$$,body:$body$$,user:$user$$,params:$params$$,headers:$headers$$,user_agent:$user_agent$$,
ip:$ip$$,files:$files$$,originalUrl:$req$$.originalUrl},($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send({error:$e$$.error||$e$$.message||$e$$});$res$$.send($rs$$)})}catch($e$$){$res$$.status(400).send($e$$)}})};controller.prototype.postData=async function($obj$$,$cb$$,$options$$={}){Logger.info("[controller] postData",this.name);const $self$$=this;try{let $rs$$=await executeInTransaction(async()=>await asyncPostData($obj$$,$self$$,$options$$),{useParent:!0});$cb$$(null,$rs$$)}catch($e$$){$cb$$($e$$)}};
controller.prototype.asyncPostData=function($obj$$,$options$$={}){Logger.info("[controller] postData",this.name);return asyncPostData($obj$$,this,$options$$)};
controller.prototype.route=function($setRoute$$){configs.lite||(this.history(),this.logs(),this.find("/search"+this.route_name,!1,"POST"),this.find(),this.get(),this.find(`/${this.module}/shared`,!0),this.get(`/${this.module}/shared`,!0),this.getFieldNoRight(),this.create(),this.quickCreate(),this.update(),this.delete(),this.deleteMany(),this.getNextId(),this.exportToExcel(),this.importFromExcel(),this.importFromJson(),this.importFromGoogleSheet(),this.updateField(),this.updateKey(),this.updateBook(),
$setRoute$$&&$setRoute$$(this.router))};controller.runWebhooks=runWebhooks;controller.postData=async function($obj$$,$ctrl$$,$cb$$,$options$$={}