kpiplus
Version:
KPI+
1 lines • 1.64 kB
JavaScript
var Cdtk=require("../models/cdtk"),Vsocai=require("./vsocai"),arrayfuncs=require("./array-funcs"),dstktt=require("./dstktt"),async=require("async"),underscore=require("underscore"),moment=require("moment");module.exports=function(n,t){if(n&&n.ngay&&n.id_app){var o=n.ma_dvcs;o||(o=""),o={$regex:o,$options:"i"};var u,e=n.tk;if(e||(e=""),underscore.isArray(e))e.forEach(function(n){u=u?u+"|^"+n:"^"+n}),u||(u="^"),e={$regex:u,$options:"i"};else e={$regex:"^"+e,$options:"i"};var r=moment(new Date(n.ngay)).startOf("date").toDate(),a=r.getFullYear(),c=moment(r).startOf("year").toDate(),s=n.id_app;async.parallel({dn:function(n){var t={id_app:s,nam:a,tk:e,ma_dvcs:o};Cdtk.find(t).lean().exec(function(t,o){t?n(t):n(null,o)})},ps:function(n){async.waterfall([function(n){dstktt(s,e,function(t,o){t?n(t):n(null,o)})},function(n,t){var u={id_app:s,ngay_ct:{$gte:c,$lt:r},tk:{$in:n},ma_dvcs:o};Vsocai.find(u,function(n,o){n?t(n):t(null,o)})}],function(t,o){t?n(t):n(null,o)})}},function(n,o){if(n)t(n);else{var u=o.dn;o.ps.forEach(function(n){u.push(n)});var e=underscore.groupBy(u,function(n){return n.tk}),r=underscore.keys(e);async.map(r,function(n,t){var o=e[n],u={};u.tk=n,u.du_no00=o.csum("du_no00")+o.csum("ps_no")-o.csum("du_co00")-o.csum("ps_co"),u.du_no_nt00=o.csum("du_no_nt00")+o.csum("ps_no_nt")-o.csum("du_co_nt00")-o.csum("ps_co_nt"),u.du_no00<0?(u.du_co00=Math.abs(u.du_no00),u.du_no00=0):u.du_co00=0,u.du_no_nt00<0?(u.du_co_nt00=Math.abs(u.du_no_nt00),u.du_no_nt00=0):u.du_co_nt00=0,u.ps_no_nt=0,u.ps_co_nt=0,u.ps_no=0,u.ps_co=0,t(null,u)},function(n,o){n?t(n):t(null,o)})}})}else t(new Error("ngay and id_app parameter required"))};