flexbiz-server 12.0.17 → 12.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "flexbiz-server",
3
3
  "main": "./server/app.js",
4
4
  "description": "Flexible Server",
5
- "version": "12.0.17",
5
+ "version": "12.0.20",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -2,30 +2,32 @@
2
2
  global.getModel("otp"),DIGITS="0123456789",jwt=require("jsonwebtoken");function generateOTP(){let $OTP$$="";for(let $i$$=0;6>$i$$;$i$$++)$OTP$$+=DIGITS[Math.floor(10*Math.random())];return $OTP$$}
3
3
  function generateToken($user$$){var $body_n_n$$={email:$user$$.email};configs.APP_SECRET?jwt.sign({user:$body_n_n$$},configs.APP_SECRET):($body_n_n$$=new Date,_crypto.createHash("md5").update($user$$.email+$body_n_n$$.toISOString()).digest("hex"));$body_n_n$$=new Date;return _crypto.createHash("md5").update($user$$.email+$body_n_n$$.toISOString()).digest("hex")}
4
4
  function saveOTP($Phone$$,$otp_code$$,$callback$$,$expires$$=5){let $expire_time$$=new Date;$expire_time$$.setMinutes($expire_time$$.getMinutes()+$expires$$);OTP.create({phone:$Phone$$,otp:$otp_code$$,expire_time:$expire_time$$},($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);$callback$$(null,$rs$$.toObject())})}
