flexbiz-server 12.3.26 → 12.3.27

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.
Files changed (381) hide show
  1. package/package.json +1 -1
  2. package/server/app.js +7 -7
  3. package/server/cluster.js +5 -5
  4. package/server/controllers/importFromExcelHandler.js +3 -3
  5. package/server/controllers/importFromGsHandler.js +3 -3
  6. package/server/controllers/importFromJsonHandler.js +2 -2
  7. package/server/controllers/importHandler.js +18 -17
  8. package/server/global.js +8 -7
  9. package/server/libs/WorkerStaticPool.js +14 -12
  10. package/server/libs/tinhgiatb.js +35 -35
  11. package/server/models/account.js +4 -4
  12. package/server/models/afflink.js +2 -2
  13. package/server/models/app.js +1 -1
  14. package/server/models/approve.js +3 -2
  15. package/server/models/assabcihandler.js +1 -1
  16. package/server/models/assbank.js +1 -1
  17. package/server/models/assbooking.js +4 -3
  18. package/server/models/assbuy.js +3 -2
  19. package/server/models/asscashwithdraw.js +3 -2
  20. package/server/models/assfindhash.js +2 -2
  21. package/server/models/assinvestment.js +5 -4
  22. package/server/models/assissue.js +1 -1
  23. package/server/models/asskey.js +2 -2
  24. package/server/models/assneedtobuy.js +3 -3
  25. package/server/models/assperiod.js +4 -5
  26. package/server/models/assproduct.js +9 -8
  27. package/server/models/assprofitsharing.js +3 -2
  28. package/server/models/assreceiver.js +3 -2
  29. package/server/models/assrequest.js +3 -3
  30. package/server/models/asssell.js +4 -3
  31. package/server/models/asstransaction.js +3 -2
  32. package/server/models/asstransfer.js +3 -3
  33. package/server/models/assuser_identity.js +2 -2
  34. package/server/models/asswithdraw.js +3 -3
  35. package/server/models/attend.js +2 -2
  36. package/server/models/banggiaban.js +4 -4
  37. package/server/models/bangtinhluong.js +3 -2
  38. package/server/models/base.js +2 -1
  39. package/server/models/bds_area.js +2 -2
  40. package/server/models/bds_block.js +2 -2
  41. package/server/models/bds_building.js +1 -1
  42. package/server/models/bds_floor.js +2 -2
  43. package/server/models/bds_floordetail.js +4 -3
  44. package/server/models/bds_nhadat.js +5 -4
  45. package/server/models/bds_nhomnhadat.js +2 -1
  46. package/server/models/bds_phanloainhadat.js +2 -1
  47. package/server/models/bg1.js +3 -2
  48. package/server/models/bg2.js +3 -2
  49. package/server/models/cache.js +1 -1
  50. package/server/models/calllog.js +2 -2
  51. package/server/models/campaign.js +1 -1
  52. package/server/models/cart.js +3 -3
  53. package/server/models/cddiem.js +1 -1
  54. package/server/models/cddt.js +2 -2
  55. package/server/models/cdkh.js +2 -2
  56. package/server/models/cdkhtheongay.js +2 -2
  57. package/server/models/cdnphep.js +2 -2
  58. package/server/models/cdtk.js +2 -2
  59. package/server/models/cdtktheongay.js +2 -2
  60. package/server/models/cdvt.js +3 -2
  61. package/server/models/cdvtnpp.js +2 -2
  62. package/server/models/cdvttheongay.js +3 -2
  63. package/server/models/chamcong.js +3 -2
  64. package/server/models/checkin.js +1 -1
  65. package/server/models/checkinactivity.js +2 -1
  66. package/server/models/checkinkpi.js +3 -2
  67. package/server/models/checkinlocation.js +2 -2
  68. package/server/models/chitieukpi.js +2 -2
  69. package/server/models/chudethaoluan.js +3 -2
  70. package/server/models/ckgtluong.js +1 -1
  71. package/server/models/colleague.js +1 -1
  72. package/server/models/comment.js +1 -1
  73. package/server/models/congdoansx.js +3 -3
  74. package/server/models/congtacvien.js +1 -1
  75. package/server/models/congthuctinhgiaban.js +4 -4
  76. package/server/models/consultant.js +2 -2
  77. package/server/models/contract.js +4 -3
  78. package/server/models/counter.js +1 -1
  79. package/server/models/ctds.js +3 -2
  80. package/server/models/ctds2.js +4 -4
  81. package/server/models/currency.js +1 -1
  82. package/server/models/customer.js +5 -5
  83. package/server/models/databanle.js +5 -4
  84. package/server/models/datlich.js +3 -3
  85. package/server/models/department.js +2 -2
  86. package/server/models/dh2.js +4 -3
  87. package/server/models/diagram.js +2 -1
  88. package/server/models/dinhmucsx.js +3 -2
  89. package/server/models/dkhoc.js +3 -2
  90. package/server/models/dknphep.js +2 -2
  91. package/server/models/dmban.js +3 -2
  92. package/server/models/dmbp.js +3 -2
  93. package/server/models/dmca.js +1 -1
  94. package/server/models/dmchietkhau.js +6 -5
  95. package/server/models/dmchietkhauhd.js +4 -4
  96. package/server/models/dmcpmh.js +2 -2
  97. package/server/models/dmdiemthuong.js +3 -2
  98. package/server/models/dmdoi.js +3 -3
  99. package/server/models/dmdoituongdanhgia.js +1 -1
  100. package/server/models/dmdt.js +3 -3
  101. package/server/models/dmdvt.js +1 -1
  102. package/server/models/dmgiaban.js +4 -3
  103. package/server/models/dmgiamua.js +3 -2
  104. package/server/models/dmgiathitruong.js +3 -2
  105. package/server/models/dmgiathitruong_ngay.js +1 -1
  106. package/server/models/dmgiathitruong_theodoi.js +2 -2
  107. package/server/models/dmhoahonghd.js +5 -4
  108. package/server/models/dmhoahongnpp.js +5 -4
  109. package/server/models/dmkc.js +2 -2
  110. package/server/models/dmkho.js +2 -2
  111. package/server/models/dmkhuyenmai.js +4 -3
  112. package/server/models/dmkhuyenmaihd.js +3 -2
  113. package/server/models/dmletet.js +1 -1
  114. package/server/models/dmlo.js +2 -2
  115. package/server/models/dmloaicong.js +3 -2
  116. package/server/models/dmloaitask.js +2 -2
  117. package/server/models/dmloaits.js +2 -2
  118. package/server/models/dmnckkm.js +3 -2
  119. package/server/models/dmnghiepvu.js +2 -1
  120. package/server/models/dmnguonvon.js +2 -2
  121. package/server/models/dmnhnv.js +3 -3
  122. package/server/models/dmnv.js +3 -3
  123. package/server/models/dmnvt.js +4 -3
  124. package/server/models/dmphatdichvu.js +3 -2
  125. package/server/models/dmphi.js +2 -2
  126. package/server/models/dmqct.js +2 -2
  127. package/server/models/dmqddvt.js +1 -1
  128. package/server/models/dmtanggiamts.js +2 -2
  129. package/server/models/dmto.js +3 -3
  130. package/server/models/dmtt.js +3 -2
  131. package/server/models/dmvt.js +6 -6
  132. package/server/models/dmyt.js +2 -1
  133. package/server/models/dn0.js +3 -2
  134. package/server/models/dnm.js +3 -3
  135. package/server/models/dokho.js +2 -2
  136. package/server/models/domain.js +2 -2
  137. package/server/models/dvcs.js +1 -1
  138. package/server/models/ecomcategories.js +3 -2
  139. package/server/models/ecomcategories_cty.js +3 -3
  140. package/server/models/ecomproductlines.js +2 -2
  141. package/server/models/ecompromotion_flashsales.js +2 -2
  142. package/server/models/ecompromotion_freeships.js +2 -2
  143. package/server/models/endpoint.js +2 -1
  144. package/server/models/events.js +1 -1
  145. package/server/models/evoucher.js +3 -2
  146. package/server/models/experiencejourney.js +2 -2
  147. package/server/models/experiencejourneydata.js +4 -4
  148. package/server/models/experiencejourneypersona.js +1 -1
  149. package/server/models/experiencejourneystage.js +1 -1
  150. package/server/models/exportexceltemplate.js +2 -2
  151. package/server/models/fbconversation.js +1 -1
  152. package/server/models/fbmessage.js +1 -1
  153. package/server/models/fbpage.js +2 -2
  154. package/server/models/fieldright.js +2 -2
  155. package/server/models/file.js +3 -2
  156. package/server/models/financialroadmap.js +1 -1
  157. package/server/models/folder.js +3 -2
  158. package/server/models/follow.js +1 -1
  159. package/server/models/form.js +2 -2
  160. package/server/models/forminfo.js +2 -2
  161. package/server/models/formvalue.js +2 -2
  162. package/server/models/giaoca.js +1 -1
  163. package/server/models/giatb.js +2 -2
  164. package/server/models/group.js +3 -2
  165. package/server/models/gt_ctgt.js +2 -2
  166. package/server/models/gt_hspb.js +2 -1
  167. package/server/models/gt_sltk.js +2 -2
  168. package/server/models/gt_thcppstk.js +2 -2
  169. package/server/models/hanmucton.js +2 -2
  170. package/server/models/hd1.js +3 -2
  171. package/server/models/hd2.js +4 -4
  172. package/server/models/hd3.js +3 -3
  173. package/server/models/hd4.js +3 -2
  174. package/server/models/hd7.js +3 -2
  175. package/server/models/hd8.js +3 -2
  176. package/server/models/hde.js +3 -2
  177. package/server/models/hlink.js +1 -1
  178. package/server/models/hlinkvalue.js +1 -1
  179. package/server/models/hmcn.js +2 -1
  180. package/server/models/hmcnct.js +2 -2
  181. package/server/models/hspbts.js +1 -1
  182. package/server/models/htl.js +1 -1
  183. package/server/models/importexceltemplate.js +2 -2
  184. package/server/models/introducebonus.js +3 -2
  185. package/server/models/introducecode.js +2 -2
  186. package/server/models/introducer.js +3 -2
  187. package/server/models/kbbtpb.js +2 -1
  188. package/server/models/kbmPttct.js +1 -1
  189. package/server/models/kbmTkgtgt.js +2 -2
  190. package/server/models/kbm_bcdkt.js +1 -1
  191. package/server/models/kbm_kqhdkd.js +1 -1
  192. package/server/models/kbm_lcttgt.js +1 -1
  193. package/server/models/kbm_lctttt.js +1 -1
  194. package/server/models/kbm_pttct.js +2 -2
  195. package/server/models/kbm_tkgtgt.js +2 -1
  196. package/server/models/kbmbcdkt.js +1 -1
  197. package/server/models/kbmbcqt.js +2 -1
  198. package/server/models/kbmkqhdkd.js +1 -1
  199. package/server/models/kbmlcttgt.js +1 -1
  200. package/server/models/kbmlctttt.js +1 -1
  201. package/server/models/kbmtmbctc.js +1 -1
  202. package/server/models/kehoachdtcp.js +2 -2
  203. package/server/models/kehoachmh.js +3 -2
  204. package/server/models/keyresult.js +1 -1
  205. package/server/models/khunghangthanhvien.js +2 -2
  206. package/server/models/label.js +2 -2
  207. package/server/models/labelinfo.js +1 -1
  208. package/server/models/lenhcapphat.js +3 -2
  209. package/server/models/lenhsx.js +3 -2
  210. package/server/models/lienhe.js +3 -3
  211. package/server/models/like_module.js +2 -2
  212. package/server/models/link.js +2 -2
  213. package/server/models/listinfo.js +71 -66
  214. package/server/models/loaidiem.js +2 -2
  215. package/server/models/lock.js +1 -1
  216. package/server/models/log.js +2 -2
  217. package/server/models/mailaccount.js +1 -1
  218. package/server/models/mailgroup.js +2 -1
  219. package/server/models/mailreceived.js +2 -2
  220. package/server/models/mailschedule.js +1 -1
  221. package/server/models/mailsent.js +1 -1
  222. package/server/models/mailtemplate.js +1 -1
  223. package/server/models/maudanhgia.js +1 -1
  224. package/server/models/menuinfo.js +2 -2
  225. package/server/models/message.js +2 -1
  226. package/server/models/message2.js +3 -2
  227. package/server/models/message2setting.js +1 -1
  228. package/server/models/moduleinfo.js +2 -2
  229. package/server/models/momo.js +2 -2
  230. package/server/models/news.js +3 -2
  231. package/server/models/newsfeed.js +2 -2
  232. package/server/models/note.js +1 -1
  233. package/server/models/notification.js +3 -3
  234. package/server/models/okr.js +3 -3
  235. package/server/models/okrdiagram.js +2 -2
  236. package/server/models/onepay.js +2 -2
  237. package/server/models/opportunity.js +3 -3
  238. package/server/models/options.js +1 -1
  239. package/server/models/originimportid.js +1 -1
  240. package/server/models/otp.js +1 -1
  241. package/server/models/parameter.js +1 -1
  242. package/server/models/participant.js +3 -3
  243. package/server/models/partner.js +1 -1
  244. package/server/models/payload.js +1 -1
  245. package/server/models/pbl.js +3 -2
  246. package/server/models/pc0.js +3 -3
  247. package/server/models/pc1.js +3 -3
  248. package/server/models/pc2.js +4 -3
  249. package/server/models/pc3.js +3 -2
  250. package/server/models/pc5.js +3 -2
  251. package/server/models/pc6.js +3 -3
  252. package/server/models/pdn.js +2 -2
  253. package/server/models/pdx.js +3 -3
  254. package/server/models/phieudanhgia.js +2 -2
  255. package/server/models/pht.js +3 -2
  256. package/server/models/phucap.js +2 -2
  257. package/server/models/pkc.js +2 -2
  258. package/server/models/pkh.js +1 -1
  259. package/server/models/pkk.js +3 -2
  260. package/server/models/pkt.js +2 -2
  261. package/server/models/pn1.js +3 -2
  262. package/server/models/pn2.js +3 -2
  263. package/server/models/pn3.js +3 -2
  264. package/server/models/pn5.js +3 -2
  265. package/server/models/pn6.js +3 -2
  266. package/server/models/pn9.js +3 -2
  267. package/server/models/pnc.js +3 -3
  268. package/server/models/pnh.js +3 -2
  269. package/server/models/pnk.js +3 -2
  270. package/server/models/po1.js +3 -2
  271. package/server/models/ppb.js +1 -1
  272. package/server/models/profile.js +2 -1
  273. package/server/models/pt1.js +3 -2
  274. package/server/models/pt5.js +3 -2
  275. package/server/models/ptl.js +1 -1
  276. package/server/models/ptthanhtoan.js +2 -2
  277. package/server/models/purchase_contract.js +4 -3
  278. package/server/models/pxc.js +1 -1
  279. package/server/models/pxh.js +3 -2
  280. package/server/models/pxk.js +2 -1
  281. package/server/models/qts.js +3 -2
  282. package/server/models/qts_dieuchinh.js +1 -1
  283. package/server/models/qts_dieuchuyen.js +3 -2
  284. package/server/models/quanhuyen.js +2 -2
  285. package/server/models/reason.js +2 -2
  286. package/server/models/reportinfo.js +3 -2
  287. package/server/models/right.js +3 -3
  288. package/server/models/rpt.js +1 -1
  289. package/server/models/rptform.js +2 -2
  290. package/server/models/rptobject.js +1 -1
  291. package/server/models/sale_contract.js +3 -3
  292. package/server/models/schedule.js +1 -1
  293. package/server/models/schedule_log.js +1 -1
  294. package/server/models/service.js +1 -1
  295. package/server/models/shipbook.js +3 -2
  296. package/server/models/shortcut.js +2 -2
  297. package/server/models/smsaccount.js +1 -1
  298. package/server/models/smssend.js +2 -2
  299. package/server/models/so1.js +5 -5
  300. package/server/models/so2.js +3 -2
  301. package/server/models/so3.js +3 -3
  302. package/server/models/so5.js +4 -3
  303. package/server/models/so9.js +5 -4
  304. package/server/models/socai.js +6 -6
  305. package/server/models/socainpp.js +6 -6
  306. package/server/models/socaitmp.js +5 -5
  307. package/server/models/sodiemthuong.js +3 -3
  308. package/server/models/sokho.js +5 -4
  309. package/server/models/sokhocapphat.js +5 -4
  310. package/server/models/sokhokhongton.js +6 -5
  311. package/server/models/sokhonpp.js +5 -4
  312. package/server/models/sokhott.js +5 -4
  313. package/server/models/sophanbokh.js +1 -1
  314. package/server/models/sosanxuat.js +3 -2
  315. package/server/models/sotinhkh.js +2 -1
  316. package/server/models/spdd_ck.js +2 -2
  317. package/server/models/spdd_dk.js +2 -2
  318. package/server/models/step.js +1 -1
  319. package/server/models/strategicdiagram.js +1 -1
  320. package/server/models/strategicgoal.js +3 -3
  321. package/server/models/strategickpi.js +3 -2
  322. package/server/models/strategicobjective.js +4 -3
  323. package/server/models/strategicplan.js +4 -3
  324. package/server/models/subscribe.js +2 -2
  325. package/server/models/support.js +1 -1
  326. package/server/models/synctime.js +2 -2
  327. package/server/models/sysconfig.js +2 -2
  328. package/server/models/sysgroup.js +1 -1
  329. package/server/models/tableinfo.js +1 -1
  330. package/server/models/task.js +4 -4
  331. package/server/models/taskreg.js +3 -2
  332. package/server/models/tc.js +2 -2
  333. package/server/models/tdttco.js +3 -3
  334. package/server/models/tdttco_tt.js +1 -1
  335. package/server/models/tdttno.js +3 -3
  336. package/server/models/tdttno_tt.js +2 -2
  337. package/server/models/templaterpt.js +1 -1
  338. package/server/models/templatestore.js +2 -2
  339. package/server/models/templatevoucher.js +1 -1
  340. package/server/models/tinhthanh.js +2 -2
  341. package/server/models/tokens.js +2 -2
  342. package/server/models/tontucthoi.js +2 -2
  343. package/server/models/trangthai.js +2 -2
  344. package/server/models/trangthaiapp.js +3 -2
  345. package/server/models/transaction.js +6 -5
  346. package/server/models/trialinfo.js +1 -1
  347. package/server/models/user.js +5 -6
  348. package/server/models/usergroup.js +4 -3
  349. package/server/models/vanchuyen.js +3 -2
  350. package/server/models/vat.js +2 -2
  351. package/server/models/vatra.js +3 -2
  352. package/server/models/vatvao.js +3 -2
  353. package/server/models/versioninfo.js +2 -2
  354. package/server/models/vietqrbanks.js +2 -2
  355. package/server/models/vsocai.js +3 -3
  356. package/server/models/waitevent.js +1 -1
  357. package/server/models/wallet.js +1 -1
  358. package/server/models/warranty.js +1 -1
  359. package/server/models/xaphuong.js +1 -1
  360. package/server/models/xhd.js +3 -2
  361. package/server/models/ytdd_ck.js +3 -2
  362. package/server/models/ytdd_dk.js +3 -2
  363. package/server/models/zalo.js +1 -1
  364. package/server/modules/vouchers/vo-dh2.js +21 -21
  365. package/server/modules/vouchers/vo-hd2.js +58 -58
  366. package/server/modules/vouchers/vo-pbl.js +29 -29
  367. package/server/modules/vouchers/vo-so1.js +51 -50
  368. package/server/modules/vouchers/vo-so7.js +45 -44
  369. package/server/modules/vouchers/vo-so9.js +35 -34
  370. package/server/workers/backupApp.js +1 -1
  371. package/server/workers/calcGrid.js +1 -0
  372. package/server/workers/customerOnImport.js +1 -1
  373. package/server/workers/dmvtOnImport.js +1 -1
  374. package/server/workers/excelParser.js +1 -1
  375. package/server/workers/inputWorker.js +2 -1
  376. package/server/workers/pushNotify.js +1 -1
  377. package/server/workers/reportWorker.js +2 -2
  378. package/server/workers/restoreApp.js +1 -1
  379. package/server/workers/runScript.js +1 -1
  380. package/server/workers/sendEmail.js +1 -1
  381. package/server/workers/webhook.js +1 -1
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.3.26",
5
+ "version": "12.3.27",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
package/server/app.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
2
- const express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),_global=require("./global"),User=global.getModel("user"),defaultConfigs=require("./defaultConfigs"),crypto=require("crypto"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs};$configs$$.admins||($configs$$.admins=
3
- $configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$options$$.port||$configs$$.PORT||443;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,$res$$,
4
- $next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});var $compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
2
+ const os=require("os"),express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),crypto=require("crypto"),mainServer=function($app$$,$options$$={cluster:!0,port:443,useSocket:!0},$callbackServer$$=null){const $configs$$=global.configs={...defaultConfigs,...$options$$.configs},$User$$=global.getModel("user");$configs$$.admins||
3
+ ($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$options$$.port||$configs$$.PORT||443;require("moment-timezone").tz.setDefault($configs$$.timezone||"Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,
4
+ $res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});var $compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
5
5
  require("cookie-parser");$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));$res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("compression");
