UNPKG

flexbiz-server

Version:

Flexible Server

8 lines (7 loc) 3.08 kB
'use strict';const checkinactivity=require("./checkinactivity"),task=require("./task"),{round}=require("../libs/utils"),keyresultSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},id_link:{type:String,required:!0,maxlength:1024},name:{type:String,maxlength:1024},note:{type:String,maxlength:4E3},phu_trach:String,ten_phu_trach:String,attends:[],start_date:{type:Date,required:!0},due_date:{type:Date,required:!0},update_interval:{type:Number,default:1},update_source:String,tk_no:[String], tk_co:[String],giam_tru_no:Boolean,giam_tru_co:Boolean,cong_don_gia_tri:Boolean,measure_as:{type:Number,default:1},current_value:{type:Number,default:0},target_value:{type:Number,default:0},aim:{type:Number,default:1},exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},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:0},visible_to_users:[String],update_right:[String], delete_right:[String]});(global.configs||{}).createIndexes&&(keyresultSchema.index({id_app:1}),keyresultSchema.index({id_link:1}),keyresultSchema.index({phu_trach:1}),keyresultSchema.index({start_date:1}),keyresultSchema.index({name:1}),keyresultSchema.index({due_date:1}),keyresultSchema.index({attends:1}),keyresultSchema.index({phu_trach:"text",name:"text",ten_phu_trach:"text"}),keyresultSchema.index({status:1}),keyresultSchema.index({user_created:1,visible_to:1,visible_to_users:1})); const model=mongoose.models.keyresult||mongoose.model("keyresult",keyresultSchema); model.asyncGetScore=async $item$$=>{var $checkins_target_remain$$=await checkinactivity.find({id_link:$item$$._id.toString()});$item$$.num_check_ins=$checkins_target_remain$$.length;$item$$.num_check_ins_done=$checkins_target_remain$$.filter($c$$=>"1"===$c$$.trang_thai).length;$item$$.num_tasks=await task.countDocuments({id_link:$item$$._id.toString()});$item$$.score_avg_check_ins=0!=$item$$.num_check_ins_done?round($checkins_target_remain$$.filter($c$$=>"1"===$c$$.trang_thai).map($checkin$$=>$checkin$$.score|| 0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)/$item$$.num_check_ins_done,2):0;$checkins_target_remain$$=Math.abs($item$$.target_value-$item$$.current_value);switch($item$$.aim){case 1:$item$$.score=!$checkins_target_remain$$||!$item$$.score_avg_check_ins||$item$$.score_avg_check_ins<=$item$$.current_value?0:100*round(($item$$.score_avg_check_ins-$item$$.current_value)/$checkins_target_remain$$,2);break;case 2:$item$$.score=!$checkins_target_remain$$||!$item$$.score_avg_check_ins||$item$$.score_avg_check_ins>= $item$$.current_value?0:100*round(($item$$.current_value-$item$$.score_avg_check_ins)/$checkins_target_remain$$,2);break;case 3:!$checkins_target_remain$$||!$item$$.score_avg_check_ins||$item$$.score_avg_check_ins<=$item$$.current_value?$item$$.score=0:($item$$.score=100*round(($item$$.score_avg_check_ins-$item$$.current_value)/$checkins_target_remain$$,2),100<$item$$.score&&($item$$.score=100-($item$$.score-100)))}return $item$$};module.exports=model;