5
- function findByUsername($username$$,$fn$$){if(!$username$$)return $fn$$("B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");User.findOne({email:$username$$},function($error$$,$result$$){return!$error$$&&$result$$&&$result$$.local?$fn$$(null,$result$$):$fn$$($error$$||`T\u00e0i kho\u1ea3n ${$username$$} kh\u00f4ng t\u1ed3n t\u1ea1i`)})}
6
- module.exports=function($app$$,$passport$$){const $rateLimiter$$=global.createRateLimiterMiddleware(configs.limitRequest.auth||{},"auth");$passport$$.use(new BasicStrategy(function($username$$,$password$$,$done$$){if(!$username$$)return $done$$("B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");$username$$=$username$$.trim().toLowerCase();setImmediate(function(){findByUsername($username$$,function($err$$,$user$$){if($err$$)return $done$$($err$$);if(!$user$$)return $done$$("T\u00e0i kho\u1ea3n "+
5
+ function findByUsername($username$$,$fn$$){if(!$username$$)return $fn$$("B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");User.findOne({$or:[{email:$username$$},{email2:$username$$}]},function($error$$,$result$$){return!$error$$&&$result$$&&$result$$.local?$fn$$(null,$result$$):$fn$$($error$$||`T\u00e0i kho\u1ea3n ${$username$$} kh\u00f4ng t\u1ed3n t\u1ea1i`)})}
6
+ module.exports=async function($app$$,$passport$$){const $rateLimiter$$=await global.createRateLimiterMiddleware(configs.limitRequest.auth||{},"auth");$passport$$.use(new BasicStrategy(function($username$$,$password$$,$done$$){if(!$username$$)return $done$$("B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");$username$$=$username$$.trim().toLowerCase();setImmediate(function(){findByUsername($username$$,function($err$$,$user$$){if($err$$)return $done$$($err$$);if(!$user$$)return $done$$("T\u00e0i kho\u1ea3n "+
7
7
  $username$$+" ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd.");if($user$$.local.rspassword)if($user$$.validRspassword($password$$))$user$$.local.password=$user$$.local.rspassword,$user$$.local.rspassword=void 0,User.findOneAndUpdate({email:$user$$.email},{local:$user$$.local},($e$$,$rs$$)=>{if($e$$)return console.error("Can't update password",$user$$.email,$e$$);console.log("updated new password",$user$$.email,$rs$$)});else{if(!$user$$.validPassword($password$$))return $done$$("M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c.")}else{if(!$user$$.local.password)return $done$$("M\u1eadt kh\u1ea9u cho ng\u01b0\u1eddi d\u00f9ng n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i. H\u00e3y s\u1eed d\u1ee5ng t\u00ednh n\u0103ng kh\u00f4i ph\u1ee5c m\u1eadt kh\u1ea9u \u0111\u1ec3 \u0111\u1eb7t l\u1ea1i m\u1eadt kh\u1ea9u cho ng\u01b0\u1eddi d\u00f9ng n\u00e0y");
8
8
  if(!$user$$.validPassword($password$$))return $done$$("M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c.")}return $done$$(null,$user$$)})})}));$app$$.get("/send-otp/:phone",$rateLimiter$$,async($req_url$$,$res$$)=>{const $Phone$$=$req_url$$.params.phone.trim();if("9999"===$Phone$$)saveOTP($Phone$$,"9999",($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)});else{if(!await User.findOne({email:$Phone$$}))return $res$$.status(400).send({error:`T\u00e0i kho\u1ea3n ${$Phone$$} kh\u00f4ng t\u1ed3n t\u1ea1i`});
9
9
  var $otp_code$$=generateOTP();validator.isEmail($Phone$$)?email.sendHtml({to:{address:$Phone$$},subject:"M\u00e3 x\u00e1c th\u1ef1c",html:`Xin vui l\u00f2ng g\u1eedi qu\u00fd kh\u00e1ch m\u00e3 x\u00e1c th\u1ef1c: ${$otp_code$$}. M\u00e3 n\u00e0y s\u1ebd h\u1ebft h\u1ea1n s\u1eed d\u1ee5ng sau 5 ph\u00fat.`},function($error$$){$error$$?(console.error("Error send otp to email",$error$$),$res$$.status(400).send(`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi email ${$Phone$$}`)):
10
- saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)},5)},configs.sender_otp):($req_url$$=configs.sms.genUrlSendOTP($Phone$$,$otp_code$$),request({url:$req_url$$},($error$$,$response$$,$body$$)=>{$error$$||200!=$response$$.statusCode?$res$$.status(400).send($error$$||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`):($error$$=JSON.parse($body$$),"100"==$error$$.CodeResult?saveOTP($Phone$$,$otp_code$$,
11
- ($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)}):(console.error("Error send sms",$error$$),$res$$.status(400).send(`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`)))}))}});$app$$.get("/verify-otp/:id/:otp",$rateLimiter$$,async function($req$$,$res$$){try{const $id$$=$req$$.params.id,$otp_code$$=$req$$.params.otp,$otp$$=await OTP.findById($id$$);if(!$otp$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$otp$$.expire_time.getTime()<
12
- (new Date).getTime())return $res$$.status(400).send({error:"M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c",code:4001});await OTP.findOneAndUpdate({_id:$id$$},{verified:!0});let $is_new$$=!1;const $username$$=$otp$$.phone;let $user$$=await User.findOne({email:$username$$});if(!$user$$){$user$$=new User;$user$$.email=$username$$;$user$$.local={active:!0};$user$$.local.email=$otp$$.email;$user$$.local.phone=$otp$$.phone;$user$$.local.name=
13
- $otp$$.phone;$user$$.name=$otp$$.phone;$is_new$$=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}else if(!$user$$.local||!$user$$.local.active){$user$$.local=$user$$.local||{};$user$$.local.active=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}if($req$$.query.id_app&&$req$$.query.group_id){const $id_app$$=$req$$.query.id_app,$group_id$$=$req$$.query.group_id,
14
- $app$$=await App.findById($id_app$$);$app$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$$,active:!0},$cust_e$$=>{if($cust_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust_e$$={ten_kh:$user$$.name,email:$user$$.email,dien_thoai:$otp$$.phone,id_app:$id_app$$,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};try{Customer.asyncCreateCustomer($cust_e$$)}catch($e$$){console.log("Auto create new customer with error:",
15
- $e$$.message)}})}const $accessToken$$=generateToken($user$$),$agent$$=$req$$.headers["user-agent"];console.log("create new token for user",$user$$.email);(new Token({email:$user$$.email,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?!0:!1})).save(function($e$$,$rs$$){return $e$$?$res$$.status(500).send($e$$):$res$$.send({token:$accessToken$$,is_new:$is_new$$,once:$rs$$.once})})}catch($e$$){console.log("error verify otp",$e$$),
16
- $res$$.status(400).send($e$$.message)}});$app$$.post("/auth/sign",$rateLimiter$$,($req$$,$res$$,$next$$)=>{$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||!$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});$req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$jscomp$3_user$$,$res$$)=>{let $data$$=$req$jscomp$3_user$$.body;$req$jscomp$3_user$$=$req$jscomp$3_user$$.user;if(!$data$$)return $res$$.status(400).send("Not have data to sign");
17
- if(!$data$$.id_app)return $res$$.status(400).send("Data miss id_app property");try{let $signature$$=await Wallet.sign($data$$.id_app,$req$jscomp$3_user$$.email,$data$$);$res$$.send($signature$$)}catch($e$$){return $res$$.status(400).send($e$$.message||$e$$)}});$app$$.get("/auth/local",$rateLimiter$$,function($req$$,$res$$,$next$$){let $ip$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).split(".").join("").split(":").join(""),$authorization$$=$req$$.headers.authorization;
18
- if(!$authorization$$)return $res$$.status(400).send({message:"Authorization is required"});$authorization$$=Buffer.from($authorization$$.replace("Basic ",""),"base64").toString("utf-8");$authorization$$=$authorization$$.split(":");if(1<$authorization$$.length){var $t_session$$="times_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase(),$d_session$$="datetime_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase();$req$$.t_session=$t_session$$;$req$$.d_session=$d_session$$;var $now$$=new Date,
19
- $d$$=$now$$,$times_try$$=1;if($req$$.headers.cookie&&$req$$.session){$req$$=$req$$.session;$req$$[$t_session$$]?($times_try$$=$req$$[$t_session$$]+1,$req$$[$t_session$$]=$times_try$$):($req$$[$t_session$$]=$times_try$$,$req$$[$d_session$$]=$now$$);$req$$[$d_session$$]?$d$$=new Date($req$$[$d_session$$]):$req$$[$d_session$$]=$now$$;$req$$=$now$$.getTime()-$d$$.getTime();if(18E6>$req$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+
20
- Math.round((18E6-$req$$)/6E4,0)+" ph\u00fat"});$next$$()}else global.clientRedis.get($t_session$$,function($err$$,$reply$$){$reply$$?($times_try$$=Number($reply$$)+1,global.clientRedis.set($t_session$$,$times_try$$)):(global.clientRedis.set($t_session$$,$times_try$$),global.clientRedis.set($d_session$$,$now$$));global.clientRedis.get($d_session$$,function($err$jscomp$3_time_wait$$,$reply$$){$reply$$?$d$$=new Date($reply$$):global.clientRedis.set($d_session$$,$now$$);$err$jscomp$3_time_wait$$=$now$$.getTime()-
21
- $d$$.getTime();if(18E6>$err$jscomp$3_time_wait$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.round((18E6-$err$jscomp$3_time_wait$$)/6E4,0)+" ph\u00fat"});$next$$()})})}},function($req$$,$res$$,$next$$){$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||!$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});if(configs.require_verify&&
22
- !$user$$.local.active)return $res$$.status(401).send({require_verify:!0});$req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$$,$res$$)=>{let $agent$$=$req$$.headers["user-agent"];if($req$$.headers.cookie){var $group_id$jscomp$1_session$$=$req$$.session;$group_id$jscomp$1_session$$[$req$$.t_session]=0;$group_id$jscomp$1_session$$[$req$$.d_session]=""}else global.clientRedis.set($req$$.t_session,0),global.clientRedis.set($req$$.d_session,"");log.create({id_app:"LOGIN",id_func:"LOGIN",
23
- action:"LOCALLOGIN"},$req$$.user.email,$req$$.header("user-agent"),$req$$);let $user$$=$req$$.user;if($req$$.query.id_app&&$req$$.query.group_id&&global.mongoose.Types.ObjectId.isValid($req$$.query.group_id)){const $id_app$$=$req$$.query.id_app;$group_id$jscomp$1_session$$=$req$$.query.group_id;const $app$$=await App.findById($id_app$$),$group$$=await UserGroup.findOne({_id:$group_id$jscomp$1_session$$,is_customer_group:!0});$app$$&&$group$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,
24
- name:$user$$.name,group_id:$group_id$jscomp$1_session$$,active:!0},$cust$jscomp$1_e$$=>{if($cust$jscomp$1_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust$jscomp$1_e$$={ten_kh:$user$$.name,email:$user$$.email,id_app:$id_app$$,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};validator.isMobilePhone($user$$.email,["vi-VN"])&&($cust$jscomp$1_e$$.dien_thoai=$user$$.email);try{Customer.asyncCreateCustomer($cust$jscomp$1_e$$)}catch($e$$){console.log("Auto create new customer with error:",
25
- $e$$.message)}})}const $accessToken$$=generateToken($user$$);(new Token({email:$user$$.email,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?!0:!1})).save(function($e$$,$rs$$){if($e$$)return $res$$.status(500).send($e$$);$res$$.send({token:$accessToken$$,once:$rs$$.once})})});$app$$.get("/check-user/:email",$rateLimiter$$,function($req$$,$res$$){User.findOne({email:$req$$.params.email},{email:1,name:1,picture:1}).lean().exec(function($e$$,
26
- $user$$){if($e$$)return $res$$.status(400).send($e$$);$res$$.send($user$$)})});$app$$.post("/signup",$rateLimiter$$,async($req$$,$res$$)=>{var $body$$=$req$$.body;$body$$.json&&($body$$=JSON.parse($body$$.json));if(!$body$$)return $res$$.status(400).send("Kh\u00f4ng c\u00f3 n\u1ed9i dung");if(!$body$$.email)return $res$$.status(400).send("L\u1ed7i: B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");$body$$.email=$body$$.email.trim().toLowerCase();if(!$body$$.name)return $res$$.status(400).send("L\u1ed7i: H\u1ecd v\u00e0 t\u00ean ch\u01b0a nh\u1eadp");
27
- User.findOne({email:$body$$.email},function($error$jscomp$1$$,$result$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);if($result$$){if($result$$.local&&$result$$.local.email==$body$$.email)return $res$$.status(400).send("L\u1ed7i: T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd");$result$$.local||($result$$.local={})}else $result$$=new User,$result$$.email=$body$$.email,$result$$.local={};$result$$.local.email=$body$$.email;$result$$.local.name=
28
- $body$$.name;$result$$.partner=$body$$.partner;$result$$.name=$result$$.local.name;$body$$.picture?$result$$.local.picture=$body$$.picture:$result$$.local.picture||($result$$.local.picture="/images/avatar.jpg");let $password$$;if($body$$.password){if($body$$.rePassword!==$body$$.password)return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");if(!User.teststrengthPassword($body$$.password))return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u ph\u1ea3i c\u00f3 \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1 v\u00e0 bao g\u1ed3m \u00edt nh\u1ea5t m\u1ed9t ch\u1eef s\u1ed1, m\u1ed9t ch\u1eef hoa v\u00e0 m\u1ed9t ch\u1eef th\u01b0\u1eddng");
10
+ saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)},5)},configs.sender_otp):configs.sms.send?configs.sms.send($Phone$$,$otp_code$$).then($rs$jscomp$0$$=>{$rs$jscomp$0$$.error_message?$res$$.status(400).send({error:$rs$jscomp$0$$.message||$rs$jscomp$0$$.error||$rs$jscomp$0$$.error_message||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`}):saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);
11
+ $res$$.send($rs$$)})}).catch($e$$=>{console.error("Error send sms",$e$$);$res$$.status(400).send({error:$e$$.message||$e$$.error_message||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`})}):($req_url$$=configs.sms.genUrlSendOTP($Phone$$,$otp_code$$),request({url:$req_url$$},($error$$,$response$$,$body$$)=>{if($error$$||200!=$response$$.statusCode)$res$$.status(400).send({error:$error$$||`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`});
12
+ else try{const $info$$=JSON.parse($body$$);"100"==$info$$.CodeResult?saveOTP($Phone$$,$otp_code$$,($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send($rs$$)}):(console.error("Error send sms",$info$$),$res$$.status(400).send({error:`Kh\u00f4ng th\u1ec3 g\u1eedi \u0111\u01b0\u1ee3c m\u00e3 OTP t\u1edbi s\u1ed1 ${$Phone$$}`}))}catch($e$$){$res$$.status(400).send({error:$body$$})}}))}});$app$$.get("/verify-otp/:id/:otp",$rateLimiter$$,async function($req$$,$res$$){try{const $id$$=
13
+ $req$$.params.id;if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(400).send({error:"ID c\u1ee7a m\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i",code:4001});const $otp_code$$=$req$$.params.otp,$otp$$=await OTP.findById($id$$);if(!$otp$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$otp$$.expire_time.getTime()<(new Date).getTime())return $res$$.status(400).send({error:"M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c",
14
+ code:4001});await OTP.findOneAndUpdate({_id:$id$$},{verified:!0});let $is_new$$=!1;const $username$$=$otp$$.phone;let $user$$=await User.findOne({email:$username$$});if(!$user$$){$user$$=new User;$user$$.email=$username$$;$user$$.local={active:!0};$user$$.local.email=$otp$$.email;$user$$.local.phone=$otp$$.phone;$user$$.local.name=$otp$$.phone;$user$$.name=$otp$$.phone;$is_new$$=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}else if(!$user$$.local||
15
+ !$user$$.local.active){$user$$.local=$user$$.local||{};$user$$.local.active=!0;try{await $user$$.save()}catch($e$$){return console.log("error verify otp, create user",$e$$),$res$$.status(500).send($e$$)}}if($req$$.query.id_app&&$req$$.query.group_id){const $id_app$$=$req$$.query.id_app,$group_id$$=$req$$.query.group_id,$app$$=await App.findById($id_app$$);$app$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$$,active:!0},$cust_e$$=>{if($cust_e$$)return console.log("can't add user",
16
+ $user$$.email,"to company",$app$$.name);$cust_e$$={ten_kh:$user$$.name,email:$user$$.email,dien_thoai:$otp$$.phone,id_app:$id_app$$,user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};try{Customer.asyncCreateCustomer($cust_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}})}const $accessToken$$=generateToken($user$$),$agent$$=$req$$.headers["user-agent"];console.log("create new token for user",$user$$.email);(new Token({email:$user$$.email,
17
+ token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?!0:!1})).save(function($e$$,$rs$$){return $e$$?$res$$.status(500).send($e$$):$res$$.send({token:$accessToken$$,is_new:$is_new$$,once:$rs$$.once})})}catch($e$$){console.log("error verify otp",$e$$),$res$$.status(400).send($e$$.message)}});$app$$.post("/auth/sign",$rateLimiter$$,($req$$,$res$$,$next$$)=>{$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||
18
+ !$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});$req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$jscomp$3_user$$,$res$$)=>{let $data$$=$req$jscomp$3_user$$.body;$req$jscomp$3_user$$=$req$jscomp$3_user$$.user;if(!$data$$)return $res$$.status(400).send("Not have data to sign");if(!$data$$.id_app)return $res$$.status(400).send("Data miss id_app property");try{let $signature$$=await Wallet.sign($data$$.id_app,$req$jscomp$3_user$$.email,$data$$);$res$$.send($signature$$)}catch($e$$){return $res$$.status(400).send($e$$.message||
19
+ $e$$)}});$app$$.get("/auth/local",$rateLimiter$$,function($req$$,$res$$,$next$$){let $ip$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).split(".").join("").split(":").join(""),$authorization$$=$req$$.headers.authorization;if(!$authorization$$)return $res$$.status(400).send({message:"Authorization is required"});$authorization$$=Buffer.from($authorization$$.replace("Basic ",""),"base64").toString("utf-8");$authorization$$=$authorization$$.split(":");if(1<$authorization$$.length){let $t_session$$=
20
+ "times_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase(),$d_session$$="datetime_login_"+$ip$$+"_"+$authorization$$[0].trim().toLowerCase();$req$$.t_session=$t_session$$;$req$$.d_session=$d_session$$;let $now$$=new Date,$d$$=$now$$,$times_try$$=1;if($req$$.headers.cookie&&$req$$.session){$req$$=$req$$.session;$req$$[$t_session$$]?($times_try$$=$req$$[$t_session$$]+1,$req$$[$t_session$$]=$times_try$$):($req$$[$t_session$$]=$times_try$$,$req$$[$d_session$$]=$now$$);$req$$[$d_session$$]?$d$$=
21
+ new Date($req$$[$d_session$$]):$req$$[$d_session$$]=$now$$;$req$$=$now$$.getTime()-$d$$.getTime();if(18E6>$req$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.round((18E6-$req$$)/6E4,0)+" ph\u00fat"});$next$$()}else global.clientRedis.get($t_session$$,function($err$$,$reply$$){$reply$$?($times_try$$=Number($reply$$)+1,global.clientRedis.set($t_session$$,$times_try$$)):(global.clientRedis.set($t_session$$,
22
+ $times_try$$),global.clientRedis.set($d_session$$,$now$$));global.clientRedis.get($d_session$$,function($err$jscomp$3_time_wait$$,$reply$$){$reply$$?$d$$=new Date($reply$$):global.clientRedis.set($d_session$$,$now$$);$err$jscomp$3_time_wait$$=$now$$.getTime()-$d$$.getTime();if(18E6>$err$jscomp$3_time_wait$$&&10<$times_try$$)return $res$$.status(400).send({message:"B\u1ea1n \u0111\u0103ng nh\u1eadp sai 10 l\u1ea7n li\u00ean ti\u1ebfp. H\u00e3y th\u1eed l\u1ea1i sau "+Math.round((18E6-$err$jscomp$3_time_wait$$)/
23
+ 6E4,0)+" ph\u00fat"});$next$$()})})}},function($req$$,$res$$,$next$$){$passport$$.authenticate("basic",{session:!1},function($err$$,$user$$){if($err$$||!$user$$)return $res$$.status(401).send({message:$err$$||"Unauthorized"});if(configs.require_verify&&!$user$$.local.active)return $res$$.status(401).send({require_verify:!0});$req$$.user=$user$$;$next$$()})($req$$,$res$$,$next$$)},async($req$$,$res$$)=>{let $agent$$=$req$$.headers["user-agent"];if($req$$.headers.cookie){var $group_id$jscomp$1_session$$=
24
+ $req$$.session;$group_id$jscomp$1_session$$[$req$$.t_session]=0;$group_id$jscomp$1_session$$[$req$$.d_session]=""}else global.clientRedis.set($req$$.t_session,0),global.clientRedis.set($req$$.d_session,"");log.create({id_app:"LOGIN",id_func:"LOGIN",action:"LOCALLOGIN"},$req$$.user.email,$req$$.header("user-agent"),$req$$);let $user$$=$req$$.user;if($req$$.query.id_app&&$req$$.query.group_id&&global.mongoose.Types.ObjectId.isValid($req$$.query.group_id)){const $id_app$$=$req$$.query.id_app;$group_id$jscomp$1_session$$=
25
+ $req$$.query.group_id;const $app$$=await App.findById($id_app$$),$group$$=await UserGroup.findOne({_id:$group_id$jscomp$1_session$$,is_customer_group:!0});$app$$&&$group$$&&Participant.createParticipant({id_app:$id_app$$,email:$user$$.email,name:$user$$.name,group_id:$group_id$jscomp$1_session$$,active:!0},$cust$jscomp$1_e$$=>{if($cust$jscomp$1_e$$)return console.log("can't add user",$user$$.email,"to company",$app$$.name);$cust$jscomp$1_e$$={ten_kh:$user$$.name,email:$user$$.email,id_app:$id_app$$,
26
+ user_created:$user$$.email,user_updated:$user$$.email,kh_yn:!0,of_user:$user$$.email};validator.isMobilePhone($user$$.email,["vi-VN"])&&($cust$jscomp$1_e$$.dien_thoai=$user$$.email);try{Customer.asyncCreateCustomer($cust$jscomp$1_e$$)}catch($e$$){console.log("Auto create new customer with error:",$e$$.message)}})}const $accessToken$$=generateToken($user$$);(new Token({email:$user$$.email,token:$accessToken$$,agent:$agent$$,ip:"",once:1==$req$$.query.once||"true"==$req$$.query.once||"1"===$req$$.query.once?
27
+ !0:!1})).save(function($e$$,$rs$$){if($e$$)return $res$$.status(500).send($e$$);$res$$.send({token:$accessToken$$,once:$rs$$.once})})});$app$$.get("/check-user/:email",$rateLimiter$$,function($req$$,$res$$){User.findOne({email:$req$$.params.email},{email:1,name:1,picture:1}).lean().exec(function($e$$,$user$$){if($e$$)return $res$$.status(400).send($e$$);$res$$.send($user$$)})});$app$$.post("/signup",$rateLimiter$$,async($req$$,$res$$)=>{var $body$$=$req$$.body;$body$$.json&&($body$$=JSON.parse($body$$.json));
28
+ if(!$body$$)return $res$$.status(400).send("Kh\u00f4ng c\u00f3 n\u1ed9i dung");if(!$body$$.email)return $res$$.status(400).send("L\u1ed7i: B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n");$body$$.email=$body$$.email.trim().toLowerCase();if(!$body$$.name)return $res$$.status(400).send("L\u1ed7i: H\u1ecd v\u00e0 t\u00ean ch\u01b0a nh\u1eadp");User.findOne({$or:[{email:$body$$.email},{email2:$body$$.email}]},function($error$jscomp$1$$,$result$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);
29
+ if($result$$){if($result$$.local&&$result$$.local.email==$body$$.email||$result$$.email===$body$$.email||$result$$.email2===$body$$.email)return $res$$.status(400).send("L\u1ed7i: T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd");$result$$.local||($result$$.local={})}else $result$$=new User,$result$$.email=$body$$.email,$result$$.local={};$result$$.local.email=$body$$.email;$result$$.local.name=$body$$.name;$result$$.partner=$body$$.partner;$result$$.name=
30
+ $result$$.local.name;$body$$.picture?$result$$.local.picture=$body$$.picture:$result$$.local.picture||($result$$.local.picture="/images/avatar.jpg");let $password$$;if($body$$.password){if($body$$.rePassword!==$body$$.password)return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");if(!User.teststrengthPassword($body$$.password))return $res$$.status(400).send("L\u1ed7i: M\u1eadt kh\u1ea9u ph\u1ea3i c\u00f3 \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1 v\u00e0 bao g\u1ed3m \u00edt nh\u1ea5t m\u1ed9t ch\u1eef s\u1ed1, m\u1ed9t ch\u1eef hoa v\u00e0 m\u1ed9t ch\u1eef th\u01b0\u1eddng");
29
31
  $password$$=$body$$.password}else $password$$=_crypto.createHash("md5").update($result$$.email+(new Date).toISOString()).digest("hex");$result$$.local.password=$result$$.generateHash($password$$);$result$$.save(function($app$jscomp$3_error$$,$newUser$$){if($app$jscomp$3_error$$)return $res$$.status(400).send("L\u1ed7i: Kh\u00f4ng th\u1ec3 \u0111\u0103ng k\u00fd");log.create({id_app:"SIGNUP",id_func:"SIGNUP",action:"SIGNUP"},$result$$.email,$req$$.header("user-agent"),$req$$);if($body$$.cty_name){$app$jscomp$3_error$$=
30
32
  new App;$app$jscomp$3_error$$.user_created=$result$$.email;$app$jscomp$3_error$$.user_updated=$result$$.email;$app$jscomp$3_error$$.name=$body$$.cty_name;var $d$jscomp$1_now$$=new Date;$app$jscomp$3_error$$.ngay_dn=new Date($d$jscomp$1_now$$.getFullYear(),0,1);$app$jscomp$3_error$$.ngay_ks=new Date($d$jscomp$1_now$$.getFullYear()-1,12,0);$app$jscomp$3_error$$.nam_bd=$d$jscomp$1_now$$.getFullYear();$app$jscomp$3_error$$.ngay_ky1=new Date($d$jscomp$1_now$$.getFullYear(),0,1);$d$jscomp$1_now$$=new Date;
31
33
  $d$jscomp$1_now$$.setMonth($d$jscomp$1_now$$.getMonth()+3);$app$jscomp$3_error$$.expire_date=new Date($d$jscomp$1_now$$);$app$jscomp$3_error$$.save(function($error$jscomp$0$$,$obj$$){if($error$jscomp$0$$)return console.log("Khong tao duoc new app: "+$error$jscomp$0$$);require("../libs/initDatabase").init($obj$$._id,function($error$$){$error$$&&console.log("Can't init database \n"+$error$$)})})}$body$$.id_app&&App.findById($body$$.id_app,($e$jscomp$0$$,$app$$)=>{if($e$jscomp$0$$||!$app$$)return console.log("Can't find app",
@@ -33,5 +35,5 @@ $body$$.id_app,$e$jscomp$0$$);Participant.createParticipant({id_app:$body$$.id_a
33
35
  $e$$.message)}})});validator.isEmail($body$$.email)&&!$body$$.password?(loadTemplate("thong tin dang nhap.html",{email:$result$$.email,password:$password$$,receiver_name:$body$$.name},function($error$jscomp$0$$,$html$$){if($error$jscomp$0$$)return console.log($error$jscomp$0$$);email.sendHtml({to:{name:$result$$.name,address:$result$$.email},subject:"Th\u00f4ng tin t\u00e0i kho\u1ea3n",html:$html$$},function($error$$){$error$$&&console.error("Khong the gui email thon tin tai khoan cho nguoi dung\n"+
34
36
  $error$$)})}),$res$$.send("T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o. Ki\u1ec3m tra email \u0111\u1ec3 l\u1ea5y th\u00f4ng tin \u0111\u0103ng nh\u1eadp")):$res$$.send("T\u00e0i kho\u1ea3n "+$body$$.email+" \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o")})})});$app$$.get("/resetpassword",$rateLimiter$$,async($req$$,$res$$)=>{let $address$$=$req$$.query.email;if(!$address$$)return $res$$.status(400).send("Y\u00eau c\u1ea7u m\u1ed9t email");$address$$=$address$$.toLowerCase();
35
37
  User.findOne({$or:[{"local.email":$address$$},{email:$address$$},{email2:$address$$}]},function($error$jscomp$2$$,$result$$){if($error$jscomp$2$$)return $res$$.status(400).send($error$jscomp$2$$);if(!$result$$)return $res$$.status(400).send(`T\u00e0i kho\u1ea3n ${$address$$} ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd`);let $newpassword$$=_crypto.createHash("md5").update((new Date).toISOString()).digest("hex");$result$$.local.rspassword=$result$$.generateHash($newpassword$$);$result$$.save(function($error$jscomp$1$$){if($error$jscomp$1$$)return $res$$.status(400).send($error$jscomp$1$$);
36
- log.create({id_app:"RESETPASSWORD",id_func:"RESETPASSWORD",action:"RESETPASSWORD"},$result$$.email,$req$$.header("user-agent"),$req$$);loadTemplate("reset mat khau.html",{receiver_name:$result$$.name,email:$result$$.email,password:$newpassword$$},function($error$jscomp$0$$,$html$$){if($error$jscomp$0$$)return console.log($error$jscomp$0$$);email.sendHtml({to:{name:$result$$.name,address:$address$$},subject:"\u0110\u1ed5i m\u1eadt kh\u1ea9u",html:$html$$},function($error$$){$error$$&&console.error("Khong the gui thong tin tai khoan cho nguoi su dung\n"+
37
- $error$$)})});$res$$.send("M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1ed5i th\u00e0nh c\u00f4ng. Ki\u1ec3m tra email \u0111\u1ec3 l\u1ea5y m\u1eadt kh\u1ea9u m\u1edbi, sau \u0111\u00f3 b\u1ea1n n\u00ean \u0111\u1ed5i m\u1eadt kh\u1ea9u n\u00e0y")})})})};
38
+ log.create({id_app:"RESETPASSWORD",id_func:"RESETPASSWORD",action:"RESETPASSWORD"},$result$$.email,$req$$.header("user-agent"),$req$$);loadTemplate("reset mat khau.html",{receiver_name:$result$$.name,email:$result$$.email,password:$newpassword$$},function($error$jscomp$0$$,$html$$){if($error$jscomp$0$$)return console.log($error$jscomp$0$$);validator.isEmail($result$$.email)&&email.sendHtml({to:{name:$result$$.name,address:$result$$.email},subject:"\u0110\u1ed5i m\u1eadt kh\u1ea9u",html:$html$$},function($error$$){$error$$&&
39
+ console.error("Khong the gui thong tin tai khoan cho nguoi su dung\n"+$error$$)});validator.isEmail($result$$.email2)&&email.sendHtml({to:{name:$result$$.name,address:$result$$.email2},subject:"\u0110\u1ed5i m\u1eadt kh\u1ea9u",html:$html$$},function($error$$){$error$$&&console.error("Khong the gui thong tin tai khoan cho nguoi su dung\n"+$error$$)})});$res$$.send("M\u1eadt kh\u1ea9u c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1ed5i th\u00e0nh c\u00f4ng. Ki\u1ec3m tra email \u0111\u1ec3 l\u1ea5y m\u1eadt kh\u1ea9u m\u1edbi, sau \u0111\u00f3 b\u1ea1n n\u00ean \u0111\u1ed5i m\u1eadt kh\u1ea9u n\u00e0y")})})})};
package/server/cluster.js CHANGED
@@ -4,13 +4,13 @@ require($configs$$.paths.menu||"./menu").getModules();global.modulesInMenu={};Ob
4
4
  $app$$.use($_configs_compress_modulesVisible_morgan_multer_root_dir_uploads$$());$_configs_compress_modulesVisible_morgan_multer_root_dir_uploads$$=$configs$$.paths.uploads||__dirname+"/uploads";$_configs_compress_modulesVisible_morgan_multer_root_dir_uploads$$=require("multer")({dest:$_configs_compress_modulesVisible_morgan_multer_root_dir_uploads$$,limits:{fileSize:$configs$$.limitFileSize||1048576}});$app$$.use($_configs_compress_modulesVisible_morgan_multer_root_dir_uploads$$);$app$$.use(cors({credentials:!0,
5
5
  origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});$app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public"));$app$$.use("/admin",express.static($configs$$.paths.admin||__dirname+"/admin"));$app$$.use("/templates",express.static($configs$$.paths.templates||__dirname+"/templates"));$app$$.use("/images",express.static($configs$$.paths.images||__dirname+"/images"));$app$$.use(bodyParser.json({limit:$configs$$.limitRequestSize||"1mb"}));
6
6
  $app$$.use(bodyParser.urlencoded({limit:$configs$$.limitRequestSize||"1mb",extended:!0}));$app$$.use(passport.initialize());$_configs_compress_modulesVisible_morgan_multer_root_dir_uploads$$=require("morgan");$_port_accessLogStream_rfs$$=require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$_port_accessLogStream_rfs$$=$_port_accessLogStream_rfs$$("access-cluster.log",{interval:"1d",path:$logDirectory$$});
7
- $app$$.use($_configs_compress_modulesVisible_morgan_multer_root_dir_uploads$$("combined",{stream:$_port_accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);$res$$.status(500).send("Server error!")});global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}).then(async()=>{console.log("Connected to Database");const $redis$$=require("redis");global.clientRedis=$redis$$.createClient({enable_offline_queue:!1});
8
- global.clientRedis.on("connect",async function(){console.log("redis connected");var $Agenda_Mailmanagement_StaticPool_StaticPool$$=require("./libs/redis-cache");0!=$options$$.createRedisCache&&$Agenda_Mailmanagement_StaticPool_StaticPool$$.set();$Agenda_Mailmanagement_StaticPool_StaticPool$$=require("./libs/mailmanagement");global.mailmanagement=new $Agenda_Mailmanagement_StaticPool_StaticPool$$;!1!==$options$$.useAgenda&&($Agenda_Mailmanagement_StaticPool_StaticPool$$=require("agenda"),global.agenda=
9
- new $Agenda_Mailmanagement_StaticPool_StaticPool$$({db:{address:$configs$$.database.url}}),require("./libs/schedule").define(),await global.agenda.start());global.getModel("schedule").start();require("./route")($app$$);$Agenda_Mailmanagement_StaticPool_StaticPool$$=$configs$$.use_ssl?https.createServer(sslConfig($sslDir$$),$app$$):http.createServer($app$$);$Agenda_Mailmanagement_StaticPool_StaticPool$$.timeout=6E5;global.getModel("user").initSocket($Agenda_Mailmanagement_StaticPool_StaticPool$$);
10
- if(!1!==$options$$.cluster){if(!require("sticky-session").listen($Agenda_Mailmanagement_StaticPool_StaticPool$$,global.port))$Agenda_Mailmanagement_StaticPool_StaticPool$$.once("listening",function(){console.log("server cluster started on",global.port)});$Agenda_Mailmanagement_StaticPool_StaticPool$$=require("cluster");$Agenda_Mailmanagement_StaticPool_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$Agenda_Mailmanagement_StaticPool_StaticPool$$.on("online",
11
- function($worker$$){console.info("worker "+$worker$$.process.pid+" is online");global.clientRedis.set("lastworker",JSON.stringify({pid:$worker$$.process.pid}))})}else $Agenda_Mailmanagement_StaticPool_StaticPool$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")});$options$$.start_import_data_pool&&($Agenda_Mailmanagement_StaticPool_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $Agenda_Mailmanagement_StaticPool_StaticPool$$(__dirname+"/workers/inputWorker.js"),
12
- global.importDataMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.log("load import data pool")}));$options$$.start_report_pool&&($Agenda_Mailmanagement_StaticPool_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $Agenda_Mailmanagement_StaticPool_StaticPool$$(__dirname+"/workers/reportWorker.js"),global.reportMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.log("load report pool")}))})}).catch($err$$=>{console.error("Not Connected to Database ERROR!",
13
- $err$$)})};process.on("uncaughtException",function($err$jscomp$2_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$2_error$$.message);console.error($err$jscomp$2_error$$.stack);$err$jscomp$2_error$$=`
7
+ $app$$.use($_configs_compress_modulesVisible_morgan_multer_root_dir_uploads$$("combined",{stream:$_port_accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);$res$$.status(500).send("Server error!")});global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}).then(async $clientMongo_redis$$=>{console.log("Connected to Database");global.clientMongo=$clientMongo_redis$$;$clientMongo_redis$$=
8
+ require("redis");global.clientRedis=$clientMongo_redis$$.createClient({enable_offline_queue:!1});global.clientRedis.on("connect",async function(){console.log("redis connected");var $Agenda_Mailmanagement_StaticPool_StaticPool$$=require("./libs/redis-cache");0!=$options$$.createRedisCache&&$Agenda_Mailmanagement_StaticPool_StaticPool$$.set();$Agenda_Mailmanagement_StaticPool_StaticPool$$=require("./libs/mailmanagement");global.mailmanagement=new $Agenda_Mailmanagement_StaticPool_StaticPool$$;!1!==
9
+ $options$$.useAgenda&&($Agenda_Mailmanagement_StaticPool_StaticPool$$=require("agenda"),global.agenda=new $Agenda_Mailmanagement_StaticPool_StaticPool$$({db:{address:$configs$$.database.url}}),require("./libs/schedule").define(),await global.agenda.start());global.getModel("schedule").start();require("./route")($app$$);$Agenda_Mailmanagement_StaticPool_StaticPool$$=$configs$$.use_ssl?https.createServer(sslConfig($sslDir$$),$app$$):http.createServer($app$$);$Agenda_Mailmanagement_StaticPool_StaticPool$$.timeout=
10
+ 6E5;global.getModel("user").initSocket($Agenda_Mailmanagement_StaticPool_StaticPool$$);if(!1!==$options$$.cluster){if(!require("sticky-session").listen($Agenda_Mailmanagement_StaticPool_StaticPool$$,global.port))$Agenda_Mailmanagement_StaticPool_StaticPool$$.once("listening",function(){console.log("server cluster started on",global.port)});$Agenda_Mailmanagement_StaticPool_StaticPool$$=require("cluster");$Agenda_Mailmanagement_StaticPool_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+
11
+ $worker$$.process.pid+" died",$code$$,$signal$$)});$Agenda_Mailmanagement_StaticPool_StaticPool$$.on("online",function($worker$$){console.info("worker "+$worker$$.process.pid+" is online");global.clientRedis.set("lastworker",JSON.stringify({pid:$worker$$.process.pid}))})}else $Agenda_Mailmanagement_StaticPool_StaticPool$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")});$options$$.start_import_data_pool&&($Agenda_Mailmanagement_StaticPool_StaticPool$$=require("./libs/WorkerStaticPool"),
12
+ global.importDataMainPool=new $Agenda_Mailmanagement_StaticPool_StaticPool$$(__dirname+"/workers/inputWorker.js"),global.importDataMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.log("load import data pool")}));$options$$.start_report_pool&&($Agenda_Mailmanagement_StaticPool_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $Agenda_Mailmanagement_StaticPool_StaticPool$$(__dirname+"/workers/reportWorker.js"),global.reportMainPool.exec({load:!0,
13
+ configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.log("load report pool")}))})}).catch($err$$=>{console.error("Not Connected to Database ERROR!",$err$$)})};process.on("uncaughtException",function($err$jscomp$2_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$2_error$$.message);console.error($err$jscomp$2_error$$.stack);$err$jscomp$2_error$$=`
14
14
  Error: ${$err$jscomp$2_error$$.message}
15
15
  Stack: ${$err$jscomp$2_error$$.stack}
16
16
  `;try{const $logDirectory$$=__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);fs.writeFile(`${$logDirectory$$}/error-${(new Date).getTime()}.txt`,$err$jscomp$2_error$$,()=>{console.log("wrote log error")})}catch($e$$){console.log($e$$)}process.exit(1)});module.exports=clusterServer;
