kpiplus
Version:
KPI+
1 lines • 5.94 kB
JavaScript
var email=require("./email"),loadTemplate=require("./load-template"),parseTemplate=require("./parse-template").parseTemplate,async=require("async"),mailschedule=require("../models/mailschedule"),mailTemplateAction=require("../actions/mailtemplate"),Mailsent=require("../models/mailsent"),Synctime=require("../models/synctime"),Contract=require("../models/contract"),Customer=require("../models/customer"),Mailaccount=require("../models/mailaccount"),Lienhe=require("../models/lienhe"),Link=require("../models/link"),spawn=require("child_process").spawn,App=require("../models/app"),underscore=require("underscore"),request=require("request");exports.define=function(){agenda.define("ConnectImapServer",{priority:"low",concurrency:1},function(e,t){var n=e.attrs.data.obj;Mailaccount.findOne({_id:n._id.toString(),status:!0},{_id:1}).lean().exec(function(e,r){if(e||!r)return t();mailmanagement.startAccount(n,function(e){t()})})}),agenda.define("Backup",{priority:"low",concurrency:1},function(e,t){var n=__dirname+"/backup.js",r=spawn("node",[n]);r.stdout.on("data",function(e){1==(e=e.toString())?console.log("Backup database completed"):console.log("Log:",e)}),r.stderr.on("data",function(e){console.log("Error:",e.toString())}),r.on("close",function(e){t()})}),agenda.define("SyncCustomer",{priority:"high",concurrency:100},function(e,t){e.attrs.data.obj}),agenda.define("Warranty",{priority:"high",concurrency:50},function(e,t){var n={};underscore.extend(n,e.attrs.data.obj),n.to=[{name:n.user_created,address:n.user_created}],n.visible_to_users&&n.visible_to_users.forEach(function(e){n.to.push({name:e,address:e})}),Contract.findOne({_id:n.id_hd}).lean().exec(function(e,r){if(e||!r)return t(),console.error("Can't get contract info ",n.id_hd," ",e);n.contract=r,Customer.findOne({_id:r.id_kh}).lean().exec(function(e,r){if(e||!r)return t(),console.error("can't get customer info ",contact.id_kh," ",e);n.customer=r,App.findOne({_id:r.id_app}).lean().exec(function(e,r){if(e||!r)return t(),console.error("can't get company info ",contact.id_app," ",e);n.company=r,loadTemplate("alert warranty.html",n,function(e,r){email.sendHtml({to:n.to,subject:"Thông báo hợp đồng đến hạn bảo hành",html:r},function(e,n){e&&console.error("Khong the gui email nhac nho bao hanh\n"+e),t()})})})})})}),agenda.define("Task",{priority:"high",concurrency:50},function(e,t){var n={};underscore.extend(n,e.attrs.data.obj),App.findOne({_id:n.id_app},{participants:1}).lean().exec(function(e,r){if(e||!r)return console.log("Error send task notification",e,"id app",n.id_app);var a=[];(n.phu_trach===r.user_created||underscore.where(r.participants,{email:n.phu_trach})>0)&&a.push(attend),n.attends&&n.attends.forEach(function(e){e.address!==n.phu_trach&&(e.address===r.user_created||underscore.where(r.participants,{email:e.address})>0)&&a.push(e)}),a.length>0?loadTemplate("alert task.html",n,function(e,n){email.sendHtml({to:a,subject:"Nhắc nhở công việc",html:n},function(e,n){e&&console.error("Khong the gui email nhac nho cong viec\n"+e),t()})}):t()})}),agenda.define("SendEmail",{priority:"high",concurrency:20},function(e,t){var n={};underscore.extend(n,e.attrs.data.obj),console.log("begin send email",n.subject),mailTemplateAction.send(n,(r,a)=>{r?mailschedule.update({_id:n._id.toString()},{error:r,sent:!1,date_updated:new Date,nextRunAt:e.attrs.nextRunAt},function(e,t){if(e)return console.log(e)}):0===n.repeat?mailschedule.remove({_id:n._id.toString()},function(e){e&&console.log("Can't delete mail which sent:",e)}):mailschedule.update({_id:n._id.toString()},{error:"",sent:!0,nextRunAt:e.attrs.nextRunAt},function(e,t){e&&console.log(e)}),t()})})},exports.getJob=function(e,t,n){agenda.jobs({name:e},function(e,r){if(e)return n(e);if(r)for(var a=0;a<r.length;a++){var o=r[a];if(o.attrs.data&&o.attrs.data.id==t.toString())return n(null,o)}n("Not found")})},exports.deleteTaskJob=function(e,t){exports.deleteJob("Task",e,t)},exports.deleteWarrantyJob=function(e,t){exports.deleteJob("Warranty",e,t)},exports.deleteMailJob=function(e,t){exports.deleteJob("SendEmail",e,t)},exports.deleteJob=function(e,t,n){n||(n=function(){}),agenda.jobs({name:e},function(e,r){if(e)return n(e);r?async.map(r,function(e,n){e.attrs.data.id==t.toString()?e.remove(function(e){e&&console.log("Can't remove job\n"+e),n(e)}):n()},function(e,t){n(e,t)}):n()})},exports.ConnectImapServer=function(e,t){t||(t=5),e.schedule=new Date,e.schedule.setMinutes(e.schedule.getMinutes()+t),exports.createJob("ConnectImapServer",e)},exports.createTaskJob=function(e){exports.createJob("Task",e)},exports.createWarrantyJob=function(e){if(e.reminder_yn){var t=new Date(e.start_date);e.reminder=t,e.repeat=0,1==e.unit_time&&(t.setDate(t.getDate()+e.warranty_time),e.unit_time_name="ngày"),2==e.unit_time&&(t.setMonth(t.getMonth()+e.warranty_time),e.unit_time_name="tháng"),3==e.unit_time&&(e.unit_time_name="năm",t.setYear(t.getYear()+e.warranty_time)),exports.createJob("Warranty",e)}else exports.deleteWarrantyJob(e._id,()=>{})},exports.createMailJob=function(e){exports.createJob("SendEmail",e)},exports.createBackupJob=function(e,t){t||(t=1);var n={_id:"backup",schedule:e,repeat:t};exports.createJob("Backup",n)},exports.createJob=function(e,t){(t=JSON.parse(JSON.stringify(t))).reminder&&!t.schedule&&(t.schedule=t.reminder),t.schedule?(0==t.send_type&&(t.schedule=new Date,t.schedule.setSeconds(t.schedule.getSeconds()+2)),exports.getJob(e,t._id.toString(),function(n,r){var a;(r?(!t.repeat&&r.attrs.lastRunAt?r.schedule(new Date(2999,12,31)):r.schedule(t.schedule),r.attrs.data.obj=t):(r=agenda.create(e,{obj:t,id:t._id.toString()})).schedule(t.schedule),t.repeat)?(1==t.repeat&&(a="1 day"),2==t.repeat&&(a="1 week"),3==t.repeat&&(a="1 month"),4==t.repeat&&(a="3 months"),5==t.repeat&&(a="12 months"),a?r.repeatEvery(a):r.repeatEvery(null)):r.repeatEvery(null);r.save(function(e){if(e)return console.log(e)})})):exports.deleteJob(e,t._id.toString())};