flexbiz-server 12.5.28 → 12.5.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,351 +1,23 @@
1
- const async = require("async");
2
- const utils = require("./utils");
3
- const tontucthoi = global.getModel("tontucthoi");
4
- const Dmvt = global.getModel("dmvt");
5
- const round = 4;
6
- const tinhgiatb = require("../libs/tinhgiatb1vt");
7
- const moment = require("moment");
8
- const dinhmucsx = async (id_app,ma_sp,ma_tt1,sl_xuat,ma_dvt)=>{
9
- let vts=[];
10
- let dm = await global.getModel("dinhmucsx").findOne({id_app,ma_sp,ma_tt1:ma_tt1||undefined},{details:1}).lean();
11
- if(!dm || !dm.details || dm.details.length===0) return vts;
12
- dm.details = dm.details.map(d=>{
13
- if(d.toObject) d = d.toObject();
14
- return d;
15
- })
16
- //tinh so luong san pham quy doi
17
- let he_so_qd=1;
18
- let qd = await global.getModel("dmqddvt").findOne({id_app,ma_vt:ma_sp,ma_dvt}).lean();
19
- if(qd) he_so_qd = (qd.mau?(qd.tu/qd.mau): qd.ty_le_qd);
20
- let sl_xuat_qd = sl_xuat * he_so_qd;
21
- //
22
- await dm.details.asyncJoinModel2(id_app,Dmvt,{where:"ma_vt",setFields:(item,ref)=>{
23
- if(!item.tk_vt) item.tk_vt = ref.tk_vt;
24
- if(!item.tk_gv) item.tk_gv = ref.tk_gv;
25
- item.tg_tk = ref.tg_tk;
26
- item.xk_nvl = ref.xk_nvl;
27
- }});
28
- for(let i=0;i<dm.details.length;i++){
29
- let vt = dm.details[i];
30
- let sl = 0;
31
- if(vt.loai_dinh_muc==1){
32
- sl = vt.sl_dinh_muc * sl_xuat_qd * (1+(vt.ty_le_hao_hut||0)/100);
33
- }else{
34
- sl = vt.sl_dinh_muc * (1+vt.ty_le_hao_hut/100);
35
- }
36
- if(vt.xk_nvl){
37
- let dm_of_vt = await dinhmucsx(id_app,vt.ma_vt,vt.ma_tt1||undefined,sl,vt.ma_dvt);
38
- //console.log("dinh muc cua ban thanh pham",vt,dm_of_vt);
39
- vts = [...vts,...dm_of_vt];
40
- }else{
41
- vt.sl_xuat = sl;
42
- vts.push(vt);
43
- }
44
- }
45
- return vts;
46
-
47
- }
48
- const post = function(master, details, prepare,options={}) {
49
- //
50
- if (!details) {
51
- details =[]
52
- }
53
- //console.log("details",details)
54
- //data
55
- this.master = {...master}
56
- this.details = details.map(detail=>{
57
- return {...detail};
58
- });
59
- //prepare function
60
- this.prepare = prepare;
61
- this.options = options;
62
- };
63
- post.prototype.runPrepare = async (prepareFunction,details)=>{
64
- details = details.map(d=>{
65
- if(d.toObject) d = d.toObject();
66
- return {...d}
67
- })
68
- return (new Promise(resolve=>{
69
- if (prepareFunction) {
70
- async.map(details,(detail,callback)=>{
71
- setImmediate(()=>{
72
- detail.toObject = function(){
73
- return Object.assign({},detail)
74
- }
75
- prepareFunction(detail,(detail)=>{
76
- detail.toObject = function(){
77
- return Object.assign({},detail)
78
- }
79
- callback(null,detail);
80
- })
81
- })
82
-
83
- },(e,details)=>{
84
- resolve(details);
85
- })
86
- }else{
87
- resolve(details);
88
- }
89
- }))
90
- }
91
- post.prototype.remove = function(callback = ()=>{}){
92
- let master = this.master;
93
- if(master && master.toObject) master = master.toObject();
94
- if(!master._id) return callback();
95
- let query_delete = {id_ct: master._id.toString(),id_app:master.id_app};
96
- if(this.options.queryDelete){
97
- query_delete = {...query_delete,...this.options.queryDelete,id_app:master.id_app}
98
- }
99
- async.series({
100
- sks:(callback)=>{
101
- setImmediate(()=>{
102
- global.getModel("sokho").find({id_ct:master._id.toString()}).lean().then(function(sks){
103
- callback(null,sks);
104
- }).catch(e=>{
105
- callback(e);
106
- })
107
- })
108
-
109
- }
110
- },async (e,rs)=>{
111
- if(e) return callback(e);
112
- //delete sokho congty
113
- await global.getModel("sokho").deleteMany(query_delete);
114
- //delete sokhonpp
115
- await global.getModel("sokhonpp").deleteMany(query_delete);
116
- //delete sokhokhongton
117
- await global.getModel("sokhokhongton").deleteMany(query_delete);
118
- //Tính tồn kho tức thời
119
- if(rs.sks.length>0){
120
- //tinh lai ton kho tuc thoi khi xoa sokho
121
- tontucthoi.tinhTonTucThoi(rs.sks,(e)=>{
122
- if(e) console.error("[post-sokho] Tính tồn tức thời sau khi xoá sokho của vật tư",e);
123
- })
124
- }
125
- callback();
126
- })
127
- }
128
- post.prototype.run = async function(callback=()=>{}) {
129
- if (!this.details) {
130
- console.error("details not exists")
131
- return callback(null);
132
- }
133
- if (!this.master || !this.master._id) {
134
- console.error("masters not exists",this.master)
135
- return callback(null);
136
- }
137
-
138
- let master = this.master;
139
- if(master.toObject) master = master.toObject();
140
-
141
- let details = await this.runPrepare(this.prepare,this.details);
142
- await details.asyncJoinModel2(master.id_app,Dmvt,{where:"ma_vt",setFields:(item,ref)=>{
143
- if(!item.tk_vt) item.tk_vt = ref.tk_vt;
144
- if(!item.tk_gv) item.tk_gv = ref.tk_gv;
145
- item.tg_tk = ref.tg_tk;
146
- item.xk_nvl = ref.xk_nvl;
147
- }});
148
- //kiểm tra kho bị khoá. loại trừ phiếu kiểm kê
149
- if((master.ma_ct||"").toUpperCase()!=="PKK"){
150
- let ds_kho = [...new Set(details.map(d=>d.ma_kho||master.ma_kho))]
151
- const kho_locked = await global.getModel('dmkho').findOne({id_app:master.id_app,lock:true,ma_kho:{$in:ds_kho}}).lean();
152
- if(kho_locked) return callback(`Kho ${kho_locked.ten_kho} đã bị khoá`);
153
- }
154
- //dinh muc san pham
155
- let sp_xk_nvl = details.filter(p=>p.xk_nvl && p.nxt==2);
156
- for(let i =0;i<sp_xk_nvl.length;i++){
157
- sp_xk_nvl[i].dinh_muc_nvl = await dinhmucsx(master.id_app,sp_xk_nvl[i].ma_vt,sp_xk_nvl[i].ma_tt1,sp_xk_nvl[i].sl_xuat,sp_xk_nvl[i].ma_dvt);
158
- }
159
- //
160
- details = details.filter(d=>d.tg_tk || (d.dinh_muc_nvl && d.dinh_muc_nvl.length>0));
161
- const sp_co_dm = details.filter(p=>p.xk_nvl && p.dinh_muc_nvl && p.dinh_muc_nvl.length>0);
162
- for(let i =0;i<sp_co_dm.length;i++){
163
- //Xác định nguyên vật liệu cho sản phẩm
164
- const p = sp_co_dm[i];
165
- //Tính số lượng sản phẩm sản xuất (quy đổi sang đơn vị tính chuẩn)
166
- let he_so_qd=1;
167
- let qd = await global.getModel("dmqddvt").findOne({id_app:master.id_app,ma_vt:p.ma_vt,ma_dvt:p.ma_dvt}).lean();
168
- if(qd) he_so_qd = (qd.mau?(qd.tu/qd.mau): qd.ty_le_qd);
169
- let sl_sp = p.sl_xuat * he_so_qd;
170
- //
171
- p.dinh_muc_nvl = p.dinh_muc_nvl.map(d=>{
172
- d.nxt = p.nxt;
173
- d.ma_sp = p.ma_vt;
174
- d.sl_sp = sl_sp;
175
-
176
- d.ma_tt1_sp = p.ma_tt1;
177
- d.ma_tt2_sp = p.ma_tt2;
178
- d.ma_tt3_sp = p.ma_tt3;
179
- d.ma_kho = p.ma_kho;
180
- /*if(d.loai_dinh_muc==1){
181
- d.sl_xuat = d.sl_dinh_muc * p.sl_xuat * (1+(d.ty_le_hao_hut||0)/100);
182
- }else{
183
- d.sl_xuat = d.sl_dinh_muc * (1+p.ty_le_hao_hut/100);
184
- }*/
185
- return d;
186
- })
187
- /*await p.dinh_muc_nvl.asyncJoinModel2(master.id_app,Dmvt,{where:"ma_vt",setFields:(item,ref)=>{
188
- if(!item.tk_vt) item.tk_vt = ref.tk_vt;
189
- if(!item.tk_gv) item.tk_gv = ref.tk_gv;
190
- item.tg_tk = ref.tg_tk;
191
- item.xk_nvl = ref.xk_nvl;
192
- }});*/
193
- p.dinh_muc_nvl = p.dinh_muc_nvl.filter(p=>p.tg_tk);
194
- //dinh muc ban thanh pham
195
- }
196
- //
197
- let ps_kg_dm = details.filter(p=>!p.xk_nvl || !p.dinh_muc_nvl || p.dinh_muc_nvl.length===0);
198
- let ps_dm = details.filter(p=>p.xk_nvl && p.dinh_muc_nvl && p.dinh_muc_nvl.length>0).map(p=>p.dinh_muc_nvl).reduce((a,b)=>a.concat(b),[]);
199
- //
200
- details = [...ps_kg_dm,...ps_dm];
201
- //
202
- await details.asyncJoinModel2(master.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]});
203
- details.forEach((detail)=>{
204
- detail.ma_kho = detail.ma_kho || master.ma_kho;
205
- detail.he_so_qd = detail.he_so_qd || 1;
206
- if(detail.mau && detail.tu){
207
- detail.he_so_qd = detail.tu/detail.mau;
208
- detail.sl_xuat_qd = utils.round((detail.sl_xuat||0) * detail.tu/detail.mau,round);
209
- detail.sl_nhap_qd = utils.round((detail.sl_nhap||0) * detail.tu/detail.mau,round);
210
- }else{
211
- detail.sl_xuat_qd =utils.round( (detail.sl_xuat||0) * detail.he_so_qd,round);
212
- detail.sl_nhap_qd =utils.round( (detail.sl_nhap||0) * detail.he_so_qd,round);
213
- }
214
- })
215
- //kiểm tra các kho bị khoá
216
-
217
- //tu dong xac dinh gia von
218
- let nam = new Date(master.ngay_ct).getFullYear();
219
- let thang = new Date(master.ngay_ct).getMonth() + 1;
220
- await new Promise((rs)=>{
221
- async.map( details.filter(p=>p.tg_tk && ((p.sl_xuat && !p.px_gia_dd) || (p.sl_nhap && p.pn_gia_tb)) && p.sl_xuat),(p,callback)=>{
222
- setImmediate(async ()=>{
223
- //xac dinh he so quy doi
224
- let he_so_qd=1;
225
- let qd = await global.getModel("dmqddvt").findOne({id_app:master.id_app,ma_vt:p.ma_vt,ma_dvt:p.ma_dvt}).lean();
226
- if(qd) he_so_qd = (qd.mau?(qd.tu/qd.mau): qd.ty_le_qd);
227
- //tim gia tb
228
- let query = {ma_vt:p.ma_vt,nam,thang,ma_kho:{$in:[p.ma_kho,"",null]}}
229
- let giatb = await global.getModel("giatb").findOne(query).sort({ma_kho:-1}).lean();
230
- if(giatb){
231
- p.gia_von_nt = p.gia_von = (giatb.gia||0) * he_so_qd;
232
- p.tien_xuat_nt = p.tien_xuat = (p.sl_xuat||0) * p.gia_von_nt;
233
- p.tien_nhap_nt = p.tien_nhap = (p.sl_nhap||0) * p.gia_von_nt;
234
- callback();
235
- }else{
236
- let condition = {id_app:master.id_app,ma_vt:p.ma_vt,ma_kho:p.ma_kho};
237
- condition.tu_ngay = moment(master.ngay_ct).startOf("month").toDate();
238
- condition.den_ngay = moment(master.ngay_ct).endOf("month").toDate();
239
- tinhgiatb(condition,(e,giatb)=>{
240
- if(e) console.error("[postSokho] Không thể tính giá trung bình",e.message||e.error||e,condition);
241
- if(rs){
242
- p.gia_von_nt = p.gia_von = (giatb.gia||0) * he_so_qd;
243
- }else{
244
- p.gia_von_nt = p.gia_von =0;
245
- }
246
- p.tien_xuat_nt = p.tien_xuat = (p.sl_xuat||0) * p.gia_von_nt;
247
- p.tien_nhap_nt = p.tien_nhap = (p.sl_nhap||0) * p.gia_von_nt;
248
- callback();
249
- })
250
- }
251
- })
252
- },()=>{
253
- rs();
254
- })
255
- })
256
- //sync master and detail
257
- details = details.map((detail,line)=>{
258
- detail.id_ct = master._id.toString();
259
- detail.ma_ct = master.ma_ct;
260
- detail.so_ct = master.so_ct;
261
- detail.ngay_ct = master.ngay_ct;
262
- for (let attr in global.getModel("sokho").schema.paths) {
263
- if (attr != 'id_ct' && attr != '_id' && attr != '__v' && attr != 'date_updated' && attr != 'date_created') {
264
- let v = detail[attr];
265
- if((v===undefined || v===null || v==="") && v!==0 && (master[attr]!==undefined)){
266
- detail[attr] = master[attr]
267
- }
268
- }
269
- }
270
- detail.line = line;
271
- delete detail.toObject;
272
- delete detail._id;
273
- delete detail.__v;
274
- return detail;
275
- })
276
- //Xác định loại kho
277
- await details.asyncJoinModel2(master.id_app,"dmkho",{where:"ma_kho",fields:"la_kho_npp"});
278
- //xoá dư liệu cũ
279
- const self = this;
280
- self.remove(async (error)=> {
281
- if (error){
282
- console.error("[postSokho] error delete data post",error.message||error.error||error,master.so_ct,master.ma_ct)
283
- return callback(error)
284
- }
285
- if(details.length==0) return callback(null,[]);
286
- try{
287
- //post sokho
288
- let data_sokho = details.filter(d=>d.tg_tk && !d.la_kho_npp);
289
- let rs_sokho = await global.getModel("sokho").create(data_sokho);
290
- //console.log("post sokho",rs_sokho);
291
- //post sokhonpp
292
- let data_sokhonpp = details.filter(d=>d.tg_tk && d.la_kho_npp);
293
- let rs_sokhnpp = await global.getModel("sokhonpp").create(data_sokhonpp);
294
- //post sokhokhongton
295
- let data_sokhokhongton = details.filter(d=>d.tg_tk==false);
296
- let rs_sokhokhongton = await global.getModel("sokhokhongton").create(data_sokhokhongton);
297
- /*if(master.ma_ct){
298
- let contr = global.controllers[master.ma_ct.toUpperCase()];
299
- if(contr){
300
- let ct = await contr.model.findById(master._id).inTxt();
301
- if(!ct){
302
- console.error("[postSokho] Chứng từ không tồn tại. Xóa sổ sách",master._id,master.so_ct,master.ma_ct);
303
- self.remove(()=> {
304
- callback(`Chứng từ không tồn tại`);
305
- })
306
- }else{
307
- callback(null,{rs_sokho,rs_sokhnpp,rs_sokhokhongton});
308
- }
309
- }else{
310
- console.log("[postSokho] not found controller",master.ma_ct.toUpperCase());
311
- callback(null,{rs_sokho,rs_sokhnpp,rs_sokhokhongton});
312
- }
313
- }else{
314
- callback(null,{rs_sokho,rs_sokhnpp,rs_sokhokhongton});
315
- }*/
316
- callback(null,{rs_sokho,rs_sokhnpp,rs_sokhokhongton});
317
- //tinh ton kho tuc thoi
318
- if(rs_sokho){
319
- setImmediate(()=>{
320
- tontucthoi.tinhTonTucThoi(rs_sokho,(e)=>{
321
- if(e) console.error("Lỗi tính tồn tức thời vật tư",rs_sokho,e.message||e.error||e,master.so_ct,master.ma_ct)
322
- })
323
- })
324
- }
325
- }catch(e){
326
- console.error("[postSokho] Đã có lỗi khi post sokho",e);
327
- callback(e);
328
- /*let msg_error = e.message || e.error || e.toString();
329
- if(msg_error.indexOf("E11000 duplicate")>=0 && msg_error.indexOf("id_ct_1_line_1")>=0){
330
- let rs_sokho = await global.getModel("sokho").find({id_ct: master._id.toString()});
331
- let rs_sokhnpp = await global.getModel("sokhonpp").find({id_ct: master._id.toString()});
332
- let rs_sokhokhongton = await global.getModel("sokhokhongton").find({id_ct: master._id.toString()});
333
- if(rs_sokho.length>0 || rs_sokhnpp.length>0 || rs_sokhokhongton.length>0 ){
334
- callback(null, {rs_sokho,rs_sokhnpp,rs_sokhokhongton});
335
- }else{
336
- console.error("[postSokho] Error save data post",e.message||e.error||e,master.so_ct,master.ma_ct)
337
- self.remove(()=> {
338
- callback(e);
339
- })
340
- }
341
- }else{
342
- console.error("[postSokho] Error save data post",e.message||e.error||e,master.so_ct,master.ma_ct)
343
- self.remove(()=> {
344
- callback(e);
345
- })
346
- }*/
347
-
348
- }
349
- });
350
- };
351
- module.exports = post;
1
+ const async=require("async"),utils=require("./utils"),tontucthoi=global.getModel("tontucthoi"),Dmvt=global.getModel("dmvt"),round=4,tinhgiatb=require("../libs/tinhgiatb1vt"),moment=require("moment"),dinhmucsx=async($id_app$$,$i_ma_sp_qd$$,$dm_ma_tt1$$,$sl_xuat_sl_xuat_qd$$,$dm_of_vt_ma_dvt_vt$$)=>{let $vts$$=[];$dm_ma_tt1$$=await global.getModel("dinhmucsx").findOne({id_app:$id_app$$,ma_sp:$i_ma_sp_qd$$,ma_tt1:$dm_ma_tt1$$||void 0},{details:1}).lean();if(!$dm_ma_tt1$$||!$dm_ma_tt1$$.details||$dm_ma_tt1$$.details.length===
2
+ 0)return $vts$$;$dm_ma_tt1$$.details=$dm_ma_tt1$$.details.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());return $d$$});var $he_so_qd_sl$$=1;($i_ma_sp_qd$$=await global.getModel("dmqddvt").findOne({id_app:$id_app$$,ma_vt:$i_ma_sp_qd$$,ma_dvt:$dm_of_vt_ma_dvt_vt$$}).lean())&&($he_so_qd_sl$$=$i_ma_sp_qd$$.mau?$i_ma_sp_qd$$.tu/$i_ma_sp_qd$$.mau:$i_ma_sp_qd$$.ty_le_qd);$sl_xuat_sl_xuat_qd$$*=$he_so_qd_sl$$;await $dm_ma_tt1$$.details.asyncJoinModel2($id_app$$,Dmvt,{where:"ma_vt",setFields:($item$$,$ref$$)=>
3
+ {$item$$.tk_vt||($item$$.tk_vt=$ref$$.tk_vt);$item$$.tk_gv||($item$$.tk_gv=$ref$$.tk_gv);$item$$.tg_tk=$ref$$.tg_tk;$item$$.xk_nvl=$ref$$.xk_nvl}});for($i_ma_sp_qd$$=0;$i_ma_sp_qd$$<$dm_ma_tt1$$.details.length;$i_ma_sp_qd$$++)$dm_of_vt_ma_dvt_vt$$=$dm_ma_tt1$$.details[$i_ma_sp_qd$$],$he_so_qd_sl$$=0,$he_so_qd_sl$$=$dm_of_vt_ma_dvt_vt$$.loai_dinh_muc==1?$dm_of_vt_ma_dvt_vt$$.sl_dinh_muc*$sl_xuat_sl_xuat_qd$$*(1+($dm_of_vt_ma_dvt_vt$$.ty_le_hao_hut||0)/100):$dm_of_vt_ma_dvt_vt$$.sl_dinh_muc*(1+$dm_of_vt_ma_dvt_vt$$.ty_le_hao_hut/
4
+ 100),$dm_of_vt_ma_dvt_vt$$.xk_nvl?($dm_of_vt_ma_dvt_vt$$=await dinhmucsx($id_app$$,$dm_of_vt_ma_dvt_vt$$.ma_vt,$dm_of_vt_ma_dvt_vt$$.ma_tt1||void 0,$he_so_qd_sl$$,$dm_of_vt_ma_dvt_vt$$.ma_dvt),$vts$$=[...$vts$$,...$dm_of_vt_ma_dvt_vt$$]):($dm_of_vt_ma_dvt_vt$$.sl_xuat=$he_so_qd_sl$$,$vts$$.push($dm_of_vt_ma_dvt_vt$$));return $vts$$},post=function($master$$,$details$$,$prepare$$,$options$$={}){$details$$||=[];this.master={...$master$$};this.details=$details$$.map($detail$$=>({...$detail$$}));this.prepare=
5
+ $prepare$$;this.options=$options$$};
6
+ post.prototype.runPrepare=async($prepareFunction$$,$details$$)=>{$details$$=$details$$.map($d$$=>{$d$$.toObject&&($d$$=$d$$.toObject());return{...$d$$}});return new Promise($resolve$$=>{$prepareFunction$$?async.map($details$$,($detail$$,$callback$$)=>{setImmediate(()=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$prepareFunction$$($detail$$,$detail$$=>{$detail$$.toObject=function(){return Object.assign({},$detail$$)};$callback$$(null,$detail$$)})})},($e$$,$details$$)=>{$resolve$$($details$$)}):
7
+ $resolve$$($details$$)})};
8
+ post.prototype.remove=function($callback$$=()=>{}){let $master$$=this.master;$master$$&&$master$$.toObject&&($master$$=$master$$.toObject());if(!$master$$._id)return $callback$$();let $query_delete$$={id_ct:$master$$._id.toString(),id_app:$master$$.id_app};this.options.queryDelete&&($query_delete$$={...$query_delete$$,...this.options.queryDelete,id_app:$master$$.id_app});async.series({sks:$callback$$=>{setImmediate(()=>{global.getModel("sokho").find({id_ct:$master$$._id.toString()}).lean().then(function($sks$$){$callback$$(null,$sks$$)}).catch($e$$=>
9
+ {$callback$$($e$$)})})}},async($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);await global.getModel("sokho").deleteMany($query_delete$$);await global.getModel("sokhonpp").deleteMany($query_delete$$);await global.getModel("sokhokhongton").deleteMany($query_delete$$);$rs$$.sks.length>0&&tontucthoi.tinhTonTucThoi($rs$$.sks,$e$$=>{$e$$&&console.error("[post-sokho] T\u00ednh t\u1ed3n t\u1ee9c th\u1eddi sau khi xo\u00e1 sokho c\u1ee7a v\u1eadt t\u01b0",$e$$)});$callback$$()})};
10
+ post.prototype.run=async function($callback$$=()=>{}){if(!this.details)return console.error("details not exists"),$callback$$(null);if(!this.master||!this.master._id)return console.error("masters not exists",this.master),$callback$$(null);let $master$$=this.master;$master$$.toObject&&($master$$=$master$$.toObject());let $details$$=await this.runPrepare(this.prepare,this.details);await $details$$.asyncJoinModel2($master$$.id_app,Dmvt,{where:"ma_vt",setFields:($item$$,$ref$$)=>{$item$$.tk_vt||($item$$.tk_vt=
11
+ $ref$$.tk_vt);$item$$.tk_gv||($item$$.tk_gv=$ref$$.tk_gv);$item$$.tg_tk=$ref$$.tg_tk;$item$$.xk_nvl=$ref$$.xk_nvl}});if(($master$$.ma_ct||"").toUpperCase()!=="PKK"){var $ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$=[...(new Set($details$$.map($d$$=>$d$$.ma_kho||$master$$.ma_kho)))];if($ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$=await global.getModel("dmkho").findOne({id_app:$master$$.id_app,lock:!0,ma_kho:{$in:$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$}}).lean())return $callback$$(`Kho ${$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$.ten_kho} \u0111\u00e3 b\u1ecb kho\u00e1`)}$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$=
12
+ $details$$.filter($p$$=>$p$$.xk_nvl&&$p$$.nxt==2);for(var $i$jscomp$1_i$$=0;$i$jscomp$1_i$$<$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$.length;$i$jscomp$1_i$$++)$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].dinh_muc_nvl=await dinhmucsx($master$$.id_app,$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].ma_vt,$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].ma_tt1,$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].sl_xuat,$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$].ma_dvt);
13
+ $details$$=$details$$.filter($d$$=>$d$$.tg_tk||$d$$.dinh_muc_nvl&&$d$$.dinh_muc_nvl.length>0);$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$=$details$$.filter($p$$=>$p$$.xk_nvl&&$p$$.dinh_muc_nvl&&$p$$.dinh_muc_nvl.length>0);for($i$jscomp$1_i$$=0;$i$jscomp$1_i$$<$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$.length;$i$jscomp$1_i$$++){const $p$$=$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$[$i$jscomp$1_i$$];let $he_so_qd$$=1,$qd$$=await global.getModel("dmqddvt").findOne({id_app:$master$$.id_app,
14
+ ma_vt:$p$$.ma_vt,ma_dvt:$p$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);let $sl_sp$$=$p$$.sl_xuat*$he_so_qd$$;$p$$.dinh_muc_nvl=$p$$.dinh_muc_nvl.map($d$$=>{$d$$.nxt=$p$$.nxt;$d$$.ma_sp=$p$$.ma_vt;$d$$.sl_sp=$sl_sp$$;$d$$.ma_tt1_sp=$p$$.ma_tt1;$d$$.ma_tt2_sp=$p$$.ma_tt2;$d$$.ma_tt3_sp=$p$$.ma_tt3;$d$$.ma_kho=$p$$.ma_kho;return $d$$});$p$$.dinh_muc_nvl=$p$$.dinh_muc_nvl.filter($p$$=>$p$$.tg_tk)}$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$=$details$$.filter($p$$=>
15
+ !$p$$.xk_nvl||!$p$$.dinh_muc_nvl||$p$$.dinh_muc_nvl.length===0);$i$jscomp$1_i$$=$details$$.filter($p$$=>$p$$.xk_nvl&&$p$$.dinh_muc_nvl&&$p$$.dinh_muc_nvl.length>0).map($p$$=>$p$$.dinh_muc_nvl).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$details$$=[...$ds_kho_kho_locked_ps_kg_dm_sp_co_dm_sp_xk_nvl$$,...$i$jscomp$1_i$$];await $details$$.asyncJoinModel2($master$$.id_app,global.getModel("dmqddvt"),{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:["tu","mau",{he_so_qd:"ty_le_qd"}]});$details$$.forEach($detail$$=>
16
+ {$detail$$.ma_kho=$detail$$.ma_kho||$master$$.ma_kho;$detail$$.he_so_qd=$detail$$.he_so_qd||1;$detail$$.mau&&$detail$$.tu?($detail$$.he_so_qd=$detail$$.tu/$detail$$.mau,$detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.tu/$detail$$.mau,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.tu/$detail$$.mau,round)):($detail$$.sl_xuat_qd=utils.round(($detail$$.sl_xuat||0)*$detail$$.he_so_qd,round),$detail$$.sl_nhap_qd=utils.round(($detail$$.sl_nhap||0)*$detail$$.he_so_qd,
17
+ round))});let $nam$$=(new Date($master$$.ngay_ct)).getFullYear(),$thang$$=(new Date($master$$.ngay_ct)).getMonth()+1;await new Promise($rs$$=>{async.map($details$$.filter($p$$=>$p$$.tg_tk&&($p$$.sl_xuat&&!$p$$.px_gia_dd||$p$$.sl_nhap&&$p$$.pn_gia_tb)&&$p$$.sl_xuat),($p$$,$callback$$)=>{setImmediate(async()=>{let $he_so_qd$$=1;var $giatb_qd$$=await global.getModel("dmqddvt").findOne({id_app:$master$$.id_app,ma_vt:$p$$.ma_vt,ma_dvt:$p$$.ma_dvt}).lean();$giatb_qd$$&&($he_so_qd$$=$giatb_qd$$.mau?$giatb_qd$$.tu/
18
+ $giatb_qd$$.mau:$giatb_qd$$.ty_le_qd);$giatb_qd$$={ma_vt:$p$$.ma_vt,nam:$nam$$,thang:$thang$$,ma_kho:{$in:[$p$$.ma_kho,"",null]}};if($giatb_qd$$=await global.getModel("giatb").findOne($giatb_qd$$).sort({ma_kho:-1}).lean())$p$$.gia_von_nt=$p$$.gia_von=($giatb_qd$$.gia||0)*$he_so_qd$$,$p$$.tien_xuat_nt=$p$$.tien_xuat=($p$$.sl_xuat||0)*$p$$.gia_von_nt,$p$$.tien_nhap_nt=$p$$.tien_nhap=($p$$.sl_nhap||0)*$p$$.gia_von_nt,$callback$$();else{let $condition$$={id_app:$master$$.id_app,ma_vt:$p$$.ma_vt,ma_kho:$p$$.ma_kho};
19
+ $condition$$.tu_ngay=moment($master$$.ngay_ct).startOf("month").toDate();$condition$$.den_ngay=moment($master$$.ngay_ct).endOf("month").toDate();tinhgiatb($condition$$,($e$$,$giatb$$)=>{$e$$&&console.error("[postSokho] Kh\u00f4ng th\u1ec3 t\u00ednh gi\u00e1 trung b\u00ecnh",$e$$.message||$e$$.error||$e$$,$condition$$);$p$$.gia_von_nt=$rs$$?$p$$.gia_von=($giatb$$.gia||0)*$he_so_qd$$:$p$$.gia_von=0;$p$$.tien_xuat_nt=$p$$.tien_xuat=($p$$.sl_xuat||0)*$p$$.gia_von_nt;$p$$.tien_nhap_nt=$p$$.tien_nhap=($p$$.sl_nhap||
20
+ 0)*$p$$.gia_von_nt;$callback$$()})}})},()=>{$rs$$()})});$details$$=$details$$.map(($detail$$,$line$$)=>{$detail$$.id_ct=$master$$._id.toString();$detail$$.ma_ct=$master$$.ma_ct;$detail$$.so_ct=$master$$.so_ct;$detail$$.ngay_ct=$master$$.ngay_ct;for(let $attr$$ in global.getModel("sokho").schema.paths)if($attr$$!="id_ct"&&$attr$$!="_id"&&$attr$$!="__v"&&$attr$$!="date_updated"&&$attr$$!="date_created"){let $v$$=$detail$$[$attr$$];$v$$!==void 0&&$v$$!==null&&$v$$!==""||$v$$===0||$master$$[$attr$$]===
21
+ void 0||($detail$$[$attr$$]=$master$$[$attr$$])}$detail$$.line=$line$$;delete $detail$$.toObject;delete $detail$$._id;delete $detail$$.__v;return $detail$$});await $details$$.asyncJoinModel2($master$$.id_app,"dmkho",{where:"ma_kho",fields:"la_kho_npp"});this.remove(async $error$$=>{if($error$$)return console.error("[postSokho] error delete data post",$error$$.message||$error$$.error||$error$$,$master$$.so_ct,$master$$.ma_ct),$callback$$($error$$);if($details$$.length==0)return $callback$$(null,[]);
22
+ try{let $data_sokho$$=$details$$.filter($d$$=>$d$$.tg_tk&&!$d$$.la_kho_npp),$rs_sokho$$=await global.getModel("sokho").create($data_sokho$$),$data_sokhonpp$$=$details$$.filter($d$$=>$d$$.tg_tk&&$d$$.la_kho_npp),$rs_sokhnpp$$=await global.getModel("sokhonpp").create($data_sokhonpp$$),$data_sokhokhongton$$=$details$$.filter($d$$=>$d$$.tg_tk==0),$rs_sokhokhongton$$=await global.getModel("sokhokhongton").create($data_sokhokhongton$$);$callback$$(null,{rs_sokho:$rs_sokho$$,rs_sokhnpp:$rs_sokhnpp$$,rs_sokhokhongton:$rs_sokhokhongton$$});
23
+ $rs_sokho$$&&setImmediate(()=>{tontucthoi.tinhTonTucThoi($rs_sokho$$,$e$$=>{$e$$&&console.error("L\u1ed7i t\u00ednh t\u1ed3n t\u1ee9c th\u1eddi v\u1eadt t\u01b0",$rs_sokho$$,$e$$.message||$e$$.error||$e$$,$master$$.so_ct,$master$$.ma_ct)})})}catch($e$$){console.error("[postSokho] \u0110\u00e3 c\u00f3 l\u1ed7i khi post sokho",$e$$),$callback$$($e$$)}})};module.exports=post;
@@ -0,0 +1,2 @@
1
+ const csphucapSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ds_nv:[String],ds_bp:[String],phu_cap:[],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:""}});
2
+ (global.configs||{}).createIndexes&&(csphucapSchema.index({id_app:1,ds_nv:1}),csphucapSchema.index({id_app:1,ds_bp:1}),csphucapSchema.index({id_app:1,status:1}),csphucapSchema.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1}));module.exports=mongoose.models.csphucap||mongoose.model("csphucap",csphucapSchema);
@@ -1,6 +1,6 @@
1
1
  const dmbpSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_bp:{type:String,required:!0,uppercase:!0,maxlength:32},ten_bp:{type:String,required:!0,maxlength:1024},phu_trach:{type:String,uppercase:!0,maxlength:1024},ten_phu_trach:String,phoi_hop:{type:String,uppercase:!0,maxlength:1024},ma_bp_me:{type:String,uppercase:!0,maxlength:32},ma_bp_tuong_tac:[String],nhiem_vu:{type:String},tk_cp_luong:String,tk_pt_nv:String,tk_thue_tncn:String,ma_phi:String,tinh_luong_theo_ngay:Boolean,