6
6
  $app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=$req$jscomp$2_size$$.headers["content-lenght"])&&$req$jscomp$2_size$$>$limitFileSize$$)return $res$$.status(400).send({error:"File too large"});$next$$()});$compress_cookieParser_morgan_multer_root_dir_uploads_session$$=
7
7
  require("multer")({dest:$compress_cookieParser_morgan_multer_root_dir_uploads_session$$,limits:{files:1,fileSize:$limitFileSize$$}});$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$);$app$$.use(cors({credentials:!0,exposedHeaders:["set-cookie","uid"],origin:($origin$$,$callback$$)=>{$callback$$(null,!0)}}));$configs$$.paths||($configs$$.paths={});!0!==$options$$.lite&&($app$$.use("/",express.static($configs$$.paths.public||__dirname+"/public")),$app$$.use("/admin",express.static($configs$$.paths.admin||
@@ -9,11 +9,11 @@ __dirname+"/admin")),$app$$.use("/templates",express.static($configs$$.paths.tem
9
9
  require("rotating-file-stream");const $logDirectory$$=$configs$$.paths.log||__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);$accessLogStream_rfs$$=$accessLogStream_rfs$$("access.log",{interval:"1d",path:$logDirectory$$});$app$$.use($compress_cookieParser_morgan_multer_root_dir_uploads_session$$("combined",{stream:$accessLogStream_rfs$$,skip:function($req$$,$res$$){return 400>$res$$.statusCode}}));$app$$.use(function($err$$,$req$$,$res$$,$next$$){console.error($err$$.stack);
10
10
  $res$$.status(500).send("Server Error!")});global.mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}).then(async()=>{console.log("Connected to Database");const $redis$$=require("redis");global.clientRedis=$redis$$.createClient();global.clientRedis.on("error",$err$$=>console.error("Redis Client Error",$err$$));global.clientRedis.on("end",()=>{console.error("Redis connection closed.")});global.clientRedis.on("connect",function(){console.log("redis connected");0!=$options$$.createRedisCache&&
11
11
  require("./libs/redis-cache").set();$options$$.start_abci_handler&&global.getModel("assabcihandler").start();!0!==$options$$.lite?require("./route")($app$$,()=>{if(!1!==$options$$.createServer){var $StaticPool_StaticPool$jscomp$1_StaticPool$$=require("sticky-session");if($configs$$.use_ssl){var $server_sslConfig$$=require("./sslConfig");$server_sslConfig$$=https.createServer($server_sslConfig$$($options$$.sslDir),$app$$)}else $server_sslConfig$$=http.createServer($app$$);$server_sslConfig$$.timeout=
12
- 6E5;!1!==$options$$.useSocket?User.initSocket($server_sslConfig$$):User.initClientSockets();if(!1!==$options$$.cluster){if(!$StaticPool_StaticPool$jscomp$1_StaticPool$$.listen($server_sslConfig$$,global.port))$server_sslConfig$$.once("listening",function(){console.log("server started on",global.port)});$StaticPool_StaticPool$jscomp$1_StaticPool$$=require("cluster");$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+
12
+ 6E5;!1!==$options$$.useSocket?$User$$.initSocket($server_sslConfig$$):$User$$.initClientSockets();if(!1!==$options$$.cluster){if(!$StaticPool_StaticPool$jscomp$1_StaticPool$$.listen($server_sslConfig$$,global.port))$server_sslConfig$$.once("listening",function(){console.log("server started on",global.port)});$StaticPool_StaticPool$jscomp$1_StaticPool$$=require("cluster");$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+
13
13
  " died",$code$$,$signal$$)});$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("online",function($worker$$){console.info("worker "+$worker$$.process.pid+" is online")})}else $server_sslConfig$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")})}$options$$.start_input_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||
14
- 0,5,3E5),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("load input data pool")}));$options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,5,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("load import data pool")}));
15
- $options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,5,3E5),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("load report pool")}));$callbackServer$$&&$callbackServer$$()}):require("./route")($app$$,()=>{$callbackServer$$&&$callbackServer$$()},!0)})}).catch($err$$=>
16
- {console.log("Not Connected to Database ERROR! ",$err$$)});return $app$$};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
14
+ 0,os.cpus().length,3E5,2),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Crud pool ready")}));$options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,2,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Import pool ready")}));
15
+ $options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,os.cpus().length,3E5,2),global.reportMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Report pool ready")}));$callbackServer$$&&$callbackServer$$()}):require("./route")($app$$,()=>{$callbackServer$$&&$callbackServer$$()},
16
+ !0)})}).catch($err$$=>{console.log("Not Connected to Database ERROR! ",$err$$)});return $app$$};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
17
17
  Error: ${$err$jscomp$3_error$$.message}
18
18
  Stack: ${$err$jscomp$3_error$$.stack}
19
19
  `;try{const $logDirectory$$=__dirname+"/log";fs.existsSync($logDirectory$$)||fs.mkdirSync($logDirectory$$);fs.writeFile(`${$logDirectory$$}/error-${(new Date).getTime()}.txt`,$err$jscomp$3_error$$,()=>{console.log("wrote log error")})}catch($e$$){console.log($e$$)}process.exit(1)});module.exports=mainServer;
package/server/cluster.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';require("events").EventEmitter.defaultMaxListeners=1E7;
2
- const express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),crypto=require("crypto"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),sslConfig=require("./sslConfig"),clusterServer=function($app$$,$sslDir$$,$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$={},$_port_accessLogStream_rfs$$=9999,$options$$={start_import_data_pool:!1,start_report_pool:!0,
3
- useAgenda:!0,createRedisCache:!0}){const $configs$$=global.configs={...defaultConfigs,...$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$,cluster:0!=$options$$.cluster};$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$_port_accessLogStream_rfs$$;require("moment-timezone").tz.setDefault($configs$$.timezone||
2
+ const os=require("os"),express=require("express"),bodyParser=require("body-parser"),passport=require("passport"),https=require("https"),http=require("http"),fs=require("fs"),cors=require("cors"),crypto=require("crypto"),_global=require("./global"),defaultConfigs=require("./defaultConfigs"),sslConfig=require("./sslConfig"),clusterServer=function($app$$,$sslDir$$,$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$={},$_port_accessLogStream_rfs$$=9999,$options$$={start_import_data_pool:!1,
3
+ start_report_pool:!0,useAgenda:!0,createRedisCache:!0}){const $configs$$=global.configs={...defaultConfigs,...$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$,cluster:0!=$options$$.cluster};$configs$$.admins||($configs$$.admins=$configs$$.adminUsers.map($u$$=>$u$$.email));$configs$$.supportUsers||($configs$$.supportUsers=[...$configs$$.admins]);$configs$$.public_token||($configs$$.public_token="flex.public.token");global.port=$_port_accessLogStream_rfs$$;require("moment-timezone").tz.setDefault($configs$$.timezone||
4
4
  "Asia/Ho_Chi_Minh");$app$$||($app$$=express());$app$$.set("trust proxy",1);const $toobusy$$=require("toobusy-js");$configs$$.maxLag&&$toobusy$$.maxLag($configs$$.maxLag);$app$$.use(function($req$$,$res$$,$next$$){$toobusy$$()?(console.error("Server is busy right now. This request has been cancel:",$req$$.originalUrl),$res$$.status(503).send({error:"Server is busy right now, sorry."})):$next$$()});$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("express-session");$app$$.use($_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$({secret:"QV098PVT123456HLBN",
5
5
  resave:!1,saveUninitialized:!0,cookie:{secure:!1}}));$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("cookie-parser");$app$$.use($_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$app$$.use(function($req$$,$res$$,$next$$){let $uid$$=$req$$.cookies.uid;$uid$$||($uid$$=$req$$.headers.uid);$uid$$||($uid$$="uid:"+crypto.randomBytes(20).toString("hex"),$res$$.cookie("uid",$uid$$,{expires:new Date(Date.now()+31536E6),sameSite:"none",secure:!0}));
6
6
  $res$$.set("uid",$uid$$);$req$$.cookies.uid=$uid$$;$next$$()});$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=require("compression");$app$$.use($_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$());$_configs_compress_cookieParser_morgan_multer_root_dir_uploads_session$$=$configs$$.paths.uploads||__dirname+"/uploads";const $limitFileSize$$=$configs$$.limitFileSize||1048576;$app$$.use(function($req$jscomp$2_size$$,$res$$,$next$$){if(($req$jscomp$2_size$$=
@@ -14,9 +14,9 @@ function($error$$){if($error$$)return console.log($error$$);console.log("created
14
14
  ($init_system_data_server$$=!0);for(let $i$$=0;$i$$<$configs$$.adminUsers.length;$i$$++){let $adminUser$$=$configs$$.adminUsers[$i$$],$u$$=await $StaticPool_StaticPool$jscomp$1_StaticPool$$.findOne({email:$adminUser$$.email});$u$$||($adminUser$$.local={name:$adminUser$$.name,email:$adminUser$$.email,active:!0},$u$$=new $StaticPool_StaticPool$jscomp$1_StaticPool$$($adminUser$$),$u$$.local.password=$u$$.generateHash($adminUser$$.email+$adminUser$$.defaultPassword),$u$$.save(function($error$$,$user$$){if($error$$)return console.error($error$$);
15
15
  $user$$&&console.log("da tao thanh cong user "+$user$$.email)}))}const $async$$=require("async");$init_system_data_server$$&&$initSysData$$();require("./route")($app$$);$init_system_data_server$$=$configs$$.use_ssl?https.createServer(sslConfig($sslDir$$),$app$$):http.createServer($app$$);$init_system_data_server$$.timeout=6E5;$StaticPool_StaticPool$jscomp$1_StaticPool$$.initSocket($init_system_data_server$$);if(!1!==$options$$.cluster){if(!require("sticky-session").listen($init_system_data_server$$,
16
16
  global.port))$init_system_data_server$$.once("listening",function(){console.log("server cluster started on",global.port)});$StaticPool_StaticPool$jscomp$1_StaticPool$$=require("cluster");$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("exit",function($worker$$,$code$$,$signal$$){console.error("worker "+$worker$$.process.pid+" died",$code$$,$signal$$)});$StaticPool_StaticPool$jscomp$1_StaticPool$$.on("online",function($worker$$){console.info("worker "+$worker$$.process.pid+" is online");global.clientRedis.set("lastworker",
17
- JSON.stringify({pid:$worker$$.process.pid}))})}else $init_system_data_server$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")});$options$$.start_input_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,5,3E5),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("load input data pool")}));
18
- $options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",$options$$.max_queue_imports||0,5,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("load import data pool")}));$options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),
19
- global.reportMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",$options$$.max_queue_reports||0,5,3E5),global.reportMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("load report pool")}))})}).catch($err$$=>{console.error("Not Connected to Database ERROR!",$err$$)})};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});
17
+ JSON.stringify({pid:$worker$$.process.pid}))})}else $init_system_data_server$$.listen(global.port,()=>{console.log("server start at "+global.port+" port")});$options$$.start_input_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.inputMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",0,os.cpus().length,3E5,2),global.inputMainPool.exec({load:!0,configs:JSON.stringify($configs$$)},()=>{console.error("Crud pool ready")}));
18
+ $options$$.start_import_data_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.importDataMainPool=new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/inputWorker.js",0,2,36E5),global.importDataMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("Import pool ready")}));$options$$.start_report_pool&&($StaticPool_StaticPool$jscomp$1_StaticPool$$=require("./libs/WorkerStaticPool"),global.reportMainPool=
19
+ new $StaticPool_StaticPool$jscomp$1_StaticPool$$(__dirname+"/workers/reportWorker.js",0,os.cpus().length,3E5,2),global.reportMainPool.exec({load:!0,configs:JSON.parse(JSON.stringify($configs$$))},()=>{console.error("Report pool ready")}))})}).catch($err$$=>{console.error("Not Connected to Database ERROR!",$err$$)})};process.on("SIGINT",async()=>{global.sharedRedisConnection&&await global.sharedRedisConnection.quit();process.exit(0)});
20
20
  process.on("uncaughtException",function($err$jscomp$3_error$$){console.error((new Date).toUTCString()+" uncaughtException:",$err$jscomp$3_error$$.message);console.error($err$jscomp$3_error$$.stack);$err$jscomp$3_error$$=`
21
21
  Error: ${$err$jscomp$3_error$$.message}
22
22
  Stack: ${$err$jscomp$3_error$$.stack}
@@ -8,6 +8,6 @@ var $columns$$=$req$$.columns;$columns$$._error||($columns$$._error="Error");let
8
8
  let $data_new$$=[],$row_master$$,$row_master_exists$$;async.mapSeries($data$$,($row$$,$cb$$)=>{setImmediate(()=>{$row_master$$={exfields:{}};$row_master_exists$$=null;$master_columns$$.forEach(function($column$$){if(0===$column$$.indexOf("exfields.")){let $_c$$=$column$$.replace("exfields.","");$row_master$$.exfields[$_c$$]=$row$$[$column$$]}else $row_master$$[$column$$]=$row$$[$column$$]});for(let $i$$=0;$i$$<$data_new$$.length;$i$$++){let $m$$=$data_new$$[$i$$],$is_eq$$=!0;$master_columns$$.forEach(function($column$$){_.isEqual($m$$[$column$$],
9
9
  $row_master$$[$column$$])||($is_eq$$=!1)});$is_eq$$&&($row_master_exists$$=$m$$)}$row_master_exists$$?$row_master$$=$row_master_exists$$:$data_new$$.push($row_master$$);let $row_detail$$;for(let $detail_name$$ in $details$$)$row_detail$$={},$details$$[$detail_name$$].columns.forEach(function($column$$){$row$$[$detail_name$$+"$"+$column$$]&&($row_detail$$[$column$$]=$row$$[$detail_name$$+"$"+$column$$])}),$row_master$$[$detail_name$$]||($row_master$$[$detail_name$$]=[]),0<_.keys($row_detail$$).length&&
10
10
  $row_master$$[$detail_name$$].push($row_detail$$);$cb$$()})},()=>{$req$$.data=$data_new$$;setImmediate(()=>{$callback$$()})})},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data||[],$columns$$=$req$$.columns;for(let $row$$ of $data$$){let $_first$$=$row$$._first;$_first$$&&0<$_first$$.length&&_.extend($row$$,$_first$$[0])}const $log$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTEXCEL",data:{data:$data$$,columns:$columns$$}},
