flexbiz-server
Version:
Flexible Server
33 lines (32 loc) • 16.4 kB
JavaScript
'use strict';const async=require("async"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),numeral=require("numeral"),_=require("lodash"),validate=require("../libs/validate"),permission=require("../libs/permission"),{evalute}=require("../libs/utils"),{asyncBodyToJson,ERRORS,getNextSequence,isExists,createIdRef,fields_sync_master_detail,postData,pushNotification,runWebhooks,deletePost}=require("./controllerUtils"),create=async($ctrl$$,$req$$,
$callback$jscomp$1$$)=>{let {user:$user$$,data:$data$$,id_be_supply_by_user:$id_be_supply_by_user$$,action:$action$$}=$req$$;$action$$||($action$$="add");try{const $model$$=$ctrl$$.model,$voucher_options$$=(await global.getModel("options").findOne({id_app:$user$$.current_id_app,id_func:$ctrl$$.name}).lean()||{}).option,$schema_paths$$=$model$$.schema.paths;let $v_data$$;try{$v_data$$=await asyncBodyToJson($data$$,$ctrl$$,$user$$.current_id_app,$voucher_options$$)}catch($e$$){return $callback$jscomp$1$$($e$$.message||
$e$$.error||$e$$)}$schema_paths$$.ma_ct&&$ctrl$$.options.isVoucher&&($v_data$$.ma_ct=$ctrl$$.name.toUpperCase());delete $v_data$$.session_created;delete $v_data$$.session_updated;$req$$&&$schema_paths$$.session_created&&($v_data$$.session_created=($req$$.cookies||{}).uid);if($ctrl$$.options.requireRecaptchaToken&&configs.GOOGLE_RECAPTCHA_SECRET_KEY){if(!$v_data$$["g-recaptcha-response"])return $callback$jscomp$1$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u g-recaptcha-response");try{await permission.verifyReCaptcha($v_data$$["g-recaptcha-response"])}catch($e$$){return $callback$jscomp$1$$($e$$.message||
$e$$.error||$e$$)}}let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($v_data$$,{action:$action$$,user:$user$$}));if($requireOtp$$&&"import"!=$action$$)try{await permission.verifyOTP($user$$.email,$v_data$$["otp-id"],$v_data$$["otp-code"])}catch($e$$){return $callback$jscomp$1$$({error:$e$$.message||$e$$.error||$e$$,code:ERRORS.ERR_VERIFY_OTP})}if($ctrl$$.dynamicCreating)try{$v_data$$=await new Promise(($resolve$$,$reject$$)=>{try{$ctrl$$.dynamicCreating($user$$,
$v_data$$,function($error$$,$v_data$$){if($error$$)return $reject$$($error$$);$resolve$$($v_data$$)})}catch($e$$){return $reject$$($e$$)}})}catch($e$$){return $callback$jscomp$1$$($e$$.message||$e$$.error||$e$$)}const $obj$jscomp$0$$=new $model$$;$schema_paths$$.exfields&&($obj$jscomp$0$$.exfields=$v_data$$.exfields||{});for(let $f$$ in $v_data$$)$schema_paths$$[$f$$]&&($obj$jscomp$0$$.set($f$$,$v_data$$[$f$$]),"exfields"!==$f$$||$obj$jscomp$0$$.exfields||($obj$jscomp$0$$.exfields={}));$schema_paths$$.id_app&&
($obj$jscomp$0$$.id_app=$user$$.current_id_app);const $checkVoucherNumber$$=$callback$$=>{$model$$.schema.paths.ngay_ct&&$obj$jscomp$0$$.ngay_ct?setImmediate(()=>{if($voucher_options$$&&$voucher_options$$.check_so_ct&&"0"!==$voucher_options$$.check_so_ct){let $query_check$$={id_app:$obj$jscomp$0$$.id_app,so_ct:$obj$jscomp$0$$.so_ct},$tu_ngay$$,$den_ngay$$;switch($voucher_options$$.check_so_ct){case "1":$tu_ngay$$=moment($obj$jscomp$0$$.ngay_ct).startOf("day").toDate();$den_ngay$$=moment($obj$jscomp$0$$.ngay_ct).endOf("day").toDate();
$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "2":$tu_ngay$$=moment($obj$jscomp$0$$.ngay_ct).startOf("month").toDate();$den_ngay$$=moment($obj$jscomp$0$$.ngay_ct).endOf("month").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "3":$tu_ngay$$=moment($obj$jscomp$0$$.ngay_ct).startOf("quarter").toDate();$den_ngay$$=moment($obj$jscomp$0$$.ngay_ct).endOf("quarter").toDate();$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$};break;case "8":$tu_ngay$$=
moment($obj$jscomp$0$$.ngay_ct).startOf("year").toDate(),$den_ngay$$=moment($obj$jscomp$0$$.ngay_ct).endOf("year").toDate(),$query_check$$.ngay_ct={$gte:$tu_ngay$$,$lte:$den_ngay$$}}$model$$.findOne($query_check$$,{so_ct:1}).lean().exec(($e$jscomp$0$$,$rs$$)=>{setImmediate(()=>{if($rs$$){let $msgError$$="S\u1ed1 ch\u1ee9ng t\u1eeb "+$obj$jscomp$0$$.so_ct+" \u0111\u00e3 t\u1ed3n t\u1ea1i. H\u00e3y ch\u1ecdn m\u1ed9t s\u1ed1 ch\u1ee9ng t\u1eeb kh\u00e1c";if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,
$obj$jscomp$0$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else $callback$$()})})}else $callback$$()}):$callback$$()};let $File$$=global.getModel("file"),$Support$$=global.getModel("support");async.waterfall([function($callback$$){setImmediate(async function(){let $notNeedRight$$=await $ctrl$$.notNeedRight($user$$,{action:$action$$,obj:$obj$jscomp$0$$});permission.hasRight($obj$jscomp$0$$.id_app,$user$$.email,$ctrl$$.module,$action$$,
function($error$jscomp$0$$,$hr$$,$c_app$$){setImmediate(()=>{if($error$jscomp$0$$||!$hr$$)return $error$jscomp$0$$=$error$jscomp$0$$||"",$callback$$({error:$error$jscomp$0$$.error||$error$jscomp$0$$||ERRORS.ERR_NOT_PERMIT,code:$error$jscomp$0$$.code||ERRORS.ERR_NOT_PERMIT_CODE});$ctrl$$.checkData($c_app$$,$obj$jscomp$0$$,$e$$=>{if($e$$)return $callback$$($e$$);$ctrl$$.creating?$ctrl$$.creating($user$$,$obj$jscomp$0$$,function($error$$,$_obj$$){if($error$$)return $callback$$($error$$);for(let $f$$ of Object.keys($schema_paths$$))$error$$=
$_obj$$.get?$_obj$$.get($f$$):$_obj$$[$f$$],$obj$jscomp$0$$.set($f$$,$error$$);$callback$$(null,$obj$jscomp$0$$)},{data:$data$$,action:$action$$}):$callback$$(null,$obj$jscomp$0$$)})})},{data:$obj$jscomp$0$$,notNeedRight:$notNeedRight$$})})},($obj$$,$callback$jscomp$0$$)=>{setImmediate(()=>{var $condition_qct_ma_ct$$=$ctrl$$.name;$condition_qct_ma_ct$$={status:!0,id_app:$obj$$.id_app,$and:[{$or:[{ma_ct:"#",ma_ct_khac:{$regex:$condition_qct_ma_ct$$,$options:"i"}},{cac_ma_ct:$condition_qct_ma_ct$$.toLowerCase()},
{ma_ct:$condition_qct_ma_ct$$.toUpperCase()}]}]};let $_options_qct$$;$_options_qct$$=$obj$$.toObject?$obj$$.toObject():{...$obj$$};let $keys_options$$=Object.keys($_options_qct$$);global.getModel("dmqct").find($condition_qct_ma_ct$$).lean().exec(($e$jscomp$0$$,$rs$$)=>{setImmediate(()=>{let $qcts$$=($rs$$||[]).filter($qct$$=>"so_ct"!==$qct$$.field&&!$obj$$[$qct$$.field]&&$model$$.schema.paths[$qct$$.field]);$qcts$$=$qcts$$.filter($qct$$=>{if($qct$$.dieu_kien&&0<$keys_options$$.length)try{let $str_func$$=
$qct$$.dieu_kien;0!==$str_func$$.indexOf("return ")&&($str_func$$=`return ${$str_func$$}`);return 0<$str_func$$.indexOf("async ")?!1:evalute($str_func$$,{...$_options_qct$$,master:{...$_options_qct$$},moment,numeral})}catch($e$$){return console.error("Error find quyen chung tu",$e$$.message,$qct$$.dieu_kien),!1}else return!0});async.mapSeries($qcts$$,($qct$$,$cb$$)=>{setImmediate(()=>{let $field$$=$qct$$.field,$_options$$={...$_options_qct$$};$_options$$.id_qct=$qct$$._id.toString();let $count$$=
0;async.whilst(function($cb$$){$cb$$(null,10>$count$$)},function($callback$$){getNextSequence($obj$$.id_app,$ctrl$$.name,$field$$,function($e$$,$rs$$){setImmediate(async()=>{if($e$$)return $callback$$($e$$);$obj$$[$field$$]=$rs$$[$field$$];$qct$$.check_duplicate?await $model$$.findOne({id_app:$obj$$.id_app,[$field$$]:$obj$$[$field$$]},{[$field$$]:1}).lean()?9<=$count$$?$callback$$(`Kh\u00f4ng th\u1ec3 t\u1ef1 \u0111\u1ed9ng t\u1ea1o gi\u00e1 cho field ${$field$$}. H\u00e3y s\u1eed d\u1ee5ng quy\u1ec3n ch\u1ee9ng t\u1eeb kh\u00e1c`):
($count$$++,$callback$$()):($count$$=99999,$callback$$()):($count$$=99999,$callback$$())})},$_options$$)},function($err$$){$cb$$($err$$)})})},$e$$=>{setImmediate(()=>{$callback$jscomp$0$$($e$$)})})})})})},$callback$jscomp$0$$=>{setImmediate(function(){if($model$$.schema.paths.so_ct)if($obj$jscomp$0$$.so_ct&&$obj$jscomp$0$$.so_ct.toUpperCase()!==$ctrl$$.name.toUpperCase())$checkVoucherNumber$$($error$$=>{$callback$jscomp$0$$($error$$)});else{let $count$$=0;async.whilst(function($cb$$){$cb$$(null,10>
$count$$)},function($callback$$){getNextSequence($obj$jscomp$0$$.id_app,$ctrl$$.name,"so_ct",function($e$$,$rs$$){setImmediate(()=>{if($e$$)return $callback$$($e$$);$obj$jscomp$0$$.so_ct=$rs$$.so_ct;$checkVoucherNumber$$($error$$=>{$error$$?9<=$count$$?$callback$$($error$$):($count$$++,$callback$$()):($count$$=99999,$callback$$())})})},$obj$jscomp$0$$)},function($err$$){$callback$jscomp$0$$($err$$)})}else $callback$jscomp$0$$()})},function($callback$$){setImmediate(async()=>{if($model$$.schema.paths.ma_dvcs&&
"dvcs"!==$ctrl$$.name)if($obj$jscomp$0$$.ma_dvcs)if(global.mongoose.Types.ObjectId.isValid($obj$jscomp$0$$.ma_dvcs)){let $_id_dvcs$$=global.mongoose.Types.ObjectId($obj$jscomp$0$$.ma_dvcs);await global.getModel("dvcs").findOne({_id:$_id_dvcs$$})?$callback$$():global.getModel("dvcs").create({_id:$_id_dvcs$$,ma_dvcs:"IMPORTED",ten_dvcs:"Imported"},$e$$=>{setImmediate(()=>{$e$$&&console.error("Can't import dvcs",$e$$);$callback$$()})})}else $callback$$();else global.getModel("dvcs").findOne({id_app:$obj$jscomp$0$$.id_app,
status:!0}).lean().exec(function($e$$,$rs$$){setImmediate(()=>{$rs$$&&($obj$jscomp$0$$.ma_dvcs=$rs$$._id.toString());$callback$$()})});else $callback$$()})},$callback$$=>{$ctrl$$.validating||($ctrl$$.validating=($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)});$ctrl$$.validating($user$$,$obj$jscomp$0$$,$e$jscomp$0$$=>{if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);setImmediate(()=>{$obj$jscomp$0$$.user_created="import"==$action$$?$obj$jscomp$0$$.user_created||$user$$.email:$user$$.email;$obj$jscomp$0$$.user_updated=
$user$$.email;$obj$jscomp$0$$.date_created=new Date;$obj$jscomp$0$$.date_updated=new Date;validate($obj$jscomp$0$$,async $error$$=>{setImmediate(async()=>{if($error$$){let $msgError$$=$error$$;if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)});else $callback$$($msgError$$)}else{if($id_be_supply_by_user$$&&global.mongoose.Types.ObjectId.isValid($id_be_supply_by_user$$)){let $_id$$=global.mongoose.Types.ObjectId($id_be_supply_by_user$$);
await $model$$.findOne({_id:$_id$$},{_id:1})||($obj$jscomp$0$$._id=$_id$$)}$callback$$()}})},$voucher_options$$)})},{action:$action$$})},function($callback$$){setImmediate(function(){isExists($model$$,$ctrl$$.unique,$obj$jscomp$0$$,$ctrl$$.replaceIfExists,async($error$jscomp$1$$,$kq$$)=>{setImmediate(async()=>{if($error$jscomp$1$$||$kq$$){let $msgError$$=$error$jscomp$1$$||ERRORS.ERR_ALREADY_EXIST;if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$jscomp$0$$,$e$$=>{$e$$&&
($msgError$$=$msgError$$+"\n"+$e$$);$callback$$({error:$msgError$$,code:ERRORS.ERR_ALREADY_EXIST_CODE})});else $callback$$({error:$msgError$$,code:ERRORS.ERR_ALREADY_EXIST_CODE})}else{for(let $k$$ in $ctrl$$.keyValues)$obj$jscomp$0$$[$k$$]=$ctrl$$.keyValues[$k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$jscomp$0$$[$model_path$$]&&_.isArray($obj$jscomp$0$$[$model_path$$])).forEach($model_path$$=>{$model$$.schema.paths[$model_path$$].schema&&$model$$.schema.paths[$model_path$$].schema.paths&&
Object.keys($model$$.schema.paths[$model_path$$].schema.paths).filter($path$$=>"line"!==$path$$&&"_id"!==$path$$&&"__v"!==$path$$&&0<=fields_sync_master_detail.indexOf($path$$)).forEach($path$$=>{$obj$jscomp$0$$[$path$$]&&$obj$jscomp$0$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$jscomp$0$$[$path$$]})})});await createIdRef($model$$,$obj$jscomp$0$$);if($ctrl$$.saving)try{await $ctrl$$.saving($user$$,$obj$jscomp$0$$,$action$$)}catch($e$$){return $callback$$({error:$e$$.message||
$e$$.error||$e$$})}$ctrl$$.emit("saving",$obj$jscomp$0$$);$obj$jscomp$0$$.save(function($error$jscomp$0$$,$obj_created$$){setImmediate(()=>{if($error$jscomp$0$$){if($ctrl$$.options.onErrorSave)$ctrl$$.options.onErrorSave($user$$,$obj$jscomp$0$$,$error$jscomp$0$$,$action$$);let $msgErrors$$=[];for(let $k$$ in $error$jscomp$0$$.errors)$msgErrors$$.push($error$jscomp$0$$.errors[$k$$].message);0==$msgErrors$$.length&&($msgErrors$$=$error$jscomp$0$$.message);$msgErrors$$||($msgErrors$$=JSON.stringify($error$jscomp$0$$));
if($ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$jscomp$0$$,$e$$=>{$e$$&&console.error("onErrorCreating",$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$)}else postData($obj_created$$,$ctrl$$,function($msgErrors$$){setImmediate(async()=>{if($msgErrors$$)if($model$$.deleteOne({_id:$obj_created$$._id.toString()},$err$$=>{$err$$&&console.error("Error remove obj when has error post data:",$err$$,{_id:$obj_created$$._id.toString()});setImmediate(()=>{deletePost($obj_created$$.user_updated,
$obj_created$$,async function($e_delete_post$$){$e_delete_post$$&&console.error("deletePost",$e_delete_post$$)})})}),$ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgErrors$$=$msgErrors$$+"\n"+$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$);else if($ctrl$$.emit("saved",$obj_created$$),$ctrl$$.emit("created",$obj_created$$),global.getModel("customer").updateActives&&global.getModel("customer").updateActives($obj_created$$),$obj_created$$=
$obj_created$$.toObject(),$req$$&&$req$$.header&&setImmediate(()=>{global.getModel("log").create({id_app:$user$$.current_id_app,id_func:$ctrl$$.name,action:$action$$.toUpperCase(),data:{id:$obj_created$$._id.toString(),data:$obj_created$$}},$user$$.email,$req$$.user_agent,$req$$)}),runWebhooks($ctrl$$,$obj_created$$,$action$$.toUpperCase(),$voucher_options$$),await $ctrl$$.cacheData($obj_created$$,void 0,$action$$),"import"===$action$$||$req$$&&0==($req$$.query||{}).return_data)$callback$$(null,{_id:$obj_created$$._id.toString()});
else $ctrl$$.onView($user$$,[$obj_created$$],($error$$,$viewValue$$)=>{setImmediate(()=>{if($error$$)return $callback$$($error$$);$req$$&&pushNotification($ctrl$$,$viewValue$$?$viewValue$$[0]:$obj_created$$,"new",null,null,{exclude_token:($req$$.query||{}).access_token});$callback$$(null,$obj_created$$)})},{req:$req$$})})},{req:$req$$})})})}})})})},function($obj$$,$callback$$){$ctrl$$.requestApprove($user$$.current_app_info,$user$$,$obj$$,$callback$$,$voucher_options$$)},function($obj$$,$callback$$){setImmediate(function(){$obj$$.collection_name=
$ctrl$$.collection_name;$obj$$.exfields&&$obj$$.exfields.__files__&&($obj$$.exfields.__files__.forEach($_file$$=>{$File$$.updateOne({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name}).lean().exec($e$$=>{$e$$&&console.error("File updateone",$e$$)})}),delete $obj$$.exfields.__files__);$obj$$.exfields&&$obj$$.exfields.__supports__&&($obj$$.exfields.__supports__.forEach($_file$$=>{$Support$$.updateOne({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name}).lean().exec($e$$=>
{console.error("support updateone",$e$$)})}),delete $obj$$.exfields.__supports__);if($ctrl$$.created)$ctrl$$.created($user$$,$obj$$,function($error$jscomp$0$$,$rs$$){setImmediate(()=>{if($error$jscomp$0$$)return $callback$$($error$jscomp$0$$);if($ctrl$$.dynamicCreated)$ctrl$$.dynamicCreated($user$$,$rs$$,function($error$$){if($error$$)return $callback$$($error$$);$req$$&&$req$$.uploadFile?($error$$="<html><title>OK</title><body>"+JSON.stringify($rs$$)+"</body></html>",$callback$$(null,$error$$)):
$callback$$(null,$rs$$)});else if($req$$&&$req$$.uploadFile){let $html$$="<html><title>OK</title><body>"+JSON.stringify($rs$$)+"</body></html>";$callback$$(null,$html$$)}else $callback$$(null,$rs$$)})});else if($ctrl$$.dynamicCreated)$ctrl$$.dynamicCreated($user$$,$obj$$,function($error$jscomp$12_html$$){if($error$jscomp$12_html$$)return $callback$$($error$jscomp$12_html$$);$req$$&&$req$$.uploadFile?($error$jscomp$12_html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>",$callback$$(null,
$error$jscomp$12_html$$)):$callback$$(null,$obj$$)});else if($req$$&&$req$$.uploadFile){let $html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>";$callback$$(null,$html$$)}else $callback$$(null,$obj$$)})}],($e$$,$rs$$)=>{$e$$?(console.error($e$$),$callback$jscomp$1$$($e$$)):($e$$=$model$$.collection.name,$user$$.current_id_app&&($e$$+=$user$$.current_id_app),delete global.cacheDatas[$e$$],$callback$jscomp$1$$(null,$rs$$))})}catch($e$$){console.error($e$$),$callback$jscomp$1$$($e$$)}};
module.exports=create;