flexbiz-server
Version:
Flexible Server
14 lines (13 loc) • 6.2 kB
JavaScript
const async=require("async"),qts=global.getModel("qts"),qts_dieuchinh=global.getModel("qts_dieuchinh"),sotinhkh=global.getModel("sotinhkh"),controller=require("../../controllers/controllerRPT"),moment=require("moment");
module.exports=function($router$$){new controller($router$$,"sotaisan",function($req$$,$callback$$){const $condition$$=$req$$.query;$condition$$.nam=$condition$$.nam?Number($condition$$.nam):(new Date).getFullYear();const $id_app$$=$condition$$.id_app;let $ngay_cuoi_thang$$,$ngay_dau_nam$$,$toi_ky$$;$ngay_cuoi_thang$$=$condition$$.den_ngay?moment($condition$$.den_ngay).endOf("date").toDate():moment(new Date($condition$$.nam+"-12-15")).endOf("year").toDate();$toi_ky$$=$ngay_cuoi_thang$$.getMonth()+
1;$ngay_dau_nam$$=moment(new Date($condition$$.nam+"-12-15")).startOf("year").toDate();async.series({id_tss:function($callback$$){let $q_ts$$={id_app:$id_app$$};$q_ts$$.ngay_tang={$lte:$ngay_cuoi_thang$$};$q_ts$$.$or=[{ngay_giam:null}];if($condition$$.tu_ngay){let $tu_ngay$$=moment($condition$$.tu_ngay).startOf("date").toDate();$q_ts$$.ngay_tang.$gte=$tu_ngay$$;$q_ts$$.$or.ngay_giam={$gte:$tu_ngay$$}}else $q_ts$$.$or.ngay_giam={$gte:$ngay_dau_nam$$};$condition$$.ma_nv&&($q_ts$$.ma_bp=$condition$$.ma_nv);
$condition$$.ma_loai_ts&&($q_ts$$.ma_loai_ts=$condition$$.ma_loai_ts);$condition$$.ma_kho&&($q_ts$$.ma_kho=$condition$$.ma_kho);$condition$$.ma_gd&&($q_ts$$.ma_gd=$condition$$.ma_gd);$condition$$.so_the_ts&&($q_ts$$.so_the_ts=$condition$$.so_the_ts);$condition$$.so_hieu&&($q_ts$$.so_hieu=$condition$$.so_hieu);$condition$$.id_ts&&($q_ts$$.id_ts=$condition$$.id_ts);qts.find($q_ts$$).sort({ngay_tang:1,so_ct:1}).lean().exec(function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$callback$$(null,$rs$$)})}},
function($e$$,$rs$$){if($e$$)return $callback$$($e$$);let $ts$$=$rs$$.id_tss,$dsts$$=[];$ts$$.forEach(function($r$$){$dsts$$.push($r$$._id.toString())});async.series({khauhao_nt:function($callback$$){let $q$$={id_app:$id_app$$,nam:$condition$$.nam-1};$q$$.id_ts={$in:$dsts$$};sotinhkh.find($q$$).lean().exec(async function($e$$,$kh$$){if($e$$)return $callback$$($e$$);await $kh$$.filter($r$$=>$r$$.ma_tang_giam_ts).asyncJoinModel2($condition$$.id_app,"dmtanggiamts",{where:"ma_tang_giam_ts",fields:{kieu_dc:"kieu"}});
$kh$$.forEach($r$$=>{$r$$.kieu_dc=="2"&&($r$$.nguyen_gia=0-$r$$.nguyen_gia,$r$$.gia_tri_da_kh=0-$r$$.gia_tri_da_kh,$r$$.gia_tri_con_lai=0-$r$$.gia_tri_con_lai,$r$$.gia_tri_kh_ky=0-$r$$.gia_tri_kh_ky)});$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$||=[];$callback$$(null,$rs$$)})})},khauhao_nn:function($callback$$){let $q$$={id_app:$id_app$$,nam:$condition$$.nam,thang:{$lte:$toi_ky$$}};$q$$.id_ts={$in:$dsts$$};sotinhkh.find($q$$).lean().exec(async function($e$$,
$kh$$){if($e$$)return $callback$$($e$$);await $kh$$.filter($r$$=>$r$$.ma_tang_giam_ts).asyncJoinModel2($condition$$.id_app,"dmtanggiamts",{where:"ma_tang_giam_ts",fields:{kieu_dc:"kieu"}});$kh$$.forEach($r$$=>{$r$$.kieu_dc=="2"&&($r$$.nguyen_gia=0-$r$$.nguyen_gia,$r$$.gia_tri_da_kh=0-$r$$.gia_tri_da_kh,$r$$.gia_tri_con_lai=0-$r$$.gia_tri_con_lai,$r$$.gia_tri_kh_ky=0-$r$$.gia_tri_kh_ky)});$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$||=[];$callback$$(null,
$rs$$)})})},nguyengia:function($callback$$){const $q$$={id_ts:{$in:$dsts$$},id_app:$id_app$$};$q$$.$or=[{nam:{$lt:$condition$$.nam}},{nam:$condition$$.nam,ky:{$lte:$toi_ky$$}}];qts_dieuchinh.find($q$$).lean().exec(async function($e$$,$rs$$){if($e$$)return $callback$$($e$$);await $rs$$.asyncJoinModel2($id_app$$,"dmtanggiamts",{where:"ma_tang_giam_ts",fields:{kieu_dc:"kieu"}});$ts$$.forEach(function($ts$$){let $nguyen_gia_dc$$=$rs$$.filter($r$$=>$r$$.id_ts==$ts$$._id.toString()).map($r$$=>$r$$.kieu_dc==
"2"?0-$r$$.nguyen_gia:$r$$.nguyen_gia).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$gia_tri_da_kh_dc$$=$rs$$.filter($r$$=>$r$$.id_ts==$ts$$._id.toString()).map($r$$=>$r$$.kieu_dc=="2"?0-$r$$.gia_tri_da_kh:$r$$.gia_tri_da_kh).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$gia_tri_con_lai_dc$$=$rs$$.filter($r$$=>$r$$.id_ts==$ts$$._id.toString()).map($r$$=>$r$$.kieu_dc=="2"?0-$r$$.gia_tri_con_lai:$r$$.gia_tri_con_lai).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$ts$$.nguyen_gia=$ts$$.details.csum("nguyen_gia")+$nguyen_gia_dc$$;$ts$$.gia_tri_da_kh=
$ts$$.details.csum("gia_tri_da_kh")+$gia_tri_da_kh_dc$$;$ts$$.gia_tri_con_lai=$ts$$.details.csum("gia_tri_con_lai")+$gia_tri_con_lai_dc$$});$callback$$(null,$ts$$)})}},async function($e$$,$rs$$){if($e$$)return $callback$$($e$$);let $stt$$=1;$ts$$.forEach(function($r$$){$r$$.gia_tri_kh_nam=$rs$$.khauhao_nn.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});$r$$.gia_tri_kh_truoc=$r$$.gia_tri_da_kh+$rs$$.khauhao_nt.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});$r$$.gia_tri_kh_luy_ke=$r$$.gia_tri_kh_nam+
$r$$.gia_tri_kh_truoc;$r$$.gia_tri_con_lai=$r$$.nguyen_gia-$r$$.gia_tri_kh_luy_ke;$r$$.ty_le_kh=Math.roundBy($r$$.so_ky_kh/12,2);$r$$.muc_kh=$r$$.ty_le_kh!==0?Math.roundBy($r$$.nguyen_gia/$r$$.ty_le_kh,2):0;$r$$.ngay_giam&&$r$$.ngay_giam.getFullYear()>Number($condition$$.nam)&&($r$$.ngay_giam=null,$r$$.ly_do_giam="",$r$$.so_ct_giam="");$r$$.stt=$stt$$;$stt$$+=1});async.map($ts$$,($t$$,$callback$$)=>{setImmediate(async()=>{let $bpsd$$;try{$bpsd$$=await qts.bophansudung($condition$$.id_app,$t$$._id.toString(),
$ngay_cuoi_thang$$)}catch($e$$){$bpsd$$=[{ma_bp:$t$$.ma_bp,so_luong:$t$$.so_luong||1}]}$bpsd$$=$bpsd$$.map($bp$$=>{let $he_so$$=$bp$$.so_luong/($t$$.so_luong||1);$bp$$={...$t$$,...$bp$$};$bp$$.nguyen_gia*=$he_so$$;$bp$$.gia_tri_kh_nam_nay*=$he_so$$;$bp$$.gia_tri_kh_nam_truoc*=$he_so$$;$bp$$.gia_tri_da_kh*=$he_so$$;$bp$$.gia_tri_kh_luy_ke*=$he_so$$;$bp$$.gia_tri_con_lai*=$he_so$$;return $bp$$});$callback$$(null,$bpsd$$)})},async($e$$,$rs$$)=>{$e$$=$rs$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$condition$$.ma_bp&&
($e$$=$e$$.filter($r$$=>$r$$.ma_bp.toUpperCase()==$condition$$.ma_bp.toUpperCase()));await $e$$.filter($t$$=>$t$$.ma_bp).asyncJoinModel2($condition$$.id_app,"dmbp",{where:"ma_bp",fields:"ten_bp"});await $e$$.filter($t$$=>$t$$.ma_nv).asyncJoinModel2($condition$$.id_app,"dmnv",{where:"ma_nv",fields:"ten_nv"});$callback$$(null,$e$$)})})})})};