11
- $req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,async($e$$,$rs$$)=>{$log$$.result={error:$e$$,result:$rs$$};await $log$$.save();if($e$$)return console.error("import",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,
12
- $callback$$($e$$)):$callback$$({error:$e$$.message||$e$$,message:$e$$.message||$e$$});0===$rs$$.rows_error.length?($req$$.result=$rs$$,$callback$$()):($e$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$$,error:$rs$$.error||$rs$$}))},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};
13
- module.exports=importFromExcel;
11
+ $req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("parse value",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,async($e$$,$rs$$)=>{$log$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $log$$.save();if($e$$)return console.error("import",$e$$),$e$$.error?($e$$.message=
12
+ $e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.message||$e$$,message:$e$$.message||$e$$});0===$rs$$.rows_error.length?($req$$.result=$rs$$,$callback$$()):($e$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", "),$callback$$({message:$e$$,error:$rs$$.error||$rs$$}))},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,
13
+ $req$$.result)})};module.exports=importFromExcel;
@@ -5,6 +5,6 @@ configs.google_credentials;if(!$app_google_credentials_id_app$$)return $callback
5
5
  range:$range$$});if(0==$response$$.data.values.length)return $callback$$({error:"Sheet n\u00e0y kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u"});let $columns$$=$response$$.data.values[0].map($c$$=>{let $field$$=$listinfo$$.fields.find($f$$=>$f$$.name.toLowerCase()==($c$$||"").toString().toLowerCase());return $field$$?$field$$.name:($field$$=$listinfo$$.fields.find($f$$=>$f$$.header.toLowerCase()==($c$$||"").toString().toLowerCase()))?$field$$.name:$c$$}),$data$$=$response$$.data.values.slice(1).map($row$$=>
6
6
  {let $n_row$$={};$columns$$.forEach(($c$$,$index$$)=>{$n_row$$[$c$$]=$row$$[$index$$]});return $n_row$$});$req$$.data=$data$$;$callback$$()}catch($e$$){return $error$$=(($e$$.response||{}).data||{}).error||$e$$,$credentials$$&&403==$error$$.code?$callback$$({error:`Kh\u00f4ng th\u1ec3 truy c\u1eadp v\u00e0o google sheet. H\u00e3y ph\u00e2n quy\u1ec1n cho t\u00e0i kho\u1ea3n ${$credentials$$.client_email} c\u00f3 quy\u1ec1n \u0111\u1ecdc google sheet tr\u00ean`}):$callback$$($error$$)}})},function($callback$$){let $data$$=
7
7
  $req$$.data;if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,[],function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return console.error("onImport from json:",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$callback$$()})});else $req$$.data=$data$$,$callback$$()},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data;const $log$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,
8
- id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$log$$.result={error:$e$$,result:$rs$$};await $log$$.save();if($e$$)return console.error("import from json",
9
- $ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||
10
- "true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromGs;
8
+ id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$log$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $log$$.save();
9
+ if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},
10
+ {replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromGs;
@@ -2,5 +2,5 @@
2
2
  $callback$$()}catch($e$$){return console.error("importFromJson",$e$$),$callback$$({error:$e$$.message||$e$$})}}else if($req$$.body){if(!$req$$.body.map)return $callback$$({error:"D\u1eef li\u1ec7u \u0111\u1ec3 import ph\u1ea3i l\u00e0 m\u1ed9t m\u1ea3ng"});try{$req$$.data=$req$$.body.map($row_rs$$=>{$row_rs$$=_.isString($row_rs$$)?JSONParser($row_rs$$):$row_rs$$;delete $row_rs$$.id_app;delete $row_rs$$._id;return $row_rs$$})}catch($e$$){return console.error("importFromJson",$e$$),$callback$$({error:$e$$.message||
3
3
  $e$$})}$callback$$()}else return $callback$$({error:"Kh\u00f4ng t\u00ecm th\u1ea5y d\u1eef li\u1ec7u c\u1ea7n import"})},function($callback$$){let $data$$=$req$$.data;if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,[],function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return console.error("onImport from json:",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$callback$$()})});else $req$$.data=$data$$,$callback$$()},
4
4
  function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data;const $logData$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,
