kpiplus
Version:
KPI+
1 lines • 1.59 kB
JavaScript
var cddt=require("../models/cddt"),Vsocai=require("./vsocai"),arrayfuncs=require("./array-funcs"),async=require("async"),underscore=require("underscore"),moment=require("moment");module.exports=function(n,t){if(n&&n.ngay&&n.id_app&&n.tk){var o=n.ma_dvcs;o||(o=""),o={$regex:o,$options:"i"};var u,a=n.tk;if(underscore.isArray(a))a.forEach(function(n){u=u?u+"|^"+n:"^"+n}),u||(u="^"),a={$regex:u,$options:"i"};else a={$regex:"^"+a,$options:"i"};var e=n.ma_dt;e||(e={$ne:""});var r=moment(new Date(n.ngay)).startOf("date").toDate(),c=r.getFullYear(),s=moment(r).startOf("year").toDate(),_=n.id_app;async.parallel({dn:function(n){var t={id_app:_,nam:c,tk:a,ma_dt:e,ma_dvcs:o};cddt.find(t).lean().exec(function(t,o){t?n(t):n(null,o)})},ps:function(n){var t={id_app:_,ngay_ct:{$gte:s,$lt:r},ma_dt:e,tk:a,ma_dvcs:o};Vsocai.find(t,function(t,o){t?n(t):n(null,o)})}},function(n,o){if(n)return t(n);var u=o.dn;o.ps.forEach(function(n){u.push(n)});var a=underscore.groupBy(u,function(n){return n.tk+"$s"+n.ma_dt}),e=underscore.keys(a);async.map(e,function(n,t){var o=a[n],u={},e=n.split("$s");u.tk=e[0],u.ma_dt=e[1],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("Hàm này yêu cầu các tham số ngay,id_app,tk"))};