flexbiz-server 12.5.28 → 12.5.30

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.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "flexbiz-server",
3
3
  "main": "./server/app.js",
4
4
  "description": "Flexible Server",
5
- "version": "12.5.28",
5
+ "version": "12.5.30",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -21,8 +21,8 @@ $condition$$.$where?(console.log("phai loai bo $where trong condition"),$model$$
21
21
  $req$$.result={rows_number:$data$$,groups_number:$groups_number$$};$callback$$("0")})}else{let $field_not_right$$;try{$field_not_right$$=await permission.getFieldNotRight($req$$.user.current_id_app,$req$$.user.email,$ctrl$$.name)}catch($e$$){$field_not_right$$=[]}$data_log_fields_fields$$=$req$$.query.fields;let $gfields$$={};$data_log_fields_fields$$&&(_.isArray($data_log_fields_fields$$)?$data_log_fields_fields$$.forEach($f$$=>{$f$$!=="_id"&&($gfields$$[$f$$]=1)}):_.isObject($data_log_fields_fields$$)?
22
22
  $gfields$$={...$gfields$$,...$data_log_fields_fields$$}:$data_log_fields_fields$$.split(",").filter($f$$=>$f$$&&$field_not_right$$.indexOf($f$$)<0).forEach($f$$=>{$f$$!=="_id"&&($gfields$$[$f$$]=1)}));$field_not_right$$.forEach($f$$=>{Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)?delete $gfields$$[$f$$]:$gfields$$[$f$$]=0});!$data_log_fields_fields$$&&(($data_log_fields_fields$$=$req$$.query.notfields)&&(_.isArray($data_log_fields_fields$$)?$data_log_fields_fields$$.forEach($f$$=>{$f$$&&
23
23
  $f$$!=="_id"&&(Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)?delete $gfields$$[$f$$]:$gfields$$[$f$$]=0)}):_.isObject($data_log_fields_fields$$)?$gfields$$={...$gfields$$,...$data_log_fields_fields$$}:$data_log_fields_fields$$.split(",").forEach($f$$=>{$f$$&&$f$$!=="_id"&&(Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)?delete $gfields$$[$f$$]:$gfields$$[$f$$]=0)})),$shareRoute$$||$req$$.user.email==="public")&&(Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)?(delete $gfields$$.dataview_to,
24
- delete $gfields$$.dataview_to_users):($gfields$$.dataview_to=0,$gfields$$.dataview_to_users=0));$condition$$.$text&&($gfields$$||={},$gfields$$.textScore={$meta:"textScore"});delete $req$$.query_cache;$ctrl$$.cache&&($req$$.query_cache={..._.cloneDeep($req$$.query),..._.cloneDeep($condition$$)},delete $req$$.query_cache.q,delete $req$$.query_cache.refresh_required,$req$$.query_cache.gfields=_.cloneDeep($gfields$$));const $fetchData$$=($condition$$,$limit$$,$page$$,$callback$$)=>{$ctrl$$.name=="dmchietkhau"&&
25
- console.log("[findHandler] [fetchData]",$ctrl$$.name,$condition$$);setImmediate(async()=>{let $query$$;if($req$$.query.group||$req$$.query.project||$req$$.query.match||$req$$.query.aggregate||$req$$.query.$aggregate)try{if($req$$.query.aggregate){var $aggregate_piples_sort$$=JSONParser($req$$.query.$aggregate||$req$$.query.aggregate);if(!Array.isArray($aggregate_piples_sort$$))return $callback$$({error:"Aggregate ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng"});if($aggregate_piples_sort$$.find($f$$=>$f$$.$lookup))return $callback$$({error:"Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p s\u1eed d\u1ee5ng $lookup trong aggregate"});
24
+ delete $gfields$$.dataview_to_users):($gfields$$.dataview_to=0,$gfields$$.dataview_to_users=0));$condition$$.$text&&($gfields$$||={},$gfields$$.textScore={$meta:"textScore"});delete $req$$.query_cache;$ctrl$$.cache&&($req$$.query_cache={..._.cloneDeep($req$$.query),..._.cloneDeep($condition$$)},delete $req$$.query_cache.q,delete $req$$.query_cache.refresh_required,$req$$.query_cache.gfields=_.cloneDeep($gfields$$));const $fetchData$$=($condition$$,$limit$$,$page$$,$callback$$)=>{setImmediate(async()=>
25
+ {let $query$$;if($req$$.query.group||$req$$.query.project||$req$$.query.match||$req$$.query.aggregate||$req$$.query.$aggregate)try{if($req$$.query.aggregate){var $aggregate_piples_sort$$=JSONParser($req$$.query.$aggregate||$req$$.query.aggregate);if(!Array.isArray($aggregate_piples_sort$$))return $callback$$({error:"Aggregate ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng"});if($aggregate_piples_sort$$.find($f$$=>$f$$.$lookup))return $callback$$({error:"Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p s\u1eed d\u1ee5ng $lookup trong aggregate"});
26
26
  $aggregate_piples_sort$$=[{$match:$condition$$},...$aggregate_piples_sort$$];$query$$=$model$$.aggregate($aggregate_piples_sort$$)}else{$query$$=$model$$.aggregate([{$match:$condition$$}]);let $group$$;$req$$.query.group&&($group$$=JSONParser($req$$.query.group),$query$$.group($group$$));if($req$$.query.match){let $match$$=JSONParser($req$$.query.match);$query$$.match($match$$)}let $project$$;if($req$$.query.project)$project$$=JSONParser($req$$.query.project),$query$$.project($project$$);else if($gfields$$&&
27
27
  Object.keys($gfields$$).length>0)$project$$=$gfields$$;else if($project$$={_id:1},$group$$)for(let $key$$ in $group$$)$project$$[$key$$]=1;$query$$.project($project$$)}}catch($e$$){return console.error("[findHanlder]",$e$$,$req$$.query),$callback$$({error:$e$$.message||$e$$.error||$e$$})}else _.has($model$$.schema.paths,"id_app")&&Object.keys($gfields$$).length>0&&Object.keys($gfields$$).find($k$$=>$gfields$$[$k$$]==1)&&($gfields$$.id_app=1),$query$$=$model$$.find($condition$$,$gfields$$);$aggregate_piples_sort$$=
28
28
  $req$$.sort;if(!$aggregate_piples_sort$$)$gfields$$.textScore&&($aggregate_piples_sort$$={textScore:{$meta:"textScore"}});else for(var $key$$ in $aggregate_piples_sort$$)if($key$$!=="textScore"&&$aggregate_piples_sort$$[$key$$]!=1&&$aggregate_piples_sort$$[$key$$]!=-1)return console.error("sort is valid",$aggregate_piples_sort$$,$key$$,$aggregate_piples_sort$$[$key$$]),$callback$$({error:`Sort ${JSON.stringify($aggregate_piples_sort$$)} is not valid`});$aggregate_piples_sort$$&&Object.keys($aggregate_piples_sort$$).length>
@@ -1,7 +1,7 @@
1
1
  const lodash=require("lodash"),{runWithoutSession}=require("./sessionContext");let cachedKeys={};try{cachedKeys=require("./redis-cache").cachedKeys()}catch($e$$){console.warn("Redis cache config not found, caching disabled.")}
2
2
  const {generateRedisKey,sortObjectKeys}=require("./redis-cache"),redisGet=$key$$=>new Promise($resolve$$=>global.clientRedis.get($key$$,($err$$,$reply$$)=>$resolve$$($reply$$||null))),redisMGet=$keys$$=>new Promise($resolve$$=>global.clientRedis.mget($keys$$,($err$$,$reply$$)=>$resolve$$($reply$$||[])));function isValidObjectId($id$$){return $id$$?lodash.isObject($id$$)&&!$id$$._bsontype?!0:global.mongoose.Types.ObjectId.isValid($id$$.toString()):!1}
3
- function findDynamicFields($dataArray$$){if(!$dataArray$$||$dataArray$$.length<2)return[];const $baseline$$=$dataArray$$[0],$dynamicFields$$=new Set;for(let $i$$=1;$i$$<$dataArray$$.length;$i$$++){const $currentObject$$=$dataArray$$[$i$$];var $currentValue_keys$$=Object.keys($currentObject$$);for(const $key$$ of $currentValue_keys$$)$dynamicFields$$.has($key$$)||($currentValue_keys$$=$currentObject$$[$key$$],JSON.stringify($baseline$$[$key$$])!==JSON.stringify($currentValue_keys$$)&&$dynamicFields$$.add($key$$))}return Array.from($dynamicFields$$)}
4
- function getFields($fields$$){if($fields$$&&!lodash.isFunction($fields$$)){var $select$$={};(Array.isArray($fields$$)?$fields$$:[$fields$$]).forEach($map$$=>{lodash.isString($map$$)?$select$$[$map$$]=1:lodash.isObject($map$$)&&($map$$.value?$select$$[$map$$.value]=1:Object.keys($map$$).forEach($key$$=>$select$$[$map$$[$key$$]]=1))});return Object.keys($select$$).length>0?$select$$:void 0}}
3
+ function findDynamicFields($dataArray$$){if(!$dataArray$$||$dataArray$$.length<2)return[];const $baseline$$=$dataArray$$[0],$dynamicFields$$=new Set;for(let $i$$=1;$i$$<$dataArray$$.length;$i$$++){const $currentObject$$=$dataArray$$[$i$$];var $currentValue_keys$$=Object.keys($currentObject$$);for(const $key$$ of $currentValue_keys$$)$dynamicFields$$.has($key$$)||($currentValue_keys$$=$currentObject$$[$key$$],$currentValue_keys$$!==null&&typeof $currentValue_keys$$==="object"||$baseline$$[$key$$]===
4
+ $currentValue_keys$$||$dynamicFields$$.add($key$$))}return Array.from($dynamicFields$$)}function getFields($fields$$){if($fields$$&&!lodash.isFunction($fields$$)){var $select$$={};(Array.isArray($fields$$)?$fields$$:[$fields$$]).forEach($map$$=>{lodash.isString($map$$)?$select$$[$map$$]=1:lodash.isObject($map$$)&&($map$$.value?$select$$[$map$$.value]=1:Object.keys($map$$).forEach($key$$=>$select$$[$map$$[$key$$]]=1))});return Object.keys($select$$).length>0?$select$$:void 0}}
5
5
  function normalizeArgs($items$$,$id_app$$,$model$$,$joinFields$$,$_fn_fn$$,$options$$){let $_id_app$$=$id_app$$,$_model$$=$model$$,$_joinFields$$=$joinFields$$;Array.isArray($id_app$$)&&([$_id_app$$,$_model$$,$_joinFields$$,$_fn_fn$$]=[void 0,$id_app$$,$model$$,$joinFields$$]);$_joinFields$$=$_joinFields$$?Array.isArray($_joinFields$$)?$_joinFields$$:[$_joinFields$$]:[];$_joinFields$$.forEach($join$$=>{$join$$.fields_need_get_data||$join$$.setFields||$join$$.asyncSetFields||($join$$.fields_need_get_data=
6
6
  getFields($join$$.fields))});return{items:$items$$||[],id_app:$_id_app$$,modelOrigin:Array.isArray($_model$$)?null:$_model$$,joinFields:$_joinFields$$,fn:$_fn_fn$$||(()=>{}),options:$options$$||{cache:!0}}}function safeCallback($fn$$,$result$$){try{typeof $fn$$==="function"&&$fn$$($result$$)}catch($e$$){console.error("Callback Error:",$e$$)}}
7
7
  function analyzeJoinStrategy($dynamicKey$jscomp$1_finalIdApp_join$$,$item$$,$model$$,$globalIdApp$$){$dynamicKey$jscomp$1_finalIdApp_join$$.modelName=$model$$?.modelName;var $cacheKey_cacheKey$jscomp$1_finalIdApp$jscomp$1_resolveIdApp_sortedStatic$jscomp$1_value$$=$currentQueryIdApp$$=>{if($model$$.schema?.paths?.id_app)return $item$$.id_app||$globalIdApp$$||$currentQueryIdApp$$},$dynamicKey_queryForKey_v$$={},$finalIdAppForKey_queryForKey$$=$globalIdApp$$;if($dynamicKey$jscomp$1_finalIdApp_join$$.where&&
@@ -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);