5
- $req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$logData$$.result=$rs$$;await $logData$$.save();if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>
6
- [...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromJSON;
5
+ $req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$logData$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $logData$$.save();if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=
6
+ [...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromJSON;
@@ -1,20 +1,21 @@
1
1
  'use strict';const async=require("async"),_=require("lodash"),{JSONParser}=require("../libs/utils"),createHandler=require("./createHandler"),create=async($user$$,$ctrl$$,$data$$,$callback$$,$id_be_supply_by_user$$,$req$$,$action$$="add")=>{$req$$=$req$$||{};$req$$.user=$user$$;$req$$.data=$data$$;$req$$.id_be_supply_by_user=$id_be_supply_by_user$$;$req$$.action=$action$$;return createHandler($ctrl$$,$req$$,$callback$$)},updateHandler=require("./updateHandler"),update=async function($user$$,$ctrl$$,
2
2
  $id$$,$data$$,$callback$$,$action$$,$req$$,$_action$$="update"){$req$$=$req$$||{};$req$$.action=$action$$;$req$$._action=$_action$$;$req$$.user=$user$$;$req$$.id=$id$$;$req$$.data=$data$$;return updateHandler($ctrl$$,$req$$,$callback$$)};
3
3
  async function importHandler($user$$,$ctrl$$,$id_app$$,$data$$,$callback_main$$,$options$$={replace:!0,req:null}){const $model$$=$ctrl$$.model;let $replace$$=$options$$.replace,$rows_error$$=[];var $custs_listInfo_tk_dt$$=global.getModel("listinfo");let $info$$=await $custs_listInfo_tk_dt$$.findOne({code:$ctrl$$.name.toLowerCase()}).lean(),$modelJoins$$=[];$info$$&&(await $custs_listInfo_tk_dt$$.updateModel($info$$,$ctrl$$.model),$modelJoins$$=($info$$.fields||[]).filter($f$$=>$f$$.ref_model&&"_id"==
4
- $f$$.ref_field));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});$custs_listInfo_tk_dt$$=[];$model$$.schema.paths.ma_kh&&($custs_listInfo_tk_dt$$=$data$$.filter($r$$=>$r$$.ten_kh));$model$$.schema.paths.details&&($custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.map($kh$$=>
5
- {$kh$$.ma_kh||($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||""}});$custs_listInfo_tk_dt$$=await $custs_listInfo_tk_dt$$.asyncGroupBy(["ma_kh","ten_kh","dia_chi","dien_thoai","ma_so_thue"],[]);for($dvts_kh$$ of $custs_listInfo_tk_dt$$)$dvts_kh$$.id_app=$id_app$$,$dvts_kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($dvts_kh$$);
6
- var $dvts_kh$$=[];$model$$.schema.paths.ma_kho&&($dvts_kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));$dvts_kh$$=$dvts_kh$$.map($kh$$=>{$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho}});$dvts_kh$$=await $dvts_kh$$.asyncGroupBy(["ma_kho",
7
- "ten_kho"],[]);for($kho_vts$$ of $dvts_kh$$)$kho_vts$$.id_app=$id_app$$,$kho_vts$$.user_created=$user$$.email,$kho_vts$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho_vts$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho_vts$$);var $kho_vts$$=[];$model$$.schema.paths.ma_vt&&($kho_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt));$model$$.schema.paths.details&&($kho_vts$$=$kho_vts$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),
8
- []).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));$kho_vts$$=$kho_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",user_created:$user$$.email}));$kho_vts$$=await $kho_vts$$.asyncGroupBy(["ma_vt","ten_vt","ma_dvt"],[]);if(0<$kho_vts$$.length){$dvts_kh$$=await $kho_vts$$.asyncGroupBy(["ma_dvt"],[]);for($dvt_tk_vt$$ of $dvts_kh$$)$dvt_tk_vt$$.id_app=$id_app$$,$dvt_tk_vt$$.ten_dvt=$dvt_tk_vt$$.ma_dvt,$dvt_tk_vt$$.status=!0,$dvt_tk_vt$$.user_created=
9
- $user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_tk_vt$$.ma_dvt,id_app:$id_app$$}).lean()||(console.log("create dvt",$dvt_tk_vt$$),await global.getModel("dmdvt").create($dvt_tk_vt$$));var $dvt_tk_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},{tk:1}).lean()||{}).tk;$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_listInfo_tk_dt$$=(await global.getModel("account").findOne({id_app:$id_app$$,
10
- loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(let $vt$$ of $kho_vts$$)$vt$$.id_app=$id_app$$,$vt$$.tk_vt=$dvt_tk_vt$$,$vt$$.tk_gv=$dvts_kh$$,$vt$$.tk_dt=$custs_listInfo_tk_dt$$,$vt$$.status=!0,$vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$vt$$.ma_vt,id_app:$id_app$$}).lean()||(console.log("create product",$vt$$),await global.getModel("dmvt").create($vt$$),await global.getModel("dmqddvt").create({id_app:$id_app$$,status:!0,ma_vt:$vt$$.ma_vt,ma_dvt:$vt$$.ma_dvt,
11
- tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)&&delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});async.map($data$$,function($row$$,$callback$$){const $row_keys$$=Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>{let $data_type$$=$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase(),$data_value$$=
12
- $row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&("mixed"==$data_type$$||"array"==$data_type$$)&&($data_value$$=$data_value$$.trim(),0==$data_value$$.indexOf("[")||0==$data_value$$.indexOf("{")))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],console.error("Error parse data",$e$$)}});setImmediate(async()=>{for(let $i$$=0;$i$$<$modelJoins$$.length;$i$$++){let $field_ref$$=$modelJoins$$[$i$$];if($row$$[$field_ref$$.name]){let $new_data_ref$$=await global.getModel("originimportid").findOne({id_app:$id_app$$,
13
- old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&$id_app$$!=$row$$.id_app&&delete $row$$._id;delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&0<$ctrl$$.unique.length||$row$$._id)){let $query$$={};if($ctrl$$.unique&&0<$ctrl$$.unique.length){if($ctrl$$.options.unique_imp&&null!=$row$$[$ctrl$$.options.unique_imp]&&void 0!=
14
- $row$$[$ctrl$$.options.unique_imp]&&""!=$row$$[$ctrl$$.options.unique_imp])$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){0<=$row_keys$$.indexOf($k$$)&&($query$$[$k$$]=$row$$[$k$$],void 0==$query$$[$k$$]&&delete $query$$[$k$$])}),1>Object.keys($query$$).length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i \u0111\u1ee7 c\u00e1c gi\u00e1 tr\u1ecb:"+$ctrl$$.unique.join(","));
15
- 0!=$ctrl$$.require_id_app&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;$ctrl$$.model.find($query$$).lean().exec(function($error$$,$rss$$){if($error$$)return $callback$$($error$$);if(1<$rss$$.length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+Object.values($query$$).join("-")+" \u0111\u00e3 t\u1ed3n t\u1ea1i nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n");setImmediate(async()=>{let $foundObject$$;1===$rss$$.length&&($foundObject$$=$rss$$[0]);$foundObject$$?
16
- ($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),update($user$$,$ctrl$$,$foundObject$$._id,$row$$,function($e$$){if($e$$){let $_e$$=$e$$;_.isArray($_e$$)||($_e$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$$})}$callback$$()},"import",$options$$.req,"import")):create($user$$,$ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){var $_e$jscomp$1_i$$=
17
- $e$$;_.isArray($_e$jscomp$1_i$$)||($_e$jscomp$1_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$jscomp$1_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},{new:!0,upsert:!0}),$_e$jscomp$1_i$$=0;$_e$jscomp$1_i$$<$data$$.length;$_e$jscomp$1_i$$++){const $_r$$=$data$$[$_e$jscomp$1_i$$];
18
- for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})})}else create($user$$,$ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){console.error("error import data, creating...",$e$$);var $_e$jscomp$2_i$$=$e$$;_.isArray($_e$jscomp$2_i$$)||($_e$jscomp$2_i$$=[{error:$e$$.error||
19
- $e$$,code:$e$$.code}]);$rows_error$$.push({error:$_e$jscomp$2_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},{new:!0,upsert:!0}),$_e$jscomp$2_i$$=0;$_e$jscomp$2_i$$<$data$$.length;$_e$jscomp$2_i$$++){const $_r$$=$data$$[$_e$jscomp$2_i$$];for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&
20
- ($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})},function($error$$){setImmediate(()=>{if($error$$)return $callback_main$$($error$$);$callback_main$$(null,{rows_imported:$data$$.length-$rows_error$$.length,rows_error:$rows_error$$})})})}module.exports=importHandler;
4
+ $f$$.ref_field));$data$$=$data$$.filter($row$$=>{let $has_data$$=!1;for(let $key$$ in $row$$)if($row$$[$key$$]){$has_data$$=!0;break}return $has_data$$});if(1E4<$data$$.length)return $callback_main$$("S\u1ed1 d\u00f2ng import t\u1ed1i \u0111a 1 l\u1ea7n l\u00e0 10000.");console.log("\u0110ang import t\u1edbi",$ctrl$$.name,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u...");$custs_listInfo_tk_dt$$=[];$model$$.schema.paths.ma_kh&&($custs_listInfo_tk_dt$$=$data$$.filter($r$$=>$r$$.ten_kh));$model$$.schema.paths.details&&
5
+ ($custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kh)));$custs_listInfo_tk_dt$$=$custs_listInfo_tk_dt$$.map($kh$$=>{$kh$$.ma_kh||($kh$$.ma_kh=$kh$$.ten_kh.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kh:$kh$$.ma_kh,ten_kh:$kh$$.ten_kh,dia_chi:$kh$$.dia_chi||"",dien_thoai:$kh$$.dien_thoai||"",ma_so_thue:$kh$$.ma_so_thue||""}});$custs_listInfo_tk_dt$$=await $custs_listInfo_tk_dt$$.asyncGroupBy(["ma_kh",
6
+ "ten_kh","dia_chi","dien_thoai","ma_so_thue"],[]);for($dvts_kh$$ of $custs_listInfo_tk_dt$$)$dvts_kh$$.id_app=$id_app$$,$dvts_kh$$.user_created=$user$$.email,await global.getModel("customer").asyncCreateCustomer($dvts_kh$$);var $dvts_kh$$=[];$model$$.schema.paths.ma_kho&&($dvts_kh$$=$data$$.filter($r$$=>$r$$.ten_kho));$model$$.schema.paths.details&&($dvts_kh$$=$dvts_kh$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ten_kho)));$dvts_kh$$=$dvts_kh$$.map($kh$$=>
7
+ {$kh$$.ma_kho||($kh$$.ma_kho=$kh$$.ten_kho.replace(/[^\w\s]/gi,"").split(" ").join("").toUpperCase());return{ma_kho:$kh$$.ma_kho,ten_kho:$kh$$.ten_kho}});$dvts_kh$$=await $dvts_kh$$.asyncGroupBy(["ma_kho","ten_kho"],[]);for($kho_vts$$ of $dvts_kh$$)$kho_vts$$.id_app=$id_app$$,$kho_vts$$.user_created=$user$$.email,$kho_vts$$.status=!0,await global.getModel("dmkho").findOne({id_app:$id_app$$,ma_kho:$kho_vts$$.ma_kho}).lean()||await global.getModel("dmkho").create($kho_vts$$);var $kho_vts$$=[];$model$$.schema.paths.ma_vt&&
8
+ ($kho_vts$$=$data$$.filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt));$model$$.schema.paths.details&&($kho_vts$$=$kho_vts$$.concat($data$$.map($v$$=>$v$$.details||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]).filter($r$$=>$r$$.ma_vt&&$r$$.ten_vt)));$kho_vts$$=$kho_vts$$.map($vt$$=>({ma_vt:$vt$$.ma_vt,ten_vt:$vt$$.ten_vt,ma_dvt:$vt$$.ma_dvt||"Kh\u00f4ng \u0111\u01a1n v\u1ecb t\u00ednh",user_created:$user$$.email}));$kho_vts$$=await $kho_vts$$.asyncGroupBy(["ma_vt","ten_vt","ma_dvt"],[]);if(0<$kho_vts$$.length){$dvts_kh$$=
9
+ await $kho_vts$$.asyncGroupBy(["ma_dvt"],[]);for($dvt_tk_vt$$ of $dvts_kh$$)$dvt_tk_vt$$.id_app=$id_app$$,$dvt_tk_vt$$.ten_dvt=$dvt_tk_vt$$.ma_dvt,$dvt_tk_vt$$.status=!0,$dvt_tk_vt$$.user_created=$user$$.email,await global.getModel("dmdvt").findOne({ma_dvt:$dvt_tk_vt$$.ma_dvt,id_app:$id_app$$}).lean()||(console.log("create dvt",$dvt_tk_vt$$),await global.getModel("dmdvt").create($dvt_tk_vt$$));var $dvt_tk_vt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^156",$options:"i"}},
10
+ {tk:1}).lean()||{}).tk;$dvts_kh$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^632",$options:"i"}},{tk:1}).lean()||{}).tk;$custs_listInfo_tk_dt$$=(await global.getModel("account").findOne({id_app:$id_app$$,loai:1,tk:{$regex:"^511",$options:"i"}},{tk:1}).lean()||{}).tk;for(let $vt$$ of $kho_vts$$)$vt$$.id_app=$id_app$$,$vt$$.tk_vt=$dvt_tk_vt$$,$vt$$.tk_gv=$dvts_kh$$,$vt$$.tk_dt=$custs_listInfo_tk_dt$$,$vt$$.status=!0,$vt$$.user_created=$user$$.email,await global.getModel("dmvt").findOne({ma_vt:$vt$$.ma_vt,
11
+ id_app:$id_app$$}).lean()||(console.log("create product",$vt$$),await global.getModel("dmvt").create($vt$$),await global.getModel("dmqddvt").create({id_app:$id_app$$,status:!0,ma_vt:$vt$$.ma_vt,ma_dvt:$vt$$.ma_dvt,tu:1,ma:1}))}$data$$.forEach($r$$=>{delete $r$$.ten_dvcs;global.mongoose.Types.ObjectId.isValid($r$$._id)&&delete $r$$._id});await $data$$.filter($r$$=>$r$$.ma_dvcs).asyncJoinModel2($id_app$$,global.getModel("dvcs"),{where:{ma_dvcs:"_id"},fields:"ten_dvcs"});async.map($data$$,function($row$$,
12
+ $callback$$){const $row_keys$$=Object.keys($row$$);$row_keys$$.filter($key$$=>$ctrl$$.model.schema.paths[$key$$]).forEach($key$$=>{let $data_type$$=$ctrl$$.model.schema.paths[$key$$].instance.toLowerCase(),$data_value$$=$row$$[$key$$];if($data_value$$&&_.isString($data_value$$)&&("mixed"==$data_type$$||"array"==$data_type$$)&&($data_value$$=$data_value$$.trim(),0==$data_value$$.indexOf("[")||0==$data_value$$.indexOf("{")))try{$row$$[$key$$]=JSONParser($data_value$$)}catch($e$$){delete $row$$[$key$$],
13
+ console.error("Error parse data",$e$$)}});setImmediate(async()=>{for(let $i$$=0;$i$$<$modelJoins$$.length;$i$$++){let $field_ref$$=$modelJoins$$[$i$$];if($row$$[$field_ref$$.name]){let $new_data_ref$$=await global.getModel("originimportid").findOne({id_app:$id_app$$,old_id:$row$$[$field_ref$$.name]}).lean();$new_data_ref$$&&($row$$[$field_ref$$.name]=$new_data_ref$$.new_id)}}delete $row$$.__v;let $old_id$$=$row$$._id;$row$$.ma_dvcs&&!$row$$.ten_dvcs&&delete $row$$.ma_dvcs;$row$$.id_app&&$id_app$$!=
14
+ $row$$.id_app&&delete $row$$._id;delete $row$$.id_app;if($replace$$&&($ctrl$$.unique&&0<$ctrl$$.unique.length||$row$$._id)){let $query$$={};if($ctrl$$.unique&&0<$ctrl$$.unique.length){if($ctrl$$.options.unique_imp&&null!=$row$$[$ctrl$$.options.unique_imp]&&void 0!=$row$$[$ctrl$$.options.unique_imp]&&""!=$row$$[$ctrl$$.options.unique_imp])$query$$[$ctrl$$.options.unique_imp]=$row$$[$ctrl$$.options.unique_imp];else if($ctrl$$.unique.forEach(function($k$$){0<=$row_keys$$.indexOf($k$$)&&($query$$[$k$$]=
15
+ $row$$[$k$$],void 0==$query$$[$k$$]&&delete $query$$[$k$$])}),1>Object.keys($query$$).length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, D\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i \u0111\u1ee7 c\u00e1c gi\u00e1 tr\u1ecb:"+$ctrl$$.unique.join(","));0!=$ctrl$$.require_id_app&&($query$$.id_app=$id_app$$)}else $query$$._id=$row$$._id;$ctrl$$.model.find($query$$).lean().exec(function($error$$,$rss$$){if($error$$)return $callback$$($error$$);if(1<$rss$$.length)return $callback$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt, \u0111\u1ed1i t\u01b0\u1ee3ng "+
16
+ Object.values($query$$).join("-")+" \u0111\u00e3 t\u1ed3n t\u1ea1i nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n");setImmediate(async()=>{let $foundObject$$;1===$rss$$.length&&($foundObject$$=$rss$$[0]);$foundObject$$?($row$$.id_app=$foundObject$$.id_app,$row$$._id=$foundObject$$._id.toString(),($ctrl$$.unique||[]).forEach(function($k$$){$row$$[$k$$]=$foundObject$$[$k$$]}),update($user$$,$ctrl$$,$foundObject$$._id,$row$$,function($e$$){if($e$$){let $_e$$=$e$$;_.isArray($_e$$)||($_e$$=[{error:$e$$.error||
17
+ $e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$$})}$callback$$()},"import",$options$$.req,"import")):create($user$$,$ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){var $_e$jscomp$1_i$$=$e$$;_.isArray($_e$jscomp$1_i$$)||($_e$jscomp$1_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({row:$row$$,error:$_e$jscomp$1_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,
18
+ old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},{new:!0,upsert:!0}),$_e$jscomp$1_i$$=0;$_e$jscomp$1_i$$<$data$$.length;$_e$jscomp$1_i$$++){const $_r$$=$data$$[$_e$jscomp$1_i$$];for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})})}else create($user$$,
19
+ $ctrl$$,$row$$,function($e$$,$new_row$$){setImmediate(async()=>{if($e$$){console.error("error import data, creating...",$e$$);var $_e$jscomp$2_i$$=$e$$;_.isArray($_e$jscomp$2_i$$)||($_e$jscomp$2_i$$=[{error:$e$$.error||$e$$,code:$e$$.code}]);$rows_error$$.push({error:$_e$jscomp$2_i$$})}else if($row$$._id_new__=$new_row$$._id.toString(),$old_id$$)for(await global.getModel("originimportid").findOneAndUpdate({id_app:$new_row$$.id_app,old_id:$old_id$$},{id_app:$new_row$$.id_app,old_id:$old_id$$,new_id:$new_row$$._id.toString()},
20
+ {new:!0,upsert:!0}),$_e$jscomp$2_i$$=0;$_e$jscomp$2_i$$<$data$$.length;$_e$jscomp$2_i$$++){const $_r$$=$data$$[$_e$jscomp$2_i$$];for(let $key$$ in $_r$$)"_id"!=$key$$&&$_r$$[$key$$]==$old_id$$&&($_r$$[$key$$]=$new_row$$._id.toString(),$_r$$._id_new__&&await $model$$.updateMany({_id:$_r$$._id_new__},{[$key$$]:$new_row$$._id.toString()}))}$callback$$()})},$row$$._id,$options$$.req,"import")})},function($error$$){setImmediate(()=>{if($error$$)return $callback_main$$($error$$);console.log("\u0110\u00e3 import t\u1edbi",
21
+ $ctrl$$.name,$data$$.length," d\u00f2ng d\u1eef li\u1ec7u");$callback_main$$(null,{rows_imported:$data$$.length-$rows_error$$.length,rows_error:$rows_error$$})})})}module.exports=importHandler;
package/server/global.js CHANGED
@@ -6,13 +6,14 @@ global.getModel=$model_name$$=>{$model_name$$=$model_name$$.split(".js")[0];"kbm
6
6
  if(((global.configs||{}).paths||{}).models&&($_requireFields_model_model_path_mySchema$$=((global.configs||{}).paths||{}).models+"/"+$model_name$$+".js",fs.existsSync($_requireFields_model_model_path_mySchema$$)))return require($_requireFields_model_model_path_mySchema$$);$_requireFields_model_model_path_mySchema$$=__dirname+"/models/"+$model_name$$+".js";if(fs.existsSync($_requireFields_model_model_path_mySchema$$))return require($_requireFields_model_model_path_mySchema$$);console.error("model",
7
7
  $model_name$$,"is not exists. create new model");$_requireFields_model_model_path_mySchema$$={...require("./models/listinfo").requireFields};$_requireFields_model_model_path_mySchema$$=new global.Schema($_requireFields_model_model_path_mySchema$$,{strict:!1});return global.mongoose.model($model_name$$,$_requireFields_model_model_path_mySchema$$)};global.getLib=$lib_name$$=>require("./libs/"+$lib_name$$);
8
8
  const pointSchema=new global.mongoose.Schema({type:{type:String,enum:["Point"],required:!0,default:"Point"},coordinates:{type:[Number],required:!0}}),polygonSchema=new global.mongoose.Schema({type:{type:String,enum:["Polygon"],required:!0,default:"Polygon"},coordinates:{type:[[[Number]]],required:!0}});global.customTypes={Point:pointSchema,Polygon:polygonSchema};const EventEmitter=require("events");class GlobalEmitter extends EventEmitter{}global.globalEvents=new GlobalEmitter;
9
- const Message=global.getModel("message"),Notification=global.getModel("notification"),User=global.getModel("user"),Sysconfig=global.getModel("sysconfig");global.getSysConfig=async $cf_code$$=>{if($cf_code$$=await Sysconfig.findOne({code:$cf_code$$}))return $cf_code$$.value};global.asyncCountUnRead=async $email$$=>new Promise($resolve$$=>{setImmediate(()=>{Message.countDocuments({email:$email$$,read:!1},($e$$,$rs$$)=>{$resolve$$($rs$$||0)})})});
10
- global.alertMessage=function($email$$){setImmediate(()=>{Message.countDocuments({email_owner:$email$$,email_receiver:$email$$,read:!1},function($error$$,$count$$){$error$$?console.log($error$$):User.emitEvent($email$$,"message:count",$count$$,!1)})})};
11
- global.createNotification=function($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$){Notification.createNotification($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$)};
12
- global.getNotifies=function($email$$,$fn$$){async.parallel({colls:function($callback$$){$callback$$(null,[])},notifications:function($callback$$){Notification.find({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$colls_raw$$){setImmediate(()=>{if($error$$)$callback$$($error$$);else{const $colls$$=$colls_raw$$.map(function($c$$){return $c$$.toObject()});$callback$$(null,$colls$$)}})})},apps:function($callback$$){$callback$$(null,[])}},function($error$$,$rs$$){setImmediate(()=>
13
- {$fn$$($error$$,$rs$$)})})};global.sendNotification=function($email$$,$_id$$,$notify$$,$push_to_mobile_and_web$$=!0){setImmediate(()=>{$notify$$||($notify$$={email_sender:"H\u1ec7 th\u1ed1ng"});const $obj_notify$$={_id:$_id$$,code:"notification",action:"view"};$obj_notify$$.body=$notify$$.content||$notify$$.title||"";$obj_notify$$.sender=$notify$$.email_sender;$obj_notify$$.title=$notify$$.title||"";$obj_notify$$.content=$notify$$.content||"";User.emitEvent($email$$,"notify:new",$obj_notify$$,$push_to_mobile_and_web$$)})};
14
- global.alertNotification=function($email$$){setImmediate(()=>{Notification.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?console.log($error$$):User.emitEvent($email$$,"notify:count",$count$$,!1)})})})};
15
- global.asyncCountNotifications=async function($email$$){return new Promise($resolve$$=>{setImmediate(()=>{Notification.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?(console.log($error$$),$resolve$$(0)):$resolve$$($count$$)})})})})};const {RateLimiterRedis,RateLimiterQueue,RateLimiterMemory}=require("rate-limiter-flexible");
9
+ global.getSysConfig=async $cf_code$$=>{if($cf_code$$=await global.getModel("sysconfig").findOne({code:$cf_code$$}))return $cf_code$$.value};global.asyncCountUnRead=async $email$$=>{const $Message$$=global.getModel("message");return new Promise($resolve$$=>{setImmediate(()=>{$Message$$.countDocuments({email:$email$$,read:!1},($e$$,$rs$$)=>{$resolve$$($rs$$||0)})})})};
10
+ global.alertMessage=function($email$$){const $Message$$=global.getModel("message"),$User$$=global.getModel("user");setImmediate(()=>{$Message$$.countDocuments({email_owner:$email$$,email_receiver:$email$$,read:!1},function($error$$,$count$$){$error$$?console.log($error$$):$User$$.emitEvent($email$$,"message:count",$count$$,!1)})})};
11
+ global.createNotification=function($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$){global.getModel("notification").createNotification($email_sender$$,$email_receiver$$,$title$$,$content$$,$fn$$,$exfields$$,$emitEvent$$,$c_token$$,$send_email$$)};
12
+ global.getNotifies=function($email$$,$fn$$){const $Notification$$=global.getModel("notification");async.parallel({colls:function($callback$$){$callback$$(null,[])},notifications:function($callback$$){$Notification$$.find({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$colls_raw$$){setImmediate(()=>{if($error$$)$callback$$($error$$);else{const $colls$$=$colls_raw$$.map(function($c$$){return $c$$.toObject()});$callback$$(null,$colls$$)}})})},apps:function($callback$$){$callback$$(null,
13
+ [])}},function($error$$,$rs$$){setImmediate(()=>{$fn$$($error$$,$rs$$)})})};
14
+ global.sendNotification=function($email$$,$_id$$,$notify$$,$push_to_mobile_and_web$$=!0){const $User$$=global.getModel("user");setImmediate(()=>{$notify$$||($notify$$={email_sender:"H\u1ec7 th\u1ed1ng"});const $obj_notify$$={_id:$_id$$,code:"notification",action:"view"};$obj_notify$$.body=$notify$$.content||$notify$$.title||"";$obj_notify$$.sender=$notify$$.email_sender;$obj_notify$$.title=$notify$$.title||"";$obj_notify$$.content=$notify$$.content||"";$User$$.emitEvent($email$$,"notify:new",$obj_notify$$,
15
+ $push_to_mobile_and_web$$)})};global.alertNotification=function($email$$){const $Notification$$=global.getModel("notification"),$User$$=global.getModel("user");setImmediate(()=>{$Notification$$.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?console.log($error$$):$User$$.emitEvent($email$$,"notify:count",$count$$,!1)})})})};
16
+ global.asyncCountNotifications=async function($email$$){const $Notification$$=global.getModel("notification");return new Promise($resolve$$=>{setImmediate(()=>{$Notification$$.countDocuments({email_receiver:$email$$,email_owner:$email$$,read:!1},function($error$$,$count$$){setImmediate(()=>{$error$$?(console.log($error$$),$resolve$$(0)):$resolve$$($count$$)})})})})};const {RateLimiterRedis,RateLimiterQueue,RateLimiterMemory}=require("rate-limiter-flexible");
16
17
  global.createRateLimiterMiddleware=async($config$$,$keyPrefix$$)=>{const $total_points$$=$config$$.points||1E3;var $duration_limiterFlexible$$=$config$$.duration||1;const $insuranceLimiter$$=new RateLimiterMemory({points:$total_points$$,duration:$duration_limiterFlexible$$});$duration_limiterFlexible$$=new RateLimiterRedis({keyPrefix:$keyPrefix$$,storeClient:global.clientRedis,points:$total_points$$,duration:$duration_limiterFlexible$$,blockDuration:$config$$.blockDuration||0,inmemoryBlockOnConsumed:$total_points$$+
17
18
  1,inmemoryBlockDuration:10,insuranceLimiter:$insuranceLimiter$$});const $rateLimiter$$=new RateLimiterQueue($duration_limiterFlexible$$,{maxQueueSize:$config$$.maxQueueSize||1E4});return async($req$$,$res$$,$next$$)=>{let $key$$=($req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress).replace("::ffff:","");const $origin$$=($req$$.headers.origin||$req$$.headers.referer||"").toString().toLowerCase().replace("https://","").replace("http://","").replace("www.","").split("/").join("").trim();
18
19
  let $trust_domains$$=((global.configs||{}).trust_domains||"").toString().toLowerCase().split(","),$points$$;if($origin$$&&0>$trust_domains$$.indexOf($origin$$)&&($check_query_trust_Key$$={domain:$origin$$},$check_query_trust_Key$$=await global.getModel("domain").findOne($check_query_trust_Key$$).lean())){if($check_query_trust_Key$$.not_allow)return $res$$.status(400).send({error:"Access is not allowed"});$points$$=$check_query_trust_Key$$.points;$trust_domains$$.push($origin$$)}var $check_query_trust_Key$$=
@@ -1,12 +1,14 @@
1
- 'use strict';const {Worker}=require("worker_threads"),fs=require("fs"),_=require("lodash"),crypto=require("crypto"),redisCache=require("./redis-cache");
2
- class WorkerPool{constructor($filename_i$$,$maxQueue_worker$$=0,$maxWorkers$$=2,$defaultTimeout$$=3E5){if(!fs.existsSync($filename_i$$))throw Error("Worker file does not exist");this.filename=$filename_i$$;this.maxWorkers=$maxWorkers$$;(this.maxQueue=$maxQueue_worker$$)&&this.maxQueue<$maxWorkers$$&&(this.maxQueue=$maxWorkers$$);this.defaultTimeout=$defaultTimeout$$;this.queue=[];this.queue_running=[];this.workers={};for($filename_i$$=0;$filename_i$$<$maxWorkers$$;$filename_i$$++)$maxQueue_worker$$=
3
- this.createWorker(),this.workers[$maxQueue_worker$$.id]=$maxQueue_worker$$}createWorker(){const $wk$$={id:`worker-${crypto.randomBytes(20).toString("hex")}`,isBusy:!1};$wk$$.worker=new Worker(this.filename);$wk$$.worker.on("message",async $message$$=>{try{let $task$$;($task$$=$message$$.id_task?this.queue_running.find($q$$=>$q$$.id==$message$$.id_task):$wk$$.task)&&clearTimeout($task$$.timeoutId);if($task$$&&$task$$.callback)if($message$$.id_task&&$message$$.id_task!==$task$$.id)console.error("K\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 kh\u00f4ng \u0111\u00fang cho task",
4
- $task$$.id,$message$$);else{$task$$.finished=new Date;$task$$.status=5;$task$$.message="\u0110\u00e3 th\u1ef1c hi\u1ec7n xong";$task$$.result=$message$$&&$message$$.map?void 0:$message$$;try{let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}this.queue_running=this.queue_running.filter($q$$=>
5
- $q$$.id!==$task$$.id);$task$$.callback($message$$,$task$$.id)}delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()}catch($e$$){console.error($e$$)}});$wk$$.worker.on("error",$error$$=>{console.error("Worker error:",$error$$);this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==($wk$$.task||{}).id);delete this.workers[$wk$$.id];$error$$=this.createWorker();this.workers[$error$$.id]=$error$$});$wk$$.worker.on("exit",$code$jscomp$1_newWorker$$=>{console.log(`Worker exited with code ${$code$jscomp$1_newWorker$$}`);
6
- this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==($wk$$.task||{}).id);delete this.workers[$wk$$.id];$code$jscomp$1_newWorker$$=this.createWorker();this.workers[$code$jscomp$1_newWorker$$.id]=$code$jscomp$1_newWorker$$});return $wk$$}async processQueue(){for(const $wk$$ of Object.values(this.workers))if(!$wk$$.isBusy&&!$wk$$.task&&0<this.queue.length){const $task$$=this.queue.shift();if($task$$){$task$$.status=2;$task$$.message="\u0110ang th\u1ef1c hi\u1ec7n";this.queue_running.push($task$$);
7
- try{let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$wk$$.isBusy=!0;$wk$$.task=$task$$;$wk$$.worker.postMessage($task$$.params);$task$$.timeoutId=setTimeout(async()=>{this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);try{$task$$.finished=new Date;$task$$.status=9;
8
- $task$$.message="\u0110\u00e3 h\u1ebft th\u1eddi gian th\u1ef1c hi\u1ec7n";let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$task$$.callback&&$task$$.callback({error:"Task timed out"},$task$$.id);delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()},$task$$.timeout||this.defaultTimeout)}}}async pushToQueue($params$$,
9
- $callback$$,$timeout$$=0){$params$$.id_task||($params$$.id_task=`task-${crypto.randomBytes(20).toString("hex")}`);$timeout$$=$timeout$$||this.defaultTimeout;const $task$$={id:$params$$.id_task,start:new Date,params:_.cloneDeep($params$$),timeout:$timeout$$,status:0};delete $task$$.params.configs;delete $task$$.params.user;delete $task$$.params.configs;delete $task$$.params.data;$task$$.params.req&&(delete $task$$.params.req.user,delete $task$$.params.req.body,delete ($task$$.params.req.query||{}).access_token);
10
- try{await redisCache.setObject($params$$.id_task,$task$$),this.queue.push({id:$params$$.id_task,params:$params$$,callback:$callback$$,timeout:$timeout$$,status:0}),this.processQueue()}catch($e$$){console.error("L\u1ed7i \u0111\u1ea9y task t\u1edbi queue",$e$$),$callback$$({error:$e$$.error||$e$$.message||$e$$})}}async exec($args_params$$,$callback$$=()=>{},$timeout$$=0){if(0<this.maxQueue&&this.queue.length>=this.maxQueue)$callback$$({error:"Queue is full"});else if($args_params$$.load)for(let $i$$=
11
- 0;$i$$<this.maxWorkers;$i$$++){let $params$$=_.cloneDeep($args_params$$);this.pushToQueue($params$$,$callback$$,$timeout$$)}else $args_params$$=_.cloneDeep($args_params$$),this.pushToQueue($args_params$$,$callback$$,$timeout$$)}fullQueue(){return 0<this.maxQueue&&this.queue.length>=this.maxQueue}busy(){return 0==Object.values(this.workers).filter($w$$=>!$w$$.isBusy).length}destroy(){for(const $worker$$ of Object.values(this.workers))$worker$$.terminate();this.workers={};this.queue=[]}}
12
- module.exports=WorkerPool;
1
+ 'use strict';const {Worker}=require("worker_threads"),fs=require("fs"),_=require("lodash"),crypto=require("crypto"),moment=require("moment"),redisCache=require("./redis-cache");
2
+ class WorkerPool{constructor($filename_i$$,$maxQueue_worker$$=0,$maxWorkers$$=1,$defaultTimeout$$=3E5,$pre_created_workers$$=0){if(!fs.existsSync($filename_i$$))throw Error("Worker file does not exist");this.filename=$filename_i$$;this.maxWorkers=$maxWorkers$$;(this.maxQueue=$maxQueue_worker$$)&&this.maxQueue<$maxWorkers$$&&(this.maxQueue=$maxWorkers$$);this.defaultTimeout=$defaultTimeout$$;this.pre_created_workers=$pre_created_workers$$;this.queue=[];this.queue_running=[];this.workers={};console.log("\u0110ang t\u1ea1o s\u1eb5n",
3
+ $pre_created_workers$$,"workes/",$maxWorkers$$);for($filename_i$$=0;$filename_i$$<Math.min($pre_created_workers$$,$maxWorkers$$);$filename_i$$++)$maxQueue_worker$$=this.createWorker(),this.workers[$maxQueue_worker$$.id]=$maxQueue_worker$$}workerIsAlive($wk$$){return!$wk$$.worker||0>=$wk$$.worker.threadId||moment().diff(moment($wk$$.time_responded),"seconds")>(($wk$$.task||{}).timeout||1E4)/1E3?!1:!0}createWorker(){const $wk$$={id:`worker-${crypto.randomBytes(20).toString("hex")}`,isBusy:!1,time_responded:new Date};
4
+ $wk$$.worker=new Worker(this.filename);$wk$$.worker.on("message",async $message$$=>{$wk$$.time_responded=new Date;if("pong"!==$message$$)try{let $task$$;($task$$=$message$$.id_task?this.queue_running.find($q$$=>$q$$.id==$message$$.id_task):$wk$$.task)&&clearTimeout($task$$.timeoutId);if($task$$&&$task$$.callback)if($message$$.id_task&&$message$$.id_task!==$task$$.id)console.error("K\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 kh\u00f4ng \u0111\u00fang cho task",$task$$.id,$message$$);else{$task$$.finished=new Date;
5
+ $task$$.status=5;$task$$.message="\u0110\u00e3 th\u1ef1c hi\u1ec7n xong";$task$$.result=$message$$&&$message$$.map?void 0:$message$$;try{let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);$task$$.callback($message$$,
6
+ $task$$.id)}delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()}catch($e$$){console.error($e$$)}});$wk$$.worker.on("error",$error$$=>{console.error("Worker error:",$error$$);$wk$$.worker.terminate()});$wk$$.worker.on("exit",async $code$$=>{console.error(`Worker exited with code ${$code$$}. Creating new worker...`);if($wk$$.task){let $task$$=this.queue_running.find($q$$=>$q$$.id==$wk$$.task.id_task);if($task$$){clearTimeout($task$$.timeoutId);$task$$.finished=new Date;$task$$.status=9;$task$$.message=
7
+ "\u0110\u00e3 c\u00f3 l\u1ed7i x\u1ea3y ra trong h\u1ec7 th\u1ed1ng. H\u00e3y th\u1eed l\u1ea1i";let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$task$$.callback&&$task$$.callback({error:$message$$},$task$$.id);this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id)}}delete this.workers[$wk$$.id];
8
+ $code$$=this.createWorker();this.workers[$code$$.id]=$code$$});return $wk$$}async processQueue($id_worker$$){for(let $i$$=0;$i$$<this.maxWorkers&&0!=this.queue.length;$i$$++){let $wk$$=Object.values(this.workers).find($w$$=>!$w$$.isBusy&&!$w$$.task&&(!$id_worker$$||$id_worker$$==$w$$.id));if(!$wk$$)if(Object.keys(this.workers).length<this.maxWorkers)console.log("T\u1ea1o th\u00eam worker m\u1edbi...",", s\u1ed1 l\u01b0\u1ee3ng workers hi\u1ec7n t\u1ea1i",Object.values(this.workers).length,", max:",
9
+ this.maxWorkers),$wk$$=this.createWorker(),this.workers[$wk$$.id]=$wk$$;else break;if($wk$$){this.workerIsAlive($wk$$)||(console.error("Worker",$wk$$.id,"kh\u00f4ng c\u00f2n ho\u1ea1t \u0111\u1ed9ng. T\u1ea1o l\u1ea1i..."),delete this.workers[$wk$$.id],$wk$$=this.createWorker(),this.workers[$wk$$.id]=$wk$$);const $task$$=this.queue.shift();if($task$$){$task$$.status=2;$task$$.message="\u0110ang th\u1ef1c hi\u1ec7n";this.queue_running.push($task$$);try{let {finished:$finished$$,status:$status$$,message:$message$$,
10
+ result:$result$$}=$task$$;await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$wk$$.isBusy=!0;$wk$$.task=$task$$;$task$$.params.id_worker=$wk$$.id;$wk$$.worker.postMessage($task$$.params);$task$$.timeoutId=setTimeout(async()=>{this.queue_running=this.queue_running.filter($q$$=>$q$$.id!==$task$$.id);$task$$.finished=new Date;$task$$.status=9;$task$$.message="\u0110\u00e3 h\u1ebft th\u1eddi gian th\u1ef1c hi\u1ec7n";
11
+ let {finished:$finished$$,status:$status$$,message:$message$$,result:$result$$}=$task$$;try{await redisCache.updateObject($task$$.id,{finished:$finished$$,status:$status$$,message:$message$$,result:$result$$})}catch($e$$){console.error("can't save task status",$e$$)}$task$$.callback&&$task$$.callback({error:$message$$},$task$$.id);delete $wk$$.task;$wk$$.isBusy=!1;this.processQueue()},$task$$.timeout||this.defaultTimeout)}}}}async pushToQueue($params$$,$callback$$,$timeout$$=0,$id_worker$$){$params$$.id_task||
12
+ ($params$$.id_task=`task-${crypto.randomBytes(20).toString("hex")}`);$timeout$$=$timeout$$||this.defaultTimeout;const $task$$={id:$params$$.id_task,start:new Date,params:_.cloneDeep($params$$),timeout:$timeout$$,status:0};delete $task$$.params.configs;delete $task$$.params.user;delete $task$$.params.configs;delete $task$$.params.data;$task$$.params.req&&(delete $task$$.params.req.user,delete $task$$.params.req.body,delete ($task$$.params.req.query||{}).access_token);try{await redisCache.setObject($params$$.id_task,
13
+ $task$$),this.queue.push({id:$params$$.id_task,params:$params$$,callback:$callback$$,timeout:$timeout$$,status:0}),this.processQueue($id_worker$$)}catch($e$$){console.error("L\u1ed7i \u0111\u1ea9y task t\u1edbi queue",$e$$),$callback$$({error:$e$$.error||$e$$.message||$e$$})}}async exec($args_params$$,$callback$$=()=>{},$timeout$$=0){if(0<this.maxQueue&&this.queue.length>=this.maxQueue)$callback$$({error:"Queue is full"});else if($args_params$$.load)for(let $id_worker$$ of Object.keys(this.workers)){let $params$$=
14
+ _.cloneDeep($args_params$$);this.pushToQueue($params$$,$callback$$,$timeout$$,$id_worker$$)}else $args_params$$=_.cloneDeep($args_params$$),this.pushToQueue($args_params$$,$callback$$,$timeout$$)}fullQueue(){return 0<this.maxQueue&&this.queue.length>=this.maxQueue}busy(){return 0==Object.values(this.workers).filter($w$$=>!$w$$.isBusy).length}destroy(){for(const $worker$$ of Object.values(this.workers))$worker$$.terminate();this.workers={};this.queue=[]}}module.exports=WorkerPool;
@@ -2,38 +2,38 @@
2
2
  module.exports=async function($condition$$,$fn$$){if($condition$$&&$condition$$.tu_thang&&$condition$$.den_thang&&$condition$$.nam&&$condition$$.id_app){$condition$$.tu_thang=Number($condition$$.tu_thang);$condition$$.den_thang=Number($condition$$.den_thang);var $ma_kho$$=$condition$$.ma_kho;$ma_kho$$&&console.log("dang tinh gia trung binh cho kho",$ma_kho$$);var $tu_ngay$$=moment(new Date($condition$$.nam,$condition$$.tu_thang-1,15)).startOf("month").toDate(),$den_ngay$$=moment(new Date($condition$$.nam,
3
3
  $condition$$.den_thang-1,15)).endOf("month").toDate(),$id_app$$=$condition$$.id_app,$app_query_dmvt$$=await global.getModel("app").findOne({_id:$id_app$$},{options:1}).lean();if(!$app_query_dmvt$$)return $fn$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");var $f_tien$$=($app_query_dmvt$$.options||{}).f_tien||0;$app_query_dmvt$$={id_app:$id_app$$,gia_xuat:"1"};$condition$$.ma_nvt&&($app_query_dmvt$$.ma_nvt=$condition$$.ma_nvt);$condition$$.ma_ncc&&($app_query_dmvt$$.ma_ncc=$condition$$.ma_ncc);
4
4
  $condition$$.ma_vt&&($app_query_dmvt$$.ma_vt=$condition$$.ma_vt);dmvt.find($app_query_dmvt$$).lean().exec(function($error$jscomp$3$$,$dmvts$$){async.map($dmvts$$,function($vt$$,$callback$$){setImmediate(()=>{let $query$$={id_app:$id_app$$,tu_ngay:$tu_ngay$$,den_ngay:$den_ngay$$,ma_vt:$vt$$.ma_vt,ma_kho:$ma_kho$$};tinhgiatb1vt($query$$,function($error$$,$gia$$){if($error$$)return console.error("Kh\u00f4ng th\u1ec3 t\u00ednh gi\u00e1 trung b\u00ecnh cho v\u1eadt t\u01b0",$query$$.ma_vt,$error$$),$callback$$($error$$);
5
- $gia$$.id_app=$id_app$$;$gia$$.ma_kho=$ma_kho$$;$gia$$.status=!0;$callback$$(null,$gia$$)})})},function($error$jscomp$2$$,$bang_gia$$){if($error$jscomp$2$$)return $fn$$($error$jscomp$2$$);$bang_gia$$=_.filter($bang_gia$$,function($r$$){return 0!==$r$$.gia||0!==$r$$.tong_sl||0!==$r$$.tong_tien});$error$jscomp$2$$=[];for(let $t$$=$condition$$.tu_thang;$t$$<=$condition$$.den_thang;$t$$++)$error$jscomp$2$$.push($t$$);async.map($error$jscomp$2$$,function($t$$,$callback$jscomp$1$$){async.map($bang_gia$$,
6
- function($gia$$,$callback$jscomp$0$$){setImmediate(()=>{$gia$$.thang=$t$$;$gia$$.nam=$condition$$.nam;async.series({savetogiatb:function($callback$$){let $query_delete$$={id_app:$id_app$$,ma_vt:$gia$$.ma_vt,nam:$condition$$.nam,thang:$t$$};$ma_kho$$&&($query_delete$$.ma_kho=$ma_kho$$);giatb.deleteMany($query_delete$$,function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$$($error$jscomp$0$$);giatb.create($gia$$,function($error$$,$result$$){if($error$$)return console.log("Loi khi luu vao bang gia trung binh thang vat tu "+
7
- $gia$$.ma_vt,$error$$),$callback$$($error$$);$callback$$(null,$result$$)})})}},function($error$$){if($error$$)return $callback$jscomp$0$$($error$$);$callback$jscomp$0$$(null)})})},function($error$$){if($error$$)return $callback$jscomp$1$$($error$$);$callback$jscomp$1$$(null)})},function($error$jscomp$1$$){if($error$jscomp$1$$)return $fn$$($error$jscomp$1$$);let $vouchers_x$$={},$vouchers_n$$={},$ma_vts$$=$bang_gia$$.map($v$$=>$v$$.ma_vt);async.parallel({xuat:function($callback$jscomp$0$$){setImmediate(()=>
8
- {let $query_sokho_x$$={id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:2,ma_vt:{$in:$ma_vts$$},px_gia_dd:!1};$ma_kho$$&&($query_sokho_x$$.ma_kho=$ma_kho$$);sokho.find($query_sokho_x$$).lean().exec(function($error$jscomp$0$$,$sks$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);if(!$sks$$||0===$sks$$.length)return $callback$jscomp$0$$(null,$vouchers_x$$);async.mapSeries($sks$$,function($sk$$,$callback$$){let $voucher$$=$vouchers_x$$[$sk$$.id_ct];var $ct_ctrl$$=
9
- global.controllers[$sk$$.ma_ct.toUpperCase()];$ct_ctrl$$=$ct_ctrl$$?$ct_ctrl$$.getProperty("model"):mongoose.models[$sk$$.ma_ct.toLowerCase()];!$voucher$$&&$ct_ctrl$$?$ct_ctrl$$.findById($sk$$.id_ct,function($error$$,$v$$){if($error$$)return $callback$$($error$$);$v$$?($voucher$$=$v$$,$vouchers_x$$[$sk$$.id_ct]=$voucher$$):(sokho.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi sokho",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,
10
- $sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}),socai.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi socai",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}));$callback$$()}):$callback$$()},function($error$$){if($error$$)return console.error("co loi lay phieu xuat",$error$$),$callback$jscomp$0$$($error$$);$callback$jscomp$0$$(null,$vouchers_x$$)})})})},nhap:function($callback$jscomp$0$$){setImmediate(()=>{let $query_sokho_n$$=
11
- {id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:1,ma_vt:{$in:$ma_vts$$},pn_gia_tb:!0,ma_ct:{$ne:"PXC"}};$ma_kho$$&&($query_sokho_n$$.ma_kho=$ma_kho$$);sokho.find($query_sokho_n$$,function($error$jscomp$0$$,$sks$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);if(!$sks$$||0===$sks$$.length)return $callback$jscomp$0$$(null,$vouchers_n$$);async.map($sks$$,function($sk$$,$callback$$){let $voucher$$=$vouchers_n$$[$sk$$.id_ct];var $ct$jscomp$1_ctrl$$=global.controllers[$sk$$.ma_ct.toUpperCase()];
12
- $ct$jscomp$1_ctrl$$=$ct$jscomp$1_ctrl$$?$ct$jscomp$1_ctrl$$.getProperty("model"):mongoose.models[$sk$$.ma_ct.toLowerCase()];!$voucher$$&&$ct$jscomp$1_ctrl$$?$ct$jscomp$1_ctrl$$.findById($sk$$.id_ct,function($error$$,$v$$){if($error$$)return $callback$$($error$$);$v$$?($voucher$$=$v$$,$vouchers_n$$[$sk$$.id_ct]=$voucher$$):(sokho.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu nhap. chuong trinh da xoa phieu nay khoi sokho",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,
13
- $sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}),socai.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu nhap. chuong trinh da xoa phieu nay khoi socai",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}));$callback$$()}):$callback$$()},function($error$$){if($error$$)return console.log("co loi lay phieu nhap",$error$$),$callback$jscomp$0$$($error$$);$callback$jscomp$0$$(null,$vouchers_n$$)})})})},nhap_dc:$callback$$=>{if($ma_kho$$){let $query_sokho_pnc$$=
14
- {id_app:$id_app$$,ma_ct:"PNC",ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},$or:[{ma_kho_x:$ma_kho$$},{"details.ma_kho_x":$ma_kho$$}],"details.px_gia_dd":!1};global.getModel("pnc").find($query_sokho_pnc$$).then($pnc$$=>{console.log("S\u1ed1 phi\u1ebfu nh\u1eadp \u0111i\u1ec1u chuy\u1ec3n c\u1ee7a kho",$ma_kho$$,$pnc$$.length);$pnc$$.forEach($p$$=>{$vouchers_n$$[$p$$._id.toString()]=$p$$});$callback$$()}).catch($e$$=>{console.log("co loi lay phieu nhap dieu chuyen",$e$$);return $callback$$($e$$)})}else $callback$$()}},
15
- function($error$jscomp$0$$){if($error$jscomp$0$$)return $fn$$($error$jscomp$0$$);async.waterfall([function($callback$jscomp$0$$){async.map(_.values($vouchers_x$$),($voucher_x$$,$callback$$)=>{setImmediate(()=>{(async()=>{var $details_details_doi_details_kmc$$=$voucher_x$$.details.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$d$$.ma_kho_x||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x)));await Promise.all($details_details_doi_details_kmc$$.map($d$$=>
16
- (async()=>{var $gia$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$$=$gia$$?$gia$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$)})()));$voucher_x$$.details_doi&&($details_details_doi_details_kmc$$=$voucher_x$$.details_doi.filter($d$$=>
17
- (!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x))),await Promise.all($details_details_doi_details_kmc$$.map($d$$=>(async()=>{var $gia$jscomp$3_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$3_gia_chuan$$=$gia$jscomp$3_gia_chuan$$?$gia$jscomp$3_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();
18
- $qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$3_gia_chuan$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$)})())));await Promise.all($voucher_x$$.details.filter($d$$=>$d$$.promotion&&$d$$.promotion.details_km).map($d$jscomp$0$$=>(async()=>{const $details_km$$=$d$jscomp$0$$.promotion.details_km.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||
19
- $ma_kho$$===($d$$.ma_kho||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x)));await Promise.all($details_km$$.map($d$$=>(async()=>{var $gia$jscomp$4_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$4_gia_chuan$$=$gia$jscomp$4_gia_chuan$$?$gia$jscomp$4_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=
20
- $gia$jscomp$4_gia_chuan$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||$d$$.sl_km||0)*$d$$.gia_von,$f_tien$$)})()))})()));await Promise.all($voucher_x$$.details.filter($d$$=>$d$$.combo&&0<$d$$.combo.length&&!$d$$.px_gia_dd).map($detail$$=>(async()=>{const $combo$$=$detail$$.combo.filter($c$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$c$$.ma_vt)&&(!$ma_kho$$||$ma_kho$$===($detail$$.ma_kho||$detail$$.ma_kho_x||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x)));await Promise.all($combo$$.map($d$$=>
21
- (async()=>{var $gia$jscomp$5_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$5_gia_chuan$$=$gia$jscomp$5_gia_chuan$$?$gia$jscomp$5_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$5_gia_chuan$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||0)*$d$$.gia_von,
22
- $f_tien$$)})()));$detail$$.tien_xuat=$detail$$.tien_xuat_nt=$detail$$.combo.map($c$$=>$c$$.tien_xuat_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$detail$$.gia_von=$detail$$.gia_von_nt=Math.roundBy($detail$$.sl_xuat?$detail$$.tien_xuat_nt/$detail$$.sl_xuat:0,$f_tien$$)})()));$voucher_x$$.promotion&&($details_details_doi_details_kmc$$=$voucher_x$$.promotion.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x))),
23
- await Promise.all($details_details_doi_details_kmc$$.map($d$$=>(async()=>{var $gia$jscomp$6_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$6_gia_chuan$$=$gia$jscomp$6_gia_chuan$$?$gia$jscomp$6_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von_nt=$gia$jscomp$6_gia_chuan$$*$he_so_qd$$;$d$$.gia_von=$d$$.gia_von_nt;
24
- $d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||$d$$.sl_km||0)*$d$$.gia_von,$f_tien$$);$d$$.tien_xuat=$d$$.tien_xuat_nt})())));let $voucher_x_data$$=$voucher_x$$.toObject();try{const $ctrl$$=global.controllers[$voucher_x$$.ma_ct.toUpperCase()];await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucher_x$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher_x$$._id},$voucher_x_data$$)}catch($e$$){return $callback$$($e$$)}let $ctrl$jscomp$0$$=global.controllers[$voucher_x_data$$.ma_ct.toUpperCase()];
25
- $ctrl$jscomp$0$$&&$ctrl$jscomp$0$$.post&&await (async()=>new Promise(($resolve$$,$reject$$)=>{Controller.postData($voucher_x_data$$,$ctrl$jscomp$0$$,($e$$,$rs$$)=>{if($e$$)return console.error("error repost khi tinh gia trung binh",$e$$,$voucher_x_data$$),$reject$$($e$$);$resolve$$($rs$$)},{kiem_tra_han_muc_cong_no:!1})}))()})().then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})})},$error$$=>{$callback$jscomp$0$$($error$$,$vouchers_x$$)})},function($_vouchers_x$$,$callback$jscomp$0$$){async.map(_.values($vouchers_n$$),
26
- ($voucher_n$$,$callback$$)=>{setImmediate(()=>{(async()=>{var $details_doi$$=$voucher_n$$.details.filter($d$$=>(!$d$$.combo||0==$d$$.combo.length)&&(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&($d$$.pn_gia_tb||"PNC"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd||"PKK"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd)&&(!$ma_kho$$||$ma_kho$$===$d$$.ma_kho||$ma_kho$$===$d$$.ma_kho_x||$ma_kho$$===$voucher_n$$.ma_kho||$ma_kho$$===$voucher_n$$.ma_kho_n));await Promise.all($details_doi$$.map($d$$=>(async()=>{var $gia$jscomp$7_gia_chuan$$=
27
- _.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$7_gia_chuan$$=$gia$jscomp$7_gia_chuan$$?$gia$jscomp$7_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$vouchers_n$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von_nt=$gia$jscomp$7_gia_chuan$$*$he_so_qd$$;$d$$.gia_von=$d$$.gia_von_nt;"PNC"===$voucher_n$$.ma_ct||"PKK"===$voucher_n$$.ma_ct?($d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*
28
- $d$$.gia_von,$f_tien$$),$d$$.tien_xuat=$d$$.tien_xuat_nt):($d$$.tien_nhap_nt=Math.roundBy($d$$.sl_nhap*$d$$.gia_von,$f_tien$$),$d$$.tien_nhap=$d$$.tien_nhap_nt)})()));await Promise.all($voucher_n$$.details.filter($d$$=>$d$$.combo&&0<$d$$.combo.length&&($d$$.pn_gia_tb||"PNC"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd||"PKK"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd)).map($detail$$=>(async()=>{const $combo$$=$detail$$.combo.filter($c$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$c$$.ma_vt)&&(!$ma_kho$$||$ma_kho$$===
29
- ($detail$$.ma_kho||$voucher_n$$.ma_kho||$voucher_n$$.ma_kho_n)));await Promise.all($combo$$.map($d$$=>(async()=>{var $gia$jscomp$8_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$8_gia_chuan$$=$gia$jscomp$8_gia_chuan$$?$gia$jscomp$8_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_n$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$8_gia_chuan$$*
30
- $he_so_qd$$;"PNC"===$voucher_n$$.ma_ct||"PKK"===$voucher_n$$.ma_ct?($d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$),$d$$.tien_xuat=$d$$.tien_xuat_nt):($d$$.tien_nhap_nt=Math.roundBy($d$$.sl_nhap*$d$$.gia_von,$f_tien$$),$d$$.tien_nhap=$d$$.tien_nhap_nt)})()));"PNC"===$voucher_n$$.ma_ct||"PKK"===$voucher_n$$.ma_ct?($detail$$.tien_xuat=$detail$$.tien_xuat_nt=$detail$$.combo.map($c$$=>$c$$.tien_xuat_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$detail$$.gia_von=$detail$$.gia_von_nt=Math.roundBy($detail$$.sl_xuat?
31
- $detail$$.tien_xuat_nt/$detail$$.sl_xuat:0,$f_tien$$)):($detail$$.tien_nhap=$detail$$.tien_nhap_nt=$detail$$.combo.map($c$$=>$c$$.tien_nhap_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$detail$$.gia_von=$detail$$.gia_von_nt=Math.roundBy($detail$$.sl_nhap?$detail$$.tien_nhap_nt/$detail$$.sl_nhap:0,$f_tien$$))})()));$voucher_n$$.details_doi&&($details_doi$$=$voucher_n$$.details_doi.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&$d$$.pn_gia_tb&&(!$ma_kho$$||$ma_kho$$===$d$$.ma_kho)),
32
- await Promise.all($details_doi$$.map($d$$=>(async()=>{var $gia$jscomp$9_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$9_gia_chuan$$=$gia$jscomp$9_gia_chuan$$?$gia$jscomp$9_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$vouchers_n$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von_nt=$gia$jscomp$9_gia_chuan$$*$he_so_qd$$;$d$$.gia_von=$d$$.gia_von_nt;$d$$.tien_xuat_nt=
33
- Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$);$d$$.tien_xuat=$d$$.tien_xuat_nt})())));let $voucher_n_data$$=$voucher_n$$.toObject();try{const $ctrl$$=global.controllers[$voucher_n_data$$.ma_ct.toUpperCase()];await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucher_n_data$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher_n_data$$._id},$voucher_n_data$$)}catch($e$$){return $callback$$($e$$)}let $ctrl$jscomp$0$$=global.controllers[$voucher_n_data$$.ma_ct.toUpperCase()];$ctrl$jscomp$0$$&&
34
- $ctrl$jscomp$0$$.post&&await (async()=>new Promise(($resolve$$,$reject$$)=>{Controller.postData($voucher_n_data$$,$ctrl$jscomp$0$$,function($e$$,$rs$$){if($e$$)return console.error("error repost khi tinh gia trung binh",$e$$,$voucher_n_data$$),$reject$$($e$$);$resolve$$($rs$$)},{kiem_tra_han_muc_cong_no:!1})}))()})().then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})})},function($error$$){$callback$jscomp$0$$($error$$)})}],function($e$jscomp$1$$){if($e$jscomp$1$$)return $fn$$($e$jscomp$1$$);
35
- $e$jscomp$1$$={id_app:$condition$$.id_app,ngay:$den_ngay$$,chenh_lech:1};$condition$$.ma_vt&&($e$jscomp$1$$.ma_vt=$condition$$.ma_vt);$condition$$.ma_kho&&($e$jscomp$1$$.ma_kho=$condition$$.ma_kho);ckvt($e$jscomp$1$$,($e$jscomp$0$$,$rs$jscomp$0$$)=>{if($e$jscomp$0$$)return $fn$$($e$jscomp$0$$);$rs$jscomp$0$$=_.filter($rs$jscomp$0$$,$r$$=>0!==$r$$.du00&&(0==$r$$.ton00||.001>Math.abs($r$$.ton00)));$vouchers_x$$=_.sortBy(_.values($vouchers_x$$),$v$$=>-(new Date($v$$.ngay_ct)).getTime());$vouchers_n$$=
36
- _.sortBy(_.values($vouchers_n$$),$v$$=>-(new Date($v$$.ngay_ct)).getTime());let $chung_tu_cap_nhat_chenh_lech$$={};async.map($rs$jscomp$0$$,($vt$$,$callback$$)=>{setImmediate(()=>{let $d_voucher$$=null;($d_voucher$$=_.find($vouchers_x$$,$x$$=>_.find($x$$.details,$vc$$=>{if($vc$$.ma_vt!=$vt$$.ma_vt||$vc$$.px_gia_dd||$ma_kho$$&&$ma_kho$$!==$vc$$.ma_kho&&$ma_kho$$!==$x$$.ma_kho)return!1;$vc$$.tien_xuat_nt+=$vt$$.du00;$vc$$.tien_xuat=Math.roundBy($vc$$.tien_xuat_nt,$f_tien$$);$vc$$.sl_xuat&&($vc$$.gia_von_nt=
37
- $vc$$.gia_von=Math.roundBy($vc$$.tien_xuat_nt/$vc$$.sl_xuat,0));return!0})))||($d_voucher$$=_.find($vouchers_n$$,$n$$=>_.find($n$$.details,$vc$$=>{if($vc$$.ma_vt!=$vt$$.ma_vt||$vc$$.pn_gia_tb||$ma_kho$$&&$ma_kho$$!==$vc$$.ma_kho&&$ma_kho$$!==$n$$.ma_kho)return!1;$vc$$.tien_nhap_nt-=$vt$$.du00;$vc$$.tien_nhap=Math.roundBy($vc$$.tien_nhap_nt,$f_tien$$);$vc$$.sl_nhap&&($vc$$.gia_von_nt=$vc$$.gia_von=Math.roundBy($vc$$.tien_nhap_nt/$vc$$.sl_nhap,0));return!0})));$d_voucher$$&&($chung_tu_cap_nhat_chenh_lech$$[$d_voucher$$._id.toString()]=
38
- $d_voucher$$);$callback$$(null,$d_voucher$$)})},$_vouchers_chenh_lech_e$$=>{if($_vouchers_chenh_lech_e$$)return $fn$$($_vouchers_chenh_lech_e$$);$_vouchers_chenh_lech_e$$=_.values($chung_tu_cap_nhat_chenh_lech$$);async.map($_vouchers_chenh_lech_e$$,($voucher$$,$callback$$)=>{setImmediate(async()=>{try{let $voucher_data$$=$voucher$$.toObject();const $ctrl$$=global.controllers[$voucher_data$$.ma_ct.toUpperCase()];await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucher_data$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher_data$$._id},
39
- $voucher_data$$);$ctrl$$&&$ctrl$$.post?Controller.postData($voucher_data$$,$ctrl$$,($e$$,$rs$$)=>{$e$$&&console.error("error repost khi tinh gia trung binh",$e$$,$voucher_data$$);$callback$$($e$$,$rs$$)},{kiem_tra_han_muc_cong_no:!1}):$callback$$(null)}catch($error$$){return $callback$$($error$$)}})},async $e$$=>{if($e$$)return $fn$$($e$$);$bang_gia$$.joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt"}],()=>{$fn$$(null,$bang_gia$$)})})})})})})})})})}else $fn$$("L\u1ed7i: T\u00ednh n\u0103ng n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_thang,den_thang,nam,id_app")};
5
+ $gia$$.id_app=$id_app$$;$gia$$.ma_kho=$ma_kho$$;$gia$$.status=!0;$callback$$(null,$gia$$)})})},function($error$jscomp$2$$,$bang_gia$$){if($error$jscomp$2$$)return $fn$$($error$jscomp$2$$);$error$jscomp$2$$=[];for(let $t$$=$condition$$.tu_thang;$t$$<=$condition$$.den_thang;$t$$++)$error$jscomp$2$$.push($t$$);async.map($error$jscomp$2$$,function($t$$,$callback$jscomp$1$$){async.map($bang_gia$$,function($gia$$,$callback$jscomp$0$$){setImmediate(()=>{$gia$$.thang=$t$$;$gia$$.nam=$condition$$.nam;async.series({savetogiatb:function($callback$$){let $query_delete$$=
6
+ {id_app:$id_app$$,ma_vt:$gia$$.ma_vt,nam:$condition$$.nam,thang:$t$$};$ma_kho$$&&($query_delete$$.ma_kho=$ma_kho$$);giatb.deleteMany($query_delete$$,function($error$jscomp$0$$){if($error$jscomp$0$$)return $callback$$($error$jscomp$0$$);giatb.create($gia$$,function($error$$,$result$$){if($error$$)return console.log("Loi khi luu vao bang gia trung binh thang vat tu "+$gia$$.ma_vt,$error$$),$callback$$($error$$);$callback$$(null,$result$$)})})}},function($error$$){if($error$$)return $callback$jscomp$0$$($error$$);
7
+ $callback$jscomp$0$$(null)})})},function($error$$){if($error$$)return $callback$jscomp$1$$($error$$);$callback$jscomp$1$$(null)})},function($error$jscomp$1$$){if($error$jscomp$1$$)return $fn$$($error$jscomp$1$$);let $vouchers_x$$={},$vouchers_n$$={},$ma_vts$$=$bang_gia$$.map($v$$=>$v$$.ma_vt);async.parallel({xuat:function($callback$jscomp$0$$){setImmediate(()=>{let $query_sokho_x$$={id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:2,ma_vt:{$in:$ma_vts$$},px_gia_dd:!1};$ma_kho$$&&($query_sokho_x$$.ma_kho=
8
+ $ma_kho$$);sokho.find($query_sokho_x$$).lean().exec(function($error$jscomp$0$$,$sks$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);if(!$sks$$||0===$sks$$.length)return $callback$jscomp$0$$(null,$vouchers_x$$);async.mapSeries($sks$$,function($sk$$,$callback$$){let $voucher$$=$vouchers_x$$[$sk$$.id_ct];var $ct_ctrl$$=global.controllers[$sk$$.ma_ct.toUpperCase()];$ct_ctrl$$=$ct_ctrl$$?$ct_ctrl$$.getProperty("model"):mongoose.models[$sk$$.ma_ct.toLowerCase()];!$voucher$$&&$ct_ctrl$$?
9
+ $ct_ctrl$$.findById($sk$$.id_ct,function($error$$,$v$$){if($error$$)return $callback$$($error$$);$v$$?($voucher$$=$v$$,$vouchers_x$$[$sk$$.id_ct]=$voucher$$):(sokho.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi sokho",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}),socai.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu xuat. chuong trinh da xoa phieu nay khoi socai",
10
+ $sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}));$callback$$()}):$callback$$()},function($error$$){if($error$$)return console.error("co loi lay phieu xuat",$error$$),$callback$jscomp$0$$($error$$);$callback$jscomp$0$$(null,$vouchers_x$$)})})})},nhap:function($callback$jscomp$0$$){setImmediate(()=>{let $query_sokho_n$$={id_app:$id_app$$,ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},nxt:1,ma_vt:{$in:$ma_vts$$},pn_gia_tb:!0,ma_ct:{$ne:"PXC"}};$ma_kho$$&&($query_sokho_n$$.ma_kho=$ma_kho$$);
11
+ sokho.find($query_sokho_n$$,function($error$jscomp$0$$,$sks$$){if($error$jscomp$0$$)return $callback$jscomp$0$$($error$jscomp$0$$);if(!$sks$$||0===$sks$$.length)return $callback$jscomp$0$$(null,$vouchers_n$$);async.map($sks$$,function($sk$$,$callback$$){let $voucher$$=$vouchers_n$$[$sk$$.id_ct];var $ct$jscomp$1_ctrl$$=global.controllers[$sk$$.ma_ct.toUpperCase()];$ct$jscomp$1_ctrl$$=$ct$jscomp$1_ctrl$$?$ct$jscomp$1_ctrl$$.getProperty("model"):mongoose.models[$sk$$.ma_ct.toLowerCase()];!$voucher$$&&
12
+ $ct$jscomp$1_ctrl$$?$ct$jscomp$1_ctrl$$.findById($sk$$.id_ct,function($error$$,$v$$){if($error$$)return $callback$$($error$$);$v$$?($voucher$$=$v$$,$vouchers_n$$[$sk$$.id_ct]=$voucher$$):(sokho.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu nhap. chuong trinh da xoa phieu nay khoi sokho",$sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}),socai.deleteMany({id_ct:$sk$$.id_ct.toString()},($e$$,$rs$$)=>{console.log("Khong tim thay phieu nhap. chuong trinh da xoa phieu nay khoi socai",
13
+ $sk$$.id_ct,"ma_ct",$sk$$.ma_ct,$sk$$.so_ct,$sk$$.ngay_ct,$rs$$)}));$callback$$()}):$callback$$()},function($error$$){if($error$$)return console.log("co loi lay phieu nhap",$error$$),$callback$jscomp$0$$($error$$);$callback$jscomp$0$$(null,$vouchers_n$$)})})})},nhap_dc:$callback$$=>{if($ma_kho$$){let $query_sokho_pnc$$={id_app:$id_app$$,ma_ct:"PNC",ngay_ct:{$gte:$tu_ngay$$,$lte:$den_ngay$$},$or:[{ma_kho_x:$ma_kho$$},{"details.ma_kho_x":$ma_kho$$}],"details.px_gia_dd":!1};global.getModel("pnc").find($query_sokho_pnc$$).then($pnc$$=>
14
+ {console.log("S\u1ed1 phi\u1ebfu nh\u1eadp \u0111i\u1ec1u chuy\u1ec3n c\u1ee7a kho",$ma_kho$$,$pnc$$.length);$pnc$$.forEach($p$$=>{$vouchers_n$$[$p$$._id.toString()]=$p$$});$callback$$()}).catch($e$$=>{console.log("co loi lay phieu nhap dieu chuyen",$e$$);return $callback$$($e$$)})}else $callback$$()}},function($error$jscomp$0$$){if($error$jscomp$0$$)return $fn$$($error$jscomp$0$$);async.waterfall([function($callback$jscomp$0$$){async.map(_.values($vouchers_x$$),($voucher_x$$,$callback$$)=>{setImmediate(()=>
15
+ {(async()=>{var $details_details_doi_details_kmc$$=$voucher_x$$.details.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$d$$.ma_kho_x||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x)));await Promise.all($details_details_doi_details_kmc$$.map($d$$=>(async()=>{var $gia$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$$=$gia$$?$gia$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,
16
+ ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$)})()));$voucher_x$$.details_doi&&($details_details_doi_details_kmc$$=$voucher_x$$.details_doi.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x))),await Promise.all($details_details_doi_details_kmc$$.map($d$$=>
17
+ (async()=>{var $gia$jscomp$3_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$3_gia_chuan$$=$gia$jscomp$3_gia_chuan$$?$gia$jscomp$3_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$3_gia_chuan$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$)})())));
18
+ await Promise.all($voucher_x$$.details.filter($d$$=>$d$$.promotion&&$d$$.promotion.details_km).map($d$jscomp$0$$=>(async()=>{const $details_km$$=$d$jscomp$0$$.promotion.details_km.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x)));await Promise.all($details_km$$.map($d$$=>(async()=>{var $gia$jscomp$4_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$4_gia_chuan$$=
19
+ $gia$jscomp$4_gia_chuan$$?$gia$jscomp$4_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$4_gia_chuan$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||$d$$.sl_km||0)*$d$$.gia_von,$f_tien$$)})()))})()));await Promise.all($voucher_x$$.details.filter($d$$=>$d$$.combo&&0<$d$$.combo.length&&
20
+ !$d$$.px_gia_dd).map($detail$$=>(async()=>{const $combo$$=$detail$$.combo.filter($c$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$c$$.ma_vt)&&(!$ma_kho$$||$ma_kho$$===($detail$$.ma_kho||$detail$$.ma_kho_x||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x)));await Promise.all($combo$$.map($d$$=>(async()=>{var $gia$jscomp$5_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$5_gia_chuan$$=$gia$jscomp$5_gia_chuan$$?$gia$jscomp$5_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,
21
+ ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$5_gia_chuan$$*$he_so_qd$$;$d$$.tien_xuat=$d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||0)*$d$$.gia_von,$f_tien$$)})()));$detail$$.tien_xuat=$detail$$.tien_xuat_nt=$detail$$.combo.map($c$$=>$c$$.tien_xuat_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$detail$$.gia_von=$detail$$.gia_von_nt=Math.roundBy($detail$$.sl_xuat?$detail$$.tien_xuat_nt/$detail$$.sl_xuat:
22
+ 0,$f_tien$$)})()));$voucher_x$$.promotion&&($details_details_doi_details_kmc$$=$voucher_x$$.promotion.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&!$d$$.px_gia_dd&&(!$ma_kho$$||$ma_kho$$===($d$$.ma_kho||$voucher_x$$.ma_kho||$voucher_x$$.ma_kho_x))),await Promise.all($details_details_doi_details_kmc$$.map($d$$=>(async()=>{var $gia$jscomp$6_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$6_gia_chuan$$=$gia$jscomp$6_gia_chuan$$?$gia$jscomp$6_gia_chuan$$.gia:
23
+ 0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_x$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von_nt=$gia$jscomp$6_gia_chuan$$*$he_so_qd$$;$d$$.gia_von=$d$$.gia_von_nt;$d$$.tien_xuat_nt=Math.roundBy(($d$$.sl_xuat||$d$$.sl_km||0)*$d$$.gia_von,$f_tien$$);$d$$.tien_xuat=$d$$.tien_xuat_nt})())));let $voucher_x_data$$=$voucher_x$$.toObject();try{const $ctrl$$=global.controllers[$voucher_x$$.ma_ct.toUpperCase()];
24
+ await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucher_x$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher_x$$._id},$voucher_x_data$$)}catch($e$$){return $callback$$($e$$)}let $ctrl$jscomp$0$$=global.controllers[$voucher_x_data$$.ma_ct.toUpperCase()];$ctrl$jscomp$0$$&&$ctrl$jscomp$0$$.post&&await (async()=>new Promise(($resolve$$,$reject$$)=>{Controller.postData($voucher_x_data$$,$ctrl$jscomp$0$$,($e$$,$rs$$)=>{if($e$$)return console.error("error repost khi tinh gia trung binh",$e$$,$voucher_x_data$$),
25
+ $reject$$($e$$);$resolve$$($rs$$)},{kiem_tra_han_muc_cong_no:!1})}))()})().then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})})},$error$$=>{$callback$jscomp$0$$($error$$,$vouchers_x$$)})},function($_vouchers_x$$,$callback$jscomp$0$$){async.map(_.values($vouchers_n$$),($voucher_n$$,$callback$$)=>{setImmediate(()=>{(async()=>{var $details_doi$$=$voucher_n$$.details.filter($d$$=>(!$d$$.combo||0==$d$$.combo.length)&&(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&($d$$.pn_gia_tb||
26
+ "PNC"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd||"PKK"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd)&&(!$ma_kho$$||$ma_kho$$===$d$$.ma_kho||$ma_kho$$===$d$$.ma_kho_x||$ma_kho$$===$voucher_n$$.ma_kho||$ma_kho$$===$voucher_n$$.ma_kho_n));await Promise.all($details_doi$$.map($d$$=>(async()=>{var $gia$jscomp$7_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$7_gia_chuan$$=$gia$jscomp$7_gia_chuan$$?$gia$jscomp$7_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$vouchers_n$$.id_app,
27
+ ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von_nt=$gia$jscomp$7_gia_chuan$$*$he_so_qd$$;$d$$.gia_von=$d$$.gia_von_nt;"PNC"===$voucher_n$$.ma_ct||"PKK"===$voucher_n$$.ma_ct?($d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$),$d$$.tien_xuat=$d$$.tien_xuat_nt):($d$$.tien_nhap_nt=Math.roundBy($d$$.sl_nhap*$d$$.gia_von,$f_tien$$),$d$$.tien_nhap=$d$$.tien_nhap_nt)})()));await Promise.all($voucher_n$$.details.filter($d$$=>
28
+ $d$$.combo&&0<$d$$.combo.length&&($d$$.pn_gia_tb||"PNC"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd||"PKK"===$voucher_n$$.ma_ct&&!$d$$.px_gia_dd)).map($detail$$=>(async()=>{const $combo$$=$detail$$.combo.filter($c$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$c$$.ma_vt)&&(!$ma_kho$$||$ma_kho$$===($detail$$.ma_kho||$voucher_n$$.ma_kho||$voucher_n$$.ma_kho_n)));await Promise.all($combo$$.map($d$$=>(async()=>{var $gia$jscomp$8_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$8_gia_chuan$$=
29
+ $gia$jscomp$8_gia_chuan$$?$gia$jscomp$8_gia_chuan$$.gia:0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$voucher_n$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von=$d$$.gia_von_nt=$gia$jscomp$8_gia_chuan$$*$he_so_qd$$;"PNC"===$voucher_n$$.ma_ct||"PKK"===$voucher_n$$.ma_ct?($d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$),$d$$.tien_xuat=$d$$.tien_xuat_nt):($d$$.tien_nhap_nt=Math.roundBy($d$$.sl_nhap*
30
+ $d$$.gia_von,$f_tien$$),$d$$.tien_nhap=$d$$.tien_nhap_nt)})()));"PNC"===$voucher_n$$.ma_ct||"PKK"===$voucher_n$$.ma_ct?($detail$$.tien_xuat=$detail$$.tien_xuat_nt=$detail$$.combo.map($c$$=>$c$$.tien_xuat_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$detail$$.gia_von=$detail$$.gia_von_nt=Math.roundBy($detail$$.sl_xuat?$detail$$.tien_xuat_nt/$detail$$.sl_xuat:0,$f_tien$$)):($detail$$.tien_nhap=$detail$$.tien_nhap_nt=$detail$$.combo.map($c$$=>$c$$.tien_nhap_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$detail$$.gia_von=
31
+ $detail$$.gia_von_nt=Math.roundBy($detail$$.sl_nhap?$detail$$.tien_nhap_nt/$detail$$.sl_nhap:0,$f_tien$$))})()));$voucher_n$$.details_doi&&($details_doi$$=$voucher_n$$.details_doi.filter($d$$=>(!$condition$$.ma_vt||$condition$$.ma_vt===$d$$.ma_vt)&&$d$$.pn_gia_tb&&(!$ma_kho$$||$ma_kho$$===$d$$.ma_kho)),await Promise.all($details_doi$$.map($d$$=>(async()=>{var $gia$jscomp$9_gia_chuan$$=_.find($bang_gia$$,$vt$$=>$d$$.ma_vt===$vt$$.ma_vt);$gia$jscomp$9_gia_chuan$$=$gia$jscomp$9_gia_chuan$$?$gia$jscomp$9_gia_chuan$$.gia:
32
+ 0;let $he_so_qd$$=1,$qd$$=await dmqddvt.findOne({id_app:$vouchers_n$$.id_app,ma_vt:$d$$.ma_vt,ma_dvt:$d$$.ma_dvt}).lean();$qd$$&&($he_so_qd$$=$qd$$.mau?$qd$$.tu/$qd$$.mau:$qd$$.ty_le_qd);$d$$.gia_von_nt=$gia$jscomp$9_gia_chuan$$*$he_so_qd$$;$d$$.gia_von=$d$$.gia_von_nt;$d$$.tien_xuat_nt=Math.roundBy($d$$.sl_xuat*$d$$.gia_von,$f_tien$$);$d$$.tien_xuat=$d$$.tien_xuat_nt})())));let $voucher_n_data$$=$voucher_n$$.toObject();try{const $ctrl$$=global.controllers[$voucher_n_data$$.ma_ct.toUpperCase()];await ($ctrl$$?
33
+ $ctrl$$.getProperty("model"):mongoose.models[$voucher_n_data$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher_n_data$$._id},$voucher_n_data$$)}catch($e$$){return $callback$$($e$$)}let $ctrl$jscomp$0$$=global.controllers[$voucher_n_data$$.ma_ct.toUpperCase()];$ctrl$jscomp$0$$&&$ctrl$jscomp$0$$.post&&await (async()=>new Promise(($resolve$$,$reject$$)=>{Controller.postData($voucher_n_data$$,$ctrl$jscomp$0$$,function($e$$,$rs$$){if($e$$)return console.error("error repost khi tinh gia trung binh",$e$$,
34
+ $voucher_n_data$$),$reject$$($e$$);$resolve$$($rs$$)},{kiem_tra_han_muc_cong_no:!1})}))()})().then($rs$$=>{$callback$$(null,$rs$$)}).catch($e$$=>{$callback$$($e$$)})})},function($error$$){$callback$jscomp$0$$($error$$)})}],function($e$jscomp$1$$){if($e$jscomp$1$$)return $fn$$($e$jscomp$1$$);$e$jscomp$1$$={id_app:$condition$$.id_app,ngay:$den_ngay$$,chenh_lech:1};$condition$$.ma_vt&&($e$jscomp$1$$.ma_vt=$condition$$.ma_vt);$condition$$.ma_kho&&($e$jscomp$1$$.ma_kho=$condition$$.ma_kho);ckvt($e$jscomp$1$$,
35
+ ($e$jscomp$0$$,$rs$jscomp$0$$)=>{if($e$jscomp$0$$)return $fn$$($e$jscomp$0$$);$rs$jscomp$0$$=_.filter($rs$jscomp$0$$,$r$$=>0!==$r$$.du00&&(0==$r$$.ton00||.001>Math.abs($r$$.ton00)));$vouchers_x$$=_.sortBy(_.values($vouchers_x$$),$v$$=>-(new Date($v$$.ngay_ct)).getTime());$vouchers_n$$=_.sortBy(_.values($vouchers_n$$),$v$$=>-(new Date($v$$.ngay_ct)).getTime());let $chung_tu_cap_nhat_chenh_lech$$={};async.map($rs$jscomp$0$$,($vt$$,$callback$$)=>{setImmediate(()=>{let $d_voucher$$=null;($d_voucher$$=
36
+ _.find($vouchers_x$$,$x$$=>_.find($x$$.details,$vc$$=>{if($vc$$.ma_vt!=$vt$$.ma_vt||$vc$$.px_gia_dd||$ma_kho$$&&$ma_kho$$!==$vc$$.ma_kho&&$ma_kho$$!==$x$$.ma_kho)return!1;$vc$$.tien_xuat_nt+=$vt$$.du00;$vc$$.tien_xuat=Math.roundBy($vc$$.tien_xuat_nt,$f_tien$$);$vc$$.sl_xuat&&($vc$$.gia_von_nt=$vc$$.gia_von=Math.roundBy($vc$$.tien_xuat_nt/$vc$$.sl_xuat,0));return!0})))||($d_voucher$$=_.find($vouchers_n$$,$n$$=>_.find($n$$.details,$vc$$=>{if($vc$$.ma_vt!=$vt$$.ma_vt||$vc$$.pn_gia_tb||$ma_kho$$&&$ma_kho$$!==
37
+ $vc$$.ma_kho&&$ma_kho$$!==$n$$.ma_kho)return!1;$vc$$.tien_nhap_nt-=$vt$$.du00;$vc$$.tien_nhap=Math.roundBy($vc$$.tien_nhap_nt,$f_tien$$);$vc$$.sl_nhap&&($vc$$.gia_von_nt=$vc$$.gia_von=Math.roundBy($vc$$.tien_nhap_nt/$vc$$.sl_nhap,0));return!0})));$d_voucher$$&&($chung_tu_cap_nhat_chenh_lech$$[$d_voucher$$._id.toString()]=$d_voucher$$);$callback$$(null,$d_voucher$$)})},$_vouchers_chenh_lech_e$$=>{if($_vouchers_chenh_lech_e$$)return $fn$$($_vouchers_chenh_lech_e$$);$_vouchers_chenh_lech_e$$=_.values($chung_tu_cap_nhat_chenh_lech$$);
38
+ async.map($_vouchers_chenh_lech_e$$,($voucher$$,$callback$$)=>{setImmediate(async()=>{try{let $voucher_data$$=$voucher$$.toObject();const $ctrl$$=global.controllers[$voucher_data$$.ma_ct.toUpperCase()];await ($ctrl$$?$ctrl$$.getProperty("model"):mongoose.models[$voucher_data$$.ma_ct.toLowerCase()]).updateOne({_id:$voucher_data$$._id},$voucher_data$$);$ctrl$$&&$ctrl$$.post?Controller.postData($voucher_data$$,$ctrl$$,($e$$,$rs$$)=>{$e$$&&console.error("error repost khi tinh gia trung binh",$e$$,$voucher_data$$);
39
+ $callback$$($e$$,$rs$$)},{kiem_tra_han_muc_cong_no:!1}):$callback$$(null)}catch($error$$){return $callback$$($error$$)}})},async $e$$=>{if($e$$)return $fn$$($e$$);$bang_gia$$.joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt"}],()=>{$fn$$(null,$bang_gia$$)})})})})})})})})})}else $fn$$("L\u1ed7i: T\u00ednh n\u0103ng n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: tu_thang,den_thang,nam,id_app")};
@@ -1,6 +1,6 @@
1
1
  'use strict';const dmnt=require("./currency"),accountSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},tk:{type:String,required:"tk is required",uppercase:!0,trim:!0,maxlength:32},ten_tk:{type:String,required:"ten_tk is required",trim:!0,maxlength:1024},ten_tk2:{type:String,maxlength:1024},tk_me:{type:String,default:"",trim:!0,uppercase:!0,maxlength:32},loai_tk:{type:Number,min:0,max:1,default:1,enum:[0,1]},tk_cn:{type:Boolean,default:!1,required:!0},ma_nt:{type:String,uppercase:!0,
2
2
  required:"ma_nt is required",default:"VND",trim:!0,maxlength:32},tk_kho_yn:Boolean,tk_cp_yn:Boolean,tk_bp_yn:Boolean,tk_dt_yn:Boolean,tk_hd_yn:Boolean,tk_nv_yn:Boolean,tk_td1_yn:Boolean,tk_td2_yn:Boolean,tk_td3_yn:Boolean,not_du_co_yn:Boolean,not_du_no_yn:Boolean,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,
3
- default:0},visible_to_users:[String],update_right:[String],delete_right:[String]},{toJSON:{virtuals:!0}});accountSchema.index({id_app:1});accountSchema.index({tk:1});accountSchema.index({ten_tk:1});accountSchema.index({ma_nt:1});accountSchema.index({loai_tk:1});accountSchema.index({tk_cn:1});accountSchema.index({status:1});accountSchema.index({user_created:1,visible_to:1,visible_to_users:1});accountSchema.index({date_created:1});accountSchema.index({date_updated:1});
4
- accountSchema.index({id_app:1,tk:1},{unique:!0});accountSchema.index({ten_tk:"text",ten_tk2:"text",tk:"text",ma_nt:"text"},{name:"account_index"});accountSchema.validate={ma_nt:[function($id_app$$,$value$$,$callback$$){if(!$value$$)return $callback$$(!0);dmnt.findOne({id_app:$id_app$$,ma_nt:$value$$},function($error$$,$nt$$){if($error$$)return $callback$$(!1);$nt$$&&$callback$$(!0)})},"M\u00e3 ngo\u1ea1i t\u1ec7 kh\u00f4ng t\u1ed3n t\u1ea1i"]};
5
- const model=mongoose.models.account||mongoose.model("account",accountSchema);model.referenceKeys={tk:[{model:"vsocai",key:"tk",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"},{model:"cdtk",key:"tk",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"},{model:"cdkh",key:"tk",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"},{model:"dmvt",key:"tk_vt",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"}]};
6
- module.exports=model;
3
+ default:0},visible_to_users:[String],update_right:[String],delete_right:[String]},{toJSON:{virtuals:!0}});
4
+ (global.configs||{}).createIndexes&&(accountSchema.index({id_app:1}),accountSchema.index({tk:1}),accountSchema.index({ten_tk:1}),accountSchema.index({ma_nt:1}),accountSchema.index({loai_tk:1}),accountSchema.index({tk_cn:1}),accountSchema.index({status:1}),accountSchema.index({user_created:1,visible_to:1,visible_to_users:1}),accountSchema.index({date_created:1}),accountSchema.index({date_updated:1}),accountSchema.index({id_app:1,tk:1},{unique:!0}),accountSchema.index({ten_tk:"text",ten_tk2:"text",
5
+ tk:"text",ma_nt:"text"},{name:"account_index"}));accountSchema.validate={ma_nt:[function($id_app$$,$value$$,$callback$$){if(!$value$$)return $callback$$(!0);dmnt.findOne({id_app:$id_app$$,ma_nt:$value$$},function($error$$,$nt$$){if($error$$)return $callback$$(!1);$nt$$&&$callback$$(!0)})},"M\u00e3 ngo\u1ea1i t\u1ec7 kh\u00f4ng t\u1ed3n t\u1ea1i"]};const model=mongoose.models.account||mongoose.model("account",accountSchema);
6
+ model.referenceKeys={tk:[{model:"vsocai",key:"tk",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"},{model:"cdtk",key:"tk",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"},{model:"cdkh",key:"tk",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"},{model:"dmvt",key:"tk_vt",error:"T\u00e0i kho\u1ea3n ${obj.tk} \u0111\u00e3 ph\u00e1t sinh d\u1eef li\u1ec7u"}]};module.exports=model;
@@ -1,2 +1,2 @@
1
- 'use strict';const afflinkScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},title:{type:String,required:!0},page_link:{type:String,required:!0},of_user:String,da_truy_cap:{type:Number,default:0},da_dat_hang:{type:Number,default:0},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:""}});afflinkScheam.index({id_app:1});afflinkScheam.index({status:1});
2
- afflinkScheam.index({of_user:1});afflinkScheam.index({user_created:1,visible_to:1,visible_to_users:1});module.exports=mongoose.models.afflink||mongoose.model("afflink",afflinkScheam);
1
+ 'use strict';const afflinkScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},title:{type:String,required:!0},page_link:{type:String,required:!0},of_user:String,da_truy_cap:{type:Number,default:0},da_dat_hang:{type:Number,default:0},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&&(afflinkScheam.index({id_app:1}),afflinkScheam.index({status:1}),afflinkScheam.index({of_user:1}),afflinkScheam.index({user_created:1,visible_to:1,visible_to_users:1}));module.exports=mongoose.models.afflink||mongoose.model("afflink",afflinkScheam);
@@ -5,7 +5,7 @@ nguoi_nop_thue:{type:String,maxlength:1024},giam_doc:{type:String,maxlength:1024
5
5
  default:24},logo:{type:String,maxlength:1024},logo_watermark:{type:String,maxlength:1024},account_types_accept:[],options:{},allow_modules:[String],partner:String,server:String,owner:String,default_password:String,google_credentials:String,email_host:String,email_port:Number,email_secure:{type:Boolean,default:!0},email_authMethod:{type:String,default:"LOGIN"},email_user:String,email_pass:String,email_name:String,viettel_version:{type:String,maxlength:1024},viettel_user:{type:String,maxlength:1024},
