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,5 @@
1
+ const model=global.getModel("reportinfo"),underscore=require("underscore"),controller=require("../../controllers/controller"),{isSupperAdmin}=require("../../libs/utils");
2
+ module.exports=function($router$$){(new controller($router$$,model,"reportinfo",{sort:{code:1},require_id_app:!1,unique:["code"],onView:async($user$$,$items$$,$next$$,$options$$)=>{await $items$$.filter($i$$=>$i$$.form_condition_info).asyncJoinModel2(null,"listinfo",{where:{form_condition_info:"code"},fields:{filterFields:"fields"}});if($options$$&&$options$$.req&&$options$$.req.query&&(!$options$$.req.query.fields||$options$$.req.query.fields.indexOf("columns")>=0)){await $items$$.filter($i$$=>$i$$.table_info).asyncJoinModel2(null,
3
+ "tableinfo",{where:$item$$=>({code:$item$$.table_info.toUpperCase()}),fields:{tbHeaders:"headers"}});for(let $item$$ of $items$$)(!$item$$.columns||$item$$.columns?.length==0)&&$item$$.tbHeaders&&$item$$.tbHeaders.length>0&&($item$$.columns=$item$$.tbHeaders[0]?.cells||[],$item$$.columns.forEach($c$$=>{$c$$.datatype=$c$$.datatype||$c$$.dataType}))}$next$$(null,$items$$)},onCreating:($user$$,$obj$$,$next$$)=>{const $usersAdmin$$=configs.admins.concat(configs.subAdmins||[]);if(!underscore.contains($usersAdmin$$,
4
+ $user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("Ch\u1ec9 admin m\u1edbi c\u00f3 quy\u1ec1n t\u1ea1o b\u00e1o c\u00e1o m\u1edbi");$next$$(null,$obj$$)},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{if(!underscore.contains(configs.admins,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase())&&($obj$$.allow_users||"").indexOf($user$$.email)<0)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n th\u1ef1c hi\u1ec7n thao t\u00e1c n\u00e0y. Ch\u1ec9 c\u00e1c admin h\u1ec7 th\u1ed1ng v\u00e0 c\u00e1c user sau l\u00e0 \u0111\u01b0\u1ee3c ph\u00e9p:"+
5
+ $obj$$.allow_users);$next$$(null,$data$$,$obj$$)},onCreated:($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)},onUpdated:($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)},onDeleting:($user$$,$obj$$,$next$$)=>{if(!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("Ch\u1ec9 admin m\u1edbi c\u00f3 quy\u1ec1n x\u00f3a b\u00e1o c\u00e1o n\u00e0y");$next$$(null,$obj$$)}})).route()};
@@ -0,0 +1 @@
1
+ const model=global.getModel("rptobject"),controller=require("../../controllers/controller");module.exports=function($router$$){(new controller($router$$,model,"rptobject",{require_id_app:!1,unique:["code_rpt","ma_obj"],sort:{code_rpt:1}})).route()};
@@ -0,0 +1,10 @@
1
+ const model=global.getModel("schedule"),controller=require("../../controllers/controller"),permission=require("../../libs/permission"),{onAfterCommit}=require("../../libs/sessionContext");
2
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"schedule",{require_id_app:!1,sort:{trang_thai:1,time_run:1},onFinding:($user$$,$condition$$,$next$$)=>{$user$$.admin?$next$$(null,$condition$$):$next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp th\u00f4ng tin n\u00e0y")}});$contr_router$$.deleted=async function($user$$,$obj$$,$next$$){try{let $schedules$$=await model.loadFromRedis();$schedules$$=$schedules$$.filter($s$$=>$s$$._id.toString()!==
3
+ $obj$$._id.toString());await model.saveToRedis($schedules$$)}catch($e$$){Logger.error("error remove schedule",$e$$)}$next$$(null,$obj$$)};$contr_router$$.creating=function($user$$,$data$$,$fn$$){$user$$.admin?($data$$.next_run=null,$fn$$(null,$data$$)):$fn$$("B\u1ea1n kh\u00f4ng th\u1ec3 t\u1ea1o n\u1ed9i dung n\u00e0y")};$contr_router$$.created=async function($user$$,$schedule$$,$next$$){onAfterCommit(async()=>{try{$schedule$$.toObject&&($schedule$$=$schedule$$.toObject());const $schedules$$=await model.loadFromRedis();
4
+ $schedules$$.push($schedule$$);await model.saveToRedis($schedules$$);Logger.info("added a schedule, time state at",$schedule$$.time_run)}catch($e$$){Logger.error($e$$)}});$next$$(null,$schedule$$)};$contr_router$$.updated=async function($user$$,$schedule$$,$next$$){onAfterCommit(async()=>{try{$schedule$$.toObject&&($schedule$$=$schedule$$.toObject());let $schedules$$=await model.loadFromRedis();$schedules$$=$schedules$$.filter($s$$=>$s$$._id.toString()!==$schedule$$._id.toString());$schedules$$.push($schedule$$);
5
+ await model.saveToRedis($schedules$$);Logger.info("updated a schedule, time state at",$schedule$$.time_run)}catch($e$$){Logger.error($e$$)}});$next$$(null,$schedule$$)};$contr_router$$.createRoute("add/notify",async($req_sche$$,$next$$)=>{let $obj$$=$req_sche$$.body;if(!$obj$$._id)return $next$$("D\u1eef li\u1ec7u thi\u1ebfu th\u00f4ng tin _id c\u1ee7a \u0111\u1ed1i t\u01b0\u1ee3ng li\u00ean k\u1ebft (_id)");if(!$obj$$.code)return $next$$("D\u1eef li\u1ec7u thi\u1ebfu th\u00f4ng tin m\u00e3 \u0111\u1ed1i t\u01b0\u1ee3ng li\u00ean k\u1ebft (code)");
6
+ if(!$obj$$.time_run)return $next$$("D\u1eef li\u1ec7u thi\u1ebfu th\u1eddi gian b\u1eaft \u0111\u1ea7u ch\u1ea1y (time_run)");if(!$obj$$.users_will_receive||$obj$$.users_will_receive.length===0)return $next$$("D\u1eef li\u1ec7u thi\u1ebfu th\u00f4ng tin danh s\u00e1ch ng\u01b0\u1eddi nh\u1eadn");if(!$obj$$.title)return $next$$("D\u1eef li\u1ec7u thi\u1ebfu ti\u00eau \u0111\u1ec1 c\u1ee7a th\u00f4ng b\u00e1o");let $data$$={...$obj$$};await model.removeScheduleLink($obj$$._id.toString());let $time_run$$=
7
+ new Date($obj$$.time_run);$time_run$$.setMinutes($time_run$$.getMinutes()-($obj$$.advance_remider||$obj$$.nhac_nho_truoc||30));$req_sche$$={id_link:$data$$.id_link||$data$$._id.toString(),id_app:$data$$.id_app,action:"sendNotification",data:$data$$,title:$data$$.title,time_run:$time_run$$,trang_thai:"0",repeat:$data$$.repeat||0,finish_run:$data$$.finish_run,status:!0,user_created:$req_sche$$.user.email,user_updated:$req_sche$$.user.email};model.addSchedule($req_sche$$);$next$$(null,$req_sche$$)},
8
+ {method:"POST"});$contr_router$$.createRoute("add/updateData",async($req$$,$next$$)=>{let $obj$$=$req$$.body;if(!$obj$$.data)return $next$$("D\u1eef li\u1ec7u thi\u1ebfu data");if(!$obj$$.data.module)return $next$$("D\u1eef li\u1ec7u thi\u1ebfu data.module");if(!$obj$$.time_run)return $next$$("D\u1eef li\u1ec7u thi\u1ebfu th\u1eddi gian b\u1eaft \u0111\u1ea7u ch\u1ea1y (time_run)");let $data$$={...$obj$$.data};permission.hasRight($data$$.id_app,$req$$.user.email,$data$$.module,"add",async($e$jscomp$3_sche$$,
9
+ $right$$)=>{$right$$?(await model.removeScheduleLink($obj$$.id_link||$data$$._id.toString()),$e$jscomp$3_sche$$={id_link:$obj$$.id_link||$data$$._id.toString(),id_app:$data$$.id_app,action:"updateData",data:$data$$,title:$obj$$.title||"C\u1eadp nh\u1eadt d\u1eef li\u1ec7u cho module "+$data$$.module,time_run:new Date($obj$$.time_run),trang_thai:"0",repeat:0,status:!0,user_created:$req$$.user.email,user_updated:$req$$.user.email},model.addSchedule($e$jscomp$3_sche$$),$next$$(null,$e$jscomp$3_sche$$)):
10
+ $next$$($e$jscomp$3_sche$$||"Kh\u00f4ng th\u1ec3 t\u1ea1o l\u1ecbch c\u1eadp nh\u1eadt d\u1eef li\u1ec7u cho module "+$obj$$.data.module)})},{method:"POST"});$contr_router$$.createRoute("delete/:id_link",async($req$$,$next$$)=>{await model.removeScheduleLink($req$$.params.id_link);$next$$(null,{result:"OK"})},{method:"GET"});$contr_router$$.route()};
@@ -0,0 +1 @@
1
+ const model=global.getModel("sysconfig"),controller=require("../../controllers/controller");module.exports=function($router$$){(new controller($router$$,model,"sysconfig",{require_id_app:!1,unique:["code"]})).route()};
@@ -0,0 +1 @@
1
+ const model=global.getModel("sysgroup"),controller=require("../../controllers/controller");module.exports=function($router$$){(new controller($router$$,model,"sysgroup",{require_id_app:!1,unique:["group_type","group_name"]})).route()};
@@ -0,0 +1 @@
1
+ const model=global.getModel("tableinfo"),controller=require("../../controllers/controller");module.exports=function($router$$){(new controller($router$$,model,"tableinfo",{require_id_app:!1,unique:["code"],sort:{code:1}})).route()};
@@ -0,0 +1,5 @@
1
+ const model=global.getModel("templatestore"),listinfo=global.getModel("listinfo"),reportinfo=global.getModel("reportinfo"),controller=require("../../controllers/controller");
2
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"templatestore",{require_id_app:!1,onView:async($user$$,$items$$,$next$$)=>{await $items$$.asyncJoinModel2(null,listinfo,{where:{func_code:"code"},fields:{func_code_title:"title"}});await $items$$.filter($item$$=>!$item$$.func_code_title).asyncJoinModel2(null,reportinfo,{where:{func_code:"code"},fields:{func_code_title:"title"}});await $items$$.filter($item$$=>$item$$.func_ref).asyncJoinModel2(null,listinfo,
3
+ {where:{func_ref:"code"},fields:{func_ref_title:"title"}});await $items$$.filter($item$$=>!$item$$.func_ref_title&&$item$$.func_ref).asyncJoinModel2(null,reportinfo,{where:{func_ref:"code"},fields:{func_ref_title:"title"}});$next$$(null,$items$$)}});$contr_router$$.deleting=function($user$$,$obj$$,$fn$$){$user$$.admin||$user$$.email===$obj$$.user_created?$fn$$(null,$obj$$):$fn$$("B\u1ea1n kh\u00f4ng th\u1ec3 x\u00f3a n\u1ed9i dung n\u00e0y")};$contr_router$$.creating=async($user$$,$data$$,$next$$)=>
4
+ {if($data$$.data&&$data$$.data._id&&$data$$.func_code.toLowerCase()==="rptform"){const $form_kbm_name$$=$data$$.data.form_kbm||"kbmPttct";try{const $form_kbm_model$$=global.getModel($form_kbm_name$$);if($form_kbm_model$$){let $kbm$$=await $form_kbm_model$$.find({id_rptform:$data$$.data._id.toString()}).lean();$data$$.data.exfields=$data$$.data.exfields||{};$data$$.data.exfields[$form_kbm_name$$]=$kbm$$}}catch($e$$){Logger.error($e$$)}}$user$$.admin||delete $data$$.default_when_create_app;$next$$(null,
5
+ $data$$)};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$fn$$){$user$$.admin||$user$$.email===$obj$$.user_created?($user$$.admin||delete $data$$.default_when_create_app,$fn$$(null,$data$$,$obj$$)):$fn$$("B\u1ea1n kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt n\u1ed9i dung n\u00e0y")};$contr_router$$.route()};
@@ -0,0 +1 @@
1
+ const model=global.getModel("tinhthanh"),controller=require("../../controllers/controller");module.exports=function($router$$){(new controller($router$$,model,"tinhthanh",{require_id_app:!1,unique:["ten_tinh_thanh"],sort:{stt:1}})).route()};
@@ -0,0 +1,3 @@
1
+ const model=global.getModel("tokens"),controller=require("../../controllers/controller");
2
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"token",{require_id_app:!1,sort:{note:-1,date_created:-1}});$contr_router$$.route();$contr_router$$.finding=function($user$$,$condition$$,$next$$){$condition$$.email=$user$$.email;$condition$$.once={$ne:!0};$next$$(null,$condition$$)};$contr_router$$.creating=function($user$$,$obj$$,$next$$){$next$$("Can't create token by this way")};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){if($user$$.email!==
3
+ $obj$$.email)return $next$$("You don't allow to update this token ");delete $data$$.token;delete $data$$.email;delete $data$$.once;delete $data$$.used;$next$$(null,$data$$,$obj$$)};$contr_router$$.deleting=function($user$$,$obj$$,$next$$){if($user$$.email!==$obj$$.email)return $next$$("You don't allow to delete this token ");$next$$(null,$obj$$)}};
@@ -0,0 +1,3 @@
1
+ const model=global.getModel("trangthai"),controller=require("../../controllers/controller");
2
+ module.exports=function($router$$){(new controller($router$$,model,"trangthai",{require_id_app:!1,unique:["ma_ct","ma_trang_thai"],sort:{ma_ct:1,stt:1},onFound:async($api_ma_ct_user$$,$condition$$,$items$$,$next$$)=>{$items$$.length==0&&$condition$$?.ma_ct&&!$condition$$?._id&&($api_ma_ct_user$$=($condition$$.ma_ct||"").toString().toLowerCase(),($api_ma_ct_user$$=await global.getModel("listinfo").findOne({code:$api_ma_ct_user$$,api_code:{$exists:!0}}).lean())&&$api_ma_ct_user$$.api_code&&($condition$$.ma_ct=
3
+ $api_ma_ct_user$$.api_code.toLowerCase(),$items$$=await model.find($condition$$).lean()));$next$$(null,$items$$)}})).route()};
@@ -0,0 +1 @@
1
+ const model=global.getModel("trialinfo"),controller=require("../../controllers/controller");module.exports=function($router$$){(new controller($router$$,model,"trialinfo",{require_id_app:!1,sort:{date_created:-1}})).route()};
@@ -0,0 +1,45 @@
1
+ const User=global.getModel("user"),log=global.getModel("log"),Customer=global.getModel("customer"),Endpoint=global.getModel("endpoint"),getNotifies=require("../../libs/getNotifies"),redisCache=require("../../libs/redis-cache"),underscore=require("underscore"),async=require("async"),fs=require("fs"),{isSupperAdmin,generatePasswordHash}=require("../../libs/utils"),permission=require("../../libs/permission"),validator=require("validator"),path=require("path"),Token=global.getModel("token"),sharp=require("sharp"),
2
+ request=require("request"),findByToken=User.findByToken;
3
+ module.exports=function($router$$){$router$$.route("/user").get(function($req$$,$res$$){const $usersAdmin$$=configs.admins,$access_token$$=$req$$.query.access_token;findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,function($e$$,$user$$){if($e$$)return $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$});$user$$?($user$$.local=$user$$.local||{},$user$$.address=$user$$.local.address?$user$$.local.address:"",$user$$.phone=$user$$.local.phone?
4
+ $user$$.local.phone:"",$user$$.use_pin=configs.use_pin_as_otp&&!!$user$$.local.pin,$user$$.token=$access_token$$,$user$$.admin=underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase()),!$user$$.picture&&$user$$.local.picture&&($user$$.picture=$user$$.local.picture),delete $user$$.tokens,delete $user$$.facebook,delete $user$$.google,delete $user$$.password,delete $user$$.pin,delete $user$$.local.pin,delete $user$$.local.rePassword,delete $user$$.local.password,$res$$.send($user$$)):
5
+ $res$$.status(404).send({error:"Token kh\u00f4ng t\u1ed3n t\u1ea1i"})})});$router$$.route("/profile").get(function($req$$,$res$$){const $email$$=$req$$.query.email,$query$$={};async.parallel({e:function($callback$$){$email$$?($query$$.email=$email$$,User.findOne($query$$).lean().then(function($user$$){$callback$$(null,$user$$)}).catch($error$$=>{$callback$$($error$$)})):$callback$$()},t:function($callback$$){$email$$?$callback$$():findByToken($req$$.query.access_token,$req$$.ip||$req$$.headers["x-forwarded-for"]||
6
+ $req$$.connection.remoteAddress,($e$$,$user$$)=>{if($e$$)return $callback$$($e$$);$callback$$(null,$user$$)})}},function($e$$,$dk$$){if($e$$)return $res$$.state(400).send({error:$e$$.message||$e$$.error||$e$$});let $user$$=$dk$$.e||$dk$$.t;$user$$?(delete $user$$.local.password,delete $user$$.local.rspassword,delete $user$$.local.pin,delete $user$$.tokens,$user$$.local._id=$user$$._id,$user$$.local.invited=[],$user$$.local.email2=$user$$.email2,$user$$.local.picture||($user$$.local.picture="/images/avatar.jpg"),
7
+ delete $user$$.token,User.find({partner:$user$$._id},{local:1}).lean().then(async $p$$=>{$p$$&&$p$$.forEach(function($u$$){delete $u$$.local.password;delete $u$$.local.rspassword;delete $u$$.tokens;delete $u$$.token;delete $u$$.local.pin;$user$$.local.invited.push($u$$.local)});$user$$.local.isOnline=await User.isOnline($user$$.email);$res$$.send($user$$.local)}).catch($e$$=>{Logger.error($e$$);$res$$.status(404).send({error:$e$$.message})})):$res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y th\u00f4ng tin c\u1ee7a t\u00e0i kho\u1ea3n n\u00e0y"})})});
8
+ $router$$.route("/avatar").get(function($req$$,$res$$){var $email$$=$req$$.query.email,$query$$={};async.parallel({e:function($callback$$){$email$$&&($query$$.email=$email$$);$callback$$()},t:function($callback$$){$email$$?$callback$$():Token.findOne({token:$req$$.query.access_token},function($e$$,$t$$){if($e$$)return $callback$$($e$$);$t$$&&($query$$.email=$t$$.email);$callback$$()})}},function($e$$){if($e$$)return $res$$.status(400).send({error:$e$$});let $size$$=Number($req$$.query.size)||240;
9
+ $query$$.email||($query$$.tokens=$req$$.query.access_token);User.findOne($query$$,{picture:1}).lean().then(async function($imgPath_orgin_file_size_user$$){var $_gm_root_dir$$=configs.paths.images||path.join(path.dirname(path.dirname(__dirname)),"images");$imgPath_orgin_file_size_user$$&&$imgPath_orgin_file_size_user$$.picture?$imgPath_orgin_file_size_user$$.picture.indexOf("/getfile/")===0?($imgPath_orgin_file_size_user$$=$imgPath_orgin_file_size_user$$.picture.replace(/\/getfile\//g,""),$imgPath_orgin_file_size_user$$=
10
+ path.join($_gm_root_dir$$,$imgPath_orgin_file_size_user$$),fs.existsSync($imgPath_orgin_file_size_user$$)?($_gm_root_dir$$=sharp($imgPath_orgin_file_size_user$$,{failOnError:!1}),($imgPath_orgin_file_size_user$$=await $_gm_root_dir$$.metadata())&&$size$$&&$size$$<$imgPath_orgin_file_size_user$$.width&&$size$$<$imgPath_orgin_file_size_user$$.height&&($_gm_root_dir$$=$_gm_root_dir$$.resize({width:$size$$}).rotate()),$imgPath_orgin_file_size_user$$&&$imgPath_orgin_file_size_user$$.format!="webp"&&($_gm_root_dir$$=
11
+ $_gm_root_dir$$.webp({lossless:!1})),$_gm_root_dir$$.pipe($res$$)):$res$$.sendFile(path.join($_gm_root_dir$$,"avatar.jpg"))):$imgPath_orgin_file_size_user$$.picture.indexOf("http://")===0||$imgPath_orgin_file_size_user$$.picture.indexOf("https://")===0?request.get($imgPath_orgin_file_size_user$$.picture).pipe($res$$):$res$$.sendFile(path.join($_gm_root_dir$$,"avatar.jpg")):$res$$.sendFile(path.join($_gm_root_dir$$,"avatar.jpg"))}).catch($error$$=>{$res$$.status(400).send($error$$)})})});$router$$.route("/updateprofile").post(function($req$$,
12
+ $res$$){findByToken($req$$.query.access_token,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,async($error$jscomp$4_user$$,$_user$$)=>{if($error$jscomp$4_user$$)return $res$$.status(400).send({error:$error$jscomp$4_user$$.message||$error$jscomp$4_user$$.error||$error$jscomp$4_user$$});if($_user$$){$error$jscomp$4_user$$={local:$_user$$.local||{},email:$_user$$.email,name:$_user$$.name};let $profile$$=$req$$.body;if($profile$$.local)for(var $_phone_identify_key$$ in $profile$$.local)$_phone_identify_key$$!==
13
+ "_id"&&$_phone_identify_key$$!=="active"&&$_phone_identify_key$$!=="password"&&$_phone_identify_key$$!=="rspassword"&&$_phone_identify_key$$!=="pin"&&($error$jscomp$4_user$$.local[$_phone_identify_key$$]=$profile$$.local[$_phone_identify_key$$],$profile$$[$_phone_identify_key$$]==void 0&&($profile$$[$_phone_identify_key$$]=$profile$$.local[$_phone_identify_key$$]));$profile$$.name&&($_phone_identify_key$$=await global.getModel("assuser_identity"),$_phone_identify_key$$&&$_phone_identify_key$$.trang_thai===
14
+ "1"||($error$jscomp$4_user$$.local.name=$profile$$.name,$error$jscomp$4_user$$.name=$profile$$.name));if($_phone_identify_key$$=$profile$$.phone){let $tmp_u$$=await User.findOne({$or:[{"local.phone":$_phone_identify_key$$,email:$_phone_identify_key$$}]});if($tmp_u$$&&$tmp_u$$.email!==$error$jscomp$4_user$$.email)return $res$$.status(400).send({error:`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$_phone_identify_key$$} \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng`})}$_phone_identify_key$$!=void 0&&($error$jscomp$4_user$$.local.phone=
15
+ $_phone_identify_key$$);$profile$$.address!=void 0&&($error$jscomp$4_user$$.local.address=$profile$$.address);$profile$$.zalo!=void 0&&($error$jscomp$4_user$$.local.zalo=$profile$$.zalo);$profile$$.whatsapp!=void 0&&($error$jscomp$4_user$$.local.whatsapp=$profile$$.whatsapp);$profile$$.facebook!=void 0&&($error$jscomp$4_user$$.local.facebook=$profile$$.facebook);$profile$$.company!=void 0&&($error$jscomp$4_user$$.local.company=$profile$$.company);$profile$$.picture!=void 0&&($error$jscomp$4_user$$.local.picture=
16
+ $profile$$.picture);if($profile$$.email2!=void 0){if($profile$$.email2&&!validator.isEmail($profile$$.email2))return $res$$.status(400).send({error:`Email ${$profile$$.email2} kh\u00f4ng h\u1ee3p l\u1ec7`});$error$jscomp$4_user$$.email2=$profile$$.email2}$error$jscomp$4_user$$.user_updated=$req$$.user.email;$error$jscomp$4_user$$.date_updated=new Date;User.findByIdAndUpdate($_user$$._id,$error$jscomp$4_user$$,async function($error$$,$rs$$){if($error$$||!$rs$$)return $res$$.status(400).send({error:$error$$||
17
+ "User kh\u00f4ng t\u1ed3n t\u1ea1i"});log.create({id_app:"CHANGEPROFILE",id_func:"CHANGEPROFILE",action:"CHANGEPROFILE"},$_user$$.email,$req$$.header("user-agent"),$req$$);Customer.findOne({of_user:$rs$$.email,ma_kh:$rs$$.email.toUpperCase()},($e$$,$cust$$)=>{$cust$$?($cust$$.ten_kh=$rs$$.name,$cust$$.save(($e$$,$_cust$$)=>{if($e$$)return Logger.error("can't update ten_kh for user",$rs$$.name,$e$$);global.clientRedis.set("flex:"+$_cust$$._id.toString(),"")})):Logger.error("Not found customer of user",
18
+ $rs$$.email)});$_user$$=await User.findById($_user$$._id).lean();redisCache.set("user",$_user$$,function($e$$){$e$$?Logger.error($e$$):Logger.info("cache user infomation to redis");$res$$.send("\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng")})})}else $res$$.status(404).send({error:"Not found"})})});$router$$.route("/activeByAdmin/:user").get(function($req$$,$res$$){const $usersAdmin$$=[...configs.admins,...(configs.subAdmins||[])];findByToken($req$$.query.access_token,$req$$.ip||$req$$.headers["x-forwarded-for"]||
19
+ $req$$.connection.remoteAddress,function($error$$,$user$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$});if(!$user$$)return $res$$.status(400).send({error:"Token kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb"});if(underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase()))User.findOne({email:$req$$.params.user},function($e$$,$u$$){if($e$$||!$u$$)return $res$$.status(400).send({error:$req$$.params.user+" ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd"});
20
+ $u$$.local=$u$$.local||{};$u$$.local.active=!0;$u$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);redisCache.set("user",$u$$.toObject(),function($e$$){$e$$?Logger.error($e$$):Logger.info("cache user infomation to redis")});$res$$.send({message:"\u0110\u00e3 k\u00edch ho\u1ea1t th\u00e0nh c\u00f4ng"})})});else return $res$$.status(400).send({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n k\u00edch ho\u1ea1t t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng"})})});$router$$.route("/unActiveByAdmin/:user").get(function($req$$,
21
+ $res$$){const $usersAdmin$$=[...configs.admins,...(configs.subAdmins||[])];findByToken($req$$.query.access_token,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,function($error$$,$user$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$});if(!$user$$)return $res$$.status(400).send({error:"Token kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb"});if(underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase()))User.findOne({email:$req$$.params.user},
22
+ function($e$$,$u$$){if($e$$||!$u$$)return $res$$.status(400).send({error:$req$$.params.user+" ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd"});$u$$.local=$u$$.local||{};$u$$.local.active=!1;$u$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);redisCache.set("user",$u$$.toObject(),function($e$$){$e$$?Logger.error($e$$):Logger.info("cache user infomation to redis")});$res$$.send({message:"\u0110\u00e3 hu\u1ef7 k\u00edch ho\u1ea1t th\u00e0nh c\u00f4ng"})})});else return $res$$.status(400).send({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n hu\u1ef7 k\u00edch ho\u1ea1t t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng"})})});
23
+ $router$$.route("/changepasswordByAdmin").post(function($req$$,$res$$){const $usersAdmin$$=[...configs.admins,...(configs.subAdmins||[])];let $body$$=$req$$.body;if(!$body$$.newPassword)return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp m\u1eadt kh\u1ea9u m\u1edbi"});if($body$$.newPassword){if($body$$.reNewPassword!==$body$$.newPassword)return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c"});if(!User.teststrengthPassword($body$$.newPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u ph\u1ea3i c\u00f3 \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1 v\u00e0 bao g\u1ed3m \u00edt nh\u1ea5t m\u1ed9t ch\u1eef s\u1ed1, m\u1ed9t ch\u1eef hoa v\u00e0 m\u1ed9t ch\u1eef th\u01b0\u1eddng"})}findByToken($req$$.query.access_token,
24
+ $req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,async function($error$$,$user$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$});if(!$user$$)return $res$$.status(400).send({error:"token kh\u00f4ng c\u00f3 gi\u00e1 tr\u1ecb"});if(underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase()))User.findOne({email:$body$$.email},function($e$$,$u$$){if($e$$||!$u$$)return $res$$.status(400).send({error:$body$$.email+
25
+ " ch\u01b0a \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd"});$u$$.local.password=$u$$.generateHash($u$$.email+$body$$.newPassword);$u$$.local.rspassword=null;$u$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);Token.deleteMany({email:$body$$.email,ip:{$in:["",null,void 0]}},$e$$=>{$e$$&&Logger.info("error when remove old tokens",$e$$)});log.create({id_app:"CHANGEPASSWORD",id_func:"CHANGEPASSWORD",action:"CHANGEPASSWORD"},$u$$.email,$req$$.header("user-agent"),$req$$);redisCache.set("user",
26
+ $u$$.toObject(),function($e$$){$e$$?Logger.error($e$$):Logger.info("cache user infomation to redis")});$res$$.send({message:"\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng"})})});else return $body$$.id_app?await global.getModel("participant").findOne({email:$user$$.email.toLowerCase(),id_app:$body$$.id_app,admin:!0}).lean()?($error$$=await global.getModel("participant").findOne({email:$body$$.email.toLowerCase(),id_app:$body$$.id_app}))?($error$$.password=generatePasswordHash($error$$.email+
27
+ $body$$.newPassword),await $error$$.save(),Token.deleteMany({email:$body$$.email,$or:[{only_id_app:$body$$.id_app},{id_apps:$body$$.id_app}],ip:{$in:["",null,void 0]}},$e$$=>{$e$$&&Logger.info("error when remove old tokens",$e$$)}),log.create({id_app:"CHANGEPASSWORD",id_func:"CHANGEPASSWORD",action:"CHANGEPASSWORD"},$error$$.email,$req$$.header("user-agent"),$req$$),$res$$.send({message:"\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng"})):$res$$.status(400).send({error:"Ng\u01b0\u1eddi d\u00f9ng n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i trong c\u00f4ng ty tr\u00ean"}):
28
+ $res$$.status(400).send({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n thay \u0111\u1ed5i m\u1eadt kh\u1ea9u c\u1ee7a ng\u01b0\u1eddi s\u1eed d\u1ee5ng n\u00e0y"}):$res$$.status(400).send({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n thay \u0111\u1ed5i m\u1eadt kh\u1ea9u c\u1ee7a ng\u01b0\u1eddi s\u1eed d\u1ee5ng n\u00e0y"})})});$router$$.route("/delete").get(function($req$$,$res$$){findByToken($req$$.query.access_token,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,
29
+ async function($error$$,$_user$$){if($error$$||!$_user$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$||"Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y t\u00e0i kho\u1ea3n n\u00e0y",code:1100});try{await permission.verifyOTP($_user$$.email,$req$$.query["otp-id"],$req$$.query["otp-code"]),await global.getModel("participant").deleteMany({email:$_user$$.email}),await global.getModel("user").deleteMany({email:$_user$$.email}),$res$$.send({ok:!0,message:"T\u00e0i kho\u1ea3n c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a th\u00e0nh c\u00f4ng"})}catch($e$$){return Logger.error($e$$),
30
+ $res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$,code:4001})}})});$router$$.route("/changepassword").post(function($req$$,$res$$){let $access_token$$=$req$$.query.access_token;findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,async function($error$$,$_user$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$});if($_user$$){let $user$$=await User.findOne({email:$_user$$.email});if(!$user$$)return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng "+
31
+ $_user$$.email});$error$$=$req$$.body;if(!(await Token.findOne({token:$access_token$$})||{}).once){let $otp_id$$=$error$$["otp-id"]||$req$$.query["otp-id"],$otp_code$$=$error$$["otp-code"]||$req$$.query["otp-code"];if($otp_id$$&&$otp_code$$){try{await permission.verifyOTP($_user$$.email,$otp_id$$,$otp_code$$)}catch($e$$){return Logger.error($e$$),$res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$,code:4001})}if($user$$.local.password&&$error$$.oldPassword&&!$user$$.validPassword($error$$.oldPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u hi\u1ec7n t\u1ea1i kh\u00f4ng ch\u00ednh x\u00e1c"})}else if($user$$.local.password){if(!$error$$.oldPassword)return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp m\u1eadt kh\u1ea9u hi\u1ec7n t\u1ea1i"});
32
+ if(!$user$$.validPassword($error$$.oldPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u hi\u1ec7n t\u1ea1i kh\u00f4ng ch\u00ednh x\u00e1c"})}}if($error$$.newPassword){if($error$$.reNewPassword!==$error$$.newPassword)return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c"});if(!User.teststrengthPassword($error$$.newPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u ph\u1ea3i c\u00f3 \u00edt nh\u1ea5t 6 k\u00fd t\u1ef1 v\u00e0 bao g\u1ed3m \u00edt nh\u1ea5t m\u1ed9t ch\u1eef s\u1ed1, m\u1ed9t ch\u1eef hoa v\u00e0 m\u1ed9t ch\u1eef th\u01b0\u1eddng"})}else return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp m\u1eadt kh\u1ea9u m\u1edbi"});
33
+ $user$$.local.password=$user$$.generateHash($user$$.email+$error$$.newPassword);$user$$.local.rspassword=null;$user$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);Token.deleteMany({email:$user$$.email,token:{$ne:$access_token$$},ip:{$in:["",null,void 0]},note:{$in:["",null,void 0]}},$e$$=>{$e$$&&Logger.error("error when remove old tokens",$e$$)});log.create({id_app:"CHANGEPASSWORD",id_func:"CHANGEPASSWORD",action:"CHANGEPASSWORD"},$user$$.email,$req$$.header("user-agent"),
34
+ $req$$);redisCache.set("user",$user$$.toObject(),function($e$$){$e$$?Logger.error($e$$):Logger.info("cache user infomation to redis")});$res$$.send({message:"\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng"})})}else return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng n\u00e0y"})})});$router$$.route("/changepin").post(function($req$$,$res$$){let $access_token$$=$req$$.query.access_token;findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||
35
+ $req$$.connection.remoteAddress,async function($error$jscomp$15_passwords$$,$_user$jscomp$3_token$$){if($error$jscomp$15_passwords$$)return $res$$.status(400).send({error:$error$jscomp$15_passwords$$.message||$error$jscomp$15_passwords$$.error||$error$jscomp$15_passwords$$});if($_user$jscomp$3_token$$){let $user$$=await User.findOne({email:$_user$jscomp$3_token$$.email});if(!$user$$)return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng "+$_user$jscomp$3_token$$.email});
36
+ $error$jscomp$15_passwords$$=$req$$.body;$_user$jscomp$3_token$$=await Token.findOne({token:$access_token$$})||{};if($user$$.local.password&&!$_user$jscomp$3_token$$.once){if(!$error$jscomp$15_passwords$$.oldPassword)return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp m\u1eadt kh\u1ea9u"});if(!$user$$.validPassword($error$jscomp$15_passwords$$.oldPassword))return $res$$.status(400).send({error:"M\u1eadt kh\u1ea9u kh\u00f4ng ch\u00ednh x\u00e1c"})}if($error$jscomp$15_passwords$$.newPin){if($error$jscomp$15_passwords$$.reNewPin!==
37
+ $error$jscomp$15_passwords$$.newPin)return $res$$.status(400).send({error:"S\u1ed1 PIN x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c"});if(!User.teststrengthPin($error$jscomp$15_passwords$$.newPin))return $res$$.status(400).send({error:"S\u1ed1 Pin kh\u00f4ng h\u1ee3p l\u1ec7"})}else return $res$$.status(400).send({error:"B\u1ea1n ch\u01b0a nh\u1eadp s\u1ed1 PIN"});$user$$.local.pin=$user$$.generateHash($user$$.email+$error$jscomp$15_passwords$$.newPin);$user$$.save(function($error$$){if($error$$)return $res$$.status(400).send($error$$);
38
+ log.create({id_app:"CHANGEPIN",id_func:"CHANGEPIN",action:"CHANGEPIN"},$user$$.email,$req$$.header("user-agent"),$req$$);redisCache.set("user",$user$$.toObject(),function($e$$){$e$$?Logger.error($e$$):Logger.info("cache user infomation to redis")});$res$$.send({message:"\u0110\u00e3 c\u1eadp nh\u1eadt th\u00e0nh c\u00f4ng"})})}else return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y ng\u01b0\u1eddi d\u00f9ng n\u00e0y"})})});$router$$.route("/user/logout").get(function($req$$,$res$$){var $access_token$$=
39
+ $req$$.query.access_token;findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,function($error$$,$user$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$});Token.deleteMany({token:$access_token$$},async function($clientIO_error$$){if($clientIO_error$$)return $res$$.status(400).send($clientIO_error$$);if(global.socketContainer.socketIO){var $client_sockets$$=[...(await global.socketContainer.socketIO.in($user$$.email).allSockets())];
40
+ $clientIO_error$$=await global.socketContainer.loadConnectionId();for(var $ep_id_id$$ of $client_sockets$$)($client_sockets$$=$clientIO_error$$[$ep_id_id$$])&&$client_sockets$$.token==$access_token$$&&global.socketContainer.socketIO.in($ep_id_id$$).fetchSockets().then($sockets$$=>{for(const $socket$$ of $sockets$$)$socket$$.disconnect()});global.socketContainer.saveConnectionId($clientIO_error$$)}log.create({id_app:"LOGOUT",id_func:"LOGOUT",action:"LOGOUT"},$user$$.email,$req$$.header("user-agent"),
41
+ $req$$);$req$$.query.ep&&($ep_id_id$$=(new Buffer($req$$.query.ep)).toString("base64"),Endpoint.deleteMany({ep_id:$ep_id_id$$},function($e$$){$e$$&&Logger.info("error when log out endpoint",$e$$)}));$res$$.send({message:$user$$.email+" logged out"})})})});$router$$.route("/notifies").get(function($req$$,$res$$){getNotifies($req$$.user.email,function($error$$,$notifies$$){if($error$$)return $res$$.status(400).send({error:$error$$.message||$error$$.error||$error$$});$res$$.send($notifies$$)},$req$$.query.id_app)});
42
+ $router$$.route("/register-endpoint").get(function($req$$,$res$$){const $endpoint$$=$req$$.query.ep,$id_app$$=$req$$.query.id_app;if($endpoint$$){const $ep_id$$=(new Buffer($endpoint$$)).toString("base64");Endpoint.findOne({ep_id:$ep_id$$},function($e$$,$ep$$){if($e$$)return $res$$.status(400).send($e$$);$ep$$?($ep$$.user=$req$$.user.email,$ep$$.userAuth=$req$$.query.userAuth,$ep$$.userPublicKey=$req$$.query.userPublicKey,$ep$$.id_app=$id_app$$,$ep$$.app=$req$$.query.app):$ep$$=new Endpoint({ep_id:$ep_id$$,
43
+ user:$req$$.user.email,endpoint:$endpoint$$,id_app:$id_app$$,userAuth:$req$$.query.userAuth,userPublicKey:$req$$.query.userPublicKey,app:$req$$.query.app});$ep$$.save(function($e$$,$rs$$){if($e$$)return $res$$.status(400).send($e$$);Logger.info("register successful endpoint",$endpoint$$,$req$$.user.email);$res$$.send($rs$$)})})}else $res$$.status(400).send({error:"H\u00e0m register-endpoint y\u00eau c\u1ea7u tham s\u1ed1 'ep'"})});$router$$.route("/remove-endpoint").get(function($req$$,$res$$){Endpoint.deleteMany({endpoint:$req$$.query.ep},
44
+ $e$$=>{if($e$$)return Logger.error($e$$);$res$$.send("success!")})});let $wallet$$=global.getModel("wallet");$router$$.route("/sign").post(function($req$$,$res$$){let $access_token$$=$req$$.query.access_token,$dataToSign$$=$req$$.body,$id_app$$=$dataToSign$$.id_app;if(!$id_app$$)return $res$$.status(400).send("Data for sign miss id_app");findByToken($access_token$$,$req$$.ip||$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,async function($error$$,$user$$){if($error$$)return $res$$.status(400).send($error$$);
45
+ if($user$$)try{let $signature$$=await $wallet$$.sign($id_app$$,$user$$.email,$dataToSign$$);$res$$.send({signature:$signature$$})}catch($e$$){$res$$.status(400).send({error:$e$$.message||$e$$.error||$e$$})}else $res$$.status(400).send({error:"Not found user"})})})};
@@ -0,0 +1,10 @@
1
+ const model=global.getModel("user"),underscore=require("underscore"),{isSupperAdmin}=require("../../libs/utils"),controller=require("../../controllers/controller");
2
+ module.exports=function($contr_router$$){const $usersAdmin$$=[...configs.admins,...(configs.subAdmins||[])];$contr_router$$=new controller($contr_router$$,model,"users",{require_id_app:!1,sort:{email:1}});$contr_router$$.route();$contr_router$$.view=async function($user$$,$items$$,$fn$$){for(let $item$$ of $items$$)$item$$.status||$item$$.status===!1||($item$$.status=!0),$item$$.local&&($item$$.local.rePassword=$item$$.local.password,$item$$.address=$item$$.local.address,$item$$.phone=$item$$.local.phone,
3
+ $item$$.password=$item$$.local.password,delete $item$$.local.password,delete $item$$.local.rspassword,delete $item$$.local.pin,delete $item$$.local.rePassword),$item$$.local.name||($item$$.local.name=$item$$.name),$item$$.local.email||($item$$.local.email=$item$$.email),$item$$.google&&(delete $item$$.google.token,delete $item$$.google.refreshToken),$item$$.facebook&&(delete $item$$.facebook.token,delete $item$$.facebook.refreshToken),delete $item$$.tokens,delete $item$$.token,delete $item$$.password,
4
+ delete $item$$.pin,$item$$.admin=underscore.contains($usersAdmin$$,$item$$.email)||isSupperAdmin($item$$.email.toLowerCase()),$item$$.sl_db_da_tao=await global.getModel("app").countDocuments({user_created:$item$$.email});$fn$$(null,$items$$)};$contr_router$$.getting=function($user$$,$id$$,$next$$){return underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase())?$next$$():$next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp th\u00f4ng tin n\u00e0y")};$contr_router$$.finding=
5
+ function($user$$,$condition$$,$next$$){return underscore.contains($usersAdmin$$,$user$$.email)||isSupperAdmin($user$$.email.toLowerCase())?$next$$(null,$condition$$):$next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp th\u00f4ng tin n\u00e0y")};$contr_router$$.creating=async function($user$$,$obj$$,$next$$,$options$$){if(!underscore.contains($usersAdmin$$,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0y");
6
+ $obj$$.local=$obj$$.local||{};if($obj$$.local.phone&&await model.findOne({$or:[{"local.phone":$obj$$.local.phone},{email:$obj$$.local.phone}]}))return $next$$("S\u1ed1 \u0111i\u1ec7n tho\u1ea1i "+$obj$$.local.phone+" \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng");if($options$$.data.local){if($options$$.data.local.password!=$options$$.data.local.rePassword)return $next$$("M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");$obj$$.local.password=$obj$$.generateHash($obj$$.email+
7
+ $obj$$.local.password)}$obj$$.local.name=$obj$$.name;$obj$$.local.email=$obj$$.email;return $next$$(null,$obj$$)};$contr_router$$.updating=async function($user$$,$data$$,$obj$$,$next$$){$data$$.local||($data$$.local=$obj$$.local||{email:$data$$.email});if($data$$.phone||$data$$.address){if($data$$.phone){$data$$.local.phone=$data$$.phone;let $u$$=await model.findOne({$or:[{"local.phone":$data$$.phone},{email:$data$$.phone}]});if($u$$&&$u$$.email!==$obj$$.email)return $next$$("S\u1ed1 \u0111i\u1ec7n tho\u1ea1i "+
8
+ $data$$.phone+" \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng")}$data$$.address&&($data$$.local.address=$data$$.address);$data$$.name&&($data$$.local.name=$data$$.name)}if(!underscore.contains($usersAdmin$$,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase())&&$user$$.email!=$obj$$.email)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n c\u1eadp nh\u1eadt ng\u01b0\u1eddi s\u1eed d\u1ee5ng n\u00e0y");if($obj$$.email!=$data$$.email)return $next$$("Kh\u00f4ng th\u1ec3 \u0111\u1ed5i t\u00e0i kho\u1ea3n \u0111\u0103ng nh\u1eadp");
9
+ if($data$$.local&&$data$$.local?.password!=$obj$$.local?.password){if($data$$.local.password!=$data$$.local.rePassword)return $next$$("M\u1eadt kh\u1ea9u x\u00e1c nh\u1eadn kh\u00f4ng ch\u00ednh x\u00e1c");$obj$$.local&&$data$$.local.password!=$obj$$.local.password&&$data$$.local.password&&($data$$.local.password=$obj$$.generateHash($obj$$.email+$data$$.local.password))}$data$$.local.name=$data$$.name;$data$$.local.email=$data$$.email;return $next$$(null,$data$$,$obj$$)};$contr_router$$.deleting=
10
+ function($user$$,$obj$$,$next$$){if(underscore.contains($usersAdmin$$,$obj$$.email)||isSupperAdmin($obj$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng th\u1ec3 x\u00f3a ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb");if(!underscore.contains($usersAdmin$$,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n x\u00f3a ng\u01b0\u1eddi s\u1eed d\u1ee5ng n\u00e0y");$next$$(null,$obj$$)}};
@@ -0,0 +1 @@
1
+ const model=global.getModel("versioninfo"),controller=require("../../controllers/controller");module.exports=function($router$$){(new controller($router$$,model,"versioninfo",{require_id_app:!1,unique:["os","app"],sort:{date_created:-1}})).route()};
@@ -0,0 +1 @@
1
+ const model=global.getModel("vietqrbanks"),controller=require("../../controllers/controller");module.exports=function($router$$){(new controller($router$$,model,"vietqrbanks",{require_id_app:!1,unique:["ma_ngan_hang"]})).route()};
@@ -0,0 +1 @@
1
+ const model=global.getModel("xaphuong"),controller=require("../../controllers/controller");module.exports=function($router$$){(new controller($router$$,model,"xaphuong",{require_id_app:!1,unique:["ten_tinh_thanh","ten_quan_huyen","ten_xa_phuong"],sort:{stt:1}})).route()};
@@ -0,0 +1,8 @@
1
+ const PostBook=require("../../libs/post-book"),dmgiaban=global.getModel("dmgiaban"),dmvt=global.getModel("dmvt"),dmkho=global.getModel("dmkho"),model=global.getModel("banggiaban"),controller=require("../../controllers/controller"),trangthai=global.getModel("trangthai"),async=require("async"),ma_ct="BGB";
2
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,sort:{ngay_ct:-1,so_ct:-1},unique:["so_ct"]});$contr_router$$.route();$contr_router$$.post=function($obj$$,$fn$$){$fn$$||=function(){};async.series({post_dmgiaban:function($callback$$){(new PostBook($obj$$,[...$obj$$.details],dmgiaban,async function($_detail$$,$callback$$){$callback$$({...$_detail$$})})).run(function($e$$,$rs$$){$callback$$($e$$,$rs$$)})}},function($e$$,
3
+ $rs$$){$fn$$($e$$,$rs$$)})};$contr_router$$.creating=function($user$$,$obj$$,$next$$){$obj$$.details||($obj$$.details=[]);$next$$(null,$obj$$)};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){$next$$(null,$data$$,$obj$$)};$contr_router$$.view=function($user$$,$items$$,$fn$$){let $id_app$$=$user$$.current_id_app;async.parallel({kho:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kho).joinModel2($id_app$$,dmkho,[{where:"ma_kho",fields:["ten_kho"]}],function(){$callback$$()})},
4
+ customer:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kh).joinModel2($id_app$$,"customer",[{where:"ma_kh",fields:["ten_kh"]}],function(){$callback$$()})},trangthai:function($callback$$){$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai","color"]}],function(){$callback$$()})},details_vt:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||[]).joinModel2($id_app$$,
5
+ dmvt,[{where:"ma_vt",fields:[{name:"ten_vt",value:"ten_vt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_nhkh:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||[]).filter($d$$=>$d$$.nh_kh).joinModel2($id_app$$,"group",[{where:{nh_kh:"_id"},fields:[{ten_nh_kh:"group_name"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_nhkh2:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||
6
+ []).filter($d$$=>$d$$.nh_kh2).joinModel2($id_app$$,"group",[{where:{nh_kh2:"_id"},fields:[{ten_nh_kh2:"group_name"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_nhkh3:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||[]).filter($d$$=>$d$$.nh_kh3).joinModel2($id_app$$,"group",[{where:{nh_kh3:"_id"},fields:[{ten_nh_kh3:"group_name"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_nh_vt:function($callback$$){async.mapLimit($items$$,
7
+ 20,function($r$$,$callback1$$){($r$$.details||[]).filter($d$$=>$d$$.ma_nvt).joinModel2($id_app$$,"dmnvt",[{where:{ma_nvt:"_id"},fields:[{name:"ten_nvt",value:"ten_nvt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_nh_vt2:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||[]).filter($d$$=>$d$$.ma_nvt2).joinModel2($id_app$$,"dmnvt",[{where:{ma_nvt2:"_id"},fields:[{name:"ten_nvt2",value:"ten_nvt"}]}],function(){$callback1$$()})},function(){$callback$$()})},
8
+ details_nh_vt3:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||[]).filter($d$$=>$d$$.ma_nvt3).joinModel2($id_app$$,"dmnvt",[{where:{ma_nvt3:"_id"},fields:[{name:"ten_nvt3",value:"ten_nvt"}]}],function(){$callback1$$()})},function(){$callback$$()})}},function(){$fn$$(null,$items$$)})}};
@@ -0,0 +1,34 @@
1
+ const PostBook=require("../../libs/post-book"),PostSocai=require("../../libs/post-socai"),Tdttno_tt=global.getModel("tdttno_tt"),Tdttno=global.getModel("tdttno"),dvcs=global.getModel("dvcs"),account=global.getModel("account"),dmphi=global.getModel("dmphi"),customer=global.getModel("customer"),dmnv=global.getModel("dmnv"),dmdt=global.getModel("dmdt"),App=global.getModel("app"),assinvestment=global.getModel("assinvestment"),so5=global.getModel("so5"),contract=global.getModel("contract"),model=global.getModel("pt1"),
2
+ pn6=global.getModel("pn6"),controller=require("../../controllers/controller"),trangthai=global.getModel("trangthai"),async=require("async"),ma_ct="BC1",{round}=require("../../libs/utils"),blockchainconnect=require("../../libs/blockchainconnect"),tien_cl_can_xu_ly=5E3,valid_detail=function($i_i$$,$obj$$,$fn$$){for($i_i$$=0;$i_i$$<$obj$$.details.length;$i_i$$++){var $detail_tdttno$$=$obj$$.details[$i_i$$];$detail_tdttno$$.line=$i_i$$;$obj$$.ma_nt=="VND"&&($detail_tdttno$$.tien=Math.roundBy($detail_tdttno$$.tien_nt,
3
+ 0))}if($obj$$.tdttnos)for($i_i$$=0;$i_i$$<$obj$$.tdttnos.length;$i_i$$++)$detail_tdttno$$=$obj$$.tdttnos[$i_i$$],$detail_tdttno$$.line=$i_i$$,$obj$$.ma_nt==="VND"&&($detail_tdttno$$.tien=$detail_tdttno$$.tien_nt),$detail_tdttno$$.thanh_toan_qd=$detail_tdttno$$.ma_nt_hd==$obj$$.ma_nt?$detail_tdttno$$.tien_nt:round($detail_tdttno$$.tien/$detail_tdttno$$.ty_gia_hd,2);$fn$$(null,$obj$$)};
4
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,sort:{ngay_ct:-1,so_ct:-1},keyValues:{ma_ct},onExport:function($user$$,$obj$$,$next$$){$obj$$.tdttnos&&$obj$$.tdttnos.length>0&&($obj$$.details=$obj$$.tdttnos);$next$$()}});$contr_router$$.route();$contr_router$$.post=async function($obj$$,$fn$$,$options$$={}){$fn$$||=function(){};$obj$$.tdttnos=$obj$$.tdttnos||[];const $appInfo$$=await global.getModel("app").findOne({_id:$obj$$.id_app}).lean();
5
+ async.series({post_tdttno:function($callback$$){(new PostBook($obj$$,$obj$$.tdttnos,Tdttno_tt,function($tdttno$$,$callback$$){$tdttno$$.tk_no=$obj$$.tk_no;$callback$$($tdttno$$)})).run(function($e$$,$details$$){if($e$$)return $callback$$($e$$);$callback$$(null,$details$$)})},post_socai:function($callback$$){setImmediate(async()=>{const $details_sc$$=[];$obj$$.details.forEach(function($d_detail$$){$d_detail$$={...$d_detail$$};$d_detail$$.tk_no=$obj$$.tk_no;$d_detail$$.ma_kh_no=$obj$$.ma_kh_no||$obj$$.ma_kh;
6
+ $d_detail$$.ma_kh||($d_detail$$.ma_kh=$obj$$.ma_kh);$details_sc$$.push($d_detail$$)});$obj$$.tdttnos.forEach($t_tdttno$$=>{$t_tdttno$$={...$t_tdttno$$};$t_tdttno$$.tk_no=$obj$$.tk_no;$t_tdttno$$.ma_kh||($t_tdttno$$.ma_kh=$obj$$.ma_kh);$details_sc$$.push($t_tdttno$$)});await $obj$$.tdttnos.filter($t$$=>$t$$.ty_gia_hd!=$obj$$.ty_gia&&$t$$.ma_nt_hd==$obj$$.ma_nt).asyncJoinModel2($obj$$.id_app,"currency",{where:{ma_nt_hd:"ma_nt"},fields:["tk_cl_no","tk_cl_co"]});for(let $t$$ of $obj$$.tdttnos){var $con_lai_nt_ht_so_du_hd$$=
7
+ await Tdttno.getBalance({id_app:$obj$$.id_app,id_ct:$obj$$._id.toString(),_id:$t$$.id_tdtt});if($con_lai_nt_ht_so_du_hd$$.length==1){let $con_lai$$=$con_lai_nt_ht_so_du_hd$$[0].con_lai-$t$$.tien;$con_lai_nt_ht_so_du_hd$$=$con_lai_nt_ht_so_du_hd$$[0].con_lai_nt-$t$$.thanh_toan_qd;if(Math.abs($con_lai$$)<=tien_cl_can_xu_ly||$con_lai_nt_ht_so_du_hd$$<=0)$con_lai$$&&($con_lai_nt_ht_so_du_hd$$={...$t$$,ma_nt:"VND",ty_gia:1},$con_lai_nt_ht_so_du_hd$$.tien_nt=$con_lai_nt_ht_so_du_hd$$.tien=Math.abs($con_lai$$),
8
+ $con_lai_nt_ht_so_du_hd$$.ma_kh||($con_lai_nt_ht_so_du_hd$$.ma_kh=$obj$$.ma_kh),$t$$.ty_gia_hd!=$obj$$.ty_gia&&$t$$.ma_nt_hd==$obj$$.ma_nt?($t$$.chenh_lech_ty_gia=$con_lai$$,$con_lai$$<0?($con_lai_nt_ht_so_du_hd$$.tk_no=$t$$.tk_co,$con_lai_nt_ht_so_du_hd$$.tk_co=$t$$.tk_cl_co):($con_lai_nt_ht_so_du_hd$$.tk_no=$t$$.tk_cl_no,$con_lai_nt_ht_so_du_hd$$.tk_co=$t$$.tk_co),$details_sc$$.push($con_lai_nt_ht_so_du_hd$$)):$appInfo$$?.options.tk_tn_khac&&$appInfo$$?.options.tk_cp_khac&&($con_lai$$<0?($con_lai_nt_ht_so_du_hd$$.tk_no=
9
+ $t$$.tk_co,$con_lai_nt_ht_so_du_hd$$.tk_co=$appInfo$$?.options.tk_tn_khac):($con_lai_nt_ht_so_du_hd$$.tk_no=$appInfo$$?.options.tk_cp_khac,$con_lai_nt_ht_so_du_hd$$.tk_co=$t$$.tk_co),$details_sc$$.push($con_lai_nt_ht_so_du_hd$$))),await Tdttno.updateOne({_id:$t$$.id_tdtt.toString()},{tat_toan:!0}).catch(Logger.error)}}(new PostSocai($obj$$,$details_sc$$)).run(($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})},nap_tien_vao_vi:$callback$$=>{(async()=>{if(!$obj$$.id_so5)return $callback$$();try{let $inv$$=
10
+ await so5.findOne({id_app:$obj$$.id_app,_id:$obj$$.id_so5});if(!$inv$$)return $callback$$("Phi\u1ebfu n\u1ea1p ti\u1ec1n kh\u00f4ng t\u1ed3n t\u1ea1i");if($inv$$.trang_thai=="5")return $callback$$();if($inv$$.trang_thai=="9")return $callback$$("Phi\u1ebfu n\u1ea1p ti\u1ec1n n\u00e0y \u0111\u00e3 b\u1ecb hu\u1ef7");if($inv$$.trang_thai=="0"||$inv$$.trang_thai=="2"){let $tg_hien_tai$$=(new Date).getTime(),$tg_tao$$=(new Date($inv$$.date_created)).getTime();if(($tg_hien_tai$$-$tg_tao$$)/864E5>1)return $inv$$.trang_thai=
11
+ "9",await $inv$$.save(),$callback$$("Phi\u1ebfu n\u1ea1p ti\u1ec1n n\u00e0y \u0111\u00e3 h\u1ebft h\u1ea1n thanh to\u00e1n")}if($obj$$.da_chuyen_token)Logger.info("da chuyen token");else{let $app$$=await App.findById($obj$$.id_app);if(!($app$$.wallet_address&&$app$$.wallet_token&&$obj$$.details))return $callback$$("Kh\u00f4ng th\u1ec3 th\u1ef1c hi\u1ec7n l\u00fac n\u00e0y. Hay th\u1eed l\u1ea1i sau");let $details$$=$inv$$.details.filter($d$$=>$d$$.is_coin&&!$d$$.transferred&&$d$$.wallet_receiver&&
12
+ $d$$.sl_xuat);await Promise.all($details$$.map($detail$$=>(async()=>{var $denom_rs$$=$detail$$.ma_vt.toLowerCase();$denom_rs$$=await blockchainconnect.spend($obj$$.id_app,$app$$.wallet_token,$app$$.wallet_address,$detail$$.wallet_receiver,{amount:$detail$$.sl_xuat,denom:$denom_rs$$,memo:"N\u1ea1p ti\u1ec1n v\u00e0o v\u00ed"});if($denom_rs$$.code){if($denom_rs$$.code===5)throw"V\u00ed h\u1ec7 th\u1ed1ng kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y";throw $denom_rs$$.rawLog;
13
+ }$detail$$.transferred=!0})()));await model.findOneAndUpdate({_id:$obj$$._id},{da_chuyen_token:!0})}let $ctrlinvest$$=global.controllers.SO5;$inv$$.trang_thai="5";$inv$$.save($e$$=>{if($e$$)return $callback$$($e$$.message);controller.postData($inv$$,$ctrlinvest$$,async $e$$=>{if($e$$)return $callback$$($e$$);$obj$$.da_chuyen_token||($e$$=await $ctrlinvest$$.asyncView($options$$.req.user,[$inv$$.toObject()],$options$$),controller.pushNotification($ctrlinvest$$,$e$$[0]));$callback$$()})})}catch($e$$){$callback$$($e$$.message||
14
+ $e$$.error||$e$$)}})()},thanh_toan_dau_tu:$callback$$=>{(async()=>{if(!$obj$$.id_assinvestment)return $callback$$();try{let $inv$$=await assinvestment.findOne({id_app:$obj$$.id_app,_id:$obj$$.id_assinvestment});if(!$inv$$)return $callback$$("H\u1ee3p \u0111\u1ed3ng \u0111\u1ea7u t\u01b0 kh\u00f4ng t\u1ed3n t\u1ea1i");if($inv$$.trang_thai==="1"||$inv$$.trang_thai!=="2"&&$inv$$.trang_thai!=="0")return $callback$$();let $period$$=await global.getModel("assperiod").findOne({id_app:$obj$$.id_app,id:$inv$$.id_period}).lean();
15
+ if($inv$$.trang_thai=="0"||$inv$$.trang_thai=="2"){if(!$period$$.hoat_dong)return $callback$$("G\u00f3i \u0111\u1ea7u t\u01b0 n\u00e0y \u0111\u00e3 h\u1ebft hi\u1ec7u l\u1ef1c");let $tg_hien_tai$$=(new Date).getTime(),$tg_tao$$=(new Date($inv$$.date_created)).getTime();if(($tg_hien_tai$$-$tg_tao$$)/864E5>($period$$.han_tt||1))return $inv$$.trang_thai="7",await $inv$$.save(),$callback$$("G\u00f3i \u0111\u1ea7u t\u01b0 n\u00e0y \u0111\u00e3 h\u1ebft h\u1ea1n thanh to\u00e1n")}if(!$obj$$.da_chuyen_token){let $amount$$=
16
+ $inv$$.gia*$inv$$.so_luong,$denom$$=$inv$$.denom,$app$$=await App.findOne({_id:$obj$$.id_app});if($app$$.wallet_address&&$app$$.wallet_token&&$obj$$.details)try{Logger.info("Chuy\u1ec3n token t\u1eeb v\u00ed c\u00f4ng ty sang v\u00ed nh\u00e0 \u0111\u1ea7u t\u01b0 \u0111\u1ec3 thanh to\u00e1n cho c\u00e1c khaonr \u0111\u1ea7u t\u01b0",$amount$$,$denom$$,$inv$$.gia,$inv$$.so_luong);let $rs$$=await blockchainconnect.spend($obj$$.id_app,$app$$.wallet_token,$app$$.wallet_address,$inv$$.creator,{amount:$amount$$,
17
+ denom:$denom$$,memo:"N\u1ea1p ti\u1ec1n v\u00e0o v\u00ed \u0111\u1ec3 thanh to\u00e1n \u0111\u1ea7u t\u01b0"});if($rs$$.code)return $callback$$($rs$$.message||$rs$$.error||"V\u00ed c\u00f4ng ty kh\u00f4ng \u0111\u1ee7 s\u1ed1 d\u01b0");await model.updateOne({_id:$obj$$._id},{da_chuyen_token:!0})}catch($e$$){return $callback$$($e$$.message||$e$$.error||$e$$)}else return $callback$$("Kh\u00f4ng th\u1ec3 th\u1ef1c hi\u1ec7n l\u00fac n\u00e0y. Hay th\u1eed l\u1ea1i sau")}Logger.info("C\u1eadp nh\u1eadt tr\u1ea1ng th\u00e1i kho\u1ea3n \u0111\u1ea7u t\u01b0 \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n");
18
+ let $ctrlinvest$$=global.controllers.ASSINVESTMENT;$ctrlinvest$$.updating({email:$inv$$.user_created,current_id_app:$obj$$.id_app},{trang_thai:"1"},$inv$$,($e$$,$data$$)=>{if($e$$)return $callback$$($e$$);for(let $key$$ in $data$$)$inv$$[$key$$]=$data$$[$key$$];$inv$$.trang_thai="1";$inv$$.save(async $e$jscomp$7_view_objs$$=>{if($e$jscomp$7_view_objs$$)return $callback$$($e$jscomp$7_view_objs$$.message||$e$jscomp$7_view_objs$$.error||$e$jscomp$7_view_objs$$);$e$jscomp$7_view_objs$$=await $ctrlinvest$$.asyncView($options$$.req.user,
19
+ [$inv$$.toObject()],$options$$);controller.pushNotification($ctrlinvest$$,$e$jscomp$7_view_objs$$[0]);$callback$$()})})}catch($e$$){$callback$$($e$$.message)}})()}},($e$$,$rs$$)=>{$fn$$($e$$,$rs$$)})};$contr_router$$.creating=async function($user$$,$obj$$,$next$$){$obj$$.details||($obj$$.details=[]);$obj$$.da_chuyen_token=!1;if($obj$$.tdttnos&&$obj$$.tdttnos.length>0&&(await $obj$$.tdttnos.asyncJoinModel2($user$$.current_id_app,Tdttno,{where:{id_tdtt:"_id"},fields:["tat_toan",{tien_hd_nt:"tien_nt"}]}),
20
+ (await Promise.all($obj$$.tdttnos.map($hd$$=>(async()=>{if(!global.mongoose.Types.ObjectId.isValid($hd$$.id_tdtt))return{error:"Ho\u00e1 \u0111\u01a1n kh\u00f4ng h\u1ee3p l\u1ec7",invoice:$hd$$};let $ds_da_thanh_toan$$=await Tdttno_tt.find({id_app:$obj$$.id_app,id_tdtt:$hd$$.id_tdtt}).lean(),$da_thanh_toan$$=$ds_da_thanh_toan$$.map($t$$=>$t$$.thanh_toan_qd||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$con_lai$$=$hd$$.tien_hd_nt-$da_thanh_toan$$;return $con_lai$$<=0?{error:"Ho\u00e1 \u0111\u01a1n \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n",
21
+ invoice:$hd$$,da_thanh_toan:$da_thanh_toan$$,con_lai:$con_lai$$,ds_da_thanh_toan:$ds_da_thanh_toan$$}:{invoice:$hd$$,da_thanh_toan:$da_thanh_toan$$,con_lai:$con_lai$$,ds_da_thanh_toan:$ds_da_thanh_toan$$}})()))).filter($hd$$=>$hd$$.error).length>0))return $next$$("Ho\u00e1 \u0111\u01a1n \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n");valid_detail($user$$,$obj$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$obj$$)})};$contr_router$$.updating=async function($user$$,$data$$,
22
+ $obj$$,$next$$){if($obj$$.id_so5){let $inv$$=await so5.findOne({id_app:$obj$$.id_app,_id:$obj$$.id_so5});if(!$inv$$)return $next$$("Phi\u1ebfu n\u1ea1p ti\u1ec1n kh\u00f4ng t\u1ed3n t\u1ea1i");if($inv$$.trang_thai=="5")return $next$$("Phi\u1ebfu n\u1ea1p ti\u1ec1n n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n")}$data$$.da_chuyen_token=void 0;valid_detail($user$$,$data$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$data$$,$obj$$)})};$contr_router$$.deleting=
23
+ async function($inv$jscomp$3_user$$,$obj$$,$next$$){if($obj$$.id_so5&&($inv$jscomp$3_user$$=await so5.findOne({id_app:$obj$$.id_app,_id:$obj$$.id_so5}))&&$inv$jscomp$3_user$$.trang_thai=="5")return $next$$("Kh\u00f4ng th\u1ec3 xo\u00e1 phi\u1ebfu n\u00e0y do phi\u1ebfu n\u1ea1p ti\u1ec1n n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n");$next$$(null,$obj$$)};$contr_router$$.deleted=($details$jscomp$2_user$$,$obj$$,$next$$)=>{$details$jscomp$2_user$$=($obj$$.details||[]).filter($d$$=>
24
+ $d$$.id_tdtt);async.mapSeries($details$jscomp$2_user$$,($detail$$,$callback$$)=>{setImmediate(()=>{Tdttno.findOneAndUpdate({_id:$detail$$.id_tdtt.toString(),id_app:$obj$$.id_app},{$set:{tat_toan:!1}},($error$$,$result$$)=>{$callback$$($error$$,$result$$)})})},$e$$=>{$next$$($e$$,$obj$$)})};$contr_router$$.on("saved",function($obj$$){$obj$$.id_pn6&&pn6.updateMany({_id:$obj$$.id_pn6,id_app:$obj$$.id_app},{id_pt1:$obj$$._id.toString(),trang_thai:"7"},($e$$,$rs$$)=>{Logger.info("update pn6",$obj$$.id_pn6,
25
+ $rs$$);pn6.findOne({_id:$obj$$.id_pn6,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.PN6,$e$$=>{$e$$&&Logger.error($e$$)})})})});$contr_router$$.on("deleted",function($obj$$){$obj$$.id_pn6&&pn6.updateMany({_id:$obj$$.id_pn6,id_app:$obj$$.id_app},{id_pt1:""},()=>{pn6.updateMany({_id:$obj$$.id_pn6,id_app:$obj$$.id_app,trang_thai:"7"},{trang_thai:"5"},($e$$,$rs$$)=>{Logger.info("update pn6",$obj$$.id_pn6,$rs$$);pn6.findOne({_id:$obj$$.id_pn6,id_app:$obj$$.id_app},
26
+ ($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.PN6,$e$$=>{$e$$&&Logger.error($e$$)})})})})});$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.series({kh:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.ma_kh).joinModel2($id_app$$,customer,[{where:"ma_kh",fields:["ten_kh"]}],function(){$callback$$()})})},nv:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.ma_nv).joinModel2($id_app$$,
27
+ dmnv,[{where:"ma_nv",fields:["ten_nv"]}],function(){$callback$$()})})},tk:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.tk_no).joinModel2($id_app$$,account,[{where:$item$$=>({tk:$item$$.tk_no}),fields:{ten_tk_co:"ten_tk"}}],function(){$callback$$()})})},dv:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.ma_dvcs).joinModel2($id_app$$,dvcs,[{where:$item$$=>({_id:$item$$.ma_dvcs}),fields:["ten_dvcs"]}],function(){$callback$$()})})},trangthai:function($callback$$){setImmediate(()=>
28
+ {$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:$item$$=>({ma_trang_thai:$item$$.trang_thai,ma_ct:$item$$.ma_ct}),fields:["ten_trang_thai","color"]}],function(){$callback$$()})})},t_tien:function($callback$$){setImmediate(()=>{$items$$.forEach(function($r$$){let $f_tien_nt$$=$r$$.ma_nt=="VND"?0:3;$r$$.t_tien=0;$r$$.t_tien_nt=0;$r$$.details&&($r$$.t_tien=$r$$.details.csum("tien"),$r$$.t_tien_nt=Math.roundBy($r$$.details.csum("tien_nt"),$f_tien_nt$$));$r$$.tdttnos&&($r$$.t_tien+=
29
+ $r$$.tdttnos.csum("tien"),$r$$.t_tien_nt=Math.roundBy($r$$.t_tien_nt+$r$$.tdttnos.csum("tien_nt"),$f_tien_nt$$));$r$$.t_tt=$r$$.t_tien;$r$$.t_tt_nt=$r$$.t_tien_nt});$callback$$()})},details_tk:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.details||[]).filter($item$$=>$item$$.tk_co).joinModel2($id_app$$,account,[{where:$item$$=>({tk:$item$$.tk_co}),fields:[{ten_tk_co:"ten_tk"}]}],function(){$callback1$$()})})},function(){$callback$$()})},details_tk_tdttno:function($callback$$){async.mapSeries($items$$,
30
+ function($r$$,$callback1$$){setImmediate(()=>{($r$$.tdttnos||[]).filter($item$$=>$item$$.tk_co).joinModel2($id_app$$,account,[{where:$item$$=>({tk:$item$$.tk_co}),fields:[{ten_tk_co:"ten_tk"}]}],function(){$callback1$$()})})},function(){$callback$$()})},details_contract_tdttno:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.tdttnos||[]).filter($item$$=>$item$$.ma_hd).joinModel2($id_app$$,contract,[{where:$item$$=>({so_hd:$item$$.ma_hd}),fields:["ten_hd"]}],
31
+ function(){$callback1$$()})})},function(){$callback$$()})},details_dt_tdttno:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.tdttnos||[]).filter($item$$=>$item$$.ma_dt).joinModel2($id_app$$,dmdt,[{where:$item$$=>({ma_dt:$item$$.ma_dt}),fields:["ten_dt"]}],function(){$callback1$$()})})},function(){$callback$$()})},details_customer:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.details||[]).filter($item$$=>
32
+ $item$$.ma_kh).joinModel2($id_app$$,customer,[{where:$item$$=>({ma_kh:$item$$.ma_kh}),fields:["ten_kh"]}],function(){$callback1$$()})})},function(){$callback$$()})},details_dt:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.details||[]).filter($item$$=>$item$$.ma_dt).joinModel2($id_app$$,dmdt,[{where:$item$$=>({ma_dt:$item$$.ma_dt}),fields:["ten_dt"]}],function(){$callback1$$()})})},function(){$callback$$()})},details_contract:function($callback$$){async.mapSeries($items$$,
33
+ function($r$$,$callback1$$){setImmediate(()=>{($r$$.details||[]).filter($item$$=>$item$$.ma_hd).joinModel2($id_app$$,contract,[{where:$item$$=>({so_hd:$item$$.ma_hd}),fields:["ten_hd"]}],function(){$callback1$$()})})},function(){$callback$$()})},details_phi:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.details||[]).filter($item$$=>$item$$.ma_phi).joinModel2($id_app$$,dmphi,[{where:$item$$=>({ma_phi:$item$$.ma_phi}),fields:["ten_phi"]}],function(){$callback1$$()})})},
34
+ function(){$callback$$()})}},function(){$fn$$(null,$items$$)})}};
@@ -0,0 +1,15 @@
1
+ const PostSocai=require("../../libs/post-socai"),User=global.getModel("user"),transaction=global.getModel("transaction"),dvcs=global.getModel("dvcs"),account=global.getModel("account"),dmphi=global.getModel("dmphi"),customer=global.getModel("customer"),dmnv=global.getModel("dmnv"),dmdt=global.getModel("dmdt"),contract=global.getModel("contract"),model=global.getModel("pt5"),currency=global.getModel("currency"),controller=require("../../controllers/controller"),trangthai=global.getModel("trangthai"),
2
+ async=require("async"),numeral=require("numeral"),ma_ct="BC5",valid_detail=function($i_user$$,$obj$$,$fn$$){if(!$obj$$.details)return $fn$$(null,$obj$$);for($i_user$$=0;$i_user$$<$obj$$.details.length;$i_user$$++){const $detail$$=$obj$$.details[$i_user$$];$detail$$.line=$i_user$$;$obj$$.ma_nt=="VND"&&($detail$$.tien=Math.roundBy($detail$$.tien_nt,0))}$fn$$(null,$obj$$)},createTransaction=async function($obj$$){if($obj$$.trang_thai!="5")return await transaction.deleteTrans({id_ct:$obj$$._id.toString()},
3
+ "Tr\u1ea3 l\u1ea1i \u0111i\u1ec3m \u0111\u00e3 mua"),null;var $amount_ty_le_qd$$=await currency.getRate($obj$$.id_app,$obj$$.ma_nt);let $t_tien$$=$obj$$.details.map($d$$=>$d$$.tien).reduce(($a$$,$b$$)=>$a$$+$b$$,0);var $diem_khuyen_mai_old_trans$$=$obj$$.details.map($d$$=>$d$$.diem_khuyen_mai||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0);if(!$amount_ty_le_qd$$)return null;$amount_ty_le_qd$$=$t_tien$$/$amount_ty_le_qd$$+$diem_khuyen_mai_old_trans$$;if(($diem_khuyen_mai_old_trans$$=await transaction.findOne({id_ct:$obj$$._id.toString()}))&&
4
+ $diem_khuyen_mai_old_trans$$.amount===$amount_ty_le_qd$$&&$diem_khuyen_mai_old_trans$$.receiver&&$obj$$.email===$diem_khuyen_mai_old_trans$$.receiver.email)return null;await transaction.deleteTrans({id_ct:$obj$$._id.toString()},"Tr\u1ea3 l\u1ea1i \u0111i\u1ec3m \u0111\u00e3 mua");return await transaction.createTrans({id_app:$obj$$.id_app,sender_email:$obj$$.id_app,receiver_email:$obj$$.email,amount:$amount_ty_le_qd$$,description:$obj$$.dien_giai||`N\u1ed9p ${numeral($t_tien$$).format()} ${$obj$$.ma_nt} qua ng\u00e2n h\u00e0ng v\u00e0o v\u00ed`,
5
+ otherData:{ma_ct:$obj$$.ma_ct,so_ct:$obj$$.so_ct,ngay_ct:$obj$$.ngay_ct,id_ct:$obj$$._id.toString()}})};
6
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,requireRecaptchaToken:!1,sort:{ngay_ct:-1,so_ct:-1},keyValues:{ma_ct},onCreating:($user$$,$obj$$,$next$$)=>{$obj$$.details||($obj$$.details=[]);valid_detail($user$$,$obj$$,async $error$$=>{if($error$$)return $next$$($error$$);try{if($obj$$.ma_kh){let $_customer$$=await customer.getInfo($user$$.current_id_app,{ma_kh:$obj$$.ma_kh});if($_customer$$.of_user)$obj$$.email=$_customer$$.of_user;
7
+ else return $next$$("Kh\u00e1ch h\u00e0ng n\u00e0y kh\u00f4ng c\u00f3 t\u00e0i kho\u1ea3n truy c\u1eadp h\u1ec7 th\u1ed1ng")}$next$$(null,$obj$$)}catch($e$$){$next$$(`${$e$$.message}, user: ${$obj$$.email}`)}})},onCreated:async($user$$,$obj$$,$next$$)=>{try{await createTransaction($obj$$),$next$$(null,$obj$$)}catch($e$$){$next$$($e$$.message)}},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{valid_detail($user$$,$data$$,async $error$$=>{if($error$$)return $next$$($error$$);if(!$data$$.email&&!$data$$.ma_kh)return $next$$(null,
8
+ $data$$,$obj$$);if(!$data$$.email&&$data$$.ma_kh)return $next$$("Can't update customer code for this voucher");try{let $_customer$$=await customer.getInfo($user$$.current_id_app,{of_user:$data$$.email});$data$$.ma_kh=$_customer$$.ma_kh;$next$$(null,$data$$,$obj$$)}catch($e$$){$next$$($e$$.message)}})},onUpdated:async($user$$,$obj$$,$next$$)=>{try{await createTransaction($obj$$),$next$$(null,$obj$$)}catch($e$$){$next$$($e$$.message)}},onDeleted:async($user$$,$obj$$,$next$$)=>{if($obj$$.id_trans)try{await transaction.deleteTrans({id_ct:$obj$$._id.toString()},
9
+ "Tr\u1ea3 l\u1ea1i \u0111i\u1ec3m \u0111\u00e3 mua")}catch($e$$){return $next$$($e$$.message)}$next$$(null,$obj$$)}});$contr_router$$.route();$contr_router$$.post=async function($obj$$,$fn$$){$fn$$||=function(){};$obj$$=$obj$$.toObject?$obj$$.toObject():{...$obj$$};let $he_so_qd$$=await currency.getRate($obj$$.id_app,$obj$$.ma_nt)||1;async.series({post_socai:$callback$$=>{const $details_sc$$=[];$obj$$.details.forEach($d$$=>{var $detail$$={...$d$$};$detail$$.tk_no=$obj$$.tk_no;$detail$$.ma_kh||($detail$$.ma_kh=
10
+ $obj$$.ma_kh);$details_sc$$.push($detail$$);$d$$.diem_khuyen_mai&&$d$$.tk_km_co&&$d$$.tk_km_no&&($detail$$={...$d$$},$detail$$.tk_no=$d$$.tk_km_no,$detail$$.tk_co=$d$$.tk_km_co,$detail$$.tien=$detail$$.tien_nt=$d$$.diem_khuyen_mai*$he_so_qd$$,$detail$$.ma_kh||($detail$$.ma_kh=$obj$$.ma_kh),$details_sc$$.push($detail$$))});(new PostSocai($obj$$,$details_sc$$)).run(($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})}},($e$$,$rs$$)=>{$fn$$($e$$,$rs$$)})};$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=
11
+ $user$$.current_id_app;async.series({e:function($callback$$){$items$$.filter($item$$=>$item$$.email).joinModel2(null,User,[{where:"email",fields:"name"}],function(){$callback$$()})},kh:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kh).joinModel2($id_app$$,customer,[{where:"ma_kh",fields:"ten_kh"}],function(){$callback$$()})},nv:function($callback$$){$items$$.filter($item$$=>$item$$.ma_nv).joinModel2($id_app$$,dmnv,[{where:"ma_nv",fields:"ten_nv"}],function(){$callback$$()})},tk:function($callback$$){$items$$.filter($item$$=>
12
+ $item$$.tk_no).joinModel2($id_app$$,account,[{where:{tk_no:"tk"},fields:{ten_tk_no:"ten_tk"}}],function(){$callback$$()})},dv:function($callback$$){$items$$.filter($item$$=>$item$$.ma_dvcs).joinModel2($id_app$$,dvcs,[{where:{ma_dvcs:"_id"},fields:"ten_dvcs"}],function(){$callback$$()})},trangthai:function($callback$$){$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai","color"]}],function(){$callback$$()})},
13
+ t_tien:function($callback$$){$items$$.forEach(function($r$$){$r$$.t_tien=0;$r$$.t_tien_nt=0;$r$$.details&&($r$$.t_tien=$r$$.details.csum("tien"),$r$$.t_tien_nt=$r$$.details.csum("tien_nt"));$r$$.t_tt=$r$$.t_tien;$r$$.t_tt_nt=$r$$.t_tien_nt});$callback$$()},details_tk:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).joinModel($id_app$$,account,[{akey:"tk_co",bkey:"tk",fields:[{name:"ten_tk_co",value:"ten_tk"}]}],function(){$callback1$$()})},function(){$callback$$()})},
14
+ details_dt:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_contract:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_hd).joinModel($id_app$$,contract,[{akey:"ma_hd",bkey:"so_hd",fields:[{name:"ten_hd",
15
+ value:"ten_hd"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_phi:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_phi).joinModel($id_app$$,dmphi,[{akey:"ma_phi",bkey:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})},function(){$callback$$()})}},function(){$fn$$(null,$items$$)})}};
@@ -0,0 +1,10 @@
1
+ const dvcs=global.getModel("dvcs"),dmvt=global.getModel("dmvt"),dmkho=global.getModel("dmkho"),customer=global.getModel("customer"),dmdt=global.getModel("dmdt"),dmphi=global.getModel("dmphi"),contract=global.getModel("contract"),trangthai=global.getModel("trangthai"),sale_contract=global.getModel("sale_contract"),model=global.getModel("bg1"),controller=require("../../controllers/controller"),async=require("async"),ma_ct="BG1";
2
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,check_stock:!1,sort:{trang_thai:1,ngay_ct:-1,so_ct:-1}});$contr_router$$.route();const $valid$$=function($user$$,$obj$$,$next$$){for(let $i$$=0;$i$$<$obj$$.details.length;$i$$++){const $detail$$=$obj$$.details[$i$$];$detail$$.line=$i$$;$obj$$.ma_nt=="VND"&&($detail$$.tien=$detail$$.tien_nt,$detail$$.tien_ck=$detail$$.tien_ck_nt,$detail$$.gia=$detail$$.gia_nt)}$obj$$.ma_dvcs?
3
+ $next$$(null,$obj$$):dvcs.findOne({id_app:$user$$.current_id_app},{_id:1},function($error$$,$dv$$){return $error$$?$next$$($error$$):$dv$$?($obj$$.ma_dvcs=$dv$$._id.toString(),$next$$(null,$obj$$)):$next$$("C\u00f4ng ty/c\u1eeda h\u00e0ng n\u00e0y ch\u01b0a c\u00f3 m\u1ed9t \u0111\u01a1n v\u1ecb c\u01a1 s\u1edf n\u00e0o")})};$contr_router$$.creating=function($user$$,$obj$$,$next$$){$obj$$.details||($obj$$.details=[]);$valid$$($user$$,$obj$$,function($error$$){if($error$$)return $next$$($error$$);
4
+ $next$$(null,$obj$$)})};$contr_router$$.created=function($user$$,$obj$$,$next$$){$next$$(null,$obj$$)};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){$valid$$($user$$,$data$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$data$$,$obj$$)})};$contr_router$$.updated=function($user$$,$obj$$,$next$$){$next$$(null,$obj$$)};$contr_router$$.deleting=function($user$$,$obj$$,$next$$){$next$$(null,$obj$$)};$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=
5
+ $user$$.current_id_app;async.parallel({kh:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kh).joinModel2($id_app$$,customer,[{where:"ma_kh",fields:["ten_kh"]}],function(){$callback$$()})},kho:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kho).joinModel($id_app$$,dmkho,[{akey:"ma_kho",bkey:"ma_kho",fields:[{name:"ten_kho",value:"ten_kho"}]}],function(){$callback$$()})},dt:function($callback$$){$items$$.filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",
6
+ fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback$$()})},contract:function($callback$$){$items$$.joinModel2($id_app$$,sale_contract,[{where:{_id:"id_bao_gia"},fields:[{name:"id_contract",value:"_id"}]}],function(){$callback$$()})},trangthai:function($callback$$){$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai","color"]}],function(){$callback$$()})},t_tien:function($callback$$){$items$$.forEach(function($r$$){$r$$.details?
7
+ ($r$$.t_sl=$r$$.details.csum("so_luong"),$r$$.t_tien=$r$$.details.csum("tien"),$r$$.t_tien_nt=$r$$.details.csum("tien_nt"),$r$$.t_ck=$r$$.details.csum("tien_ck")+($r$$.tien_ck_hd|0),$r$$.t_ck_nt=$r$$.details.csum("tien_ck_nt")+($r$$.tien_ck_hd|0),$r$$.t_tt=$r$$.t_tien-$r$$.t_ck+($r$$.t_thue|0),$r$$.t_tt_nt=$r$$.t_tien_nt-$r$$.t_ck_nt+($r$$.t_thue_nt|0)):($r$$.t_sl=0,$r$$.t_tien=0,$r$$.t_tien_nt=0,$r$$.t_ck=0,$r$$.t_ck_nt=0,$r$$.t_tt=0,$r$$.t_tt_nt=0)});$callback$$()},details_vt:function($callback$$){async.each($items$$,
8
+ function($r$$,$callback1$$){($r$$.details||[]).joinModel($id_app$$,dmvt,[{akey:"ma_vt",bkey:"ma_vt",fields:[{name:"ten_vt",value:"ten_vt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_dt:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_contract:function($callback$$){async.mapLimit($items$$,
9
+ 20,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_hd).joinModel($id_app$$,contract,[{akey:"ma_hd",bkey:"so_hd",fields:[{name:"ten_hd",value:"ten_hd"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_phi:function($callback$$){async.mapLimit($items$$,20,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_phi).joinModel($id_app$$,dmphi,[{akey:"ma_phi",bkey:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})},
10
+ function(){$callback$$()})}},function(){$fn$$(null,$items$$)})}};
@@ -0,0 +1,12 @@
1
+ const dmvt=global.getModel("dmvt"),customer=global.getModel("customer"),dmdt=global.getModel("dmdt"),dmphi=global.getModel("dmphi"),dmnv=global.getModel("dmnv"),dmbp=global.getModel("dmbp"),contract=global.getModel("contract"),po1=global.getModel("po1"),dnm=global.getModel("dnm"),model=global.getModel("bg2"),purchase_contract=global.getModel("purchase_contract"),controller=require("../../controllers/controller"),async=require("async"),ma_ct="BG2",trangthai=global.getModel("trangthai");
2
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,check_stock:!1,sort:{ngay_ct:-1,so_ct:-1}});$contr_router$$.route();const $valid$$=function($i_user$$,$obj$$,$next$$){for($i_user$$=0;$i_user$$<$obj$$.details.length;$i_user$$++){const $detail$$=$obj$$.details[$i_user$$];$detail$$.line=$i_user$$;$detail$$.tt_nt=$detail$$.tien_nt-$detail$$.tien_ck_nt;$detail$$.tt=$detail$$.tien-$detail$$.tien_ck;$obj$$.ma_nt=="VND"&&($detail$$.tien=
3
+ $detail$$.tien_nt,$detail$$.tien_ck=$detail$$.tien_ck_nt,$detail$$.tt=$detail$$.tt_nt)}$next$$(null,$obj$$)};$contr_router$$.creating=function($user$$,$obj$$,$next$$){$obj$$.details||($obj$$.details=[]);$obj$$.id_po1="";$valid$$($user$$,$obj$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$obj$$)})};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){$valid$$($user$$,$data$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$data$$,$obj$$)})};
4
+ $contr_router$$.deleting=function($user$$,$obj$$,$next$$){$next$$(null,$obj$$)};$contr_router$$.on("saved",function($obj$$){$obj$$.id_dnm&&$obj$$.trang_thai=="3"&&dnm.updateMany({_id:$obj$$.id_dnm,id_app:$obj$$.id_app,trang_thai:{$ne:"7"}},{id_bg2:$obj$$._id.toString(),trang_thai:"6"},()=>{dnm.findOne({_id:$obj$$.id_dnm,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.DNM,$e$$=>{$e$$&&Logger.error($e$$)})})})});$contr_router$$.on("deleted",function($obj$$){$obj$$.id_dnm&&
5
+ dnm.updateMany({_id:$obj$$.id_dnm,id_app:$obj$$.id_app,trang_thai:"6",id_bg2:$obj$$._id.toString()},{trang_thai:"3",id_bg2:""},($e$$,$rs$$)=>{Logger.info("update trang thai dnm",$rs$$);dnm.findOne({_id:$obj$$.id_dnm,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.DNM,$e$$=>{$e$$&&Logger.error($e$$)})})})});$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.parallel({kh:function($callback$$){$items$$.filter($item$$=>
6
+ $item$$.ma_kh).joinModel2($id_app$$,customer,[{where:"ma_kh",fields:["ten_kh"]}],function(){$callback$$()})},ma_bp:function($callback$$){$items$$.filter($item$$=>$item$$.ma_bp).joinModel($id_app$$,dmbp,[{akey:"ma_bp",bkey:"ma_bp",fields:[{name:"ten_bp",value:"ten_bp"}]}],function(){$callback$$()})},ma_nv:function($callback$$){$items$$.filter($item$$=>$item$$.ma_nv).joinModel($id_app$$,dmnv,[{akey:"ma_nv",bkey:"ma_nv",fields:[{name:"ten_nv",value:"ten_nv"}]}],function(){$callback$$()})},dt:function($callback$$){$items$$.filter($item$$=>
7
+ $item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback$$()})},contract:function($callback$$){$items$$.joinModel2($id_app$$,purchase_contract,[{where:{_id:"id_bao_gia"},fields:[{name:"id_contract",value:"_id"}]}],function(){$callback$$()})},po1:function($callback$$){$items$$.joinModel2($id_app$$,po1,[{where:{_id:"id_bao_gia"},fields:[{name:"id_po1",value:"_id"}]}],function(){$callback$$()})},trangthai:function($callback$$){$items$$.filter($item$$=>
8
+ $item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai","color"]}],function(){$callback$$()})},t_tien:function($callback$$){$items$$.forEach(function($r$$){$r$$.t_tt=0;$r$$.t_tt_nt=0;$r$$.details&&($r$$.t_sl=$r$$.details.csum("so_luong"),$r$$.t_tien=$r$$.details.csum("tien"),$r$$.t_tien_nt=$r$$.details.csum("tien_nt"),$r$$.t_ck=$r$$.details.csum("tien_ck"),$r$$.t_ck_nt=$r$$.details.csum("tien_ck_nt"),$r$$.t_thue_nk_nt=$r$$.details.csum("tien_thue_nk_nt"),
9
+ $r$$.t_thue_nk=$r$$.details.csum("tien_thue_nk"),$r$$.t_tt=$r$$.t_tien+($r$$.t_thue|0)-$r$$.t_ck+$r$$.t_thue_nk,$r$$.t_tt_nt=$r$$.t_tien_nt+($r$$.t_thue_nt|0)-$r$$.t_ck_nt+$r$$.t_thue_nk_nt)});$callback$$()},details_vt:function($callback$$){async.each($items$$,function($r$$,$callback1$$){($r$$.details||[]).joinModel($id_app$$,dmvt,[{akey:"ma_vt",bkey:"ma_vt",fields:[{name:"ten_vt",value:"ten_vt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_kh:function($callback$$){async.each($items$$,
10
+ function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_kh).joinModel2($id_app$$,customer,{where:"ma_kh",fields:"ten_kh"},function(){$callback1$$()})},function(){$callback$$()})},details_dt:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_contract:function($callback$$){async.mapSeries($items$$,
11
+ function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_kh).joinModel($id_app$$,contract,[{akey:"ma_hd",bkey:"so_hd",fields:[{name:"ten_hd",value:"ten_hd"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_phi:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_phi).joinModel($id_app$$,dmphi,[{akey:"ma_phi",bkey:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})},
12
+ function(){$callback$$()})}},function(){$fn$$(null,$items$$)})}};
@@ -0,0 +1,36 @@
1
+ const PostBook=require("../../libs/post-book"),PostSocai=require("../../libs/post-socai"),Vatvao=global.getModel("vatvao"),Tdttco_tt=global.getModel("tdttco_tt"),Tdttco=global.getModel("tdttco"),dvcs=global.getModel("dvcs"),account=global.getModel("account"),dmdt=global.getModel("dmdt"),customer=global.getModel("customer"),dmnv=global.getModel("dmnv"),contract=global.getModel("contract"),dmphi=global.getModel("dmphi"),model=global.getModel("pc1"),pc0=global.getModel("pc0"),pn6=global.getModel("pn6"),
2
+ App=global.getModel("app"),trangthai=global.getModel("trangthai"),controller=require("../../controllers/controller"),async=require("async"),ma_ct="BN1",{round}=require("../../libs/utils"),utils=require("../../libs/utils"),numeral=require("numeral"),tien_cl_can_xu_ly=5E3,valid_detail=function($user$$,$obj$$,$fn$$){setImmediate(()=>{for(var $i_i$jscomp$1_i$$=0;$i_i$jscomp$1_i$$<$obj$$.details.length;$i_i$jscomp$1_i$$++){var $detail_tdttco_vatvao$$=$obj$$.details[$i_i$jscomp$1_i$$];$detail_tdttco_vatvao$$.line=
3
+ $i_i$jscomp$1_i$$;$obj$$.ma_nt==="VND"&&($detail_tdttco_vatvao$$.tien=$detail_tdttco_vatvao$$.tien_nt)}if($obj$$.vatvaos)for($i_i$jscomp$1_i$$=0;$i_i$jscomp$1_i$$<$obj$$.vatvaos.length;$i_i$jscomp$1_i$$++)$detail_tdttco_vatvao$$=$obj$$.vatvaos[$i_i$jscomp$1_i$$],$detail_tdttco_vatvao$$.line=$i_i$jscomp$1_i$$,$obj$$.ma_nt==="VND"&&($detail_tdttco_vatvao$$.t_thue=$detail_tdttco_vatvao$$.t_thue_nt);if($obj$$.tdttcos)for($i_i$jscomp$1_i$$=0;$i_i$jscomp$1_i$$<$obj$$.tdttcos.length;$i_i$jscomp$1_i$$++)$detail_tdttco_vatvao$$=
4
+ $obj$$.tdttcos[$i_i$jscomp$1_i$$],$detail_tdttco_vatvao$$.line=$i_i$jscomp$1_i$$,$obj$$.ma_nt==="VND"&&($detail_tdttco_vatvao$$.tien=$detail_tdttco_vatvao$$.tien_nt),$detail_tdttco_vatvao$$.thanh_toan_qd=$detail_tdttco_vatvao$$.ma_nt_hd==$obj$$.ma_nt?$detail_tdttco_vatvao$$.tien_nt:round($detail_tdttco_vatvao$$.tien/$detail_tdttco_vatvao$$.ty_gia_hd,2);$fn$$(null,$obj$$)})};
5
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,sort:{ngay_ct:-1,so_ct:-1},keyValues:{ma_ct},onExport:function($user$$,$obj$$,$next$$){$obj$$.tdttcos&&$obj$$.tdttcos.length>0&&($obj$$.details=$obj$$.tdttcos);$next$$()}});$contr_router$$.route();$contr_router$$.post=async function($obj$$,$fn$$){$fn$$||=function(){};const $appInfo$$=await global.getModel("app").findOne({_id:$obj$$.id_app}).lean();async.series({post_vatvao:function($callback$$){(new PostBook($obj$$,
6
+ $obj$$.vatvaos,Vatvao)).run(function($e$$,$rs$$){$callback$$($e$$,$rs$$)})},post_tdttco:function($callback$$){(new PostBook($obj$$,$obj$$.tdttcos,Tdttco_tt,function($tdttco$$,$callback$$){$tdttco$$.tk_co=$obj$$.tk_co;$callback$$($tdttco$$)})).run(function($e$$,$details$$){if($e$$)return $callback$$($e$$);$callback$$(null,$details$$)})},post_socai:function($callback$$){setImmediate(async()=>{const $details_sc$$=[];$obj$$.vatvaos.forEach(function($v_vatvao$$){$v_vatvao$$={...$v_vatvao$$};$v_vatvao$$.tk_no=
7
+ $v_vatvao$$.tk_thue_no;$v_vatvao$$.tk_co=$v_vatvao$$.tk_du_thue;$v_vatvao$$.tien_nt=$v_vatvao$$.t_thue_nt;$v_vatvao$$.tien=$v_vatvao$$.t_thue;$details_sc$$.push($v_vatvao$$)});$obj$$.details.forEach(function($d_detail$$){$d_detail$$={...$d_detail$$};$d_detail$$.tk_co=$obj$$.tk_co;$d_detail$$.ma_kh||($d_detail$$.ma_kh=$obj$$.ma_kh);$details_sc$$.push($d_detail$$)});$obj$$.tdttcos.forEach(function($t_tdttco$$){$t_tdttco$$={...$t_tdttco$$};$t_tdttco$$.tk_co=$obj$$.tk_co;$t_tdttco$$.ma_kh||($t_tdttco$$.ma_kh=
8
+ $obj$$.ma_kh);$details_sc$$.push($t_tdttco$$)});await $obj$$.tdttcos.filter($t$$=>$t$$.ty_gia_hd!=$obj$$.ty_gia).asyncJoinModel2($obj$$.id_app,"currency",{where:{ma_nt_hd:"ma_nt"},fields:["tk_cl_no","tk_cl_co"]});for(let $t$$ of $obj$$.tdttcos){var $con_lai_nt_ht_so_du_hd$$=await Tdttco.getBalance({id_app:$obj$$.id_app,id_ct:$obj$$._id.toString(),_id:$t$$.id_tdtt});if($con_lai_nt_ht_so_du_hd$$.length==1){let $con_lai$$=$con_lai_nt_ht_so_du_hd$$[0].con_lai-$t$$.tien;$con_lai_nt_ht_so_du_hd$$=$con_lai_nt_ht_so_du_hd$$[0].con_lai_nt-
9
+ $t$$.thanh_toan_qd;if(Math.abs($con_lai$$)<=tien_cl_can_xu_ly||$con_lai_nt_ht_so_du_hd$$<=0)$con_lai$$&&($con_lai_nt_ht_so_du_hd$$={...$t$$,ma_nt:"VND",ty_gia:1},$con_lai_nt_ht_so_du_hd$$.tien_nt=$con_lai_nt_ht_so_du_hd$$.tien=Math.abs($con_lai$$),$con_lai_nt_ht_so_du_hd$$.ma_kh||($con_lai_nt_ht_so_du_hd$$.ma_kh=$obj$$.ma_kh),$t$$.ty_gia_hd!=$obj$$.ty_gia&&$t$$.ma_nt_hd==$obj$$.ma_nt?($t$$.chenh_lech_ty_gia=$con_lai$$,$con_lai$$>0?($con_lai_nt_ht_so_du_hd$$.tk_no=$t$$.tk_no,$con_lai_nt_ht_so_du_hd$$.tk_co=
10
+ $t$$.tk_cl_co):($con_lai_nt_ht_so_du_hd$$.tk_no=$t$$.tk_cl_no,$con_lai_nt_ht_so_du_hd$$.tk_co=$t$$.tk_no),$details_sc$$.push($con_lai_nt_ht_so_du_hd$$)):$appInfo$$?.options.tk_tn_khac&&$appInfo$$?.options.tk_cp_khac&&($con_lai$$>0?($con_lai_nt_ht_so_du_hd$$.tk_no=$t$$.tk_no,$con_lai_nt_ht_so_du_hd$$.tk_co=$appInfo$$?.options.tk_tn_khac):($con_lai_nt_ht_so_du_hd$$.tk_no=$appInfo$$?.options.tk_cp_khac,$con_lai_nt_ht_so_du_hd$$.tk_co=$t$$.tk_no),$details_sc$$.push($con_lai_nt_ht_so_du_hd$$))),await Tdttco.updateOne({_id:$t$$.id_tdtt.toString()},
11
+ {tat_toan:!0}).catch(Logger.error)}}(new PostSocai($obj$$,$details_sc$$)).run(function($e$$,$rs$$){$callback$$($e$$,$rs$$)})})},post_cashwithdraw:$callback$$=>{(async()=>{if($obj$$.id_asscashwithdraw){const $CashWithdraw$$=await global.getModel("asscashwithdraw").findOne({_id:$obj$$.id_asscashwithdraw});if(!$CashWithdraw$$)return $callback$$("Y\u00eau c\u1ea7u n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");if($CashWithdraw$$.trang_thai=="5")return $callback$$();if($CashWithdraw$$.trang_thai=="9")return $callback$$("Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 b\u1ecb hu\u1ef7");
12
+ if($CashWithdraw$$.trang_thai!=0)return $callback$$("Can't pay for this require");let $app$$=await App.findOne({_id:$obj$$.id_app});if(!$app$$||!$app$$.wallet_address||!$app$$.wallet_token)return $callback$$("Kh\u00f4ng th\u1ec3 x\u00e1c nh\u1eadn thanh to\u00e1n. H\u00e3y th\u1eed l\u1ea1i sau");if($app$$.wallet_address!=$CashWithdraw$$.payer)return $callback$$("incorrect payer");try{await global.getModel("assbank").sendCoinsFromSystemToAccount($CashWithdraw$$.id_app,$CashWithdraw$$.payer,$CashWithdraw$$.amount,
13
+ $CashWithdraw$$.token),$CashWithdraw$$.trang_thai="5",await $CashWithdraw$$.save()}catch($e$$){return $callback$$($e$$)}}$callback$$()})()}},function($e$$,$rs$$){$fn$$($e$$,$rs$$)})};$contr_router$$.creating=async function($user$$,$obj$$,$next$$){if($user$$.current_app_info.options.phieu_chi_phai_co_phieu_de_nghi&&!$obj$$.id_pc0&&!$obj$$.id_pn6)return $next$$("Ch\u01b0a c\u00f3 phi\u1ebfu \u0111\u1ec1 ngh\u1ecb thanh to\u00e1n");$obj$$.details||($obj$$.details=[]);if($obj$$.id_pc0){if(await model.findOne({id_app:$user$$.current_id_app,
14
+ id_pc0:$obj$$.id_pc0}))return $next$$("\u0110\u1ec1 ngh\u1ecb thanh to\u00e1n n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c chi");var $dntt_t_tien_dn$$=await pc0.findOne({_id:$obj$$.id_pc0,id_app:$user$$.current_id_app});if(!$dntt_t_tien_dn$$)return $next$$("\u0110\u1ec1 ngh\u1ecb thanh to\u00e1n kh\u00f4ng t\u1ed3n t\u1ea1i");$dntt_t_tien_dn$$=utils.round(($dntt_t_tien_dn$$.details||[]).map($d$$=>$d$$.tien_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)+($dntt_t_tien_dn$$.tdttcos||[]).map($d$$=>$d$$.tien_nt||
15
+ 0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)+($dntt_t_tien_dn$$.vatvaos||[]).map($d$$=>$d$$.t_thue_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),0);let $t_tien_tt$$=utils.round(($obj$$.details||[]).map($d$$=>$d$$.tien_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)+($obj$$.tdttcos||[]).map($d$$=>$d$$.tien_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)+($obj$$.vatvaos||[]).map($d$$=>$d$$.t_thue_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),0);if($dntt_t_tien_dn$$!==$t_tien_tt$$)return $next$$(`T\u1ed5ng s\u1ed1 ti\u1ec1n thanh to\u00e1n ${numeral($t_tien_tt$$).format()} ph\u1ea3i b\u1eb1ng s\u1ed1 ti\u1ec1n ${numeral($dntt_t_tien_dn$$).format()} trong \u0111\u1ec1 ngh\u1ecb thanh to\u00e1n \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t`)}if($obj$$.tdttcos&&
16
+ $obj$$.tdttcos.length>0&&(await $obj$$.tdttcos.asyncJoinModel2($user$$.current_id_app,Tdttco,{where:{id_tdtt:"_id"},fields:["tat_toan",{tien_hd_nt:"tien_nt"}]}),(await Promise.all($obj$$.tdttcos.map($hd$$=>(async()=>{if(!global.mongoose.Types.ObjectId.isValid($hd$$.id_tdtt))return{error:"Ho\u00e1 \u0111\u01a1n kh\u00f4ng h\u1ee3p l\u1ec7",invoice:$hd$$};let $ds_da_thanh_toan$$=await Tdttco_tt.find({id_app:$obj$$.id_app,id_tdtt:$hd$$.id_tdtt}).lean(),$da_thanh_toan$$=$ds_da_thanh_toan$$.map($t$$=>
17
+ $t$$.thanh_toan_qd||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0);return{invoice:$hd$$,da_thanh_toan:$da_thanh_toan$$,con_lai:$hd$$.tien_hd_nt-$da_thanh_toan$$,ds_da_thanh_toan:$ds_da_thanh_toan$$}})()))).filter($hd$$=>$hd$$.error).length>0))return $next$$("S\u1ed1 ti\u1ec1n thanh to\u00e1n kh\u00f4ng \u0111\u01b0\u1ee3c l\u1edbn h\u01a1n s\u1ed1 ti\u1ec1n c\u00f2n l\u1ea1i c\u1ee7a ho\u00e1 \u0111\u01a1n");valid_detail($user$$,$obj$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$obj$$)})};
18
+ $contr_router$$.updating=async function($user$$,$data$$,$obj$$,$next$$){if($data$$.id_pc0||$obj$$.id_pc0){var $dntt$jscomp$1_id_pc0_t_tien_dn$$=$data$$.id_pc0||$obj$$.id_pc0,$ex$jscomp$1_t_tien_tt$$=await model.findOne({id_app:$obj$$.id_app,id_pc0:$dntt$jscomp$1_id_pc0_t_tien_dn$$}).lean();if($ex$jscomp$1_t_tien_tt$$&&$ex$jscomp$1_t_tien_tt$$._id.toString()!==$obj$$._id.toString())return $next$$("\u0110\u1ec1 ngh\u1ecb thanh to\u00e1n n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c chi");$dntt$jscomp$1_id_pc0_t_tien_dn$$=
19
+ await pc0.findOne({_id:$dntt$jscomp$1_id_pc0_t_tien_dn$$,id_app:$user$$.current_id_app});if(!$dntt$jscomp$1_id_pc0_t_tien_dn$$)return $next$$("\u0110\u1ec1 ngh\u1ecb thanh to\u00e1n kh\u00f4ng t\u1ed3n t\u1ea1i");$dntt$jscomp$1_id_pc0_t_tien_dn$$=utils.round(($dntt$jscomp$1_id_pc0_t_tien_dn$$.details||[]).map($d$$=>$d$$.tien_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)+($dntt$jscomp$1_id_pc0_t_tien_dn$$.tdttcos||[]).map($d$$=>$d$$.tien_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)+($dntt$jscomp$1_id_pc0_t_tien_dn$$.vatvaos||
20
+ []).map($d$$=>$d$$.t_thue_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),0);$ex$jscomp$1_t_tien_tt$$=utils.round(($data$$.details||$obj$$.details||[]).map($d$$=>$d$$.tien_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)+($data$$.tdttcos||$obj$$.tdttcos||[]).map($d$$=>$d$$.tien_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0)+($data$$.vatvaos||$obj$$.vatvaos||[]).map($d$$=>$d$$.t_thue_nt||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),0);if($dntt$jscomp$1_id_pc0_t_tien_dn$$!==$ex$jscomp$1_t_tien_tt$$)return $next$$(`T\u1ed5ng s\u1ed1 ti\u1ec1n thanh to\u00e1n ${numeral($ex$jscomp$1_t_tien_tt$$).format()} ph\u1ea3i b\u1eb1ng s\u1ed1 ti\u1ec1n ${numeral($dntt$jscomp$1_id_pc0_t_tien_dn$$).format()} trong \u0111\u1ec1 ngh\u1ecb thanh to\u00e1n \u0111\u00e3 \u0111\u01b0\u1ee3c duy\u1ec7t`)}if($obj$$.tdttcos&&
21
+ $obj$$.tdttcos.length>0&&(await $obj$$.tdttcos.asyncJoinModel2($user$$.current_id_app,Tdttco,{where:{id_tdtt:"_id"},fields:["tat_toan",{tien_hd_nt:"tien_nt"}]}),(await Promise.all($obj$$.tdttcos.map($hd$$=>(async()=>{if(!global.mongoose.Types.ObjectId.isValid($hd$$.id_tdtt))return{error:"Ho\u00e1 \u0111\u01a1n kh\u00f4ng h\u1ee3p l\u1ec7",invoice:$hd$$};let $ds_da_thanh_toan$$=await Tdttco_tt.find({id_app:$obj$$.id_app,id_tdtt:$hd$$.id_tdtt,id_ct:{$ne:$obj$$._id.toString()}}).lean(),$da_thanh_toan$$=
22
+ $ds_da_thanh_toan$$.map($t$$=>$t$$.thanh_toan_qd||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$con_lai$$=$hd$$.tien_hd_nt-$da_thanh_toan$$;return $con_lai$$<$hd$$.thanh_toan_qd?{error:!0,invoice:$hd$$}:{ds_da_thanh_toan:$ds_da_thanh_toan$$,da_thanh_toan:$da_thanh_toan$$,invoice:$hd$$,con_lai:$con_lai$$}})()))).filter($hd$$=>$hd$$.error).length>0))return $next$$("S\u1ed1 ti\u1ec1n thanh to\u00e1n kh\u00f4ng \u0111\u01b0\u1ee3c l\u1edbn h\u01a1n s\u1ed1 ti\u1ec1n c\u00f2n l\u1ea1i c\u1ee7a ho\u00e1 \u0111\u01a1n");
23
+ valid_detail($user$$,$data$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$data$$,$obj$$)})};$contr_router$$.deleted=($details$jscomp$1_user$$,$obj$$,$next$$)=>{$details$jscomp$1_user$$=($obj$$.details||[]).filter($d$$=>$d$$.id_tdtt);async.map($details$jscomp$1_user$$,($detail$$,$callback$$)=>{setImmediate(()=>{Tdttco.findOneAndUpdate({_id:$detail$$.id_tdtt.toString()},{$set:{tat_toan:!1}},function($error$$,$result$$){$callback$$($error$$,$result$$)})})},$e$$=>{$next$$($e$$,
24
+ $obj$$)})};$contr_router$$.on("saved",function($obj$$){$obj$$.id_pc0&&pc0.updateMany({_id:$obj$$.id_pc0,id_app:$obj$$.id_app},{id_pc1:$obj$$._id.toString(),trang_thai:"6"},($e$$,$rs$$)=>{Logger.info("update pc0",$obj$$.id_pc0,$rs$$);pc0.findOne({_id:$obj$$.id_pc0,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.PC0,$e$$=>{$e$$&&Logger.error($e$$)})})});$obj$$.id_pn6&&pn6.updateMany({_id:$obj$$.id_pn6,id_app:$obj$$.id_app},{id_pc1:$obj$$._id.toString(),
25
+ trang_thai:"7"},($e$$,$rs$$)=>{Logger.info("update pn6",$obj$$.id_pn6,$rs$$);pn6.findOne({_id:$obj$$.id_pn6,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.PN6,$e$$=>{$e$$&&Logger.error($e$$)})})})});$contr_router$$.on("deleted",function($obj$$){$obj$$.id_pc0&&pc0.updateMany({_id:$obj$$.id_pc0,id_app:$obj$$.id_app},{id_pc1:""},()=>{pc0.updateMany({_id:$obj$$.id_pc0,id_app:$obj$$.id_app,trang_thai:"6"},{trang_thai:"4"},($e$$,$rs$$)=>{Logger.info("update pc0",
26
+ $obj$$.id_pc0,$rs$$);pc0.findOne({_id:$obj$$.id_pc0,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&controller.postData($_obj$$,global.controllers.PC0,$e$$=>{$e$$&&Logger.error($e$$)})})})});$obj$$.id_pn6&&pn6.updateMany({_id:$obj$$.id_pn6,id_app:$obj$$.id_app},{id_pc1:""},()=>{pn6.updateMany({_id:$obj$$.id_pn6,id_app:$obj$$.id_app,trang_thai:"7"},{trang_thai:"5"},($e$$,$rs$$)=>{Logger.info("update pn6",$obj$$.id_pn6,$rs$$);pn6.findOne({_id:$obj$$.id_pn6,id_app:$obj$$.id_app},($e$$,$_obj$$)=>{$_obj$$&&
27
+ controller.postData($_obj$$,global.controllers.PN6,$e$$=>{$e$$&&Logger.error($e$$)})})})})});$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.parallel({kh:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.ma_kh).joinModel2($id_app$$,customer,[{where:"ma_kh",fields:[{name:"ten_kh",value:"ten_kh"}]}],function(){$callback$$()})})},nv:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.ma_nv).joinModel2($id_app$$,
28
+ dmnv,[{where:"ma_nv",fields:[{name:"ten_nv",value:"ten_nv"}]}],function(){$callback$$()})})},tk:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.tk_co).joinModel($id_app$$,account,[{akey:"tk_co",bkey:"tk",fields:[{name:"ten_tk_co",value:"ten_tk"}]}],function(){$callback$$()})})},dv:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.ma_dvcs).joinModel($id_app$$,dvcs,[{akey:"ma_dvcs",bkey:"_id",fields:[{name:"ten_dvcs",value:"ten_dvcs"}]}],function(){$callback$$()})})},
29
+ trangthai:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai","color"]}],function(){$callback$$()})})},pc0:function($callback$$){setImmediate(()=>{$items$$.joinModel2($id_app$$,pc0,[{where:{id_pc0:"_id"},fields:[{so_ct_pc0:"so_ct"},{ngay_ct_pc0:"ngay_ct"}]}],function(){$callback$$()})})},t_tien:function($callback$$){setImmediate(()=>{$items$$.forEach(function($r$$){let $f_tien_nt$$=
30
+ $r$$.ma_nt=="VND"?0:3;$r$$.t_tien=0;$r$$.t_tien_nt=0;$r$$.t_thue_vao=0;$r$$.t_thue_vao_nt=0;$r$$.details&&($r$$.t_tien=$r$$.details.csum("tien"),$r$$.t_tien_nt=$r$$.details.csum("tien_nt"));$r$$.tdttcos&&($r$$.t_tien+=$r$$.tdttcos.csum("tien"),$r$$.t_tien_nt=Math.roundBy($r$$.t_tien_nt+$r$$.tdttcos.csum("tien_nt"),$f_tien_nt$$));$r$$.vatvaos&&($r$$.t_thue_vao=$r$$.vatvaos.csum("t_thue"),$r$$.t_thue_vao_nt=$r$$.vatvaos.csum("t_thue_nt"));$r$$.t_tt=$r$$.t_tien+$r$$.t_thue_vao;$r$$.t_tt_nt=Math.roundBy($r$$.t_tien_nt+
31
+ $r$$.t_thue_vao_nt,$f_tien_nt$$)});$callback$$()})},details_tk:function($callback$$){setImmediate(()=>{async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).joinModel($id_app$$,account,[{akey:"tk_no",bkey:"tk",fields:[{name:"ten_tk_no",value:"ten_tk"}]}],function(){$callback1$$()})},function(){$callback$$()})})},details_tk_tdttco:function($callback$$){async.map($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.tdttcos||[]).joinModel($id_app$$,account,[{akey:"tk_no",bkey:"tk",
32
+ fields:[{name:"ten_tk_no",value:"ten_tk"}]}],function(){$callback1$$()})})},function(){$callback$$()})},details_dt_tdttco:function($callback$$){async.map($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.tdttcos||[]).filter($item$$=>$item$$.ma_dt).joinModel2($id_app$$,dmdt,[{where:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})})},function(){$callback$$()})},details_hd_tdttco:function($callback$$){setImmediate(()=>{async.map($items$$,function($r$$,$callback1$$){($r$$.tdttcos||
33
+ []).filter($item$$=>$item$$.ma_hd).joinModel($id_app$$,contract,[{akey:"ma_hd",bkey:"so_hd",fields:[{name:"ten_hd",value:"ten_hd"}]}],function(){$callback1$$()})},function(){$callback$$()})})},details_phi_tdttco:function($callback$$){async.map($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.tdttcos||[]).filter($item$$=>$item$$.ma_phi).joinModel2($id_app$$,dmphi,[{where:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})})},function(){$callback$$()})},details_customer:function($callback$$){async.map($items$$,
34
+ function($r$$,$callback1$$){setImmediate(()=>{($r$$.details||[]).filter($item$$=>$item$$.ma_kh).joinModel2($id_app$$,customer,[{where:"ma_kh",fields:[{name:"ten_kh",value:"ten_kh"}]}],function(){$callback1$$()})})},function(){$callback$$()})},details_dt:function($callback$$){async.map($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.details||[]).filter($item$$=>$item$$.ma_dt).joinModel2($id_app$$,dmdt,[{where:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})})},
35
+ function(){$callback$$()})},details_hopdong:function($callback$$){async.map($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.details||[]).filter($item$$=>$item$$.ma_hd).joinModel($id_app$$,contract,[{akey:"ma_hd",bkey:"so_hd",fields:[{name:"ten_hd",value:"ten_hd"}]}],function(){$callback1$$()})})},function(){$callback$$()})},details_phi:function($callback$$){async.map($items$$,function($r$$,$callback1$$){setImmediate(()=>{($r$$.details||[]).filter($item$$=>$item$$.ma_phi).joinModel2($id_app$$,
36
+ dmphi,[{where:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})})},function(){$callback$$()})}},function(){setImmediate(()=>{$fn$$(null,$items$$)})})}};
@@ -0,0 +1,15 @@
1
+ const PostSocai=require("../../libs/post-socai"),User=global.getModel("user"),transaction=global.getModel("transaction"),dvcs=global.getModel("dvcs"),account=global.getModel("account"),dmphi=global.getModel("dmphi"),customer=global.getModel("customer"),dmnv=global.getModel("dmnv"),dmdt=global.getModel("dmdt"),contract=global.getModel("contract"),model=global.getModel("pc5"),currency=global.getModel("currency"),controller=require("../../controllers/controller"),trangthai=global.getModel("trangthai"),
2
+ async=require("async"),numeral=require("numeral"),ma_ct="BN5",valid_detail=function($i_user$$,$obj$$,$fn$$){if(!$obj$$.details)return $fn$$(null,$obj$$);for($i_user$$=0;$i_user$$<$obj$$.details.length;$i_user$$++){const $detail$$=$obj$$.details[$i_user$$];$detail$$.line=$i_user$$;$obj$$.ma_nt=="VND"&&($detail$$.tien=Math.roundBy($detail$$.tien_nt,0))}$fn$$(null,$obj$$)},createTransaction=async function($obj$$){if($obj$$.trang_thai!="5")return await transaction.deleteTrans({id_ct:$obj$$._id.toString()},
3
+ "X\u00f3a b\u00fat to\u00e1n"),null;var $amount_ty_le_qd$$=await currency.getRate($obj$$.id_app,$obj$$.ma_nt);let $t_tien$$=$obj$$.details.map($d$$=>$d$$.tien).reduce(($a$$,$b$$)=>$a$$+$b$$,0);var $diem_khuyen_mai_old_trans$$=$obj$$.details.map($d$$=>$d$$.diem_khuyen_mai||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0);if(!$amount_ty_le_qd$$)return null;$amount_ty_le_qd$$=$t_tien$$/$amount_ty_le_qd$$+$diem_khuyen_mai_old_trans$$;if(($diem_khuyen_mai_old_trans$$=await transaction.findOne({id_ct:$obj$$._id.toString()}))&&
4
+ $diem_khuyen_mai_old_trans$$.amount===$amount_ty_le_qd$$&&$diem_khuyen_mai_old_trans$$.receiver&&$obj$$.email===$diem_khuyen_mai_old_trans$$.receiver.email)return null;await transaction.deleteTrans({id_ct:$obj$$._id.toString()},"X\u00f3a b\u00fat to\u00e1n");return await transaction.createTrans({id_app:$obj$$.id_app,sender_email:$obj$$.email,receiver_email:$obj$$.id_app,amount:$amount_ty_le_qd$$,description:$obj$$.dien_giai||`Tr\u1ea3 l\u1ea1i ${numeral($t_tien$$).format()} ${$obj$$.ma_nt} \u0111i\u1ec3m \u0111\u00e3 mua`,
5
+ otherData:{ma_ct:$obj$$.ma_ct,so_ct:$obj$$.so_ct,ngay_ct:$obj$$.ngay_ct,id_ct:$obj$$._id.toString()}})};
6
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,requireRecaptchaToken:!1,sort:{ngay_ct:-1,so_ct:-1},keyValues:{ma_ct},onCreating:($user$$,$obj$$,$next$$)=>{$obj$$.details||($obj$$.details=[]);valid_detail($user$$,$obj$$,async $error$$=>{if($error$$)return $next$$($error$$);try{if($obj$$.ma_kh){let $_customer$$=await customer.getInfo($user$$.current_id_app,{ma_kh:$obj$$.ma_kh});if($_customer$$.of_user)$obj$$.email=$_customer$$.of_user;
7
+ else return $next$$("Kh\u00e1ch h\u00e0ng n\u00e0y kh\u00f4ng c\u00f3 t\u00e0i kho\u1ea3n truy c\u1eadp h\u1ec7 th\u1ed1ng")}$next$$(null,$obj$$)}catch($e$$){$next$$(`${$e$$.message}, user: ${$obj$$.email}`)}})},onCreated:async($user$$,$obj$$,$next$$)=>{try{await createTransaction($obj$$),$next$$(null,$obj$$)}catch($e$$){$next$$($e$$.message)}},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{valid_detail($user$$,$data$$,async $error$$=>{if($error$$)return $next$$($error$$);if(!$data$$.email&&!$data$$.ma_kh)return $next$$(null,
8
+ $data$$,$obj$$);if(!$data$$.email&&$data$$.ma_kh)return $next$$("Can't update customer code for this voucher");try{let $_customer$$=await customer.getInfo($user$$.current_id_app,{of_user:$data$$.email});$data$$.ma_kh=$_customer$$.ma_kh;$next$$(null,$data$$,$obj$$)}catch($e$$){$next$$($e$$.message)}})},onUpdated:async($user$$,$obj$$,$next$$)=>{try{await createTransaction($obj$$),$next$$(null,$obj$$)}catch($e$$){$next$$($e$$.message)}},onDeleted:async($user$$,$obj$$,$next$$)=>{if($obj$$.id_trans)try{await transaction.deleteTrans({id_ct:$obj$$._id.toString()},
9
+ "Tr\u1ea3 l\u1ea1i \u0111i\u1ec3m \u0111\u00e3 mua")}catch($e$$){return $next$$($e$$.message)}$next$$(null,$obj$$)}});$contr_router$$.route();$contr_router$$.post=async function($obj$$,$fn$$){$fn$$||=function(){};$obj$$=$obj$$.toObject?$obj$$.toObject():{...$obj$$};let $he_so_qd$$=await currency.getRate($obj$$.id_app,$obj$$.ma_nt)||1;async.series({post_socai:$callback$$=>{const $details_sc$$=[];$obj$$.details.forEach($d$$=>{var $detail$$={...$d$$};$detail$$.tk_co=$obj$$.tk_co;$detail$$.ma_kh||($detail$$.ma_kh=
10
+ $obj$$.ma_kh);$details_sc$$.push($detail$$);$d$$.diem_khuyen_mai&&$d$$.tk_km_co&&$d$$.tk_km_no&&($detail$$={...$d$$},$detail$$.tk_no=$d$$.tk_km_no,$detail$$.tk_co=$d$$.tk_km_co,$detail$$.tien=$detail$$.tien_nt=$d$$.diem_khuyen_mai*$he_so_qd$$,$detail$$.ma_kh||($detail$$.ma_kh=$obj$$.ma_kh),$details_sc$$.push($detail$$))});(new PostSocai($obj$$,$details_sc$$)).run(($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})}},($e$$,$rs$$)=>{$fn$$($e$$,$rs$$)})};$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=
11
+ $user$$.current_id_app;async.series({e:function($callback$$){$items$$.filter($item$$=>$item$$.email).joinModel2(null,User,[{where:"email",fields:"name"}],function(){$callback$$()})},kh:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kh).joinModel2($id_app$$,customer,[{where:"ma_kh",fields:"ten_kh"}],function(){$callback$$()})},nv:function($callback$$){$items$$.filter($item$$=>$item$$.ma_nv).joinModel2($id_app$$,dmnv,[{where:"ma_nv",fields:"ten_nv"}],function(){$callback$$()})},tk:function($callback$$){$items$$.filter($item$$=>
12
+ $item$$.tk_no).joinModel2($id_app$$,account,[{where:{tk_co:"tk"},fields:{ten_tk_co:"ten_tk"}}],function(){$callback$$()})},dv:function($callback$$){$items$$.filter($item$$=>$item$$.ma_dvcs).joinModel2($id_app$$,dvcs,[{where:{ma_dvcs:"_id"},fields:"ten_dvcs"}],function(){$callback$$()})},trangthai:function($callback$$){$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai","color"]}],function(){$callback$$()})},
13
+ t_tien:function($callback$$){$items$$.forEach(function($r$$){$r$$.t_tien=0;$r$$.t_tien_nt=0;$r$$.details&&($r$$.t_tien=$r$$.details.csum("tien"),$r$$.t_tien_nt=$r$$.details.csum("tien_nt"));$r$$.t_tt=$r$$.t_tien;$r$$.t_tt_nt=$r$$.t_tien_nt});$callback$$()},details_tk:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).joinModel($id_app$$,account,[{akey:"tk_no",bkey:"tk",fields:[{name:"ten_tk_no",value:"ten_tk"}]}],function(){$callback1$$()})},function(){$callback$$()})},
14
+ details_dt:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_contract:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_hd).joinModel($id_app$$,contract,[{akey:"ma_hd",bkey:"so_hd",fields:[{name:"ten_hd",
15
+ value:"ten_hd"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_phi:function($callback$$){async.mapSeries($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_phi).joinModel($id_app$$,dmphi,[{akey:"ma_phi",bkey:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})},function(){$callback$$()})}},function(){$fn$$(null,$items$$)})}};
@@ -0,0 +1,35 @@
1
+ const async=require("async"),moment=require("moment"),_=require("lodash"),dmvt=global.getModel("dmvt"),customer=global.getModel("customer"),dmnv=global.getModel("dmnv"),dmdt=global.getModel("dmdt"),dmphi=global.getModel("dmphi"),contract=global.getModel("contract"),salecontract=global.getModel("sale_contract"),model=global.getModel("dh2"),hd2=global.getModel("hd2"),pxh=global.getModel("pxh"),controller=require("../../controllers/controller"),utils=require("../../libs/utils"),tinhhoahong=require("../../libs/tinhhoahong"),
2
+ trangthai=global.getModel("trangthai"),ma_ct="DH2";
3
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,sort:{ngay_ct:-1,so_ct:-1},check_stock:!1});$contr_router$$.route();$contr_router$$.validating=async($user$$,$obj$$,$next$$)=>{$obj$$.sdt_nguoi_nhan&&($obj$$.sdt_nguoi_nhan=$obj$$.sdt_nguoi_nhan.split(" ").join(""));if($obj$$.sdt_nguoi_nhan&&!utils.isMobilePhone($obj$$.sdt_nguoi_nhan,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ng\u01b0\u1eddi nh\u1eadn ${$obj$$.sdt_nguoi_nhan} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);$next$$(null,
4
+ $obj$$)};$contr_router$$.saving=async($t_tt_nt_user$$,$obj$$)=>{$obj$$.user_created||($obj$$.user_created=$t_tt_nt_user$$.email);$obj$$.ma_kho_npp="";$obj$$.of_user="";var $cust_kho_npp$$=$obj$$.ma_kh?await customer.findOne({id_app:$obj$$.id_app,ma_kh:$obj$$.ma_kh}).lean():void 0;$cust_kho_npp$$&&$cust_kho_npp$$.of_user&&($cust_kho_npp$$=await global.getModel("dmkho").findOne({id_app:$obj$$.id_app,user_npp:$cust_kho_npp$$.of_user,la_kho_npp:!0}).lean())&&($obj$$.ma_kho_npp=$cust_kho_npp$$.ma_kho,
5
+ $obj$$.of_user=$cust_kho_npp$$.user_npp);let $kho_thue$$;!$obj$$.ma_kho_npp&&$obj$$.ma_kho&&($kho_thue$$=await global.getModel("dmkho").findOne({id_app:$obj$$.id_app,ma_kho:$obj$$.ma_kho,la_kho_thue:!0}).lean());$obj$$.ma_kho_npp||$kho_thue$$||$obj$$.ma_kho||!($kho_thue$$=await global.getModel("dmkho").findOne({id_app:$obj$$.id_app,ds_ctv_kho_thue:$t_tt_nt_user$$.email,la_kho_thue:!0}).lean())||($obj$$.ma_kho=$kho_thue$$.ma_kho);$kho_thue$$?$obj$$.details.forEach($d$$=>{$d$$.ma_kho=""}):await $obj$$.details.filter($d$$=>
6
+ !$d$$.ma_kho).asyncJoinModel2($obj$$.id_app,"dmvt",[{where:"ma_vt",fields:[{ma_kho:"ma_kho_df"}]}]);$obj$$.details.forEach($d$$=>{$d$$.sl_xuat=utils.round($d$$.sl_xuat,4);$d$$.tt_nt=$d$$.tien_ct_nt-$d$$.tien_ck_nt;$d$$.tt=$d$$.tien_ct-$d$$.tien_ck;$d$$.tien_xuat_tmp=$d$$.sl_xuat*($d$$.gia_mua||0)});await tinhhoahong($obj$$,$t_tt_nt_user$$);$obj$$.details=$obj$$.details||[];$t_tt_nt_user$$=$obj$$.details.csum("tt_nt");await global.getModel("dmchietkhauhd").tinhChietKhau($obj$$.user_created,$obj$$.id_app,
7
+ $obj$$,$t_tt_nt_user$$)};const $tinhGiaChuaThue$$=($obj$$,$detail$$)=>{let $f_tien_nt$$=$obj$$.ma_nt=="VND"?0:3;$obj$$=($detail$$.ma_thue?$detail$$.thue_suat:$obj$$.thue_suat)||0;$detail$$.gia_ban_ct_nt||($detail$$.tien_thue_nt?($detail$$.gia_ban_ct_nt=$detail$$.gia_ban_nt,$detail$$.tien_ct_nt=$detail$$.tien_nt,$detail$$.tien_ck_nt=$detail$$.tien_ck_nt||0,$detail$$.tien_thue_nt=$detail$$.tien_thue_nt||0,$detail$$.gia_ban_nt=$detail$$.gia_ban_ct_nt*(1+$detail$$.thue_suat/100)):($detail$$.gia_ban_ct_nt=
8
+ utils.round($detail$$.gia_ban_nt/(1+$obj$$/100),5),$detail$$.tien_ct_nt=utils.round($detail$$.gia_ban_ct_nt*$detail$$.sl_xuat,$f_tien_nt$$)));$detail$$.tien_ck_nt=$detail$$.tien_ck_nt||0;$detail$$.ty_le_ck&&($detail$$.tien_ck_nt=utils.round($detail$$.tien_ct_nt*$detail$$.ty_le_ck/100,$f_tien_nt$$));$detail$$.tien_thue_nt=utils.round(($detail$$.tien_ct_nt-($detail$$.tien_ck_nt||0))*$obj$$/100,$f_tien_nt$$);$detail$$.tien_nt=$detail$$.tien_ct_nt-$detail$$.tien_ck_nt+$detail$$.tien_thue_nt},$valid$$=
9
+ function($f_tien_nt$jscomp$1_t_thue_nt_user$$,$obj$$,$next$$){$obj$$.thue_suat=$obj$$.thue_suat||0;$f_tien_nt$jscomp$1_t_thue_nt_user$$=$obj$$.ma_nt=="VND"?0:3;$obj$$.tien_phi_vc_nt=$obj$$.tien_phi_vc_nt||0;$obj$$.tien_phi_vc=utils.round($obj$$.tien_phi_vc_nt*$obj$$.ty_gia,0);$obj$$.details.forEach($detail$$=>{$tinhGiaChuaThue$$($obj$$,$detail$$)});for(var $i_t_thue$$=0;$i_t_thue$$<$obj$$.details.length;$i_t_thue$$++){var $detail$$=$obj$$.details[$i_t_thue$$];$detail$$.line=$i_t_thue$$;$detail$$.tien_ck_nt=
10
+ $detail$$.tien_ck_nt||0;$detail$$.tien_thue_nt=$detail$$.tien_thue_nt||0;$detail$$.tien=utils.round($detail$$.tien_nt*$obj$$.ty_gia,0);$detail$$.tien_ct=utils.round($detail$$.tien_ct_nt*$obj$$.ty_gia,0);$detail$$.gia_ban=utils.round($detail$$.gia_ban_nt*$obj$$.ty_gia,0);$detail$$.gia_ban_ct=utils.round($detail$$.gia_ban_ct_nt*$obj$$.ty_gia,0);$detail$$.tien_ck=utils.round($detail$$.tien_ck_nt*$obj$$.ty_gia,0);$detail$$.tien_thue=utils.round($detail$$.tien_thue_nt*$obj$$.ty_gia,0);$detail$$.tien_xuat=
11
+ $detail$$.tien_xuat_nt}!$obj$$.details.find($r$$=>$r$$.ma_thue)&&$obj$$.thue_suat&&($obj$$.t_thue_nt=utils.round(($obj$$.details.csum("tien_ct_nt")-$obj$$.details.csum("tien_ck_nt"))*$obj$$.thue_suat/100,$f_tien_nt$jscomp$1_t_thue_nt_user$$),$obj$$.t_thue=utils.round($obj$$.t_thue_nt*($obj$$.ty_gia||1),0),$f_tien_nt$jscomp$1_t_thue_nt_user$$=$obj$$.details.csum("tien_thue_nt"),$i_t_thue$$=$obj$$.details.csum("tien_thue"),($f_tien_nt$jscomp$1_t_thue_nt_user$$!==$obj$$.t_thue_nt||$i_t_thue$$!==$obj$$.t_thue)&&
12
+ $obj$$.details.length>0&&($detail$$=$obj$$.details[$obj$$.details.length-1],$detail$$.tien_thue_nt+=$obj$$.t_thue_nt-$f_tien_nt$jscomp$1_t_thue_nt_user$$,$detail$$.tien_thue+=$obj$$.t_thue-$i_t_thue$$));$obj$$.id_contract?salecontract.findOne({_id:$obj$$.id_contract}).lean().exec(($e$$,$c$$)=>{$c$$&&($obj$$.ma_hd=$c$$.ma_hd);$next$$(null,$obj$$)}):$next$$(null,$obj$$)};$contr_router$$.creating=async function($user$$,$obj$$,$next$$){$obj$$.details||($obj$$.details=[]);$obj$$.id_hd2=void 0;await $obj$$.details.asyncJoinModel2($user$$.current_id_app,
13
+ dmvt,{where:"ma_vt",setFields:($item$$,$ref$$)=>{$item$$.ten_vt=$ref$$.ten_vt;$item$$.combo=$ref$$.combo||[];$item$$.ma_thue=$ref$$.ma_thue;$item$$.status_vt=$ref$$.status;$item$$.gia_mua=$ref$$.gia_mua_tmp}});let $sp_het_su_dung$$=$obj$$.details.filter($d$$=>!$d$$.status_vt);if($sp_het_su_dung$$.length>0)return $next$$(`C\u00e1c m\u1eb7t h\u00e0ng sau \u0111\u00e3 ng\u1eebng kinh doanh : ${$sp_het_su_dung$$.map($d$$=>$d$$.ten_vt).join(",")}`);let $ngay_nay_thang_truoc$$=moment($obj$$.ngay_ct).subtract(1,
14
+ "months").toDate(),$details$$=[];$obj$$.details.forEach($d$$=>{$d$$.combo&&$d$$.combo.length>0?$details$$=[...$details$$,...$d$$.combo]:$details$$.push($d$$)});await $details$$.filter($r$$=>!$r$$.gia_mua).asyncJoinModel2($obj$$.id_app,"giatb",{where:$item$$=>({ma_vt:$item$$.ma_vt,id_app:$obj$$.id_app,nam:$ngay_nay_thang_truoc$$.getFullYear(),thang:$ngay_nay_thang_truoc$$.getMonth()+1,gia:{$gt:0}}),fields:[{gia_mua:"gia"}]});$ngay_nay_thang_truoc$$=moment($ngay_nay_thang_truoc$$).subtract(1,"months").toDate();
15
+ await $details$$.filter($r$$=>!$r$$.gia_mua).asyncJoinModel2($obj$$.id_app,"giatb",{where:$item$$=>({ma_vt:$item$$.ma_vt,id_app:$obj$$.id_app,nam:$ngay_nay_thang_truoc$$.getFullYear(),thang:$ngay_nay_thang_truoc$$.getMonth()+1,gia:{$gt:0}}),fields:[{gia_mua:"gia"}]});$obj$$.details.filter($d$$=>$d$$.combo&&$d$$.combo.length>0).forEach($detail$$=>{$detail$$.combo=$detail$$.combo.map($item$$=>{$item$$.sl_xuat_1_combo=$item$$.sl_xuat;$item$$.sl_xuat=$item$$.sl_xuat_1_combo*$detail$$.sl_xuat;$item$$.tien_xuat=
16
+ $item$$.tien_xuat_nt=$item$$.sl_xuat*($item$$.gia_von_nt||0);$item$$.tien_hang=$item$$.tien_hang_nt=0;$item$$.tien=$item$$.tien_nt=$item$$.sl_xuat*($item$$.gia_ban_nt||0);$item$$.tien_ck=$item$$.tien_ck_nt=$item$$.sl_xuat*($item$$.tien_ck_nt||0);$item$$.tt=$item$$.tt_nt=$item$$.tien_nt-($item$$.tien_ck_nt||0);return{...$item$$}});$detail$$.gia_mua=$detail$$.combo.map($c$$=>($c$$.gia_mua||0)*$c$$.sl_xuat_1_combo).reduce(($a$$,$b$$)=>$a$$+$b$$,0)});$valid$$($user$$,$obj$$,async function($error$$){if($error$$)return $next$$($error$$);
17
+ $next$$(null,$obj$$)})};$contr_router$$.updating=async($user$$,$data$$,$obj$$,$next$$)=>{$data$$.details||($data$$.details=$obj$$.details);$data$$.ngay_ct=$data$$.ngay_ct||$obj$$.ngay_ct;await $data$$.details.asyncJoinModel2($user$$.current_id_app,dmvt,{where:"ma_vt",setFields:($item$$,$ref$$)=>{let $old_combo$$=($item$$.combo||[]).map($i$$=>({ma_vt:$i$$.ma_vt,sl_xuat:$i$$.sl_xuat})),$new_combo$$=($ref$$.combo||[]).map($i$$=>({ma_vt:$i$$.ma_vt,sl_xuat:$i$$.sl_xuat}));_.isEqual($old_combo$$,$new_combo$$)||
18
+ ($item$$.combo=$ref$$.combo||[]);$item$$.gia_mua=$ref$$.gia_mua_tmp}});let $ngay_nay_thang_truoc$$=moment($data$$.ngay_ct).subtract(1,"months").toDate(),$details$$=[];$data$$.details.forEach($d$$=>{$d$$.combo&&$d$$.combo.length>0?$details$$=[...$details$$,...$d$$.combo]:$details$$.push($d$$)});await $details$$.filter($r$$=>!$r$$.gia_mua).asyncJoinModel2($obj$$.id_app,"giatb",{where:$item$$=>({ma_vt:$item$$.ma_vt,id_app:$obj$$.id_app,nam:$ngay_nay_thang_truoc$$.getFullYear(),thang:$ngay_nay_thang_truoc$$.getMonth()+
19
+ 1,gia:{$gt:0}}),fields:[{gia_mua:"gia"}]});$ngay_nay_thang_truoc$$=moment($ngay_nay_thang_truoc$$).subtract(1,"months").toDate();await $details$$.filter($r$$=>!$r$$.gia_mua).asyncJoinModel2($obj$$.id_app,"giatb",{where:$item$$=>({ma_vt:$item$$.ma_vt,id_app:$obj$$.id_app,nam:$ngay_nay_thang_truoc$$.getFullYear(),thang:$ngay_nay_thang_truoc$$.getMonth()+1,gia:{$gt:0}}),fields:[{gia_mua:"gia"}]});$data$$.details.filter($d$$=>$d$$.combo&&$d$$.combo.length>0).forEach($detail$$=>{$detail$$.combo=$detail$$.combo.map($item$$=>
20
+ {$item$$.sl_xuat_1_combo==void 0&&($item$$.sl_xuat_1_combo=$item$$.sl_xuat||0);$item$$.sl_xuat=$item$$.sl_xuat_1_combo*$detail$$.sl_xuat;$item$$.tien_xuat=$item$$.tien_xuat_nt=$item$$.sl_xuat*($item$$.gia_von_nt||0);$item$$.tien_hang=$item$$.tien_hang_nt=0;$item$$.tien=$item$$.tien_nt=$item$$.sl_xuat*($item$$.gia_ban_nt||0);$item$$.tien_ck=$item$$.tien_ck_nt=$item$$.sl_xuat*($item$$.tien_ck_nt||0);$item$$.tt=$item$$.tt_nt=$item$$.tien_nt-($item$$.tien_ck_nt||0);return{...$item$$}});$detail$$.gia_mua=
21
+ $detail$$.combo.map($c$$=>($c$$.gia_mua||0)*$c$$.sl_xuat_1_combo).reduce(($a$$,$b$$)=>$a$$+$b$$,0)});$valid$$($user$$,$data$$,async function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$data$$,$obj$$)})};$contr_router$$.updated=function($user$$,$obj$$,$next$$){$next$$(null,$obj$$)};$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.parallel({dt:function($callback$$){$items$$.filter($item$$=>$item$$.ma_dt).joinModel2($id_app$$,dmdt,[{where:"ma_dt",
22
+ fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback$$()})},kh:function($callback$$){$items$$.filter($item$$=>$item$$.ma_kh).joinModel2($id_app$$,customer,[{where:"ma_kh",fields:["ten_kh","dia_chi","dien_thoai","email","nh_kh"]}],function(){$callback$$()})},nv:function($callback$$){$items$$.filter($item$$=>$item$$.ma_nv).joinModel2($id_app$$,dmnv,[{where:"ma_nv",fields:[{name:"ten_nv",value:"ten_nv"}]}],function(){$callback$$()})},contract:function($callback$$){$items$$.filter($item$$=>
23
+ $item$$.ma_hd).joinModel2($id_app$$,contract,[{where:{ma_hd:"so_hd"},fields:["ten_hd"]}],function(){$callback$$()})},hd2:function($callback$$){$items$$.joinModel2($id_app$$,hd2,[{where:{_id:"id_dh2"},fields:[{name:"id_hd2",value:"_id"}]}],function(){$callback$$()})},lenhsx:function($callback$$){$items$$.joinModel2($id_app$$,global.getModel("lenhsx"),[{where:{_id:"id_dh2"},fields:[{name:"id_lenhsx",value:"_id"}]}],function(){$callback$$()})},pxh:function($callback$$){$items$$.joinModel2($id_app$$,
24
+ pxh,[{where:{_id:"id_dh2"},fields:[{name:"id_pxh",value:"_id"}]}],function(){$callback$$()})},t_tien:function($callback$$){$items$$.forEach(function($r$$){$r$$.details&&($r$$.details.forEach($d$$=>{$d$$.gia_ban_ct_nt==void 0&&$r$$.ma_nt&&$tinhGiaChuaThue$$($r$$,$d$$);$d$$.tien_nt=$d$$.tien_ct_nt-$d$$.tien_ck_nt+$d$$.tien_thue_nt}),$r$$.t_sl=$r$$.details.csum("sl_xuat"),$r$$.t_thue=$r$$.details.csum("tien_thue"),$r$$.t_thue_nt=$r$$.details.csum("tien_thue_nt"),$r$$.t_tien=$r$$.details.csum("tien"),
25
+ $r$$.t_tien_nt=$r$$.details.csum("tien_nt"),$r$$.t_tien_ct=$r$$.details.csum("tien_ct"),$r$$.t_tien_ct_nt=$r$$.details.csum("tien_ct_nt"),$r$$.t_ck=$r$$.details.csum("tien_ck"),$r$$.t_ck_nt=$r$$.details.csum("tien_ck_nt"),$r$$.tc_ck_nt=$r$$.t_ck_nt+($r$$.tien_ck_hd||0),$r$$.tc_ck=$r$$.t_ck+($r$$.tien_ck_hd||0)*$r$$.ty_gia,$r$$.t_tt=$r$$.t_tien_ct-$r$$.tc_ck+$r$$.t_thue+($r$$.tien_phi_vc||0),$r$$.t_tt_nt=$r$$.t_tien_ct_nt-$r$$.tc_ck_nt+$r$$.t_thue_nt+($r$$.tien_phi_vc_nt||0),$r$$.t_tien_xuat=$r$$.details.csum("tien_xuat"),
26
+ $r$$.t_tien_xuat_nt=$r$$.details.csum("tien_xuat_nt"),$r$$.tien_hoa_hong=$r$$.details.csum("tien_hoa_hong"),$r$$.tien_hoa_hong_gt=$r$$.details.csum("tien_hoa_hong_gt"),$r$$.tien_hoa_hong_ql=$r$$.details.csum("tien_hoa_hong_ql"),$r$$.tien_hoa_hong_kho=$r$$.details.csum("tien_hoa_hong_kho"),$r$$.thu_nhap_ctv=$r$$.details.csum("tien_hoa_hong_ctv"),$r$$.thu_nhap_ctv2=$r$$.details.csum("tien_hoa_hong_ctv2"))});$callback$$()},details_vt:function($callback$$){async.map($items$$,function($r$$,$callback1$$){const $details$$=
27
+ $r$$.details||[];setImmediate(async()=>{await $details$$.asyncJoinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt ma_lvt tk_dt tk_gv tk_vt tk_ck".split(" "),setFields:($item$$,$ref$$)=>{$item$$.ten_vt=$ref$$.ten_vt;$item$$.tk_tl=$ref$$.tk_tl;$item$$.tk_dt=$ref$$.tk_dt;$item$$.tk_gv=$ref$$.tk_gv;$item$$.tk_vt=$ref$$.tk_vt;$item$$.tk_ck=$ref$$.tk_ck;$item$$.ma_tt1_yn=$ref$$.ma_tt1_yn;$item$$.ma_tt2_yn=$ref$$.ma_tt2_yn;$item$$.ma_tt3_yn=$ref$$.ma_tt3_yn;$item$$.ma_lo_yn=$ref$$.ma_lo_yn;$item$$.ma_nvt||
28
+ ($item$$.ma_nvt=$ref$$.ma_nvt)}}]);await $details$$.filter($d$$=>$d$$.ma_dvt&&!$d$$.he_so_qd).asyncJoinModel2($id_app$$,"dmqddvt",[{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},setFields:($item$$,$qddct$$)=>{let $he_so_qd$$=1;$qddct$$&&($he_so_qd$$=$qddct$$.ty_le_qd||1,$qddct$$.mau&&$qddct$$.tu&&($he_so_qd$$=$qddct$$.tu/$qddct$$.mau));$item$$.he_so_qd=$he_so_qd$$}}]);$details$$.filter($i$$=>$i$$.sl_xuat!=void 0).forEach($item$$=>{$item$$.sl_xuat_qd=($item$$.sl_xuat||0)*$item$$.he_so_qd});$callback1$$()})},
29
+ function(){$callback$$()})},details_tt1:function($callback$$){async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($d$$=>$d$$.ma_tt1).joinModel2($id_app$$,"dmtt",[{where:{ma_vt:"ma_vt",ma_tt1:"ma_tt"},setFields:($item$$,$ref$$)=>{$item$$.thuoc_tinh=$ref$$;$item$$.nh_tt||($item$$.nh_tt=$ref$$.nh_tt)}}],function(){$callback1$$()})},function(){$callback$$()})},details_csck:function($callback$$){async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($d$$=>$d$$.id_cs_ck).joinModel2($id_app$$,
30
+ "dmchietkhau",[{where:{id_cs_ck:"_id"},setFields:($item$$,$ref$$)=>{$item$$.ten_chietkhau=$ref$$.ten_chietkhau}}],function(){$callback1$$()})},function(){$callback$$()})},details_dt:function($callback$$){async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_dt).joinModel2($id_app$$,dmdt,[{where:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_contract:function($callback$$){async.map($items$$,function($r$$,
31
+ $callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_hd).joinModel2($id_app$$,contract,[{where:{ma_hd:"so_hd"},fields:[{name:"ten_hd",value:"ten_hd"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_phi:function($callback$$){async.map($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_phi).joinModel2($id_app$$,dmphi,[{where:"ma_phi",fields:[{name:"ten_phi",value:"ten_phi"}]}],function(){$callback1$$()})},function(){$callback$$()})},details_chietkhau:function($callback$$){async.map($items$$,
32
+ function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.id_cs_ck).joinModel2($id_app$$,"dmchietkhau",[{where:{id_cs_ck:"_id"},fields:["ma_chietkhau","ten_chietkhau"]}],function(){$callback1$$()})},function(){$callback$$()})}},function(){$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai","color"]}],function(){$fn$$(null,$items$$)})})};$contr_router$$.on("saved",async function($obj$$){try{if($obj$$.ma_kh&&
33
+ $obj$$.dia_chi_nguoi_nhan){var $kh$$=await customer.findOne({ma_kh:$obj$$.ma_kh,id_app:$obj$$.id_app}).lean();if($kh$$){var $ecomuser_address$$=global.getModel("ecomuser_address"),$ten_nguoi_nhan$$=$obj$$.ten_nguoi_nhan||$kh$$.ten_kh,$sdt_nguoi_nhan$$=$obj$$.sdt_nguoi_nhan||$kh$$.dien_thoai,$tinh_thanh$$=$obj$$.tinh_thanh||$kh$$.tinh_thanh,$quan_huyen$$=$obj$$.quan_huyen||$kh$$.quan_huyen,$xa_phuong$$=$obj$$.xa_phuong||$kh$$.xa_phuong,$dia_chi$$=$obj$$.dia_chi_nguoi_nhan;await $ecomuser_address$$.findOne({ma_kh:$obj$$.ma_kh,
34
+ id_app:$obj$$.id_app,tinh_thanh:$tinh_thanh$$,quan_huyen:$quan_huyen$$,xa_phuong:$xa_phuong$$,dia_chi:$dia_chi$$}).lean()||await $ecomuser_address$$.create({loai_dia_chi:"2",id_app:$obj$$.id_app,ma_kh:$obj$$.ma_kh,ten_nguoi_nhan:$ten_nguoi_nhan$$,sdt_nguoi_nhan:$sdt_nguoi_nhan$$,email_nguoi_nhan:$obj$$.email_nguoi_nhan||$kh$$.email,dia_chi:$dia_chi$$,tinh_thanh:$tinh_thanh$$,quan_huyen:$quan_huyen$$,xa_phuong:$xa_phuong$$,ghi_chu:$obj$$.note_ship,ngam_dinh:!0,status:!0,user_created:$obj$$.user_created})}}}catch($e$$){Logger.error("Can't auto create address for customer",
35
+ $e$$)}})};
@@ -0,0 +1,6 @@
1
+ const dvcs=global.getModel("dvcs"),dmvt=global.getModel("dmvt"),dmdt=global.getModel("dmdt"),congdoansx=global.getModel("congdoansx"),sale_contract=global.getModel("sale_contract"),model=global.getModel("dinhmucsx"),trangthai=global.getModel("trangthai"),controller=require("../../controllers/controller"),async=require("async"),ma_ct="DINHMUCSX";
2
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{isVoucher:!0,check_stock:!1,sort:{ngay_ct:-1,so_ct:-1}});$contr_router$$.route();const $valid$$=function($user$$,$obj$$,$next$$){$next$$(null,$obj$$)};$contr_router$$.creating=function($user$$,$obj$$,$next$$){$obj$$.details||($obj$$.details=[]);$valid$$($user$$,$obj$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$obj$$)})};$contr_router$$.created=function($user$$,
3
+ $obj$$,$next$$){$next$$(null,$obj$$)};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$next$$){$valid$$($user$$,$data$$,function($error$$){if($error$$)return $next$$($error$$);$next$$(null,$data$$,$obj$$)})};$contr_router$$.updated=function($user$$,$obj$$,$next$$){$next$$(null,$obj$$)};$contr_router$$.deleting=function($user$$,$obj$$,$next$$){$next$$(null,$obj$$)};$contr_router$$.view=function($user$$,$items$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.series({dv:function($callback$$){$items$$.filter($item$$=>
4
+ $item$$.ma_dvcs).joinModel($id_app$$,dvcs,[{akey:"ma_dvcs",bkey:"_id",fields:[{name:"ten_dvcs",value:"ten_dvcs"}]}],function(){$callback$$()})},dt:function($callback$$){$items$$.filter($item$$=>$item$$.ma_dt).joinModel($id_app$$,dmdt,[{akey:"ma_dt",bkey:"ma_dt",fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback$$()})},trangthai:function($callback$$){$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,trangthai,[{where:{trang_thai:"ma_trang_thai",ma_ct:"ma_ct"},fields:["ten_trang_thai",
5
+ "color"]}],function(){$callback$$()})},details_vt:function($callback$$){async.each($items$$,function($r$$,$callback1$$){($r$$.details||[]).joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt"}],function(){$callback1$$()})},function(){$callback$$()})},san_pham:function($callback$$){$items$$.filter($item$$=>$item$$.ma_sp).joinModel2($id_app$$,dmvt,{where:{ma_sp:"ma_vt"},fields:{ten_sp:"ten_vt"}},function(){$callback$$()})},sale_contract:function($callback$$){$items$$.filter($item$$=>$item$$.id_contract).joinModel2($id_app$$,
6
+ sale_contract,{where:{id_contract:"_id"},fields:{so_ct_contract:"so_ct"}},function(){$callback$$()})},congdoansx:function($callback$$){async.each($items$$,function($r$$,$callback1$$){($r$$.details||[]).filter($item$$=>$item$$.ma_cong_doan).joinModel2($id_app$$,congdoansx,{where:{ma_cong_doan:"ma_cong_doan"},fields:{ten_cong_doan:"ten_cong_doan"}},function(){$callback1$$()})},function(){$callback$$()})}},function(){$fn$$(null,$items$$)})}};