flexbiz-server 12.7.1 → 12.7.2

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 (884) hide show
  1. package/package.json +5 -5
  2. package/server/app.js +23 -348
  3. package/server/cluster.js +1 -5
  4. package/server/models/account.js +7 -0
  5. package/server/models/actionLog.js +2 -0
  6. package/server/models/afflink.js +2 -0
  7. package/server/models/aimemory.js +1 -0
  8. package/server/models/app.js +16 -0
  9. package/server/models/approve.js +95 -0
  10. package/server/models/assabcihandler.js +35 -0
  11. package/server/models/assbank.js +19 -0
  12. package/server/models/assbooking.js +4 -0
  13. package/server/models/assbuy.js +3 -0
  14. package/server/models/asscashwithdraw.js +4 -0
  15. package/server/models/assfindhash.js +2 -0
  16. package/server/models/assinvestment.js +13 -0
  17. package/server/models/assissue.js +2 -0
  18. package/server/models/asskey.js +15 -0
  19. package/server/models/assneedtobuy.js +6 -0
  20. package/server/models/assperiod.js +7 -0
  21. package/server/models/assproduct.js +13 -0
  22. package/server/models/assprofitsharing.js +4 -0
  23. package/server/models/assreceiver.js +2 -0
  24. package/server/models/assrequest.js +10 -0
  25. package/server/models/asssell.js +7 -0
  26. package/server/models/asstransaction.js +3 -0
  27. package/server/models/asstransfer.js +4 -0
  28. package/server/models/assuser_identity.js +4 -0
  29. package/server/models/asswithdraw.js +4 -0
  30. package/server/models/attend.js +2 -0
  31. package/server/models/banggiaban.js +8 -0
  32. package/server/models/bangtinhluong.js +6 -0
  33. package/server/models/base.js +1 -0
  34. package/server/models/bg1.js +9 -0
  35. package/server/models/bg2.js +10 -0
  36. package/server/models/cache.js +3 -0
  37. package/server/models/cacheDataReport.js +2 -0
  38. package/server/models/cacheSessionReport.js +5 -0
  39. package/server/models/calllog.js +4 -0
  40. package/server/models/cart.js +5 -0
  41. package/server/models/cddiem.js +2 -0
  42. package/server/models/cddt.js +3 -0
  43. package/server/models/cdkh.js +5 -0
  44. package/server/models/cdkhtheongay.js +5 -0
  45. package/server/models/cdnphep.js +2 -0
  46. package/server/models/cdtk.js +3 -0
  47. package/server/models/cdtktheongay.js +3 -0
  48. package/server/models/cdvt.js +5 -0
  49. package/server/models/cdvtnpp.js +6 -0
  50. package/server/models/cdvttheongay.js +5 -0
  51. package/server/models/chamcong.js +7 -0
  52. package/server/models/chat_message.js +2 -0
  53. package/server/models/chat_session.js +2 -0
  54. package/server/models/checkin.js +4 -0
  55. package/server/models/checkinactivity.js +3 -0
  56. package/server/models/checkinkpi.js +4 -0
  57. package/server/models/checkinlocation.js +2 -0
  58. package/server/models/chitietluongds.js +12 -0
  59. package/server/models/chitieukpi.js +3 -0
  60. package/server/models/chudethaoluan.js +3 -0
  61. package/server/models/ckgtluong.js +2 -0
  62. package/server/models/colleague.js +2 -0
  63. package/server/models/comment.js +4 -0
  64. package/server/models/congdoansx.js +4 -0
  65. package/server/models/congtacvien.js +4 -0
  66. package/server/models/congthuctinhgiaban.js +8 -0
  67. package/server/models/consultant.js +4 -0
  68. package/server/models/contract.js +6 -0
  69. package/server/models/counter.js +2 -0
  70. package/server/models/csluongtheods.js +3 -0
  71. package/server/models/csphucap.js +2 -0
  72. package/server/models/ctds.js +5 -0
  73. package/server/models/ctds2.js +7 -0
  74. package/server/models/currency.js +3 -0
  75. package/server/models/custom_report.js +1 -0
  76. package/server/models/customer.js +31 -0
  77. package/server/models/customer_care.js +2 -0
  78. package/server/models/data_list_config.js +7 -0
  79. package/server/models/databanle.js +8 -0
  80. package/server/models/datlich.js +4 -0
  81. package/server/models/deal.js +2 -0
  82. package/server/models/dh2.js +20 -0
  83. package/server/models/diagram.js +2 -0
  84. package/server/models/dinhmucsx.js +8 -0
  85. package/server/models/dkhoc.js +6 -0
  86. package/server/models/dknphep.js +2 -0
  87. package/server/models/dmban.js +4 -0
  88. package/server/models/dmbp.js +12 -0
  89. package/server/models/dmca.js +2 -0
  90. package/server/models/dmchietkhau.js +8 -0
  91. package/server/models/dmchietkhauhd.js +19 -0
  92. package/server/models/dmchinhanh.js +2 -0
  93. package/server/models/dmcpmh.js +2 -0
  94. package/server/models/dmdiemthuong.js +3 -0
  95. package/server/models/dmdoi.js +4 -0
  96. package/server/models/dmdoituongdanhgia.js +2 -0
  97. package/server/models/dmdt.js +8 -0
  98. package/server/models/dmdvt.js +3 -0
  99. package/server/models/dmgiaban.js +9 -0
  100. package/server/models/dmgiamua.js +5 -0
  101. package/server/models/dmgiathitruong.js +5 -0
  102. package/server/models/dmgiathitruong_ngay.js +2 -0
  103. package/server/models/dmgiathitruong_theodoi.js +2 -0
  104. package/server/models/dmhoahonghd.js +8 -0
  105. package/server/models/dmhoahongnpp.js +8 -0
  106. package/server/models/dmkc.js +3 -0
  107. package/server/models/dmkho.js +7 -0
  108. package/server/models/dmkhuyenmai.js +9 -0
  109. package/server/models/dmkhuyenmaihd.js +11 -0
  110. package/server/models/dmletet.js +2 -0
  111. package/server/models/dmlo.js +4 -0
  112. package/server/models/dmloaicong.js +4 -0
  113. package/server/models/dmloaitask.js +2 -0
  114. package/server/models/dmloaits.js +2 -0
  115. package/server/models/dmnckkm.js +4 -0
  116. package/server/models/dmnghiepvu.js +4 -0
  117. package/server/models/dmnguonvon.js +2 -0
  118. package/server/models/dmnhnv.js +4 -0
  119. package/server/models/dmnv.js +17 -0
  120. package/server/models/dmnvt.js +10 -0
  121. package/server/models/dmphi.js +3 -0
  122. package/server/models/dmqct.js +3 -0
  123. package/server/models/dmqddvt.js +3 -0
  124. package/server/models/dmtanggiamts.js +3 -0
  125. package/server/models/dmto.js +4 -0
  126. package/server/models/dmtt.js +6 -0
  127. package/server/models/dmvt.js +17 -0
  128. package/server/models/dmyt.js +4 -0
  129. package/server/models/dn0.js +13 -0
  130. package/server/models/dnm.js +11 -0
  131. package/server/models/dokho.js +2 -0
  132. package/server/models/domain.js +2 -0
  133. package/server/models/dvcs.js +3 -0
  134. package/server/models/ecomcategories.js +3 -0
  135. package/server/models/ecomcategories_cty.js +3 -0
  136. package/server/models/ecomproductlines.js +2 -0
  137. package/server/models/ecompromotion_flashsales.js +2 -0
  138. package/server/models/ecompromotion_freeships.js +2 -0
  139. package/server/models/email.js +2 -0
  140. package/server/models/endpoint.js +1 -0
  141. package/server/models/events.js +3 -0
  142. package/server/models/evoucher.js +5 -0
  143. package/server/models/experiencejourney.js +2 -0
  144. package/server/models/experiencejourneydata.js +4 -0
  145. package/server/models/experiencejourneypersona.js +3 -0
  146. package/server/models/experiencejourneystage.js +2 -0
  147. package/server/models/exportexceltemplate.js +2 -0
  148. package/server/models/fbconversation.js +15 -0
  149. package/server/models/fbmessage.js +2 -0
  150. package/server/models/fbpage.js +2 -0
  151. package/server/models/fbpost.js +2 -0
  152. package/server/models/fieldright.js +2 -0
  153. package/server/models/fifo_dk.js +2 -0
  154. package/server/models/fifo_lot.js +3 -0
  155. package/server/models/fifo_trace.js +4 -0
  156. package/server/models/file.js +4 -0
  157. package/server/models/filechunk.js +2 -0
  158. package/server/models/financialroadmap.js +3 -0
  159. package/server/models/flow.js +2 -0
  160. package/server/models/flowdata.js +3 -0
  161. package/server/models/flowpending.js +2 -0
  162. package/server/models/folder.js +4 -0
  163. package/server/models/follow.js +2 -0
  164. package/server/models/forminfo.js +5 -0
  165. package/server/models/giaoca.js +4 -0
  166. package/server/models/giatb.js +3 -0
  167. package/server/models/group.js +9 -0
  168. package/server/models/gt_ctgt.js +4 -0
  169. package/server/models/gt_hspb.js +3 -0
  170. package/server/models/gt_sltk.js +3 -0
  171. package/server/models/gt_thcppstk.js +3 -0
  172. package/server/models/hanmucton.js +4 -0
  173. package/server/models/hd1.js +11 -0
  174. package/server/models/hd2.js +26 -0
  175. package/server/models/hd3.js +17 -0
  176. package/server/models/hd4.js +13 -0
  177. package/server/models/hd7.js +17 -0
  178. package/server/models/hd8.js +12 -0
  179. package/server/models/hde.js +11 -0
  180. package/server/models/hmcn.js +3 -0
  181. package/server/models/hmcnct.js +2 -0
  182. package/server/models/hspbts.js +4 -0
  183. package/server/models/htl.js +13 -0
  184. package/server/models/importexceltemplate.js +2 -0
  185. package/server/models/introducebonus.js +4 -0
  186. package/server/models/introducecode.js +3 -0
  187. package/server/models/introducer.js +4 -0
  188. package/server/models/kbbtpb.js +7 -0
  189. package/server/models/kbmPttct.js +4 -0
  190. package/server/models/kbmTkgtgt.js +5 -0
  191. package/server/models/kbm_bcdkt_old.js +4 -0
  192. package/server/models/kbm_kqhdkd_old.js +3 -0
  193. package/server/models/kbm_lcttgt_old.js +5 -0
  194. package/server/models/kbm_lctttt_old.js +4 -0
  195. package/server/models/kbm_pttct_old.js +4 -0
  196. package/server/models/kbm_tkgtgt_old.js +5 -0
  197. package/server/models/kbmbcdkt.js +4 -0
  198. package/server/models/kbmbcqt.js +4 -0
  199. package/server/models/kbmkqhdkd.js +3 -0
  200. package/server/models/kbmlcttgt.js +6 -0
  201. package/server/models/kbmlctttt.js +4 -0
  202. package/server/models/kbmtmbctc.js +4 -0
  203. package/server/models/kehoachdtcp.js +3 -0
  204. package/server/models/kehoachmh.js +8 -0
  205. package/server/models/keyresult.js +7 -0
  206. package/server/models/khunghangthanhvien.js +3 -0
  207. package/server/models/label.js +2 -0
  208. package/server/models/labelinfo.js +2 -0
  209. package/server/models/lenhcapphat.js +8 -0
  210. package/server/models/lenhsx.js +8 -0
  211. package/server/models/lienhe.js +4 -0
  212. package/server/models/like_module.js +2 -0
  213. package/server/models/link.js +2 -0
  214. package/server/models/listinfo.js +1365 -0
  215. package/server/models/loaidiem.js +2 -0
  216. package/server/models/lock.js +2 -0
  217. package/server/models/log.js +8 -0
  218. package/server/models/mailaccount.js +3 -0
  219. package/server/models/mailgroup.js +3 -0
  220. package/server/models/mailreceived.js +2 -0
  221. package/server/models/mailsent.js +2 -0
  222. package/server/models/mailtemplate.js +2 -0
  223. package/server/models/maudanhgia.js +2 -0
  224. package/server/models/menuinfo.js +2 -0
  225. package/server/models/message.js +8 -0
  226. package/server/models/message2.js +4 -0
  227. package/server/models/message2setting.js +3 -0
  228. package/server/models/moduleinfo.js +4 -0
  229. package/server/models/momo.js +18 -0
  230. package/server/models/news.js +3 -0
  231. package/server/models/newsfeed.js +4 -0
  232. package/server/models/note.js +2 -0
  233. package/server/models/notification.js +8 -0
  234. package/server/models/okr.js +4 -0
  235. package/server/models/okrdiagram.js +3 -0
  236. package/server/models/onepay.js +24 -0
  237. package/server/models/opportunity.js +4 -0
  238. package/server/models/options.js +2 -0
  239. package/server/models/originimportid.js +1 -0
  240. package/server/models/otp.js +1 -0
  241. package/server/models/parameter.js +2 -0
  242. package/server/models/participant.js +21 -0
  243. package/server/models/partner.js +1 -0
  244. package/server/models/payload.js +1 -0
  245. package/server/models/pbl.js +16 -0
  246. package/server/models/pc0.js +13 -0
  247. package/server/models/pc1.js +14 -0
  248. package/server/models/pc2.js +13 -0
  249. package/server/models/pc3.js +13 -0
  250. package/server/models/pc5.js +8 -0
  251. package/server/models/pc6.js +14 -0
  252. package/server/models/pcl.js +6 -0
  253. package/server/models/pdn.js +9 -0
  254. package/server/models/pdx.js +9 -0
  255. package/server/models/pgh.js +5 -0
  256. package/server/models/phieudanhgia.js +3 -0
  257. package/server/models/pht.js +8 -0
  258. package/server/models/phucap.js +4 -0
  259. package/server/models/pkc.js +6 -0
  260. package/server/models/pkh.js +6 -0
  261. package/server/models/pkk.js +10 -0
  262. package/server/models/pkt.js +12 -0
  263. package/server/models/pn1.js +18 -0
  264. package/server/models/pn2.js +12 -0
  265. package/server/models/pn3.js +13 -0
  266. package/server/models/pn5.js +14 -0
  267. package/server/models/pn6.js +14 -0
  268. package/server/models/pn9.js +17 -0
  269. package/server/models/pnc.js +9 -0
  270. package/server/models/pnh.js +11 -0
  271. package/server/models/pnk.js +10 -0
  272. package/server/models/po1.js +19 -0
  273. package/server/models/ppb.js +6 -0
  274. package/server/models/productcode.js +2 -0
  275. package/server/models/profile.js +4 -0
  276. package/server/models/pt1.js +12 -0
  277. package/server/models/pt5.js +8 -0
  278. package/server/models/ptl.js +5 -0
  279. package/server/models/ptthanhtoan.js +6 -0
  280. package/server/models/purchase_contract.js +17 -0
  281. package/server/models/pxc.js +9 -0
  282. package/server/models/pxh.js +11 -0
  283. package/server/models/pxk.js +9 -0
  284. package/server/models/qts.js +14 -0
  285. package/server/models/qts_dieuchinh.js +3 -0
  286. package/server/models/qts_dieuchuyen.js +4 -0
  287. package/server/models/quanhuyen.js +2 -0
  288. package/server/models/reason.js +2 -0
  289. package/server/models/receivedinvoice.js +2 -0
  290. package/server/models/reportinfo.js +5 -0
  291. package/server/models/right.js +4 -0
  292. package/server/models/rpt.js +2 -0
  293. package/server/models/rptform.js +3 -0
  294. package/server/models/rptobject.js +2 -0
  295. package/server/models/sale_contract.js +9 -0
  296. package/server/models/schedule.js +18 -0
  297. package/server/models/schedule_log.js +2 -0
  298. package/server/models/shipbook.js +12 -0
  299. package/server/models/shortcut.js +2 -0
  300. package/server/models/smsaccount.js +10 -0
  301. package/server/models/smssend.js +2 -0
  302. package/server/models/so1.js +22 -0
  303. package/server/models/so5.js +15 -0
  304. package/server/models/so9.js +19 -0
  305. package/server/models/socai.js +28 -0
  306. package/server/models/socainpp.js +18 -0
  307. package/server/models/socaitc.js +6 -0
  308. package/server/models/socaitmp.js +16 -0
  309. package/server/models/socaitt.js +4 -0
  310. package/server/models/sodiemthuong.js +4 -0
  311. package/server/models/sokho.js +27 -0
  312. package/server/models/sokhocapphat.js +18 -0
  313. package/server/models/sokhokhongton.js +19 -0
  314. package/server/models/sokhonpp.js +19 -0
  315. package/server/models/sokhotc.js +8 -0
  316. package/server/models/sokhott.js +18 -0
  317. package/server/models/sophanbokh.js +3 -0
  318. package/server/models/sosanxuat.js +5 -0
  319. package/server/models/sotinhkh.js +2 -0
  320. package/server/models/spdd_ck.js +3 -0
  321. package/server/models/spdd_dk.js +3 -0
  322. package/server/models/step.js +2 -0
  323. package/server/models/strategicdiagram.js +3 -0
  324. package/server/models/strategicgoal.js +4 -0
  325. package/server/models/strategickpi.js +6 -0
  326. package/server/models/strategicobjective.js +5 -0
  327. package/server/models/strategicplan.js +5 -0
  328. package/server/models/subscribe.js +2 -0
  329. package/server/models/support.js +2 -0
  330. package/server/models/synctime.js +2 -0
  331. package/server/models/sys_job_queue_book_keeping.js +2 -0
  332. package/server/models/sysconfig.js +2 -0
  333. package/server/models/sysgroup.js +2 -0
  334. package/server/models/tableinfo.js +3 -0
  335. package/server/models/task.js +9 -0
  336. package/server/models/tc.js +2 -0
  337. package/server/models/tdttco.js +9 -0
  338. package/server/models/tdttco_tt.js +5 -0
  339. package/server/models/tdttno.js +9 -0
  340. package/server/models/tdttno_tt.js +5 -0
  341. package/server/models/templaterpt.js +2 -0
  342. package/server/models/templatestore.js +3 -0
  343. package/server/models/templatevoucher.js +3 -0
  344. package/server/models/tinhthanh.js +2 -0
  345. package/server/models/tokens.js +3 -0
  346. package/server/models/tontucthoi.js +9 -0
  347. package/server/models/trangthai.js +4 -0
  348. package/server/models/trangthaiapp.js +4 -0
  349. package/server/models/transaction.js +16 -0
  350. package/server/models/trialinfo.js +2 -0
  351. package/server/models/user.js +40 -0
  352. package/server/models/usergroup.js +7 -0
  353. package/server/models/vanchuyen.js +12 -0
  354. package/server/models/vat.js +3 -0
  355. package/server/models/vatra.js +6 -0
  356. package/server/models/vatvao.js +6 -0
  357. package/server/models/versioninfo.js +2 -0
  358. package/server/models/vietqrbanks.js +2 -0
  359. package/server/models/vsocai.js +6 -0
  360. package/server/models/wallet.js +8 -0
  361. package/server/models/warranty.js +3 -0
  362. package/server/models/warrantyclaim.js +2 -0
  363. package/server/models/warrantypolicy.js +1 -0
  364. package/server/models/workflow.js +4 -0
  365. package/server/models/xaphuong.js +2 -0
  366. package/server/models/xhd.js +10 -0
  367. package/server/models/ytdd_ck.js +4 -0
  368. package/server/models/ytdd_dk.js +4 -0
  369. package/server/models/zalo.js +17 -0
  370. package/server/modules/lists/bg-cddiem.js +6 -0
  371. package/server/modules/lists/bg-cddt.js +7 -0
  372. package/server/modules/lists/bg-cdkh.js +11 -0
  373. package/server/modules/lists/bg-cdnphep.js +6 -0
  374. package/server/modules/lists/bg-cdtk.js +9 -0
  375. package/server/modules/lists/bg-cdvt.js +8 -0
  376. package/server/modules/lists/bg-cdvtnpp.js +8 -0
  377. package/server/modules/lists/bg-fifo_dk.js +8 -0
  378. package/server/modules/lists/ls-account.js +4 -0
  379. package/server/modules/lists/ls-afflink.js +3 -0
  380. package/server/modules/lists/ls-approve.js +5 -0
  381. package/server/modules/lists/ls-assabcihandler.js +3 -0
  382. package/server/modules/lists/ls-assbank.js +3 -0
  383. package/server/modules/lists/ls-assbooking.js +20 -0
  384. package/server/modules/lists/ls-assbuy.js +8 -0
  385. package/server/modules/lists/ls-asscashwithdraw.js +8 -0
  386. package/server/modules/lists/ls-assinvestment.js +31 -0
  387. package/server/modules/lists/ls-assissue.js +3 -0
  388. package/server/modules/lists/ls-asskey.js +41 -0
  389. package/server/modules/lists/ls-assneedtobuy.js +10 -0
  390. package/server/modules/lists/ls-assperiod.js +19 -0
  391. package/server/modules/lists/ls-assproduct.js +9 -0
  392. package/server/modules/lists/ls-assprofitsharing.js +8 -0
  393. package/server/modules/lists/ls-assreceiver.js +3 -0
  394. package/server/modules/lists/ls-assrequest.js +4 -0
  395. package/server/modules/lists/ls-asssell.js +13 -0
  396. package/server/modules/lists/ls-asstransaction.js +3 -0
  397. package/server/modules/lists/ls-asstransfer.js +3 -0
  398. package/server/modules/lists/ls-assuser_identity.js +1 -0
  399. package/server/modules/lists/ls-asswithdraw.js +12 -0
  400. package/server/modules/lists/ls-bangtinhluong.js +2 -0
  401. package/server/modules/lists/ls-calllog.js +4 -0
  402. package/server/modules/lists/ls-cart.js +14 -0
  403. package/server/modules/lists/ls-chamcong.js +3 -0
  404. package/server/modules/lists/ls-chat_session.js +5 -0
  405. package/server/modules/lists/ls-checkin.js +24 -0
  406. package/server/modules/lists/ls-checkinactivity.js +8 -0
  407. package/server/modules/lists/ls-checkinkpi.js +3 -0
  408. package/server/modules/lists/ls-checkinlocation.js +1 -0
  409. package/server/modules/lists/ls-chitietluongds.js +4 -0
  410. package/server/modules/lists/ls-chitieukpi.js +1 -0
  411. package/server/modules/lists/ls-chudethaoluan.js +1 -0
  412. package/server/modules/lists/ls-ckgtluong.js +1 -0
  413. package/server/modules/lists/ls-comment.js +9 -0
  414. package/server/modules/lists/ls-congdoansx.js +3 -0
  415. package/server/modules/lists/ls-congtacvien.js +5 -0
  416. package/server/modules/lists/ls-consultant.js +2 -0
  417. package/server/modules/lists/ls-contract.js +7 -0
  418. package/server/modules/lists/ls-csluongtheods.js +1 -0
  419. package/server/modules/lists/ls-csphucap.js +1 -0
  420. package/server/modules/lists/ls-ctds.js +4 -0
  421. package/server/modules/lists/ls-ctds2.js +4 -0
  422. package/server/modules/lists/ls-currency.js +1 -0
  423. package/server/modules/lists/ls-customer.js +22 -0
  424. package/server/modules/lists/ls-customer_care.js +1 -0
  425. package/server/modules/lists/ls-datlich.js +9 -0
  426. package/server/modules/lists/ls-dckhauhaots.js +3 -0
  427. package/server/modules/lists/ls-deal.js +3 -0
  428. package/server/modules/lists/ls-diagram.js +1 -0
  429. package/server/modules/lists/ls-dkhoc.js +6 -0
  430. package/server/modules/lists/ls-dknphep.js +1 -0
  431. package/server/modules/lists/ls-dmban.js +4 -0
  432. package/server/modules/lists/ls-dmbp.js +7 -0
  433. package/server/modules/lists/ls-dmca.js +1 -0
  434. package/server/modules/lists/ls-dmchietkhau.js +19 -0
  435. package/server/modules/lists/ls-dmchietkhauhd.js +4 -0
  436. package/server/modules/lists/ls-dmchinhanh.js +1 -0
  437. package/server/modules/lists/ls-dmchucvu.js +2 -0
  438. package/server/modules/lists/ls-dmcpmh.js +1 -0
  439. package/server/modules/lists/ls-dmdiemthuong.js +4 -0
  440. package/server/modules/lists/ls-dmdoi.js +4 -0
  441. package/server/modules/lists/ls-dmdoituongdanhgia.js +1 -0
  442. package/server/modules/lists/ls-dmdt.js +11 -0
  443. package/server/modules/lists/ls-dmdvt.js +2 -0
  444. package/server/modules/lists/ls-dmgiaban.js +4 -0
  445. package/server/modules/lists/ls-dmgiamua.js +4 -0
  446. package/server/modules/lists/ls-dmgiathitruong.js +15 -0
  447. package/server/modules/lists/ls-dmgiathitruong_ngay.js +2 -0
  448. package/server/modules/lists/ls-dmgiathitruong_theodoi.js +1 -0
  449. package/server/modules/lists/ls-dmhoahonghd.js +1 -0
  450. package/server/modules/lists/ls-dmhoahongnpp.js +1 -0
  451. package/server/modules/lists/ls-dmkc.js +3 -0
  452. package/server/modules/lists/ls-dmkho.js +7 -0
  453. package/server/modules/lists/ls-dmkhuyenmai.js +5 -0
  454. package/server/modules/lists/ls-dmkhuyenmaihd.js +3 -0
  455. package/server/modules/lists/ls-dmletet.js +1 -0
  456. package/server/modules/lists/ls-dmlo.js +1 -0
  457. package/server/modules/lists/ls-dmloaicong.js +1 -0
  458. package/server/modules/lists/ls-dmloaits.js +1 -0
  459. package/server/modules/lists/ls-dmnckkm.js +7 -0
  460. package/server/modules/lists/ls-dmnghiepvu.js +1 -0
  461. package/server/modules/lists/ls-dmnguonvon.js +1 -0
  462. package/server/modules/lists/ls-dmnhnv.js +6 -0
  463. package/server/modules/lists/ls-dmnhtask.js +5 -0
  464. package/server/modules/lists/ls-dmnkh.js +6 -0
  465. package/server/modules/lists/ls-dmntt.js +6 -0
  466. package/server/modules/lists/ls-dmnv.js +14 -0
  467. package/server/modules/lists/ls-dmnvt.js +7 -0
  468. package/server/modules/lists/ls-dmphi.js +6 -0
  469. package/server/modules/lists/ls-dmqct.js +2 -0
  470. package/server/modules/lists/ls-dmqddvt.js +3 -0
  471. package/server/modules/lists/ls-dmtanggiamts.js +1 -0
  472. package/server/modules/lists/ls-dmto.js +5 -0
  473. package/server/modules/lists/ls-dmtt.js +7 -0
  474. package/server/modules/lists/ls-dmvt.js +52 -0
  475. package/server/modules/lists/ls-dmyt.js +1 -0
  476. package/server/modules/lists/ls-dokho.js +1 -0
  477. package/server/modules/lists/ls-dvcs.js +1 -0
  478. package/server/modules/lists/ls-ecomcategories.js +5 -0
  479. package/server/modules/lists/ls-ecomcategories_cty.js +5 -0
  480. package/server/modules/lists/ls-email.js +4 -0
  481. package/server/modules/lists/ls-events.js +3 -0
  482. package/server/modules/lists/ls-evoucher.js +3 -0
  483. package/server/modules/lists/ls-experiencejourney.js +1 -0
  484. package/server/modules/lists/ls-experiencejourneydata.js +3 -0
  485. package/server/modules/lists/ls-experiencejourneypersona.js +4 -0
  486. package/server/modules/lists/ls-experiencejourneystage.js +1 -0
  487. package/server/modules/lists/ls-fbconversation.js +2 -0
  488. package/server/modules/lists/ls-fbmessage.js +2 -0
  489. package/server/modules/lists/ls-fbpage.js +11 -0
  490. package/server/modules/lists/ls-fbpost.js +2 -0
  491. package/server/modules/lists/ls-file.js +38 -0
  492. package/server/modules/lists/ls-financialroadmap.js +3 -0
  493. package/server/modules/lists/ls-flow.js +6 -0
  494. package/server/modules/lists/ls-flowdata.js +1 -0
  495. package/server/modules/lists/ls-flowpending.js +3 -0
  496. package/server/modules/lists/ls-folder.js +1 -0
  497. package/server/modules/lists/ls-forminfo.js +1 -0
  498. package/server/modules/lists/ls-giaoca.js +5 -0
  499. package/server/modules/lists/ls-group.js +5 -0
  500. package/server/modules/lists/ls-hmcn.js +2 -0
  501. package/server/modules/lists/ls-hspbts.js +3 -0
  502. package/server/modules/lists/ls-introducebonus.js +4 -0
  503. package/server/modules/lists/ls-introducecode.js +10 -0
  504. package/server/modules/lists/ls-introducer.js +21 -0
  505. package/server/modules/lists/ls-kbm-bcdkt.js +1 -0
  506. package/server/modules/lists/ls-kbm-bcqt.js +5 -0
  507. package/server/modules/lists/ls-kbm-kqhdkd.js +1 -0
  508. package/server/modules/lists/ls-kbm-lcttgt.js +1 -0
  509. package/server/modules/lists/ls-kbm-lctttt.js +1 -0
  510. package/server/modules/lists/ls-kbm-pttct.js +3 -0
  511. package/server/modules/lists/ls-kbm-tkgtgt.js +3 -0
  512. package/server/modules/lists/ls-kbm-tmbctc.js +3 -0
  513. package/server/modules/lists/ls-kehoachdtcp.js +4 -0
  514. package/server/modules/lists/ls-keyresult.js +7 -0
  515. package/server/modules/lists/ls-khunghangthanhvien.js +1 -0
  516. package/server/modules/lists/ls-label.js +1 -0
  517. package/server/modules/lists/ls-lienhe.js +4 -0
  518. package/server/modules/lists/ls-like-module.js +1 -0
  519. package/server/modules/lists/ls-link.js +1 -0
  520. package/server/modules/lists/ls-loaidiem.js +1 -0
  521. package/server/modules/lists/ls-lock.js +1 -0
  522. package/server/modules/lists/ls-log.js +3 -0
  523. package/server/modules/lists/ls-mailaccount.js +5 -0
  524. package/server/modules/lists/ls-mailreceived.js +5 -0
  525. package/server/modules/lists/ls-mailsent.js +4 -0
  526. package/server/modules/lists/ls-mailtemplate.js +4 -0
  527. package/server/modules/lists/ls-maudanhgia.js +3 -0
  528. package/server/modules/lists/ls-message2.js +8 -0
  529. package/server/modules/lists/ls-message2setting.js +5 -0
  530. package/server/modules/lists/ls-news.js +7 -0
  531. package/server/modules/lists/ls-newsfeed.js +4 -0
  532. package/server/modules/lists/ls-note.js +6 -0
  533. package/server/modules/lists/ls-okr.js +5 -0
  534. package/server/modules/lists/ls-okrdiagram.js +1 -0
  535. package/server/modules/lists/ls-opportunity.js +5 -0
  536. package/server/modules/lists/ls-options.js +4 -0
  537. package/server/modules/lists/ls-parameter.js +3 -0
  538. package/server/modules/lists/ls-participant.js +12 -0
  539. package/server/modules/lists/ls-phieudanhgia.js +7 -0
  540. package/server/modules/lists/ls-phucap.js +2 -0
  541. package/server/modules/lists/ls-productcode.js +9 -0
  542. package/server/modules/lists/ls-profile.js +1 -0
  543. package/server/modules/lists/ls-ptthanhtoan.js +3 -0
  544. package/server/modules/lists/ls-qts-dieuchinh.js +2 -0
  545. package/server/modules/lists/ls-qts-dieuchuyen.js +8 -0
  546. package/server/modules/lists/ls-reason.js +1 -0
  547. package/server/modules/lists/ls-rpt.js +5 -0
  548. package/server/modules/lists/ls-rptform.js +3 -0
  549. package/server/modules/lists/ls-shortcut.js +1 -0
  550. package/server/modules/lists/ls-smsaccount.js +1 -0
  551. package/server/modules/lists/ls-smssend.js +3 -0
  552. package/server/modules/lists/ls-sosanxuat.js +4 -0
  553. package/server/modules/lists/ls-step.js +1 -0
  554. package/server/modules/lists/ls-strategicdiagram.js +1 -0
  555. package/server/modules/lists/ls-strategicgoal.js +3 -0
  556. package/server/modules/lists/ls-strategickpi.js +7 -0
  557. package/server/modules/lists/ls-strategicobjective.js +3 -0
  558. package/server/modules/lists/ls-strategicplan.js +6 -0
  559. package/server/modules/lists/ls-support.js +3 -0
  560. package/server/modules/lists/ls-task.js +28 -0
  561. package/server/modules/lists/ls-tc.js +1 -0
  562. package/server/modules/lists/ls-templaterpt.js +5 -0
  563. package/server/modules/lists/ls-templatevoucher.js +1 -0
  564. package/server/modules/lists/ls-tontucthoi.js +3 -0
  565. package/server/modules/lists/ls-trangthaiapp.js +3 -0
  566. package/server/modules/lists/ls-transaction.js +4 -0
  567. package/server/modules/lists/ls-usergroup.js +7 -0
  568. package/server/modules/lists/ls-vat.js +1 -0
  569. package/server/modules/lists/ls-vatra.js +5 -0
  570. package/server/modules/lists/ls-vatvao.js +6 -0
  571. package/server/modules/lists/ls-warranty.js +3 -0
  572. package/server/modules/lists/ls-workflow.js +1 -0
  573. package/server/modules/lists/ls_hanmucton.js +3 -0
  574. package/server/modules/lists/ls_hspb.js +4 -0
  575. package/server/modules/lists/ls_spdd_ck.js +3 -0
  576. package/server/modules/lists/ls_spdd_dk.js +3 -0
  577. package/server/modules/lists/ls_ytdd_ck.js +4 -0
  578. package/server/modules/lists/ls_ytdd_dk.js +4 -0
  579. package/server/modules/lists/sys-attend.js +4 -0
  580. package/server/modules/lists/sys-follow.js +4 -0
  581. package/server/modules/lists/sys-right.js +2 -0
  582. package/server/modules/public/app.js +4 -0
  583. package/server/modules/public/approve.js +37 -0
  584. package/server/modules/public/callin.js +7 -0
  585. package/server/modules/public/comment.js +5 -0
  586. package/server/modules/public/dmnvt.js +4 -0
  587. package/server/modules/public/dmvt.js +9 -0
  588. package/server/modules/public/file.js +11 -0
  589. package/server/modules/public/forminfo.js +1 -0
  590. package/server/modules/public/group.js +4 -0
  591. package/server/modules/public/introducecode.js +1 -0
  592. package/server/modules/public/listinfo.js +1 -0
  593. package/server/modules/public/media-webhook.js +1 -0
  594. package/server/modules/public/partner.js +1 -0
  595. package/server/modules/public/paymentCallback.js +32 -0
  596. package/server/modules/public/province.js +1 -0
  597. package/server/modules/public/ptthanhtoan.js +4 -0
  598. package/server/modules/public/subscribe.js +30 -0
  599. package/server/modules/public/support.js +3 -0
  600. package/server/modules/public/tableinfo.js +1 -0
  601. package/server/modules/public/trialinfo.js +4 -0
  602. package/server/modules/public/versioninfo.js +1 -0
  603. package/server/modules/reports/calc-tinhgiafifo.js +8 -0
  604. package/server/modules/reports/calc-tinhgiatb.js +7 -0
  605. package/server/modules/reports/calc-tinhgiathanh.js +7 -0
  606. package/server/modules/reports/calc-tinhkhauhaots.js +3 -0
  607. package/server/modules/reports/calc-tinhluong.js +68 -0
  608. package/server/modules/reports/rp-analyzedata.js +6 -0
  609. package/server/modules/reports/rp-assbonus.js +4 -0
  610. package/server/modules/reports/rp-assinterest.js +8 -0
  611. package/server/modules/reports/rp-assproductowners.js +3 -0
  612. package/server/modules/reports/rp-asssupply.js +1 -0
  613. package/server/modules/reports/rp-asstransferlog.js +10 -0
  614. package/server/modules/reports/rp-backup.js +4 -0
  615. package/server/modules/reports/rp-banggiatb.js +3 -0
  616. package/server/modules/reports/rp-bangtinhkhauhao.js +6 -0
  617. package/server/modules/reports/rp-baoCaoFifoKy.js +1 -0
  618. package/server/modules/reports/rp-baocaokhachhang.js +6 -0
  619. package/server/modules/reports/rp-bcdkt.js +11 -0
  620. package/server/modules/reports/rp-bcintroducebonus.js +4 -0
  621. package/server/modules/reports/rp-bckhtiemnang.js +3 -0
  622. package/server/modules/reports/rp-bcqt.js +85 -0
  623. package/server/modules/reports/rp-bkchamcong.js +5 -0
  624. package/server/modules/reports/rp-bkct.js +13 -0
  625. package/server/modules/reports/rp-bkshipbook.js +8 -0
  626. package/server/modules/reports/rp-bkvanchuyen.js +8 -0
  627. package/server/modules/reports/rp-bkvatra.js +7 -0
  628. package/server/modules/reports/rp-bkvatvao.js +7 -0
  629. package/server/modules/reports/rp-capnhatsocaitc.js +4 -0
  630. package/server/modules/reports/rp-cdpsdiem.js +4 -0
  631. package/server/modules/reports/rp-cdpsdt.js +5 -0
  632. package/server/modules/reports/rp-cdpskh.js +8 -0
  633. package/server/modules/reports/rp-cdpsnphep.js +3 -0
  634. package/server/modules/reports/rp-cdpstk.js +4 -0
  635. package/server/modules/reports/rp-chitietchitientheohoadon.js +12 -0
  636. package/server/modules/reports/rp-chitiettaisan.js +13 -0
  637. package/server/modules/reports/rp-chitietthutientheohoadon.js +13 -0
  638. package/server/modules/reports/rp-ckcn.js +3 -0
  639. package/server/modules/reports/rp-ckdiem.js +2 -0
  640. package/server/modules/reports/rp-cktk.js +3 -0
  641. package/server/modules/reports/rp-ckvt.js +10 -0
  642. package/server/modules/reports/rp-ckvttheokho.js +4 -0
  643. package/server/modules/reports/rp-ckvttheotg.js +4 -0
  644. package/server/modules/reports/rp-ckvttt.js +3 -0
  645. package/server/modules/reports/rp-congnophaithutheotuoino.js +3 -0
  646. package/server/modules/reports/rp-congnophaitratheotuoino.js +3 -0
  647. package/server/modules/reports/rp-congnosapthu.js +4 -0
  648. package/server/modules/reports/rp-congnosaptra.js +4 -0
  649. package/server/modules/reports/rp-congviectheobp.js +9 -0
  650. package/server/modules/reports/rp-congviectheodt.js +8 -0
  651. package/server/modules/reports/rp-congviectheokh.js +8 -0
  652. package/server/modules/reports/rp-congviectheonv.js +9 -0
  653. package/server/modules/reports/rp-congviectheotimeline.js +6 -0
  654. package/server/modules/reports/rp-ctbanle.js +15 -0
  655. package/server/modules/reports/rp-ctbanle2.js +20 -0
  656. package/server/modules/reports/rp-ctbanlectv.js +20 -0
  657. package/server/modules/reports/rp-ctbanlenpp.js +24 -0
  658. package/server/modules/reports/rp-ctdanhgianhanvien.js +8 -0
  659. package/server/modules/reports/rp-cthangbanbitralai.js +4 -0
  660. package/server/modules/reports/rp-ctmuahang.js +7 -0
  661. package/server/modules/reports/rp-cttralaihang.js +4 -0
  662. package/server/modules/reports/rp-databanle.js +10 -0
  663. package/server/modules/reports/rp-diemthuong.js +2 -0
  664. package/server/modules/reports/rp-dkcn.js +3 -0
  665. package/server/modules/reports/rp-dktk.js +2 -0
  666. package/server/modules/reports/rp-dsnhanviencm.js +9 -0
  667. package/server/modules/reports/rp-dsnhanvientb.js +9 -0
  668. package/server/modules/reports/rp-dtbanlekempk.js +12 -0
  669. package/server/modules/reports/rp-dtbanletheoct.js +22 -0
  670. package/server/modules/reports/rp-dtbanletheoctkempk.js +25 -0
  671. package/server/modules/reports/rp-dtbanletheokh.js +17 -0
  672. package/server/modules/reports/rp-dtbanletheokhnpp.js +19 -0
  673. package/server/modules/reports/rp-dtbanletheokho.js +15 -0
  674. package/server/modules/reports/rp-dtbanletheonam.js +3 -0
  675. package/server/modules/reports/rp-dtbanletheongay.js +1 -0
  676. package/server/modules/reports/rp-dtbanletheonpp.js +23 -0
  677. package/server/modules/reports/rp-dtbanletheonv.js +19 -0
  678. package/server/modules/reports/rp-dtbanletheoquy.js +3 -0
  679. package/server/modules/reports/rp-dtbanletheosp.js +9 -0
  680. package/server/modules/reports/rp-dtbanletheospnpp.js +6 -0
  681. package/server/modules/reports/rp-dtbanletheothang.js +3 -0
  682. package/server/modules/reports/rp-dtbanletheothungan.js +12 -0
  683. package/server/modules/reports/rp-dtbanletheovt.js +2 -0
  684. package/server/modules/reports/rp-dtbanletheovtnpp.js +2 -0
  685. package/server/modules/reports/rp-dutoanthuchitheodt.js +4 -0
  686. package/server/modules/reports/rp-getPXC2PNC.js +8 -0
  687. package/server/modules/reports/rp-getariseofaccountsbymonth.js +4 -0
  688. package/server/modules/reports/rp-getbtpb.js +6 -0
  689. package/server/modules/reports/rp-getcashbycashier.js +7 -0
  690. package/server/modules/reports/rp-getcschietkhau.js +5 -0
  691. package/server/modules/reports/rp-getdinhmuc4lenhcp.js +7 -0
  692. package/server/modules/reports/rp-getdinhmuc4pxk.js +9 -0
  693. package/server/modules/reports/rp-getdk4pht.js +8 -0
  694. package/server/modules/reports/rp-getdk4pkc.js +10 -0
  695. package/server/modules/reports/rp-getdttheoca.js +5 -0
  696. package/server/modules/reports/rp-getinvoice2pay.js +4 -0
  697. package/server/modules/reports/rp-getinvoice2receive.js +4 -0
  698. package/server/modules/reports/rp-getinvoice2return.js +5 -0
  699. package/server/modules/reports/rp-getinvoice2return_bl.js +6 -0
  700. package/server/modules/reports/rp-getkehoachmh4lenhcp.js +4 -0
  701. package/server/modules/reports/rp-getkhauhao.js +7 -0
  702. package/server/modules/reports/rp-getluong.js +8 -0
  703. package/server/modules/reports/rp-getluongchuyen.js +5 -0
  704. package/server/modules/reports/rp-getpn2fee.js +5 -0
  705. package/server/modules/reports/rp-getpn2return.js +5 -0
  706. package/server/modules/reports/rp-getthanhpham4pnk.js +7 -0
  707. package/server/modules/reports/rp-getvc2xhd.js +11 -0
  708. package/server/modules/reports/rp-gt_cpnvltt.js +6 -0
  709. package/server/modules/reports/rp-hangbanbitralai.js +5 -0
  710. package/server/modules/reports/rp-hangthanhvien.js +3 -0
  711. package/server/modules/reports/rp-hoadonbanhangtheohantt.js +5 -0
  712. package/server/modules/reports/rp-hoadonmuahangtheohantt.js +5 -0
  713. package/server/modules/reports/rp-hoahong.js +15 -0
  714. package/server/modules/reports/rp-kcsns.js +19 -0
  715. package/server/modules/reports/rp-kgchamcong.js +1 -0
  716. package/server/modules/reports/rp-khoaso.js +11 -0
  717. package/server/modules/reports/rp-kiemtrasocaitcvssocai.js +6 -0
  718. package/server/modules/reports/rp-kqdanhgianhanvien.js +5 -0
  719. package/server/modules/reports/rp-kqhdkd.js +1 -0
  720. package/server/modules/reports/rp-lcttgt.js +16 -0
  721. package/server/modules/reports/rp-lctttt.js +11 -0
  722. package/server/modules/reports/rp-linkslist.js +4 -0
  723. package/server/modules/reports/rp-phanbochitienchohoadon.js +11 -0
  724. package/server/modules/reports/rp-phanbothutienchohoadon.js +11 -0
  725. package/server/modules/reports/rp-ptbitralai.js +7 -0
  726. package/server/modules/reports/rp-ptcttct.js +24 -0
  727. package/server/modules/reports/rp-ptdonhang.js +8 -0
  728. package/server/modules/reports/rp-pttct.js +52 -0
  729. package/server/modules/reports/rp-pttctkho.js +32 -0
  730. package/server/modules/reports/rp-pttctkho2.js +29 -0
  731. package/server/modules/reports/rp-referredusers.js +5 -0
  732. package/server/modules/reports/rp-sctbhxh.js +4 -0
  733. package/server/modules/reports/rp-sctcnkh.js +11 -0
  734. package/server/modules/reports/rp-sctdiem.js +3 -0
  735. package/server/modules/reports/rp-sctdt.js +7 -0
  736. package/server/modules/reports/rp-sctdtcp.js +11 -0
  737. package/server/modules/reports/rp-sctluong.js +6 -0
  738. package/server/modules/reports/rp-sctthuetncn.js +4 -0
  739. package/server/modules/reports/rp-scttk.js +9 -0
  740. package/server/modules/reports/rp-sctvt.js +5 -0
  741. package/server/modules/reports/rp-sctvt_sl.js +5 -0
  742. package/server/modules/reports/rp-sctvtnpp.js +6 -0
  743. package/server/modules/reports/rp-sctvttt.js +5 -0
  744. package/server/modules/reports/rp-search.js +4 -0
  745. package/server/modules/reports/rp-socai.js +6 -0
  746. package/server/modules/reports/rp-socaitk.js +1 -0
  747. package/server/modules/reports/rp-sochut.js +7 -0
  748. package/server/modules/reports/rp-sokho.js +7 -0
  749. package/server/modules/reports/rp-sokhott.js +5 -0
  750. package/server/modules/reports/rp-sonkbh.js +5 -0
  751. package/server/modules/reports/rp-sonkc.js +6 -0
  752. package/server/modules/reports/rp-sonkct.js +5 -0
  753. package/server/modules/reports/rp-sonkmh.js +5 -0
  754. package/server/modules/reports/rp-sonktt.js +5 -0
  755. package/server/modules/reports/rp-soquy.js +11 -0
  756. package/server/modules/reports/rp-sosanhkhvatt.js +13 -0
  757. package/server/modules/reports/rp-sosanhkhvatt2.js +5 -0
  758. package/server/modules/reports/rp-sotaisan.js +13 -0
  759. package/server/modules/reports/rp-sotiengui.js +7 -0
  760. package/server/modules/reports/rp-taodinhmuctudkhoc.js +5 -0
  761. package/server/modules/reports/rp-thbanhangkempk.js +28 -0
  762. package/server/modules/reports/rp-thdanhgianhanvien.js +9 -0
  763. package/server/modules/reports/rp-thgt.js +6 -0
  764. package/server/modules/reports/rp-thnxt.js +11 -0
  765. package/server/modules/reports/rp-thnxt_sl.js +9 -0
  766. package/server/modules/reports/rp-thnxtnpp.js +10 -0
  767. package/server/modules/reports/rp-thnxttt.js +9 -0
  768. package/server/modules/reports/rp-tkbanhangtheogioithieu.js +9 -0
  769. package/server/modules/reports/rp-tkgioithieukh.js +4 -0
  770. package/server/modules/reports/rp-tkgtgt.js +76 -0
  771. package/server/modules/reports/rp-tkgtgt_old.js +7 -0
  772. package/server/modules/reports/rp-tmbctc.js +20 -0
  773. package/server/modules/reports/rp-tonghopbanhang.js +6 -0
  774. package/server/modules/reports/rp-tonghopmuahang.js +5 -0
  775. package/server/modules/reports/rp-tonghoptralaihang.js +5 -0
  776. package/server/modules/reports/rp-tongquanbanle.js +20 -0
  777. package/server/modules/reports/rp-tongquanbds.js +3 -0
  778. package/server/modules/reports/rp-tongquancongty.js +6 -0
  779. package/server/modules/reports/rp-tongquanctvnpp.js +12 -0
  780. package/server/modules/reports/rp-tongquannvbh.js +14 -0
  781. package/server/modules/reports/rp-tongquannvnpp.js +5 -0
  782. package/server/modules/reports/rp-uoctinhnvl.js +11 -0
  783. package/server/modules/reports/rp-wallet.js +3 -0
  784. package/server/modules/reports/rpt-tkdiemtichluy.js +9 -0
  785. package/server/modules/systems/sys-app.js +34 -0
  786. package/server/modules/systems/sys-colleague.js +11 -0
  787. package/server/modules/systems/sys-data_list_config.js +1 -0
  788. package/server/modules/systems/sys-domain.js +1 -0
  789. package/server/modules/systems/sys-ecomproductlines.js +1 -0
  790. package/server/modules/systems/sys-exportexceltemplate.js +1 -0
  791. package/server/modules/systems/sys-fieldright.js +1 -0
  792. package/server/modules/systems/sys-importexceltemplate.js +1 -0
  793. package/server/modules/systems/sys-labelinfo.js +4 -0
  794. package/server/modules/systems/sys-listinfo.js +10 -0
  795. package/server/modules/systems/sys-menuinfo.js +4 -0
  796. package/server/modules/systems/sys-message.js +14 -0
  797. package/server/modules/systems/sys-moduleinfo.js +4 -0
  798. package/server/modules/systems/sys-notification.js +8 -0
  799. package/server/modules/systems/sys-quanhuyen.js +1 -0
  800. package/server/modules/systems/sys-reportinfo.js +5 -0
  801. package/server/modules/systems/sys-rptobject.js +1 -0
  802. package/server/modules/systems/sys-schedule.js +10 -0
  803. package/server/modules/systems/sys-sysconfig.js +1 -0
  804. package/server/modules/systems/sys-sysgroup.js +1 -0
  805. package/server/modules/systems/sys-tableinfo.js +1 -0
  806. package/server/modules/systems/sys-templatestore.js +5 -0
  807. package/server/modules/systems/sys-tinhthanh.js +1 -0
  808. package/server/modules/systems/sys-token.js +3 -0
  809. package/server/modules/systems/sys-trangthai.js +3 -0
  810. package/server/modules/systems/sys-trialinfo.js +1 -0
  811. package/server/modules/systems/sys-user.js +45 -0
  812. package/server/modules/systems/sys-users.js +10 -0
  813. package/server/modules/systems/sys-versioninfo.js +1 -0
  814. package/server/modules/systems/sys-vietqrbanks.js +1 -0
  815. package/server/modules/systems/sys-xaphuong.js +1 -0
  816. package/server/modules/vouchers/vo-banggiaban.js +8 -0
  817. package/server/modules/vouchers/vo-bc1.js +34 -0
  818. package/server/modules/vouchers/vo-bc5.js +15 -0
  819. package/server/modules/vouchers/vo-bg1.js +10 -0
  820. package/server/modules/vouchers/vo-bg2.js +12 -0
  821. package/server/modules/vouchers/vo-bn1.js +36 -0
  822. package/server/modules/vouchers/vo-bn5.js +15 -0
  823. package/server/modules/vouchers/vo-dh2.js +35 -0
  824. package/server/modules/vouchers/vo-dinhmucsx.js +6 -0
  825. package/server/modules/vouchers/vo-dkb.js +21 -0
  826. package/server/modules/vouchers/vo-dn0.js +9 -0
  827. package/server/modules/vouchers/vo-dnm.js +20 -0
  828. package/server/modules/vouchers/vo-hd1.js +37 -0
  829. package/server/modules/vouchers/vo-hd2.js +108 -0
  830. package/server/modules/vouchers/vo-hd3.js +38 -0
  831. package/server/modules/vouchers/vo-hd4.js +13 -0
  832. package/server/modules/vouchers/vo-hd7.js +29 -0
  833. package/server/modules/vouchers/vo-hd8.js +29 -0
  834. package/server/modules/vouchers/vo-hde.js +39 -0
  835. package/server/modules/vouchers/vo-htl.js +11 -0
  836. package/server/modules/vouchers/vo-kbbtpb.js +6 -0
  837. package/server/modules/vouchers/vo-kehoachmh.js +11 -0
  838. package/server/modules/vouchers/vo-lenhcapphat.js +9 -0
  839. package/server/modules/vouchers/vo-lenhsx.js +12 -0
  840. package/server/modules/vouchers/vo-pbl.js +94 -0
  841. package/server/modules/vouchers/vo-pc0.js +14 -0
  842. package/server/modules/vouchers/vo-pc1.js +31 -0
  843. package/server/modules/vouchers/vo-pc2.js +25 -0
  844. package/server/modules/vouchers/vo-pc3.js +14 -0
  845. package/server/modules/vouchers/vo-pc5.js +15 -0
  846. package/server/modules/vouchers/vo-pc6.js +19 -0
  847. package/server/modules/vouchers/vo-pcl.js +7 -0
  848. package/server/modules/vouchers/vo-pdn.js +11 -0
  849. package/server/modules/vouchers/vo-pdx.js +9 -0
  850. package/server/modules/vouchers/vo-pgh.js +16 -0
  851. package/server/modules/vouchers/vo-pht.js +6 -0
  852. package/server/modules/vouchers/vo-pkc.js +5 -0
  853. package/server/modules/vouchers/vo-pkh.js +9 -0
  854. package/server/modules/vouchers/vo-pkk.js +12 -0
  855. package/server/modules/vouchers/vo-pkt.js +12 -0
  856. package/server/modules/vouchers/vo-pn1.js +30 -0
  857. package/server/modules/vouchers/vo-pn2.js +17 -0
  858. package/server/modules/vouchers/vo-pn3.js +18 -0
  859. package/server/modules/vouchers/vo-pn5.js +18 -0
  860. package/server/modules/vouchers/vo-pn6.js +18 -0
  861. package/server/modules/vouchers/vo-pn9.js +23 -0
  862. package/server/modules/vouchers/vo-pnc.js +19 -0
  863. package/server/modules/vouchers/vo-pnh.js +17 -0
  864. package/server/modules/vouchers/vo-pnk.js +14 -0
  865. package/server/modules/vouchers/vo-pnknpp.js +12 -0
  866. package/server/modules/vouchers/vo-po1.js +14 -0
  867. package/server/modules/vouchers/vo-ppb.js +8 -0
  868. package/server/modules/vouchers/vo-pt1.js +20 -0
  869. package/server/modules/vouchers/vo-pt5.js +15 -0
  870. package/server/modules/vouchers/vo-ptl.js +8 -0
  871. package/server/modules/vouchers/vo-purchase_contract.js +9 -0
  872. package/server/modules/vouchers/vo-pxc.js +24 -0
  873. package/server/modules/vouchers/vo-pxh.js +18 -0
  874. package/server/modules/vouchers/vo-pxk.js +15 -0
  875. package/server/modules/vouchers/vo-pxknpp.js +14 -0
  876. package/server/modules/vouchers/vo-qts.js +12 -0
  877. package/server/modules/vouchers/vo-sale_contract.js +11 -0
  878. package/server/modules/vouchers/vo-shipbook.js +17 -0
  879. package/server/modules/vouchers/vo-so1.js +125 -0
  880. package/server/modules/vouchers/vo-so5.js +57 -0
  881. package/server/modules/vouchers/vo-so7.js +97 -0
  882. package/server/modules/vouchers/vo-so9.js +119 -0
  883. package/server/modules/vouchers/vo-vanchuyen.js +14 -0
  884. package/server/modules/vouchers/vo-xhd.js +33 -0