6
6
  viettel_password:{type:String,maxlength:1024},viettel_token:{type:String},viettel_url_service:{type:String,maxlength:1024},viettel_direct_issue:Boolean,vnpt_user:{type:String,maxlength:1024},vnpt_password:{type:String,maxlength:1024},vnpt_url_service:{type:String,maxlength:1024},ma_hoa_don:String,ky_hieu_hoa_don:String,so_serial:String,sip_uri:String,sip_password:String,sip_websocket:String,voiip_access_token:String,voiip_webhook:String,zalo_app_id:String,zalo_secret_key:String,zalo_code:String,zalo_oa_id:String,
7
7
  zalo_code_verifier:String,zalo_code_challenge:String,zalo_access_token:String,zalo_refresh_token:String,zalo_expires_in:Number,zalo_updated:Date,zalo_otp_template_id:String,exfields:global.Schema.Types.Mixed,domain:String,ssl_key:String,ssl_cert:String,ssl_ca:String,expire_date:Date,trang_thai:{type:String,default:"0"},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,
8
- default:""}});appScheam.index({app_code:1},{unique:!0});appScheam.index({name:1,province:1});appScheam.index({menu_code:1});appScheam.index({trang_thai:1});appScheam.index({sale_online:1});appScheam.index({date_created:1});appScheam.index({date_updated:1});appScheam.index({user_created:"text"},{name:"app_index_created"});appScheam.index({name:"text",province:"text",name_en:"text",address:"text",phone:"text",email:"text",ma_so_thue:"text"},{name:"app_index"});
8
+ default:""}});(global.configs||{}).createIndexes&&(appScheam.index({app_code:1},{unique:!0}),appScheam.index({name:1,province:1}),appScheam.index({menu_code:1}),appScheam.index({trang_thai:1}),appScheam.index({sale_online:1}),appScheam.index({date_created:1}),appScheam.index({date_updated:1}),appScheam.index({user_created:"text"},{name:"app_index_created"}),appScheam.index({name:"text",province:"text",name_en:"text",address:"text",phone:"text",email:"text",ma_so_thue:"text"},{name:"app_index"}));
9
9
  const App=global.mongoose.models.app||global.mongoose.model("app",appScheam);
