UNPKG

kpiplus

Version:

KPI+

1 lines 5.11 kB
const App=require("./app"),Options=require("./options"),ngcompile=require("ng-node-compile");var email=require("../libs/email"),configs=require("../configs"),utils=require("../libs/utils"),underscore=require("underscore"),crypto=require("crypto"),validator=require("validator"),approveSchema=new Schema({id_app:{type:String,required:!0},id_ct:{type:String,required:!0},ma_ct:{type:String,required:!0},user_request:{type:String,required:!0},user_request_name:{type:String,required:!0},user_approves:[{email:String,name:String}],user_approved:{type:String},user_approved_name:{type:String},date_approved:Date,update_after_approve:Schema.Types.Mixed,title:String,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:""}});approveSchema.index({id_ct:1,id_app:1});var model=mongoose.model("approve",approveSchema);model.request=function(e,t,a,r,i,o){let p=t;underscore.isArray(p)||(p=[t]),model.remove({id_ct:r._id},(t,n)=>{new model({id_app:r.id_app,id_ct:r._id,ma_ct:r.ma_ct,user_request:e.email,user_request_name:e.name,user_approves:p,update_after_approve:o,title:a,data:r}).save((t,o)=>{if(t)return i(t);p.forEach(t=>{t.id_request=o._id.toString();const i=crypto.createCipher("aes192","STP@9");let p=i.update(JSON.stringify(t),"utf8","hex"),n=p+=i.final("hex"),d=o.toObject();d.url_approve=n,App.emitEvent(e.current_id_app,null,{_id:r._id,id_app:r.id_app,body:`${a}`,rq_approve:d,code:r.ma_ct},e.token,[t.email]),validator.isEmail(t.email)&&Options.findOne({id_app:r.id_app,id_func:{$regex:r.ma_ct,$options:"i"}}).lean().exec((i,o)=>{o&&o.option&&o.option.system&&(o.option.system.templateEmail||o.option.system.templateRpt)?App.findOne({_id:r.id_app}).lean().exec((i,p)=>{if(i||!p)return console.log("khong the tim thay thong tin cong ty nay");let d=(o.option.system.templateEmail||o.option.system.templateRpt).split("<em>").join("").split("</em>").join("");d="<h3>"+a+"</h3> <div>Người yêu cầu: {{user_request.name}}</div><div>Ngày yêu cầu: {{datasource.date_created|date:'dd/MM/yyyy HH:mm:ss'}}</div><div>Nội dung:</div><hr/>"+d+"<hr/><b>Để duyệt yêu cầu trên, <a href='{{url_approve}}'>click vào đây</a></b>";let u=new ngcompile([]),s={user_request:e,user_approve:t,datasource:r,url_approve:configs.domain+"/public/approve/"+n,company:p,app_info:p,doc_so:utils.numberToWord};try{let e=u.$compile(d)(s);email.sendHtml({to:{name:t.name,address:t.email},subject:a,html:e},function(e,a){e&&console.error("Khong the gui yeu cau duyet toi email "+t.email+"\n"+e)})}catch(i){console.log("Error send the request approve email",i.message)}}):console.log("don't find email template or report template to send notify email to approve user")})}),i(null,o)})})},model.approve=function(e,t,a){let r,i,o,p;try{const a=crypto.createDecipher("aes192","STP@9");let n=a.update(e,"hex","utf8");n+=a.final("utf8"),i=(r=JSON.parse(n)).id_request,o=r.email,p=r.name}catch(e){t("Yêu cầu này không có giá trị")}model.findOne({_id:i},(e,r)=>e||!r?t(e||"Yêu cầu này không tồn tại"):r.date_approved?t("Yêu cầu này đã được duyệt bởi "+r.user_approved_name):(r.date_approved=new Date,r.user_approved=o,r.user_approved_name=p,void r.save((e,i)=>{if(e)return t(e);if(App.emitEvent(r.id_app,null,{_id:r.id_ct,id_app:r.id_app,body:"Bạn đã duyệt thành công yêu cầu này",code:r.ma_ct},a,[r.user_request]),validator.isEmail(r.user_request)&&Options.findOne({id_app:r.id_app,id_func:{$regex:r.ma_ct,$options:"i"}}).lean().exec((e,t)=>{t&&t.option&&t.option.system&&(t.option.system.templateEmail||t.option.system.templateRpt)?App.findOne({_id:r.id_app}).lean().exec((e,a)=>{if(e||!a)return console.log("khong the tim thay thong tin cong ty nay");let i=(t.option.system.templateEmail||t.option.system.templateRpt).split("<em>").join("").split("</em>").join("");i="<h3>Yêu cầu dưới đây đã được duyệt bởi "+r.user_approve_name+" </h3>Người yêu cầu: {{user_request.name}}</div><div>Ngày yêu cầu: {{datasource.date_created|date:'dd/MM/yyyy HH:mm:ss'}}</div><div>Nội dung:</div><hr/> "+i;let o=new ngcompile([]),p={user_request:{name:r.user_request_name,email:r.user_request},user_approve:{name:r.user_approved_name,email:r.user_approved},datasource:r.data,company:a,app_info:a,doc_so:utils.numberToWord};try{let t=o.$compile(i)(p);email.sendHtml({to:{name:r.user_request_name,address:r.user_request},subject:r.title,html:t},function(e,t){e&&console.error("Khong the gui thong bao da duyet toi "+r.user_request+"\n"+e)})}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")}),r.update_after_approve)try{require("./"+r.update_after_approve.model).findOneAndUpdate({_id:r.id_ct},r.update_after_approve.data,(e,t)=>{if(e)return console.log("Can't update data after approved, error:",e)})}catch(e){console.log("Can't update data after approved, error:",e.message)}t(null,i)})))},module.exports=model;