@@ -114,8 +114,8 @@ $e$$});$req$$.condition=$condition$$;$next$$()},{req:$req$$}):($req$$.condition=
114
114
  $req$$.condition;underscore.has($model$$.schema.paths,"ma_ct")&&$ctrl$$.options.isVoucher&&($condition$$.ma_ct=$ctrl$$.name.toUpperCase());let $query$$=$model$$.find($condition$$);!0===underscore.has($model$$.schema.paths,"ngay_ct")&&$query$$.sort({ngay_ct:1});$query$$.lean().exec(function($e$jscomp$1$$,$obj4view$$){setImmediate(()=>{if($e$jscomp$1$$)return console.error($e$jscomp$1$$),$e$jscomp$1$$.error?$res$$.status(400).send($e$jscomp$1$$):$res$$.status(400).send({error:$e$jscomp$1$$.message||
115
115
  $e$jscomp$1$$.error||$e$jscomp$1$$});setImmediate(()=>{log.create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"UPDATE FIELD:"+$field$$,data:{condition:JSON.stringify($condition$$)}},$req$$.user.email,$req$$.header("user-agent"),$req$$)});let $tu_so$$=Number($req$$.query.tu_so);$tu_so$$||($tu_so$$=1);let $den_so$$=$req$$.query.den_so,$tien_to$$=$req$$.query.tien_to,$hau_to$$=$req$$.query.hau_to,$gia_tri$$;for(let $i$$=0;$i$$<$obj4view$$.length;$i$$++)$gia_tri$$=$tu_so$$+$i$$+"",
116
116
  $den_so$$&&($gia_tri$$="0000000000000000000".substring(0,$den_so$$.length-$gia_tri$$.length)+$gia_tri$$),$tien_to$$&&($gia_tri$$=$tien_to$$+$gia_tri$$),$hau_to$$&&($gia_tri$$+=$hau_to$$),$obj4view$$[$i$$][$field$$]=$gia_tri$$;async.map($obj4view$$,function($obj$$,$callback$$){setImmediate(()=>{delete $obj$$.__v;$model$$.findOneAndUpdate({_id:$obj$$._id},$obj$$,function($e$jscomp$0$$,$rs$$){setImmediate(()=>{if($e$jscomp$0$$||!$rs$$)return $callback$$($e$jscomp$0$$);$ctrl$$.cacheData($obj$$);$ctrl$$.post?
117
- postData($obj$$,$ctrl$$,function($e$$){if($e$$)return console.error("error post data",$e$$),$callback$$($e$$);$callback$$(null,$rs$$)}):$callback$$(null,$rs$$)})})})},function($e$jscomp$0$$,$rs$$){setImmediate(()=>{if($e$jscomp$0$$)return console.error($e$jscomp$0$$),$e$jscomp$0$$.error?$res$$.status(400).send($e$jscomp$0$$):$res$$.status(400).send({error:$e$jscomp$0$$.message||$e$jscomp$0$$});$ctrl$$.emit("saved",$rs$$);$ctrl$$.emit("updated",$rs$$);pushNotification($ctrl$$,$rs$$,"update",null,!0,
118
- {exclude_token:$req$$.query.access_token});$rs$$=$rs$$.map($o$$=>{$o$$.toObject&&($o$$=$o$$.toObject());return $o$$});$ctrl$$.onView($req$$.user,$rs$$,function($e$$){setImmediate(()=>{if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});$res$$.send($rs$$)})},{req:$req$$})})})})})})};
117
+ postData($obj$$,$ctrl$$,function($e$$){if($e$$)return console.error("error post data",$e$$),$callback$$($e$$);$callback$$(null,$rs$$)}):$callback$$(null,$rs$$)})})})},function($e$jscomp$0$$,$rs$$){setImmediate(()=>{if($e$jscomp$0$$)return console.error($e$jscomp$0$$),$e$jscomp$0$$.error?$res$$.status(400).send($e$jscomp$0$$):$res$$.status(400).send({error:$e$jscomp$0$$.message||$e$jscomp$0$$});$ctrl$$.emit("saved",$rs$$);$ctrl$$.emit("updated",$rs$$);$rs$$=$rs$$.map($o$$=>{$o$$.toObject&&($o$$=$o$$.toObject());
118
+ return $o$$});$ctrl$$.onView($req$$.user,$rs$$,function($e$$,$viewValue$$){setImmediate(()=>{if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});$req$$&&$viewValue$$.forEach($r$$=>{pushNotification($ctrl$$,$r$$,"update",null,!0,{exclude_token:$req$$.query.access_token})});$res$$.send($rs$$)})},{req:$req$$})})})})})})};
119
119
  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$$=underscore.pluck($rps_rpt_ids$$,"_id"),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=