10
10
  App.participants=async $app$$=>{_.isString($app$$)&&($app$$=await App.getInfo($app$$));let $participants$$=await Participant.find({id_app:$app$$._id});if($app$$.user_created&&!$participants$$.find($p$$=>$p$$.email===$app$$.user_created)){let $_p$$={email:$app$$.user_created,name:$app$$.user_created.split("@")[0],admin:!0,active:!0,cancel:!1,id_app:$app$$._id};$participants$$.push($_p$$);Participant.createParticipant($_p$$,$e$$=>{$e$$&&console.error("create participant for user owner",$e$$)})}return $participants$$};
11
11
  App.getInfo=async function($id_app$$,$field$$){return new Promise(($resolve$$,$reject$$)=>{App.findOne({_id:$id_app$$}).lean().exec(($e$$,$rs$$)=>{if($e$$||!$rs$$)return $reject$$(Error($e$$?$e$$.message:"App is not exists"));$resolve$$($field$$?$rs$$[$field$$]:$rs$$)})})};
@@ -1,7 +1,8 @@
1
1
  'use strict';const App=require("./app"),Options=require("./options"),ngcompile=require("ng-node-compile"),utils=require("../libs/utils"),File=require("./file"),underscore=require("underscore"),crypto=require("crypto"),moment=require("moment"),participant=require("./participant"),_=require("lodash"),approveSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},id_ct:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,required:!0,maxlength:32,trim:!0},trang_thai:{type:String},user_request:{type:String,
2
2
  required:!0,maxlength:128,trim:!0},user_request_name:{type:String,required:!0,maxlength:1024},template_content:String,request_content:String,user_approves:[{email:{type:String,maxlength:128,trim:!0},name:{type:String,maxlength:1024}}],user_approved:{type:String,maxlength:128,trim:!0},user_approved_name:{type:String,maxlength:1024},date_approved:Date,approved_reason:String,user_denied:{type:String,maxlength:128,trim:!0},user_denied_name:{type:String,maxlength:1024},date_denied:Date,denied_reason:{type:String,
3
- maxlength:4E3},update_after_approve:Schema.Types.Mixed,update_after_deny:Schema.Types.Mixed,title:{type:String,maxlength:1024},data:Schema.Types.Mixed,status:{type:Boolean,default:!1},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:2},visible_to_users:[String]});approveSchema.index({id_ct:1,id_app:1});approveSchema.index({trang_thai:1});approveSchema.index({user_approved:1});
4
- approveSchema.index({user_denied:1});approveSchema.index({status:1});approveSchema.index({date_created:1});approveSchema.index({date_updated:1});approveSchema.index({user_request:"text",user_request_name:"text"},{name:"approve_index"});const model=mongoose.models.approve||mongoose.model("approve",approveSchema);let renderRequests=$requests$$=>$requests$$&&0!==$requests$$.length?`
3
+ maxlength:4E3},update_after_approve:Schema.Types.Mixed,update_after_deny:Schema.Types.Mixed,title:{type:String,maxlength:1024},data:Schema.Types.Mixed,status:{type:Boolean,default:!1},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:2},visible_to_users:[String]});
4
+ (global.configs||{}).createIndexes&&(approveSchema.index({id_ct:1,id_app:1}),approveSchema.index({trang_thai:1}),approveSchema.index({user_approved:1}),approveSchema.index({user_denied:1}),approveSchema.index({status:1}),approveSchema.index({date_created:1}),approveSchema.index({date_updated:1}),approveSchema.index({user_request:"text",user_request_name:"text"},{name:"approve_index"}));const model=mongoose.models.approve||mongoose.model("approve",approveSchema);
5
+ let renderRequests=$requests$$=>$requests$$&&0!==$requests$$.length?`
5
6
  <p style='margin-top:50px'>