2
- ma_loai_cong_mac_dinh:String,sysorder:String,bac:{type:Number},loai_nh:{type:Number,default:1},la_cong_doan_sx:{type:Boolean,default:!1},stt:Number,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],dataview_to:{type:Number,default:0},
3
- dataview_to_users:[String]},{toJSON:{virtuals:!0}});
2
+ ma_loai_cong_mac_dinh:String,sysorder:String,bac:{type:Number},loai_nh:{type:Number,default:1},phu_cap:[],la_cong_doan_sx:{type:Boolean,default:!1},stt:Number,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],dataview_to:{type:Number,
3
+ default:0},dataview_to_users:[String]},{toJSON:{virtuals:!0}});
4
4
  (global.configs||{}).createIndexes&&(dmbpSchema.index({id_app:1,ma_bp:1},{unique:!0}),dmbpSchema.index({id_app:1,ma_bp:1,ten_bp:1}),dmbpSchema.index({id_app:1,ma_bp:1,ten_bp:1,sysorder:1,bac:1,loai_nh:1}),dmbpSchema.index({id_app:1,phu_trach:1,ten_phu_trach:1}),dmbpSchema.index({id_app:1,status:1}),dmbpSchema.index({id_app:1,ma_bp_me:1}),dmbpSchema.index({id_app:1,ma_bp_tuong_tac:1}),dmbpSchema.index({id_app:1,nhiem_vu:1}),dmbpSchema.index({id_app:1,ma_loai_cong_mac_dinh:1}),dmbpSchema.index({id_app:1,
5
5
  user_created:1,visible_to:1,visible_to_users:1,status:1}),dmbpSchema.index({id_app:1,ma_bp:"text",ten_bp:"text",phu_trach:"text",ten_phu_trach:"text"},{name:"dmbp_index_text"}));const model=mongoose.models.dmbp||mongoose.model("dmbp",dmbpSchema);
