flexbiz-server
Version:
Flexible Server
93 lines (91 loc) • 21.4 kB
JavaScript
'use strict';const App=require("./app"),Options=require("./options"),ngcompile=require("ng-node-compile"),utils=require("../libs/utils"),File=require("./file"),underscore=require("underscore"),crypto=require("crypto"),moment=require("moment"),participant=require("./participant"),_=require("lodash"),approveSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},id_ct:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,required:!0,maxlength:32,trim:!0},trang_thai:{type:String},user_request:{type:String,
required:!0,maxlength:128,trim:!0},user_request_name:{type:String,required:!0,maxlength:1024},template_content:String,request_content:String,user_approves:[{email:{type:String,maxlength:128,trim:!0},name:{type:String,maxlength:1024}}],user_approved:{type:String,maxlength:128,trim:!0},user_approved_name:{type:String,maxlength:1024},date_approved:Date,approved_reason:String,user_denied:{type:String,maxlength:128,trim:!0},user_denied_name:{type:String,maxlength:1024},date_denied:Date,denied_reason:{type:String,
maxlength:4E3},update_after_approve:Schema.Types.Mixed,update_after_deny:Schema.Types.Mixed,title:{type:String,maxlength:1024},data:Schema.Types.Mixed,status:{type:Boolean,default:!1},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,default:2},visible_to_users:[String]});
(global.configs||{}).createIndexes&&(approveSchema.index({id_ct:1,id_app:1}),approveSchema.index({trang_thai:1}),approveSchema.index({user_approved:1}),approveSchema.index({user_denied:1}),approveSchema.index({status:1}),approveSchema.index({date_created:1}),approveSchema.index({date_updated:1}),approveSchema.index({user_request:"text",user_request_name:"text"},{name:"approve_index"}));const model=mongoose.models.approve||mongoose.model("approve",approveSchema);
let renderRequests=$requests$$=>$requests$$&&0!==$requests$$.length?`
<p style='margin-top:50px'>
<hr/>
<h5>Danh s\u00e1ch \u0111\u00e3 duy\u1ec7t ho\u1eb7c t\u1eeb ch\u1ed1i</h5>
${$requests$$.map($rq$$=>{if($rq$$.user_approved)return`
<div style="color:green">
<b>${$rq$$.data.ten_trang_thai||$rq$$.title}</b>
<div>Ng\u01b0\u1eddi duy\u1ec7t: ${$rq$$.user_approved_name||$rq$$.user_approved}</div>
<div>Ng\u00e0y: ${moment($rq$$.date_approved).format("DD/MM/YYYY")}</div>
</div>
`;if($rq$$.user_denied)return`
<div style="color:red">
<b>${$rq$$.data.ten_trang_thai||$rq$$.title}</b>
<div>Ng\u01b0\u1eddi t\u1eeb ch\u1ed1i: ${$rq$$.user_denied_name||$rq$$.user_denied}</div>
<div>Ng\u00e0y: ${moment($rq$$.date_denied).format("DD/MM/YYYY")}</div>
<div>L\u00fd do: ${$rq$$.denied_reason}</div>
</div>
`}).join("")}
</p>
`:"";const footerEmailTemplate=$requests$$=>`
${renderRequests($requests$$)}
<p style='margin-top:20px'>
<hr/>
<div><span style='color:#16726D'>Created by:</span> <span style='color:#397A3A'>{{datasource.name_user_created || datasource.user_created}} at {{datasource.date_created|date:'dd/MM/yyyy HH:mm'}}<span></div>
<div><span style='color:#16726D'>Last Update by:</span> <span style='color:#397A3A'>{{datasource.name_user_updated || datasource.user_updated}} at {{datasource.date_created|date:'dd/MM/yyyy HH:mm'}}</span></div>
</p>
`;
model.request=async function($user_request$$,$user_approve$$,$title$$,$_c_data_request$$,$callback$$,$update_after_approve$$,$template_content$$,$update_after_deny$$){let $user_approves$$=$user_approve$$;underscore.isArray($user_approves$$)||($user_approves$$=[$user_approve$$]);let $data$$;$data$$=$_c_data_request$$.toObject?$_c_data_request$$.toObject():_.cloneDeep($_c_data_request$$);$data$$._id=($data$$._id||"").toString();$_c_data_request$$={id_ct:$data$$._id};Object.keys($data$$).includes("trang_thai")&&($_c_data_request$$.trang_thai=
$data$$.trang_thai);const $old_request$$=await model.findOne($_c_data_request$$);if($old_request$$&&$old_request$$.user_approved)return $callback$$(`Kh\u00f4ng th\u1ec3 t\u1ea1o y\u00eau c\u1ea7u duy\u1ec7t cho tr\u1ea1ng th\u00e1i ${$_c_data_request$$.trang_thai} c\u1ee7a ch\u1ee9ng t\u1eeb ${$data$$._id} v\u00ec \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t`);model.deleteOne($_c_data_request$$,async()=>{const $m$$={id_app:$data$$.id_app,id_ct:$data$$._id,ma_ct:$data$$.ma_ct,trang_thai:$data$$.trang_thai,
user_request:$user_request$$.email,user_request_name:$user_request$$.name,user_approves:$user_approves$$,update_after_approve:$update_after_approve$$,update_after_deny:$update_after_deny$$,title:$title$$,template_content:$template_content$$,visible_to_users:$user_approves$$.map($u$$=>$u$$.email)};let $app_info$$=await App.findOne({_id:$data$$.id_app}).lean();if($app_info$$){var $details_option_template_gen$$;$data$$.ma_ct&&($details_option_template_gen$$=await Options.findOne({id_app:$data$$.id_app,
id_func:{$regex:"^"+$data$$.ma_ct+"$",$options:"i"}}).lean());var $ngEnviorment$$=new ngcompile([]),$template$$=$template_content$$;!$template$$&&$details_option_template_gen$$&&$details_option_template_gen$$.option&&$details_option_template_gen$$.option.system&&($template$$=($template$$=((($details_option_template_gen$$.option||{}).system||{}).templateEmail||(($details_option_template_gen$$.option||{}).system||{}).templateRpt||"").split("<em>").join("").split("</em>").join(""))||"Ch\u01b0a khai b\u00e1o n\u1ed9i dung duy\u1ec7t");
if($template$$){$details_option_template_gen$$=`<h3>${$title$$}</h3>
<div>Ng\u01b0\u1eddi y\u00eau c\u1ea7u: {{user_request.name}}</div>
<div>Ng\u00e0y y\u00eau c\u1ea7u: {{datasource.date_created|date:'dd/MM/yyyy HH:mm:ss'}}</div>
<div>N\u1ed9i dung:</div><hr/>${$template$$}<hr/>
`;let $_data$$={user_request:$user_request$$,user_approve:$user_approve$$,datasource:_.cloneDeep($data$$),company:$app_info$$,app_info:$app_info$$,doc_so:utils.numberToWord};try{$m$$.request_content=$ngEnviorment$$.$compile($details_option_template_gen$$)($_data$$)}catch($e$$){console.error($e$$)}}$m$$.data=_.cloneDeep($data$$);delete $m$$.data.$$hashKey;$m$$.data.details&&($details_option_template_gen$$=$m$$.data.details.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());delete $d$$.$$hashKey;
delete $d$$._id;return{...$d$$}}),$m$$.data.details=$details_option_template_gen$$);model.create($m$$,($e$jscomp$0$$,$rs$$)=>{if($e$jscomp$0$$)return console.error("error create approve request",$e$jscomp$0$$,$m$$.data),$callback$$($e$jscomp$0$$);$user_approves$$.forEach(async $user_approve$$=>{$user_approve$$.id_request=$rs$$._id.toString();void 0!==$rs$$.trang_thai&&null!==$rs$$.trang_thai&&($user_approve$$.trang_thai=$rs$$.trang_thai);var $cipher_approve_rq_approve$$=crypto.createCipher("aes192",
configs.cryptoPassword||"PVT@1"),$_data$$=$cipher_approve_rq_approve$$.update(JSON.stringify($user_approve$$),"utf8","hex");$_data$$+=$cipher_approve_rq_approve$$.final("hex");$cipher_approve_rq_approve$$=$rs$$.toObject();$cipher_approve_rq_approve$$.url_approve=$_data$$;$cipher_approve_rq_approve$$.url_deny=$_data$$;if($template$$){var $requests$$=await model.find({id_ct:$data$$._id}).sort({trang_thai:-1}).lean();await $requests$$.asyncJoinModel2($data$$.id_app,participant,{where:{user_approved:"email"},
fields:{user_approved_name:"name"}});await $requests$$.asyncJoinModel2($data$$.id_app,participant,{where:{user_denied:"email"},fields:{user_denied_name:"name"}});$requests$$=`<h3>${$title$$}</h3>
<div>Ng\u01b0\u1eddi y\u00eau c\u1ea7u: {{user_request.name}}</div>
<div>Ng\u00e0y y\u00eau c\u1ea7u: {{datasource.date_created|date:'dd/MM/yyyy HH:mm:ss'}}</div>
<div>N\u1ed9i dung:</div><hr/>${$template$$}<hr/>
<div>
<b><a href='{{url_approve}}'>Duy\u1ec7t y\u00eau c\u1ea7u n\u00e0y</a></b>
<b style='margin-left:20px'>|<a style='color:silver;margin-left:20px' href='{{url_deny}}'>Kh\u00f4ng duy\u1ec7t y\u00eau c\u1ea7u n\u00e0y</a></b>
</div>
${footerEmailTemplate($requests$$.filter($r$$=>$r$$.user_approved||$r$$.user_denied))}
`;$_data$$={user_request:$user_request$$,user_approve:$user_approve$$,datasource:$data$$,url_approve:(configs.api_url||configs.domain)+"/public/approve/"+$_data$$,url_deny:(configs.api_url||configs.domain)+"/public/deny-approve/"+$_data$$,company:$app_info$$,app_info:$app_info$$,doc_so:utils.numberToWord};try{let $email_content$$=$ngEnviorment$$.$compile($requests$$)($_data$$);const $atts$$=await File.find({id_link:$data$$._id}).lean();App.emitEvent($user_request$$.current_id_app,"request_approve",
{_id:$data$$._id,id_app:$data$$.id_app,title:$title$$,body:$title$$,rq_approve:$cipher_approve_rq_approve$$,code:$data$$.ma_ct,email_content:$email_content$$,allow_unsubcribe:!1,attachments:$atts$$},null,[$user_approve$$.email],!0,!0)}catch($e$$){console.log("Error send the request approve",$e$$.message)}}else console.log("don't find template or report template to send notify to approve user")});$callback$$(null,$rs$$)})}})};
model.sendNotifyApproved=function($rq$$){if($rq$$.ma_ct){var $title$$=`[\u0110\u00e3 duy\u1ec7t] ${$rq$$.title}`;Options.findOne({id_app:$rq$$.id_app,id_func:{$regex:"^"+$rq$$.ma_ct+"$",$options:"i"}}).lean().exec(async($e$jscomp$0$$,$option$$)=>{$rq$$.template_content||$option$$&&$option$$.option&&$option$$.option.system&&($option$$.option.system.templateEmail||$option$$.option.system.templateRpt)?App.findOne({_id:$rq$$.id_app}).lean().exec(async($e$jscomp$4_requests$$,$_data$jscomp$2_app_info$$)=>
{if($e$jscomp$4_requests$$||!$_data$jscomp$2_app_info$$)return console.log("khong the tim thay thong tin cong ty nay");$e$jscomp$4_requests$$=await model.find({id_ct:$rq$$.data._id}).sort({trang_thai:-1}).lean();await $e$jscomp$4_requests$$.asyncJoinModel2($rq$$.id_app,participant,{where:{user_approved:"email"},fields:{user_approved_name:"name"}});await $e$jscomp$4_requests$$.asyncJoinModel2($rq$$.id_app,participant,{where:{user_denied:"email"},fields:{user_denied_name:"name"}});let $template$$=($rq$$.template_content||
(($option$$.option||{}).system||{}).templateEmail||(($option$$.option||{}).system||{}).templateRpt).split("<em>").join("").split("</em>").join("");$template$$=`
<div>
<h3>Y\u00eau c\u1ea7u d\u01b0\u1edbi \u0111\u00e2y \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t b\u1edfi ${$rq$$.user_approved_name||$rq$$.user_approved} </h3>
<div>Ng\u01b0\u1eddi y\u00eau c\u1ea7u: {{user_request.name}}</div>
<div>Ng\u00e0y y\u00eau c\u1ea7u: {{datasource.date_created|date:'dd/MM/yyyy HH:mm:ss'}}</div>
<div>N\u1ed9i dung:</div>
</div>
<hr/> ${$template$$} ${footerEmailTemplate($e$jscomp$4_requests$$.filter($r$$=>$r$$.user_approved||$r$$.user_denied))}`;let $ngEnviorment$$=new ngcompile([]);$_data$jscomp$2_app_info$$={user_request:{name:$rq$$.user_request_name,email:$rq$$.user_request},user_approve:{name:$rq$$.user_approved_name,email:$rq$$.user_approved,date:$rq$$.date_approved},datasource:$rq$$.data,company:$_data$jscomp$2_app_info$$,app_info:$_data$jscomp$2_app_info$$,doc_so:utils.numberToWord};try{let $email_content$$=$ngEnviorment$$.$compile($template$$)($_data$jscomp$2_app_info$$),
$emails$$=[$rq$$.user_request],$rqs$$=$e$jscomp$4_requests$$.map($a$$=>$a$$.user_request),$aps$$=$e$jscomp$4_requests$$.filter($r$$=>$r$$._id.toString()!==$rq$$._id.toString()).map($a$$=>$a$$.user_approved);$emails$$=[...(new Set($emails$$.concat($rqs$$).concat($aps$$)))].filter($r$$=>$r$$&&$r$$!==$rq$$.user_approved);0<$emails$$.length&&App.emitEvent($rq$$.id_app,"request_approved",{_id:$rq$$.id_ct,id_app:$rq$$.id_app,title:$title$$,body:$title$$,email_content:$email_content$$,code:$rq$$.ma_ct,allow_unsubcribe:!1,
attachments:$rq$$.data._id?await File.find({id_link:$rq$$.data._id}).lean():void 0},null,$emails$$,!0,!0)}catch($e$$){console.log("Error send email",$e$$.message)}}):console.log("don't find email template or report template to send notify email to request user")})}};
model.approve=function($_c$$,$callback$$,$token$$,$options$$={reason:""}){let $key_data$$,$_id$$,$user_approved$$,$user_approved_name$$,$trang_thai$$;if(underscore.isObject($_c$$))$_id$$=$_c$$.id_request,$user_approved$$=$_c$$.email,$user_approved_name$$=$_c$$.name,$trang_thai$$=$_c$$.trang_thai;else try{const $decipher$$=crypto.createDecipher("aes192",configs.cryptoPassword||"PVT@1");let $decrypted$$=$decipher$$.update($_c$$,"hex","utf8");$decrypted$$+=$decipher$$.final("utf8");$key_data$$=JSON.parse($decrypted$$);
$_id$$=$key_data$$.id_request;$user_approved$$=$key_data$$.email;$user_approved_name$$=$key_data$$.name;$trang_thai$$=$key_data$$.trang_thai}catch($e$$){return $callback$$("Y\u00eau c\u1ea7u n\u00e0y kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb")}if(!$_id$$||!$user_approved$$)return $callback$$("request id and approve user are required");if(!global.mongoose.Types.ObjectId.isValid($_id$$))return $callback$$("request id '"+$_id$$+"' is not valid");$_c$$={_id:$_id$$};void 0!==$trang_thai$$&&null!==$trang_thai$$&&
($_c$$.trang_thai=$trang_thai$$);model.findOne($_c$$,($e$jscomp$3$$,$rq$$)=>{if($e$jscomp$3$$||!$rq$$)return $callback$$($e$jscomp$3$$||"Y\u00eau c\u1ea7u n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");if($rq$$.date_approved)return $callback$$("Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t b\u1edfi "+$rq$$.user_approved_name);if($rq$$.date_denied)return $callback$$("Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 b\u1ecb t\u1eeb ch\u1ed1i duy\u1ec7t b\u1edfi "+$rq$$.user_denied_name);$rq$$.date_approved=
new Date;$rq$$.user_approved=$user_approved$$;$rq$$.user_approved_name=$user_approved_name$$;$rq$$.approved_reason=$options$$.reason||"";if(!$rq$$.user_approves||!$rq$$.user_approves.find($u$$=>0<=$u$$.email.indexOf($user_approved$$)))return $callback$$("User n\u00e0y kh\u00f4ng c\u00f3 quy\u1ec1n duy\u1ec7t y\u00eau c\u1ea7u n\u00e0y");$rq$$.save(($e$jscomp$2$$,$approve$$)=>{if($e$jscomp$2$$)return $callback$$($e$jscomp$2$$);model.sendNotifyApproved($rq$$,$token$$);if($rq$$.update_after_approve&&
$rq$$.update_after_approve.data)try{let $module_name$$=$rq$$.update_after_approve.module||$rq$$.update_after_approve.model,$ctrl$$;$module_name$$&&($ctrl$$=global.controllers[$module_name$$.toUpperCase()]);let $_m$$;$rq$$.update_after_approve.model?$_m$$=global.getModel($rq$$.update_after_approve.model):$ctrl$$&&($_m$$=$ctrl$$.getProperty("model"));if(!$_m$$)return;$_m$$.updateOne({_id:$rq$$.id_ct},$rq$$.update_after_approve.data,async $e$jscomp$1$$=>{if($e$jscomp$1$$)return console.error("Can't update data after approved, error:",
$e$jscomp$1$$);if($ctrl$$)try{const $obj$$=await $_m$$.findOne({_id:$rq$$.id_ct});if($obj$$){$ctrl$$.emit("saved",$obj$$);$ctrl$$.emit("updated",$obj$$);const $u$$=await global.getModel("user").findOne({email:$user_approved$$});$u$$.current_id_app=$obj$$.id_app;const $app_info$$=await App.findOne({_id:$obj$$.id_app});$ctrl$$.postData($obj$$,$e$$=>{$e$$&&console.error($e$$)});$ctrl$$.handleAfterAproved&&await $ctrl$$.handleAfterAproved($obj$$);$ctrl$$.onView($u$$,[$obj$$.toObject()],($e$jscomp$0$$,
$rs$$)=>{$ctrl$$.requestApprove($app_info$$,$u$$,$rs$$[0],$e$$=>{$e$$&&console.error($e$$)},null,$rq$$)})}}catch($e$$){console.error($e$$)}})}catch($e$$){console.error("Can't update data after approved, error:",$e$$.message)}$callback$$(null,$approve$$)})})};
model.deny=function($_c$jscomp$2_encrypted$$,$callback$$,$token$$,$options$$={reason:""}){let $key_data$$,$_id$$,$user_denied$$,$user_denied_name$$,$trang_thai$$;if(underscore.isObject($_c$jscomp$2_encrypted$$))$_id$$=$_c$jscomp$2_encrypted$$.id_request,$user_denied$$=$_c$jscomp$2_encrypted$$.email,$user_denied_name$$=$_c$jscomp$2_encrypted$$.name,$trang_thai$$=$_c$jscomp$2_encrypted$$.trang_thai;else try{const $decipher$$=crypto.createDecipher("aes192",configs.cryptoPassword||"PVT@1");let $decrypted$$=
$decipher$$.update($_c$jscomp$2_encrypted$$,"hex","utf8");$decrypted$$+=$decipher$$.final("utf8");$key_data$$=JSON.parse($decrypted$$);$_id$$=$key_data$$.id_request;$user_denied$$=$key_data$$.email;$user_denied_name$$=$key_data$$.name;$trang_thai$$=$key_data$$.trang_thai}catch($e$$){return $callback$$("Y\u00eau c\u1ea7u n\u00e0y kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb")}if(!$_id$$||!$user_denied$$)return $callback$$("request id and deny user are required");if(!global.mongoose.Types.ObjectId.isValid($_id$$))return $callback$$("request id '"+
$_id$$+"' is not valid");$_c$jscomp$2_encrypted$$={_id:$_id$$};void 0!==$trang_thai$$&&null!==$trang_thai$$&&($_c$jscomp$2_encrypted$$.trang_thai=$trang_thai$$);model.findOne($_c$jscomp$2_encrypted$$,($e$jscomp$2$$,$rq$$)=>{if($e$jscomp$2$$||!$rq$$||!$rq$$.ma_ct)return $callback$$($e$jscomp$2$$||"Y\u00eau c\u1ea7u n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");if($rq$$.date_approved)return $callback$$("Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t b\u1edfi "+$rq$$.user_approved_name);
if($rq$$.date_denied)return $callback$$("Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 b\u1ecb t\u1eeb ch\u1ed1i duy\u1ec7t b\u1edfi "+$rq$$.user_denied_name);$rq$$.date_denied=new Date;$rq$$.user_denied=$user_denied$$;$rq$$.user_denied_name=$user_denied_name$$;$rq$$.denied_reason=$options$$.reason||"";if(!$rq$$.user_approves||!$rq$$.user_approves.find($u$$=>0<=$u$$.email.indexOf($user_denied$$)))return $callback$$("User n\u00e0y kh\u00f4ng c\u00f3 quy\u1ec1n duy\u1ec7t y\u00eau c\u1ea7u n\u00e0y");$rq$$.save(($e$jscomp$1$$,
$approve$$)=>{if($e$jscomp$1$$)return $callback$$($e$jscomp$1$$);let $title$$=`[B\u1ecb t\u1eeb ch\u1ed1i] ${$rq$$.title}`;Options.findOne({id_app:$rq$$.id_app,id_func:{$regex:"^"+$rq$$.ma_ct+"$",$options:"i"}}).lean().exec(($e$jscomp$0$$,$option$$)=>{$rq$$.template_content||$option$$&&$option$$.option&&$option$$.option.system&&($option$$.option.system.templateEmail||$option$$.option.system.templateRpt)?App.findOne({_id:$rq$$.id_app}).lean().exec(async($e$jscomp$19_requests$$,$_data$jscomp$3_app_info$$)=>
{if($e$jscomp$19_requests$$||!$_data$jscomp$3_app_info$$)return console.log("khong the tim thay thong tin cong ty nay");$e$jscomp$19_requests$$=await model.find({id_ct:$rq$$.data._id}).sort({trang_thai:-1}).lean();await $e$jscomp$19_requests$$.asyncJoinModel2($rq$$.id_app,participant,{where:{user_approved:"email"},fields:{user_approved_name:"name"}});await $e$jscomp$19_requests$$.asyncJoinModel2($rq$$.id_app,participant,{where:{user_denied:"email"},fields:{user_denied_name:"name"}});let $template$$=
($rq$$.template_content||(($option$$.option||{}).system||{}).templateEmail||(($option$$.option||{}).system||{}).templateRpt).split("<em>").join("").split("</em>").join("");$template$$=`
<div>
<h3>Y\u00eau c\u1ea7u d\u01b0\u1edbi \u0111\u00e2y \u0111\u00e3 b\u1ecb t\u1eeb ch\u1ed1i duy\u1ec7t b\u1edfi ${$rq$$.user_denied_name} </h3>
<div style='color:red'>L\u00fd do t\u1eeb ch\u1ed1i: ${$rq$$.denied_reason} </div>
<div>Ng\u01b0\u1eddi y\u00eau c\u1ea7u: {{user_request.name}}</div>
<div>Ng\u00e0y y\u00eau c\u1ea7u: {{datasource.date_created|date:'dd/MM/yyyy HH:mm:ss'}}</div>
<div>N\u1ed9i dung:</div>
</div>
<hr/> ${$template$$} ${footerEmailTemplate($e$jscomp$19_requests$$.filter($r$$=>$r$$.user_approved||$r$$.user_denied))}`;let $ngEnviorment$$=new ngcompile([]);$_data$jscomp$3_app_info$$={user_request:{name:$rq$$.user_request_name,email:$rq$$.user_request},user_deny:{name:$rq$$.user_denied_name,email:$rq$$.user_denied},datasource:$rq$$.data,company:$_data$jscomp$3_app_info$$,app_info:$_data$jscomp$3_app_info$$,doc_so:utils.numberToWord};try{let $email_content$$=$ngEnviorment$$.$compile($template$$)($_data$jscomp$3_app_info$$),
$emails$$=[$rq$$.user_request],$rqs$$=$e$jscomp$19_requests$$.map($a$$=>$a$$.user_request),$aps$$=$e$jscomp$19_requests$$.filter($r$$=>$r$$._id.toString()!==$rq$$._id.toString()).map($a$$=>$a$$.user_approved);$emails$$=[...(new Set($emails$$.concat($rqs$$).concat($aps$$)))].filter($r$$=>$r$$);0<$emails$$.length&&App.emitEvent($rq$$.id_app,"request_denied",{_id:$rq$$.id_ct,id_app:$rq$$.id_app,title:$title$$,body:$title$$,email_content:$email_content$$,code:$rq$$.ma_ct,allow_unsubcribe:!1,attachments:$rq$$.data._id?
await File.find({id_link:$rq$$.data._id}).lean():void 0},null,$emails$$,!0,!0)}catch($e$$){console.log("Error send email",$e$$.message)}}):console.log("don't find email template or report template to send notify email to request user")});if($rq$$.update_after_deny&&$rq$$.update_after_deny.data)try{let $module_name$$=$rq$$.update_after_deny.module||$rq$$.update_after_deny.model,$ctrl$$;$module_name$$&&($ctrl$$=global.controllers[$module_name$$.toUpperCase()]);let $_m$$;$rq$$.update_after_deny.model?
$_m$$=global.getModel($rq$$.update_after_deny.model):$ctrl$$&&($_m$$=$ctrl$$.getProperty("model"));if(!$_m$$)return;$_m$$.findOneAndUpdate({_id:$rq$$.id_ct},$rq$$.update_after_deny.data,async $e$jscomp$0$$=>{if($e$jscomp$0$$)return console.error("Can't update data after denied, error:",$e$jscomp$0$$);if($ctrl$$)try{const $obj$$=await $_m$$.findOne({_id:$rq$$.id_ct});$obj$$&&($ctrl$$.emit("saved",$obj$$),$ctrl$$.emit("updated",$obj$$),$ctrl$$.postData($obj$$,$e$$=>{$e$$&&console.error($e$$)}),$ctrl$$.handleAfterDenied&&
await $ctrl$$.handleAfterDenied($obj$$))}catch($e$$){console.error($e$$)}})}catch($e$$){console.log("Can't update data after deined, error:",$e$$.message)}$callback$$(null,$approve$$)})})};module.exports=model;