6
7
  <hr/>
7
8
  <h5>Danh s\u00e1ch \u0111\u00e3 duy\u1ec7t ho\u1eb7c t\u1eeb ch\u1ed1i</h5>
@@ -1,4 +1,4 @@
1
- 'use strict';const assabcihandlerSchema=new Schema({id_app:{type:String,required:!0},event:{type:String,required:!0,uppercase:!0},id:{type:String,required:!0},trang_thai:{type:String,default:"0"},date_created:{type:Date,default:Date.now},data:Schema.Types.Mixed});assabcihandlerSchema.index({id_app:1,event:1,id:1},{unique:!0});const model=mongoose.models.assabcihandler||mongoose.model("assabcihandler",assabcihandlerSchema),moment=require("moment"),async=require("async");
1
+ 'use strict';const assabcihandlerSchema=new Schema({id_app:{type:String,required:!0},event:{type:String,required:!0,uppercase:!0},id:{type:String,required:!0},trang_thai:{type:String,default:"0"},date_created:{type:Date,default:Date.now},data:Schema.Types.Mixed});(global.configs||{}).createIndexes&&assabcihandlerSchema.index({id_app:1,event:1,id:1},{unique:!0});const model=mongoose.models.assabcihandler||mongoose.model("assabcihandler",assabcihandlerSchema),moment=require("moment"),async=require("async");
2
2
  model.start=()=>{console.log("abci handler is started");async.forever(function($next$$){setTimeout(async()=>{const $now$$=new Date,$withdraws$$=await global.getModel("asswithdraw").find({trang_thai:"0",status:!0,ngay_xu_ly:{$lte:$now$$}});await new Promise($resolve$$=>{async.mapSeries($withdraws$$,($Withdraw$$,$callback$$)=>{setImmediate(async()=>{let $query_abci$$={id_app:$Withdraw$$.id_app,event:"WITHDRAW",id:$Withdraw$$.id},$abci$$=await model.findOne($query_abci$$);if($abci$$&&"0"==$abci$$.trang_thai&&
3
3
  1>moment().diff(moment($abci$$.date_created),"hours"))return $callback$$();try{$abci$$=new model($query_abci$$),await $abci$$.save()}catch($e$$){return $callback$$()}try{await global.getModel("assbank").sendCoins($Withdraw$$.id_app,$Withdraw$$.product_owner,$Withdraw$$.creator,$Withdraw$$.von,$Withdraw$$.denom,{...$Withdraw$$.toObject(),event:"WITHDRAW",memo:"R\u00fat v\u1ed1n"})}catch($e$$){return $callback$$()}try{$Withdraw$$.lai_truoc_han&&await global.getModel("assbank").sendCoins($Withdraw$$.id_app,
4
4
  $Withdraw$$.product_owner,$Withdraw$$.creator,$Withdraw$$.lai_truoc_han,$Withdraw$$.denom,{...$Withdraw$$.toObject(),event:"INTEREST",memo:"L\u00e3i t\u1eeb \u0111\u1ea7u t\u01b0"}),$Withdraw$$.da_rut_von=!0,$Withdraw$$.trang_thai="5",await $Withdraw$$.save(),$abci$$.data={note:"R\u00fat v\u1ed1n th\u00e0nh c\u00f4ng",obj:$Withdraw$$.toObject()},$abci$$.trang_thai="5",await $abci$$.save(),console.log("lenh rut von nay da duoc thuc hien thanh cong:",$Withdraw$$.id)}catch($e$$){await global.getModel("assbank").sendCoins($Withdraw$$.id_app,