UNPKG

flexbiz-server

Version:

Flexible Server

19 lines (18 loc) 7.97 kB
'use strict';const email=require("./email"),loadTemplate=require("./load-template"),async=require("async"),mailschedule=global.getModel("mailschedule"),mailTemplateAction=require("../actions/mailtemplate"),Contract=global.getModel("contract"),Customer=global.getModel("customer"),Mailaccount=global.getModel("mailaccount"),fork=require("child_process").fork,App=global.getModel("app"),underscore=require("underscore"); exports.define=function(){global.agenda&&(global.agenda.define("ConnectImapServer",{priority:"low",concurrency:1},function($job$$,$done$$){var $account$$=$job$$.attrs.data.obj;Mailaccount.findOne({_id:$account$$._id.toString(),status:!0},{_id:1}).lean().exec(function($e$$,$rs$$){if($e$$||!$rs$$)return $done$$();global.mailmanagement.startAccount($account$$,function($e$$){$e$$&&console.error($e$$);$done$$()})})}),global.agenda.define("Backup",{priority:"low",concurrency:1},function($job$$,$done$$){$job$$= fork(__dirname+"/backup.js");$job$$.on("message",function($response$$){console.log("Finish backup data, error:",$response$$.error);$done$$()});$job$$.send({})}),global.agenda.define("SyncCustomer",{priority:"high",concurrency:100},function($job$$){console.log("sync customer",$job$$.attrs.data.obj)}),global.agenda.define("Warranty",{priority:"high",concurrency:50},function($job$$,$done$$){var $obj$$={};underscore.extend($obj$$,$job$$.attrs.data.obj);$obj$$.to=[{name:$obj$$.user_created,address:$obj$$.user_created}]; $obj$$.visible_to_users&&$obj$$.visible_to_users.forEach(function($u$$){$obj$$.to.push({name:$u$$,address:$u$$})});Contract.findOne({_id:$obj$$.id_hd}).lean().exec(function($e$jscomp$1$$,$contract$$){if($e$jscomp$1$$||!$contract$$)return $done$$(),console.error("Can't get contract info ",$obj$$.id_hd," ",$e$jscomp$1$$);$obj$$.contract=$contract$$;Customer.findOne({_id:$contract$$.id_kh}).lean().exec(function($e$jscomp$0$$,$customer$$){if($e$jscomp$0$$||!$customer$$)return $done$$(),console.error("can't get customer info ", $contract$$.id_kh," ",$e$jscomp$0$$);$obj$$.customer=$customer$$;App.findOne({_id:$customer$$.id_app}).lean().exec(function($e$$,$company$$){if($e$$||!$company$$)return $done$$(),console.error("can't get company info ",$contract$$.id_app," ",$e$$);$obj$$.company=$company$$;loadTemplate("alert warranty.html",$obj$$,function($error$jscomp$0$$,$html$$){email.sendHtml({to:$obj$$.to,subject:"Th\u00f4ng b\u00e1o h\u1ee3p \u0111\u1ed3ng \u0111\u1ebfn h\u1ea1n b\u1ea3o h\u00e0nh",html:$html$$},function($error$$){$error$$&& console.error("Khong the gui email nhac nho bao hanh\n"+$error$$);$done$$()})})})})})}),global.agenda.define("Task",{priority:"high",concurrency:50},function($job$$,$done$$){var $obj$$={};underscore.extend($obj$$,$job$$.attrs.data.obj);App.findOne({_id:$obj$$.id_app},{participants:1}).lean().exec(function($e$$,$ap$$){if($e$$||!$ap$$)return console.log("Error send task notification",$e$$,"id app",$obj$$.id_app);let $to$$=[];$obj$$.phu_trach===$ap$$.user_created&&$to$$.push($obj$$.phu_trach);$obj$$.attends&& $obj$$.attends.forEach(function($attend$$){$attend$$.address!==$obj$$.phu_trach&&($attend$$.address===$ap$$.user_created||0<underscore.where($ap$$.participants,{email:$attend$$.address}))&&$to$$.push($attend$$)});0<$to$$.length?loadTemplate("alert task.html",$obj$$,function($error$jscomp$0$$,$html$$){$to$$=[...(new Set($to$$))];App.emitEvent($obj$$.id_app,"task:alert",{_id:$obj$$._id,id_app:$obj$$.id_app,title:"Nh\u1eafc nh\u1edf c\u00f4ng vi\u1ec7c",body:$html$$,code:"task",event:"task:alert",action:"TASK:ALERT"}, null,$to$$,!0,!0);email.sendHtml({to:$to$$,subject:"Nh\u1eafc nh\u1edf c\u00f4ng vi\u1ec7c",html:$html$$},function($error$$){$error$$&&console.error("Khong the gui email nhac nho cong viec\n"+$error$$);$done$$()})}):$done$$()})}),global.agenda.define("SendEmail",{priority:"high",concurrency:20},function($job$$,$done$$){var $obj$$={};underscore.extend($obj$$,$job$$.attrs.data.obj);console.log("begin send email",$obj$$.subject);mailTemplateAction.send($obj$$,$e$jscomp$0$$=>{$e$jscomp$0$$?mailschedule.update({_id:$obj$$._id.toString()}, {error:$e$jscomp$0$$,sent:!1,date_updated:new Date,nextRunAt:$job$$.attrs.nextRunAt},function($e$$){if($e$$)return console.log($e$$)}):0===$obj$$.repeat?mailschedule.remove({_id:$obj$$._id.toString()},function($e$$){$e$$&&console.log("Can't delete mail which sent:",$e$$)}):mailschedule.update({_id:$obj$$._id.toString()},{error:"",sent:!0,nextRunAt:$job$$.attrs.nextRunAt},function($e$$){$e$$&&console.log($e$$)});$done$$()})}))}; exports.getJob=async($name$$,$_id$$,$next$$)=>{if(!global.agenda)return $next$$("agenda is not start");try{let $job$jscomp$0$$=(await global.agenda.jobs({name:$name$$})).find($job$$=>$job$$.attrs.data&&$job$$.attrs.data.id===$_id$$.toString());return $job$jscomp$0$$?$next$$(null,$job$jscomp$0$$):$next$$("Not found")}catch($e$$){$next$$($e$$.message)}};exports.deleteTaskJob=function($_id$$,$next$$){exports.deleteJob("Task",$_id$$,$next$$)}; exports.deleteWarrantyJob=function($_id$$,$next$$){exports.deleteJob("Warranty",$_id$$,$next$$)};exports.deleteMailJob=function($_id$$,$next$$){exports.deleteJob("SendEmail",$_id$$,$next$$)}; exports.deleteJob=async($name$$,$_id$$,$next$$)=>{if(!global.agenda)return console.log("Agenda is not started"),$next$$();$next$$||($next$$=function(){});try{let $jobs$$=await global.agenda.jobs({name:$name$$});$jobs$$?async.mapSeries($jobs$$,function($job$$,$callback$$){$job$$.attrs.data.id==$_id$$.toString()?$job$$.remove(function($err$$){$err$$&&console.log("Can't remove job\n"+$err$$);$callback$$($err$$)}):$callback$$()},function($e$$,$rs$$){$next$$($e$$,$rs$$)}):$next$$()}catch($e$$){console.log("err delete job", $e$$.message),$next$$($e$$.message)}};exports.ConnectImapServer=function($account$$,$minutes$$){$minutes$$||($minutes$$=5);$account$$.schedule=new Date;$account$$.schedule.setMinutes($account$$.schedule.getMinutes()+$minutes$$);exports.createJob("ConnectImapServer",$account$$)};exports.createTaskJob=function($obj$$){exports.createJob("Task",$obj$$)}; exports.createWarrantyJob=function($obj$$){if($obj$$.reminder_yn){var $reminder$$=new Date($obj$$.start_date);$obj$$.reminder=$reminder$$;$obj$$.repeat=0;1==$obj$$.unit_time&&($reminder$$.setDate($reminder$$.getDate()+$obj$$.warranty_time),$obj$$.unit_time_name="ng\u00e0y");2==$obj$$.unit_time&&($reminder$$.setMonth($reminder$$.getMonth()+$obj$$.warranty_time),$obj$$.unit_time_name="th\u00e1ng");3==$obj$$.unit_time&&($obj$$.unit_time_name="n\u0103m",$reminder$$.setYear($reminder$$.getYear()+$obj$$.warranty_time)); exports.createJob("Warranty",$obj$$)}else exports.deleteWarrantyJob($obj$$._id,()=>{})};exports.createMailJob=function($obj$$){exports.createJob("SendEmail",$obj$$)};exports.createBackupJob=function($schedule$$,$repeat$$){$repeat$$||($repeat$$=1);exports.createJob("Backup",{_id:"backup",schedule:$schedule$$,repeat:$repeat$$})}; exports.createJob=function($name$$,$obj$$){global.agenda?($obj$$=JSON.parse(JSON.stringify($obj$$)),$obj$$.reminder&&!$obj$$.schedule&&($obj$$.schedule=$obj$$.reminder),$obj$$.schedule?(0==$obj$$.send_type&&($obj$$.schedule=new Date,$obj$$.schedule.setSeconds($obj$$.schedule.getSeconds()+2)),exports.getJob($name$$,$obj$$._id.toString(),async($e$$,$job$$)=>{$job$$?(!$obj$$.repeat&&$job$$.attrs.lastRunAt?$job$$.schedule(new Date(2999,12,31)):$job$$.schedule($obj$$.schedule),$job$$.attrs.data.obj=$obj$$): ($job$$=global.agenda.create($name$$,{obj:$obj$$,id:$obj$$._id.toString()}),$job$$.schedule($obj$$.schedule));if($obj$$.repeat){var $time_repeat$$;1==$obj$$.repeat&&($time_repeat$$="1 day");2==$obj$$.repeat&&($time_repeat$$="1 week");3==$obj$$.repeat&&($time_repeat$$="1 month");4==$obj$$.repeat&&($time_repeat$$="3 months");5==$obj$$.repeat&&($time_repeat$$="12 months");$time_repeat$$?$job$$.repeatEvery($time_repeat$$):$job$$.repeatEvery(null)}else $job$$.repeatEvery(null);await $job$$.save()})):exports.deleteJob($name$$, $obj$$._id.toString())):console.log("Agenda is not started")};