6
6
  model.referenceKeys={ma_bp:[{model:"socai",key:"ma_bp",error:"B\u1ed9 ph\u1eadn {{VALUE}} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong s\u1ed5 c\u00e1i"},{model:"chamcong",key:"ma_bp",error:"B\u1ed9 ph\u1eadn {{VALUE}} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong b\u1ea3ng ch\u1ea5m c\u00f4ng"},{model:"bangtinhluong",key:"ma_bp",error:"B\u1ed9 ph\u1eadn {{VALUE}} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong b\u1ea3ng t\u00ednh l\u01b0\u01a1ng"},{model:"qts",key:"ma_bp",error:"B\u1ed9 ph\u1eadn {{VALUE}} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u trong qu\u1ea3n l\u00fd t\u00e0i s\u1ea3n"},
@@ -3,4 +3,4 @@ maxlength:32},ma_nv:{type:String,uppercase:!0,default:"",maxlength:32},ma_kho:{t
3
3
  const pclSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_dvcs:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,default:"PCL",required:!0,uppercase:!0,maxlength:32},ma_gd:{type:String,default:"0",maxlength:32},so_ct:{type:String,required:!0,uppercase:!0,trim:!0,maxlength:32},ngay_ct:{type:Date,default:Date.now,required:!0},ky:{type:Number,required:!0},nam:{type:Number,required:!0},dot:{type:Number,required:!0},ty_le:{type:Number,required:!0},tk_co:{type:String,required:!0,
4
4
  uppercase:!0,maxlength:32},ma_nt:{type:String,required:"ma_nt is required",default:"VND",trim:!0,uppercase:!0,maxlength:32},ty_gia:{type:Number,required:!0,min:0,default:1},dien_giai:{type:String,default:"",maxlength:1024},exfields:Schema.Types.Mixed,trang_thai:{type:String,maxlength:32},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,
5
5
  default:0},visible_to_users:[String],update_right:[String],delete_right:[String],details:{type:[detailSchema]},ma_kho:String,ten_kho:String});pclSchema.validate={ma_dvcs:validator.existsDvcs,ma_nt:validator.existsNt,ngay_ct:validator.unlockBook};