120
120
  function($ctrl$$,$parameters$$,$app$$,$obj$$,$callback$jscomp$0$$){async.map($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($e$$),$app$$[$p$$.name]=$e$$.message}else if("Q"===$p$$.type)try{var $query$jscomp$8_sandbox$$=await evalute("return {"+$p$$.value+"}",{});if($query$jscomp$8_sandbox$$.collection&&
121
121
  $query$jscomp$8_sandbox$$.field){"dmkh"==$query$jscomp$8_sandbox$$.collection&&($query$jscomp$8_sandbox$$.collection="customer");"dmtk"==$query$jscomp$8_sandbox$$.collection&&($query$jscomp$8_sandbox$$.collection="account");var $condition$$=$query$jscomp$8_sandbox$$.condition;if($condition$$){$condition$$=JSON.stringify($condition$$);for(let $m$$ in $obj$$)$condition$$=$condition$$.replace(new RegExp("m."+$m$$,"g"),$obj$$[$m$$]);$condition$$=JSON.parse($condition$$)}else $condition$$={};$app$$[$p$$.name]=
@@ -160,32 +160,32 @@ $data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$k
160
160
  if(0===$response$$.result.rows_error.length)return $res$$.send($response$$.result);let $msg$$=$response$$.result.rows_error.map($r$$=>$r$$.error).join(", ");return $res$$.status(400).send({error:$response$$.result,message:$msg$$})})}):$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(()=>{if($e$$)return console.error($e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$res$$.status(400).send($e$$)):$res$$.status(400).send({error:$e$$.message||$e$$,message:$e$$.message||
161
161
  $e$$});if(0===$rs$$.rows_error.length)$res$$.send($rs$$);else{let $msg$$=$rs$$.rows_error.map($r$$=>$r$$.error).join(", ");$res$$.status(400).send({message:$msg$$,error:$rs$$.error||$rs$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})};
162
162
  const PostBook=require("../libs/post-book"),utils=require("../libs/utils"),Sokho=global.getModel("sokho"),Sokhott=global.getModel("sokhott"),Sokhokhongton=global.getModel("sokhokhongton"),dmvt=global.getModel("dmvt"),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$$=
163
- $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.parallel({delete_model_books_registed:$callback$jscomp$0$$=>{setImmediate(()=>{if(!global.model_books)return $callback$jscomp$0$$();async.map(global.model_books,($bookName$$,$callback$$)=>{setImmediate(()=>{let $book$$=mongoose.models[$bookName$$.toLowerCase()];$book$$?$book$$.deleteMany({id_ct:$obj$$._id.toString()},
164
- $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$$=>
165
- {setImmediate(()=>{(new PostBook($obj$$,$obj$$.details,Sokhokhongton,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(()=>{if(global.model_books&&0<=global.model_books.indexOf("socai"))return $callback$$();
166
- Socai.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$$)})})},
167
- tdttno:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("tdttno"))return $callback$$();Tdttno.deleteMany({id_ct:$obj$$._id.toString()},function($error$$,$rs$$){console.log("delete post","tdttno",$obj$$._id,$error$$,$rs$$);$callback$$($error$$)})})},tdttco:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("tdttco"))return $callback$$();Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},
168
- 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_hd,so_hd:$detail$$.so_hd},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){console.error($e$$);
169
- $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_hd,so_hd:$detail$$.so_hd},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);
170
- $callback$$()})})})},function($e$$){console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})}},function($e$$){$callback$jscomp$1$$($e$$,$obj$$)})},runWebhooks=controller.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$$=>
163
+ $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.parallel({delete_model_books_registed:$callback$jscomp$0$$=>{setImmediate(()=>{if(!global.model_books)return $callback$jscomp$0$$();async.map(global.model_books.filter($d$$=>0>$d$$.indexOf("sokho")&&0>$d$$.indexOf("sokhott")&&0>$d$$.indexOf("sokhokhongton")&&0>$d$$.indexOf("socai")),($bookName$$,$callback$$)=>
164
+ {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,
165
+ 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$$)})})},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$$)})})},
166
+ sc:$callback$$=>{setImmediate(()=>{Socai.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()},
167
+ function($error$$){$callback$$($error$$)})})},tdttno:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("tdttno"))return $callback$$();Tdttno.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttco:$callback$$=>{setImmediate(()=>{if(global.model_books&&0<=global.model_books.indexOf("tdttco"))return $callback$$();Tdttco.deleteMany({id_ct:$obj$$._id.toString()},function($error$$){$callback$$($error$$)})})},tdttno_tt:$callback$jscomp$0$$=>
168
+ {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_hd,so_hd:$detail$$.so_hd},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},function($e$$){console.error($e$$);$callback$jscomp$0$$()}):
169
+ $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_hd,so_hd:$detail$$.so_hd},{$set:{tat_toan:!1}},function($error$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$()})})})},
170
+ function($e$$){console.error($e$$);$callback$jscomp$0$$()}):$callback$jscomp$0$$()})})}},function($e$$){console.log("delete books",$e$$);$callback$jscomp$1$$($e$$,$obj$$)})},runWebhooks=controller.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$$=>
171
171
  $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$$));global.webhookPool.exec({data:$obj$$,webhook_configs:$ctrl$$},$response$$=>{$response$$.error?console.error($response$$.error):console.log($response$$)})}},postData=controller.postData=function($obj$$,$ctrl$$,
172
172
  $callback$jscomp$0$$){const $post$$=$ctrl$$.dynamicPost||$ctrl$$.post;if(!$post$$)return $callback$jscomp$0$$();let $obj_created$$=$obj$$.toObject?$obj$$.toObject():{...$obj$$};if(!$obj_created$$.ma_ct)return console.error("\u0110\u1ec3 post \u0111\u01b0\u1ee3c data, y\u00eau c\u1ea7u c\u1ea7n c\u00f3 field ma_ct",$obj_created$$),$callback$jscomp$0$$("\u0110\u1ec3 post \u0111\u01b0\u1ee3c data, \u0110\u1ed1i t\u01b0\u1ee3ng c\u1ea7n c\u00f3 d\u1eef li\u1ec7u ma_ct,trang_thai");Object.keys($obj_created$$).forEach($key$$=>
173
173
  {let $p$$=$obj_created$$[$key$$];$p$$&&($p$$.toObject&&($obj_created$$[$key$$]=$p$$.toObject()),underscore.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$3$$){if($e$jscomp$3$$)return $callback$jscomp$0$$($e$jscomp$3$$);deletePost($obj_created$$.user_updated,$obj_created$$,async function($e$jscomp$2$$){if($e$jscomp$2$$)return $callback$jscomp$0$$($e$jscomp$2$$);
174
174
  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$$&&
175
- !$trang_thai$$.post)return $callback$jscomp$0$$();setImmediate(()=>{$post$$($obj_created$$,function($e$jscomp$0$$,$rs$$){setImmediate(()=>{$e$jscomp$0$$?(console.error("error post data",$obj_created$$._id,$e$jscomp$0$$),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$$);if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj_created$$)}catch($e$$){return console.error($e$$.message||
176
- $e$$.error||$e$$),$callback$jscomp$0$$($e$$)}else $callback$jscomp$0$$($e$jscomp$0$$)})):$callback$jscomp$0$$(null,$rs$$)})})})})})})})},pushNotification=controller.pushNotification=($ctrl$$,$_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}})=>{setImmediate(()=>{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,
177
- $trang_thai$$=($obj$jscomp$0$$.trang_thai||(0==$obj$jscomp$0$$.progress?"0":$obj$jscomp$0$$.progress)||"").toString();$old_obj$$&&!$justFireEvents$$&&($old_obj$$.trang_thai||(0==$old_obj$$.progress?"0":$old_obj$$.progress)||"").toString()===$trang_thai$$&&($justFireEvents$$=!0);OptionsModel.findOne({id_app:$obj$jscomp$0$$.id_app,id_func:$ctrl$$.name},{option:1}).lean().exec(async($e$jscomp$0$$,$rs$$)=>{setImmediate(async()=>{if($rs$$&&$rs$$.option&&$rs$$.option.users_receive_notification)var $notifications_setting_users_receive_notification$$=
178
- $rs$$.option.users_receive_notification;$notifications_setting_users_receive_notification$$&&0!==$notifications_setting_users_receive_notification$$.length||($notifications_setting_users_receive_notification$$=await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>{setImmediate(async()=>{underscore.isFunction($n$$)?$resolve$$(await $n$$($obj$jscomp$0$$)):$resolve$$($n$$)})}))));$notifications_setting_users_receive_notification$$&&($notifications_setting_users_receive_notification$$=
179
- $notifications_setting_users_receive_notification$$.filter($u$$=>!$u$$.trang_thai||$u$$.trang_thai.toString()===$trang_thai$$||"delete"===$u$$.trang_thai.toString()),$notifications_setting_users_receive_notification$$=$notifications_setting_users_receive_notification$$.filter($func_string$jscomp$1_n$$=>{if(!$func_string$jscomp$1_n$$.condition)return!0;$func_string$jscomp$1_n$$=$func_string$jscomp$1_n$$.condition;0>$func_string$jscomp$1_n$$.indexOf("return ")&&($func_string$jscomp$1_n$$=`return ${$func_string$jscomp$1_n$$}`);
180
- try{return evalute($func_string$jscomp$1_n$$,{...$obj$jscomp$0$$,master:$obj$jscomp$0$$,data:$obj$jscomp$0$$})}catch($e$$){return console.error($e$$,$func_string$jscomp$1_n$$),!1}}),$notifications_setting_users_receive_notification$$.forEach(async $p$jscomp$0$$=>{setImmediate(async()=>{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$$,
181
- action:$eventName$$.toUpperCase(),data:$options$$.data};$justFireEvents$$||"delete"===$eventName$$.toLowerCase()?($notificationData$$.title="",$notificationData$$.body=""):($notificationData$$.body=$p$jscomp$0$$.body?compileHtml($p$jscomp$0$$.body,$obj$jscomp$0$$):"",$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||$p$jscomp$0$$.title||$p$jscomp$0$$.content||"",$obj$jscomp$0$$)));$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=
182
- $p$jscomp$0$$.users;$users_will_receive$$||($users_will_receive$$=[]);if($p$jscomp$0$$.send_tat_ca_nhan_vien){var $admins_employees_groups_of_user_sandbox$$=(await Usergroup.find({id_app:$obj$jscomp$0$$.id_app,is_employee_group:!0}).lean()).map($g$$=>$g$$._id.toString());0<$admins_employees_groups_of_user_sandbox$$.length&&($admins_employees_groups_of_user_sandbox$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,group_id:{$in:$admins_employees_groups_of_user_sandbox$$}}).lean()).map($p$$=>
183
- $p$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_employees_groups_of_user_sandbox$$))}$p$jscomp$0$$.send_phu_trach&&$obj$jscomp$0$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.phu_trach]));$p$jscomp$0$$.send_admin&&($admins_employees_groups_of_user_sandbox$$=(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_employees_groups_of_user_sandbox$$));
184
- $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_employees_groups_of_user_sandbox$$=(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_employees_groups_of_user_sandbox$$));$p$jscomp$0$$.send_to_customer&&($obj$jscomp$0$$.ma_kh||$obj$jscomp$0$$.id_kh)&&($admins_employees_groups_of_user_sandbox$$=
185
- 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_employees_groups_of_user_sandbox$$]));$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_employees_groups_of_user_sandbox$$=
186
- {obj:$obj$jscomp$0$$,users_will_receive:$users_will_receive$$};try{let $str_func$$=$p$jscomp$0$$.handle_receivers;0!==$str_func$$.indexOf("return ")&&($str_func$$=`return ${$str_func$$}`);0>$str_func$$.indexOf("async ")&&($users_will_receive$$=evalute($str_func$$,$admins_employees_groups_of_user_sandbox$$))}catch($e$$){console.error($e$$)}}$ctrl$$.options||($ctrl$$.options={});$ctrl$$.options.onEmitEvent||($ctrl$$.options.onEmitEvent=($obj$$,$users_will_receive$$,$next$$,$_notificationData$$)=>{$next$$(null,
187
- $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$$=underscore.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$$,
188
- !0)})},Object.assign({},$notificationData$$),Object.assign({},$p$jscomp$0$$))})}))})})}})};
175
+ !$trang_thai$$.post)return $callback$jscomp$0$$();setImmediate(()=>{$post$$($obj_created$$,function($e$jscomp$0$$,$rs$$){setImmediate(()=>{$e$jscomp$0$$?(console.error("error post data",$obj_created$$._id,$e$jscomp$0$$),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$$),
176
+ $callback$jscomp$0$$($e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$)}catch($e$$){return console.error($e$$.message||$e$$.error||$e$$),$callback$jscomp$0$$($e$$)}else $callback$jscomp$0$$($e$jscomp$0$$)})):$callback$jscomp$0$$(null,$rs$$)})})})})})})})},pushNotification=controller.pushNotification=($ctrl$$,$_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}})=>{setImmediate(()=>{if($_obj$$.status){var $obj$jscomp$0$$=$_obj$$.toObject?$_obj$$.toObject():
177
+ {...$_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();$old_obj$$&&!$justFireEvents$$&&($old_obj$$.trang_thai||(0==$old_obj$$.progress?"0":$old_obj$$.progress)||"").toString()===$trang_thai$$&&($justFireEvents$$=!0);OptionsModel.findOne({id_app:$obj$jscomp$0$$.id_app,id_func:$ctrl$$.name},{option:1}).lean().exec(async($e$jscomp$0$$,
178
+ $rs$$)=>{setImmediate(async()=>{if($rs$$&&$rs$$.option&&$rs$$.option.users_receive_notification)var $notifications_setting_users_receive_notification$$=$rs$$.option.users_receive_notification;$notifications_setting_users_receive_notification$$&&0!==$notifications_setting_users_receive_notification$$.length||($notifications_setting_users_receive_notification$$=await Promise.all((($ctrl$$.options||{}).users_receive_notification_default||[]).map($n$$=>new Promise($resolve$$=>{setImmediate(async()=>{underscore.isFunction($n$$)?
179
+ $resolve$$(await $n$$($obj$jscomp$0$$)):$resolve$$($n$$)})}))));$notifications_setting_users_receive_notification$$&&($notifications_setting_users_receive_notification$$=$notifications_setting_users_receive_notification$$.filter($u$$=>!$u$$.trang_thai||$u$$.trang_thai.toString()===$trang_thai$$||"delete"===$u$$.trang_thai.toString()),$notifications_setting_users_receive_notification$$=$notifications_setting_users_receive_notification$$.filter($func_string$jscomp$1_n$$=>{if(!$func_string$jscomp$1_n$$.condition)return!0;
180
+ $func_string$jscomp$1_n$$=$func_string$jscomp$1_n$$.condition;0>$func_string$jscomp$1_n$$.indexOf("return ")&&($func_string$jscomp$1_n$$=`return ${$func_string$jscomp$1_n$$}`);try{return evalute($func_string$jscomp$1_n$$,{...$obj$jscomp$0$$,master:$obj$jscomp$0$$,data:$obj$jscomp$0$$})}catch($e$$){return console.error($e$$,$func_string$jscomp$1_n$$),!1}}),$notifications_setting_users_receive_notification$$.forEach(async $p$jscomp$0$$=>{setImmediate(async()=>{let $notificationData$$={_id:$obj$jscomp$0$$._id,
181
+ 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};$justFireEvents$$||"delete"===$eventName$$.toLowerCase()?($notificationData$$.title="",$notificationData$$.body=""):($notificationData$$.body=$p$jscomp$0$$.body?compileHtml($p$jscomp$0$$.body,$obj$jscomp$0$$):"",$notificationData$$.title=stripHtmlTags(compileHtml($options$$.title||
182
+ $p$jscomp$0$$.title||$p$jscomp$0$$.content||"",$obj$jscomp$0$$)));$notificationData$$.title||$notificationData$$.body||($exclude_token$$=null);let $users_will_receive$$=$p$jscomp$0$$.users;$users_will_receive$$||($users_will_receive$$=[]);if($p$jscomp$0$$.send_tat_ca_nhan_vien){var $admins_employees_groups_of_user_sandbox$$=(await Usergroup.find({id_app:$obj$jscomp$0$$.id_app,is_employee_group:!0}).lean()).map($g$$=>$g$$._id.toString());0<$admins_employees_groups_of_user_sandbox$$.length&&($admins_employees_groups_of_user_sandbox$$=
183
+ (await Participant.find({id_app:$obj$jscomp$0$$.id_app,group_id:{$in:$admins_employees_groups_of_user_sandbox$$}}).lean()).map($p$$=>$p$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_employees_groups_of_user_sandbox$$))}$p$jscomp$0$$.send_phu_trach&&$obj$jscomp$0$$.phu_trach&&($users_will_receive$$=$users_will_receive$$.concat([$obj$jscomp$0$$.phu_trach]));$p$jscomp$0$$.send_admin&&($admins_employees_groups_of_user_sandbox$$=(await Participant.find({id_app:$obj$jscomp$0$$.id_app,
184
+ admin:!0}).lean()).map($p$$=>$p$$.email),$users_will_receive$$=$users_will_receive$$.concat($admins_employees_groups_of_user_sandbox$$));$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_employees_groups_of_user_sandbox$$=(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_employees_groups_of_user_sandbox$$));
185
+ $p$jscomp$0$$.send_to_customer&&($obj$jscomp$0$$.ma_kh||$obj$jscomp$0$$.id_kh)&&($admins_employees_groups_of_user_sandbox$$=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_employees_groups_of_user_sandbox$$]));$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&&
186
+ ($users_will_receive$$=$users_will_receive$$.filter($u$$=>$u$$!==$obj$jscomp$0$$.user_created));if($p$jscomp$0$$.handle_receivers){$admins_employees_groups_of_user_sandbox$$={obj:$obj$jscomp$0$$,users_will_receive:$users_will_receive$$};try{let $str_func$$=$p$jscomp$0$$.handle_receivers;0!==$str_func$$.indexOf("return ")&&($str_func$$=`return ${$str_func$$}`);0>$str_func$$.indexOf("async ")&&($users_will_receive$$=evalute($str_func$$,$admins_employees_groups_of_user_sandbox$$))}catch($e$$){console.error($e$$)}}$ctrl$$.options||
187
+ ($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$$=underscore.uniq($_users_will_receive$$);0<$_users_will_receive$$.length&&
188
+ app.emitEvent($obj$jscomp$0$$.id_app,`${$ctrl$$.name.toLowerCase()}:${$eventName$$}`,$_notificationData$$||$notificationData$$,$exclude_token$$,$_users_will_receive$$,!0)})},Object.assign({},$notificationData$$),Object.assign({},$p$jscomp$0$$))})}))})})}})};
189
189
  async function createIdRef($model$$,$data$$){$model$$=Object.values($model$$.schema.paths).filter($path$$=>$path$$.options&&$path$$.options.ref&&$path$$.options.localField&&$path$$.options.foreignField);try{return await Promise.all($model$$.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$$]?($modelRef_modelRefName$$=
190
190
  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}}
191
191
  async function create($user$jscomp$0$$,$ctrl$$,$data$$,$callback$jscomp$1$$,$id_be_supply_by_user$$,$req$$){try{const $model$$=$ctrl$$.model,$voucher_options$$=(await OptionsModel.findOne({id_app:$user$jscomp$0$$.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$jscomp$0$$.current_id_app,$voucher_options$$)}catch($e$$){return $callback$jscomp$1$$($e$$.message||$e$$.error||$e$$)}underscore.has($schema_paths$$,
@@ -209,14 +209,14 @@ function($callback$$){setImmediate(function(){isExists($model$$,$ctrl$$.unique,$
209
209
  else $callback$$({error:$msgError$$,code: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$$]&&underscore.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$$&&
210
210
  "_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$$);$ctrl$$.saving&&await $ctrl$$.saving($user$jscomp$0$$,$obj$jscomp$0$$);$ctrl$$.emit("saving",$obj$jscomp$0$$);$obj$jscomp$0$$.save(function($error$jscomp$0$$,$obj_created$$){setImmediate(()=>{if($error$jscomp$0$$){let $msgErrors$$=
211
211
  [];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$jscomp$0$$,$obj$jscomp$0$$,$e$$=>{$e$$&&console.error($e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$)}else postData($obj_created$$,$ctrl$$,function($msgErrors$$){setImmediate(()=>{if($msgErrors$$)if($model$$.deleteOne({_id:$obj_created$$._id.toString()},
212
- $err$$=>{$err$$&&console.error("Error remove obj when has error post data:",$err$$,{_id:$obj_created$$._id.toString()})}),$ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$jscomp$0$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgErrors$$=$msgErrors$$+"\n"+$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$);else if($req$$&&$req$$.header&&setImmediate(()=>{log.create({id_app:$user$jscomp$0$$.current_id_app,id_func:$ctrl$$.name,action:"ADD",data:{id:$obj$jscomp$0$$._id.toString(),
213
- data:$obj$jscomp$0$$}},$user$jscomp$0$$.email,$req$$.header("user-agent"),$req$$)}),$ctrl$$.emit("saved",$obj_created$$),$ctrl$$.emit("created",$obj_created$$),$obj_created$$=$obj_created$$.toObject(),runWebhooks($ctrl$$,$obj_created$$,"ADD",$voucher_options$$),$req$$&&pushNotification($ctrl$$,$obj_created$$,"new",null,null,{exclude_token:($req$$.query||{}).access_token}),$ctrl$$.cacheData($obj_created$$),$req$$&&!1!==($req$$.query||{}).return_data)$ctrl$$.onView($user$jscomp$0$$,[$obj_created$$],
214
- $error$$=>{setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$(null,$obj_created$$)})},{req:$req$$});else $callback$$(null,{_id:$obj_created$$._id.toString()})})})})})}})})})},function($obj$$,$callback$$){$ctrl$$.requestApprove($user$jscomp$0$$.current_app_info,$user$jscomp$0$$,$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$$=>
215
- {$File$$.findOneAndUpdate({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name}).lean().exec($e$$=>{$e$$&&console.error($e$$)})}),delete $obj$$.exfields.__files__);$obj$$.exfields&&$obj$$.exfields.__supports__&&($obj$$.exfields.__supports__.forEach($_file$$=>{$Support$$.findOneAndUpdate({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name}).lean().exec($e$$=>{console.error($e$$)})}),delete $obj$$.exfields.__supports__);if($ctrl$$.created)$ctrl$$.created($user$jscomp$0$$,
216
- $obj$$,function($error$jscomp$0$$,$rs$$){setImmediate(()=>{if($error$jscomp$0$$)return $callback$$($error$jscomp$0$$);if($ctrl$$.dynamicCreated)$ctrl$$.dynamicCreated($user$jscomp$0$$,$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$$)+
217
- "</body></html>";$callback$$(null,$html$$)}else $callback$$(null,$rs$$)})});else if($ctrl$$.dynamicCreated)$ctrl$$.dynamicCreated($user$jscomp$0$$,$obj$$,function($error$jscomp$46_html$$){if($error$jscomp$46_html$$)return $callback$$($error$jscomp$46_html$$);$req$$&&$req$$.uploadFile?($error$jscomp$46_html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>",$callback$$(null,$error$jscomp$46_html$$)):$callback$$(null,$obj$$)});else if($req$$&&$req$$.uploadFile){let $html$$="<html><title>OK</title><body>"+
218
- JSON.stringify($obj$$)+"</body></html>";$callback$$(null,$html$$)}else $callback$$(null,$obj$$)})}],($e$jscomp$145_name_cached$$,$rs$$)=>{$e$jscomp$145_name_cached$$?(console.error($e$jscomp$145_name_cached$$),$callback$jscomp$1$$($e$jscomp$145_name_cached$$)):($e$jscomp$145_name_cached$$=$model$$.collection.name,$user$jscomp$0$$.current_id_app&&($e$jscomp$145_name_cached$$+=$user$jscomp$0$$.current_id_app),delete global.cacheDatas[$e$jscomp$145_name_cached$$],$callback$jscomp$1$$(null,$rs$$))})}catch($e$$){console.error($e$$),
219
- $callback$jscomp$1$$($e$$)}}
212
+ $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($e_delete_post$$)})})}),$ctrl$$.options.onErrorCreating)$ctrl$$.options.onErrorCreating($user$jscomp$0$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgErrors$$=$msgErrors$$+"\n"+$e$$);$callback$$($msgErrors$$)});else $callback$$($msgErrors$$);else if($req$$&&
213
+ $req$$.header&&setImmediate(()=>{log.create({id_app:$user$jscomp$0$$.current_id_app,id_func:$ctrl$$.name,action:"ADD",data:{id:$obj$jscomp$0$$._id.toString(),data:$obj$jscomp$0$$}},$user$jscomp$0$$.email,$req$$.header("user-agent"),$req$$)}),$ctrl$$.emit("saved",$obj_created$$),$ctrl$$.emit("created",$obj_created$$),$obj_created$$=$obj_created$$.toObject(),runWebhooks($ctrl$$,$obj_created$$,"ADD",$voucher_options$$),$ctrl$$.cacheData($obj_created$$),$req$$&&!1!==($req$$.query||{}).return_data)$ctrl$$.onView($user$jscomp$0$$,
214
+ [$obj_created$$],($error$$,$viewValue$$)=>{setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$(null,$obj_created$$)});$req$$&&pushNotification($ctrl$$,$viewValue$$[0],"new",null,null,{exclude_token:($req$$.query||{}).access_token})},{req:$req$$});else $callback$$(null,{_id:$obj_created$$._id.toString()})})})})})}})})})},function($obj$$,$callback$$){$ctrl$$.requestApprove($user$jscomp$0$$.current_app_info,$user$jscomp$0$$,$obj$$,$callback$$,$voucher_options$$)},function($obj$$,$callback$$){setImmediate(function(){$obj$$.collection_name=
215
+ $ctrl$$.collection_name;$obj$$.exfields&&$obj$$.exfields.__files__&&($obj$$.exfields.__files__.forEach($_file$$=>{$File$$.findOneAndUpdate({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name}).lean().exec($e$$=>{$e$$&&console.error($e$$)})}),delete $obj$$.exfields.__files__);$obj$$.exfields&&$obj$$.exfields.__supports__&&($obj$$.exfields.__supports__.forEach($_file$$=>{$Support$$.findOneAndUpdate({_id:$_file$$._id},{id_link:$obj$$._id.toString(),collection_link:$ctrl$$.collection_name}).lean().exec($e$$=>
216
+ {console.error($e$$)})}),delete $obj$$.exfields.__supports__);if($ctrl$$.created)$ctrl$$.created($user$jscomp$0$$,$obj$$,function($error$jscomp$0$$,$rs$$){setImmediate(()=>{if($error$jscomp$0$$)return $callback$$($error$jscomp$0$$);if($ctrl$$.dynamicCreated)$ctrl$$.dynamicCreated($user$jscomp$0$$,$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,
217
+ $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$jscomp$0$$,$obj$$,function($error$jscomp$46_html$$){if($error$jscomp$46_html$$)return $callback$$($error$jscomp$46_html$$);$req$$&&$req$$.uploadFile?($error$jscomp$46_html$$="<html><title>OK</title><body>"+JSON.stringify($obj$$)+"</body></html>",$callback$$(null,
218
+ $error$jscomp$46_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$jscomp$145_name_cached$$,$rs$$)=>{$e$jscomp$145_name_cached$$?(console.error($e$jscomp$145_name_cached$$),$callback$jscomp$1$$($e$jscomp$145_name_cached$$)):($e$jscomp$145_name_cached$$=$model$$.collection.name,$user$jscomp$0$$.current_id_app&&($e$jscomp$145_name_cached$$+=
219
+ $user$jscomp$0$$.current_id_app),delete global.cacheDatas[$e$jscomp$145_name_cached$$],$callback$jscomp$1$$(null,$rs$$))})}catch($e$$){console.error($e$$),$callback$jscomp$1$$($e$$)}}
220
220
  controller.prototype.create=function(){let $name$$=this.name,$ctrl$$=this;this.router.route(this.route_name).post(function($req$$,$res$$){let $session$$=$req$$.session;if(!0===$session$$["creating_"+$name$$])return $res$$.status(400).send({error:"\u0110ang x\u1eed l\u00fd d\u1eef li\u1ec7u"});$session$$["creating_"+$name$$]=!0;let $body$$=$req$$.body;if(!$body$$)return $res$$.status(411).send({error:"Kh\u00f4ng c\u00f3 n\u1ed9i dung c\u1ea7n l\u01b0u"});$req$$.files&&0<underscore.keys($req$$.files).length&&
221
221
  ("JSON"!=$body$$.return&&($req$$.uploadFile=!0),underscore.extend($body$$,$req$$.files));create($req$$.user,$ctrl$$,$body$$,($e$$,$rs$$)=>{setImmediate(()=>{$session$$["creating_"+$name$$]=!1;if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});!1===$req$$.query.return_data?$res$$.send({_id:$rs$$._id.toString()}):$res$$.send($rs$$)})},null,$req$$)})};
222
222
  controller.prototype.quickCreate=function(){let $model$$=this.model,$name$$=this.name,$ctrl$$=this,$createFromTemplate$$=async($req$$,$res$$,$body$jscomp$4_query$$)=>{let $session$$=$req$$.session;if(!0===$session$$["creating_"+$name$$])return $res$$.status(400).send({error:"\u0110ang x\u1eed l\u00fd d\u1eef li\u1ec7u"});$session$$["creating_"+$name$$]=!0;if(!$body$jscomp$4_query$$){$body$jscomp$4_query$$=$req$$.params.template_code;if(!$body$jscomp$4_query$$)return $session$$["creating_"+$name$$]=
@@ -241,29 +241,30 @@ $kq$$){let $msgError$$=$error$jscomp$0$$||ERR_ALREADY_EXIST;console.error($msgEr
241
241
  $error$$.message||$error$$),code:ERR_KEY_ARISE_CODE});$callback$$(null,$obj$$)})},$unique$$)})}):$callback$$(null,$obj$$)})},function($obj$$,$callback$$){let $keys$$=underscore.keys($model$$.referenceKeys).filter($key$$=>"_id"!==$key$$);$unique$$&&($keys$$=$keys$$.filter($key$$=>0>$unique$$.indexOf($key$$).length));if(0===$keys$$.length)return $callback$$(null,$obj$$);checkReference($model$$,$obj$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,
242
242
  $obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$({error:ERR_ARISE+($msgError$$.error||$msgError$$.message||$msgError$$),code:ERR_ARISE_CODE});else $callback$$(null,$obj$$)})},$keys$$)},function($obj$jscomp$1$$,$callback$$){$ctrl$$.validating||($ctrl$$.validating=($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)});$ctrl$$.validating($user$jscomp$0$$,$obj$jscomp$1$$,($error$$,$obj$jscomp$0$$)=>{if($error$$)return $callback$$($error$$);
243
243
  setImmediate(function(){$data$jscomp$0$$.date_updated=new Date;$data$jscomp$0$$.user_updated=$user$jscomp$0$$.email;delete $data$jscomp$0$$.__v;$ctrl$$.options.onUpdateExtending||($ctrl$$.options.onUpdateExtending=function($obj$$,$data$$,$action$$,$fn$$){$fn$$()});$ctrl$$.options.onUpdateExtending($obj$jscomp$0$$,$data$jscomp$0$$,$action$jscomp$0$$,function(){underscore.has($schema_paths$$,"exfields")&&$data$jscomp$0$$.exfields&&($obj$jscomp$0$$.exfields=$data$jscomp$0$$.exfields);delete $data$jscomp$0$$.__v;
244
- for(let $f$$ in $data$jscomp$0$$)underscore.has($schema_paths$$,$f$$)&&($obj$jscomp$0$$.set($f$$,$data$jscomp$0$$[$f$$]),"exfields"!==$f$$||$obj$jscomp$0$$.exfields||($obj$jscomp$0$$.exfields={}));validate($obj$jscomp$0$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$);else $callback$$(null,
245
- $obj$jscomp$0$$)})})})})})},function($obj$$,$callback$$){setImmediate(async()=>{$obj$$.ngay_ct&&($obj$$.ngay_ct=moment($obj$$.ngay_ct).toDate());for(var $$condition_k$$ in $ctrl$$.keyValues)$obj$$[$$condition_k$$]=$ctrl$$.keyValues[$$condition_k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&underscore.isArray($obj$$[$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$$=>
246
- "line"!==$path$$&&"_id"!==$path$$&&"__v"!==$path$$&&0<=fields_sync_master_detail.indexOf($path$$)).forEach($path$$=>{$obj$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,$obj$$);$ctrl$$.saving&&await $ctrl$$.saving($user$jscomp$0$$,$obj$$);$ctrl$$.emit("saving",$obj$$);let $obj_created$$,$error$jscomp$0$$;$data$jscomp$0$$.$condition&&($$condition_k$$=$data$jscomp$0$$.$condition,$$condition_k$$._id=
247
- $obj$$._id,await $model$$.findOne($$condition_k$$)||($error$jscomp$0$$=ERR_CAN_NOT_UPDATE),delete $data$jscomp$0$$.$condition);if(!$error$jscomp$0$$)try{delete $obj$$.__v,$obj_created$$=await $obj$$.save()}catch($e$$){$error$jscomp$0$$=$e$$}if($error$jscomp$0$$){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$$));
248
- if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$$,$e$$=>{$e$$&&console.error("onErrorUpdating",$e$$);$callback$$({error:$msgErrors$$,code:ERR_CAN_NOT_UPDATE_CODE})},$current_obj$$);else $callback$$({error:$msgErrors$$,code:ERR_CAN_NOT_UPDATE_CODE})}else $req$$&&$req$$.header&&setImmediate(()=>{log.create({id_app:$user$jscomp$0$$.current_id_app,id_func:$ctrl$$.name,action:"UPDATE",data:{oldData:$current_obj$$,newData:$data$jscomp$0$$,id:$obj$$._id.toString()}},
249
- $user$jscomp$0$$.email,$req$$.header("user-agent"),$req$$)}),postData($obj_created$$,$ctrl$$,function($msgError$$){$msgError$$?setImmediate(()=>{$current_obj$$&&$model$$.findByIdAndUpdate($current_obj$$._id,{$set:$current_obj$$},function($err$$,$restore_data$$){if($err$$||!$restore_data$$)return console.error("can't restore voucher",$err$$||": don't find voucher");console.log("restored data of voucher. posting...");$model$$.findById($current_obj$$._id,($e$jscomp$0$$,$_d$$)=>{if(!$_d$$)return console.error("Don't find voucher",
250
- $current_obj$$._id);postData($_d$$,$ctrl$$,function($e$$){if($e$$)return console.error("can't repost voucher",$e$$);console.log("reposted voucher",$_d$$._id)})})});if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$)}):setImmediate(()=>{$ctrl$$.emit("saved",$obj_created$$);$ctrl$$.emit("updated",$obj_created$$);$obj_created$$=$obj_created$$.toObject();
251
- runWebhooks($ctrl$$,$obj_created$$,"UPDATE",$voucher_options$$);$req$$&&pushNotification($ctrl$$,$obj_created$$,"update",$current_obj$$,null,{exclude_token:$req$$.query.access_token});$ctrl$$.cacheData($obj_created$$);if($req$$&&!1!==$req$$.query.return_data)$ctrl$$.onView($user$jscomp$0$$,[$obj_created$$],function($error$$,$viewValue$$){setImmediate(()=>{if($error$$)return $callback$$($error$$);$callback$$(null,$viewValue$$[0])})},{req:$req$$});else $callback$$(null,{_id:$obj_created$$._id})})})})},
252
- function($obj$$,$callback$$){$ctrl$$.requestApprove($user$jscomp$0$$.current_app_info,$user$jscomp$0$$,$obj$$,$callback$$,$voucher_options$$)},function($obj$jscomp$0$$,$callback$$){void 0!=$obj$jscomp$0$$.trang_thai&&setImmediate(async()=>{Approve.findOne({id_ct:$obj$jscomp$0$$._id.toString(),"update_after_approve.data.trang_thai":$obj$jscomp$0$$.trang_thai.toString()}).lean().exec(($e$$,$rs$$)=>{!$rs$$||$rs$$.user_approved||$rs$$.user_denied||($rs$$.user_approved=$req$$.user.email,$rs$$.user_approved_name=
253
- $req$$.user.name,$rs$$.date_approved=new Date,Approve.updateOne({_id:$rs$$._id},$rs$$).then(()=>{Approve.sendNotifyApproved($rs$$,$req$$.query.access_token)}))})});setImmediate(async()=>{(await permission.getFieldNotRight($obj$jscomp$0$$.id_app,$user$jscomp$0$$.email,$ctrl$$.name)).forEach($f$$=>{delete $obj$jscomp$0$$[$f$$]});$obj$jscomp$0$$.collection_name=$ctrl$$.collection_name;$ctrl$$.updated?$ctrl$$.updated($user$jscomp$0$$,$obj$jscomp$0$$,function($error$jscomp$0$$,$obj$$){if($error$jscomp$0$$)return console.error("error when saved",
254
- $error$jscomp$0$$),$callback$$($error$jscomp$0$$);$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$jscomp$0$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):$callback$$(null,$obj$$)},$current_obj$$):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$jscomp$0$$,$obj$jscomp$0$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$jscomp$0$$)}):$callback$$(null,$obj$jscomp$0$$)})}],($e$jscomp$164_name_cached$$,$rs$$)=>{$e$jscomp$164_name_cached$$?
255
- (console.error($e$jscomp$164_name_cached$$),$callback$jscomp$1$$($e$jscomp$164_name_cached$$)):($e$jscomp$164_name_cached$$=$model$$.collection.name,$user$jscomp$0$$.current_id_app&&($e$jscomp$164_name_cached$$+=$user$jscomp$0$$.current_id_app),delete global.cacheDatas[$e$jscomp$164_name_cached$$],$callback$jscomp$1$$(null,$rs$$))})}catch($e$$){console.error($e$$),$callback$jscomp$1$$($e$$)}};
244
+ for(let $f$$ in $data$jscomp$0$$)underscore.has($schema_paths$$,$f$$)&&"_id"!==$f$$&&($obj$jscomp$0$$.set($f$$,$data$jscomp$0$$[$f$$]),"exfields"!==$f$$||$obj$jscomp$0$$.exfields||($obj$jscomp$0$$.exfields={}));validate($obj$jscomp$0$$,function($msgError$$){setImmediate(()=>{if($msgError$$)if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$jscomp$0$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$);
245
+ else $callback$$(null,$obj$jscomp$0$$)})})})})})},function($obj$$,$callback$$){$current_obj$$&&($obj$$._id=$current_obj$$._id);deletePost($user$jscomp$0$$,$obj$$,async $e$$=>{$callback$$($e$$,$obj$$)})},function($obj$$,$callback$$){setImmediate(async()=>{$obj$$.ngay_ct&&($obj$$.ngay_ct=moment($obj$$.ngay_ct).toDate());for(var $$condition_k$$ in $ctrl$$.keyValues)$obj$$[$$condition_k$$]=$ctrl$$.keyValues[$$condition_k$$];Object.keys($model$$.schema.paths).filter($model_path$$=>$obj$$[$model_path$$]&&
246
+ underscore.isArray($obj$$[$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$$[$path$$]&&$obj$$[$model_path$$].filter($detail$$=>!$detail$$[$path$$]).forEach($detail$$=>{$detail$$[$path$$]=$obj$$[$path$$]})})});await createIdRef($model$$,
247
+ $obj$$);$ctrl$$.saving&&await $ctrl$$.saving($user$jscomp$0$$,$obj$$);$ctrl$$.emit("saving",$obj$$);$current_obj$$&&($obj$$._id=$current_obj$$._id);let $obj_created$$,$error$jscomp$0$$;$data$jscomp$0$$.$condition&&($$condition_k$$=$data$jscomp$0$$.$condition,$$condition_k$$._id=$obj$$._id,await $model$$.findOne($$condition_k$$)||($error$jscomp$0$$=ERR_CAN_NOT_UPDATE),delete $data$jscomp$0$$.$condition);if(!$error$jscomp$0$$)try{delete $obj$$.__v,$obj_created$$=await $obj$$.save()}catch($e$$){$error$jscomp$0$$=
248
+ $e$$}if($error$jscomp$0$$){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.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,$obj$$,$e$$=>{$e$$&&console.error("onErrorUpdating",$e$$);$callback$$({error:$msgErrors$$,code:ERR_CAN_NOT_UPDATE_CODE})},$current_obj$$);else $callback$$({error:$msgErrors$$,
249
+ code:ERR_CAN_NOT_UPDATE_CODE})}else $req$$&&$req$$.header&&setImmediate(()=>{log.create({id_app:$user$jscomp$0$$.current_id_app,id_func:$ctrl$$.name,action:"UPDATE",data:{oldData:$current_obj$$,newData:$data$jscomp$0$$,id:$obj$$._id.toString()}},$user$jscomp$0$$.email,$req$$.header("user-agent"),$req$$)}),postData($obj_created$$,$ctrl$$,function($msgError$$){$msgError$$?setImmediate(()=>{$current_obj$$&&$model$$.findByIdAndUpdate($current_obj$$._id,{$set:$current_obj$$},function($err$$,$restore_data$$){if($err$$||
250
+ !$restore_data$$)return console.error("can't restore voucher",$err$$||": don't find voucher");console.log("restored data of voucher. posting...");$model$$.findById($current_obj$$._id,($e$jscomp$0$$,$_d$$)=>{if(!$_d$$)return console.error("Don't find voucher",$current_obj$$._id);postData($_d$$,$ctrl$$,function($e$$){if($e$$)return console.error("can't repost voucher",$e$$);console.log("reposted voucher",$_d$$._id)})})});if($ctrl$$.options.onErrorUpdating)$ctrl$$.options.onErrorUpdating($user$jscomp$0$$,
251
+ $obj$$,$e$$=>{$e$$&&($msgError$$=$msgError$$+"\n"+$e$$);$callback$$($msgError$$)},$current_obj$$);else $callback$$($msgError$$)}):setImmediate(()=>{$ctrl$$.emit("saved",$obj_created$$);$ctrl$$.emit("updated",$obj_created$$);$obj_created$$=$obj_created$$.toObject();runWebhooks($ctrl$$,$obj_created$$,"UPDATE",$voucher_options$$);$ctrl$$.cacheData($obj_created$$);if($req$$&&!1!==$req$$.query.return_data)$ctrl$$.onView($user$jscomp$0$$,[$obj_created$$],function($error$$,$viewValue$$){setImmediate(()=>
252
+ {if($error$$)return $callback$$($error$$);$req$$&&pushNotification($ctrl$$,$viewValue$$[0],"update",$current_obj$$,null,{exclude_token:$req$$.query.access_token});$callback$$(null,$viewValue$$[0])})},{req:$req$$});else $callback$$(null,{_id:$obj_created$$._id})})})})},function($obj$$,$callback$$){$ctrl$$.requestApprove($user$jscomp$0$$.current_app_info,$user$jscomp$0$$,$obj$$,$callback$$,$voucher_options$$)},function($obj$jscomp$0$$,$callback$$){void 0!=$obj$jscomp$0$$.trang_thai&&setImmediate(async()=>
253
+ {Approve.findOne({id_ct:$obj$jscomp$0$$._id.toString(),"update_after_approve.data.trang_thai":$obj$jscomp$0$$.trang_thai.toString()}).lean().exec(($e$$,$rs$$)=>{!$rs$$||$rs$$.user_approved||$rs$$.user_denied||($rs$$.user_approved=$req$$.user.email,$rs$$.user_approved_name=$req$$.user.name,$rs$$.date_approved=new Date,Approve.updateOne({_id:$rs$$._id},$rs$$).then(()=>{Approve.sendNotifyApproved($rs$$,$req$$.query.access_token)}))})});setImmediate(async()=>{(await permission.getFieldNotRight($obj$jscomp$0$$.id_app,
254
+ $user$jscomp$0$$.email,$ctrl$$.name)).forEach($f$$=>{delete $obj$jscomp$0$$[$f$$]});$obj$jscomp$0$$.collection_name=$ctrl$$.collection_name;$ctrl$$.updated?$ctrl$$.updated($user$jscomp$0$$,$obj$jscomp$0$$,function($error$jscomp$0$$,$obj$$){if($error$jscomp$0$$)return console.error("error when saved",$error$jscomp$0$$),$callback$$($error$jscomp$0$$);$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$jscomp$0$$,$obj$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$$)}):
255
+ $callback$$(null,$obj$$)},$current_obj$$):$ctrl$$.dynamicUpdated?$ctrl$$.dynamicUpdated($user$jscomp$0$$,$obj$jscomp$0$$,function($error$$){if($error$$)return $callback$$($error$$);$callback$$(null,$obj$jscomp$0$$)}):$callback$$(null,$obj$jscomp$0$$)})}],($e$jscomp$165_name_cached$$,$rs$$)=>{$e$jscomp$165_name_cached$$?(console.error($e$jscomp$165_name_cached$$),$callback$jscomp$1$$($e$jscomp$165_name_cached$$)):($e$jscomp$165_name_cached$$=$model$$.collection.name,$user$jscomp$0$$.current_id_app&&
256
+ ($e$jscomp$165_name_cached$$+=$user$jscomp$0$$.current_id_app),delete global.cacheDatas[$e$jscomp$165_name_cached$$],$callback$jscomp$1$$(null,$rs$$))})}catch($e$$){console.error($e$$),$callback$jscomp$1$$($e$$)}};
256
257
  controller.prototype.update=function(){let $ctrl$$=this,$name$$=this.name;this.router.route(this.route_name+"/:id").put(function($req$$,$res$$){let $session$$=$req$$.session;if(!0===$session$$["updating_"+$name$$])return $res$$.status(400).send({error:"\u0110ang x\u1eed l\u00fd d\u1eef li\u1ec7u"});$session$$["updating_"+$name$$]=!0;let $body$$=$req$$.body;$req$$.files&&underscore.extend($body$$,$req$$.files);let $data$$;try{$data$$=bodyToJson($body$$)}catch($e$$){return $res$$.status(400).send({error:$e$$.message||
257
258
  $e$$.error||$e$$})}update($req$$.user,$ctrl$$,$req$$.params.id,$data$$,($e$$,$rs$$)=>{setImmediate(()=>{$session$$["updating_"+$name$$]=!1;if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});!1===$req$$.query.return_data?$res$$.send({_id:$rs$$._id.toString()}):$res$$.send($rs$$)})},null,$req$$)})};