@@ -0,0 +1,35 @@
1
+ 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
+ model.start=()=>{Logger.info("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$$&&$abci$$.trang_thai==
3
+ "0"&&moment().diff(moment($abci$$.date_created),"hours")<1)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
+ $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(),Logger.info("lenh rut von nay da duoc thuc hien thanh cong:",$Withdraw$$.id)}catch($e$$){await global.getModel("assbank").sendCoins($Withdraw$$.id_app,
5
+ $Withdraw$$.creator,$Withdraw$$.product_owner,$Withdraw$$.von,$Withdraw$$.denom,{...$Withdraw$$.toObject(),event:"WITHDRAW",memo:"R\u00fat v\u1ed1n kh\u00f4ng thanh c\u00f4ng. X\u1eed l\u00fd l\u1ea1i v\u1ed1n \u0111\u00e3 tr\u1ea3 \u0111\u1ec3 th\u1ef1c hi\u1ec7n sau"}),$abci$$.trang_thai="5",$abci$$.event=`${$abci$$.event}-${$now$$.getTime()}`,$abci$$.data={note:"Kh\u00f4ng th\u1ec3 r\u00fat v\u1ed1n. Error: "+$e$$,obj:$Withdraw$$.toObject()},await $abci$$.save(),Logger.error("Kh\u00f4ng th\u1ec3 r\u00fat v\u1ed1n. Error:",
6
+ $e$$)}$callback$$()})},()=>{$resolve$$()})});const $investments$$=await global.getModel("assinvestment").find({trang_thai:"1",status:!0,da_dao_han:!1,ngay_dao_han:{$lte:$now$$}});await new Promise($resolve$$=>{async.mapSeries($investments$$,($Investment$$,$callback$$)=>{setImmediate(async()=>{var $balances_ngay_tinh_lai_ky_truoc_query_abci$$={id_app:$Investment$$.id_app,event:"INVESTMENT-EXPIRED",id:$Investment$$.id};let $abci$$=await model.findOne($balances_ngay_tinh_lai_ky_truoc_query_abci$$);if($abci$$&&
7
+ $abci$$.trang_thai=="0"&&moment().diff(moment($abci$$.date_created),"hours")<1)return $callback$$();try{$abci$$=new model($balances_ngay_tinh_lai_ky_truoc_query_abci$$),await $abci$$.save()}catch($e$$){return $callback$$()}$balances_ngay_tinh_lai_ky_truoc_query_abci$$=$Investment$$.ngay_tinh_lai_ky_truoc||$Investment$$.ngay_phat_hanh;let $so_ngay_tinh_lai$$=moment().diff(moment($balances_ngay_tinh_lai_ky_truoc_query_abci$$),"days"),$lai_suat$$=$Investment$$.lai_suat_cam_ket||0;$balances_ngay_tinh_lai_ky_truoc_query_abci$$=
8
+ await global.getModel("assbank").getInvestBalances($Investment$$.id_app,"",$Investment$$.token);try{const $period$$=await global.getModel("assperiod").findOne({id_app:$Investment$$.id_app,id:$Investment$$.id_period}),$product$$=await global.getModel("assproduct").findOne({id_app:$Investment$$.id_app,id:$period$$.id_product});await Promise.all($balances_ngay_tinh_lai_ky_truoc_query_abci$$.map($balance$$=>(async()=>{$balance$$.location=="wallet"&&await global.getModel("assbank").sendCoinsFromAccountToSystem($Investment$$.id_app,
9
+ $balance$$.address,$balance$$.amount,$balance$$.denom,{...$Investment$$.toObject(),event:"INVESTMENT-EXPIRED",memo:"Kho\u1ea3ng \u0111\u1ea7u t\u01b0 \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e1o h\u1ea1n"});let $von$$=$Investment$$.gia*$balance$$.amount;try{await global.getModel("assbank").sendCoins($Investment$$.id_app,$product$$.creator,$balance$$.address,$von$$,$Investment$$.denom,{...$Investment$$.toObject(),event:"INVESTMENT-EXPIRED",memo:"Kho\u1ea3n \u0111\u1ea7u t\u01b0 \u0111\u00e3 \u0111\u00e1o h\u1ea1n"})}catch($e$$){throw $balance$$.location==
10
+ "wallet"&&await global.getModel("assbank").sendCoinsFromSystemToAccount($Investment$$.id_app,$balance$$.address,$balance$$.amount,$balance$$.denom,{...$Investment$$.toObject(),event:"INVESTMENT-EXPIRED",memo:"X\u1eed l\u00fd kho\u1ea3ng \u0111\u1ea7u t\u01b0 kh\u00f4ng th\u1ec3 \u0111\u00e1o h\u1ea1n"}),$e$$;}let $lai$$=Math.roundBy($von$$*$lai_suat$$*$so_ngay_tinh_lai$$/36500,0);try{$lai$$&&await global.getModel("assbank").sendCoins($Investment$$.id_app,$product$$.creator,$balance$$.address,$lai$$,
11
+ $Investment$$.denom,{...$Investment$$.toObject(),event:"INTEREST",memo:"L\u00e3i t\u1eeb \u0111\u1ea7u t\u01b0"})}catch($e$$){throw $balance$$.location=="wallet"&&await global.getModel("assbank").sendCoinsFromSystemToAccount($Investment$$.id_app,$balance$$.address,$balance$$.amount,$balance$$.denom,{...$Investment$$.toObject(),event:"INVESTMENT-EXPIRED",memo:"X\u1eed l\u00fd kho\u1ea3ng \u0111\u1ea7u t\u01b0 kh\u00f4ng th\u1ec3 \u0111\u00e1o h\u1ea1n"}),await global.getModel("assbank").sendCoins($Investment$$.id_app,
12
+ $balance$$.address,$product$$.creator,$von$$,$Investment$$.denom,{...$Investment$$.toObject(),event:"INVESTMENT-EXPIRED",memo:"X\u1eed l\u00fd kho\u1ea3ng \u0111\u1ea7u t\u01b0 kh\u00f4ng th\u1ec3 \u0111\u00e1o h\u1ea1n"}),$e$$;}$balance$$.von=$von$$;$balance$$.lai_suat=$lai_suat$$;$balance$$.so_ngay_tinh_lai=$so_ngay_tinh_lai$$;$balance$$.lai=$lai$$;$balance$$.ngay_dao_han=$now$$})()));$Investment$$.trang_thai="5";$Investment$$.da_dao_han=!0;await $Investment$$.save();await global.getModel("asssell").updateMany({id_app:$Investment$$.id_app,
13
+ token:$Investment$$.token},{trang_thai:"5"});Logger.info("khoan dau tu nay da duoc dao han thanh cong:",$Investment$$.token);$abci$$.data={note:`Kho\u1ea3n \u0111\u1ea7u t\u01b0 ${$Investment$$.token} \u0111\u00e3 \u0111\u00e1o h\u1ea1n th\u00e0nh c\u00f4ng`,obj:$Investment$$.toObject(),balances:$balances_ngay_tinh_lai_ky_truoc_query_abci$$};$abci$$.trang_thai="5";await $abci$$.save()}catch($e$$){$abci$$.event=`${$abci$$.event}-${$now$$.getTime()}`,$abci$$.data={note:`Kh\u00f4ng th\u1ec3 \u0111\u00e1o h\u1ea1n kho\u1ea3n \u0111\u1ea7u t\u01b0 ${$Investment$$.token}. Error: ${$e$$}`,
14
+ obj:$Investment$$.toObject(),balances:$balances_ngay_tinh_lai_ky_truoc_query_abci$$},$abci$$.trang_thai="5",await $abci$$.save()}$callback$$()})},()=>{$resolve$$()})});const $investments_tralai$$=await global.getModel("assinvestment").find({trang_thai:"1",ky_tinh_lai:{$ne:0},status:!0,da_dao_han:!1,$and:[{ngay_tinh_lai_ky_tiep_theo:{$exists:!0}},{ngay_tinh_lai_ky_tiep_theo:{$lte:$now$$}}]});await new Promise($resolve$$=>{async.mapSeries($investments_tralai$$,($Investment$$,$callback$$)=>{setImmediate(async()=>
15
+ {$Investment$$.lan_tinh_lai+=1;let $query_abci$$={id_app:$Investment$$.id_app,event:`INTEREST-${$Investment$$.id}-${$Investment$$.lan_tinh_lai}`,id:$Investment$$.id},$abci$$=await model.findOne($query_abci$$);if($abci$$&&$abci$$.trang_thai=="0"&&moment().diff(moment($abci$$.date_created),"hours")<1)return $callback$$();try{$abci$$=new model($query_abci$$),await $abci$$.save()}catch($e$$){return $callback$$()}try{const $period$$=await global.getModel("assperiod").findOne({id_app:$Investment$$.id_app,
16
+ id:$Investment$$.id_period});if(!$period$$)return Logger.error("Tr\u1ea3 l\u00e3i. Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y k\u1ef3 h\u1ea1n \u0111\u1ea7u t\u01b0",$Investment$$.id_period,$Investment$$.toObject()),await global.getModel("assinvestment").updateOne({_id:$Investment$$._id},{status:!1}),$callback$$();const $product$$=await global.getModel("assproduct").findOne({id_app:$Investment$$.id_app,id:$period$$.id_product});if(!$product$$)return Logger.error("Tr\u1ea3 l\u00e3i. Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y d\u1ef1 \u00e1n",
17
+ $period$$.id_product,$period$$.toObject()),await global.getModel("assinvestment").updateOne({_id:$Investment$$._id},{status:!1}),$callback$$();let $so_ngay_tinh_lai$$=0;switch($Investment$$.ky_tinh_lai){case 1:$so_ngay_tinh_lai$$=moment().diff(moment($Investment$$.ngay_tinh_lai_ky_truoc),"days");$Investment$$.ngay_tinh_lai_ky_tiep_theo=moment().add(1,"days").toDate();break;case 2:$so_ngay_tinh_lai$$=moment().diff(moment($Investment$$.ngay_tinh_lai_ky_truoc),"days");$Investment$$.ngay_tinh_lai_ky_tiep_theo=
18
+ moment().add(1,"weeks").toDate();break;case 3:$so_ngay_tinh_lai$$=moment().diff(moment($Investment$$.ngay_tinh_lai_ky_truoc),"days");$Investment$$.ngay_tinh_lai_ky_tiep_theo=moment().add(1,"months").toDate();break;case 4:$so_ngay_tinh_lai$$=moment().diff(moment($Investment$$.ngay_tinh_lai_ky_truoc),"days");$Investment$$.ngay_tinh_lai_ky_tiep_theo=moment().add(1,"quarters").toDate();break;case 5:$so_ngay_tinh_lai$$=moment().diff(moment($Investment$$.ngay_tinh_lai_ky_truoc),"days");$Investment$$.ngay_tinh_lai_ky_tiep_theo=
19
+ moment().add(1,"years").toDate();break;case 9:$so_ngay_tinh_lai$$=moment().diff(moment($Investment$$.ngay_tinh_lai_ky_truoc),"hours"),$so_ngay_tinh_lai$$/=24,$Investment$$.ngay_tinh_lai_ky_tiep_theo=moment().add(1,"hours").toDate()}$Investment$$.ngay_tinh_lai_ky_truoc=$now$$;const $balances$$=await global.getModel("assbank").getInvestBalances($Investment$$.id_app,"",$Investment$$.token);await Promise.all($balances$$.map($balance$$=>(async()=>{let $von$$=$Investment$$.gia*$balance$$.amount,$lai_suat$$=
20
+ $Investment$$.lai_suat_cam_ket||0,$lai$$=Math.roundBy($von$$*$lai_suat$$*$so_ngay_tinh_lai$$/36500,0);$balance$$.von=$von$$;$balance$$.lai_suat=$lai_suat$$;$balance$$.so_ngay_tinh_lai=$so_ngay_tinh_lai$$;$balance$$.lai=$lai$$;$balance$$.ngay_tinh_lai=$Investment$$.ngay_tinh_lai_ky_truoc;$lai$$&&await global.getModel("assbank").sendCoins($Investment$$.id_app,$product$$.creator,$balance$$.address,$lai$$,$Investment$$.denom,{...$Investment$$.toObject(),event:"INTEREST",memo:"L\u00e3i t\u1eeb \u0111\u1ea7u t\u01b0"})})()));
21
+ await $Investment$$.save();$abci$$.data={note:"Tr\u1ea3 l\u00e3i cho kho\u1ea3n \u0111\u1ea7u t\u01b0",obj:$Investment$$.toObject(),balances:$balances$$};$abci$$.trang_thai="5";await $abci$$.save()}catch($e$$){$abci$$.event=`${$abci$$.event}-${$now$$.getTime()}`,$abci$$.data={note:"Kh\u00f4ng th\u1ec3 tr\u1ea3 l\u00e3i \u0111\u1ecbnh k\u1ef3. Error: "+$e$$,obj:$Investment$$.toObject()},$abci$$.trang_thai="5",await $abci$$.save()}$callback$$()})},()=>{$resolve$$()})});let $query$$={trang_thai:"0",
22
+ so_luong_con_lai:{$gt:0},ngay_het_han:{$lte:$now$$}};const $ntbs$$=await global.getModel("assneedtobuy").find($query$$);await new Promise($resolve$$=>{async.mapSeries($ntbs$$,($ntb$$,$callback$$)=>{setImmediate(async()=>{let $query_abci$$={id_app:$ntb$$.id_app,event:`NEEDTOBUY-${$ntb$$.id}`,id:$ntb$$.id},$abci$$=await model.findOne($query_abci$$);if($abci$$&&$abci$$.trang_thai=="0"&&moment().diff(moment($abci$$.date_created),"hours")<1)return $callback$$();try{$abci$$=new model($query_abci$$),await $abci$$.save()}catch($e$$){return $callback$$()}try{let $gia_tri_con_lai$$=
23
+ $ntb$$.so_luong_con_lai*$ntb$$.gia_mua;await global.getModel("assbank").sendCoinsFromSystemToAccount($ntb$$.id_app,$ntb$$.creator,$gia_tri_con_lai$$,$ntb$$.denom,{...$ntb$$.toObject(),event:"BUY-EXPIRED",memo:"L\u1ec7nh mua \u0111\u00e3 h\u1ebft h\u1ea1n"});$ntb$$.trang_thai="9";await $ntb$$.save();$abci$$.data={note:"Nhu c\u1ea7u mua \u0111\u00e3 h\u1ebft h\u1ea1n",obj:$ntb$$.toObject()};$abci$$.trang_thai="5";await $abci$$.save()}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd l\u1ec7nh mua \u0111\u00e3 h\u1ebft h\u1ea1n",
24
+ $e$$),$abci$$.event=`${$abci$$.event}-${$now$$.getTime()}`,$abci$$.data={note:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd l\u1ec7nh mua \u0111\u00e3 h\u1ebft h\u1ea1n. Error: "+$e$$,obj:$ntb$$.toObject()},$abci$$.trang_thai="5",await $abci$$.save()}$callback$$()})},()=>{$resolve$$()})});const $sells$$=await global.getModel("asssell").find({trang_thai:"0",status:!0});await new Promise($resolve$$=>{async.mapSeries($sells$$,($sell$$,$callback$$)=>{setImmediate(async()=>{let $query_abci$$={id_app:$sell$$.id_app,
25
+ event:`SELL-${$sell$$.id}`,id:$sell$$.id},$abci$$=await model.findOne($query_abci$$);if($abci$$&&$abci$$.trang_thai=="0"&&moment().diff(moment($abci$$.date_created),"minutes")<15)return Logger.error("Lenh ban nay dang duoc xu ly boi tien trinh khac",$abci$$.toObject(),", thoi gian da thuc hien:",moment().diff(moment($abci$$.date_created),"hours")),$callback$$();try{$abci$$=new model($query_abci$$),await $abci$$.save()}catch($e$$){return $callback$$()}if($sell$$.con_lai==0)$sell$$.trang_thai="8",await $sell$$.save(),
26
+ $abci$$.data={note:"L\u1ec7nh b\u00e1n \u0111\u00e3 b\u00e1n h\u1ebft",obj:$sell$$.toObject()},$abci$$.trang_thai="5",await $abci$$.save();else if((new Date($sell$$.ngay_het_han)).getTime()<$now$$.getTime())try{$sell$$.trang_thai="9",await global.getModel("assbank").sendCoinsFromSystemToAccount($sell$$.id_app,$sell$$.creator,$sell$$.con_lai,$sell$$.token,{...$sell$$.toObject(),event:"SELL-EXPIRED",memo:"L\u1ec7nh b\u00e1n \u0111\u00e3 h\u1ebft h\u1ea1n"}),await $sell$$.save(),$abci$$.data={note:"L\u1ec7nh b\u00e1n \u0111\u00e3 h\u1ebft h\u1ea1n",
27
+ obj:$sell$$.toObject()},$abci$$.trang_thai="5",await $abci$$.save()}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd l\u1ec7nh b\u00e1n \u0111\u00e3 h\u1ebft h\u1ea1n. Error",$e$$),$abci$$.trang_thai="5",$abci$$.data={note:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd l\u1ec7nh b\u00e1n \u0111\u00e3 h\u1ebft h\u1ea1n. Error: "+$e$$,obj:$sell$$.toObject()},await $abci$$.save()}else{var $investment_query$$=await global.getModel("assinvestment").findOne({id_app:$sell$$.id_app,token:$sell$$.token}).lean();
28
+ if(!$investment_query$$)return $abci$$.trang_thai="5",$abci$$.data={note:"Kho\u1ea3n \u0111\u1ea7u t\u01b0 kh\u00f4ng t\u1ed3n t\u1ea1i",obj:$sell$$.toObject()},await $abci$$.save(),$callback$$();let $thoi_gian_con_lai_sell$$=$investment_query$$.ngay_dao_han?moment($investment_query$$.ngay_dao_han).diff(moment(),"days"):-1;$investment_query$$={id_app:$sell$$.id_app,id_period:$sell$$.id_period,creator:{$ne:$sell$$.creator},trang_thai:"0",so_luong_con_lai:{$gt:0},ngay_het_han:{$gte:$now$$}};const $ntbs$$=
29
+ await global.getModel("assneedtobuy").find($investment_query$$);Logger.info("ki\u1ec3m tra l\u1ec7nh mua",$investment_query$$,",so luong lenh mua:",$ntbs$$.length);if($ntbs$$.length==0)return await model.deleteOne($query_abci$$),$callback$$();await new Promise($rs$$=>{async.mapSeries($ntbs$$,($ntb$$,$cb$$)=>{setImmediate(async()=>{if($sell$$.con_lai==0)return $cb$$();if($sell$$.gia_ban<=$ntb$$.gia_mua){if($ntb$$.thoi_gian_con_lai>0&&(Logger.info("check thoi gian con lai cua khoan dau tu",{thoi_gian_con_lai_sell:$thoi_gian_con_lai_sell$$,
30
+ thoi_gian_con_lai:$ntb$$.thoi_gian_con_lai}),$thoi_gian_con_lai_sell$$<0||$ntb$$.thoi_gian_con_lai<$thoi_gian_con_lai_sell$$))return $cb$$();let $query_abci$$={id_app:$ntb$$.id_app,event:`BUY-${$ntb$$.id}`,id:$ntb$$.id},$abci$$=await model.findOne($query_abci$$);if($abci$$&&$abci$$.trang_thai=="0"&&moment().diff(moment($abci$$.date_created),"hours")<1)return $callback$$();try{$abci$$=new model($query_abci$$),await $abci$$.save()}catch($e$$){return $callback$$()}try{let $so_luong_khop_lenh$$=Math.min($sell$$.con_lai,
31
+ $ntb$$.so_luong_con_lai),$gia_tri$$=$so_luong_khop_lenh$$*$sell$$.gia_ban;await global.getModel("assbank").sendCoinsFromSystemToAccount($ntb$$.id_app,$ntb$$.creator,$so_luong_khop_lenh$$,$sell$$.token,{...$sell$$.toObject(),event:"KHOPLENH-BUY",memo:"Kh\u1edbp l\u1ec7nh b\u00e1n"});await global.getModel("assbank").sendCoinsFromSystemToAccount($sell$$.id_app,$sell$$.creator,$gia_tri$$,$sell$$.denom,{...$sell$$.toObject(),event:"KHOPLENH-SELL",memo:"Kh\u1edbp l\u1ec7nh mua"});$sell$$.da_ban=($sell$$.da_ban||
32
+ 0)+$so_luong_khop_lenh$$;$sell$$.con_lai=$sell$$.so_luong-$sell$$.da_ban;$sell$$.con_lai==0&&($sell$$.trang_thai="8");await $sell$$.save();$ntb$$.so_luong_da_mua=($ntb$$.so_luong_da_mua||0)+$so_luong_khop_lenh$$;$ntb$$.so_luong_con_lai=$ntb$$.so_luong-$ntb$$.so_luong_da_mua;$ntb$$.so_luong_con_lai==0&&($ntb$$.trang_thai="8");await $ntb$$.save();$abci$$.data={note:"\u0110\u00e3 kh\u1edbp l\u1ec7nh.",id_sell:$sell$$.id,id_ntb:$ntb$$.id,id_period:$sell$$.id_period,so_luong_khop_lenh:$so_luong_khop_lenh$$,
33
+ gia_khop_lenh:$sell$$.gia_ban,obj:$ntb$$.toObject()};$ntb$$.so_luong_con_lai&&$ntb$$.trang_thai=="0"&&($abci$$.event=`${$abci$$.event}-${$now$$.getTime()}`);$abci$$.trang_thai="5";await $abci$$.save()}catch($e$$){return Logger.error("L\u1ed7i x\u1eed l\u00fd giao d\u1ecbch. B\u1ecf kho\u00e1 l\u1ec7nh mua ch\u1edd phi\u00ean ti\u1ebfp theo",$query_abci$$),$abci$$.event=`${$abci$$.event}-${$now$$.getTime()}`,$abci$$.data={note:"L\u1ed7i x\u1eed l\u00fd giao d\u1ecbch. H\u1ec7 th\u1ed1ng s\u1ebd th\u1eed l\u1ea1i trong phi\u00ean ti\u1ebfp theo. Error: "+
34
+ $e$$,obj:$ntb$$.toObject()},$abci$$.trang_thai="5",await $abci$$.save(),$cb$$($e$$)}}$cb$$()})},async $e$$=>{$e$$?($abci$$.event=`${$abci$$.event}-${$now$$.getTime()}`,$abci$$.data={note:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd l\u1ec7nh b\u00e1n n\u00e0y. H\u1ec7 th\u1ed1ng s\u1ebd th\u1eed l\u1ea1i trong phi\u00ean ti\u1ebfp theo. Error:"+$e$$,obj:$sell$$.toObject()}):($abci$$.event=`${$abci$$.event}-${$now$$.getTime()}`,$abci$$.data={note:"",obj:$sell$$.toObject()});$abci$$.trang_thai="5";await $abci$$.save();
35
+ $rs$$()})})}$callback$$()})},()=>{$resolve$$()})});$next$$()},5E3)},function($err$$){$err$$&&Logger.error($err$$)})};module.exports=model;
@@ -0,0 +1,19 @@
1
+ const assbankSchema=new Schema({id_app:{type:String,required:!0},address:{type:String,required:!0,maxlength:2024,trim:!0},denom:{type:String,required:!0},amount:{type:Number,default:0}});(global.configs||{}).createIndexes&&(assbankSchema.index({id_app:1}),assbankSchema.index({address:1}),assbankSchema.index({denom:1}),assbankSchema.index({id_app:1,address:1,denom:1},{unique:!0}));const model=mongoose.models.assbank||mongoose.model("assbank",assbankSchema);
2
+ model.getSystemAddress=()=>`${(global.configs||{}).ADDRESS_PREFIX||""}system`;model.getBalance=async($id_app$$,$address$$,$denom$$)=>(await model.find({id_app:$id_app$$,address:$address$$,denom:$denom$$}).lean()).map($b$$=>$b$$.amount).reduce(($a$$,$b$$)=>$a$$+$b$$,0);
3
+ model.getBalances=async($id_app$$,$address$$="",$denom$$="")=>{$id_app$$={id_app:$id_app$$,amount:{$gt:0}};$address$$&&($id_app$$.address=$address$$);$denom$$&&($id_app$$.denom=$denom$$);return(await model.find($id_app$$).lean()).map($b$$=>{const {address:$address$$,denom:$denom$$,amount:$amount$$}=$b$$;return{address:$address$$,denom:$denom$$,amount:$amount$$}})};
4
+ model.getSupply=async($id_app$$,$denom$$)=>(await model.find({id_app:$id_app$$,denom:$denom$$}).lean()).map($b$$=>$b$$.amount).reduce(($a$$,$b$$)=>$a$$+$b$$,0);model.getSupplies=async $id_app$$=>await (await model.find({id_app:$id_app$$}).lean()).asyncGroupBy(["denom"],["amount"]);
5
+ model.getInvestBalances=async($id_app$jscomp$4_query$$,$address$$="",$token$$="")=>{let $bl$$=(await model.getBalances($id_app$jscomp$4_query$$,$address$$,$token$$)).filter($b$$=>$b$$.address!=model.getSystemAddress());$bl$$.forEach($b$$=>{$b$$.location="wallet"});$id_app$jscomp$4_query$$={id_app:$id_app$jscomp$4_query$$,trang_thai:"0",con_lai:{$gt:0}};$address$$&&($id_app$jscomp$4_query$$.creator=$address$$);$token$$&&($id_app$jscomp$4_query$$.token=$token$$);$address$$=(await global.getModel("asssell").find($id_app$jscomp$4_query$$).lean()).map($s$$=>
6
+ ({amount:$s$$.con_lai,denom:$s$$.token,address:$s$$.creator,location:"market"}));$bl$$=[...$bl$$,...$address$$];return await $bl$$.asyncGroupBy(["address","denom","location"],["amount"])};
7
+ model.sendCoins=async($id_app$$,$from_address$$,$to_address$$,$amount$$,$denom$$,$data$$={})=>{if($amount$$=Number($amount$$)){if(!($id_app$$&&$from_address$$&&$to_address$$&&$denom$$))throw Logger.error("Kh\u00f4ng th\u1ec3 g\u1eedi token do l\u1ec7nh g\u1eedi thi\u1ebfu m\u1ed9t trong nh\u1eefng tham s\u1ed1 sau: id_app,from_address,to_address,amount,denom",{id_app:$id_app$$,from_address:$from_address$$,to_address:$to_address$$,amount:$amount$$,denom:$denom$$,data:$data$$}),"Kh\u00f4ng th\u1ec3 g\u1eedi token";
8
+ $data$$.from_address=$from_address$$;$data$$.to_address=$to_address$$;$data$$.amount=$amount$$;$data$$.denom=$denom$$;var {creator:$creator$$}=$data$$;$creator$$||=$from_address$$;var {event:$event$$}=$data$$;$event$$||="SENDCOINS";var {memo:$memo$$}=$data$$;$memo$$||="Send coins";await runWithoutSession(async()=>{await executeInTransaction(async()=>{var $receiver_bank_sender_bank$$=await model.findOne({id_app:$id_app$$,address:$from_address$$,denom:$denom$$}).inTxn();if(!$receiver_bank_sender_bank$$||
9
+ $receiver_bank_sender_bank$$.amount<$amount$$)throw`V\u00ed ${$from_address$$} kh\u00f4ng c\u00f3 \u0111\u1ee7 ${$amount$$} ${$denom$$}`;$receiver_bank_sender_bank$$.amount-=$amount$$;await $receiver_bank_sender_bank$$.save();($receiver_bank_sender_bank$$=await model.findOne({id_app:$id_app$$,address:$to_address$$,denom:$denom$$}).inTxn())||($receiver_bank_sender_bank$$=new model({id_app:$id_app$$,address:$to_address$$,denom:$denom$$}));$receiver_bank_sender_bank$$.amount+=$amount$$;await $receiver_bank_sender_bank$$.save();
10
+ await global.getModel("asstransaction").createTransaction({id_app:$id_app$$,creator:$creator$$,event:$event$$,memo:$memo$$,data:$data$$})})});(await global.getModel("asskey").find({id_app:$id_app$$,address:$from_address$$}).lean()).forEach($u$$=>{let $title$$=$memo$$;$title$$||=`TK ${$u$$.name}(address:${$u$$.address}) -${$amount$$}${$denom$$}`;global.getModel("user").emitEvent($u$$.username,"blockchain.wallet.changed",{id_app:$id_app$$,title:$title$$,receiver:$to_address$$,sender:$from_address$$,
11
+ data:{amount:$amount$$,denom:$denom$$}})});(await global.getModel("asskey").find({id_app:$id_app$$,address:$from_address$$}).lean()).forEach($u$$=>{let $title$$=$memo$$;$title$$||=`TK ${$u$$.name}(address:${$u$$.address}) +${$amount$$}${$denom$$}`;global.getModel("user").emitEvent($u$$.username,"blockchain.wallet.changed",{id_app:$id_app$$,title:$title$$,receiver:$to_address$$,sender:$from_address$$,data:{amount:$amount$$,denom:$denom$$}})})}};
12
+ model.sendCoinsFromAccountToSystem=async($id_app$$,$from_address$$,$amount$$,$denom$$,$data$$={})=>{$data$$.creator=$data$$.creator||$from_address$$;let $to_address$$=model.getSystemAddress();return model.sendCoins($id_app$$,$from_address$$,$to_address$$,$amount$$,$denom$$,$data$$)};
13
+ model.sendCoinsFromSystemToAccount=async($id_app$$,$to_address$$,$amount$$,$denom$$,$data$$={})=>{let $from_address$$=model.getSystemAddress();$data$$.creator=$data$$.creator||$to_address$$;return model.sendCoins($id_app$$,$from_address$$,$to_address$$,$amount$$,$denom$$,$data$$)};
14
+ model.mintCoins=async($id_app$$,$creator$$,$amount$$,$denom$$,$data$$={},$options$$={push_notify:!0})=>{if($amount$$){await runWithoutSession(async()=>{await executeInTransaction(async()=>{var $event$jscomp$1_receiver_bank$$=await model.findOne({id_app:$id_app$$,address:$creator$$,denom:$denom$$}).inTxn();$event$jscomp$1_receiver_bank$$||=new model({id_app:$id_app$$,address:$creator$$,denom:$denom$$,amount:0});$event$jscomp$1_receiver_bank$$.amount+=$amount$$;await $event$jscomp$1_receiver_bank$$.save();
15
+ $data$$.to_address=$creator$$;$data$$.amount=$amount$$;$data$$.denom=$denom$$;({event:$event$jscomp$1_receiver_bank$$}=$data$$);$event$jscomp$1_receiver_bank$$||="MINT";let {memo:$memo$$}=$data$$;$memo$$||="Mint coins";await global.getModel("asstransaction").createTransaction({id_app:$id_app$$,creator:$creator$$,event:$event$jscomp$1_receiver_bank$$,memo:$memo$$,data:$data$$})})});var $u$$=await global.getModel("asskey").findOne({id_app:$id_app$$,address:$creator$$}).lean();if($u$$){let $title$$=
16
+ `TK ${$u$$.name}(address:${$u$$.address}) +${$amount$$}${$denom$$}`;global.getModel("user").emitEvent($u$$.username,"blockchain.wallet.changed",{id_app:$id_app$$,title:$title$$,receiver:$creator$$,data:{amount:$amount$$,denom:$denom$$}},$options$$.push_notify)}}};const {executeInTransaction,runWithoutSession}=require("../libs/sessionContext"),{isSupperAdmin}=require("../libs/utils");
17
+ model.issueCoins=async($user$$,$data$$)=>{let $creator$$=$data$$.creator;if(!await global.getModel("asskey").findOne({id_app:$user$$.current_id_app,username:$user$$.email,address:$creator$$}).lean())throw"\u0110\u1ecba ch\u1ec9 v\u00ed n\u00e0y kh\u00f4ng thu\u1ed9c v\u1ec1 b\u1ea1n";if(global.configs.MAIN_DENOM==$data$$.denom){if(!isSupperAdmin($user$$.email.toLowerCase()))throw"Ch\u1ec9 ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb h\u1ec7 th\u1ed1ng m\u1edbi c\u00f3 quy\u1ec1n ph\u00e1t h\u00e0nh token n\u00e0y";
18
+ }else if(await model.getBalance($user$$.current_id_app,$creator$$,global.configs.MAIN_DENOM)<1)throw"B\u1ea1n kh\u00f4ng \u0111\u1ee7 s\u1ed1 d\u01b0 token h\u1ec7 th\u1ed1ng \u0111\u1ec3 ph\u00e1t h\u00e0nh token n\u00e0y";try{global.configs.MAIN_DENOM!==$data$$.denom&&await model.sendCoinsFromAccountToSystem($user$$.current_id_app,$creator$$,1,global.configs.MAIN_DENOM,{...$data$$,memo:`S\u1eed d\u1ee5ng 1${global.configs.MAIN_DENOM} \u0111\u1ec3 ph\u00e1t h\u00e0nh ${$data$$.amount}${$data$$.denom}`})}catch($e$$){throw Logger.error("can't spend main coins to mining new coin",
19
+ $e$$),$e$$;}try{await model.mintCoins($user$$.current_id_app,$creator$$,$data$$.amount,$data$$.denom,{...$data$$,memo:"Ph\u00e1t h\u00e0nh token",event:"ISSUE"})}catch($e$$){throw Logger.error("can't mint coins",$e$$),$e$$;}return $data$$};module.exports=model;
@@ -0,0 +1,4 @@
1
+ const voucherSchema=new Schema({wallet_address:String,token:String,so_luong:Number,menh_gia:Number,gia_tri:Number,da_hoan_tra:Boolean,line:Number}),assbookingSchema=new Schema({id_app:String,ma_ct:{type:String,default:"ASSBOOKING"},so_ct:String,ngay_ct:{type:Date,default:Date.now},id_product:{type:String,required:!0,trim:!0},ten_san_pham:{type:String},user_hotel:String,ma_phong:{type:String,required:!0,uppercase:!0,trim:!0},ngay_nhan_phong:{type:Date,required:!0},so_dem:Number,don_gia_vc:Number,id_period:String,
2
+ so_luong_vc:Number,menh_gia:Number,gia_tri_can_thanh_toan:Number,voucher_thanh_toan:[voucherSchema],gia_tri_da_thanh_toan:Number,chenh_lech:Number,wallet_hotel:String,trang_thai:String,ks_xac_nhan_nhan_phong:Boolean,kh_xac_nhan_nhan_phong: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:""}});
3
+ (global.configs||{}).createIndexes&&(assbookingSchema.index({id_app:1}),assbookingSchema.index({so_ct:1}),assbookingSchema.index({denom:1}),assbookingSchema.index({token:1}),assbookingSchema.index({trang_thai:1}),assbookingSchema.index({id_product:1}),assbookingSchema.index({ten_san_pham:1}),assbookingSchema.index({ngay_nhan_phong:1}),assbookingSchema.index({user_hotel:1}),assbookingSchema.index({ma_phong:1}),assbookingSchema.index({id_period:1}),assbookingSchema.index({status:1}),assbookingSchema.index({user_created:1}),
4
+ assbookingSchema.index({creator:"text",token:"text",denom:"text",ten_san_pham:"text"},{name:"assbooking_index2"}));const model=mongoose.models.assbooking||mongoose.model("assbooking",assbookingSchema);module.exports=model;
@@ -0,0 +1,3 @@
1
+ const assbuySchema=new Schema({id_app:String,creator:{type:String,required:!0},id:{type:String,trim:!0},id_sell:{type:String,required:!0},token:{type:String,required:!0,lowercase:!0},nguyen_gia:{type:Number},denom:{type:String,required:!0,lowercase:!0,trim:!0},so_luong_ban:{type:Number},gia_ban:{type:Number},so_luong:{type:Number,required:!0},gia_mua:{type:Number,required:!0},tong_gia_tri:{type:Number},exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},
2
+ date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});(global.configs||{}).createIndexes&&(assbuySchema.index({id_app:1}),assbuySchema.index({creator:1}),assbuySchema.index({id:1}),assbuySchema.index({id_sell:1}),assbuySchema.index({denom:1}),assbuySchema.index({token:1}),assbuySchema.index({status:1}),assbuySchema.index({user_created:1}),assbuySchema.index({creator:"text",id_sell:"text",token:"text",denom:"text"},{name:"assbuy_index2"}));
3
+ const model=mongoose.models.assbuy||mongoose.model("assbuy",assbuySchema);module.exports=model;
@@ -0,0 +1,4 @@
1
+ const asscashwithdrawSchema=new Schema({id_app:String,creator:{type:String,required:!0,trim:!0},id:{type:String,trim:!0},token:{type:String,required:!0,lowercase:!0,trim:!0},amount:{type:Number,required:!0},require_date:Date,payer:{type:String,trim:!0},payment_date:Date,trang_thai:String,note:String,ten_ngan_hang:String,ten_tk:String,so_tk:String,signature:String,exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},
2
+ user_created:{type:String,default:""},user_updated:{type:String,default:""}});
3
+ (global.configs||{}).createIndexes&&(asscashwithdrawSchema.index({id_app:1}),asscashwithdrawSchema.index({creator:1}),asscashwithdrawSchema.index({id:1}),asscashwithdrawSchema.index({payer:1}),asscashwithdrawSchema.index({token:1}),asscashwithdrawSchema.index({require_date:-1}),asscashwithdrawSchema.index({payment_date:-1}),asscashwithdrawSchema.index({trang_thai:1}),asscashwithdrawSchema.index({status:1}),asscashwithdrawSchema.index({user_created:1}),asscashwithdrawSchema.index({creator:"text",token:"text",
4
+ payer:"text",note:"text"},{name:"asscashwithdraw_index2"}));const model=mongoose.models.asscashwithdraw||mongoose.model("asscashwithdraw",asscashwithdrawSchema);module.exports=model;
@@ -0,0 +1,2 @@
1
+ const assfindhashSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},creator:{type:String,required:!0},id:{type:Number,required:!0},hash:{type:String,required:!0},previousHash:String,timestamp:Number,data:String,difficulty:Number,nonce:Number,date_created:{type:Date,default:Date.now}});
2
+ (global.configs||{}).createIndexes&&(assfindhashSchema.index({id_app:1}),assfindhashSchema.index({creator:1}),assfindhashSchema.index({date_created:1}),assfindhashSchema.index({id:1}),assfindhashSchema.index({hash:1}),assfindhashSchema.index({id_app:1,id:1},{unique:!0}),assfindhashSchema.index({previousHash:1}));const model=mongoose.models.assfindhash||mongoose.model("assfindhash",assfindhashSchema);module.exports=model;
@@ -0,0 +1,13 @@
1
+ const assinvestmentSchema=new Schema({id_app:String,so_hd:{required:!0,type:String,set:function($so_hd$$){this._previous_so_hd=this.so_hd;return $so_hd$$},trim:!0},ngay_hd:{type:Date,default:Date.now},creator:{type:String,required:!0,trim:!0},id:{type:String,trim:!0},id_product:{type:String,trim:!0},ten_san_pham:{type:String},id_period:{type:String,required:!0,trim:!0},ten_ky_han:{type:String},product_token:{type:String,lowercase:!0,trim:!0},token:{type:String,required:!0,lowercase:!0,trim:!0},co_phan:Boolean,
2
+ lai_da_tra:Number,ngay_tinh_lai_ky_truoc:{type:Date},ngay_tinh_lai_ky_tiep_theo:{type:Date},gia:{type:Number},so_luong:{type:Number,required:!0},tong_gia_tri:{type:Number},lai_du_tinh:Number,tong_gia_tri_dao_han:Number,lai_suat_cam_ket:{type:Number},ky_tinh_lai:{type:Number},lan_tinh_lai:{type:Number,default:0},ngay_phat_hanh:{type:Date},ky_han:{type:Number},ngay_dao_han:{type:Date},cho_phep_rut_von:{type:Boolean},lai_suat_truoc_han:{type:Number},tg_xu_ly_rut_von:{type:Number},cho_phep_chuyen_nhuong:{type:Boolean},
3
+ denom:{type:String,trim:!0},da_dao_han:{type:Boolean},trang_thai:{type:String,default:"1"},ty_le_hoa_hong:Number,denom_hoa_hong:String,address_hoa_hong:String,ky_tra_hoa_hong:Number,introduce_code:String,da_rut_von:Number,thong_tin_hop_dong:Schema.Types.Mixed,signature:String,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:""}});
4
+ (global.configs||{}).createIndexes&&(assinvestmentSchema.index({id_app:1}),assinvestmentSchema.index({creator:1}),assinvestmentSchema.index({id:1}),assinvestmentSchema.index({id_product:1}),assinvestmentSchema.index({ten_san_pham:1}),assinvestmentSchema.index({product_token:1}),assinvestmentSchema.index({co_phan:1}),assinvestmentSchema.index({ngay_tinh_lai_ky_truoc:1}),assinvestmentSchema.index({ngay_tinh_lai_ky_tiep_theo:1}),assinvestmentSchema.index({id_period:1}),assinvestmentSchema.index({ten_ky_han:1}),
5
+ assinvestmentSchema.index({cho_phep_rut_von:1}),assinvestmentSchema.index({cho_phep_chuyen_nhuong:1}),assinvestmentSchema.index({da_dao_han:1}),assinvestmentSchema.index({denom:1}),assinvestmentSchema.index({token:1}),assinvestmentSchema.index({id_app:1,token:1},{unique:!0}),assinvestmentSchema.index({status:1}),assinvestmentSchema.index({user_created:1}),assinvestmentSchema.index({creator:"text",product_token:"text",token:"text",ten_san_pham:"text",ten_ky_han:"text",denom:"text"},{name:"assinvestment_index2"}));
6
+ assinvestmentSchema.pre("save",function($next$$){if(!this.so_hd)return $next$$();const $self$$=this;this.isNew||this.so_hd!=this._previous_so_hd?mongoose.models.customer.countDocuments({id_app:this.id_app,so_hd:this.so_hd},($e$$,$count$$)=>{$count$$>0?$next$$(Error(`S\u1ed1 h\u1ee3p \u0111\u1ed3ng '${$self$$.so_hd}' \u0111\u00e3 t\u1ed3n t\u1ea1i`)):$next$$()}):$next$$()});
7
+ const thongke=async $p$$=>{let $withdraws$$=await global.getModel("asswithdraw").find({id_app:$p$$.id_app,token:$p$$.token,trang_thai:"5"},{so_luong:1,trang_thai:1}).lean();$p$$.da_rut_von=$withdraws$$.map($ivt$$=>$ivt$$.so_luong).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$p$$.id_period&&$p$$.so_luong&&$p$$.id_app&&(await [$p$$].asyncJoinModel2($p$$.id_app,"assperiod",{where:{id_period:"id"},fields:["ky_han","gia","lai_suat_cam_ket","denom"]}),$p$$.tong_gia_tri=($p$$.gia||0)*($p$$.so_luong||0),$p$$.lai_du_tinh=
8
+ Math.roundBy($p$$.lai_suat_cam_ket/365/100*$p$$.tong_gia_tri*$p$$.ky_han,0),$p$$.tong_gia_tri_dao_han=$p$$.tong_gia_tri+$p$$.lai_du_tinh)};assinvestmentSchema.post("find",async function($result$$){for(let $i$$=0;$i$$<$result$$.length;$i$$++){const $p$$=$result$$[$i$$];$p$$.token&&$p$$.id_app&&await thongke($p$$)}});assinvestmentSchema.post("findOne",async function($p$$){$p$$&&$p$$.token&&$p$$.id_app&&await thongke($p$$)});const model=mongoose.models.assinvestment||mongoose.model("assinvestment",assinvestmentSchema);
9
+ model.getPercentOfSteps=$steps$$=>{let $owners$$=[];$steps$$.filter($s$$=>$s$$.trang_thai=="4"||$s$$.trang_thai=="5").sort(($a$$,$b$$)=>$a$$.stt-$b$$.stt).forEach($s$$=>{let $owner$$={code:$s$$.code,name:$s$$.name,sl_slot:$s$$.sl_slot,gt_slot:$s$$.gt_slot,dillution:$s$$.dillution,raise:$s$$.raise,percent:$s$$.dillution||100,investment:$s$$.raise||$s$$.valuation};$owners$$.forEach($o$$=>{$o$$.percent*=1-$s$$.dillution/100});$owners$$.push($owner$$);$owners$$.forEach($o$$=>{$o$$.valuation=Math.roundBy($s$$.valuation*
10
+ $o$$.percent/100,0);$o$$.sl_cp=Math.roundBy($s$$.total_share*$o$$.percent/100,0);$o$$.sl_cp_slot=$o$$.sl_slot?$o$$.sl_cp/$o$$.sl_slot:0;$o$$.gt_cp_slot=$o$$.sl_slot?$o$$.valuation/$o$$.sl_slot:0;$o$$.pi=$o$$.investment?$o$$.valuation/$o$$.investment:0});$s$$.owners={...$owners$$}});return $owners$$};
11
+ model.getInvestmentMarketValue=async($id_app_steps$$,$frm_step_token$$)=>{Logger.info("get investment market value",$frm_step_token$$,$id_app_steps$$);const $invest$$=await model.findOne({id_app:$id_app_steps$$,token:$frm_step_token$$}).lean();if($invest$$){var $period$$=await global.getModel("assperiod").findOne({id_app:$id_app_steps$$,id:$invest$$.id_period}).lean();if($period$$)if($period$$.goi_dau_tu&&$period$$.frm_step_code)if($invest$$.goi_dau_tu=!0,$frm_step_token$$=await global.getModel("financialroadmap").findOne({id_app:$id_app_steps$$,
12
+ code:$invest$$.id_product.toString()}).lean()){$id_app_steps$$=model.getPercentOfSteps($frm_step_token$$.steps||[]);if($frm_step_token$$=$id_app_steps$$.find($s$$=>$s$$.code===$period$$.frm_step_code))return $frm_step_token$$.t_sl_cp_ht=$frm_step_token$$.sl_cp_slot*$invest$$.so_luong,$frm_step_token$$.t_gt_cp_ht=$frm_step_token$$.gt_cp_slot*$invest$$.so_luong,$frm_step_token$$;Logger.info("not find step",$period$$.frm_step_code,$id_app_steps$$)}else Logger.info("not find frm",$invest$$.id_product.toString(),
13
+ $id_app_steps$$);else Logger.info("period",$invest$$.id_period,"does not a frm",$period$$.frm_step_code);else Logger.info("not find period",$invest$$.id_period,$id_app_steps$$)}else Logger.info("not find investment",$frm_step_token$$,$id_app_steps$$)};module.exports=model;
@@ -0,0 +1,2 @@
1
+ const assissueSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},creator:{type:String,required:!0,maxlength:1024},denom:{type:String,required:!0},amount:{type:Number,required:!0},signature:{type:String,required:!0},user_created:String,date_created:{type:Date,default:Date.now}});(global.configs||{}).createIndexes&&(assissueSchema.index({id_app:1}),assissueSchema.index({denom:1}),assissueSchema.index({creator:1}),assissueSchema.index({user_created:1}),assissueSchema.index({date_created:-1}));
2
+ const model=mongoose.models.assissue||mongoose.model("assissue",assissueSchema);module.exports=model;
@@ -0,0 +1,15 @@
1
+ const async=require("async"),{ec}=require("elliptic-nodejs"),EC=new ec("secp256k1"),asskeySchema=new Schema({id_app:String,name:String,username:{type:String,required:!0,maxlength:1024,trim:!0},address:{type:String,required:!0,maxlength:2024,trim:!0},mnemonic:String,private_key:String,privateKey:String,note:String,wallet_type:{type:Number,default:9},asset:{type:String,uppercase:!0,trim:!0},balances:Schema.Types.Mixed,exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,
2
+ default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
3
+ (global.configs||{}).createIndexes&&(asskeySchema.index({id_app:1}),asskeySchema.index({username:1,address:1}),asskeySchema.index({note:1}),asskeySchema.index({name:1}),asskeySchema.index({id_app:1,address:1},{unique:!0}),asskeySchema.index({status:1}),asskeySchema.index({user_created:1}),asskeySchema.index({username:"text",address:"text",note:"text",name:"text"},{name:"asskey_index"}));const model=mongoose.models.asskey||mongoose.model("asskey",asskeySchema);
4
+ model.getCoinBalance=async($condition$$={},$options$$={})=>{if(!$condition$$.id_app)throw"H\u00e0m n\u00e0y y\u00eau c\u1ea7u \u0111i\u1ec1u ki\u1ec7n ch\u1ee9a id_app";const {bankBalancesGet:$bankBalancesGet$$}=require("../libs/blockchainconnect");let $items$$=await model.find($condition$$).lean();await new Promise(($rs$$,$rj$$)=>{async.mapSeries($items$$,($item$$,$cb$$)=>{setImmediate(async()=>{try{let $bls$$=await $bankBalancesGet$$($condition$$.id_app,$item$$.address);$options$$.denom&&($bls$$=
5
+ $bls$$.filter($b$$=>$b$$.denom==$options$$.denom));let $needtobuys$$=await global.getModel("assneedtobuy").find({creator:$item$$.address,id_app:$item$$.id_app,trang_thai:"0"}).lean();$needtobuys$$=$needtobuys$$.filter($s$$=>$s$$.so_luong_con_lai>0&&$s$$.trang_thai=="0").map($s$$=>({denom:$s$$.denom,amount:$s$$.so_luong_con_lai*$s$$.gia_mua}));$bls$$=[...$bls$$,...$needtobuys$$];$bls$$.forEach($r$$=>{$r$$.amount=Number($r$$.amount);$r$$.price=$r$$.price||1;$r$$.value=$r$$.price*$r$$.amount;delete $r$$.key});
6
+ $item$$.balances=$bls$$;$cb$$()}catch($e$$){$cb$$($e$$)}})},$e$$=>{if($e$$)return $rj$$($e$$);$rs$$()})});return $items$$.map($item$$=>($item$$.balances||[]).map($bl$$=>$bl$$.value||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)).reduce(($a$$,$b$$)=>$a$$+$b$$,0)};
7
+ model.getInvestBalance=async($condition$$={})=>{if(!$condition$$.id_app)throw"H\u00e0m n\u00e0y y\u00eau c\u1ea7u \u0111i\u1ec1u ki\u1ec7n ch\u1ee9a id_app";const {bankBalancesGet:$bankBalancesGet$$}=require("../libs/blockchainconnect");let $items$$=await model.find($condition$$).lean();await new Promise(($rs$$,$rj$$)=>{async.mapSeries($items$$,($item$$,$cb$$)=>{setImmediate(async()=>{try{let $bls$$=(await $bankBalancesGet$$($condition$$.id_app,$item$$.address)).filter($b$$=>$b$$.denom!==configs.MAIN_DENOM),
8
+ $sellings$$=await global.getModel("asssell").find({creator:$item$$.address,id_app:$item$$.id_app,trang_thai:"0"}).lean();$sellings$$=$sellings$$.filter($s$$=>$s$$.con_lai>0&&$s$$.trang_thai=="0").map($s$$=>({denom:$s$$.token,amount:$s$$.con_lai}));$bls$$=[...$bls$$,...$sellings$$];await $bls$$.asyncJoinModel2($condition$$.id_app,global.getModel("assinvestment"),{where:{denom:"token"},fields:[{price:"gia",id_investment:"id"}]});$bls$$=$bls$$.filter($b$$=>$b$$.id_investment);$bls$$.forEach($r$$=>{$r$$.amount=
9
+ Number($r$$.amount);$r$$.price=$r$$.price||1;$r$$.value=$r$$.price*$r$$.amount;delete $r$$.key});$item$$.balances=$bls$$;$cb$$()}catch($e$$){$cb$$($e$$)}})},$e$$=>{if($e$$)return $rj$$($e$$);$rs$$()})});return $items$$.map($item$$=>($item$$.balances||[]).map($bl$$=>$bl$$.value||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)).reduce(($a$$,$b$$)=>$a$$+$b$$,0)};const toHexString=$byteArray$$=>Array.from($byteArray$$,$byte$$=>("0"+($byte$$&255).toString(16)).slice(-2)).join("");
10
+ model.createWallet=async($id_app$$,$username$$,$name$$="",$wallet_type$$=9,$save$$=!0)=>new Promise(($resolve$$,$reject$$)=>{try{let $privateKey$$=EC.genKeyPair().getPrivate().toString(8),$address$$=model.getPublicKeyFromPrivateKey($privateKey$$);if($save$$){let $wallet$$=new model({username:$username$$,user_created:$username$$,privateKey:$privateKey$$,address:$address$$,id_app:$id_app$$,wallet_type:$wallet_type$$,name:$name$$||$username$$});$wallet$$.save($e$$=>{if($e$$)return $reject$$(Error($e$$.message));
11
+ $resolve$$($wallet$$)})}else $resolve$$({privateKey:$privateKey$$,address:$address$$})}catch($e$$){Logger.error($e$$),$reject$$(Error($e$$.message))}});model.getPrivateKey=async($id_app$$,$address$$)=>new Promise(($resolve$$,$reject$$)=>{model.findOne({id_app:$id_app$$,address:$address$$}).lean().then(async $rs$$=>{if($rs$$)return $resolve$$($rs$$.privateKey);$reject$$(Error("Not found wallet"))}).catch($e$$=>{$reject$$(Error($e$$.message))})});
12
+ model.getPublicKeyFromPrivateKey=$key$jscomp$10_privateKey$$=>{$key$jscomp$10_privateKey$$=EC.keyFromPrivate($key$jscomp$10_privateKey$$,"hex");return`${global.configs.ADDRESS_PREFIX||""}${$key$jscomp$10_privateKey$$.getPublic().encode("hex")}`};
13
+ model.getUsername=async($id_app$$,$address$$)=>new Promise(($resolve$$,$reject$$)=>{model.findOne({id_app:$id_app$$,address:$address$$}).lean().then(async $rs$$=>$rs$$?$resolve$$($rs$$.username):$reject$$(Error("\u0110\u1ecba ch\u1ec9 v\u00ed n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i"))).catch($e$$=>{$reject$$(Error($e$$.message))})});
14
+ model.sign=async($id_app$$,$address$$,$dataToSign$$)=>{try{let $privateKey$$=await model.getPrivateKey($id_app$$,$address$$),$key$$=EC.keyFromPrivate($privateKey$$,"hex"),$msgHash$$=[JSON.stringify($dataToSign$$)];return toHexString($key$$.sign($msgHash$$).toDER())}catch($e$$){throw Error(`Can't sign data. Error: ${$e$$.message}`);}};
15
+ model.verifySignature=async($address$jscomp$4_key$$,$data_msgHash$$,$signature$$)=>{configs.ADDRESS_PREFIX&&($address$jscomp$4_key$$=$address$jscomp$4_key$$.split(configs.ADDRESS_PREFIX).join(""));$address$jscomp$4_key$$=EC.keyFromPublic($address$jscomp$4_key$$,"hex");$data_msgHash$$=[JSON.stringify($data_msgHash$$)];return $address$jscomp$4_key$$.verify($data_msgHash$$,$signature$$)};module.exports=model;
@@ -0,0 +1,6 @@
1
+ const assneedtobuySchema=new Schema({id_app:String,creator:{type:String,required:!0,trim:!0},id:{type:String,trim:!0},id_product:{type:String,trim:!0},product_token:{type:String,lowercase:!0,trim:!0},ten_san_pham:{type:String},id_period:{type:String,required:!0,trim:!0},ten_ky_han:{type:String},ky_han:Number,gia_goc:Number,lai_suat_cam_ket:Number,ten_lh_dt:String,so_luong:Number,so_luong_da_mua:{type:Number,default:0},so_luong_con_lai:{type:Number,default:0},thoi_gian_con_lai:Number,gia_mua:Number,
2
+ denom:{type:String,lowercase:!0,trim:!0},ngay_het_han:Date,trang_thai:String,signature:String,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:""}});
3
+ (global.configs||{}).createIndexes&&(assneedtobuySchema.index({id_app:1}),assneedtobuySchema.index({creator:1}),assneedtobuySchema.index({id:1}),assneedtobuySchema.index({id_product:1}),assneedtobuySchema.index({product_token:1}),assneedtobuySchema.index({ten_san_pham:1}),assneedtobuySchema.index({id_period:1}),assneedtobuySchema.index({ten_ky_han:1}),assneedtobuySchema.index({ky_han:1}),assneedtobuySchema.index({gia_goc:1}),assneedtobuySchema.index({lai_suat_cam_ket:1}),assneedtobuySchema.index({ten_lh_dt:1}),
4
+ assneedtobuySchema.index({so_luong:1}),assneedtobuySchema.index({ngay_het_han:1}),assneedtobuySchema.index({denom:1}),assneedtobuySchema.index({trang_thai:1}),assneedtobuySchema.index({status:1}),assneedtobuySchema.index({user_created:1}),assneedtobuySchema.index({creator:"text",ten_san_pham:"text",ten_ky_han:"text",denom:"text"},{name:"assneedtobuy_index2"}));const model=mongoose.models.assneedtobuy||mongoose.model("assneedtobuy",assneedtobuySchema);
5
+ model.updateNeedToBy=async $item$$=>{$item$$.so_luong&&$item$$.gia_mua&&($item$$.tong_gia_tri=$item$$.so_luong*$item$$.gia_mua);$item$$.id_period!=void 0&&$item$$.id_period!=null&&await [$item$$].asyncJoinModel2($item$$.id_app,global.getModel("assperiod"),{where:$item$$=>({id:$item$$.id_period}),fields:["ten_ky_han","ten_lh_dt","id_product","ten_san_pham","denom",{gia_goc:"gia"},"lai_suat_cam_ket","lai_suat_truoc_han","ky_han","co_phan","ky_tinh_lai"]});$item$$.id_product!=void 0&&$item$$.id_product!=
6
+ null&&await [$item$$].asyncJoinModel2($item$$.id_app,global.getModel("assproduct"),{where:{id_product:"id"},fields:["ten_san_pham","hinh_anh","logo","ma_loai",{product_token:"token"}]})};module.exports=model;
@@ -0,0 +1,7 @@
1
+ const assperiodSchema=new Schema({id_app:String,creator:{type:String,trim:!0},id:{type:String,trim:!0},ten_ky_han:{type:String},id_product:{type:String,trim:!0},ten_san_pham:{type:String},product_token:{type:String,lowercase:!0,trim:!0},gia:{type:Number,default:0},lai_suat_cam_ket:{type:Number,default:0},lai_suat_truoc_han:{type:Number,default:0},ky_han:{type:Number},ky_tinh_lai:{type:Number},chia_loi_nhuan:Boolean,loi_nhuan_duoc_chia:{type:Number,default:0},ngay_chia_loi_nhuan:Date,lai_suat_thoi_gian_con_lai:{type:Number,
2
+ default:0},tong_so_token:{type:Number,default:0},da_dau_tu:{type:Number,default:0},da_dao_han:{type:Number,default:0},da_rut_von:{type:Number,default:0},cho_phep_rut_von:{type:Boolean},tg_xu_ly_rut_von:{type:Number,default:0},cho_phep_chuyen_nhuong:{type:Boolean},hoat_dong:{type:Boolean},denom:{type:String,trim:!0},co_phan:Boolean,goi_dau_tu:Boolean,ngay_phat_hanh:Date,id_rpt:String,lai_suat_tang_them_so_huu_token:{type:Number,default:0},token_so_huu:String,so_luong_so_huu:{type:Number,default:0},
3
+ so_ngay_dau_tu_toi_thieu:{type:Number,default:0},tru_lai_da_tra:Boolean,ty_le_hoa_hong_groups:[],ky_tra_hoa_hong:Number,han_tt:{type:Number,default:1},trang_thai:String,signature:String,visible_to:{type:Number,default:0},visible_to_users:[String],visible_to_usergroups:[String],update_right:[String],delete_right:[String],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:""},
4
+ user_updated:{type:String,default:""}}),thongke=async $p$$=>{let $investments$$=await global.getModel("assinvestment").find({id_app:$p$$.id_app,id_period:$p$$.id,trang_thai:{$nin:["0","2","7"]}},{so_luong:1,da_rut_von:1,trang_thai:1}).lean();$p$$.da_dau_tu=$investments$$.map($ivt$$=>$ivt$$.so_luong).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$p$$.da_rut_von=$investments$$.map($ivt$$=>$ivt$$.da_rut_von||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$p$$.da_dao_han=$investments$$.filter($inv$$=>$inv$$.trang_thai=="5").map($ivt$$=>
5
+ $ivt$$.so_luong).reduce(($a$$,$b$$)=>$a$$+$b$$,0)-$p$$.da_rut_von};assperiodSchema.post("find",async function($result$$){for(let $i$$=0;$i$$<$result$$.length;$i$$++){const $p$$=$result$$[$i$$];$p$$.id&&$p$$.id_app&&await thongke($p$$)}});assperiodSchema.post("findOne",async function($p$$){$p$$&&$p$$.id&&$p$$.id_app&&await thongke($p$$)});
6
+ (global.configs||{}).createIndexes&&(assperiodSchema.index({id_app:1}),assperiodSchema.index({creator:1}),assperiodSchema.index({id:1}),assperiodSchema.index({ten_ky_han:1}),assperiodSchema.index({id_product:1}),assperiodSchema.index({product_token:1}),assperiodSchema.index({visible_to:1}),assperiodSchema.index({visible_to_users:1}),assperiodSchema.index({ten_san_pham:1}),assperiodSchema.index({co_phan:1}),assperiodSchema.index({ngay_phat_hanh:-1}),assperiodSchema.index({cho_phep_rut_von:1}),assperiodSchema.index({cho_phep_chuyen_nhuong:1}),
7
+ assperiodSchema.index({hoat_dong:1}),assperiodSchema.index({denom:1}),assperiodSchema.index({trang_thai:1}),assperiodSchema.index({status:1}),assperiodSchema.index({user_created:1}),assperiodSchema.index({creator:"text",ten_san_pham:"text",ten_ky_han:"text",denom:"text"},{name:"assperiod_index2"}));const model=mongoose.models.assperiod||mongoose.model("assperiod",assperiodSchema);module.exports=model;
@@ -0,0 +1,13 @@
1
+ const assproductSchema=new Schema({id_app:String,creator:{type:String,required:!0,trim:!0},id:{type:String,trim:!0},ten_san_pham:{type:String,required:!0},mieu_ta:{type:String},tong_dien_tich:{type:String},chu_dau_tu:{type:String},gia_tri_hien_tai:{type:String},dia_chi:{type:String},hien_trang:{type:String},vi_tri:{type:String},thiet_ke:{type:String},tien_nghi:{type:String},hinh_anh:{type:String},video:{type:String},duoc_chuyen_thanh_cp:{type:Boolean},co_phan:Boolean,token:{type:String,required:!0,
2
+ lowercase:!0,trim:!0},so_luong:{type:Number,default:0},so_luong_goi_dau_tu:{type:Number,default:0},tong_gia_tri_goi_dau_tu:{type:Number,default:0},tong_so_token_unactive:{type:Number,default:0},tong_gia_tri_unactive:{type:Number,default:0},da_dau_tu_unactive:{type:Number,default:0},gia_tri_da_dau_tu_unactive:{type:Number,default:0},signature:String,da_dau_tu:{type:Number,default:0},gia_tri_da_dau_tu:{type:Number,default:0},trang_thai:String,ma_loai:String,visible_to:{type:Number,default:0},visible_to_users:[String],
3
+ visible_to_usergroups:[String],update_right:[String],delete_right:[String],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:""}}),thongke=async $item$$=>{var $period_het_hoat_dong_periods_of_product$$=await global.getModel("assperiod").find({id_app:$item$$.id_app,id_product:$item$$.id.toString()}).lean();let $so_luong_goi_dau_tu$$=
4
+ $period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.tong_so_token).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$tong_gia_tri_goi_dau_tu$$=$period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.tong_so_token*$item$$.gia).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$item$$.da_dau_tu=$period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.da_dau_tu).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$item$$.gia_tri_da_dau_tu=$period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.da_dau_tu*$item$$.gia).reduce(($a$$,
5
+ $b$$)=>$a$$+$b$$,0);$item$$.da_dao_han=$period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.da_dao_han).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$item$$.gia_tri_da_dao_han=$period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.da_dao_han*$item$$.gia).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$item$$.da_rut_von=$period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.da_rut_von).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$item$$.gia_tri_da_rut_von=$period_het_hoat_dong_periods_of_product$$.map($item$$=>
6
+ $item$$.da_rut_von*$item$$.gia).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$period_het_hoat_dong_periods_of_product$$=$period_het_hoat_dong_periods_of_product$$.filter($p$$=>$p$$.hoat_dong==0);$item$$.tong_so_token_unactive=$period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.tong_so_token).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$item$$.tong_gia_tri_unactive=$period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.tong_so_token*$item$$.gia).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$item$$.da_dau_tu_unactive=
7
+ $period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.da_dau_tu).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$item$$.gia_tri_da_dau_tu_unactive=$period_het_hoat_dong_periods_of_product$$.map($item$$=>$item$$.da_dau_tu*$item$$.gia).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$item$$.so_luong_goi_dau_tu=$so_luong_goi_dau_tu$$-$item$$.tong_so_token_unactive+$item$$.da_dau_tu_unactive;$item$$.tong_gia_tri_goi_dau_tu=$tong_gia_tri_goi_dau_tu$$-$item$$.tong_gia_tri_unactive+$item$$.gia_tri_da_dau_tu_unactive};
8
+ assproductSchema.post("find",async function($result$$){for(let $i$$=0;$i$$<$result$$.length;$i$$++){const $item$$=$result$$[$i$$];$item$$.id&&$item$$.id_app&&await thongke($item$$)}});assproductSchema.post("findOne",async function($item$$){$item$$&&$item$$.id&&$item$$.id_app&&await thongke($item$$)});
9
+ (global.configs||{}).createIndexes&&(assproductSchema.index({id_app:1}),assproductSchema.index({creator:1}),assproductSchema.index({id:1}),assproductSchema.index({ten_san_pham:1}),assproductSchema.index({duoc_chuyen_thanh_cp:1}),assproductSchema.index({token:1}),assproductSchema.index({id_app:1,token:1},{unique:!0}),assproductSchema.index({ma_loai:1}),assproductSchema.index({co_phan:1}),assproductSchema.index({trang_thai:1}),assproductSchema.index({visible_to:1}),assproductSchema.index({visible_to_users:1}),
10
+ assproductSchema.index({status:1}),assproductSchema.index({user_created:1}),assproductSchema.index({creator:"text",ten_san_pham:"text",mieu_ta:"text",token:"text",ma_loai:"text"},{name:"assproduct_index3"}));const model=mongoose.models.assproduct||mongoose.model("assproduct",assproductSchema);
11
+ model.getTokens=async($condition_id_app$$,$id_product$$,$id_period$$)=>{$condition_id_app$$={id_app:$condition_id_app$$};$id_product$$!==void 0&&($condition_id_app$$.id_product=$id_product$$);$id_period$$!==void 0&&($condition_id_app$$.id_period=$id_period$$);return await global.getModel("assinvestment").find($condition_id_app$$).lean()};
12
+ model.getOwners=async($condition$$={})=>{if(!$condition$$.id_app)throw"H\u00e0m n\u00e0y y\u00eau c\u1ea7u \u0111i\u1ec1u ki\u1ec7n ch\u1ee9a id_app";let $id_app$$=$condition$$.id_app,$tokens$$=await model.getTokens($condition$$.id_app,$condition$$.id_product,$condition$$.id_period);const {denomBalancesGet:$denomBalancesGet$$}=require("../libs/blockchainconnect");return(await Promise.all($tokens$$.map($token$$=>(async()=>{try{let $bls$$=await $denomBalancesGet$$($id_app$$,$token$$.token);await $bls$$.asyncJoinModel2($condition$$.id_app,
13
+ "asskey",{where:"address",fields:[{email:"username"}]});$bls$$=$bls$$.filter($b$$=>$b$$.email);await $bls$$.asyncJoinModel2(null,"user",{where:"email",fields:["name"]});$bls$$.forEach($b$$=>{$b$$.id_app=$token$$.id_app;$b$$.id_product=$token$$.id_product;$b$$.id_period=$token$$.id_period;$b$$.id_investment=$token$$.id});return $bls$$}catch($e$$){return Logger.error($e$$),[]}})()))).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[])};module.exports=model;
@@ -0,0 +1,4 @@
1
+ const assprofitsharingSchema=new Schema({id_app:String,creator:{type:String,required:!0,trim:!0},id:{type:String,trim:!0},id_product:{type:String,required:!0,trim:!0},ten_san_pham:{type:String},token:{type:String,lowercase:!0,trim:!0},id_period:String,denom:{type:String,required:!0,trim:!0},da_chia_loi_nhuan:Boolean,loi_nhuan_duoc_chia:Number,ngay_chia_loi_nhuan:Date,trang_thai:String,signature:String,exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},
2
+ date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
3
+ (global.configs||{}).createIndexes&&(assprofitsharingSchema.index({id_app:1}),assprofitsharingSchema.index({creator:1}),assprofitsharingSchema.index({id:1}),assprofitsharingSchema.index({id_product:1}),assprofitsharingSchema.index({id_period:1}),assprofitsharingSchema.index({token:1}),assprofitsharingSchema.index({ten_san_pham:1}),assprofitsharingSchema.index({denom:1}),assprofitsharingSchema.index({trang_thai:1}),assprofitsharingSchema.index({status:1}),assprofitsharingSchema.index({user_created:1}),
4
+ assprofitsharingSchema.index({creator:"text",ten_san_pham:"text",ten_ky_han:"text",denom:"text"},{name:"assprofitsharing_index2"}));const model=mongoose.models.assprofitsharing||mongoose.model("assprofitsharing",assprofitsharingSchema);module.exports=model;
@@ -0,0 +1,2 @@
1
+ const assreceiverSchema=new Schema({id_app:String,name:{type:String,maxlength:1024,required:!0},address:{type:String,required:!0,maxlength:2024,trim:!0},note:{type:String},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:""}});
2
+ (global.configs||{}).createIndexes&&(assreceiverSchema.index({id_app:1}),assreceiverSchema.index({address:1}),assreceiverSchema.index({name:1}),assreceiverSchema.index({note:1}),assreceiverSchema.index({status:1}),assreceiverSchema.index({user_created:1}),assreceiverSchema.index({address:"text",name:"text",note:"text"},{name:"assreceiver_index2"}));const model=mongoose.models.assreceiver||mongoose.model("assreceiver",assreceiverSchema);module.exports=model;
@@ -0,0 +1,10 @@
1
+ const controller=require("../controllers/controller"),{executeInTransaction}=require("../libs/sessionContext"),assrequestSchema=new Schema({id_app:String,receiver_name:String,receiver_address:{type:String,required:!0,trim:!0},request_id:{type:String,required:!0,trim:!0},amount:{type:Number,required:!0},denom:{type:String,required:!0,lowercase:!0,trim:!0},order_id:{type:String,required:!0,trim:!0},order_info:{type:String,required:!0},ma_ct:String,trang_thai:{type:String,default:"0"},sender_address:String,
2
+ sender_name:String,sender_user:String,sender_date:Date,transaction:Schema.Types.Mixed,return_url:String,notify_url:String,payment_url:String,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:""}});
3
+ (global.configs||{}).createIndexes&&(assrequestSchema.index({id_app:1}),assrequestSchema.index({sender_address:1}),assrequestSchema.index({sender_name:1}),assrequestSchema.index({sender_user:1}),assrequestSchema.index({sender_date:1}),assrequestSchema.index({request_id:1}),assrequestSchema.index({ma_ct:1}),assrequestSchema.index({denom:1}),assrequestSchema.index({order_id:1}),assrequestSchema.index({order_info:1}),assrequestSchema.index({receiver_name:1}),assrequestSchema.index({receiver_address:1}),
4
+ assrequestSchema.index({status:1}),assrequestSchema.index({user_created:1}),assrequestSchema.index({trang_thai:1}),assrequestSchema.index({receiver_address:"text",order_id:"text",order_info:"text",receiver_name:"text",sender_name:"text"},{name:"assrequest_index2"}));const model=mongoose.models.assrequest||mongoose.model("assrequest",assrequestSchema);
5
+ model.createVirtualPaymentClientURL=async($order$$,$_app_client_ip$$,$_paymentViaWallet_item$$)=>{$_app_client_ip$$=await global.getModel("app").findOne({_id:$order$$.id_app});$_paymentViaWallet_item$$=await model.create({id_app:$order$$.id_app,user_created:$order$$.user_created,user_updated:$order$$.user_created,receiver_name:$_paymentViaWallet_item$$.wallet_configs.receiver_name,receiver_address:$_paymentViaWallet_item$$.wallet_configs.receiver_address,request_id:$order$$._id.toString(),ma_ct:$order$$.ma_ct||
6
+ "",amount:$order$$.amount,denom:$_paymentViaWallet_item$$.wallet_configs.denom,order_id:$order$$.so_ct||$order$$._id.toString(),order_info:"Thanh to\u00e1n cho \u0111\u01a1n h\u00e0ng "+($order$$.so_ct||$order$$._id.toString())});$_paymentViaWallet_item$$.return_url=`${configs.domain?`https://${configs.domain}`:configs.api_url}/public/${$order$$.id_app}/assrequest/${$_paymentViaWallet_item$$._id.toString()}/callback`;await $_paymentViaWallet_item$$.save();return($_app_client_ip$$.domain||"")+"/#/payment/"+
7
+ $_paymentViaWallet_item$$._id.toString()};
8
+ model.verifyReturnUrl=async($id_app$$,$id_transaction$$,$query$$)=>{const $again_link$$=`${configs.domain?`https://${configs.domain}`:configs.api_url}/public/payment/again`;let $request$$=await model.findOne({_id:$id_transaction$$}).lean();if(!$request$$)throw"Y\u00eau c\u1ea7u thanh to\u00e1n kh\u00f4ng t\u1ed3n t\u1ea1i";const $results$$={...$query$$};$results$$.isSuccess=$request$$.trang_thai=="1";if($results$$.isSuccess&&$request$$.ma_ct){let $_v$$=global.getModel(`${$request$$.ma_ct.toLowerCase()}`);const $obj_updated$$=
9
+ await $_v$$.findOne({_id:$request$$.request_id});try{await executeInTransaction(async()=>{let $ctrl$$=global.controllers[$request$$.ma_ct.toUpperCase()];$ctrl$$&&$obj_updated$$&&($ctrl$$.handleAfterPayment?(Logger.info("handle after payment"),await $ctrl$$.handleAfterPayment($obj_updated$$),controller.pushNotification($ctrl$$,$obj_updated$$,"payment",null,!1,{title:`Bill ${$obj_updated$$.so_ct} \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n`})):(await $_v$$.updateOne({_id:$request$$.request_id},
10
+ {trang_thai:"5"}),$ctrl$$.post&&await controller.asyncPostData($obj_updated$$,$ctrl$$),controller.pushNotification($ctrl$$,$obj_updated$$,"update")),$results$$.result_url=$obj_updated$$.again_link||$again_link$$)})}catch($e$$){Logger.error("error update status for voucher",$request$$.ma_ct,$e$$),$results$$.result_url=$obj_updated$$.again_link||$again_link$$}}else $results$$.result_url=$again_link$$;return $results$$};module.exports=model;
@@ -0,0 +1,7 @@
1
+ const asssellSchema=new Schema({id_app:String,creator:{type:String,required:!0,trim:!0},id:{type:String,trim:!0},id_product:{type:String,trim:!0},ten_san_pham:{type:String},product_token:{type:String,lowercase:!0,trim:!0},id_period:{type:String,trim:!0},ten_ky_han:{type:String,trim:!0},ten_lh_dt:String,ky_han:Number,token:{type:String,required:!0,lowercase:!0,trim:!0},gia_goc:{type:Number},lai_suat_cam_ket:Number,denom:{type:String,required:!0,lowercase:!0,trim:!0},so_luong:{type:Number},da_ban:{type:Number},
2
+ con_lai:{type:Number},gia_ban:{type:Number},tong_gia_tri:{type:Number},ngay_het_han:{type:Date,required:!0},buyer:String,id_need_to_buy:String,fee:Number,exchange_address:String,trang_thai:String,signature:String,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:""}});
3
+ (global.configs||{}).createIndexes&&(asssellSchema.index({id_app:1}),asssellSchema.index({creator:1}),asssellSchema.index({id:1}),asssellSchema.index({denom:1}),asssellSchema.index({token:1}),asssellSchema.index({trang_thai:1}),asssellSchema.index({id_product:1}),asssellSchema.index({ten_san_pham:1}),asssellSchema.index({product_token:1}),asssellSchema.index({id_period:1}),asssellSchema.index({ky_han:1}),asssellSchema.index({gia_goc:1}),asssellSchema.index({lai_suat_cam_ket:1}),asssellSchema.index({ten_lh_dt:1}),
4
+ asssellSchema.index({ngay_het_han:-1}),asssellSchema.index({status:1}),asssellSchema.index({user_created:1}),asssellSchema.index({creator:"text",token:"text",denom:"text",ten_san_pham:"text",ten_ky_han:"text"},{name:"asssell_index2"}));const model=mongoose.models.asssell||mongoose.model("asssell",asssellSchema);
5
+ model.updateSell=async $item$$=>{$item$$.token&&await [$item$$].asyncJoinModel2($item$$.id_app,global.getModel("assinvestment"),{where:"token",fields:["ten_san_pham",{gia_goc:"gia"},"ngay_phat_hanh","id_product","product_token","ky_han","id_period","ten_ky_han","ngay_dao_han","lai_suat_cam_ket","lai_suat_truoc_han","cho_phep_rut_von","co_phan"]});$item$$.id_period!=void 0&&$item$$.id_period!=null&&await [$item$$].asyncJoinModel2($item$$.id_app,global.getModel("assperiod"),{where:$item$$=>({id:$item$$.id_period,
6
+ id_product:$item$$.id_product}),fields:["ten_lh_dt","ten_ky_han","ky_tinh_lai","goi_dau_tu"]});$item$$.con_lai=$item$$.so_luong-$item$$.da_ban;$item$$.tong_gia_tri_con_lai=$item$$.con_lai*$item$$.gia_goc;$item$$.lai_du_tinh_con_lai=Math.roundBy($item$$.lai_suat_cam_ket/365*$item$$.tong_gia_tri_con_lai*$item$$.ky_han/100,0);$item$$.tong_gia_tri_dao_han_con_lai=$item$$.tong_gia_tri_con_lai+$item$$.lai_du_tinh_con_lai;$item$$.ky_han&&!$item$$.co_phan?($item$$.so_ngay_hien_tai=Math.roundBy(((new Date).getTime()-
7
+ (new Date($item$$.ngay_phat_hanh)).getTime())/864E5),$item$$.tien_lai_hien_tai=Math.roundBy($item$$.so_ngay_hien_tai*($item$$.lai_suat_cam_ket||0)/365*$item$$.tong_gia_tri_con_lai/100)):($item$$.tien_lai_hien_tai=0,$item$$.so_ngay_hien_tai=0)};module.exports=model;
@@ -0,0 +1,3 @@
1
+ const asstransactionSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},creator:{type:String,required:!0},event:{type:String,required:!0},memo:String,data:{},date_created:{type:Date,default:Date.now}});
2
+ (global.configs||{}).createIndexes&&(asstransactionSchema.index({id_app:1}),asstransactionSchema.index({event:1}),asstransactionSchema.index({creator:1}),asstransactionSchema.index({"data.from_address":1}),asstransactionSchema.index({"data.to_address":1}),asstransactionSchema.index({"data.token":1}),asstransactionSchema.index({"data.id_product":1}),asstransactionSchema.index({"data.id_period":1}),asstransactionSchema.index({date_created:-1}));
3
+ const model=mongoose.models.asstransaction||mongoose.model("asstransaction",asstransactionSchema);model.createTransaction=async({id_app:$id_app$$,creator:$creator$$,event:$event$$,data:$data$$,memo:$memo$$=""})=>(await model.create({id_app:$id_app$$,creator:$creator$$,event:$event$$,data:$data$$,memo:$memo$$})).toObject();module.exports=model;
@@ -0,0 +1,4 @@
1
+ const asstransferSchema=new Schema({id_app:String,txhash:String,sender_address:{type:String,required:!0,trim:!0},sender_name:{type:String,trim:!0},receiver_name:{type:String,trim:!0},receiver_address:{type:String,required:!0,trim:!0},receiver_users:[],amount:{type:Number,required:!0},denom:{type:String,required:!0,lowercase:!0,trim:!0},memo:{type:String},request_id:{type:String,trim:!0},so1_id:{type:String,trim:!0},trang_thai:{type:String},transaction:Schema.Types.Mixed,exfields:Schema.Types.Mixed,
2
+ 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:""}});
3
+ (global.configs||{}).createIndexes&&(asstransferSchema.index({id_app:1}),asstransferSchema.index({txhash:1},{unique:!0}),asstransferSchema.index({sender_address:1}),asstransferSchema.index({sender_name:1}),asstransferSchema.index({receiver_address:1}),asstransferSchema.index({receiver_name:1}),asstransferSchema.index({request_id:1}),asstransferSchema.index({so1_id:1}),asstransferSchema.index({memo:1}),asstransferSchema.index({denom:1}),asstransferSchema.index({status:1}),asstransferSchema.index({user_created:1}),
4
+ asstransferSchema.index({trang_thai:1}),asstransferSchema.index({receiver_address:"text",sender_address:"text",memo:"text",sender_name:"text",receiver_name:"text"},{name:"asstransfer_index2"}));const model=mongoose.models.asstransfer||mongoose.model("asstransfer",asstransferSchema);module.exports=model;
@@ -0,0 +1,4 @@
1
+ const redisCache=require("../libs/redis-cache"),assuser_identitySchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ten_cmnd:{type:String},so_cmnd:{type:String,required:!0,maxlength:32},trang_thai:{type:String},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&&(assuser_identitySchema.index({id_app:1,trang_thai:1,so_cmnd:1}),assuser_identitySchema.index({id_app:1,so_cmnd:1},{unique:!0}),assuser_identitySchema.index({so_cmnd:"text"}),assuser_identitySchema.index({status:1}),assuser_identitySchema.index({date_created:1}),assuser_identitySchema.index({date_updated:1}),assuser_identitySchema.index({user_created:1,visible_to:1,visible_to_users:1}));
3
+ assuser_identitySchema.post("save",async function($doc$$,$next$$){$doc$$.trang_thai==="1"&&global.getModel("user").findOne({email:$doc$$.user_created},async($error$$,$u$$)=>{Logger.info("of user",$u$$);$u$$&&($u$$.name=$doc$$.ten_cmnd,$u$$.local=$u$$.local||{},$u$$.local.name=$doc$$.ten_cmnd,await $u$$.save(),await global.getModel("participant").updateOne({email:$doc$$.user_created,id_app:$doc$$.id_app},{name:$doc$$.ten_cmnd}),redisCache.set("user",$u$$.toObject(),function($e$$){$e$$?Logger.error($e$$):
4
+ Logger.info("cache user infomation to redis")}));$next$$()});$next$$()});module.exports=mongoose.models.assuser_identity||mongoose.model("assuser_identity",assuser_identitySchema);
@@ -0,0 +1,4 @@
1
+ const asswithdrawSchema=new Schema({id_app:String,creator:{type:String,required:!0,trim:!0},id:{type:String,trim:!0},token:{type:String,required:!0,lowercase:!0,trim:!0},product_owner:String,so_luong:{type:Number,required:!0},gia:{type:Number,default:0},von:{type:Number,default:0},lai_cam_ket:{type:Number,default:0},lai_thuong:{type:Number,default:0},lai_suat_truoc_han:{type:Number,default:0},lai_truoc_han:{type:Number,default:0},so_ngay_tinh_lai:{type:Number,default:0},ngay:{type:Date},denom:{type:String,
2
+ lowercase:!0,required:!0,trim:!0},tg_xu_ly_rut_von:{type:Number,default:0},ngay_xu_ly:{type:Date},da_rut_von:Boolean,trang_thai:{type:String,default:"0"},signature:String,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:""}});
3
+ (global.configs||{}).createIndexes&&(asswithdrawSchema.index({id_app:1}),asswithdrawSchema.index({creator:1}),asswithdrawSchema.index({id:1}),asswithdrawSchema.index({ngay_xu_ly:1}),asswithdrawSchema.index({trang_thai:1}),asswithdrawSchema.index({denom:1}),asswithdrawSchema.index({token:1}),asswithdrawSchema.index({status:1}),asswithdrawSchema.index({user_created:1}),asswithdrawSchema.index({date_created:1}),asswithdrawSchema.index({date_updated:1}),asswithdrawSchema.index({creator:"text",token:"text",
4
+ denom:"text"},{name:"asswithdraw_index2"}));const model=mongoose.models.asswithdraw||mongoose.model("asswithdraw",asswithdrawSchema);module.exports=model;
@@ -0,0 +1,2 @@
1
+ const attendSchema=new Schema({id_object:{type:String,required:!0},collection_name:{type:String},id_app:String,shared:{type:Boolean},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&&(attendSchema.index({id_app:1,id_object:1,user_created:1}),attendSchema.index({user_created:"text"}),attendSchema.index({status:1}),attendSchema.index({user_created:1}),attendSchema.index({collection_name:1}),attendSchema.index({shared:1}));module.exports=mongoose.models.attend||mongoose.model("attend",attendSchema);
@@ -0,0 +1,8 @@
1
+ const sanphamSchema=new Schema({ma_vt:{type:String,uppercase:!0,default:"",maxlength:1024,trim:!0},ten_vt:String,ma_dvt_gia_ban:String,ma_nvt:{type:String,default:"",maxlength:1024,trim:!0},ma_nvt2:{type:String,default:"",maxlength:1024,trim:!0},ma_nvt3:{type:String,default:"",maxlength:1024,trim:!0},ma_nvt4:{type:String,default:"",maxlength:1024,trim:!0},ma_kh:String,nh_kh:{type:String,default:"",maxlength:1024,trim:!0},nh_kh2:{type:String,default:"",maxlength:1024,trim:!0},nh_kh3:{type:String,default:"",
2
+ maxlength:1024,trim:!0},nh_kh4:{type:String,default:"",maxlength:1024,trim:!0},ma_tt1:{type:String,trim:!0},ma_tt2:{type:String,trim:!0},ma_tt3:{type:String,trim:!0},sl_tu:{type:Number,default:0},sl_den:{type:Number,default:0},t_sl_ntt_tu:{type:Number,default:0},t_sl_ntt_den:{type:Number,default:0},t_sl_tu:{type:Number,default:0},t_sl_den:{type:Number,default:0},gia_nhap:{type:Number,default:0},ty_suat_ln:{type:Number,default:0},loi_nhuan:{type:Number,default:0},gia_ban_le:{type:Number,default:0},
3
+ gia_ban_buon:{type:Number,default:0},gia_ban_chua_thue:{type:Boolean,default:!1},exfields_detail:Schema.Types.Mixed,line:{type:Number,default:0}}),banggiabanSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},stt_uu_tien:Number,ma_ct:{type:String,default:"BGB"},so_ct:{type:String,default:"BGB"},ngay_ct:{type:Date,default:Date.now},trang_thai:{type:String,default:"5"},ma_nt:String,mieu_ta:{type:String,default:"",maxlength:1024},ma_kh:{type:String,default:"",maxlength:32,trim:!0},ten_kh:String,
4
+ nh_kh:{type:String,maxlength:1024,trim:!0},ten_nh_kh:String,nh_kh2:{type:String,maxlength:1024,trim:!0},ten_nh_kh2:String,nh_kh3:{type:String,maxlength:1024,trim:!0},ten_nh_kh3:String,nh_kh4:{type:String,maxlength:1024,trim:!0},ten_nh_kh4:String,nh_kh5:{type:String,maxlength:1024,trim:!0},ten_nh_kh5:String,ma_kho:{type:String,default:"",maxlength:32,trim:!0},ten_kho:String,ma_ban:{type:String,default:"",maxlength:32,trim:!0},ten_ban:String,hieu_luc_tu:{type:Date,required:!0},hieu_luc_den:{type:Date,
5
+ required:!0},ap_dung_lan_mua_thu:{type:Number},ap_dung_lan_mua_tu_thu:{type:Number},ap_dung_lan_mua_den_thu:{type:Number},online:{type:Boolean},offline:{type:Boolean},details:[sanphamSchema],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:""}},{toJSON:{virtuals:!0}});
6
+ (global.configs||{}).createIndexes&&(banggiabanSchema.index({id_app:1,ma_kho:1,ma_kh:1,hieu_luc_tu:-1,hieu_luc_den:-1}),banggiabanSchema.index({ma_ct:1}),banggiabanSchema.index({ngay_ct:1}),banggiabanSchema.index({so_ct:1}),banggiabanSchema.index({trang_thai:1}),banggiabanSchema.index({"details.ma_vt":1}),banggiabanSchema.index({"details.ma_tt1":1}),banggiabanSchema.index({"details.ma_tt2":1}),banggiabanSchema.index({"details.ma_tt3":1}),banggiabanSchema.index({"details.ma_nvt":1}),banggiabanSchema.index({"details.sl_tu":1}),
7
+ banggiabanSchema.index({"details.sl_den":1}),banggiabanSchema.index({nh_kh:1}),banggiabanSchema.index({nh_kh2:1}),banggiabanSchema.index({nh_kh3:1}),banggiabanSchema.index({nh_kh4:1}),banggiabanSchema.index({nh_kh5:1}),banggiabanSchema.index({ma_kho:1}),banggiabanSchema.index({ma_ban:1}),banggiabanSchema.index({ma_kh:1}),banggiabanSchema.index({ap_dung_lan_mua_thu:1}),banggiabanSchema.index({ap_dung_lan_mua_tu_thu:1}),banggiabanSchema.index({ap_dung_lan_mua_den_thu:1}),banggiabanSchema.index({t_sl_tu:1}),
8
+ banggiabanSchema.index({t_sl_den:1}),banggiabanSchema.index({date_updated:-1}),banggiabanSchema.index({date_created:-1}),banggiabanSchema.index({user_created:1}),banggiabanSchema.index({status:1}),banggiabanSchema.index({online:1}),banggiabanSchema.index({offline:1}),banggiabanSchema.index({mieu_ta:"text",ma_kh:"text",ten_kh:"text",ma_kho:"text",ten_kho:"text"},{name:"banggiaban_index_text"}));const model=mongoose.models.banggiaban||mongoose.model("banggiaban",banggiabanSchema);module.exports=model;
@@ -0,0 +1,6 @@
1
+ const bangtinhluongSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_bp:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ma_nv:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ma_kho:String,ten_nv:String,cham_cong:Boolean,tinh_luong:Boolean,so_ngay_lam_mot_thang:Number,luong_theo_ngay_cong:Number,luong_ngay_cong:Number,luong_ngay_cong2:Number,luong_ngay_cong3:Number,luong_binh_quan_ngay:Number,thang:Number,nam:Number,loai_luong:Number,phu_cap:[],ngay_cong:Number,
2
+ ngay_phep:Number,ngay_khong_phep:Number,ngay_khong_luong:Number,ngay_tang_ca:Number,so_luong_ngay_tang_ca_mien_thue:Number,tong_ngay_khong_luong:Number,tong_ngay_cong_tinh_luong:Number,luong_co_ban:Number,luong_tang_ca:Number,luong_phep:Number,luong_theo_ds:Number,ct_luong_tg:[{loai:String,dien_giai:String,so_luong:Number,don_gia:Number,thanh_tien:Number}],ct_luong_theo_ds:[],tru_luong:Number,luong_thang:Number,cac_khoan_phat:[],tien_phat:Number,cac_khoan_phu_cap:[],so_ngay_tinh_phu_cap:Number,tien_phu_cap:Number,
3
+ tong_phu_cap:Number,tong_thu_nhap:Number,luong_bhxh:Number,bhxh:Boolean,bhyt:Boolean,bhtn:Boolean,giam_tru:[],gt_bhxh:Number,gt_bhyt:Number,gt_bhtn:Number,gt_kpcd:Number,tong_bao_hiem_nv:Number,cty_bhxh:Number,cty_bhyt:Number,cty_bhtn:Number,ct_kpcd:Number,tong_bao_hiem_cty:Number,cac_khoan_phu_cap_mien_thue:[],luong_tang_ca_mien_thue:Number,tong_phu_cap_mien_thue:Number,ttncn_tong_thu_nhap_mien_thue:Number,ttncn_so_nguoi_phu_thuoc:Number,ttncn_muc_gt_phu_thuoc:Number,ttncn_gt_phu_thuoc:Number,ttncn_gt_tu_thien:Number,
4
+ ttncn_so_thang_gt_ban_than:Number,ttncn_muc_gt_ban_than:Number,ttncn_gt_ban_than:Number,ttncn_tong_giam_tru:Number,ttncn_thu_nhap_chiu_thue:Number,ttncn_thue_theo_bac:[],ttncn_tong_thue:Number,tong_luong:Number,exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
5
+ (global.configs||{}).createIndexes&&(bangtinhluongSchema.index({id_app:1,ma_nv:1,ma_bp:1}),bangtinhluongSchema.index({thang:-1,nam:-1}),bangtinhluongSchema.index({ma_bp:1}),bangtinhluongSchema.index({ma_kho:1}),bangtinhluongSchema.index({ten_nv:1}),bangtinhluongSchema.index({loai_luong:1}),bangtinhluongSchema.index({status:1}),bangtinhluongSchema.index({user_created:1}),bangtinhluongSchema.index({ma_nv:"text",ten_nv:"text"},{name:"bangtinhluong_index_text"}));
6
+ const model=mongoose.models.bangtinhluong||mongoose.model("bangtinhluong",bangtinhluongSchema);module.exports=model;
@@ -0,0 +1 @@
1
+ const baseScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},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:""}});(global.configs||{}).createIndexes&&(baseScheam.index({id_app:1}),baseScheam.index({status:1}),baseScheam.index({user_created:1,visible_to:1,visible_to_users:1}));module.exports=mongoose.models.base||mongoose.model("base",baseScheam);
@@ -0,0 +1,9 @@
1
+ const validVt=require("../libs/validator-vt"),validator=require("../libs/validator"),detailSchema=new Schema({ma_vt:{type:String,required:!0,uppercase:!0,maxlength:1024,trim:!0},ma_dvt:{type:String,required:!0,maxlength:32,trim:!0},so_luong:{type:Number,default:0},gia:{type:Number,default:0},gia_nt:{type:Number,default:0},tien:{type:Number,default:0},tien_nt:{type:Number,default:0},ty_le_ck:{type:Number,default:0},tien_ck:{type:Number,default:0},tien_ck_nt:{type:Number,default:0},tt:{type:Number,
2
+ default:0},tt_nt:{type:Number,default:0},promotion:Schema.Types.Mixed,dien_giai:{type:String,maxlength:1024},ma_bp:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_phi:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_hd:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},
3
+ ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},picture:String,exfields_detail:Schema.Types.Mixed,line:{type:Number,default:0}});detailSchema.validate={ma_vt:validVt.existsVt,ma_dvt:validator.existsDvt};
4
+ const bg1Schema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_dvcs:{type:String,maxlength:1024},ma_ct:{type:String,default:"BG1",required:!0,uppercase:!0,maxlength:32,trim:!0},ma_gd:{type:String,default:"0",maxlength:32,trim:!0},ong_ba:{type:String,maxlength:32},so_ct:{type:String,uppercase:!0,trim:!0,maxlength:32},ngay_ct:{type:Date,default:Date.now,required:!0},ma_nt:{type:String,required:"ma_nt is required",default:"VND",trim:!0,uppercase:!0,maxlength:32},ty_gia:{type:Number,required:!0,
5
+ min:0,default:1},trang_thai:{type:String,default:"1",maxlength:32,trim:!0},ma_kh:{type:String,uppercase:!0,maxlength:32,trim:!0},ten_kh:String,dien_thoai:String,dia_chi:String,email:String,ma_kho:{type:String,uppercase:!0,maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,maxlength:32,trim:!0},ten_nv:String,id_bao_gia_mua:{type:String,maxlength:1024},ma_thue:{type:String,uppercase:!0,maxlength:32,trim:!0},thue_suat:{type:Number,default:0},t_thue:{type:Number,default:0},t_thue_nt:{type:Number,default:0},
6
+ ty_le_ck_hd:{type:Number,default:0},tien_ck_hd:{type:Number,default:0},dien_giai:{type:String,maxlength:1024},exfields:Schema.Types.Mixed,ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!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:""},visible_to:{type:Number,default:0},visible_to_users:[String],update_right:[String],delete_right:[String],
7
+ details:{type:[detailSchema]},promotion:Schema.Types.Mixed});bg1Schema.validate={ma_nt:validator.existsNt,ngay_ct:validator.unlockBook,ma_kh:validator.existsKh};
8
+ (global.configs||{}).createIndexes&&(bg1Schema.index({id_app:1,ma_dvcs:1,so_ct:-1,ngay_ct:-1}),bg1Schema.index({dien_giai:"text",so_ct:"text",ma_kh:"text",ten_kh:"text",ma_nv:"text",ten_nv:"text"},{name:"bg1_index"}),bg1Schema.index({ma_ct:1}),bg1Schema.index({ma_kh:1}),bg1Schema.index({user_created:1,date_created:-1}),bg1Schema.index({date_updated:-1}),bg1Schema.index({trang_thai:1}),bg1Schema.index({status:1}),bg1Schema.index({user_created:1,visible_to:1,visible_to_users:1}));
9
+ module.exports=mongoose.models.bg1||mongoose.model("bg1",bg1Schema);
@@ -0,0 +1,10 @@
1
+ const validVt=require("../libs/validator-vt"),validator=require("../libs/validator"),detailSchema=new Schema({ma_vt:{type:String,required:!0,uppercase:!0,maxlength:1024,trim:!0},ma_dvt:{type:String,required:!0,maxlength:32,trim:!0},so_luong:{type:Number,default:0},gia:{type:Number,default:0},gia_nt:{type:Number,default:0},gia_truoc:{type:Number,default:0},gia_truoc_nt:{type:Number,default:0},tien:{type:Number,default:0},tien_nt:{type:Number,default:0},ty_le_ck:{type:Number,default:0},tien_ck:{type:Number,
2
+ default:0},tien_ck_nt:{type:Number,default:0},gia_ban_muc_tieu:{type:Number,default:0},gia_ban_muc_tieu_nt:{type:Number,default:0},gia_ban_de_nghi:{type:Number,default:0},gia_ban_de_nghi_nt:{type:Number,default:0},gia_ban_truoc:{type:Number,default:0},gia_ban_truoc_nt:{type:Number,default:0},gia_von_nk:{type:Number,default:0},gia_von_nk_nt:{type:Number,default:0},tien_hang_nk:{type:Number,default:0},tien_hang_nk_nt:{type:Number,default:0},thue_suat_nk:{type:Number,default:0},tien_thue_nk:{type:Number,
3
+ default:0},tien_thue_nk_nt:{type:Number,default:0},tt:{type:Number,default:0},tt_nt:{type:Number,default:0},dien_giai:{type:String,maxlength:1024},ma_kh:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_bp:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_phi:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_hd:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,
4
+ default:"",maxlength:32,trim:!0},ma_vt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},picture:String,duoc_chon:Boolean,exfields_detail:Schema.Types.Mixed,line:{type:Number,default:0}});detailSchema.validate={ma_kh:validator.existsKh,ma_vt:validVt.existsVt,ma_dvt:validator.existsDvt};
5
+ const bg2Schema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_dvcs:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,default:"BG2",required:!0,uppercase:!0,maxlength:32,trim:!0},ma_gd:{type:String,default:"0",maxlength:32,trim:!0},so_ct:{type:String,required:!0,uppercase:!0,trim:!0,maxlength:32},ngay_ct:{type:Date,default:Date.now,required:!0},ma_nt:{type:String,required:"ma_nt is required",default:"VND",trim:!0,uppercase:!0,maxlength:32},ty_gia:{type:Number,required:!0,
6
+ min:0,default:1},ma_kh:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_kh:String,dien_thoai:String,dia_chi:String,email:String,ma_kho:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_nv:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_nv:String,ma_bp:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_dt:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_thue:{type:String,uppercase:!0,maxlength:32,trim:!0},thue_suat:{type:Number,default:0},
7
+ t_thue:{type:Number,default:0},t_thue_nt:{type:Number,default:0},ong_ba:{type:String,maxlength:1024},dien_giai:{type:String,maxlength:1024},id_dnm:{type:String,maxlength:1024,trim:!0},id_po1:{type:String,maxlength:1024,trim:!0},exfields:Schema.Types.Mixed,trang_thai:{type:String,maxlength:32},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,
8
+ default:0},visible_to_users:[String],update_right:[String],delete_right:[String],details:{type:[detailSchema]}});bg2Schema.validate={ma_dvcs:validator.existsDvcs,ma_nt:validator.existsNt,ngay_ct:validator.unlockBook,ma_kh:validator.existsKh};
9
+ (global.configs||{}).createIndexes&&(bg2Schema.index({id_app:1,ma_dvcs:1,so_ct:-1,ngay_ct:-1}),bg2Schema.index({dien_giai:"text",so_ct:"text",ma_kh:"text",ten_kh:"text",ma_nv:"text",ten_nv:"text"},{name:"bg2_index"}),bg2Schema.index({ma_ct:1}),bg2Schema.index({ma_kh:1}),bg2Schema.index({id_dnm:1}),bg2Schema.index({id_po1:1}),bg2Schema.index({user_created:1,date_created:-1}),bg2Schema.index({date_updated:-1}),bg2Schema.index({trang_thai:1}),bg2Schema.index({status:1}),bg2Schema.index({user_created:1,
10
+ visible_to:1,visible_to_users:1}));module.exports=mongoose.models.bg2||mongoose.model("bg2",bg2Schema);
@@ -0,0 +1,3 @@
1
+ const cacheSchema=new Schema({user:String,id_app:String,key:{type:String,required:!0},query:String,page:Number,data:String,date_created:{type:Date,default:Date.now,expires:300}},{});
2
+ (global.configs||{}).createIndexes&&(cacheSchema.index({user:1}),cacheSchema.index({id_app:1}),cacheSchema.index({key:1}),cacheSchema.index({page:1}),cacheSchema.index({query:"text"}),cacheSchema.index({data:"text"}),cacheSchema.index({id_app:1,key:1}),cacheSchema.index({id_app:1,user:1}),cacheSchema.index({id_app:1,user:1,key:1}),cacheSchema.index({id_app:1,user:1,query:1}),cacheSchema.index({id_app:1,user:1,key:1,query:1}));const model=mongoose.models.cache||mongoose.model("cache",cacheSchema);
3
+ module.exports=model;
@@ -0,0 +1,2 @@
1
+ const cacheDataReportSchema=new Schema({id_session:{type:String,required:!0,index:!0,comment:"session._id.toString() \u2014 foreign key sang cacheSessionReport"},id_app:{type:String,required:!0,index:!0,comment:"Denormalized t\u1eeb session \u0111\u1ec3 filter tr\u1ef1c ti\u1ebfp"},user_created:{type:String,required:!0,comment:"Denormalized t\u1eeb session"},code:{type:String,required:!0,comment:"Denormalized t\u1eeb session"},row:{type:Schema.Types.Mixed,required:!0,comment:"M\u1ed9t row c\u1ee7a b\u00e1o c\u00e1o \u2014 object t\u00f9y \u00fd. Kh\u00f4ng \u0111\u1eb7t index v\u00e0o \u0111\u00e2y v\u00ec content kh\u00e1c nhau theo t\u1eebng b\u00e1o c\u00e1o. Gi\u1eef size nh\u1ecf: m\u1ed7i document MongoDB t\u1ed1i \u0111a 16MB, nh\u01b0ng th\u1ef1c t\u1ebf m\u1ed7i row n\u00ean < 10KB \u0111\u1ec3 insertMany nhanh."},
2
+ date_created:{type:Date,default:Date.now,expires:86400}});(global.configs||{}).createIndexes&&(cacheDataReportSchema.index({id_session:1}),cacheDataReportSchema.index({id_app:1,id_session:1}),cacheDataReportSchema.index({id_app:1,user_created:1,code:1,key:1}));const model=mongoose.models.cacheDataReport||mongoose.model("cacheDataReport",cacheDataReportSchema);module.exports=model;
@@ -0,0 +1,5 @@
1
+ const cacheSessionReportSchema=new Schema({id_app:{type:String,required:!0,index:!0,comment:"App ph\u00e1t sinh cache \u2014 d\u00f9ng trong m\u1ecdi query filter"},user_created:{type:String,required:!0,index:!0,comment:"User ch\u1ea1y b\u00e1o c\u00e1o"},code:{type:String,required:!0,index:!0,comment:'M\u00e3 b\u00e1o c\u00e1o, vd: "dtbanletheoct"'},key:{type:String,default:null,index:!0,comment:"Cache key t\u00f9y ch\u1ecdn (filter/params hash). null = kh\u00f4ng d\u00f9ng key"},status:{type:String,
2
+ enum:["pending","ready","failed"],default:"pending",index:!0,comment:"pending \u2192 \u0111ang insert n\u1ec1n, reader B\u1ece QUA | ready \u2192 to\u00e0n b\u1ed9 data \u0111\u00e3 v\u00e0o, reader d\u00f9ng \u0111\u01b0\u1ee3c | failed \u2192 insert th\u1ea5t b\u1ea1i, cleanup job d\u1ecdn sau"},total_rows:{type:Number,default:0,comment:"T\u1ed5ng s\u1ed1 rows d\u1ef1 ki\u1ebfn (set l\u00fac create)"},inserted_rows:{type:Number,default:0,comment:"S\u1ed1 rows \u0111\u00e3 insert th\u1ef1c t\u1ebf (set l\u00fac updateOne ready)"},
3
+ info:{type:Schema.Types.Mixed,default:{},comment:"Metadata t\u00f9y \u00fd c\u1ee7a b\u00e1o c\u00e1o (thanh_toan, columns, filters\u2026). To\u00e0n b\u1ed9 object n\u00e0y \u0111\u01b0\u1ee3c spread v\u00e0o getCacheReport response. KH\u00d4NG ch\u1ee9a array data l\u1edbn \u2014 data l\u01b0u ri\u00eang \u1edf cacheDataReport."},ready_at:{type:Date,default:null,comment:'Th\u1eddi \u0111i\u1ec3m status chuy\u1ec3n sang "ready"'},failed_at:{type:Date,default:null,comment:'Th\u1eddi \u0111i\u1ec3m status chuy\u1ec3n sang "failed"'},
4
+ error:{type:String,default:null,comment:'Error message khi status = "failed"'},date_created:{type:Date,default:Date.now,expires:3600}});(global.configs||{}).createIndexes&&(cacheSessionReportSchema.index({id_app:1,code:1,key:1,status:1}),cacheSessionReportSchema.index({id_app:1,user_created:1,code:1,key:1,status:1}),cacheSessionReportSchema.index({_id:1,status:1},{name:"idx_id_status"}));const model=mongoose.models.cacheSessionReport||mongoose.model("cacheSessionReport",cacheSessionReportSchema);
5
+ module.exports=model;
@@ -0,0 +1,4 @@
1
+ const calllogSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},phone:{type:String,required:!0,maxlength:32},extend:{type:String,maxlength:32},type:{type:String,maxlength:32},call_status:{type:String,required:!0,maxlength:32},callid:String,msgid:String,calldate:Date,recording:String,play:String,eplay:String,download:String,did:String,src:String,dst:String,note:String,disposition:String,lastapp:String,billsec:String,duration:String,duration_minutes:String,duration_seconds:String,hotline:{type:String,
2
+ maxlength:32},id_kh:{type:String,maxlength:1024},ma_kh:String,ten_kh:String,dia_chi:String,ds_dien_thoai_khac:String,dien_thoai:String,dien_thoai2:String,exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,default:0},visible_to_users:[String],update_right:[String],delete_right:[String]});
3
+ (global.configs||{}).createIndexes&&(calllogSchema.index({id_app:1,phone:1,extend:1}),calllogSchema.index({id_app:1,ma_kh:1,ten_kh:1}),calllogSchema.index({id_app:1,dien_thoai:1,dien_thoai2:1}),calllogSchema.index({id_app:1,phone:1,extend:1,id_kh:1}),calllogSchema.index({id_app:1,phone:"text"},{name:"calllog_index"}),calllogSchema.index({id_app:1,status:1}),calllogSchema.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1}),calllogSchema.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,
4
+ phone:1}));const model=mongoose.models.calllog||mongoose.model("calllog",calllogSchema);module.exports=model;
@@ -0,0 +1,5 @@
1
+ const cartSchema=new Schema({id_app:{type:String,required:!0},id_app_vt:{type:String,maxlength:1024},user:{type:String},ma_vt:{type:String,required:!0,maxlength:1024,trim:!0},ten_vt:String,ma_dvt:{type:String,required:!0,maxlength:32,trim:!0},thuoc_tinh:Schema.Types.Mixed,km_yn_for:String,sl_xuat:{type:Number,default:1},gia_ban:{type:Number,default:0},ma_vt_tt:{type:String,maxlength:1024,trim:!0},id_cs:String,collection_cs:String,ma_lo:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},han_sd:{type:Date},
2
+ ma_vt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tinh_thanh:String,ma_quan_huyen:String,ma_xa_phuong:String,shared:{type:Boolean,default:!0},trang_thai:{type:String,default:"0"},exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,
3
+ default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,default:0},visible_to_users:[String],update_right:[String],delete_right:[String],dataview_to:{type:Number,default:0},dataview_to_users:[String],session_created:String,session_updated:String,dmvt:{type:Schema.Types.ObjectId,ref:"dmvt",localField:["ma_vt"],foreignField:["ma_vt"]}});
4
+ (global.configs||{}).createIndexes&&(cartSchema.index({id_app:1,user:1}),cartSchema.index({id_app:1,user:"text",ma_vt:"text",ten_vt:"text"},{name:"cart_index"}),cartSchema.index({id_app:1,trang_thai:1}),cartSchema.index({id_app:1,status:1}),cartSchema.index({id_app:1,ma_tt1:1}),cartSchema.index({id_app:1,ma_tt2:1}),cartSchema.index({id_app:1,ma_tt3:1}),cartSchema.index({id_app:1,ma_lo:1}),cartSchema.index({id_app:1,session_created:1}),cartSchema.index({id_app:1,session_updated:1}),cartSchema.index({id_app:1,
5
+ han_sd:1}),cartSchema.index({id_app:1,km_yn_for:1}),cartSchema.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,trang_thai:1}));const model=mongoose.models.cart||mongoose.model("cart",cartSchema);module.exports=model;
@@ -0,0 +1,2 @@
1
+ const cddiemScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},nam:{type:Number,required:!0},ma_dvcs:{type:String,maxlength:1024},email:{type:String,required:!0,lowercase:!0,maxlength:128,trim:!0},ton00:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},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&&(cddiemScheam.index({id_app:1,nam:1,ma_dvcs:1,email:1}),cddiemScheam.index({email:"text"}),cddiemScheam.index({status:1}),cddiemScheam.index({user_created:1}));module.exports=mongoose.models.cddiem||mongoose.model("cddiem",cddiemScheam);
@@ -0,0 +1,3 @@
1
+ const dmdt=global.getModel("dmdt"),validAccount=require("../libs/validator-account"),validator=require("../libs/validator"),cddtScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},nam:{type:Number,required:!0},ma_dvcs:{type:String,maxlength:1024},tk:{type:String,uppercase:!0,maxlength:32,trim:!0},ma_dt:{type:String,required:"V\u1ee5 vi\u1ec7c kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng",maxlength:32,trim:!0},ten_dt:String,du_no00:{type:Number,default:0},du_co00:{type:Number,default:0},
2
+ du_no_nt00:{type:Number,default:0},du_co_nt00:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},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:""}});cddtScheam.validate={ma_dvcs:validator.existsDvcs,ma_dt:dmdt.exists,tk:validAccount.isNotTkcn};
3
+ (global.configs||{}).createIndexes&&(cddtScheam.index({id_app:1,nam:1,tk:1,ma_dt:1}),cddtScheam.index({id_app:1,nam:1,ma_dvcs:1,tk:1,ma_dt:1}),cddtScheam.index({id_app:1,tk:"text",ma_dt:"text",ten_dt:"text"}),cddtScheam.index({id_app:1,status:1}),cddtScheam.index({id_app:1,user_created:1}));module.exports=mongoose.models.cddt||mongoose.model("cddt",cddtScheam);
@@ -0,0 +1,5 @@
1
+ const validator=require("../libs/validator"),validAccount=require("../libs/validator-account"),cdkhScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},nam:{type:Number,required:!0},ma_dvcs:{type:String,required:!0,maxlength:1024},tk:{type:String,required:"tk is required",trim:!0,maxlength:32},ma_kh:{type:String,uppercase:!0,trim:!0,maxlength:32},ten_kh:String,ma_kho:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_dt:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_bp:{type:String,
2
+ uppercase:!0,trim:!0,maxlength:32},ma_hd:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_nv:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_phi:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_nv_giao_hang:{type:String,uppercase:!0,trim:!0,maxlength:32},phu_xe:{type:String,uppercase:!0,trim:!0,maxlength:32},du_no00:{type:Number,default:0},du_co00:{type:Number,default:0},du_no_nt00:{type:Number,default:0},du_co_nt00:{type:Number,default:0},du_no1:{type:Number,default:0},du_co1:{type:Number,
3
+ default:0},du_no_nt1:{type:Number,default:0},du_co_nt1:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},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:""}});cdkhScheam.validate={ma_dvcs:validator.existsDvcs,tk:validAccount.isTkcn,ma_kh:validator.existsKh};
4
+ (global.configs||{}).createIndexes&&(cdkhScheam.index({id_app:1,nam:1,tk:1,ma_kh:1}),cdkhScheam.index({id_app:1,nam:1,tk:1,ma_kh:1,ma_nv:1}),cdkhScheam.index({id_app:1,nam:1,tk:1,ma_kh:1,ma_kho:1}),cdkhScheam.index({id_app:1,nam:1,ma_dvcs:1,tk:1,ma_kh:1}),cdkhScheam.index({id_app:1,tk:"text",ma_kh:"text",ten_kh:"text"}),cdkhScheam.index({id_app:1,nam:1}),cdkhScheam.index({id_app:1,tk:1}),cdkhScheam.index({id_app:1,ma_kh:1}),cdkhScheam.index({id_app:1,status:1}),cdkhScheam.index({id_app:1,user_created:1}));
5
+ module.exports=mongoose.models.cdkh||mongoose.model("cdkh",cdkhScheam);
@@ -0,0 +1,5 @@
1
+ const validator=require("../libs/validator"),validAccount=require("../libs/validator-account"),cdkhtheongayScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},den_ngay:{type:Date,required:!0},ma_dvcs:{type:String,required:!0,maxlength:1024},tk:{type:String,required:"tk is required",trim:!0,maxlength:32},ma_kh:{type:String,uppercase:!0,trim:!0,maxlength:32},ten_kh:String,ma_kho:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_dt:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_bp:{type:String,
2
+ uppercase:!0,trim:!0,maxlength:32},ma_hd:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_nv:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_phi:{type:String,uppercase:!0,trim:!0,maxlength:32},ma_nv_giao_hang:{type:String,uppercase:!0,trim:!0,maxlength:32},phu_xe:{type:String,uppercase:!0,trim:!0,maxlength:32},du_no00:{type:Number,default:0},du_co00:{type:Number,default:0},du_no_nt00:{type:Number,default:0},du_co_nt00:{type:Number,default:0},du_no1:{type:Number,default:0},du_co1:{type:Number,
3
+ default:0},du_no_nt1:{type:Number,default:0},du_co_nt1:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},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:""}});cdkhtheongayScheam.validate={ma_dvcs:validator.existsDvcs,tk:validAccount.isTkcn,ma_kh:validator.existsKh};
4
+ (global.configs||{}).createIndexes&&(cdkhtheongayScheam.index({id_app:1,den_ngay:-1,tk:1,ma_kh:1}),cdkhtheongayScheam.index({id_app:1,den_ngay:-1,tk:1,ma_kh:1,ma_nv:1}),cdkhtheongayScheam.index({id_app:1,den_ngay:-1,tk:1,ma_kh:1,ma_kho:1}),cdkhtheongayScheam.index({id_app:1,den_ngay:-1,ma_dvcs:1,tk:1,ma_kh:1}),cdkhtheongayScheam.index({id_app:1,ten_kh:"text"}),cdkhtheongayScheam.index({id_app:1,den_ngay:-1}),cdkhtheongayScheam.index({id_app:1,tk:1}),cdkhtheongayScheam.index({id_app:1,ma_kh:1}),cdkhtheongayScheam.index({id_app:1,
5
+ status:1}),cdkhtheongayScheam.index({id_app:1,user_created:1}));module.exports=mongoose.models.cdkhtheongay||mongoose.model("cdkhtheongay",cdkhtheongayScheam);
@@ -0,0 +1,2 @@
1
+ const cdnphepScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},nam:{type:Number,required:!0},email:{type:String,required:!0,lowercase:!0,maxlength:128,trim:!0},ton00:{type:Number,default:0},status:{type:Boolean,default:!0},kc_yn:{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:""}});
2
+ (global.configs||{}).createIndexes&&(cdnphepScheam.index({id_app:1,nam:1,email:1}),cdnphepScheam.index({id_app:1,email:"text"}),cdnphepScheam.index({id_app:1,status:1}),cdnphepScheam.index({id_app:1,user_created:1}));module.exports=mongoose.models.cdnphep||mongoose.model("cdnphep",cdnphepScheam);
@@ -0,0 +1,3 @@
1
+ const validator=require("../libs/validator"),validAccount=require("../libs/validator-account"),cdtkScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},nam:{type:Number,required:!0},ma_dvcs:{type:String,required:!0,maxlength:1024},tk:{type:String,required:"tk is required",uppercase:!0,maxlength:32,trim:!0},ma_kho:{type:String,uppercase:!0,maxlength:32,trim:!0},du_no00:{type:Number,default:0},du_co00:{type:Number,default:0},du_no_nt00:{type:Number,default:0},du_co_nt00:{type:Number,default:0},
2
+ du_no1:{type:Number,default:0},du_co1:{type:Number,default:0},du_no_nt1:{type:Number,default:0},du_co_nt1:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},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:""}});cdtkScheam.validate={ma_dvcs:validator.existsDvcs,tk:validAccount.isNotTkcn};
3
+ (global.configs||{}).createIndexes&&(cdtkScheam.index({id_app:1,nam:1,tk:1}),cdtkScheam.index({id_app:1,nam:1,ma_dvcs:1,tk:1}),cdtkScheam.index({id_app:1,tk:"text"}),cdtkScheam.index({id_app:1,ma_kho:"text"}),cdtkScheam.index({id_app:1,nam:1}),cdtkScheam.index({id_app:1,status:1}),cdtkScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1}));module.exports=mongoose.models.cdtk||mongoose.model("cdtk",cdtkScheam);
@@ -0,0 +1,3 @@
1
+ const validator=require("../libs/validator"),validAccount=require("../libs/validator-account"),cdtktheongayScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},den_ngay:{type:Date,required:!0},ma_dvcs:{type:String,required:!0,maxlength:1024},tk:{type:String,required:"tk is required",uppercase:!0,maxlength:32,trim:!0},ma_kho:{type:String,uppercase:!0,maxlength:32,trim:!0},du_no00:{type:Number,default:0},du_co00:{type:Number,default:0},du_no_nt00:{type:Number,default:0},du_co_nt00:{type:Number,
2
+ default:0},du_no1:{type:Number,default:0},du_co1:{type:Number,default:0},du_no_nt1:{type:Number,default:0},du_co_nt1:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},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:""}});cdtktheongayScheam.validate={ma_dvcs:validator.existsDvcs,tk:validAccount.isNotTkcn};
3
+ (global.configs||{}).createIndexes&&(cdtktheongayScheam.index({id_app:1,den_ngay:-1,tk:1}),cdtktheongayScheam.index({id_app:1,den_ngay:-1,ma_dvcs:1,tk:1}),cdtktheongayScheam.index({id_app:1,tk:1}),cdtktheongayScheam.index({id_app:1,den_ngay:-1}),cdtktheongayScheam.index({id_app:1,ma_kho:1}),cdtktheongayScheam.index({id_app:1,status:1}),cdtktheongayScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1}));module.exports=mongoose.models.cdtktheongay||mongoose.model("cdtktheongay",cdtktheongayScheam);
@@ -0,0 +1,5 @@
1
+ const validator=require("../libs/validator"),validVt=require("../libs/validator-vt"),cdvtScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},nam:{type:Number,required:!0},ma_dvcs:{type:String,required:!0,maxlength:1024},ma_vt:{type:String,required:"L\u1ed7i: M\u00e3 v\u1eadt t\u01b0 kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng",uppercase:!0,maxlength:1024,trim:!0},ten_vt:String,ma_kho:{type:String,required:"L\u1ed7i: M\u00e3 kho kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng",uppercase:!0,
2
+ maxlength:32,trim:!0},ten_kho:String,ma_lo:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},han_sd:{type:Date},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_kh:String,ton00:{type:Number,default:0},du00:{type:Number,default:0},du_nt00:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},status:{type:Boolean,default:!0},date_created:{type:Date,
3
+ default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});cdvtScheam.validate={ma_dvcs:validator.existsDvcs,ma_vt:validVt.existsVt,ma_kho:validVt.existsKho};
4
+ (global.configs||{}).createIndexes&&(cdvtScheam.index({id_app:1,nam:1,ma_dvcs:1,ma_vt:1,ma_kho:1,ma_lo:1,ma_tt1:1,ma_tt2:1,ma_tt3:1},{name:"cdvt_index_1"}),cdvtScheam.index({id_app:1,ma_vt:"text",ten_vt:"text",ma_kho:"text",ten_kho:"text"},{name:"cdvt_index_text"}),cdvtScheam.index({id_app:1,nam:1,ma_lo:1,han_sd:-1}),cdvtScheam.index({id_app:1,nam:1}),cdvtScheam.index({id_app:1,nam:1,ma_kho:1}),cdvtScheam.index({id_app:1,nam:1,ma_kho:1,ma_vt:1}),cdvtScheam.index({id_app:1,status:1}),cdvtScheam.index({id_app:1,
5
+ user_created:1,visible_to:1,visible_to_users:1}),cdvtScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,nam:1}),cdvtScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,nam:1,ma_kho:1}));module.exports=mongoose.models.cdvt||mongoose.model("cdvt",cdvtScheam);
@@ -0,0 +1,6 @@
1
+ const validator=require("../libs/validator"),validVt=require("../libs/validator-vt"),cdvtnppScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},nam:{type:Number,required:!0},ma_dvcs:{type:String,required:!0,maxlength:1024},ma_vt:{type:String,required:"L\u1ed7i: M\u00e3 v\u1eadt t\u01b0 kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng",uppercase:!0,maxlength:1024,trim:!0},ten_vt:String,ma_kho:{type:String,required:"L\u1ed7i: M\u00e3 kho kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng",uppercase:!0,
2
+ maxlength:32,trim:!0},ten_kho:String,ma_kh:String,ma_lo:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},han_sd:{type:Date},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ton00:{type:Number,default:0},du00:{type:Number,default:0},du_nt00:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},status:{type:Boolean,default:!0},date_created:{type:Date,
3
+ default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});cdvtnppScheam.validate={ma_dvcs:validator.existsDvcs,ma_vt:validVt.existsVt,ma_kho:validVt.existsKho};
4
+ (global.configs||{}).createIndexes&&(cdvtnppScheam.index({id_app:1,nam:1,ma_dvcs:1,ma_vt:1,ma_kho:1,ma_lo:1,ma_tt1:1,ma_tt2:1,ma_tt3:1},{name:"cdvt_index_1"}),cdvtnppScheam.index({id_app:1,ma_vt:"text",ten_vt:"text",ma_kho:"text",ten_kho:"text"},{name:"cdvt_index_text"}),cdvtnppScheam.index({id_app:1,nam:1,ma_lo:1,han_sd:-1}),cdvtnppScheam.index({id_app:1,nam:1}),cdvtnppScheam.index({id_app:1,nam:1,ma_kho:1}),cdvtnppScheam.index({id_app:1,nam:1,ma_kho:1,ma_vt:1}),cdvtnppScheam.index({id_app:1,nam:1,
5
+ ma_kh:1}),cdvtnppScheam.index({id_app:1,nam:1,ma_kh:1,ma_kho:1,ma_vt:1}),cdvtnppScheam.index({id_app:1,status:1}),cdvtnppScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1}),cdvtnppScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,nam:1}),cdvtnppScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,nam:1,ma_kho:1}),cdvtnppScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,nam:1,ma_kho:1,ma_kh:1}));
6
+ module.exports=mongoose.models.cdvtnpp||mongoose.model("cdvtnpp",cdvtnppScheam);
@@ -0,0 +1,5 @@
1
+ const validator=require("../libs/validator"),validVt=require("../libs/validator-vt"),cdvttheongayScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},den_ngay:{type:Date,required:!0},ma_dvcs:{type:String,required:!0,maxlength:1024},ma_vt:{type:String,required:"L\u1ed7i: M\u00e3 v\u1eadt t\u01b0 kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng",uppercase:!0,maxlength:1024,trim:!0},ten_vt:String,ma_kho:{type:String,required:"L\u1ed7i: M\u00e3 kho kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng",uppercase:!0,
2
+ maxlength:32,trim:!0},ten_kho:String,ma_lo:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},han_sd:{type:Date},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ton00:{type:Number,default:0},du00:{type:Number,default:0},du_nt00:{type:Number,default:0},kc_yn:{type:Boolean,default:!1},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},
3
+ date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});cdvttheongayScheam.validate={ma_dvcs:validator.existsDvcs,ma_vt:validVt.existsVt,ma_kho:validVt.existsKho};
4
+ (global.configs||{}).createIndexes&&(cdvttheongayScheam.index({id_app:1,den_ngay:-1,ma_dvcs:1,ma_vt:1,ma_kho:1,ma_lo:1,ma_tt1:1,ma_tt2:1,ma_tt3:1},{name:"cdvt_index_1"}),cdvttheongayScheam.index({id_app:1,ma_vt:"text",ten_vt:"text",ma_kho:"text",ten_kho:"text"},{name:"cdvt_index_text"}),cdvttheongayScheam.index({id_app:1,den_ngay:-1,ma_lo:1,han_sd:-1}),cdvttheongayScheam.index({id_app:1,den_ngay:-1}),cdvttheongayScheam.index({id_app:1,den_ngay:-1,ma_kho:1}),cdvttheongayScheam.index({id_app:1,den_ngay:-1,
5
+ ma_kho:1,ma_vt:1}),cdvttheongayScheam.index({id_app:1,status:1}),cdvttheongayScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1}),cdvttheongayScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,den_ngay:-1}),cdvttheongayScheam.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1,den_ngay:-1,ma_kho:1}));module.exports=mongoose.models.cdvttheongay||mongoose.model("cdvttheongay",cdvttheongayScheam);
@@ -0,0 +1,7 @@
1
+ const moment=require("moment"),chamcongSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_bp:{type:String,uppercase:!0,maxlength:32,trim:!0},ma_nv:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ten_nv:String,ma_loai_cong:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ngay:Date,gio_vao:Date,gio_ra:Date,gio_vao_f:String,gio_ra_f:String,tong_gio_lam:{type:Number,default:0},ma_kh:String,note:String,exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},
2
+ device_user_id:String,id_checkin:String,sl_cong:Number,date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
3
+ chamcongSchema.pre("save",function($next$$){Logger.info("handle du lieu cham cong",this);try{if(this.gio_vao_f){let $gio_vao$$=moment(this.ngay),[$gio$$,$phut$$]=this.gio_vao_f.split(":");if($gio$$){$gio$$=Number($gio$$);if(isNaN($gio$$))return $next$$("Gi\u1edd v\u00e0o kh\u00f4ng h\u1ee3p l\u1ec7");$gio_vao$$=$gio_vao$$.hours($gio$$)}else return $next$$("Gi\u1edd v\u00e0o kh\u00f4ng h\u1ee3p l\u1ec7");$phut$$?($phut$$=Number($phut$$),isNaN($phut$$)&&($phut$$=0)):$phut$$=0;$gio_vao$$=$gio_vao$$.minutes($phut$$);
4
+ this.gio_vao=$gio_vao$$.toDate()}if(this.gio_ra_f){let $gio_ra$$=moment(this.ngay),[$gio$$,$phut$$]=this.gio_ra_f.split(":");if($gio$$){$gio$$=Number($gio$$);if(isNaN($gio$$))return $next$$("Gi\u1edd ra kh\u00f4ng h\u1ee3p l\u1ec7");$gio_ra$$=$gio_ra$$.hours($gio$$)}else return $next$$("Gi\u1edd ra kh\u00f4ng h\u1ee3p l\u1ec7");$phut$$?($phut$$=Number($phut$$),isNaN($phut$$)||($phut$$=0)):$phut$$=0;$gio_ra$$=$gio_ra$$.minutes($phut$$);this.gio_ra=$gio_ra$$.toDate()}}catch($e$$){return Logger.error("chamcong kh\u00f4ng h\u1ee3p l\u1ec7",
5
+ this),$next$$({error:"C\u00f4ng kh\u00f4ng h\u1ee3p l\u1ec7"})}$next$$()});
6
+ (global.configs||{}).createIndexes&&(chamcongSchema.index({id_app:1,ma_nv:1,ma_loai_cong:1,ngay:1}),chamcongSchema.index({id_app:1,id_checkin:1}),chamcongSchema.index({id_app:1,id_checkin:1,ngay:1}),chamcongSchema.index({id_app:1,ngay:1}),chamcongSchema.index({id_app:1,ma_bp:1}),chamcongSchema.index({id_app:1,gio_vao:1,gio_ra:1}),chamcongSchema.index({id_app:1,ma_nv:"text",ten_nv:"text",ghi_chu:"text"},{name:"chamcong_index_text"}),chamcongSchema.index({id_app:1,device_user_id:1}),chamcongSchema.index({id_app:1,
7
+ status:1}),chamcongSchema.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1}));const model=mongoose.models.chamcong||mongoose.model("chamcong",chamcongSchema);module.exports=model;
@@ -0,0 +1,2 @@
1
+ const ChatMessageSchema=new mongoose.Schema({id_app:{type:String,required:!0,index:!0},session_id:{type:mongoose.Schema.Types.ObjectId,ref:"chat_session",required:!0,index:!0},role:{type:String,enum:["system","user","assistant","data","tool"],required:!0},content:{type:String},tool_call_id:{type:mongoose.Schema.Types.Mixed},tool_calls:{type:mongoose.Schema.Types.Mixed},messages:{type:mongoose.Schema.Types.Mixed},files:[String],status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},
2
+ date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});module.exports=mongoose.model("chat_message",ChatMessageSchema);
@@ -0,0 +1,2 @@
1
+ const ChatSessionSchema=new mongoose.Schema({id_app:{type:String,required:!0,index:!0},user_id:{type:String,required:!0,index:!0},title:{type:String,default:"\u0110o\u1ea1n chat m\u1edbi"},system_prompt:{type:String},is_active:{type:Boolean,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
+ ChatSessionSchema.pre("save",function($next$$){this.date_updated=new Date;$next$$()});module.exports=mongoose.model("chat_session",ChatSessionSchema);