6
- (global.configs||{}).createIndexes&&(pclSchema.index({id_app:1,ma_dvcs:1,so_ct:-1,ngay_ct:-1}),pclSchema.index({dien_giai:"text",so_ct:"text"}),pclSchema.index({ma_ct:1}),pclSchema.index({user_created:1,date_created:-1}),pclSchema.index({date_updated:-1}),pclSchema.index({status:1}),pclSchema.index({user_created:1,visible_to:1,visible_to_users:1}),pclSchema.index({trang_thai:1}));module.exports=mongoose.models.pcl||mongoose.model("pcl",pclSchema);
6
+ (global.configs||{}).createIndexes&&(pclSchema.index({id_app:1,ma_ct:1,so_ct:-1,ngay_ct:-1}),pclSchema.index({id_app:1,dien_giai:"text",so_ct:"text"}),pclSchema.index({id_app:1,nam:-1,ky:-1}),pclSchema.index({id_app:1,nam:-1,ky:-1,"details.ma_nv":1}),pclSchema.index({id_app:1,status:1}),pclSchema.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,trang_thai:1}),pclSchema.index({id_app:1,trang_thai:1}));module.exports=mongoose.models.pcl||mongoose.model("pcl",pclSchema);
@@ -2,5 +2,4 @@ const validAccount=require("../libs/validator-account"),validator=require("../li
2
2
  maxlength:32},ma_dt:{type:String,uppercase:!0,default:"",maxlength:32},ma_nv:{type:String,uppercase:!0,default:"",maxlength:32},ma_kho:{type:String,uppercase:!0,default:"",maxlength:32},exfields_detail:Schema.Types.Mixed,line:{type:Number,default:0}});detailSchema.validate={tk_no:validAccount.existsTk,tk_co:validAccount.existsTk};