258
259
  function checkReference($model$jscomp$0$$,$obj$$,$fn$$,$keys$$){$model$jscomp$0$$.referenceKeys?($keys$$||($keys$$=underscore.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(()=>
259
260
  {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&&(underscore.isObject($r$$.where)&&($query$$=Object.assign($query$$,$r$$.where)),underscore.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$$;
260
261
  $msgError$$=$r$$.error?(new Function("obj","return `"+$r$$.error.replace("{{VALUE}}",$value$$)+"`"))($obj$$):ERR_DATA_GENERATED;return $cb$$({error:$msgError$$,code:ERR_DATA_GENERATED_CODE})}$cb$$()})})}else $cb$$()})},function($e$$){if($e$$)return $callback$$($e$$);$callback$$()})})},$error$$=>{$fn$$($error$$)})):$fn$$()}
261
- controller.prototype.delete=function(){let $model$$=this.model,$ctrl$$=this,$module$$=this.module;this.router.route(this.route_name+"/:id").delete(function($req$$,$res$$,$next$$){if(!global.mongoose.Types.ObjectId.isValid($req$$.params.id))return $res$$.status(400).send({error:ERR_NOT_FOUND,code:ERR_NOT_FOUND_CODE});$model$$.findOne({_id:$req$$.params.id}).lean().exec(async function($e$jscomp$169_user$$,$obj$$){if($e$jscomp$169_user$$)return console.error($e$jscomp$169_user$$),$e$jscomp$169_user$$.error?
262
- $res$$.status(400).send($e$jscomp$169_user$$):$res$$.status(400).send({error:$e$jscomp$169_user$$.message||$e$jscomp$169_user$$.error||$e$jscomp$169_user$$});if(!$obj$$)return $res$$.status(404).send({error:ERR_NOT_FOUND,code:ERR_NOT_FOUND_CODE});$e$jscomp$169_user$$=$req$$.user;if(0>global.configs.admins.indexOf($e$jscomp$169_user$$.email)){let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($obj$$,{action:"delete",_id:$req$$.params.id,
263
- user:$e$jscomp$169_user$$}));if($requireOtp$$)try{await permission.verifyOTP($e$jscomp$169_user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"])}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$,code:ERR_VERIFY_OTP})}}setImmediate(()=>{permission.hasRight($obj$$.id_app,$req$$.user.email,$module$$,"delete",function($error$jscomp$0$$,$hr$$){if($hr$$)checkReference($model$$,$obj$$,function($error$$){if($error$$)return $res$$.status(400).send({error:ERR_ARISE+($error$$.error||
262
+ controller.prototype.delete=function(){let $model$$=this.model,$ctrl$$=this,$module$$=this.module;this.router.route(this.route_name+"/:id").delete(function($req$$,$res$$,$next$$){if(!global.mongoose.Types.ObjectId.isValid($req$$.params.id))return $res$$.status(400).send({error:ERR_NOT_FOUND,code:ERR_NOT_FOUND_CODE});$model$$.findOne({_id:$req$$.params.id}).lean().exec(async function($e$jscomp$170_user$$,$obj$$){if($e$jscomp$170_user$$)return console.error($e$jscomp$170_user$$),$e$jscomp$170_user$$.error?
263
+ $res$$.status(400).send($e$jscomp$170_user$$):$res$$.status(400).send({error:$e$jscomp$170_user$$.message||$e$jscomp$170_user$$.error||$e$jscomp$170_user$$});if(!$obj$$)return $res$$.status(404).send({error:ERR_NOT_FOUND,code:ERR_NOT_FOUND_CODE});$e$jscomp$170_user$$=$req$$.user;if(0>global.configs.admins.indexOf($e$jscomp$170_user$$.email)){let $requireOtp$$=$ctrl$$.options.requireOtp;$requireOtp$$&&_.isFunction($requireOtp$$)&&($requireOtp$$=$requireOtp$$($obj$$,{action:"delete",_id:$req$$.params.id,
264
+ user:$e$jscomp$170_user$$}));if($requireOtp$$)try{await permission.verifyOTP($e$jscomp$170_user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"])}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$,code:ERR_VERIFY_OTP})}}setImmediate(()=>{permission.hasRight($obj$$.id_app,$req$$.user.email,$module$$,"delete",function($error$jscomp$0$$,$hr$$){if($hr$$)checkReference($model$$,$obj$$,function($error$$){if($error$$)return $res$$.status(400).send({error:ERR_ARISE+($error$$.error||
264
265
  $error$$.message||$error$$),code:ERR_ARISE_CODE});$req$$.obj=$obj$$;$next$$()});else return $res$$.status(403).send({error:$error$jscomp$0$$||ERR_NOT_PERMIT,code:ERR_NOT_PERMIT_CODE})},{obj:$obj$$,notNeedRight:$ctrl$$.options.notNeedRight})})})},function($req$$,$res$$,$next$$){setImmediate(()=>{let $obj$jscomp$1$$=$req$$.obj;$ctrl$$.deleting?$ctrl$$.deleting($req$$.user,$obj$jscomp$1$$,function($e$$,$obj$jscomp$0$$){if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||
265
266
  $e$$});$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$jscomp$0$$,function($error$$,$obj$$){if($error$$)return $next$$($error$$);$req$$.obj=$obj$$;$next$$()}):($req$$.obj=$obj$jscomp$0$$,$next$$())},{req:$req$$}):$ctrl$$.dynamicDeleting?$ctrl$$.dynamicDeleting($req$$.user,$obj$jscomp$1$$,function($error$$,$obj$$){if($error$$)return $next$$($error$$);$req$$.obj=$obj$$;$next$$()}):($req$$.obj=$obj$jscomp$1$$,$next$$())})},function($req$$,$res$$){setImmediate(()=>{let $obj$jscomp$0$$=
266
- $req$$.obj;$ctrl$$.emit("deleting post first",{...$obj$jscomp$0$$});deletePost($req$$.user,$obj$jscomp$0$$,async $e$jscomp$1$$=>{if($e$jscomp$1$$)return console.error($e$jscomp$1$$),$e$jscomp$1$$.error?$res$$.status(400).send($e$jscomp$1$$):$res$$.status(400).send({error:$e$jscomp$1$$.message||$e$jscomp$1$$});if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$jscomp$0$$)}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$})}$model$$.deleteOne({_id:$obj$jscomp$0$$._id},
267
+ $req$$.obj;$ctrl$$.emit("deleting",{...$obj$jscomp$0$$});deletePost($req$$.user,$obj$jscomp$0$$,async $e$jscomp$1$$=>{if($e$jscomp$1$$)return console.error($e$jscomp$1$$),$e$jscomp$1$$.error?$res$$.status(400).send($e$jscomp$1$$):$res$$.status(400).send({error:$e$jscomp$1$$.message||$e$jscomp$1$$});if($ctrl$$.dynamicDeletePost)try{await $ctrl$$.dynamicDeletePost($obj$jscomp$0$$)}catch($e$$){return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$})}$model$$.deleteOne({_id:$obj$jscomp$0$$._id},
267
268
  function($e$jscomp$0$$){if($e$jscomp$0$$)return console.error($e$jscomp$0$$),$e$jscomp$0$$.error?$res$$.status(400).send($e$jscomp$0$$):$res$$.status(400).send({error:$e$jscomp$0$$.message||$e$jscomp$0$$});setImmediate(()=>{$ctrl$$.deleteData({...$obj$jscomp$0$$});log.create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"DELETE",data:{id:$obj$jscomp$0$$._id,data:$obj$jscomp$0$$}},$req$$.user.email,$req$$.header("user-agent"),$req$$);link.deleteMany({$or:[{id_a:$obj$jscomp$0$$._id},
268
269
  {id_b:$obj$jscomp$0$$._id}]},function($e$$){$e$$&&console.error("Can't delete links\n"+$e$$)})});setImmediate(()=>{$ctrl$$.emit("deleted",$obj$jscomp$0$$);runWebhooks($ctrl$$,$obj$jscomp$0$$,"DELETE")});pushNotification($ctrl$$,$obj$jscomp$0$$,"delete",null,null,{exclude_token:$req$$.query.access_token});setImmediate(()=>{$ctrl$$.deleted?$ctrl$$.deleted($req$$.user,$obj$jscomp$0$$,function($e$$,$obj$$){setImmediate(()=>{if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||
269
270
  $e$$});$res$$.send($obj$$)})}):$res$$.send($obj$jscomp$0$$)})})})})})};
