UNPKG

flexbiz-server

Version:

Flexible Server

71 lines (70 loc) 31 kB
'use strict';const _=require("lodash"),vsocai=global.getModel("vsocai"),Socai=global.getModel("socai"),OptionsModel=global.getModel("options"),trangthai=global.getModel("trangthai"),app=global.getModel("app"),Participant=global.getModel("participant"),dmqct=global.getModel("dmqct"),counter=global.getModel("counter"),async=require("async"),utils=require("../libs/utils"),fs=require("fs"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),numeral= require("numeral"),{stripHtmlTags,compileHtml,evalute,JSONParser,numberToWord}=require("../libs/utils"),path=require("path"),StaticPool=require("../libs/WorkerStaticPool"),fields_sync_master_detail=["ma_ct","so_ct","ngay_ct"],ERRORS={ERR_NOT_FOUND:"ERR_NOT_FOUND: \u0110\u1ed1i t\u01b0\u1ee3ng n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i",ERR_NOT_FOUND_CODE:1100,ERR_NOT_PERMIT:"ERR_NOT_PERMIT: Kh\u00f4ng c\u00f3 quy\u1ec1n th\u1ef1c hi\u1ec7n t\u00e1c v\u1ee5 n\u00e0y",ERR_NOT_PERMIT_CODE:1200,ERR_ALREADY_EXIST:"ERR_ALREADY_EXIST: \u0110\u1ed1i t\u01b0\u1ee3ng n\u00e0y \u0111\u00e3 t\u1ed3n t\u1ea1i", ERR_ALREADY_EXIST_CODE:1300,ERR_NOT_HAVE_DATA:"ERR_NOT_HAVE_DATA: Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u",ERR_NOT_HAVE_DATA_CODE:1400,ERR_CAN_NOT_UPDATE:"ERR_CAN_NOT_UPDATE: Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y",ERR_CAN_NOT_UPDATE_CODE:1500,ERR_DATA_GENERATED:"ERR_DATA_GENERATED: \u0110\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u li\u00ean quan",ERR_DATA_GENERATED_CODE:1600,ERR_ID_INVALID:"ERR_ID_INVALID: Id kh\u00f4ng h\u1ee3p l\u1ec7",ERR_ID_INVALID_CODE:1700,ERR_KEY_ARISE:"ERR_KEY_ARISE_DATA: ", ERR_KEY_ARISE_CODE:1800,ERR_ARISE:"ERR_ARISE_DATA: ",ERR_ARISE_CODE:1900,ERR_VERIFY_OTP:4001,BOOK_LOCK:4444}; async function createIdRef($model_pathsHaveRef$$,$data$$){$model_pathsHaveRef$$=Object.values($model_pathsHaveRef$$.schema.paths).filter($path$$=>$path$$.options&&$path$$.options.ref&&$path$$.options.localField&&$path$$.options.foreignField);try{return await Promise.all($model_pathsHaveRef$$.map($path$$=>new Promise($resove$$=>{setImmediate(async()=>{let $namePath$$=$path$$.path;var $modelRef_modelRefName$$=$path$$.options.ref,$localField_obj$$=$path$$.options.localField;let $foreignField$$=$path$$.options.foreignField; $data$$[$localField_obj$$]&&("_id"!==$foreignField$$||global.mongoose.Types.ObjectId.isValid($data$$[$localField_obj$$]))?($modelRef_modelRefName$$=mongoose.models[$modelRef_modelRefName$$.toLowerCase()])?($localField_obj$$=await $modelRef_modelRefName$$.findOne({id_app:$data$$.id_app,[$foreignField$$]:$data$$[$localField_obj$$]}).lean(),$data$$[$namePath$$]=$localField_obj$$?$localField_obj$$._id.toString():null):$data$$[$namePath$$]=null:$data$$[$namePath$$]=null;$resove$$($path$$)})})))}catch($e2$$){return console.error("error create ref data", $e2$$),null}}function deleteEmptyArray($condition$$,$key$$){$condition$$&&$condition$$[$key$$]&&_.isArray($condition$$[$key$$])&&(0===$condition$$[$key$$].length?delete $condition$$[$key$$]:($condition$$[$key$$].forEach($item$$=>{deleteEmptyArray($item$$,"$and");deleteEmptyArray($item$$,"$or");deleteEmptyArray($item$$,"$nor")}),0===$condition$$[$key$$].length&&delete $condition$$[$key$$]))} function bodyToJson($body$$){try{return $body$$&&$body$$.json&&($body$$=JSONParser($body$$.json)),$body$$||($body$$={}),delete $body$$._id,delete $body$$.__v,$body$$}catch($e$$){return console.error("parse body data",$e$$,$body$$),{}}} async function asyncBodyToJson($body$$,$ctrl$$,$id_app$$,$voucher_options$$){$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$id_app$$,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);$body$$=bodyToJson($body$$);if($voucher_options$$)for(let $field$$ in $voucher_options$$)!$body$$[$field$$]&&"_id"!==$field$$&&$voucher_options$$[$field$$]&&_.has($ctrl$$.model.schema.paths,$field$$)&&($body$$[$field$$]=$voucher_options$$[$field$$]);for(let $key$$ in $body$$)if(Array.isArray($body$$[$key$$])&& $body$$[$key$$].forEach($r$$=>{_.isObject($r$$)&&delete $r$$._id}),$body$$[$key$$]&&$body$$[$key$$]instanceof String&&(0==$body$$[$key$$].trim().indexOf("[")||0==$body$$[$key$$].trim().indexOf("{"))&&("mixed"==$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()||"array"==$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase()))try{$body$$[$key$$]=JSONParser($body$$[$key$$])}catch($e$$){console.error($e$$)}return $body$$} const getData=($id_app$$,$collection$$,$field$$,$condition$$)=>{if("token"===$collection$$||"asskey"===$collection$$)throw`Collection ${$collection$$} is not allow`;"dmkh"===$collection$$&&($collection$$="customer");"dmtk"===$collection$$&&($collection$$="account");let $col$$=mongoose.models[$collection$$];if($col$$){if($col$$.schema.paths.id_app){if(!$id_app$$)throw`Collection ${$collection$$} required id_app`;$condition$$.id_app=$id_app$$}let $fields$$;$field$$&&($fields$$={[$field$$]:1});if("user"=== $collection$$||"participant"===$collection$$)$fields$$={name:1};"app"===$collection$$&&($fields$$||($fields$$={}),$fields$$={...$fields$$,viettel_user:0,viettel_password:0,viettel_url_service: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});return $col$$.findOne($condition$$, $fields$$).lean().exec()}throw`Error get data: Collection ${$collection$$} is not exists`;},isExists=function($model$$,$unique$$,$obj$$,$replaceIfExists$$,$fn$$){if(!$unique$$||0===$unique$$.length)return $fn$$(null,!1);let $condition$$={};$unique$$=$unique$$.filter($key$$=>$model$$.schema.paths[$key$$]);for(let $i$$=0;$i$$<$unique$$.length;$i$$++){let $key$$=$unique$$[$i$$],$v$$=$obj$$[$key$$];void 0!=$v$$&&$model$$.schema.paths[$key$$]&&(null!==$v$$?"number"==$model$$.schema.paths[$key$$].instance.toLowerCase()? $condition$$[$key$$]=Number($v$$):"date"==$model$$.schema.paths[$key$$].instance.toLowerCase()?$condition$$[$key$$]=new Date($v$$):"string"==$model$$.schema.paths[$key$$].instance.toLowerCase()?$condition$$[$key$$]=$v$$.toString():$condition$$[$key$$]=$v$$:$condition$$[$key$$]=$v$$)}if($condition$$.id_app&&2>Object.values($condition$$).length||1>Object.values($condition$$).length)return $fn$$("D\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i \u0111\u1ee7 c\u00e1c gi\u00e1 tr\u1ecb: "+$unique$$.join(",")); $obj$$.id_app&&($condition$$.id_app=$obj$$.id_app);$replaceIfExists$$?$model$$.deleteMany($condition$$,$e$$=>{setImmediate(()=>{if($e$$)return $fn$$($e$$);$fn$$(null,!1)})}):$model$$.findOne($condition$$,{_id:1},($error$$,$result$$)=>{setImmediate(()=>{if($error$$)return $fn$$($error$$);if(!$result$$)return $fn$$(null,!1);console.warn("object exists",$condition$$,"unique fields",$unique$$);$fn$$(null,!0)})})},postData=function($obj$$,$ctrl$$,$callback$jscomp$0$$,$options$$={}){const $post$$=$ctrl$$.dynamicPost|| $ctrl$$.post;if(!$post$$)return $callback$jscomp$0$$();let $obj_created$$=$obj$$.toObject?$obj$$.toObject():{...$obj$$};Object.keys($obj_created$$).forEach($key$$=>{let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=$p$$.toObject()),_.isArray($p$$)&&($obj_created$$[$key$$]=$p$$.map($el$$=>$el$$?$el$$.toObject?$el$$.toObject():$el$$:$el$$)))});$ctrl$$.beforePost||($ctrl$$.beforePost=function($obj_created$$,$callback$$){$callback$$(null,null)});$ctrl$$.beforePost($obj_created$$, function($e$jscomp$4$$){if($e$jscomp$4$$)return $callback$jscomp$0$$($e$jscomp$4$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e$jscomp$2$$){if($e$jscomp$2$$)return $callback$jscomp$0$$($e$jscomp$2$$);if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return $callback$jscomp$0$$($e$$.message||$e$$.error||$e$$)}setImmediate(()=>{if($obj_created$$.trang_thai||0==$obj_created$$.trang_thai)$obj_created$$.trang_thai=$obj_created$$.trang_thai.toString(); trangthai.findOne({ma_ct:($obj_created$$.ma_ct||"").toUpperCase(),ma_trang_thai:$obj_created$$.trang_thai},function($e$jscomp$1$$,$trang_thai$$){if($e$jscomp$1$$)return $callback$jscomp$0$$($e$jscomp$1$$);if($trang_thai$$&&!$trang_thai$$.post)return $callback$jscomp$0$$();setImmediate(()=>{$post$$($obj_created$$,function($e$jscomp$0$$,$rs$$){setImmediate(()=>{if($e$jscomp$0$$){let $msg_error$$=$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$.toString();if(0<=$msg_error$$.indexOf("E11000 duplicate")&& (0<=$msg_error$$.indexOf("id_ct_1_nh_dk_1")||0<=$msg_error$$.indexOf("id_ct_1_line_1")))return $callback$jscomp$0$$(null,$rs$$);console.error("error post data",$obj_created$$._id,$msg_error$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e_delete_post$$){if($e_delete_post$$)return console.error("error delete post",$e_delete_post$$),$callback$jscomp$0$$($e_delete_post$$);console.error("deleted books because error post");if($ctrl$$.dynamicDeletePost)try{return await $ctrl$$.dynamicDeletePost($obj_created$$), $callback$jscomp$0$$($e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$)}catch($e$$){return console.error("dynamicDeletePost",$e$$.message||$e$$.error||$e$$),$callback$jscomp$0$$($e$$)}else $callback$jscomp$0$$($e$jscomp$0$$)})}else $callback$jscomp$0$$(null,$rs$$)})},{...$ctrl$$.options,...$options$$})})})})})})},pushNotification=($ctrl$$,$_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}})=>{setImmediate(async()=>{if($_obj$$.status){var $obj$jscomp$0$$= $_obj$$.toObject?$_obj$$.toObject():{...$_obj$$};$obj$jscomp$0$$._id=$obj$jscomp$0$$._id.toString();$options$$||($options$$={});var $exclude_token$$=$options$$.exclude_token,$trang_thai$$=($obj$jscomp$0$$.trang_thai||(0==$obj$jscomp$0$$.progress?"0":$obj$jscomp$0$$.progress)||"").toString();if($old_obj$$&&!$justFireEvents$$){var $id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$=($old_obj$$.trang_thai||(0==$old_obj$$.progress?"0":$old_obj$$.progress)||"").toString(); $id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$===$trang_thai$$&&($justFireEvents$$=!0)}$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$=$obj$jscomp$0$$.listinfo_code;$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$||($id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$=(await global.getModel("listinfo").find({api_code:$ctrl$$.name},{code:1}).lean()).map($a$$=> $a$$.code),$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$.push($ctrl$$.name),$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$=[...(new Set($id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$))],$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$={$in:$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$});$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$= (await OptionsModel.find({id_app:$obj$jscomp$0$$.id_app,id_func:$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$,option:{$exists:!0}},{option:1}).lean()).filter($v$$=>$v$$.option&&$v$$.option.users_receive_notification).map($v$$=>$v$$.option.users_receive_notification).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);0===$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$.length&&($id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$= await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>{setImmediate(async()=>{_.isFunction($n$$)?$resolve$$(await $n$$($obj$jscomp$0$$)):$resolve$$($n$$)})}))));$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$&&($id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$=$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$.filter($u$$=>!$u$$.trang_thai|| $u$$.trang_thai.toString()===$trang_thai$$||"delete"===$u$$.trang_thai.toString()),$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$=$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$.filter($func_string_n$$=>{if(!$func_string_n$$.condition||!$func_string_n$$.condition.trim())return!0;$func_string_n$$=$func_string_n$$.condition;0>$func_string_n$$.indexOf("return ")&&($func_string_n$$=`return ${$func_string_n$$}`);try{return evalute($func_string_n$$, {...$obj$jscomp$0$$,master:$obj$jscomp$0$$,data:$obj$jscomp$0$$})}catch($e$$){return console.error("pushNotification",$e$$,$func_string_n$$),!1}}),$id_func_listinfos_notifications_setting_old_trang_thai_users_receive_notification$$.forEach(async $p$jscomp$0$$=>{setImmediate(async()=>{let $_justFireEvents$$=$justFireEvents$$;$p$jscomp$0$$.just_fire_events&&($_justFireEvents$$=$p$jscomp$0$$.just_fire_events);let $notificationData$$={_id:$obj$jscomp$0$$._id,trang_thai:$trang_thai$$,id_app:$obj$jscomp$0$$.id_app, code:$obj$jscomp$0$$.ma_ct||$ctrl$$.name,id_link:$obj$jscomp$0$$.id_link,code_link:$obj$jscomp$0$$.code_link,event:$eventName$$,action:$eventName$$.toUpperCase(),data:$options$$.data,key:$options$$.key,not_send_email:$p$jscomp$0$$.not_send_email,justFireEvents:$_justFireEvents$$};if($justFireEvents$$||"delete"===$eventName$$.toLowerCase())$notificationData$$.title="",$notificationData$$.body="";else{try{$notificationData$$.body=$p$jscomp$0$$.body?compileHtml($p$jscomp$0$$.body,$obj$jscomp$0$$):""}catch($e$$){$notificationData$$.body= $p$jscomp$0$$.body,console.error($ctrl$$.name,"compileHtml body",$e$$,$obj$jscomp$0$$)}try{$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||$p$jscomp$0$$.title||$p$jscomp$0$$.content||"",$obj$jscomp$0$$))}catch($e$$){$notificationData$$.title=$options$$.title||$p$jscomp$0$$.title||$p$jscomp$0$$.content||"",console.error($ctrl$$.name,"compileHtml title",$e$$,$obj$jscomp$0$$)}}if($p$jscomp$0$$.email_content)try{$notificationData$$.email_content=compileHtml($p$jscomp$0$$.email_content, $obj$jscomp$0$$)}catch($e$$){$notificationData$$.email_content=$p$jscomp$0$$.email_content,console.error($ctrl$$.name,"compileHtml email_content",$e$$,$obj$jscomp$0$$)}$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=$p$jscomp$0$$.users;$users_will_receive$$||($users_will_receive$$=[]);$options$$.users_will_receive&&0<$options$$.users_will_receive.length&&($users_will_receive$$=$users_will_receive$$.concat($options$$.users_will_receive));$p$jscomp$0$$.send_phu_trach&& $obj$jscomp$0$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.phu_trach]));if($p$jscomp$0$$.send_admin){var $admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,admin:!0}).lean()).map($p$$=>$p$$.email);$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$)}$p$jscomp$0$$.send_attends&&$obj$jscomp$0$$.attends&&($users_will_receive$$=$users_will_receive$$.concat($obj$jscomp$0$$.attends));$p$jscomp$0$$.group_id&& ($admins_of_user_sandbox_us$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,group_id:$p$jscomp$0$$.group_id}).lean()).map($u$$=>$u$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_of_user_sandbox_us$$));$p$jscomp$0$$.send_to_customer&&($obj$jscomp$0$$.ma_kh||$obj$jscomp$0$$.id_kh)&&($admins_of_user_sandbox_us$$=await mongoose.models.customer.getInfo($obj$jscomp$0$$.id_app,{$or:[{ma_kh:$obj$jscomp$0$$.ma_kh},{_id:$obj$jscomp$0$$.id_kh}]},"of_user"))&&($users_will_receive$$= $users_will_receive$$.concat([$admins_of_user_sandbox_us$$]));$p$jscomp$0$$.send_to_user_created?$users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.user_created]):!1===$p$jscomp$0$$.send_to_user_created&&($users_will_receive$$=$users_will_receive$$.filter($u$$=>$u$$!==$obj$jscomp$0$$.user_created));if($p$jscomp$0$$.handle_receivers){$admins_of_user_sandbox_us$$={obj:$obj$jscomp$0$$,users_will_receive:$users_will_receive$$,utils};try{let $str_func$$=$p$jscomp$0$$.handle_receivers; if(0>$str_func$$.indexOf("async ")){0>$str_func$$.indexOf("return ")&&($str_func$$=`return ${$str_func$$}`);let $cust_users_will_receive$$=await evalute(`return (async ()=>{ try{ ${$str_func$$} }catch(e){ return {error:e} } })`,$admins_of_user_sandbox_us$$)();_.isArray($cust_users_will_receive$$)?$users_will_receive$$=$cust_users_will_receive$$:console.error("handle user will receive notify:",$cust_users_will_receive$$,$p$jscomp$0$$.handle_receivers)}}catch($e$$){console.error("pushNotification",$e$$)}}$ctrl$$.options||($ctrl$$.options={});$ctrl$$.options.onEmitEvent||($ctrl$$.options.onEmitEvent=($obj$$,$users_will_receive$$,$next$$,$_notificationData$$)=>{$next$$(null,$users_will_receive$$,$_notificationData$$)}); $ctrl$$.options.onEmitEvent(Object.assign({},$obj$jscomp$0$$),$users_will_receive$$,($e$$,$_users_will_receive$$,$_notificationData$$)=>{setImmediate(()=>{if($e$$)return console.error("Error emit events",$e$$);$_users_will_receive$$=_.uniq($_users_will_receive$$);0<$_users_will_receive$$.length&&app.emitEvent($obj$jscomp$0$$.id_app,`${$ctrl$$.name.toLowerCase()}:${$eventName$$}`,$_notificationData$$||$notificationData$$,$exclude_token$$,$_users_will_receive$$,!$_justFireEvents$$)})},Object.assign({}, $notificationData$$),Object.assign({},$p$jscomp$0$$))})}))}})},PostBook=require("../libs/post-book"),Sokho=global.getModel("sokho"),Sokhott=global.getModel("sokhott"),Sokhokhongton=global.getModel("sokhokhongton"),Tdttno=global.getModel("tdttno"),Tdttno_tt=global.getModel("tdttno_tt"),Tdttco_tt=global.getModel("tdttco_tt"),Tdttco=global.getModel("tdttco"),Vatra=global.getModel("vatra"),Vatvao=global.getModel("vatvao"),deletePost=function($user$$,$obj$$,$callback$jscomp$1$$){$obj$$.toObject&&($obj$$= $obj$$.toObject());if(!$obj$$._id)return console.error("Error when delete post: obj does not have _id",$obj$$),$callback$jscomp$1$$("Error when delete post: obj does not have _id",$obj$$);async.series({delete_model_books_registed:$callback$jscomp$0$$=>{setImmediate(()=>{if(!global.model_books)return $callback$jscomp$0$$();async.map(global.model_books.filter($d$$=>"sokho"!==$d$$&&"sokhonpp"!==$d$$&&"sokhott"!==$d$$&&"sokhokhongton"!==$d$$&&"socai"!==$d$$&&"socaitmp"!==$d$$),($bookName$$,$callback$$)=> {setImmediate(()=>{let $book$$=mongoose.models[$bookName$$.toLowerCase()];$book$$?$book$$.deleteMany({id_ct:$obj$$._id.toString()},$e$$=>{$callback$$($e$$)}):$callback$$()})},$e$$=>{$callback$jscomp$0$$($e$$)})})},sk:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokho,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},sktt:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhott, function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},skkhongton:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhokhongton,function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})},sknpp:$callback$jscomp$0$$=>{setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,global.getModel("sokhonpp"),function($detail$$,$callback$$){$callback$$($detail$$)})).remove(function($e$$){$callback$jscomp$0$$($e$$)})})}, vsc:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vsocai"))return $callback$$();vsocai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},sc:$callback$$=>{setImmediate(()=>{Socai.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},sctmp:$callback$$=>{setImmediate(()=>{global.getModel("socaitmp").deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},vatra:$callback$$=> {setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatra"))return $callback$$();Vatra.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},vatvao:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("vatvao"))return $callback$$();Vatvao.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttno.find({id_ct:$obj$$._id.toString()}, {_id:1,tat_toan:1}).lean();if(0<$tdtts$$.length){if(0<$tdtts$$.filter($t$$=>$t$$.tat_toan).length)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttno_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}Tdttno.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttco:$callback$$=>{setImmediate(async()=>{let $tdtts$$=await Tdttco.find({id_ct:$obj$$._id.toString()},{_id:1,tat_toan:1}).lean();if(0<$tdtts$$.length){if(0<$tdtts$$.filter($t$$=> $t$$.tat_toan).length)return $callback$$(null);$tdtts$$=$tdtts$$.map($t$$=>$t$$._id.toString());if(await Tdttco_tt.findOne({id_tdtt:{$in:$tdtts$$}}))return $callback$$()}Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttno_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);$obj$$.tdttnos?async.map($obj$$.tdttnos, function($detail$$,$callback$$){setImmediate(()=>{Tdttno.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})},tdttco_tt:$callback$jscomp$0$$=>{setImmediate(()=>{Tdttco_tt.deleteMany({id_ct:$obj$$._id.toString()},function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$); $obj$$.tdttcos?async.map($obj$$.tdttcos,function($detail$$,$callback$$){setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_tdtt},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){$e$$&&console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})}},function($e$$){$e$$&&console.error("delete books",$e$$);$callback$jscomp$1$$($e$$,$obj$$)})},runWebhooks=async($ctrl$$,$obj$$,$action$$,$voucher_options$$)=> {$voucher_options$$||($voucher_options$$=(await OptionsModel.findOne({id_app:$obj$$.id_app,id_func:$ctrl$$.name},{option:1}).lean()||{}).option);if($voucher_options$$&&$voucher_options$$.option_webhooks&&($ctrl$$=$voucher_options$$.option_webhooks.find($w$$=>$w$$.action.toUpperCase()===$action$$.toUpperCase()&&$w$$.url))){$voucher_options$$=path.dirname(__dirname)+"/workers/webhook.js";if(!fs.existsSync($voucher_options$$))return console.error("webhook process is not exitst");global.webhookPool|| (global.webhookPool=new StaticPool($voucher_options$$,0,1));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error("runWebhooks",$response$$.error):console.log($response$$)})}},getNextSequence=async function($id_app$$,$ma_ct$$,$field$$,$callback$$,$options$$={}){var $condition_qct_qcts$$={status:!0,field:$field$$,id_app:$id_app$$,$and:[{$or:[{ma_ct:"#",ma_ct_khac:{$regex:$ma_ct$$,$options:"i"}},{cac_ma_ct:$ma_ct$$.toLowerCase()},{ma_ct:$ma_ct$$.toUpperCase()}]}]}; $options$$.id_qct&&($condition_qct_qcts$$._id=$options$$.id_qct);if($options$$.ngay_ct){let $start_date$$=moment($options$$.ngay_ct).startOf("date").toDate(),$end_date$$=moment($options$$.ngay_ct).endOf("date").toDate();$condition_qct_qcts$$.$and.push({$or:[{tu_ngay:null},{tu_ngay:{$lte:$end_date$$}}]});$condition_qct_qcts$$.$and.push({$or:[{den_ngay:null},{den_ngay:{$gte:$start_date$$}}]})}$options$$.toObject&&($options$$=$options$$.toObject());$condition_qct_qcts$$=await dmqct.find($condition_qct_qcts$$).lean(); const $keys$$=Object.keys($options$$),$qct$$=$condition_qct_qcts$$.find($qct$$=>{if($qct$$.dieu_kien&&0<$keys$$.length)try{let $str_func$$=$qct$$.dieu_kien;if(0<=$str_func$$.indexOf("async "))return!1;0!==$str_func$$.indexOf("return ")&&($str_func$$=`return ${$str_func$$}`);return evalute($str_func$$,{...$options$$,master:{...$options$$},moment,numeral})}catch($e$$){return console.error("Error find quyen chung tu",$e$$,$qct$$.dieu_kien),!1}else return!0});let $code$$=$qct$$?$qct$$._id.toString(): $field$$;counter.getNextSequence($id_app$$,$ma_ct$$,$code$$,async function($error$$,$rs$$){if($error$$)console.error("auto create code for",$ma_ct$$,$code$$,$error$$),$callback$$($error$$);else{if($qct$$){let $tien_to$$=$qct$$.tien_to||"";if(0<=$tien_to$$.indexOf("return ")&&0>$tien_to$$.indexOf("async "))try{$tien_to$$=evalute($tien_to$$,{...$options$$,moment,numeral}),$tien_to$$=$tien_to$$.toString().trim()}catch($e$$){console.error("getNextSequence",$e$$)}let $hau_to$$=$qct$$.hau_to||"";if(0<= $hau_to$$.indexOf("return ")&&0>$hau_to$$.indexOf("async "))try{$hau_to$$=evalute($hau_to$$,{...$options$$,moment,numeral}),$hau_to$$=$hau_to$$.toString().trim()}catch($e$$){console.error("getNextSequence",$e$$)}!$qct$$.tu_dong_reset||void 0==$qct$$.tien_to_ht||void 0==$qct$$.hau_to_ht||$qct$$.tien_to_ht==$tien_to$$&&$qct$$.hau_to_ht==$hau_to$$||($rs$$=1,await counter.updateOne({id_app:$id_app$$,name:$ma_ct$$.toUpperCase(),field:$code$$},{sequence:$rs$$}));$rs$$=($qct$$.tu_so||0)+$rs$$;$error$$=$rs$$.toString(); var $den_so_so_ky_tu_them$$=$qct$$.den_so;$den_so_so_ky_tu_them$$||($den_so_so_ky_tu_them$$=999999);$den_so_so_ky_tu_them$$=$den_so_so_ky_tu_them$$.toString().length-$error$$.length;$error$$=0<$den_so_so_ky_tu_them$$?($tien_to$$||"")+"0000000000000000000000".substring(0,$den_so_so_ky_tu_them$$)+$error$$+$hau_to$$:($tien_to$$||"")+$error$$+$hau_to$$;$qct$$.so_ht=$rs$$;$qct$$.tien_to_ht=$tien_to$$;$qct$$.hau_to_ht=$hau_to$$;await dmqct.updateOne({_id:$qct$$._id},$qct$$)}else $error$$=$rs$$.toString(); $rs$$={};$rs$$[$field$$]=$error$$;$callback$$(null,$rs$$)}})}; function checkReference($model$jscomp$0$$,$obj$$,$fn$$,$keys$$){$model$jscomp$0$$.referenceKeys?($keys$$||($keys$$=_.keys($model$jscomp$0$$.referenceKeys)),async.map($keys$$,function($key$$,$callback$$){setImmediate(()=>{let $ref$$=$model$jscomp$0$$.referenceKeys[$key$$];if(!$ref$$)return $callback$$();let $value$$=$obj$$[$key$$];"_id"===$key$$&&($value$$=$value$$.toString());if(void 0==$value$$||null==$value$$||""==$value$$)return $callback$$();async.map($ref$$,function($r$$,$cb$$){setImmediate(()=> {let $model$$=mongoose.models[$r$$.model];if($model$$){let $query$$={id_app:$obj$$.id_app};var $_w_k$$=$r$$.key;$_w_k$$&&($query$$[$_w_k$$]=$value$$);$r$$.where&&(_.isObject($r$$.where)&&($query$$=Object.assign($query$$,$r$$.where)),_.isFunction($r$$.where)&&($_w_k$$=$r$$.where($obj$$),$query$$=Object.assign($query$$,$_w_k$$)));$model$$.find($query$$).limit(1).lean().exec(function($error$$,$o$$){setImmediate(()=>{if($error$$)return $cb$$($error$$);if($o$$&&0<$o$$.length){let $msgError$$;$msgError$$= $r$$.error?(new Function("obj","return `"+$r$$.error.replace("{{VALUE}}",$value$$)+"`"))($obj$$):ERRORS.ERR_DATA_GENERATED;return $cb$$({error:$msgError$$,code:ERRORS.ERR_DATA_GENERATED_CODE})}$cb$$()})})}else $cb$$()})},function($e$$){if($e$$)return $callback$$($e$$);$callback$$()})})},$error$$=>{$fn$$($error$$)})):$fn$$()} const getParameters=($id_app$$,$rps_rpt_ids$$,$callback$$)=>{let $parameters$$=$rps_rpt_ids$$.filter($r$$=>$r$$.parameters).map($r$$=>$r$$.parameters).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);0<$parameters$$.length?$callback$$(null,$parameters$$):($rps_rpt_ids$$=$rps_rpt_ids$$.map($r$$=>$r$$._id),global.getModel("parameter").find({id_app:$id_app$$,id_rpt:{$in:$rps_rpt_ids$$}}).lean().exec(function($e$$,$parameters$$){setImmediate(()=>{if($e$$)return $callback$$($e$$);$callback$$(null,$parameters$$)})}))}, prepareParameters=function($ctrl$$,$parameters$$,$app$$,$obj$$,$callback$jscomp$0$$){async.mapSeries($parameters$$,function($p$$,$callback$$){setImmediate(()=>{(async()=>{if("W"===$p$$.type||"EN"===$p$$.type)try{$app$$[$p$$.name]="EN"===$p$$.type?numberToWord($obj$$[$p$$.value],{lang:"en"}):numberToWord($obj$$[$p$$.value])}catch($e$$){console.error("prepareParameters",$e$$),$app$$[$p$$.name]=$e$$.message}else if("Q"===$p$$.type)try{var $query$jscomp$1_sandbox$$=await evalute("return {"+$p$$.value+ "}",{});if($query$jscomp$1_sandbox$$.collection&&$query$jscomp$1_sandbox$$.field){"dmkh"==$query$jscomp$1_sandbox$$.collection&&($query$jscomp$1_sandbox$$.collection="customer");"dmtk"==$query$jscomp$1_sandbox$$.collection&&($query$jscomp$1_sandbox$$.collection="account");var $condition$$=$query$jscomp$1_sandbox$$.condition;if($condition$$){$condition$$=JSON.stringify($condition$$);for(let $m$$ in $obj$$)$condition$$=$condition$$.replace(new RegExp("m."+$m$$,"g"),$obj$$[$m$$]);$condition$$=JSONParser($condition$$)}else $condition$$= {};$app$$[$p$$.name]=await getData($app$$.id_app,$query$jscomp$1_sandbox$$.collection,$query$jscomp$1_sandbox$$.field,$condition$$)}}catch($e$$){$app$$[$p$$.name]=$e$$}else if("E"===$p$$.type&&$p$$.value){$condition$$=$p$$.value;0>$condition$$.indexOf("return ")&&($condition$$=`return ${$condition$$}`);if(0<=$condition$$.indexOf("async "))return $app$$[$p$$.name]="async function is not allow";$condition$$=`return (async ()=>{ ${$condition$$} })`;$query$jscomp$1_sandbox$$={m:$obj$$,master:$obj$$,data:$obj$$,Moment:moment,Numeral:numeral,numberToWord,getData};try{$app$$[$p$$.name]=await evalute($condition$$,$query$jscomp$1_sandbox$$)()}catch($e$$){$app$$[$p$$.name]=$e$$.message}}else $app$$[$p$$.name]=$p$$.value})().then(()=>{$callback$$()}).catch(()=>{$callback$$()})})},function($e$jscomp$32_v$$){if($e$jscomp$32_v$$)return $callback$jscomp$0$$($e$jscomp$32_v$$);_.extend($app$$,$obj$$);if($ctrl$$.getData4Export)$ctrl$$.getData4Export($app$$, function($error$jscomp$16_v$$){if($error$jscomp$16_v$$)return $callback$jscomp$0$$($error$jscomp$16_v$$);for(let $key$$ in $app$$)$error$jscomp$16_v$$=$app$$[$key$$],_.isDate($error$jscomp$16_v$$)&&($app$$[$key$$+"_string"]=moment($error$jscomp$16_v$$).format("DD/MM/YYYY"));$callback$jscomp$0$$()});else{for(let $key$$ in $app$$)$e$jscomp$32_v$$=$app$$[$key$$],_.isDate($e$jscomp$32_v$$)&&($app$$[$key$$+"_string"]=moment($e$jscomp$32_v$$).format("DD/MM/YYYY"));$callback$jscomp$0$$()}})}; module.exports={createIdRef,postData,pushNotification,ERRORS,isExists,getData,asyncBodyToJson,bodyToJson,deleteEmptyArray,fields_sync_master_detail,runWebhooks,deletePost,getNextSequence,checkReference,getParameters,prepareParameters};