3
3
  const ptlSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_dvcs:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,default:"PTL",required:!0,uppercase:!0,maxlength:32},ma_gd:{type:String,default:"0",maxlength:32},so_ct:{type:String,required:!0,uppercase:!0,trim:!0,maxlength:32},ngay_ct:{type:Date,default:Date.now,required:!0},ma_nt:{type:String,required:"ma_nt is required",default:"VND",trim:!0,uppercase:!0,maxlength:32},ty_gia:{type:Number,required:!0,min:0,default:1},
4
4
  dien_giai:{type:String,default:"",maxlength:1024},exfields:Schema.Types.Mixed,trang_thai:{type:String,maxlength:32},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],details:{type:[detailSchema]},ma_kho:String,ten_kho:String});
5
- ptlSchema.validate={ma_dvcs:validator.existsDvcs,ma_nt:validator.existsNt,ngay_ct:validator.unlockBook};(global.configs||{}).createIndexes&&(ptlSchema.index({id_app:1,ma_dvcs:1,so_ct:-1,ngay_ct:-1}),ptlSchema.index({dien_giai:"text",so_ct:"text"}),ptlSchema.index({ma_ct:1}),ptlSchema.index({user_created:1,date_created:-1}),ptlSchema.index({date_updated:-1}),ptlSchema.index({status:1}),ptlSchema.index({user_created:1,visible_to:1,visible_to_users:1}),ptlSchema.index({trang_thai:1}));
6
- module.exports=mongoose.models.ptl||mongoose.model("ptl",ptlSchema);
5
+ ptlSchema.validate={ma_dvcs:validator.existsDvcs,ma_nt:validator.existsNt,ngay_ct:validator.unlockBook};(global.configs||{}).createIndexes&&(ptlSchema.index({id_app:1,ma_ct:1,so_ct:-1,ngay_ct:-1}),ptlSchema.index({id_app:1,dien_giai:"text",so_ct:"text"}),ptlSchema.index({id_app:1,ma_ct:1}),ptlSchema.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,trang_thai:1}),ptlSchema.index({id_app:1,trang_thai:1}));module.exports=mongoose.models.ptl||mongoose.model("ptl",ptlSchema);