package/server/global.js CHANGED
@@ -10,7 +10,7 @@ global.getNotifies=function($email$$,$fn$$){async.parallel({colls:function($call
10
10
  {$fn$$($error$$,$rs$$)})})};global.sendNotification=function($email$$,$_id$$,$notify$$,$push_to_mobile_and_web$$=!0){setImmediate(()=>{$notify$$||($notify$$={email_sender:"H\u1ec7 th\u1ed1ng"});const $obj_notify$$={_id:$_id$$,code:"notification",action:"view"};$obj_notify$$.body=$notify$$.content||$notify$$.title||"";$obj_notify$$.sender=$notify$$.email_sender;$obj_notify$$.title=$notify$$.title||"";$obj_notify$$.content=$notify$$.content||"";User.emitEvent($email$$,"notify:new",$obj_notify$$,$push_to_mobile_and_web$$)})};
11
11
  global.alertNotification=function($email$$){setImmediate(()=>{Notification.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?console.log($error$$):User.emitEvent($email$$,"notify:count",$count$$,!1)})})})};
12
12
  global.asyncCountNotifications=async function($email$$){return new Promise($resolve$$=>{setImmediate(()=>{Notification.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?(console.log($error$$),$resolve$$(0)):$resolve$$($count$$)})})})})};const {RateLimiterRedis,RateLimiterQueue,RateLimiterMemory}=require("rate-limiter-flexible");
