UNPKG

flexbiz-server

Version:

Flexible Server

8 lines (7 loc) 2.71 kB
const dkvt=require("./dkvt"),sokho=global.getModel("sokho"); module.exports=async function($condition$$,$fn$$){if(!($condition$$&&$condition$$.ma_vt&&$condition$$.tu_ngay&&$condition$$.den_ngay&&$condition$$.id_app))return $fn$$("L\u1ed7i: B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_ngay, den_ngay, id_app, ma_vt");try{const {id_app:$id_app$$,tu_ngay:$tu_ngay$$,den_ngay:$den_ngay$$,ma_kho:$ma_kho$$}=$condition$$,$isSingle$$=!Array.isArray($condition$$.ma_vt),$validListMaVt$$=($isSingle$$?[$condition$$.ma_vt]:$condition$$.ma_vt).filter($vt$$=> $vt$$);if($validListMaVt$$.length===0)return $fn$$(null,$isSingle$$?{}:[]);const $pDauKy$$=new Promise(($resolve$$,$reject$$)=>{const $result$$=dkvt({...$condition$$,ngay:$tu_ngay$$,ma_vt:$validListMaVt$$},($err$$,$res$$)=>$err$$?$reject$$($err$$):$resolve$$($res$$));$result$$&&$result$$.then&&$result$$.then($resolve$$).catch($reject$$)}),$pPhatSinh$$=(async()=>{var $matchQuery_orConditions$$=[{nxt:1,pn_gia_tb:{$ne:!0}},{nxt:2,px_gia_dd:!0}];$ma_kho$$&&$matchQuery_orConditions$$.push({nxt:1,ma_ct:"PNC"}); $matchQuery_orConditions$$={id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lt:$den_ngay$$},ma_vt:{$in:$validListMaVt$$},$or:$matchQuery_orConditions$$};$ma_kho$$&&($matchQuery_orConditions$$.ma_kho=$ma_kho$$);return sokho.aggregate([{$match:$matchQuery_orConditions$$},{$group:{_id:"$ma_vt",sl_nhap:{$sum:{$cond:{if:{$eq:["$nxt",2]},then:{$multiply:[{$ifNull:["$sl_xuat_qd",0]},-1]},else:{$ifNull:["$sl_nhap_qd",0]}}}},tien_nhap:{$sum:{$cond:{if:{$eq:["$nxt",2]},then:{$multiply:[{$ifNull:["$tien_xuat",0]}, -1]},else:{$ifNull:["$tien_nhap",0]}}}}}}])})(),[$dnData$$,$psData$$]=await Promise.all([$pDauKy$$,$pPhatSinh$$]),$dataMap$$=new Map;$validListMaVt$$.forEach($vt$$=>{$dataMap$$.set($vt$$,{ma_vt:$vt$$,ton_dau:0,du_dau:0,sl_nhap:0,tien_nhap:0,tong_sl:0,tong_tien:0,gia:0})});(Array.isArray($dnData$$)?$dnData$$:[$dnData$$]).forEach($item$$=>{if($item$$&&$item$$.ma_vt&&$dataMap$$.has($item$$.ma_vt)){const $cur$$=$dataMap$$.get($item$$.ma_vt);$cur$$.ton_dau=$item$$.ton00||0;$cur$$.du_dau=$item$$.du00|| 0}});$psData$$.forEach($item$$=>{if($item$$&&$item$$._id&&$dataMap$$.has($item$$._id)){const $cur$$=$dataMap$$.get($item$$._id);$cur$$.sl_nhap=$item$$.sl_nhap||0;$cur$$.tien_nhap=$item$$.tien_nhap||0}});const $finalResult$$=Array.from($dataMap$$.values()).map($r$$=>{$r$$.tong_sl=$r$$.ton_dau+$r$$.sl_nhap;$r$$.tong_tien=$r$$.du_dau+$r$$.tien_nhap;$r$$.tong_sl!==0?($r$$.gia=Math.roundBy($r$$.tong_tien/$r$$.tong_sl,$condition$$.round||0),$r$$.tong_sl>0&&$r$$.tong_tien<0&&($r$$.gia=0)):$r$$.gia=0;return $r$$}); return $fn$$(null,$isSingle$$?$finalResult$$[0]||{}:$finalResult$$)}catch($error$$){return $fn$$($error$$)}};