13
- global.createRateLimiterMiddleware=($config$$,$keyPrefix$$)=>{const $total_points$$=$config$$.points||1E3;var $duration_limiterFlexible$$=$config$$.duration||1;const $insuranceLimiter$$=new RateLimiterMemory({points:$total_points$$,duration:$duration_limiterFlexible$$});$duration_limiterFlexible$$=new RateLimiterRedis({keyPrefix:$keyPrefix$$,storeClient:global.clientRedis,points:$total_points$$,duration:$duration_limiterFlexible$$,blockDuration:$config$$.blockDuration||0,inmemoryBlockOnConsumed:$total_points$$+
13
+ global.createRateLimiterMiddleware=async($config$$,$keyPrefix$$)=>{const $total_points$$=$config$$.points||1E3;var $duration_limiterFlexible$$=$config$$.duration||1;const $insuranceLimiter$$=new RateLimiterMemory({points:$total_points$$,duration:$duration_limiterFlexible$$});$duration_limiterFlexible$$=new RateLimiterRedis({keyPrefix:$keyPrefix$$,storeClient:global.clientRedis,points:$total_points$$,duration:$duration_limiterFlexible$$,blockDuration:$config$$.blockDuration||0,inmemoryBlockOnConsumed:$total_points$$+
14
14
  1,inmemoryBlockDuration:10,insuranceLimiter:$insuranceLimiter$$});const $rateLimiter$$=new RateLimiterQueue($duration_limiterFlexible$$,{maxQueueSize:$config$$.maxQueueSize||1E4});return async($req$$,$res$$,$next$$)=>{let $key$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).replace("::ffff:","");const $originalUrl$$=$req$$.originalUrl,$origin$$=($req$$.headers.origin||"").toLowerCase().replace("https://","").replace("http://","").trim(),$trust_domains$$=((global.configs||
15
15
  {}).trust_domains||"").toLowerCase(),$trust_Key$$=$req$$.headers["x-trust-key"]||$req$$.query.trustkey||$req$$.query.trust_key||"",$trust_keys$$=(global.configs||{}).trust_keys||[];$req$$.user&&($key$$=`${$key$$}-${$req$$.user.email}`);$key$$=`${$key$$}-${$origin$$||"unknow"}-${$trust_Key$$||"untrustkey"}`;let $points$$=1;if(0<$originalUrl$$.indexOf("ass=1")||0<$originalUrl$$.indexOf("test=1")||(!$origin$$||$trust_domains$$&&0>$trust_domains$$.indexOf($origin$$))&&$trust_keys$$&&0>$trust_keys$$.indexOf($trust_Key$$))$points$$=
16
16
  Math.round($total_points$$/2);setImmediate(async()=>{try{await $rateLimiter$$.removeTokens($points$$,$key$$),$next$$()}catch($err$$){console.error("Error rate limiter",$keyPrefix$$,$err$$),$err$$ instanceof Error?$res$$.status(400).send({error:$err$$.message||"Error rate limiter"}):$res$$.status(429).send({error:"Too Many Requests. Please try again later"})}})}};
@@ -25,5 +25,6 @@ exports.getFieldNotRight=async($_fields_id_app$$,$_p_email$$,$ma_ct$$)=>{if(!$_f
25
25
  return $_fields_id_app$$}return[]};const request=require("request");
26
26
  exports.verifyReCaptcha=async($gRecaptchaResponse$$,$remoteip$$)=>{if(!$gRecaptchaResponse$$)throw Error("Please select captcha");var $verificationUrl$$="https://www.google.com/recaptcha/api/siteverify?secret="+global.configs.GOOGLE_RECAPTCHA_SECRET_KEY+"&response="+$gRecaptchaResponse$$;$remoteip$$&&($verificationUrl$$+="&remoteip="+$remoteip$$);return new Promise(($resolve$$,$reject$$)=>{request($verificationUrl$$,function($error$$,$response$$,$body$$){$body$$=JSON.parse($body$$);if(!$body$$.success)return console.error("Failed captcha verification",
27
27
  $body$$,$verificationUrl$$),$reject$$(Error("Failed captcha verification"));$resolve$$(!0)})})};
28
- exports.verifyOTP=async($phone$$,$otp_id$$,$otp_code$$)=>{if(!$otp_id$$||!$otp_code$$||!global.mongoose.Types.ObjectId.isValid($otp_id$$))throw Error("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u otp-id v\u00e0 otp-code");const $otp$$=await global.getModel("otp").findOne({_id:$otp_id$$});if(!$otp$$||$otp$$.phone!=$phone$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$otp$$.expire_time.getTime()<(new Date).getTime())throw Error("M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c");await global.getModel("otp").findOneAndUpdate({_id:$otp_id$$},
28
+ exports.verifyOTP=async($phone$$,$otp_id_u$$,$otp_code$$)=>{if(!$otp_id_u$$||!$otp_code$$)throw Error("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u otp-id v\u00e0 otp-code");if("PIN"===$otp_id_u$$.toUpperCase()){$otp_id_u$$=await global.getModel("user").findOne({email:$phone$$});if(!$otp_id_u$$)throw Error(`User ${$phone$$} kh\u00f4ng t\u1ed3n t\u1ea1i`);if(!($otp_id_u$$.local||{}).pin)throw Error("M\u00e3 pin ch\u01b0a \u0111\u01b0\u1ee3c t\u1ea1o");if(!$otp_id_u$$.validPin($otp_code$$))throw Error("M\u00e3 pin kh\u00f4ng ch\u00ednh x\u00e1c");
29
+ return{pin:$otp_code$$,phone:$phone$$}}if(!global.mongoose.Types.ObjectId.isValid($otp_id_u$$))throw Error("otp-id kh\u00f4ng h\u1ee3p l\u1ec7");const $otp$$=await global.getModel("otp").findOne({_id:$otp_id_u$$});if(!$otp$$||$otp$$.phone!=$phone$$||$otp$$.otp!=$otp_code$$||$otp$$.verified||$otp$$.expire_time.getTime()<(new Date).getTime())throw Error("M\u00e3 x\u00e1c th\u1ef1c n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i ho\u1eb7c \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c");await global.getModel("otp").findOneAndUpdate({_id:$otp_id_u$$},
29
30
  {verified:!0});return $otp$$};
@@ -7,6 +7,7 @@ post.prototype.run=async function($callback$$=()=>{}){if(!this.details)return co
7
7
  Dmvt,{where:"ma_vt",fields:"tg_tk"}),$details$$=$details$$.filter($d$$=>$d$$.tg_tk),await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=
8
8
  utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=($detail$$.sl_xuat||0)*$detail$$.he_so_qd,$detail$$.sl_nhap_qd=($detail$$.sl_nhap||0)*$detail$$.he_so_qd)});"sokhokhongton"===$model_book$$.modelName.toLowerCase()&&(await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",fields:"tg_tk"}),$details$$=$details$$.filter($d$$=>0==$d$$.tg_tk),await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},
9
9
  fields:["tu","mau",{he_so_qd:"ty_le_qd"}]}),$details$$.forEach($detail$$=>{$detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.he_so_qd,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||
10
- 0)*$detail$$.he_so_qd,round))}));if("vatra"===$model_book$$.modelName.toLowerCase()||"vatvao"===$model_book$$.modelName.toLowerCase()){let $rs$$=await Promise.all($details$$.map($detail$$=>(async()=>{let $v$$=await $model_book$$.findOne({id_app:$master$$.id_app,so_hd:$detail$$.so_hd,so_seri:$detail$$.so_seri,ky_hieu_hoa_don:$detail$$.ky_hieu_hoa_don,id_ct:{$ne:$master$$._id.toString()}});return $v$$?$v$$.so_hd:""})()));$rs$$=$rs$$.filter($r$$=>$r$$);if(0<$rs$$.length)return $callback$$(`S\u1ed1 ho\u00e1 \u0111\u01a1n ${$rs$$.join(",")} \u0111\u00e3 t\u1ed3n t\u1ea1i`)}$details$$=
11
- $details$$.map(($detail$$,$line$$)=>{$detail$$.id_ct=$master$$._id.toString();for(let $attr$$ in $model_book$$.schema.paths)if("id_ct"!=$attr$$&&"_id"!=$attr$$){let $v$$=$detail$$[$attr$$];void 0!=$v$$&&null!=$v$$&&""!=$v$$||void 0==$master$$[$attr$$]||($detail$$[$attr$$]=$master$$[$attr$$])}$detail$$.line=$line$$;delete $detail$$.toObject;delete $detail$$._id;delete $detail$$.__v;return $detail$$});this.remove($error$$=>{if($error$$)return console.error("error delete data post",$error$$),$callback$$($error$$);
12
- $model_book$$.create($details$$,($e$jscomp$0$$,$rs$$)=>{$e$jscomp$0$$?(console.error("error save data post",$e$jscomp$0$$,$details$$),this.remove(()=>{$callback$$($e$jscomp$0$$)})):($callback$$(null,$rs$$),$rs$$&&"sokho"===$model_book$$.modelName.toLowerCase()&&setImmediate(()=>{tontucthoi.tinhTonTucThoi($rs$$,$e$$=>{$e$$&&console.error("L\u1ed7i t\u00ednh t\u1ed3n t\u1ee9c th\u1eddi v\u1eadt t\u01b0",$rs$$,$e$$)})}))})})};module.exports=post;
10
+ 0)*$detail$$.he_so_qd,round))}));if("vatra"===$model_book$$.modelName.toLowerCase()||"vatvao"===$model_book$$.modelName.toLowerCase()){let $rs$$=await Promise.all($details$$.filter($r$$=>$r$$.so_hd&&$r$$.so_hd.toUpperCase()!==($master$$.ma_ct||"").toUpperCase()).map($detail$$=>(async()=>{let $v$$=await $model_book$$.findOne({id_app:$master$$.id_app,so_hd:$detail$$.so_hd,so_seri:$detail$$.so_seri,ky_hieu_hoa_don:$detail$$.ky_hieu_hoa_don,id_ct:{$ne:$master$$._id.toString()}});return $v$$?$v$$.so_hd:
11
+ ""})()));$rs$$=$rs$$.filter($r$$=>$r$$);if(0<$rs$$.length)return $callback$$(`S\u1ed1 ho\u00e1 \u0111\u01a1n ${$rs$$.join(",")} \u0111\u00e3 t\u1ed3n t\u1ea1i`)}$details$$=$details$$.map(($detail$$,$line$$)=>{$detail$$.id_ct=$master$$._id.toString();for(let $attr$$ in $model_book$$.schema.paths)if("id_ct"!=$attr$$&&"_id"!=$attr$$){let $v$$=$detail$$[$attr$$];void 0!=$v$$&&null!=$v$$&&""!=$v$$||void 0==$master$$[$attr$$]||($detail$$[$attr$$]=$master$$[$attr$$])}$detail$$.line=$line$$;delete $detail$$.toObject;
12
+ delete $detail$$._id;delete $detail$$.__v;return $detail$$});const $self$$=this;$self$$.remove($error$$=>{if($error$$)return console.error("error delete data post",$error$$),$callback$$($error$$);$model_book$$.create($details$$,async($e$jscomp$0$$,$rs$$)=>{if($e$jscomp$0$$)console.error("error save data post",$e$jscomp$0$$,$details$$),$self$$.remove(()=>{$callback$$($e$jscomp$0$$)});else{if($master$$.ma_ct){let $contr$$=global.controllers[$master$$.ma_ct.toUpperCase()];if($contr$$){if(!await $contr$$.model.findOne({_id:$master$$._id})){console.error("Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i. X\u00f3a s\u1ed5 s\u00e1ch",
13
+ $master$$._id);$self$$.remove(()=>{$callback$$("Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i")});return}}else console.log("not found controller",$master$$.ma_ct.toUpperCase())}$callback$$(null,$rs$$);$rs$$&&"sokho"===$model_book$$.modelName.toLowerCase()&&setImmediate(()=>{tontucthoi.tinhTonTucThoi($rs$$,$e$$=>{$e$$&&console.error("L\u1ed7i t\u00ednh t\u1ed3n t\u1ee9c th\u1eddi v\u1eadt t\u01b0",$rs$$,$e$$)})})}})})};module.exports=post;
@@ -9,5 +9,6 @@ $resolve$$($details$jscomp$0$$)})};
9
9
  post.prototype.run=async function($callback$jscomp$0$$=()=>{}){if(!this.details)return $callback$jscomp$0$$(null,null);const $Socai$$=this.model||SocaiModel;let $master$$=this.master,$details$jscomp$0$$=await this.runPrepare(this.prepare,this.details);$details$jscomp$0$$=$details$jscomp$0$$.filter($d$$=>$d$$.tk_no&&$d$$.tk_co);if(!$master$$.ngay_ct)return $callback$jscomp$0$$("ngay_ct is not null");async.map($details$jscomp$0$$,($detail$jscomp$0$$,$callback$$)=>{setImmediate(()=>{$detail$jscomp$0$$.ma_kh_no||
10
10
  ($detail$jscomp$0$$.ma_kh_no=$detail$jscomp$0$$.ma_kh||$master$$.ma_kh);$detail$jscomp$0$$.ma_kh_co||($detail$jscomp$0$$.ma_kh_co=$detail$jscomp$0$$.ma_kh||$master$$.ma_kh);checkData($master$$.id_app,$master$$.ngay_ct,$detail$jscomp$0$$,($e$$,$detail$$)=>{$callback$$($e$$,$detail$$)})})},($but_toan_loi_e$$,$details$$)=>{if($but_toan_loi_e$$)return $callback$jscomp$0$$($but_toan_loi_e$$);$but_toan_loi_e$$=$details$$.filter($detail$$=>isNaN($detail$$.tien_nt)||isNaN($detail$$.tien));0<$but_toan_loi_e$$.length&&
11
11
  console.error("Cac but toan khong hop ly",$but_toan_loi_e$$,"cua chung tu",$master$$._id);let $dks$$=$details$$.filter($detail$$=>!(0===$detail$$.tien_nt&&0===$detail$$.tien)&&!isNaN($detail$$.tien_nt)&&!isNaN($detail$$.tien)).map(($detail$$,$nh_dk$$)=>{for(let $attr$$ in $Socai$$.schema.paths)"id_ct"!=$attr$$&&"_id"!=$attr$$&&(void 0!=$detail$$[$attr$$]&&null!=$detail$$[$attr$$]&&""!=$detail$$[$attr$$]||void 0==$master$$[$attr$$]||($detail$$[$attr$$]=$master$$[$attr$$]));$detail$$.nh_dk=$nh_dk$$;
12
- $detail$$.id_ct=$master$$._id.toString();delete $detail$$.toObject;delete $detail$$._id;delete $detail$$.__v;return $detail$$});$Socai$$.deleteMany({id_ct:$master$$._id.toString()},$error$$=>{if($error$$)return $callback$jscomp$0$$("Don't remove socai \n"+$error$$);$Socai$$.create($dks$$,($e$$,$rs$jscomp$0$$)=>{if($e$$){console.error("Error save socai",$e$$,$master$$);let $q_remove$$={id_app:$master$$.id_app,id_ct:$master$$._id.toString()};$Socai$$.deleteMany($q_remove$$,($_e$$,$rs$$)=>{console.error("delete socai because error when posting",
13
- $master$$._id.toString(),JSON.stringify($rs$$),$q_remove$$);$callback$jscomp$0$$($e$$)})}else console.log("Posted socai",$master$$._id,$rs$jscomp$0$$),$callback$jscomp$0$$(null,$rs$jscomp$0$$)})})})};module.exports=post;
12
+ $detail$$.id_ct=$master$$._id.toString();delete $detail$$.toObject;delete $detail$$._id;delete $detail$$.__v;return $detail$$});$Socai$$.deleteMany({id_ct:$master$$._id.toString()},$error$$=>{if($error$$)return $callback$jscomp$0$$("Don't remove socai \n"+$error$$);$Socai$$.create($dks$$,async($e$$,$rs$jscomp$0$$)=>{if($e$$){console.error("Error save socai",$e$$,$master$$);let $q_remove$$={id_app:$master$$.id_app,id_ct:$master$$._id.toString()};$Socai$$.deleteMany($q_remove$$,($_e$$,$rs$$)=>{console.error("delete socai because error when posting",
13
+ $master$$._id.toString(),JSON.stringify($rs$$),$q_remove$$);$callback$jscomp$0$$($e$$)})}else if($master$$.ma_ct){let $contr$$=global.controllers[$master$$.ma_ct.toUpperCase()];$contr$$?await $contr$$.model.findOne({_id:$master$$._id})?$callback$jscomp$0$$(null,$rs$jscomp$0$$):$Socai$$.deleteMany({id_ct:$master$$._id.toString()},($_e$$,$rs$$)=>{console.error("Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i. X\u00f3a socai",$master$$._id,$rs$$);$callback$jscomp$0$$($e$$)}):(console.log("not found controller",
14
+ $master$$.ma_ct.toUpperCase()),$callback$jscomp$0$$(null,$rs$jscomp$0$$))}else $callback$jscomp$0$$(null,$rs$jscomp$0$$)})})})};module.exports=post;