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.
- package/package.json +5 -5
- package/server/app.js +23 -348
- package/server/cluster.js +1 -5
- package/server/models/account.js +7 -0
- package/server/models/actionLog.js +2 -0
- package/server/models/afflink.js +2 -0
- package/server/models/aimemory.js +1 -0
- package/server/models/app.js +16 -0
- package/server/models/approve.js +95 -0
- package/server/models/assabcihandler.js +35 -0
- package/server/models/assbank.js +19 -0
- package/server/models/assbooking.js +4 -0
- package/server/models/assbuy.js +3 -0
- package/server/models/asscashwithdraw.js +4 -0
- package/server/models/assfindhash.js +2 -0
- package/server/models/assinvestment.js +13 -0
- package/server/models/assissue.js +2 -0
- package/server/models/asskey.js +15 -0
- package/server/models/assneedtobuy.js +6 -0
- package/server/models/assperiod.js +7 -0
- package/server/models/assproduct.js +13 -0
- package/server/models/assprofitsharing.js +4 -0
- package/server/models/assreceiver.js +2 -0
- package/server/models/assrequest.js +10 -0
- package/server/models/asssell.js +7 -0
- package/server/models/asstransaction.js +3 -0
- package/server/models/asstransfer.js +4 -0
- package/server/models/assuser_identity.js +4 -0
- package/server/models/asswithdraw.js +4 -0
- package/server/models/attend.js +2 -0
- package/server/models/banggiaban.js +8 -0
- package/server/models/bangtinhluong.js +6 -0
- package/server/models/base.js +1 -0
- package/server/models/bg1.js +9 -0
- package/server/models/bg2.js +10 -0
- package/server/models/cache.js +3 -0
- package/server/models/cacheDataReport.js +2 -0
- package/server/models/cacheSessionReport.js +5 -0
- package/server/models/calllog.js +4 -0
- package/server/models/cart.js +5 -0
- package/server/models/cddiem.js +2 -0
- package/server/models/cddt.js +3 -0
- package/server/models/cdkh.js +5 -0
- package/server/models/cdkhtheongay.js +5 -0
- package/server/models/cdnphep.js +2 -0
- package/server/models/cdtk.js +3 -0
- package/server/models/cdtktheongay.js +3 -0
- package/server/models/cdvt.js +5 -0
- package/server/models/cdvtnpp.js +6 -0
- package/server/models/cdvttheongay.js +5 -0
- package/server/models/chamcong.js +7 -0
- package/server/models/chat_message.js +2 -0
- package/server/models/chat_session.js +2 -0
- package/server/models/checkin.js +4 -0
- package/server/models/checkinactivity.js +3 -0
- package/server/models/checkinkpi.js +4 -0
- package/server/models/checkinlocation.js +2 -0
- package/server/models/chitietluongds.js +12 -0
- package/server/models/chitieukpi.js +3 -0
- package/server/models/chudethaoluan.js +3 -0
- package/server/models/ckgtluong.js +2 -0
- package/server/models/colleague.js +2 -0
- package/server/models/comment.js +4 -0
- package/server/models/congdoansx.js +4 -0
- package/server/models/congtacvien.js +4 -0
- package/server/models/congthuctinhgiaban.js +8 -0
- package/server/models/consultant.js +4 -0
- package/server/models/contract.js +6 -0
- package/server/models/counter.js +2 -0
- package/server/models/csluongtheods.js +3 -0
- package/server/models/csphucap.js +2 -0
- package/server/models/ctds.js +5 -0
- package/server/models/ctds2.js +7 -0
- package/server/models/currency.js +3 -0
- package/server/models/custom_report.js +1 -0
- package/server/models/customer.js +31 -0
- package/server/models/customer_care.js +2 -0
- package/server/models/data_list_config.js +7 -0
- package/server/models/databanle.js +8 -0
- package/server/models/datlich.js +4 -0
- package/server/models/deal.js +2 -0
- package/server/models/dh2.js +20 -0
- package/server/models/diagram.js +2 -0
- package/server/models/dinhmucsx.js +8 -0
- package/server/models/dkhoc.js +6 -0
- package/server/models/dknphep.js +2 -0
- package/server/models/dmban.js +4 -0
- package/server/models/dmbp.js +12 -0
- package/server/models/dmca.js +2 -0
- package/server/models/dmchietkhau.js +8 -0
- package/server/models/dmchietkhauhd.js +19 -0
- package/server/models/dmchinhanh.js +2 -0
- package/server/models/dmcpmh.js +2 -0
- package/server/models/dmdiemthuong.js +3 -0
- package/server/models/dmdoi.js +4 -0
- package/server/models/dmdoituongdanhgia.js +2 -0
- package/server/models/dmdt.js +8 -0
- package/server/models/dmdvt.js +3 -0
- package/server/models/dmgiaban.js +9 -0
- package/server/models/dmgiamua.js +5 -0
- package/server/models/dmgiathitruong.js +5 -0
- package/server/models/dmgiathitruong_ngay.js +2 -0
- package/server/models/dmgiathitruong_theodoi.js +2 -0
- package/server/models/dmhoahonghd.js +8 -0
- package/server/models/dmhoahongnpp.js +8 -0
- package/server/models/dmkc.js +3 -0
- package/server/models/dmkho.js +7 -0
- package/server/models/dmkhuyenmai.js +9 -0
- package/server/models/dmkhuyenmaihd.js +11 -0
- package/server/models/dmletet.js +2 -0
- package/server/models/dmlo.js +4 -0
- package/server/models/dmloaicong.js +4 -0
- package/server/models/dmloaitask.js +2 -0
- package/server/models/dmloaits.js +2 -0
- package/server/models/dmnckkm.js +4 -0
- package/server/models/dmnghiepvu.js +4 -0
- package/server/models/dmnguonvon.js +2 -0
- package/server/models/dmnhnv.js +4 -0
- package/server/models/dmnv.js +17 -0
- package/server/models/dmnvt.js +10 -0
- package/server/models/dmphi.js +3 -0
- package/server/models/dmqct.js +3 -0
- package/server/models/dmqddvt.js +3 -0
- package/server/models/dmtanggiamts.js +3 -0
- package/server/models/dmto.js +4 -0
- package/server/models/dmtt.js +6 -0
- package/server/models/dmvt.js +17 -0
- package/server/models/dmyt.js +4 -0
- package/server/models/dn0.js +13 -0
- package/server/models/dnm.js +11 -0
- package/server/models/dokho.js +2 -0
- package/server/models/domain.js +2 -0
- package/server/models/dvcs.js +3 -0
- package/server/models/ecomcategories.js +3 -0
- package/server/models/ecomcategories_cty.js +3 -0
- package/server/models/ecomproductlines.js +2 -0
- package/server/models/ecompromotion_flashsales.js +2 -0
- package/server/models/ecompromotion_freeships.js +2 -0
- package/server/models/email.js +2 -0
- package/server/models/endpoint.js +1 -0
- package/server/models/events.js +3 -0
- package/server/models/evoucher.js +5 -0
- package/server/models/experiencejourney.js +2 -0
- package/server/models/experiencejourneydata.js +4 -0
- package/server/models/experiencejourneypersona.js +3 -0
- package/server/models/experiencejourneystage.js +2 -0
- package/server/models/exportexceltemplate.js +2 -0
- package/server/models/fbconversation.js +15 -0
- package/server/models/fbmessage.js +2 -0
- package/server/models/fbpage.js +2 -0
- package/server/models/fbpost.js +2 -0
- package/server/models/fieldright.js +2 -0
- package/server/models/fifo_dk.js +2 -0
- package/server/models/fifo_lot.js +3 -0
- package/server/models/fifo_trace.js +4 -0
- package/server/models/file.js +4 -0
- package/server/models/filechunk.js +2 -0
- package/server/models/financialroadmap.js +3 -0
- package/server/models/flow.js +2 -0
- package/server/models/flowdata.js +3 -0
- package/server/models/flowpending.js +2 -0
- package/server/models/folder.js +4 -0
- package/server/models/follow.js +2 -0
- package/server/models/forminfo.js +5 -0
- package/server/models/giaoca.js +4 -0
- package/server/models/giatb.js +3 -0
- package/server/models/group.js +9 -0
- package/server/models/gt_ctgt.js +4 -0
- package/server/models/gt_hspb.js +3 -0
- package/server/models/gt_sltk.js +3 -0
- package/server/models/gt_thcppstk.js +3 -0
- package/server/models/hanmucton.js +4 -0
- package/server/models/hd1.js +11 -0
- package/server/models/hd2.js +26 -0
- package/server/models/hd3.js +17 -0
- package/server/models/hd4.js +13 -0
- package/server/models/hd7.js +17 -0
- package/server/models/hd8.js +12 -0
- package/server/models/hde.js +11 -0
- package/server/models/hmcn.js +3 -0
- package/server/models/hmcnct.js +2 -0
- package/server/models/hspbts.js +4 -0
- package/server/models/htl.js +13 -0
- package/server/models/importexceltemplate.js +2 -0
- package/server/models/introducebonus.js +4 -0
- package/server/models/introducecode.js +3 -0
- package/server/models/introducer.js +4 -0
- package/server/models/kbbtpb.js +7 -0
- package/server/models/kbmPttct.js +4 -0
- package/server/models/kbmTkgtgt.js +5 -0
- package/server/models/kbm_bcdkt_old.js +4 -0
- package/server/models/kbm_kqhdkd_old.js +3 -0
- package/server/models/kbm_lcttgt_old.js +5 -0
- package/server/models/kbm_lctttt_old.js +4 -0
- package/server/models/kbm_pttct_old.js +4 -0
- package/server/models/kbm_tkgtgt_old.js +5 -0
- package/server/models/kbmbcdkt.js +4 -0
- package/server/models/kbmbcqt.js +4 -0
- package/server/models/kbmkqhdkd.js +3 -0
- package/server/models/kbmlcttgt.js +6 -0
- package/server/models/kbmlctttt.js +4 -0
- package/server/models/kbmtmbctc.js +4 -0
- package/server/models/kehoachdtcp.js +3 -0
- package/server/models/kehoachmh.js +8 -0
- package/server/models/keyresult.js +7 -0
- package/server/models/khunghangthanhvien.js +3 -0
- package/server/models/label.js +2 -0
- package/server/models/labelinfo.js +2 -0
- package/server/models/lenhcapphat.js +8 -0
- package/server/models/lenhsx.js +8 -0
- package/server/models/lienhe.js +4 -0
- package/server/models/like_module.js +2 -0
- package/server/models/link.js +2 -0
- package/server/models/listinfo.js +1365 -0
- package/server/models/loaidiem.js +2 -0
- package/server/models/lock.js +2 -0
- package/server/models/log.js +8 -0
- package/server/models/mailaccount.js +3 -0
- package/server/models/mailgroup.js +3 -0
- package/server/models/mailreceived.js +2 -0
- package/server/models/mailsent.js +2 -0
- package/server/models/mailtemplate.js +2 -0
- package/server/models/maudanhgia.js +2 -0
- package/server/models/menuinfo.js +2 -0
- package/server/models/message.js +8 -0
- package/server/models/message2.js +4 -0
- package/server/models/message2setting.js +3 -0
- package/server/models/moduleinfo.js +4 -0
- package/server/models/momo.js +18 -0
- package/server/models/news.js +3 -0
- package/server/models/newsfeed.js +4 -0
- package/server/models/note.js +2 -0
- package/server/models/notification.js +8 -0
- package/server/models/okr.js +4 -0
- package/server/models/okrdiagram.js +3 -0
- package/server/models/onepay.js +24 -0
- package/server/models/opportunity.js +4 -0
- package/server/models/options.js +2 -0
- package/server/models/originimportid.js +1 -0
- package/server/models/otp.js +1 -0
- package/server/models/parameter.js +2 -0
- package/server/models/participant.js +21 -0
- package/server/models/partner.js +1 -0
- package/server/models/payload.js +1 -0
- package/server/models/pbl.js +16 -0
- package/server/models/pc0.js +13 -0
- package/server/models/pc1.js +14 -0
- package/server/models/pc2.js +13 -0
- package/server/models/pc3.js +13 -0
- package/server/models/pc5.js +8 -0
- package/server/models/pc6.js +14 -0
- package/server/models/pcl.js +6 -0
- package/server/models/pdn.js +9 -0
- package/server/models/pdx.js +9 -0
- package/server/models/pgh.js +5 -0
- package/server/models/phieudanhgia.js +3 -0
- package/server/models/pht.js +8 -0
- package/server/models/phucap.js +4 -0
- package/server/models/pkc.js +6 -0
- package/server/models/pkh.js +6 -0
- package/server/models/pkk.js +10 -0
- package/server/models/pkt.js +12 -0
- package/server/models/pn1.js +18 -0
- package/server/models/pn2.js +12 -0
- package/server/models/pn3.js +13 -0
- package/server/models/pn5.js +14 -0
- package/server/models/pn6.js +14 -0
- package/server/models/pn9.js +17 -0
- package/server/models/pnc.js +9 -0
- package/server/models/pnh.js +11 -0
- package/server/models/pnk.js +10 -0
- package/server/models/po1.js +19 -0
- package/server/models/ppb.js +6 -0
- package/server/models/productcode.js +2 -0
- package/server/models/profile.js +4 -0
- package/server/models/pt1.js +12 -0
- package/server/models/pt5.js +8 -0
- package/server/models/ptl.js +5 -0
- package/server/models/ptthanhtoan.js +6 -0
- package/server/models/purchase_contract.js +17 -0
- package/server/models/pxc.js +9 -0
- package/server/models/pxh.js +11 -0
- package/server/models/pxk.js +9 -0
- package/server/models/qts.js +14 -0
- package/server/models/qts_dieuchinh.js +3 -0
- package/server/models/qts_dieuchuyen.js +4 -0
- package/server/models/quanhuyen.js +2 -0
- package/server/models/reason.js +2 -0
- package/server/models/receivedinvoice.js +2 -0
- package/server/models/reportinfo.js +5 -0
- package/server/models/right.js +4 -0
- package/server/models/rpt.js +2 -0
- package/server/models/rptform.js +3 -0
- package/server/models/rptobject.js +2 -0
- package/server/models/sale_contract.js +9 -0
- package/server/models/schedule.js +18 -0
- package/server/models/schedule_log.js +2 -0
- package/server/models/shipbook.js +12 -0
- package/server/models/shortcut.js +2 -0
- package/server/models/smsaccount.js +10 -0
- package/server/models/smssend.js +2 -0
- package/server/models/so1.js +22 -0
- package/server/models/so5.js +15 -0
- package/server/models/so9.js +19 -0
- package/server/models/socai.js +28 -0
- package/server/models/socainpp.js +18 -0
- package/server/models/socaitc.js +6 -0
- package/server/models/socaitmp.js +16 -0
- package/server/models/socaitt.js +4 -0
- package/server/models/sodiemthuong.js +4 -0
- package/server/models/sokho.js +27 -0
- package/server/models/sokhocapphat.js +18 -0
- package/server/models/sokhokhongton.js +19 -0
- package/server/models/sokhonpp.js +19 -0
- package/server/models/sokhotc.js +8 -0
- package/server/models/sokhott.js +18 -0
- package/server/models/sophanbokh.js +3 -0
- package/server/models/sosanxuat.js +5 -0
- package/server/models/sotinhkh.js +2 -0
- package/server/models/spdd_ck.js +3 -0
- package/server/models/spdd_dk.js +3 -0
- package/server/models/step.js +2 -0
- package/server/models/strategicdiagram.js +3 -0
- package/server/models/strategicgoal.js +4 -0
- package/server/models/strategickpi.js +6 -0
- package/server/models/strategicobjective.js +5 -0
- package/server/models/strategicplan.js +5 -0
- package/server/models/subscribe.js +2 -0
- package/server/models/support.js +2 -0
- package/server/models/synctime.js +2 -0
- package/server/models/sys_job_queue_book_keeping.js +2 -0
- package/server/models/sysconfig.js +2 -0
- package/server/models/sysgroup.js +2 -0
- package/server/models/tableinfo.js +3 -0
- package/server/models/task.js +9 -0
- package/server/models/tc.js +2 -0
- package/server/models/tdttco.js +9 -0
- package/server/models/tdttco_tt.js +5 -0
- package/server/models/tdttno.js +9 -0
- package/server/models/tdttno_tt.js +5 -0
- package/server/models/templaterpt.js +2 -0
- package/server/models/templatestore.js +3 -0
- package/server/models/templatevoucher.js +3 -0
- package/server/models/tinhthanh.js +2 -0
- package/server/models/tokens.js +3 -0
- package/server/models/tontucthoi.js +9 -0
- package/server/models/trangthai.js +4 -0
- package/server/models/trangthaiapp.js +4 -0
- package/server/models/transaction.js +16 -0
- package/server/models/trialinfo.js +2 -0
- package/server/models/user.js +40 -0
- package/server/models/usergroup.js +7 -0
- package/server/models/vanchuyen.js +12 -0
- package/server/models/vat.js +3 -0
- package/server/models/vatra.js +6 -0
- package/server/models/vatvao.js +6 -0
- package/server/models/versioninfo.js +2 -0
- package/server/models/vietqrbanks.js +2 -0
- package/server/models/vsocai.js +6 -0
- package/server/models/wallet.js +8 -0
- package/server/models/warranty.js +3 -0
- package/server/models/warrantyclaim.js +2 -0
- package/server/models/warrantypolicy.js +1 -0
- package/server/models/workflow.js +4 -0
- package/server/models/xaphuong.js +2 -0
- package/server/models/xhd.js +10 -0
- package/server/models/ytdd_ck.js +4 -0
- package/server/models/ytdd_dk.js +4 -0
- package/server/models/zalo.js +17 -0
- package/server/modules/lists/bg-cddiem.js +6 -0
- package/server/modules/lists/bg-cddt.js +7 -0
- package/server/modules/lists/bg-cdkh.js +11 -0
- package/server/modules/lists/bg-cdnphep.js +6 -0
- package/server/modules/lists/bg-cdtk.js +9 -0
- package/server/modules/lists/bg-cdvt.js +8 -0
- package/server/modules/lists/bg-cdvtnpp.js +8 -0
- package/server/modules/lists/bg-fifo_dk.js +8 -0
- package/server/modules/lists/ls-account.js +4 -0
- package/server/modules/lists/ls-afflink.js +3 -0
- package/server/modules/lists/ls-approve.js +5 -0
- package/server/modules/lists/ls-assabcihandler.js +3 -0
- package/server/modules/lists/ls-assbank.js +3 -0
- package/server/modules/lists/ls-assbooking.js +20 -0
- package/server/modules/lists/ls-assbuy.js +8 -0
- package/server/modules/lists/ls-asscashwithdraw.js +8 -0
- package/server/modules/lists/ls-assinvestment.js +31 -0
- package/server/modules/lists/ls-assissue.js +3 -0
- package/server/modules/lists/ls-asskey.js +41 -0
- package/server/modules/lists/ls-assneedtobuy.js +10 -0
- package/server/modules/lists/ls-assperiod.js +19 -0
- package/server/modules/lists/ls-assproduct.js +9 -0
- package/server/modules/lists/ls-assprofitsharing.js +8 -0
- package/server/modules/lists/ls-assreceiver.js +3 -0
- package/server/modules/lists/ls-assrequest.js +4 -0
- package/server/modules/lists/ls-asssell.js +13 -0
- package/server/modules/lists/ls-asstransaction.js +3 -0
- package/server/modules/lists/ls-asstransfer.js +3 -0
- package/server/modules/lists/ls-assuser_identity.js +1 -0
- package/server/modules/lists/ls-asswithdraw.js +12 -0
- package/server/modules/lists/ls-bangtinhluong.js +2 -0
- package/server/modules/lists/ls-calllog.js +4 -0
- package/server/modules/lists/ls-cart.js +14 -0
- package/server/modules/lists/ls-chamcong.js +3 -0
- package/server/modules/lists/ls-chat_session.js +5 -0
- package/server/modules/lists/ls-checkin.js +24 -0
- package/server/modules/lists/ls-checkinactivity.js +8 -0
- package/server/modules/lists/ls-checkinkpi.js +3 -0
- package/server/modules/lists/ls-checkinlocation.js +1 -0
- package/server/modules/lists/ls-chitietluongds.js +4 -0
- package/server/modules/lists/ls-chitieukpi.js +1 -0
- package/server/modules/lists/ls-chudethaoluan.js +1 -0
- package/server/modules/lists/ls-ckgtluong.js +1 -0
- package/server/modules/lists/ls-comment.js +9 -0
- package/server/modules/lists/ls-congdoansx.js +3 -0
- package/server/modules/lists/ls-congtacvien.js +5 -0
- package/server/modules/lists/ls-consultant.js +2 -0
- package/server/modules/lists/ls-contract.js +7 -0
- package/server/modules/lists/ls-csluongtheods.js +1 -0
- package/server/modules/lists/ls-csphucap.js +1 -0
- package/server/modules/lists/ls-ctds.js +4 -0
- package/server/modules/lists/ls-ctds2.js +4 -0
- package/server/modules/lists/ls-currency.js +1 -0
- package/server/modules/lists/ls-customer.js +22 -0
- package/server/modules/lists/ls-customer_care.js +1 -0
- package/server/modules/lists/ls-datlich.js +9 -0
- package/server/modules/lists/ls-dckhauhaots.js +3 -0
- package/server/modules/lists/ls-deal.js +3 -0
- package/server/modules/lists/ls-diagram.js +1 -0
- package/server/modules/lists/ls-dkhoc.js +6 -0
- package/server/modules/lists/ls-dknphep.js +1 -0
- package/server/modules/lists/ls-dmban.js +4 -0
- package/server/modules/lists/ls-dmbp.js +7 -0
- package/server/modules/lists/ls-dmca.js +1 -0
- package/server/modules/lists/ls-dmchietkhau.js +19 -0
- package/server/modules/lists/ls-dmchietkhauhd.js +4 -0
- package/server/modules/lists/ls-dmchinhanh.js +1 -0
- package/server/modules/lists/ls-dmchucvu.js +2 -0
- package/server/modules/lists/ls-dmcpmh.js +1 -0
- package/server/modules/lists/ls-dmdiemthuong.js +4 -0
- package/server/modules/lists/ls-dmdoi.js +4 -0
- package/server/modules/lists/ls-dmdoituongdanhgia.js +1 -0
- package/server/modules/lists/ls-dmdt.js +11 -0
- package/server/modules/lists/ls-dmdvt.js +2 -0
- package/server/modules/lists/ls-dmgiaban.js +4 -0
- package/server/modules/lists/ls-dmgiamua.js +4 -0
- package/server/modules/lists/ls-dmgiathitruong.js +15 -0
- package/server/modules/lists/ls-dmgiathitruong_ngay.js +2 -0
- package/server/modules/lists/ls-dmgiathitruong_theodoi.js +1 -0
- package/server/modules/lists/ls-dmhoahonghd.js +1 -0
- package/server/modules/lists/ls-dmhoahongnpp.js +1 -0
- package/server/modules/lists/ls-dmkc.js +3 -0
- package/server/modules/lists/ls-dmkho.js +7 -0
- package/server/modules/lists/ls-dmkhuyenmai.js +5 -0
- package/server/modules/lists/ls-dmkhuyenmaihd.js +3 -0
- package/server/modules/lists/ls-dmletet.js +1 -0
- package/server/modules/lists/ls-dmlo.js +1 -0
- package/server/modules/lists/ls-dmloaicong.js +1 -0
- package/server/modules/lists/ls-dmloaits.js +1 -0
- package/server/modules/lists/ls-dmnckkm.js +7 -0
- package/server/modules/lists/ls-dmnghiepvu.js +1 -0
- package/server/modules/lists/ls-dmnguonvon.js +1 -0
- package/server/modules/lists/ls-dmnhnv.js +6 -0
- package/server/modules/lists/ls-dmnhtask.js +5 -0
- package/server/modules/lists/ls-dmnkh.js +6 -0
- package/server/modules/lists/ls-dmntt.js +6 -0
- package/server/modules/lists/ls-dmnv.js +14 -0
- package/server/modules/lists/ls-dmnvt.js +7 -0
- package/server/modules/lists/ls-dmphi.js +6 -0
- package/server/modules/lists/ls-dmqct.js +2 -0
- package/server/modules/lists/ls-dmqddvt.js +3 -0
- package/server/modules/lists/ls-dmtanggiamts.js +1 -0
- package/server/modules/lists/ls-dmto.js +5 -0
- package/server/modules/lists/ls-dmtt.js +7 -0
- package/server/modules/lists/ls-dmvt.js +52 -0
- package/server/modules/lists/ls-dmyt.js +1 -0
- package/server/modules/lists/ls-dokho.js +1 -0
- package/server/modules/lists/ls-dvcs.js +1 -0
- package/server/modules/lists/ls-ecomcategories.js +5 -0
- package/server/modules/lists/ls-ecomcategories_cty.js +5 -0
- package/server/modules/lists/ls-email.js +4 -0
- package/server/modules/lists/ls-events.js +3 -0
- package/server/modules/lists/ls-evoucher.js +3 -0
- package/server/modules/lists/ls-experiencejourney.js +1 -0
- package/server/modules/lists/ls-experiencejourneydata.js +3 -0
- package/server/modules/lists/ls-experiencejourneypersona.js +4 -0
- package/server/modules/lists/ls-experiencejourneystage.js +1 -0
- package/server/modules/lists/ls-fbconversation.js +2 -0
- package/server/modules/lists/ls-fbmessage.js +2 -0
- package/server/modules/lists/ls-fbpage.js +11 -0
- package/server/modules/lists/ls-fbpost.js +2 -0
- package/server/modules/lists/ls-file.js +38 -0
- package/server/modules/lists/ls-financialroadmap.js +3 -0
- package/server/modules/lists/ls-flow.js +6 -0
- package/server/modules/lists/ls-flowdata.js +1 -0
- package/server/modules/lists/ls-flowpending.js +3 -0
- package/server/modules/lists/ls-folder.js +1 -0
- package/server/modules/lists/ls-forminfo.js +1 -0
- package/server/modules/lists/ls-giaoca.js +5 -0
- package/server/modules/lists/ls-group.js +5 -0
- package/server/modules/lists/ls-hmcn.js +2 -0
- package/server/modules/lists/ls-hspbts.js +3 -0
- package/server/modules/lists/ls-introducebonus.js +4 -0
- package/server/modules/lists/ls-introducecode.js +10 -0
- package/server/modules/lists/ls-introducer.js +21 -0
- package/server/modules/lists/ls-kbm-bcdkt.js +1 -0
- package/server/modules/lists/ls-kbm-bcqt.js +5 -0
- package/server/modules/lists/ls-kbm-kqhdkd.js +1 -0
- package/server/modules/lists/ls-kbm-lcttgt.js +1 -0
- package/server/modules/lists/ls-kbm-lctttt.js +1 -0
- package/server/modules/lists/ls-kbm-pttct.js +3 -0
- package/server/modules/lists/ls-kbm-tkgtgt.js +3 -0
- package/server/modules/lists/ls-kbm-tmbctc.js +3 -0
- package/server/modules/lists/ls-kehoachdtcp.js +4 -0
- package/server/modules/lists/ls-keyresult.js +7 -0
- package/server/modules/lists/ls-khunghangthanhvien.js +1 -0
- package/server/modules/lists/ls-label.js +1 -0
- package/server/modules/lists/ls-lienhe.js +4 -0
- package/server/modules/lists/ls-like-module.js +1 -0
- package/server/modules/lists/ls-link.js +1 -0
- package/server/modules/lists/ls-loaidiem.js +1 -0
- package/server/modules/lists/ls-lock.js +1 -0
- package/server/modules/lists/ls-log.js +3 -0
- package/server/modules/lists/ls-mailaccount.js +5 -0
- package/server/modules/lists/ls-mailreceived.js +5 -0
- package/server/modules/lists/ls-mailsent.js +4 -0
- package/server/modules/lists/ls-mailtemplate.js +4 -0
- package/server/modules/lists/ls-maudanhgia.js +3 -0
- package/server/modules/lists/ls-message2.js +8 -0
- package/server/modules/lists/ls-message2setting.js +5 -0
- package/server/modules/lists/ls-news.js +7 -0
- package/server/modules/lists/ls-newsfeed.js +4 -0
- package/server/modules/lists/ls-note.js +6 -0
- package/server/modules/lists/ls-okr.js +5 -0
- package/server/modules/lists/ls-okrdiagram.js +1 -0
- package/server/modules/lists/ls-opportunity.js +5 -0
- package/server/modules/lists/ls-options.js +4 -0
- package/server/modules/lists/ls-parameter.js +3 -0
- package/server/modules/lists/ls-participant.js +12 -0
- package/server/modules/lists/ls-phieudanhgia.js +7 -0
- package/server/modules/lists/ls-phucap.js +2 -0
- package/server/modules/lists/ls-productcode.js +9 -0
- package/server/modules/lists/ls-profile.js +1 -0
- package/server/modules/lists/ls-ptthanhtoan.js +3 -0
- package/server/modules/lists/ls-qts-dieuchinh.js +2 -0
- package/server/modules/lists/ls-qts-dieuchuyen.js +8 -0
- package/server/modules/lists/ls-reason.js +1 -0
- package/server/modules/lists/ls-rpt.js +5 -0
- package/server/modules/lists/ls-rptform.js +3 -0
- package/server/modules/lists/ls-shortcut.js +1 -0
- package/server/modules/lists/ls-smsaccount.js +1 -0
- package/server/modules/lists/ls-smssend.js +3 -0
- package/server/modules/lists/ls-sosanxuat.js +4 -0
- package/server/modules/lists/ls-step.js +1 -0
- package/server/modules/lists/ls-strategicdiagram.js +1 -0
- package/server/modules/lists/ls-strategicgoal.js +3 -0
- package/server/modules/lists/ls-strategickpi.js +7 -0
- package/server/modules/lists/ls-strategicobjective.js +3 -0
- package/server/modules/lists/ls-strategicplan.js +6 -0
- package/server/modules/lists/ls-support.js +3 -0
- package/server/modules/lists/ls-task.js +28 -0
- package/server/modules/lists/ls-tc.js +1 -0
- package/server/modules/lists/ls-templaterpt.js +5 -0
- package/server/modules/lists/ls-templatevoucher.js +1 -0
- package/server/modules/lists/ls-tontucthoi.js +3 -0
- package/server/modules/lists/ls-trangthaiapp.js +3 -0
- package/server/modules/lists/ls-transaction.js +4 -0
- package/server/modules/lists/ls-usergroup.js +7 -0
- package/server/modules/lists/ls-vat.js +1 -0
- package/server/modules/lists/ls-vatra.js +5 -0
- package/server/modules/lists/ls-vatvao.js +6 -0
- package/server/modules/lists/ls-warranty.js +3 -0
- package/server/modules/lists/ls-workflow.js +1 -0
- package/server/modules/lists/ls_hanmucton.js +3 -0
- package/server/modules/lists/ls_hspb.js +4 -0
- package/server/modules/lists/ls_spdd_ck.js +3 -0
- package/server/modules/lists/ls_spdd_dk.js +3 -0
- package/server/modules/lists/ls_ytdd_ck.js +4 -0
- package/server/modules/lists/ls_ytdd_dk.js +4 -0
- package/server/modules/lists/sys-attend.js +4 -0
- package/server/modules/lists/sys-follow.js +4 -0
- package/server/modules/lists/sys-right.js +2 -0
- package/server/modules/public/app.js +4 -0
- package/server/modules/public/approve.js +37 -0
- package/server/modules/public/callin.js +7 -0
- package/server/modules/public/comment.js +5 -0
- package/server/modules/public/dmnvt.js +4 -0
- package/server/modules/public/dmvt.js +9 -0
- package/server/modules/public/file.js +11 -0
- package/server/modules/public/forminfo.js +1 -0
- package/server/modules/public/group.js +4 -0
- package/server/modules/public/introducecode.js +1 -0
- package/server/modules/public/listinfo.js +1 -0
- package/server/modules/public/media-webhook.js +1 -0
- package/server/modules/public/partner.js +1 -0
- package/server/modules/public/paymentCallback.js +32 -0
- package/server/modules/public/province.js +1 -0
- package/server/modules/public/ptthanhtoan.js +4 -0
- package/server/modules/public/subscribe.js +30 -0
- package/server/modules/public/support.js +3 -0
- package/server/modules/public/tableinfo.js +1 -0
- package/server/modules/public/trialinfo.js +4 -0
- package/server/modules/public/versioninfo.js +1 -0
- package/server/modules/reports/calc-tinhgiafifo.js +8 -0
- package/server/modules/reports/calc-tinhgiatb.js +7 -0
- package/server/modules/reports/calc-tinhgiathanh.js +7 -0
- package/server/modules/reports/calc-tinhkhauhaots.js +3 -0
- package/server/modules/reports/calc-tinhluong.js +68 -0
- package/server/modules/reports/rp-analyzedata.js +6 -0
- package/server/modules/reports/rp-assbonus.js +4 -0
- package/server/modules/reports/rp-assinterest.js +8 -0
- package/server/modules/reports/rp-assproductowners.js +3 -0
- package/server/modules/reports/rp-asssupply.js +1 -0
- package/server/modules/reports/rp-asstransferlog.js +10 -0
- package/server/modules/reports/rp-backup.js +4 -0
- package/server/modules/reports/rp-banggiatb.js +3 -0
- package/server/modules/reports/rp-bangtinhkhauhao.js +6 -0
- package/server/modules/reports/rp-baoCaoFifoKy.js +1 -0
- package/server/modules/reports/rp-baocaokhachhang.js +6 -0
- package/server/modules/reports/rp-bcdkt.js +11 -0
- package/server/modules/reports/rp-bcintroducebonus.js +4 -0
- package/server/modules/reports/rp-bckhtiemnang.js +3 -0
- package/server/modules/reports/rp-bcqt.js +85 -0
- package/server/modules/reports/rp-bkchamcong.js +5 -0
- package/server/modules/reports/rp-bkct.js +13 -0
- package/server/modules/reports/rp-bkshipbook.js +8 -0
- package/server/modules/reports/rp-bkvanchuyen.js +8 -0
- package/server/modules/reports/rp-bkvatra.js +7 -0
- package/server/modules/reports/rp-bkvatvao.js +7 -0
- package/server/modules/reports/rp-capnhatsocaitc.js +4 -0
- package/server/modules/reports/rp-cdpsdiem.js +4 -0
- package/server/modules/reports/rp-cdpsdt.js +5 -0
- package/server/modules/reports/rp-cdpskh.js +8 -0
- package/server/modules/reports/rp-cdpsnphep.js +3 -0
- package/server/modules/reports/rp-cdpstk.js +4 -0
- package/server/modules/reports/rp-chitietchitientheohoadon.js +12 -0
- package/server/modules/reports/rp-chitiettaisan.js +13 -0
- package/server/modules/reports/rp-chitietthutientheohoadon.js +13 -0
- package/server/modules/reports/rp-ckcn.js +3 -0
- package/server/modules/reports/rp-ckdiem.js +2 -0
- package/server/modules/reports/rp-cktk.js +3 -0
- package/server/modules/reports/rp-ckvt.js +10 -0
- package/server/modules/reports/rp-ckvttheokho.js +4 -0
- package/server/modules/reports/rp-ckvttheotg.js +4 -0
- package/server/modules/reports/rp-ckvttt.js +3 -0
- package/server/modules/reports/rp-congnophaithutheotuoino.js +3 -0
- package/server/modules/reports/rp-congnophaitratheotuoino.js +3 -0
- package/server/modules/reports/rp-congnosapthu.js +4 -0
- package/server/modules/reports/rp-congnosaptra.js +4 -0
- package/server/modules/reports/rp-congviectheobp.js +9 -0
- package/server/modules/reports/rp-congviectheodt.js +8 -0
- package/server/modules/reports/rp-congviectheokh.js +8 -0
- package/server/modules/reports/rp-congviectheonv.js +9 -0
- package/server/modules/reports/rp-congviectheotimeline.js +6 -0
- package/server/modules/reports/rp-ctbanle.js +15 -0
- package/server/modules/reports/rp-ctbanle2.js +20 -0
- package/server/modules/reports/rp-ctbanlectv.js +20 -0
- package/server/modules/reports/rp-ctbanlenpp.js +24 -0
- package/server/modules/reports/rp-ctdanhgianhanvien.js +8 -0
- package/server/modules/reports/rp-cthangbanbitralai.js +4 -0
- package/server/modules/reports/rp-ctmuahang.js +7 -0
- package/server/modules/reports/rp-cttralaihang.js +4 -0
- package/server/modules/reports/rp-databanle.js +10 -0
- package/server/modules/reports/rp-diemthuong.js +2 -0
- package/server/modules/reports/rp-dkcn.js +3 -0
- package/server/modules/reports/rp-dktk.js +2 -0
- package/server/modules/reports/rp-dsnhanviencm.js +9 -0
- package/server/modules/reports/rp-dsnhanvientb.js +9 -0
- package/server/modules/reports/rp-dtbanlekempk.js +12 -0
- package/server/modules/reports/rp-dtbanletheoct.js +22 -0
- package/server/modules/reports/rp-dtbanletheoctkempk.js +25 -0
- package/server/modules/reports/rp-dtbanletheokh.js +17 -0
- package/server/modules/reports/rp-dtbanletheokhnpp.js +19 -0
- package/server/modules/reports/rp-dtbanletheokho.js +15 -0
- package/server/modules/reports/rp-dtbanletheonam.js +3 -0
- package/server/modules/reports/rp-dtbanletheongay.js +1 -0
- package/server/modules/reports/rp-dtbanletheonpp.js +23 -0
- package/server/modules/reports/rp-dtbanletheonv.js +19 -0
- package/server/modules/reports/rp-dtbanletheoquy.js +3 -0
- package/server/modules/reports/rp-dtbanletheosp.js +9 -0
- package/server/modules/reports/rp-dtbanletheospnpp.js +6 -0
- package/server/modules/reports/rp-dtbanletheothang.js +3 -0
- package/server/modules/reports/rp-dtbanletheothungan.js +12 -0
- package/server/modules/reports/rp-dtbanletheovt.js +2 -0
- package/server/modules/reports/rp-dtbanletheovtnpp.js +2 -0
- package/server/modules/reports/rp-dutoanthuchitheodt.js +4 -0
- package/server/modules/reports/rp-getPXC2PNC.js +8 -0
- package/server/modules/reports/rp-getariseofaccountsbymonth.js +4 -0
- package/server/modules/reports/rp-getbtpb.js +6 -0
- package/server/modules/reports/rp-getcashbycashier.js +7 -0
- package/server/modules/reports/rp-getcschietkhau.js +5 -0
- package/server/modules/reports/rp-getdinhmuc4lenhcp.js +7 -0
- package/server/modules/reports/rp-getdinhmuc4pxk.js +9 -0
- package/server/modules/reports/rp-getdk4pht.js +8 -0
- package/server/modules/reports/rp-getdk4pkc.js +10 -0
- package/server/modules/reports/rp-getdttheoca.js +5 -0
- package/server/modules/reports/rp-getinvoice2pay.js +4 -0
- package/server/modules/reports/rp-getinvoice2receive.js +4 -0
- package/server/modules/reports/rp-getinvoice2return.js +5 -0
- package/server/modules/reports/rp-getinvoice2return_bl.js +6 -0
- package/server/modules/reports/rp-getkehoachmh4lenhcp.js +4 -0
- package/server/modules/reports/rp-getkhauhao.js +7 -0
- package/server/modules/reports/rp-getluong.js +8 -0
- package/server/modules/reports/rp-getluongchuyen.js +5 -0
- package/server/modules/reports/rp-getpn2fee.js +5 -0
- package/server/modules/reports/rp-getpn2return.js +5 -0
- package/server/modules/reports/rp-getthanhpham4pnk.js +7 -0
- package/server/modules/reports/rp-getvc2xhd.js +11 -0
- package/server/modules/reports/rp-gt_cpnvltt.js +6 -0
- package/server/modules/reports/rp-hangbanbitralai.js +5 -0
- package/server/modules/reports/rp-hangthanhvien.js +3 -0
- package/server/modules/reports/rp-hoadonbanhangtheohantt.js +5 -0
- package/server/modules/reports/rp-hoadonmuahangtheohantt.js +5 -0
- package/server/modules/reports/rp-hoahong.js +15 -0
- package/server/modules/reports/rp-kcsns.js +19 -0
- package/server/modules/reports/rp-kgchamcong.js +1 -0
- package/server/modules/reports/rp-khoaso.js +11 -0
- package/server/modules/reports/rp-kiemtrasocaitcvssocai.js +6 -0
- package/server/modules/reports/rp-kqdanhgianhanvien.js +5 -0
- package/server/modules/reports/rp-kqhdkd.js +1 -0
- package/server/modules/reports/rp-lcttgt.js +16 -0
- package/server/modules/reports/rp-lctttt.js +11 -0
- package/server/modules/reports/rp-linkslist.js +4 -0
- package/server/modules/reports/rp-phanbochitienchohoadon.js +11 -0
- package/server/modules/reports/rp-phanbothutienchohoadon.js +11 -0
- package/server/modules/reports/rp-ptbitralai.js +7 -0
- package/server/modules/reports/rp-ptcttct.js +24 -0
- package/server/modules/reports/rp-ptdonhang.js +8 -0
- package/server/modules/reports/rp-pttct.js +52 -0
- package/server/modules/reports/rp-pttctkho.js +32 -0
- package/server/modules/reports/rp-pttctkho2.js +29 -0
- package/server/modules/reports/rp-referredusers.js +5 -0
- package/server/modules/reports/rp-sctbhxh.js +4 -0
- package/server/modules/reports/rp-sctcnkh.js +11 -0
- package/server/modules/reports/rp-sctdiem.js +3 -0
- package/server/modules/reports/rp-sctdt.js +7 -0
- package/server/modules/reports/rp-sctdtcp.js +11 -0
- package/server/modules/reports/rp-sctluong.js +6 -0
- package/server/modules/reports/rp-sctthuetncn.js +4 -0
- package/server/modules/reports/rp-scttk.js +9 -0
- package/server/modules/reports/rp-sctvt.js +5 -0
- package/server/modules/reports/rp-sctvt_sl.js +5 -0
- package/server/modules/reports/rp-sctvtnpp.js +6 -0
- package/server/modules/reports/rp-sctvttt.js +5 -0
- package/server/modules/reports/rp-search.js +4 -0
- package/server/modules/reports/rp-socai.js +6 -0
- package/server/modules/reports/rp-socaitk.js +1 -0
- package/server/modules/reports/rp-sochut.js +7 -0
- package/server/modules/reports/rp-sokho.js +7 -0
- package/server/modules/reports/rp-sokhott.js +5 -0
- package/server/modules/reports/rp-sonkbh.js +5 -0
- package/server/modules/reports/rp-sonkc.js +6 -0
- package/server/modules/reports/rp-sonkct.js +5 -0
- package/server/modules/reports/rp-sonkmh.js +5 -0
- package/server/modules/reports/rp-sonktt.js +5 -0
- package/server/modules/reports/rp-soquy.js +11 -0
- package/server/modules/reports/rp-sosanhkhvatt.js +13 -0
- package/server/modules/reports/rp-sosanhkhvatt2.js +5 -0
- package/server/modules/reports/rp-sotaisan.js +13 -0
- package/server/modules/reports/rp-sotiengui.js +7 -0
- package/server/modules/reports/rp-taodinhmuctudkhoc.js +5 -0
- package/server/modules/reports/rp-thbanhangkempk.js +28 -0
- package/server/modules/reports/rp-thdanhgianhanvien.js +9 -0
- package/server/modules/reports/rp-thgt.js +6 -0
- package/server/modules/reports/rp-thnxt.js +11 -0
- package/server/modules/reports/rp-thnxt_sl.js +9 -0
- package/server/modules/reports/rp-thnxtnpp.js +10 -0
- package/server/modules/reports/rp-thnxttt.js +9 -0
- package/server/modules/reports/rp-tkbanhangtheogioithieu.js +9 -0
- package/server/modules/reports/rp-tkgioithieukh.js +4 -0
- package/server/modules/reports/rp-tkgtgt.js +76 -0
- package/server/modules/reports/rp-tkgtgt_old.js +7 -0
- package/server/modules/reports/rp-tmbctc.js +20 -0
- package/server/modules/reports/rp-tonghopbanhang.js +6 -0
- package/server/modules/reports/rp-tonghopmuahang.js +5 -0
- package/server/modules/reports/rp-tonghoptralaihang.js +5 -0
- package/server/modules/reports/rp-tongquanbanle.js +20 -0
- package/server/modules/reports/rp-tongquanbds.js +3 -0
- package/server/modules/reports/rp-tongquancongty.js +6 -0
- package/server/modules/reports/rp-tongquanctvnpp.js +12 -0
- package/server/modules/reports/rp-tongquannvbh.js +14 -0
- package/server/modules/reports/rp-tongquannvnpp.js +5 -0
- package/server/modules/reports/rp-uoctinhnvl.js +11 -0
- package/server/modules/reports/rp-wallet.js +3 -0
- package/server/modules/reports/rpt-tkdiemtichluy.js +9 -0
- package/server/modules/systems/sys-app.js +34 -0
- package/server/modules/systems/sys-colleague.js +11 -0
- package/server/modules/systems/sys-data_list_config.js +1 -0
- package/server/modules/systems/sys-domain.js +1 -0
- package/server/modules/systems/sys-ecomproductlines.js +1 -0
- package/server/modules/systems/sys-exportexceltemplate.js +1 -0
- package/server/modules/systems/sys-fieldright.js +1 -0
- package/server/modules/systems/sys-importexceltemplate.js +1 -0
- package/server/modules/systems/sys-labelinfo.js +4 -0
- package/server/modules/systems/sys-listinfo.js +10 -0
- package/server/modules/systems/sys-menuinfo.js +4 -0
- package/server/modules/systems/sys-message.js +14 -0
- package/server/modules/systems/sys-moduleinfo.js +4 -0
- package/server/modules/systems/sys-notification.js +8 -0
- package/server/modules/systems/sys-quanhuyen.js +1 -0
- package/server/modules/systems/sys-reportinfo.js +5 -0
- package/server/modules/systems/sys-rptobject.js +1 -0
- package/server/modules/systems/sys-schedule.js +10 -0
- package/server/modules/systems/sys-sysconfig.js +1 -0
- package/server/modules/systems/sys-sysgroup.js +1 -0
- package/server/modules/systems/sys-tableinfo.js +1 -0
- package/server/modules/systems/sys-templatestore.js +5 -0
- package/server/modules/systems/sys-tinhthanh.js +1 -0
- package/server/modules/systems/sys-token.js +3 -0
- package/server/modules/systems/sys-trangthai.js +3 -0
- package/server/modules/systems/sys-trialinfo.js +1 -0
- package/server/modules/systems/sys-user.js +45 -0
- package/server/modules/systems/sys-users.js +10 -0
- package/server/modules/systems/sys-versioninfo.js +1 -0
- package/server/modules/systems/sys-vietqrbanks.js +1 -0
- package/server/modules/systems/sys-xaphuong.js +1 -0
- package/server/modules/vouchers/vo-banggiaban.js +8 -0
- package/server/modules/vouchers/vo-bc1.js +34 -0
- package/server/modules/vouchers/vo-bc5.js +15 -0
- package/server/modules/vouchers/vo-bg1.js +10 -0
- package/server/modules/vouchers/vo-bg2.js +12 -0
- package/server/modules/vouchers/vo-bn1.js +36 -0
- package/server/modules/vouchers/vo-bn5.js +15 -0
- package/server/modules/vouchers/vo-dh2.js +35 -0
- package/server/modules/vouchers/vo-dinhmucsx.js +6 -0
- package/server/modules/vouchers/vo-dkb.js +21 -0
- package/server/modules/vouchers/vo-dn0.js +9 -0
- package/server/modules/vouchers/vo-dnm.js +20 -0
- package/server/modules/vouchers/vo-hd1.js +37 -0
- package/server/modules/vouchers/vo-hd2.js +108 -0
- package/server/modules/vouchers/vo-hd3.js +38 -0
- package/server/modules/vouchers/vo-hd4.js +13 -0
- package/server/modules/vouchers/vo-hd7.js +29 -0
- package/server/modules/vouchers/vo-hd8.js +29 -0
- package/server/modules/vouchers/vo-hde.js +39 -0
- package/server/modules/vouchers/vo-htl.js +11 -0
- package/server/modules/vouchers/vo-kbbtpb.js +6 -0
- package/server/modules/vouchers/vo-kehoachmh.js +11 -0
- package/server/modules/vouchers/vo-lenhcapphat.js +9 -0
- package/server/modules/vouchers/vo-lenhsx.js +12 -0
- package/server/modules/vouchers/vo-pbl.js +94 -0
- package/server/modules/vouchers/vo-pc0.js +14 -0
- package/server/modules/vouchers/vo-pc1.js +31 -0
- package/server/modules/vouchers/vo-pc2.js +25 -0
- package/server/modules/vouchers/vo-pc3.js +14 -0
- package/server/modules/vouchers/vo-pc5.js +15 -0
- package/server/modules/vouchers/vo-pc6.js +19 -0
- package/server/modules/vouchers/vo-pcl.js +7 -0
- package/server/modules/vouchers/vo-pdn.js +11 -0
- package/server/modules/vouchers/vo-pdx.js +9 -0
- package/server/modules/vouchers/vo-pgh.js +16 -0
- package/server/modules/vouchers/vo-pht.js +6 -0
- package/server/modules/vouchers/vo-pkc.js +5 -0
- package/server/modules/vouchers/vo-pkh.js +9 -0
- package/server/modules/vouchers/vo-pkk.js +12 -0
- package/server/modules/vouchers/vo-pkt.js +12 -0
- package/server/modules/vouchers/vo-pn1.js +30 -0
- package/server/modules/vouchers/vo-pn2.js +17 -0
- package/server/modules/vouchers/vo-pn3.js +18 -0
- package/server/modules/vouchers/vo-pn5.js +18 -0
- package/server/modules/vouchers/vo-pn6.js +18 -0
- package/server/modules/vouchers/vo-pn9.js +23 -0
- package/server/modules/vouchers/vo-pnc.js +19 -0
- package/server/modules/vouchers/vo-pnh.js +17 -0
- package/server/modules/vouchers/vo-pnk.js +14 -0
- package/server/modules/vouchers/vo-pnknpp.js +12 -0
- package/server/modules/vouchers/vo-po1.js +14 -0
- package/server/modules/vouchers/vo-ppb.js +8 -0
- package/server/modules/vouchers/vo-pt1.js +20 -0
- package/server/modules/vouchers/vo-pt5.js +15 -0
- package/server/modules/vouchers/vo-ptl.js +8 -0
- package/server/modules/vouchers/vo-purchase_contract.js +9 -0
- package/server/modules/vouchers/vo-pxc.js +24 -0
- package/server/modules/vouchers/vo-pxh.js +18 -0
- package/server/modules/vouchers/vo-pxk.js +15 -0
- package/server/modules/vouchers/vo-pxknpp.js +14 -0
- package/server/modules/vouchers/vo-qts.js +12 -0
- package/server/modules/vouchers/vo-sale_contract.js +11 -0
- package/server/modules/vouchers/vo-shipbook.js +17 -0
- package/server/modules/vouchers/vo-so1.js +125 -0
- package/server/modules/vouchers/vo-so5.js +57 -0
- package/server/modules/vouchers/vo-so7.js +97 -0
- package/server/modules/vouchers/vo-so9.js +119 -0
- package/server/modules/vouchers/vo-vanchuyen.js +14 -0
- package/server/modules/vouchers/vo-xhd.js +33 -0
|
@@ -0,0 +1,1365 @@
|
|
|
1
|
+
const controller = require('../controllers/controller');
|
|
2
|
+
const underscore =require('underscore');
|
|
3
|
+
const async = require("async");
|
|
4
|
+
const {evalute} = require("../libs/utils");
|
|
5
|
+
const utils = require("../libs/utils");
|
|
6
|
+
//const {isSupperAdmin} = require("../libs/utils");
|
|
7
|
+
const PostBook = require('../libs/post-book');
|
|
8
|
+
const PostSocai = require('../libs/post-socai');
|
|
9
|
+
const moment = require("moment");
|
|
10
|
+
const numeral = require("numeral");
|
|
11
|
+
const fs = require("fs");
|
|
12
|
+
const _ = require("lodash")
|
|
13
|
+
|
|
14
|
+
const controllerUtils = require("../controllers/controllerUtils");
|
|
15
|
+
|
|
16
|
+
const joinModel2 = (arr,id_app, model, joinFields, fn,options={cache:true})=>{
|
|
17
|
+
return [...arr].joinModel2(id_app, model, joinFields, fn,options);
|
|
18
|
+
}
|
|
19
|
+
const fieldScheme = new global.Schema(
|
|
20
|
+
{
|
|
21
|
+
stt:{type:Number,default:0},
|
|
22
|
+
stt_col:{type:Number,default:0},
|
|
23
|
+
name:{type: String, required: "Yêu cầu nhập mã trường",index:true,lowercase:true,trim:true},
|
|
24
|
+
type:{type: String, default:'String',trim:true},
|
|
25
|
+
form:{type: String,trim:true},//user for type array or Mixed
|
|
26
|
+
header:{type: String, required: "Yêu cầu nhập tên trường"},
|
|
27
|
+
header2:{type: String},
|
|
28
|
+
api_description:{type: String},//Miêu tả field trong tài liệu api
|
|
29
|
+
sort:Number,
|
|
30
|
+
unique:Boolean,
|
|
31
|
+
default:global.Schema.Types.Mixed,
|
|
32
|
+
lowercase:{type:Boolean,default:false},
|
|
33
|
+
uppercase:{type:Boolean,default:false},
|
|
34
|
+
required:global.Schema.Types.Mixed,
|
|
35
|
+
index:{type:Boolean,default:false},
|
|
36
|
+
is_tmp:{type:Boolean,default:false},
|
|
37
|
+
is_title:{type:Boolean,default:false},
|
|
38
|
+
on_view:{type:Boolean,default:true},
|
|
39
|
+
|
|
40
|
+
maxlength:Number,
|
|
41
|
+
min:global.Schema.Types.Mixed,
|
|
42
|
+
max:global.Schema.Types.Mixed,
|
|
43
|
+
ref_model:{type: String,trim:true},
|
|
44
|
+
ref_field:{type:String,trim:true},
|
|
45
|
+
ref_label:{type:String,trim:true},
|
|
46
|
+
ref_label_as:{type:String,trim:true},
|
|
47
|
+
ref_search_fields:{type:String,trim:true},
|
|
48
|
+
ref_data_fields:{type:String,trim:true},
|
|
49
|
+
ref_condition:{type:String,trim:true},
|
|
50
|
+
multiple:Boolean,
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
not_display:global.Schema.Types.Mixed,
|
|
54
|
+
not_input:global.Schema.Types.Mixed,
|
|
55
|
+
|
|
56
|
+
min_width_display:{type:Number,default:80},
|
|
57
|
+
format:{type:String},
|
|
58
|
+
align:{type:String},
|
|
59
|
+
color:{type:String},
|
|
60
|
+
bold:Boolean,
|
|
61
|
+
|
|
62
|
+
html_variant_display:{type:String},
|
|
63
|
+
html_component_display:{type:String},
|
|
64
|
+
html_component_input:{type:String},
|
|
65
|
+
|
|
66
|
+
render_on_list:String,
|
|
67
|
+
render_on_view:String,
|
|
68
|
+
render_title:String,
|
|
69
|
+
|
|
70
|
+
grid_configs:{type:String,trim:true},
|
|
71
|
+
|
|
72
|
+
handle_value_changed:{type:String,trim:true},
|
|
73
|
+
handle_value_changed_on_list:{type:String,trim:true},//script chạy khi dữ liệu được thay đổi trực tiếp trên grid
|
|
74
|
+
handle_search_condition:{type:String,trim:true},
|
|
75
|
+
|
|
76
|
+
tab:{type:String,trim:true},
|
|
77
|
+
group:{type:String,trim:true},
|
|
78
|
+
|
|
79
|
+
help_text:{type:String,trim:true},
|
|
80
|
+
line:{type:Number,default:0}
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
const listinfoSchema = new global.Schema({
|
|
84
|
+
menu_position:String,
|
|
85
|
+
code: {type: String, required: true,index:true,lowercase:true,trim:true},
|
|
86
|
+
title: {type: String, required: true},
|
|
87
|
+
title2: {type: String},
|
|
88
|
+
mother_code: {type: String,lowercase:true,trim:true},
|
|
89
|
+
api_code: {type: String,lowercase:true,trim:true},
|
|
90
|
+
model_code: {type: String,lowercase:true,trim:true},
|
|
91
|
+
used_by_3rd_systems: String,//Api được sử dụng bởi phần mềm nào. ví dụ n8n
|
|
92
|
+
|
|
93
|
+
fields:[fieldScheme],
|
|
94
|
+
postinfos:[global.Schema.Types.Mixed],
|
|
95
|
+
exfields:global.Schema.Types.Mixed,
|
|
96
|
+
create_model: {type: Boolean, default: false},
|
|
97
|
+
breadcrumbs: {type: String,trim:true},
|
|
98
|
+
permistion_code:String,
|
|
99
|
+
not_add:Boolean,
|
|
100
|
+
not_edit:Boolean,
|
|
101
|
+
not_delete:Boolean,
|
|
102
|
+
not_copy:Boolean,
|
|
103
|
+
//events
|
|
104
|
+
handle_cell_clicked:{type: String,trim:true},
|
|
105
|
+
expression_check_save:{type:String,trim:true},
|
|
106
|
+
on_saved:{type:String,trim:true},
|
|
107
|
+
on_deleting:{type:String,trim:true},
|
|
108
|
+
on_deleted:{type:String,trim:true},
|
|
109
|
+
on_init:{type:String,trim:true},
|
|
110
|
+
on_init_update:{type:String,trim:true},
|
|
111
|
+
handle_view_server:{type:String,trim:true},
|
|
112
|
+
handle_oncreating_server:{type:String,trim:true},
|
|
113
|
+
handle_oncreated_server:{type:String,trim:true},
|
|
114
|
+
handle_onupdating_server:{type:String,trim:true},
|
|
115
|
+
handle_onupdated_server:{type:String,trim:true},
|
|
116
|
+
handle_ondeleting_server:{type:String,trim:true},
|
|
117
|
+
//condition
|
|
118
|
+
search_required:Boolean,
|
|
119
|
+
search_form:{type:String,trim:true},
|
|
120
|
+
default_condition:{type:String,trim:true},
|
|
121
|
+
require_condition:{type:String,trim:true},
|
|
122
|
+
//
|
|
123
|
+
export_yn:Boolean,
|
|
124
|
+
sort_by:String,
|
|
125
|
+
not_need_right:{type: Boolean,default:false},//Có cần phân quyền hay không
|
|
126
|
+
require_id_app:{type: Boolean,default:true},//Dữ liệu theo công ty hay dữ liệu chung
|
|
127
|
+
private_data:Boolean,
|
|
128
|
+
view_tabs:[],
|
|
129
|
+
allow_users:{type: String,trim:true},
|
|
130
|
+
input_users:{type: String,trim:true},
|
|
131
|
+
create_menu:Boolean,
|
|
132
|
+
show_view_tabs_on_grid:Boolean,
|
|
133
|
+
form_size:{type:String,default:"md",trim:true},
|
|
134
|
+
//
|
|
135
|
+
is_dashboard_item:{type: Boolean, default: false},
|
|
136
|
+
dashboard_default:{type: Boolean, default: true},
|
|
137
|
+
dashboard_ids:{type: String,trim:true},
|
|
138
|
+
dashboard_stt:{type: Number},
|
|
139
|
+
//
|
|
140
|
+
get_other_fields:String,
|
|
141
|
+
options:{},
|
|
142
|
+
|
|
143
|
+
status: {type: Boolean, default: true},
|
|
144
|
+
date_created: {type: Date, default: Date.now},
|
|
145
|
+
date_updated: {type: Date, default: Date.now},
|
|
146
|
+
user_created: {type: String, default: ''},
|
|
147
|
+
user_updated: {type: String, default: ''}
|
|
148
|
+
});
|
|
149
|
+
if((global.configs||{}).createIndexes){
|
|
150
|
+
listinfoSchema.index({code: 1},{unique:true});
|
|
151
|
+
listinfoSchema.index({used_by_3rd_systems: 1});
|
|
152
|
+
|
|
153
|
+
listinfoSchema.index({code:1,api_code:1,title: 1});
|
|
154
|
+
|
|
155
|
+
listinfoSchema.index({title: 1});
|
|
156
|
+
listinfoSchema.index({title2: 1});
|
|
157
|
+
listinfoSchema.index({mother_code: 1});
|
|
158
|
+
listinfoSchema.index({api_code: 1});
|
|
159
|
+
listinfoSchema.index({code:1,api_code: 1});
|
|
160
|
+
listinfoSchema.index({model_code: 1});
|
|
161
|
+
|
|
162
|
+
listinfoSchema.index({mother_code: 1});
|
|
163
|
+
listinfoSchema.index({is_dashboard_item: 1});
|
|
164
|
+
listinfoSchema.index({dashboard_ids: 1});
|
|
165
|
+
listinfoSchema.index({mother_code: "text",code:"text",title:"text"},{name:"listinfo_index2_text"});
|
|
166
|
+
|
|
167
|
+
listinfoSchema.index({status: 1});
|
|
168
|
+
listinfoSchema.index({user_created: 1,visible_to: 1,visible_to_users: 1});
|
|
169
|
+
}
|
|
170
|
+
const model = global.mongoose.models.listinfo || global.mongoose.model('listinfo', listinfoSchema);
|
|
171
|
+
const requireFields= model.requireFields ={
|
|
172
|
+
id_app:{type:String,required:true},
|
|
173
|
+
exfields:global.Schema.Types.Mixed,
|
|
174
|
+
|
|
175
|
+
listinfo_code:String,
|
|
176
|
+
status: {type: Boolean, default: true},
|
|
177
|
+
date_created: {type: Date, default: Date.now},
|
|
178
|
+
date_updated: {type: Date, default: Date.now},
|
|
179
|
+
user_created: {type: String, default: ''},
|
|
180
|
+
user_updated: {type: String, default: ''},
|
|
181
|
+
visible_to: {type: Number, default: 0},
|
|
182
|
+
visible_to_users: [String],
|
|
183
|
+
}
|
|
184
|
+
model.createSchema = (info)=>{
|
|
185
|
+
if(!info.create_model) return null;
|
|
186
|
+
|
|
187
|
+
const require_id_app = (info.require_id_app!=false && info.require_id_app!="false");
|
|
188
|
+
const _requireFields ={...requireFields}
|
|
189
|
+
|
|
190
|
+
if(!require_id_app){
|
|
191
|
+
delete _requireFields.id_app;
|
|
192
|
+
}
|
|
193
|
+
let mySchema = new global.Schema(_requireFields,{strict: false});
|
|
194
|
+
let require_paths = Object.keys(mySchema.paths);
|
|
195
|
+
let fields = {};
|
|
196
|
+
for(let f of info.fields.filter(f=>f.type!=="Link" && f.type!=="Files" && f.type!=="Action" && f.type!=="Group" && !f.is_tmp && require_paths.indexOf(f.name)<0)){
|
|
197
|
+
if(f.unique){
|
|
198
|
+
f.index = true;
|
|
199
|
+
}
|
|
200
|
+
let _field = Object.assign({},f);
|
|
201
|
+
if(_field.type=="DateTime" || _field.type=="Time") _field.type= "Date";
|
|
202
|
+
if(_field.type=="File" || _field.type=="OtherFile") _field.type= "Mixed";
|
|
203
|
+
if(_field.type=="Array") _field.type= "Mixed";
|
|
204
|
+
if(_field.type=="Pdf") _field.type= "String";
|
|
205
|
+
if(_field.type=="Image") _field.type= "String";
|
|
206
|
+
|
|
207
|
+
if(_field.type=="String") _field.trim = true;
|
|
208
|
+
|
|
209
|
+
_field.required = false;
|
|
210
|
+
_field.isDynamic = true;
|
|
211
|
+
|
|
212
|
+
delete _field.name;
|
|
213
|
+
delete _field.header;
|
|
214
|
+
delete _field.header2;
|
|
215
|
+
delete _field.line;
|
|
216
|
+
delete _field.sort;
|
|
217
|
+
delete _field.unique;
|
|
218
|
+
delete _field._id;
|
|
219
|
+
delete _field.stt;
|
|
220
|
+
delete _field.not_display;
|
|
221
|
+
delete _field.not_search;
|
|
222
|
+
delete _field.format;
|
|
223
|
+
delete _field.align;
|
|
224
|
+
delete _field.color;
|
|
225
|
+
delete _field.form;
|
|
226
|
+
delete _field.min_width_display;
|
|
227
|
+
delete _field.html_component_display;
|
|
228
|
+
delete _field.html_variant_display;
|
|
229
|
+
delete _field.html_component_input;
|
|
230
|
+
delete _field.handle_value_changed;
|
|
231
|
+
delete _field.handle_value_changed_on_list;
|
|
232
|
+
delete _field.default;
|
|
233
|
+
delete _field.multiple;
|
|
234
|
+
|
|
235
|
+
delete _field.tab;
|
|
236
|
+
delete _field.help_text;
|
|
237
|
+
delete _field.grid_configs;
|
|
238
|
+
delete _field.render_on_list;
|
|
239
|
+
delete _field.render_on_view;
|
|
240
|
+
delete _field.is_tmp;
|
|
241
|
+
delete _field.is_title;
|
|
242
|
+
delete _field.on_view;
|
|
243
|
+
delete _field.handle_view_server;
|
|
244
|
+
if(_field.type=="String" || _field.type=="Number" ){
|
|
245
|
+
_field.maxlength = _field.maxlength || 4000;
|
|
246
|
+
}else{
|
|
247
|
+
delete _field.maxlength
|
|
248
|
+
}
|
|
249
|
+
fields[f.name] = _field
|
|
250
|
+
}
|
|
251
|
+
try{
|
|
252
|
+
mySchema.add(fields);
|
|
253
|
+
}catch(e){
|
|
254
|
+
Logger.error("[listinfo] [createSchema]",e.message);
|
|
255
|
+
Logger.error(JSON.stringify(fields),null,2);
|
|
256
|
+
throw e
|
|
257
|
+
}
|
|
258
|
+
//create index for all fields
|
|
259
|
+
if((global.configs||{}).createIndexes){
|
|
260
|
+
//Tạo index chứng từ chuyển
|
|
261
|
+
if(info.fields.find(f=>f.id_ct_chuyen)){
|
|
262
|
+
mySchema.index({id_app: 1, id_ct_chuyen:1},{name:"index_id_ct_chuyen"});
|
|
263
|
+
}
|
|
264
|
+
//tạo dynamic index
|
|
265
|
+
const dynamic_indexes = info.fields.filter(f=>f.index);
|
|
266
|
+
let indexs = {};
|
|
267
|
+
if(require_id_app){
|
|
268
|
+
indexs.id_app =1;
|
|
269
|
+
}
|
|
270
|
+
dynamic_indexes.forEach(field=>{
|
|
271
|
+
indexs[field.name] = 1;
|
|
272
|
+
})
|
|
273
|
+
if(Object.keys(indexs).length>0){
|
|
274
|
+
mySchema.index(indexs,{name:"index_dynamic"});
|
|
275
|
+
}
|
|
276
|
+
//Tạo index cho user
|
|
277
|
+
let index_user = {user_created: 1,visible_to: 1,visible_to_users: 1,status:1}
|
|
278
|
+
if(require_id_app){
|
|
279
|
+
index_user.id_app =1;
|
|
280
|
+
}
|
|
281
|
+
if(info.fields.find(f=>f.name=="trang_thai")){
|
|
282
|
+
index_user.trang_thai =1;
|
|
283
|
+
}
|
|
284
|
+
if(info.fields.find(f=>f.name=="of_user")){
|
|
285
|
+
index_user.of_user =1;
|
|
286
|
+
}
|
|
287
|
+
if(info.fields.find(f=>f.name=="phu_trach")){
|
|
288
|
+
index_user.phu_trach =1;
|
|
289
|
+
}
|
|
290
|
+
mySchema.index(index_user);
|
|
291
|
+
mySchema.index({index_user,...indexs});
|
|
292
|
+
|
|
293
|
+
//create unique index
|
|
294
|
+
let uq = info.fields.filter(f=>f.unique);
|
|
295
|
+
if(uq.length>0){
|
|
296
|
+
let indUq = {id_app:1};
|
|
297
|
+
if(!require_id_app){
|
|
298
|
+
delete indUq.id_app;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
uq.forEach((field) => {
|
|
302
|
+
indUq[field.name] =field.sort || 1;
|
|
303
|
+
});
|
|
304
|
+
mySchema.index(indUq,{unique: true });
|
|
305
|
+
}
|
|
306
|
+
//create text index
|
|
307
|
+
let api_code = info.api_code || info.code;
|
|
308
|
+
let index_name = `${api_code}_index_text`;
|
|
309
|
+
mySchema.index({"$**": "text" },{name:index_name});
|
|
310
|
+
/*//create requiere index
|
|
311
|
+
const requireIndex ={}
|
|
312
|
+
require_paths.forEach(rq=>{
|
|
313
|
+
requireIndex[rq] =1;
|
|
314
|
+
})
|
|
315
|
+
mySchema.index(requireIndex);*/
|
|
316
|
+
}
|
|
317
|
+
return mySchema;
|
|
318
|
+
}
|
|
319
|
+
model.updateSchema = async (schema,listinfo_code)=>{
|
|
320
|
+
const info = await model.findOne({code:listinfo_code}).lean();
|
|
321
|
+
if(!info || !info.fields) return;
|
|
322
|
+
for(let field of info.fields.filter(f=>f.type!=="Link" && f.type!=="Files" && f.type!=="Action" && f.type!=="Group")){
|
|
323
|
+
if(schema.paths[field.name]){
|
|
324
|
+
//Nếu là dynamic field thì remove để tạo lại
|
|
325
|
+
if(schema.paths[field.name].options && schema.paths[field.name].options.isDynamic){
|
|
326
|
+
schema.remove(field.name);
|
|
327
|
+
}else{
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
//Nếu là field tmp thì không thêm vào schema
|
|
332
|
+
if(field.is_tmp){
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
//
|
|
336
|
+
if(field.toObject) field = field.toObject();
|
|
337
|
+
const _field = {...field};
|
|
338
|
+
if(_field.type=="DateTime" || _field.type=="Time") _field.type= "Date";
|
|
339
|
+
if(_field.type=="File" || _field.type=="OtherFile") _field.type= "Mixed";
|
|
340
|
+
if(_field.type=="Array") _field.type= "Mixed";
|
|
341
|
+
if(_field.type=="Pdf") _field.type= "String";
|
|
342
|
+
if(_field.type=="Image") _field.type= "String";
|
|
343
|
+
if(_field.type=="String") _field.trim = true;
|
|
344
|
+
_field.required = false;
|
|
345
|
+
_field.isDynamic = true;
|
|
346
|
+
|
|
347
|
+
delete _field.stt_col;
|
|
348
|
+
delete _field.name;
|
|
349
|
+
delete _field.header;
|
|
350
|
+
delete _field.header2;
|
|
351
|
+
delete _field.line;
|
|
352
|
+
delete _field.sort;
|
|
353
|
+
delete _field.unique;
|
|
354
|
+
delete _field._id;
|
|
355
|
+
delete _field.stt;
|
|
356
|
+
delete _field.not_display;
|
|
357
|
+
delete _field.not_search;
|
|
358
|
+
delete _field.format;
|
|
359
|
+
delete _field.align;
|
|
360
|
+
delete _field.color;
|
|
361
|
+
delete _field.form;
|
|
362
|
+
delete _field.min_width_display;
|
|
363
|
+
delete _field.html_component_display;
|
|
364
|
+
delete _field.html_variant_display;
|
|
365
|
+
delete _field.html_component_input;
|
|
366
|
+
delete _field.handle_value_changed;
|
|
367
|
+
delete _field.handle_value_changed_on_list;
|
|
368
|
+
delete _field.default;
|
|
369
|
+
delete _field.multiple;
|
|
370
|
+
delete _field.tab;
|
|
371
|
+
delete _field.help_text;
|
|
372
|
+
delete _field.grid_configs;
|
|
373
|
+
delete _field.render_on_list;
|
|
374
|
+
delete _field.render_on_view;
|
|
375
|
+
delete _field.is_tmp;
|
|
376
|
+
delete _field.is_title;
|
|
377
|
+
delete _field.on_view;
|
|
378
|
+
delete _field.handle_view_server;
|
|
379
|
+
if(_field.type=="String" || _field.type=="Number" ){
|
|
380
|
+
_field.maxlength = _field.maxlength || 4000;
|
|
381
|
+
}else{
|
|
382
|
+
delete _field.maxlength
|
|
383
|
+
}
|
|
384
|
+
//Logger.warn(`[listinfo] [updateSchema] [${listinfo_code}] add field:`,field.name);
|
|
385
|
+
schema.add({[field.name]:_field});
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
model.updateModel = async (info,_newModel)=>{
|
|
389
|
+
if(info.toObject) info = info.toObject();
|
|
390
|
+
if(!info.create_model) return null;
|
|
391
|
+
let model_code = info.api_code || info.model_code || info.code;
|
|
392
|
+
if(!_newModel) _newModel = global.mongoose.models[model_code];
|
|
393
|
+
if(!_newModel) return;
|
|
394
|
+
if(!_newModel.schema){
|
|
395
|
+
Logger.error("[listinfo][updateModel] model does not have schema",_newModel);
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
//
|
|
399
|
+
//Logger.warn("[listinfo][updateModel] update model...",model_code);
|
|
400
|
+
const api_code = info.api_code || info.code;
|
|
401
|
+
const _newList = global.controllers[api_code.toUpperCase()];
|
|
402
|
+
let require_paths = Object.keys(requireFields);
|
|
403
|
+
let fields = [...info.fields];
|
|
404
|
+
//add ref fields
|
|
405
|
+
let fields_have_ref =fields.filter(f=>f.ref_model && f.ref_model.indexOf("[")<0 && f.ref_field && f.type!=="Array" && f.type!=="Mixed" && f.ref_label)
|
|
406
|
+
.map(f=>f.ref_label_as || f.ref_label)
|
|
407
|
+
.filter(f=>!fields.find(gf=>gf.name===f))
|
|
408
|
+
.map(f=>{
|
|
409
|
+
return {
|
|
410
|
+
name:f,
|
|
411
|
+
type:"String"
|
|
412
|
+
}
|
|
413
|
+
})
|
|
414
|
+
//Logger.warn("ref fields",fields_have_ref);
|
|
415
|
+
fields = fields.concat(fields_have_ref);
|
|
416
|
+
const fields_can_xu_ly = fields.filter(f=>f.type!=="Link" && f.type!=="Files" && f.type!=="Action" && f.type!=="Group" && require_paths.indexOf(f.name)<0);
|
|
417
|
+
//
|
|
418
|
+
for(let field of fields_can_xu_ly){
|
|
419
|
+
if(field.toObject) field = field.toObject();
|
|
420
|
+
const _field = {...field};
|
|
421
|
+
const schemaCode = field.form;
|
|
422
|
+
if(underscore.has(_newModel.schema.paths,field.name)){
|
|
423
|
+
if(field.type==="Array" || field.type==="Mixed"){
|
|
424
|
+
//Cập nhật field cho tab detail
|
|
425
|
+
if(schemaCode){
|
|
426
|
+
const schemaOfDetail = _newModel.schema.paths[field.name].schema;
|
|
427
|
+
if(schemaOfDetail){
|
|
428
|
+
await model.updateSchema(schemaOfDetail,schemaCode)
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
//xoá field để cập nhật lại nếu là dynamic field
|
|
434
|
+
if(_newModel.schema.paths[field.name].options && _newModel.schema.paths[field.name].options.isDynamic){
|
|
435
|
+
_newModel.schema.remove(field.name);
|
|
436
|
+
}else{
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
//Nếu là field tmp thì không thêm vào schema
|
|
441
|
+
if(field.is_tmp){
|
|
442
|
+
continue;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
if(_field.type=="DateTime" || _field.type=="Time") _field.type= "Date";
|
|
446
|
+
if(_field.type=="File" || _field.type=="OtherFile") _field.type= "Mixed";
|
|
447
|
+
if(_field.type=="Array") _field.type= "Mixed";
|
|
448
|
+
if(_field.type=="Pdf") _field.type= "String";
|
|
449
|
+
if(_field.type=="Image") _field.type= "String";
|
|
450
|
+
|
|
451
|
+
if(_field.type=="String") _field.trim = true;
|
|
452
|
+
|
|
453
|
+
if(model_code!=info.code){
|
|
454
|
+
_field.required = false;//phai luon dat la false neu khong se bi dung giua cac api khac dung chung model
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
_field.isDynamic = true;
|
|
458
|
+
delete _field.stt_col;
|
|
459
|
+
|
|
460
|
+
delete _field.name;
|
|
461
|
+
delete _field.header;
|
|
462
|
+
delete _field.header2;
|
|
463
|
+
delete _field.line;
|
|
464
|
+
delete _field.sort;
|
|
465
|
+
delete _field.unique;
|
|
466
|
+
delete _field._id;
|
|
467
|
+
delete _field.stt;
|
|
468
|
+
delete _field.not_display;
|
|
469
|
+
delete _field.not_search;
|
|
470
|
+
delete _field.format;
|
|
471
|
+
delete _field.align;
|
|
472
|
+
delete _field.color;
|
|
473
|
+
delete _field.form;
|
|
474
|
+
delete _field.min_width_display;
|
|
475
|
+
delete _field.html_component_display;
|
|
476
|
+
delete _field.html_variant_display;
|
|
477
|
+
delete _field.html_component_input;
|
|
478
|
+
delete _field.handle_value_changed;
|
|
479
|
+
delete _field.handle_value_changed_on_list;
|
|
480
|
+
|
|
481
|
+
delete _field.default;
|
|
482
|
+
delete _field.multiple;
|
|
483
|
+
delete _field.tab;
|
|
484
|
+
delete _field.help_text;
|
|
485
|
+
delete _field.grid_configs;
|
|
486
|
+
delete _field.render_on_list;
|
|
487
|
+
delete _field.render_on_view;
|
|
488
|
+
|
|
489
|
+
delete _field.is_tmp;
|
|
490
|
+
delete _field.is_title;
|
|
491
|
+
delete _field.on_view;
|
|
492
|
+
delete _field.handle_view_server;
|
|
493
|
+
|
|
494
|
+
if(_field.type=="String" || _field.type=="Number" ){
|
|
495
|
+
_field.maxlength = _field.maxlength || 4000;
|
|
496
|
+
}else{
|
|
497
|
+
delete _field.maxlength
|
|
498
|
+
}
|
|
499
|
+
_newModel.schema.add({[field.name]:_field});
|
|
500
|
+
|
|
501
|
+
//if(!field.unique && field.type!="Array" && field.type!="Mixed" && field.index) _newModel.schema.index({[field.name]:1});
|
|
502
|
+
}
|
|
503
|
+
//create unique index
|
|
504
|
+
if((global.configs||{}).createIndexes){
|
|
505
|
+
//tạo dynamic index
|
|
506
|
+
try{
|
|
507
|
+
await _newModel.collection.dropIndex('index_dynamic');
|
|
508
|
+
}catch(e){/* */}
|
|
509
|
+
const dynamic_indexes = info.fields.filter(f=>f.index);
|
|
510
|
+
if(dynamic_indexes.length>0){
|
|
511
|
+
let indexs = {};
|
|
512
|
+
if(_newModel.schema.paths.id_app){
|
|
513
|
+
indexs.id_app =1;
|
|
514
|
+
}
|
|
515
|
+
dynamic_indexes.forEach(field=>{
|
|
516
|
+
indexs[field.name] = 1;
|
|
517
|
+
})
|
|
518
|
+
if(Object.keys(indexs).length>0){
|
|
519
|
+
_newModel.schema.index(indexs,{name:"index_dynamic"});
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
//Tạo index chứng từ chuyển
|
|
523
|
+
if(info.fields.find(f=>f.id_ct_chuyen)){
|
|
524
|
+
try{
|
|
525
|
+
await _newModel.collection.dropIndex('index_id_ct_chuyen');
|
|
526
|
+
}catch(e){/* */}
|
|
527
|
+
_newModel.schema.index({id_app: 1, id_ct_chuyen:1},{name:"index_id_ct_chuyen"});
|
|
528
|
+
}
|
|
529
|
+
if(_newList && _newList.is_dynamic_list){
|
|
530
|
+
let uq = fields.filter(f=>f.unique && f.name!="so_ct");//trường so_ct không được phép unique
|
|
531
|
+
let indUq;
|
|
532
|
+
if(uq.length>0){
|
|
533
|
+
if(_newModel.schema.paths.id_app){
|
|
534
|
+
indUq = {id_app:1};
|
|
535
|
+
}else{
|
|
536
|
+
indUq = {};
|
|
537
|
+
}
|
|
538
|
+
uq.forEach((field) => {
|
|
539
|
+
indUq[field.name] =field.sort || 1;
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
if(_newList.options.unique && _newList.options.unique.length>0){
|
|
543
|
+
let old_index_unique ={id_app:1};
|
|
544
|
+
_newList.options.unique.forEach(u=>{
|
|
545
|
+
let field = fields.find(f=>f.name===u);
|
|
546
|
+
old_index_unique[u]= (field||{}).sort || 1;
|
|
547
|
+
});
|
|
548
|
+
//Logger.warn("drop current index unique...",old_index_unique);
|
|
549
|
+
_newModel.collection.dropIndex(old_index_unique,()=>{
|
|
550
|
+
//if(e) return Logger.error("Can't drop index unique",old_index_unique,model_code,e);
|
|
551
|
+
//create new unique
|
|
552
|
+
if(indUq){
|
|
553
|
+
//Logger.warn("create new index unique...",indUq);
|
|
554
|
+
_newModel.schema.index(indUq,{unique: true });
|
|
555
|
+
}
|
|
556
|
+
})
|
|
557
|
+
}else{
|
|
558
|
+
//create new unique
|
|
559
|
+
if(indUq){
|
|
560
|
+
//Logger.warn("create new index unique...",indUq)
|
|
561
|
+
_newModel.schema.index(indUq,{unique: true });
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
model.createModel = (info)=>{
|
|
569
|
+
if(!info.create_model) return null;
|
|
570
|
+
let model_code = info.api_code || info.model_code || info.code;
|
|
571
|
+
//models are not allowed to create new APIs
|
|
572
|
+
if(global.secu_models.indexOf(model_code)>=0){
|
|
573
|
+
return null;
|
|
574
|
+
}
|
|
575
|
+
//
|
|
576
|
+
let exModel = global.mongoose.models[model_code]
|
|
577
|
+
if(!exModel){
|
|
578
|
+
let model_path = (((global.configs||{}).paths||{}).models || __dirname) + "/" + model_code + ".js"
|
|
579
|
+
if(fs.existsSync(model_path)){
|
|
580
|
+
exModel = require(model_path);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
if(!exModel){
|
|
584
|
+
exModel = global.mongoose.model(model_code, model.createSchema(info));
|
|
585
|
+
}else{
|
|
586
|
+
model.updateModel(info,exModel);
|
|
587
|
+
}
|
|
588
|
+
return exModel;
|
|
589
|
+
}
|
|
590
|
+
const deletePost = (_listInfo,obj)=>{
|
|
591
|
+
return new Promise((resolve,reject)=>{
|
|
592
|
+
let bookbackup={};
|
|
593
|
+
async.mapSeries((_listInfo.postinfos||[]).filter(info=>info.model && info.script && info.condition),(postInfo,callback)=>{
|
|
594
|
+
setImmediate(async ()=>{
|
|
595
|
+
let m = global.getModel(postInfo.model);
|
|
596
|
+
let scriptCondition = postInfo.condition.indexOf("return ")<0?`return ${postInfo.condition}`:postInfo.condition;
|
|
597
|
+
let condition = evalute(scriptCondition,{master:obj,data:obj,moment});
|
|
598
|
+
condition.id_app = obj.id_app;
|
|
599
|
+
//backup old data
|
|
600
|
+
bookbackup[postInfo.model] = await m.find(condition).lean();
|
|
601
|
+
//delete
|
|
602
|
+
await m.deleteMany(condition);
|
|
603
|
+
callback();
|
|
604
|
+
})
|
|
605
|
+
},async (e)=>{
|
|
606
|
+
if(e){
|
|
607
|
+
//restore old data
|
|
608
|
+
for(let key in bookbackup){
|
|
609
|
+
if(bookbackup[key].length>0){
|
|
610
|
+
await global.getModel(key.toString()).insertMany(bookbackup[key]);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
return reject(e);
|
|
614
|
+
}
|
|
615
|
+
resolve(bookbackup)
|
|
616
|
+
})
|
|
617
|
+
})
|
|
618
|
+
}
|
|
619
|
+
const post = (_listInfo,obj)=>{
|
|
620
|
+
if(obj.toObject) obj = obj.toObject();
|
|
621
|
+
//console.log("[post dynamic]",_listInfo.postinfos);
|
|
622
|
+
return Promise.all((_listInfo.postinfos||[]).filter(info=>info.model && info.script && info.condition).map(postInfo=>{
|
|
623
|
+
return (async ()=>{
|
|
624
|
+
let script = `return (async ()=>{
|
|
625
|
+
try{
|
|
626
|
+
${postInfo.script}
|
|
627
|
+
}catch(e){
|
|
628
|
+
Logger.error("error post data",e)
|
|
629
|
+
return {error:e}
|
|
630
|
+
}
|
|
631
|
+
})()`
|
|
632
|
+
let data = await evalute(script,{master:{...obj},data:{...obj},moment,numeral});
|
|
633
|
+
if(data && data.error){
|
|
634
|
+
throw data.error
|
|
635
|
+
}
|
|
636
|
+
//Logger.warn("post dynamic",postInfo.model,data);
|
|
637
|
+
return new Promise((resolve,reject)=>{
|
|
638
|
+
if(postInfo.model==="socai"){
|
|
639
|
+
const postsocai = new PostSocai(obj, data,null,null,{deleteQuery:{id_ct:"#"}});//không xoá sổ sách vì trước đó đã xoá
|
|
640
|
+
postsocai.run((e, rs)=>{
|
|
641
|
+
if(e) return reject(e);
|
|
642
|
+
resolve(rs);
|
|
643
|
+
});
|
|
644
|
+
}else{
|
|
645
|
+
let m = global.getModel(postInfo.model);
|
|
646
|
+
const posttdttno = new PostBook(obj, data, m, function(detail, callback) {
|
|
647
|
+
callback(detail);
|
|
648
|
+
},{deleteQuery:{id_ct:"#"}});//không xoá sổ sách vì trước đó đã xoá
|
|
649
|
+
|
|
650
|
+
posttdttno.run(function(e, rs) {
|
|
651
|
+
//Logger.warn("posted dynamic",rs,e)
|
|
652
|
+
if(e) return reject(e);
|
|
653
|
+
resolve(rs);
|
|
654
|
+
})
|
|
655
|
+
}
|
|
656
|
+
})
|
|
657
|
+
|
|
658
|
+
})()
|
|
659
|
+
}))
|
|
660
|
+
}
|
|
661
|
+
const dynamicFinding = (_listInfo,user,condition,next,options={})=>{
|
|
662
|
+
if(_listInfo.api_code && _listInfo.api_code!=_listInfo.code){
|
|
663
|
+
//don't change condition of original api
|
|
664
|
+
return next(null,condition);
|
|
665
|
+
}
|
|
666
|
+
if(_listInfo.private_data){
|
|
667
|
+
condition.user_created = user.email
|
|
668
|
+
}
|
|
669
|
+
if(_listInfo.require_condition){
|
|
670
|
+
try{
|
|
671
|
+
let script = _listInfo.require_condition;
|
|
672
|
+
if(script.indexOf("return ")<0) script = `return ${script}`;
|
|
673
|
+
const require_condition = evalute(script,{user,condition,moment,numeral,request:options.req});
|
|
674
|
+
if(require_condition && Object.keys(require_condition).length>0){
|
|
675
|
+
for(let key in require_condition){
|
|
676
|
+
condition[key] = require_condition[key];
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
}catch(e){
|
|
680
|
+
Logger.error(e);
|
|
681
|
+
return next(`Error on require condition: ${e.message}`);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
next(null,condition);
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
const dynamicCreating = async (listInfo,user,obj,next,options={})=>{
|
|
688
|
+
let _listInfo = await model.findOne({_id:listInfo._id}).lean();
|
|
689
|
+
if(!_listInfo) return next("Không tìm thấy danh mục này");
|
|
690
|
+
for(let key in _listInfo){
|
|
691
|
+
listInfo[key] = _listInfo[key];
|
|
692
|
+
|
|
693
|
+
}
|
|
694
|
+
/*const require_id_app = (_listInfo.require_id_app!=false && _listInfo.require_id_app!="false");
|
|
695
|
+
const supportUsers = configs.supportUsers || []
|
|
696
|
+
if (!require_id_app && (_listInfo.input_users||"").toLowerCase().indexOf(user.email.toLowerCase())<0 && !supportUsers.includes(user.email.toLowerCase()) && !isSupperAdmin(user.email.toLowerCase())) {
|
|
697
|
+
return next('Bạn không có quyền thực hiện thao tác này');
|
|
698
|
+
}*/
|
|
699
|
+
if(_listInfo.handle_oncreating_server && _listInfo.handle_oncreating_server.trim()!==""){
|
|
700
|
+
if(_listInfo.handle_oncreating_server.indexOf("next")<0) return next("Script xử lý dữ liệu trước khi tạo yêu cầu gọi function next");
|
|
701
|
+
try{
|
|
702
|
+
await new Promise((resolve,reject)=>{
|
|
703
|
+
async.parallel([
|
|
704
|
+
(next)=>{
|
|
705
|
+
const func_body = `(async ()=>{
|
|
706
|
+
try{
|
|
707
|
+
${_listInfo.handle_oncreating_server}
|
|
708
|
+
}catch(e){
|
|
709
|
+
next(e);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
})();`
|
|
713
|
+
setImmediate(async ()=>{
|
|
714
|
+
try{
|
|
715
|
+
await evalute(func_body,{obj,user,getLib:global.getLib,getModel:global.getModel,utils,query:utils.query,async,controller,controllerUtils,controllers:global.controllers,joinModel2,next,moment,numeral,request:options.req})
|
|
716
|
+
}catch(e){
|
|
717
|
+
Logger.error("[dynamicCreating][handle_oncreating_server]",{code:listInfo.code,handle_oncreating_server:_listInfo.handle_oncreating_server,e})
|
|
718
|
+
next(e);
|
|
719
|
+
}
|
|
720
|
+
})
|
|
721
|
+
|
|
722
|
+
}
|
|
723
|
+
],(e,rs)=>{
|
|
724
|
+
if(e){
|
|
725
|
+
Logger.error("[dynamicCreating][handle_oncreating_server]",listInfo.code,e,_listInfo.handle_oncreating_server);
|
|
726
|
+
return reject(e)
|
|
727
|
+
}
|
|
728
|
+
resolve(rs);
|
|
729
|
+
})
|
|
730
|
+
})
|
|
731
|
+
}catch(e){
|
|
732
|
+
Logger.error("[dynamicCreating]",listInfo.code,e);
|
|
733
|
+
return next(e);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
}
|
|
737
|
+
next(null,obj);
|
|
738
|
+
}
|
|
739
|
+
const dynamicCreated = async (_listInfo,user,obj,next,options={})=>{
|
|
740
|
+
if(_listInfo.handle_oncreated_server && _listInfo.handle_oncreated_server.trim()!==""){
|
|
741
|
+
if(_listInfo.handle_oncreated_server.indexOf("next")<0) return next("Script xử lý dữ liệu sau khi tạo yêu cầu gọi function next");
|
|
742
|
+
try{
|
|
743
|
+
await new Promise((resolve,reject)=>{
|
|
744
|
+
async.parallel([
|
|
745
|
+
(next)=>{
|
|
746
|
+
const func_body = `(async ()=>{
|
|
747
|
+
try{
|
|
748
|
+
${_listInfo.handle_oncreated_server}
|
|
749
|
+
}catch(e){
|
|
750
|
+
next(e);
|
|
751
|
+
}
|
|
752
|
+
})();`
|
|
753
|
+
setImmediate(async ()=>{
|
|
754
|
+
try{
|
|
755
|
+
await evalute(func_body,{obj,user,getLib:global.getLib,getModel:global.getModel,controller,controllerUtils,controllers:global.controllers,utils,query:utils.query,async,joinModel2,next,moment,numeral,request:options.req})
|
|
756
|
+
}catch(e){
|
|
757
|
+
Logger.error("error dynamic created",_listInfo.handle_oncreated_server,e)
|
|
758
|
+
next(e)
|
|
759
|
+
}
|
|
760
|
+
})
|
|
761
|
+
}
|
|
762
|
+
],(e,rs)=>{
|
|
763
|
+
if(e){
|
|
764
|
+
Logger.error(e);
|
|
765
|
+
return reject(e)
|
|
766
|
+
}
|
|
767
|
+
resolve(rs);
|
|
768
|
+
})
|
|
769
|
+
})
|
|
770
|
+
}catch(e){
|
|
771
|
+
Logger.error(e);
|
|
772
|
+
return next(e);
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
}
|
|
776
|
+
next(null,obj);
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
const dynamicUpdating = async (listInfo,user,data,obj,next,options={})=>{
|
|
780
|
+
let _listInfo = await model.findOne({_id:listInfo._id}).lean();
|
|
781
|
+
if(!_listInfo) return next("Không tìm thấy danh mục này");
|
|
782
|
+
for(let key in _listInfo){
|
|
783
|
+
listInfo[key] = _listInfo[key];
|
|
784
|
+
|
|
785
|
+
}
|
|
786
|
+
/*const require_id_app = (_listInfo.require_id_app!=false && _listInfo.require_id_app!="false");
|
|
787
|
+
const supportUsers = configs.supportUsers || [];
|
|
788
|
+
if (!require_id_app && (_listInfo.input_users||"").toLowerCase().indexOf(user.email.toLowerCase())<0 && !supportUsers.includes(user.email.toLowerCase()) && !isSupperAdmin(user.email.toLowerCase())) {
|
|
789
|
+
return next('Bạn không có quyền thực hiện thao tác này');
|
|
790
|
+
}*/
|
|
791
|
+
if(_listInfo.handle_onupdating_server && _listInfo.handle_onupdating_server.trim()!==""){
|
|
792
|
+
//Logger.warn("[listinof] [dynamicUpdating]",_listInfo.code,_listInfo.handle_onupdating_server);
|
|
793
|
+
if(_listInfo.handle_onupdating_server.indexOf("next")<0) return next("Script xử lý dữ liệu trước khi update yêu cầu gọi function next");
|
|
794
|
+
try{
|
|
795
|
+
await new Promise((resolve,reject)=>{
|
|
796
|
+
async.series([
|
|
797
|
+
(next)=>{
|
|
798
|
+
const func_body = `(async ()=>{
|
|
799
|
+
try{
|
|
800
|
+
${_listInfo.handle_onupdating_server}
|
|
801
|
+
}catch(e){
|
|
802
|
+
next(e);
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
})();`
|
|
806
|
+
setImmediate(async ()=>{
|
|
807
|
+
try{
|
|
808
|
+
await evalute(func_body,{data,obj,user,getLib:global.getLib,getModel:global.getModel,controller,controllerUtils,controllers:global.controllers,utils,query:utils.query,async,joinModel2,next,moment,numeral,request:options.req})
|
|
809
|
+
}catch(e){
|
|
810
|
+
Logger.error("[listinfo][dynamicUpdating] error dynamic update",_listInfo.handle_onupdating_server,e)
|
|
811
|
+
next(e)
|
|
812
|
+
}
|
|
813
|
+
})
|
|
814
|
+
}
|
|
815
|
+
],(e,rs)=>{
|
|
816
|
+
if(e){
|
|
817
|
+
Logger.error("[listinfo][dynamicUpdating]",e);
|
|
818
|
+
return reject(e)
|
|
819
|
+
}
|
|
820
|
+
resolve(rs);
|
|
821
|
+
})
|
|
822
|
+
})
|
|
823
|
+
}catch(e){
|
|
824
|
+
Logger.error(e);
|
|
825
|
+
return next(e);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
}else{
|
|
829
|
+
//Logger.warn("[listinof] [dynamicUpdating]",_listInfo.code,"không xử lý updating");
|
|
830
|
+
}
|
|
831
|
+
next(null,data,obj);
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
const dynamicUpdated = async (_listInfo,user,obj,next,options={})=>{
|
|
835
|
+
if(_listInfo.handle_onupdated_server && _listInfo.handle_onupdated_server.trim()!==""){
|
|
836
|
+
if(_listInfo.handle_onupdated_server.indexOf("next")<0) return next("Script xử lý dữ liệu sau khi update yêu cầu gọi function next");
|
|
837
|
+
try{
|
|
838
|
+
await new Promise((resolve,reject)=>{
|
|
839
|
+
async.series([
|
|
840
|
+
(next)=>{
|
|
841
|
+
const func_body = `(async ()=>{
|
|
842
|
+
try{
|
|
843
|
+
${_listInfo.handle_onupdated_server}
|
|
844
|
+
}catch(e){
|
|
845
|
+
next(e)
|
|
846
|
+
}
|
|
847
|
+
})();`
|
|
848
|
+
setImmediate(async ()=>{
|
|
849
|
+
try{
|
|
850
|
+
await evalute(func_body,{obj,user,getLib:global.getLib,getModel:global.getModel,controller,controllerUtils,controllers:global.controllers,utils,query:utils.query,async,joinModel2,next,moment,numeral,request:options.req})
|
|
851
|
+
}catch(e){
|
|
852
|
+
Logger.error("error dynamic updated",_listInfo.handle_onupdated_server,e)
|
|
853
|
+
next(e)
|
|
854
|
+
}
|
|
855
|
+
})
|
|
856
|
+
}
|
|
857
|
+
],(e,rs)=>{
|
|
858
|
+
if(e){
|
|
859
|
+
Logger.error(e);
|
|
860
|
+
return reject(e)
|
|
861
|
+
}
|
|
862
|
+
resolve(rs);
|
|
863
|
+
})
|
|
864
|
+
})
|
|
865
|
+
}catch(e){
|
|
866
|
+
Logger.error(e);
|
|
867
|
+
return next(e);
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
}
|
|
871
|
+
next(null,obj);
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
const dynamicDeleting = async (listInfo,user,obj,next,options={})=>{
|
|
875
|
+
let _listInfo = await model.findOne({_id:listInfo._id}).lean();
|
|
876
|
+
if(!_listInfo) return next("Không tìm thấy danh mục này");
|
|
877
|
+
for(let key in _listInfo){
|
|
878
|
+
listInfo[key] = _listInfo[key];
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
/*const require_id_app = (_listInfo.require_id_app!=false && _listInfo.require_id_app!="false");
|
|
882
|
+
const supportUsers = configs.supportUsers || [];
|
|
883
|
+
if (!require_id_app && (_listInfo.input_users||"").toLowerCase().indexOf(user.email.toLowerCase())<0 && !supportUsers.includes(user.email) && !isSupperAdmin(user.email.toLowerCase())) {
|
|
884
|
+
return next('Bạn không có quyền thực hiện thao tác này');
|
|
885
|
+
}*/
|
|
886
|
+
|
|
887
|
+
if(_listInfo.handle_ondeleting_server && _listInfo.handle_ondeleting_server.trim()!==""){
|
|
888
|
+
if(_listInfo.handle_ondeleting_server.indexOf("next")<0) return next("Script xử lý dữ liệu trước khi update yêu cầu gọi function next");
|
|
889
|
+
try{
|
|
890
|
+
await new Promise((resolve,reject)=>{
|
|
891
|
+
async.series([
|
|
892
|
+
(next)=>{
|
|
893
|
+
const func_body = `(async ()=>{
|
|
894
|
+
try{
|
|
895
|
+
${_listInfo.handle_ondeleting_server}
|
|
896
|
+
}catch(e){
|
|
897
|
+
next(e);
|
|
898
|
+
}
|
|
899
|
+
})();`
|
|
900
|
+
setImmediate(async ()=>{
|
|
901
|
+
try{
|
|
902
|
+
await evalute(func_body,{obj,user,getLib:global.getLib,getModel:global.getModel,controller,controllerUtils,controllers:global.controllers,utils,query:utils.query,async,joinModel2,next,moment,numeral,request:options.req})
|
|
903
|
+
}catch(e){
|
|
904
|
+
Logger.error("error dynamic delete",_listInfo.handle_ondeleting_server,e)
|
|
905
|
+
next(e)
|
|
906
|
+
}
|
|
907
|
+
})
|
|
908
|
+
|
|
909
|
+
}
|
|
910
|
+
],(e,rs)=>{
|
|
911
|
+
if(e){
|
|
912
|
+
Logger.error(e);
|
|
913
|
+
return reject(e)
|
|
914
|
+
}
|
|
915
|
+
resolve(rs);
|
|
916
|
+
})
|
|
917
|
+
})
|
|
918
|
+
}catch(e){
|
|
919
|
+
Logger.error(e);
|
|
920
|
+
return next(e);
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
}
|
|
924
|
+
next(null,obj);
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
const onView = async (control,obj,user,items,next,options={})=>{
|
|
928
|
+
/*//chỉ xử lý view trên main code và current code
|
|
929
|
+
let listinfo_code = options.listinfo_code || obj.api_code || obj.code;//nếu không cung cấp listinfo_code thì sẽ chạy dynamic view của api gốc
|
|
930
|
+
let co_xu_ly_view = ((!obj.api_code || obj.code===obj.api_code) && control.is_dynamic_list) || (listinfo_code && listinfo_code.toLowerCase()===(obj.code||"").toLowerCase())
|
|
931
|
+
if(!co_xu_ly_view){
|
|
932
|
+
return next(null,items);
|
|
933
|
+
}*/
|
|
934
|
+
const api_code = (obj.api_code || obj.code).toUpperCase();
|
|
935
|
+
if(obj.private_data){
|
|
936
|
+
items = items.filter(item=>item.user_created===user.email)
|
|
937
|
+
}
|
|
938
|
+
//handle view
|
|
939
|
+
if(obj.handle_view_server && obj.handle_view_server.trim()!==""){
|
|
940
|
+
if(obj.handle_view_server.indexOf("next")<0) return next("Script xử lý view yêu cầu gọi function next");
|
|
941
|
+
await new Promise((resolve,reject)=>{
|
|
942
|
+
async.parallel([
|
|
943
|
+
(next)=>{
|
|
944
|
+
setImmediate(async ()=>{
|
|
945
|
+
const func_body = `(async ()=>{
|
|
946
|
+
try{
|
|
947
|
+
${obj.handle_view_server}
|
|
948
|
+
}catch(e){
|
|
949
|
+
next(e);
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
})();`
|
|
953
|
+
try{
|
|
954
|
+
//Logger.warn("[listinfo][dynamicView] [handle view]",obj.code);
|
|
955
|
+
await evalute(func_body,{items,user,getLib:global.getLib,utils,query:utils.query,next,async,joinModel2,moment,numeral,request:options.req})
|
|
956
|
+
}catch(e){
|
|
957
|
+
Logger.error("[listinfo][dynamicView] [handle view] error dynamic view",obj.handle_view_serve,e);
|
|
958
|
+
next(e);
|
|
959
|
+
}
|
|
960
|
+
})
|
|
961
|
+
}
|
|
962
|
+
],(e,rs)=>{
|
|
963
|
+
if(e){
|
|
964
|
+
Logger.error(e);
|
|
965
|
+
return reject(e);
|
|
966
|
+
}
|
|
967
|
+
resolve(rs);
|
|
968
|
+
})
|
|
969
|
+
})
|
|
970
|
+
|
|
971
|
+
}
|
|
972
|
+
//
|
|
973
|
+
|
|
974
|
+
//let fields_have_ref = obj.fields.filter(f=>["Number","String"].indexOf(f.type)>0 && f.ref_model && f.ref_model.indexOf("[")<0 && f.ref_field && f.ref_label);
|
|
975
|
+
let fields_have_ref = obj.fields.filter(f=>["Number","String"].indexOf(f.type)>0 && f.ref_model && f.ref_field && f.ref_label && ["tinhthanh","xaphuong","quanhuyen","account","currency","templatevoucher"].indexOf(f.ref_model)<0);
|
|
976
|
+
if(fields_have_ref.length===0){
|
|
977
|
+
//console.timeEnd(timer);
|
|
978
|
+
return next(null,items);
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
async.map(fields_have_ref, (f,cb)=>{
|
|
982
|
+
setImmediate(async ()=>{
|
|
983
|
+
let ref_model,where,fields,ref_name_model,ref_field,ref_condition,field_name,ref_label;
|
|
984
|
+
ref_label = f.ref_label_as || f.ref_label;
|
|
985
|
+
ref_field = f.ref_field;
|
|
986
|
+
ref_condition = f.ref_condition;
|
|
987
|
+
field_name = f.name;
|
|
988
|
+
try{
|
|
989
|
+
ref_name_model= f.ref_model;
|
|
990
|
+
if(ref_name_model.indexOf("[")>=0 || ref_name_model.indexOf(",")>=0){
|
|
991
|
+
try{
|
|
992
|
+
if(ref_name_model.indexOf("[")>=0){
|
|
993
|
+
ref_model = utils.JSONParser(ref_name_model)
|
|
994
|
+
}else{
|
|
995
|
+
ref_model = ref_name_model.split(",");
|
|
996
|
+
}
|
|
997
|
+
}catch(e){
|
|
998
|
+
Logger.error("ref_model is not valid",ref_name_model,e);
|
|
999
|
+
return cb(e);
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
}else{
|
|
1003
|
+
if(ref_name_model==="dmkh") ref_name_model = "customer";
|
|
1004
|
+
if(ref_name_model==="dmtk") ref_name_model = "account";
|
|
1005
|
+
if(ref_name_model==="dmnt") ref_name_model = "currency";
|
|
1006
|
+
if(ref_name_model==="dmnhtask") ref_name_model = "group";
|
|
1007
|
+
|
|
1008
|
+
ref_model = global.mongoose.models[ref_name_model];
|
|
1009
|
+
if(!ref_model){
|
|
1010
|
+
let _listInofOfRef = await model.findOne({code:ref_name_model}).lean();
|
|
1011
|
+
if(_listInofOfRef && (_listInofOfRef.api_code || _listInofOfRef.model_code)){
|
|
1012
|
+
let model_code = _listInofOfRef.api_code || _listInofOfRef.model_code;
|
|
1013
|
+
ref_model = global.mongoose.models[model_code];
|
|
1014
|
+
}
|
|
1015
|
+
if(!ref_model){
|
|
1016
|
+
let ctrl = global.controllers[ref_name_model.trim().toUpperCase()];
|
|
1017
|
+
if(ctrl) ref_model = ctrl.getProperty("model");
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
if(!ref_model) ref_model = global.getModel(ref_name_model);
|
|
1021
|
+
}
|
|
1022
|
+
}catch(e){
|
|
1023
|
+
Logger.error(e);
|
|
1024
|
+
return cb(e);
|
|
1025
|
+
}
|
|
1026
|
+
/*//chỉ xử lý dynamic joinview nếu field có giá trị
|
|
1027
|
+
let items_will_join = items.filter(item=>{
|
|
1028
|
+
return (item[f.name] || item[f.name]==0) //Chỉ joinview nếu trường đó có giá trị
|
|
1029
|
+
&& (
|
|
1030
|
+
!item[ref_label] //chỉ joinview nếu chưa từng join với ref_model
|
|
1031
|
+
|
|
1032
|
+
||!Object.keys(item.__refs||{}).find(k=>k.includes(ref_name_model)
|
|
1033
|
+
&& k.includes(f.name))
|
|
1034
|
+
)
|
|
1035
|
+
});*/
|
|
1036
|
+
//Cần xử lý joinview tất cả các field để xoá dữ liệu ref không phù hợp
|
|
1037
|
+
let items_will_join = items;
|
|
1038
|
+
//
|
|
1039
|
+
if(items_will_join.length==0) return cb();
|
|
1040
|
+
//xác định các fields cần lấy dữ liệu
|
|
1041
|
+
fields = {[ref_label]:f.ref_label};
|
|
1042
|
+
if(f.ref_model==="trangthai" && f.name=="trang_thai"){
|
|
1043
|
+
fields.color="color";
|
|
1044
|
+
}
|
|
1045
|
+
//
|
|
1046
|
+
if(!_.isArray(ref_model)){
|
|
1047
|
+
if(Object.keys(fields).length>0){
|
|
1048
|
+
//create where
|
|
1049
|
+
//Logger.warn("[listinfo][dynamicView] handle joinview",obj.code,{field_name,ref_name_model,ref_field,ref_label,rows:items_will_join.length});
|
|
1050
|
+
where = (item)=>{
|
|
1051
|
+
let w = {
|
|
1052
|
+
[ref_field]:item[field_name]
|
|
1053
|
+
}
|
|
1054
|
+
//other condition
|
|
1055
|
+
let condition;
|
|
1056
|
+
if(ref_condition && ref_condition.indexOf("API")<0){
|
|
1057
|
+
let func_string = ref_condition;
|
|
1058
|
+
if(func_string.indexOf("return ")<0){
|
|
1059
|
+
func_string = `return ${func_string}`;
|
|
1060
|
+
}
|
|
1061
|
+
let userInfo = {...user};
|
|
1062
|
+
try{
|
|
1063
|
+
condition = evalute(func_string,{master:item,data:item,detail:item,userInfo});
|
|
1064
|
+
}catch(e){
|
|
1065
|
+
Logger.error(e,func_string);
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
if(condition){
|
|
1069
|
+
if(ref_name_model==="participant"){
|
|
1070
|
+
delete condition.groups
|
|
1071
|
+
}
|
|
1072
|
+
//check where of trangthai. Chỉ sử dụng ma_ct và ma_trang_thai
|
|
1073
|
+
if(ref_name_model==="trangthai"){
|
|
1074
|
+
if(condition.ma_ct){
|
|
1075
|
+
w.ma_ct = condition.ma_ct
|
|
1076
|
+
}
|
|
1077
|
+
}else{
|
|
1078
|
+
for(let key in condition){
|
|
1079
|
+
w.$and = w.$and||[];
|
|
1080
|
+
w.$and.push({[key]:condition[key]})
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
//model trạng thái yêu cầu phải có ma_ct
|
|
1085
|
+
if(ref_name_model==="trangthai" && !w.ma_ct){
|
|
1086
|
+
w.ma_ct = api_code
|
|
1087
|
+
}
|
|
1088
|
+
return w;
|
|
1089
|
+
}
|
|
1090
|
+
//id app
|
|
1091
|
+
let id_app;
|
|
1092
|
+
if(underscore.has(ref_model.schema.paths,"id_app")){
|
|
1093
|
+
id_app = user.current_id_app;
|
|
1094
|
+
}
|
|
1095
|
+
//Logger.warn("[listinfo][dynamicView] [handle join]",obj.code,f.name,ref_name_model,fields);
|
|
1096
|
+
await items_will_join.asyncJoinModel2(id_app,ref_model,{where,fields});
|
|
1097
|
+
}
|
|
1098
|
+
}else{
|
|
1099
|
+
if(f.ref_field && f.ref_label){
|
|
1100
|
+
items_will_join.forEach(item=>{
|
|
1101
|
+
let ref_item = ref_model.find(r=>r[f.ref_field]==item[f.name]);
|
|
1102
|
+
if(ref_item) item[ref_label] = ref_item[f.ref_label]
|
|
1103
|
+
|
|
1104
|
+
})
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
cb();
|
|
1108
|
+
})
|
|
1109
|
+
|
|
1110
|
+
},(e)=>{
|
|
1111
|
+
//console.timeEnd(timer);
|
|
1112
|
+
if(e) return next(e);
|
|
1113
|
+
next(null,items);
|
|
1114
|
+
|
|
1115
|
+
})
|
|
1116
|
+
}
|
|
1117
|
+
model.createController = (router,_listInfo)=>{
|
|
1118
|
+
let api_code = _listInfo.api_code || _listInfo.code;
|
|
1119
|
+
//Logger.warn("[listinfo] [createController] create_model",_listInfo.api_code || _listInfo.code,_listInfo.create_model)
|
|
1120
|
+
if(!_listInfo.create_model){
|
|
1121
|
+
return null;
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
|
|
1125
|
+
let sort={},unique=[],_newModel,_newList;
|
|
1126
|
+
_listInfo.fields.filter(f=>f.sort).forEach(f=>{
|
|
1127
|
+
sort[f.name] = f.sort;
|
|
1128
|
+
})
|
|
1129
|
+
if(_listInfo.sort_by){
|
|
1130
|
+
if(_listInfo.sort_by.indexOf("return ")>=0 || _listInfo.sort_by.indexOf("{")===0) {
|
|
1131
|
+
let func_string = _listInfo.sort_by;
|
|
1132
|
+
if(func_string.indexOf("return ")<0){
|
|
1133
|
+
func_string = "return " + func_string;
|
|
1134
|
+
}
|
|
1135
|
+
try{
|
|
1136
|
+
sort = evalute(func_string);
|
|
1137
|
+
}catch(e){
|
|
1138
|
+
Logger.error("[listinfo] error create sort", func_string,e);
|
|
1139
|
+
}
|
|
1140
|
+
}else{
|
|
1141
|
+
sort = _listInfo.sort_by.split(",").reduce((sort,b)=>sort[b]=1,{})
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
//tạo danh sách unique. không được phép unique trường số chứng từ
|
|
1145
|
+
_listInfo.fields.filter(f=>f.unique && f.name!="so_ct").forEach(f=>{
|
|
1146
|
+
unique.push(f.name);
|
|
1147
|
+
})
|
|
1148
|
+
_newList = global.controllers[api_code.toUpperCase()];
|
|
1149
|
+
if(!_newList){
|
|
1150
|
+
//if(api_code=="moduleinfo") Logger.warn("[listinfo] create new API",api_code);
|
|
1151
|
+
if(Object.keys(sort).length===0) sort.date_created = -1;
|
|
1152
|
+
//create new model
|
|
1153
|
+
const require_id_app = (_listInfo.require_id_app!=false && _listInfo.require_id_app!="false");
|
|
1154
|
+
|
|
1155
|
+
_newModel = model.createModel(_listInfo);
|
|
1156
|
+
if(!_newModel){
|
|
1157
|
+
//Logger.warn("[listinfo] không thể tạo model",api_code);
|
|
1158
|
+
return;
|
|
1159
|
+
}
|
|
1160
|
+
_newList = new controller(router,_newModel,api_code.toLowerCase(),{
|
|
1161
|
+
sort: sort,
|
|
1162
|
+
unique:unique,
|
|
1163
|
+
notNeedRight:_listInfo.not_need_right,
|
|
1164
|
+
require_id_app,
|
|
1165
|
+
onView:(user,items,next)=>{
|
|
1166
|
+
next(null,items);
|
|
1167
|
+
//onView(_newList,_listInfo,user,items,next,options);
|
|
1168
|
+
},
|
|
1169
|
+
onCreating:async (user,data,next)=>{
|
|
1170
|
+
next(null,data);
|
|
1171
|
+
},
|
|
1172
|
+
onUpdating:async (user,data,obj,next)=>{
|
|
1173
|
+
next(null,data,obj);
|
|
1174
|
+
},
|
|
1175
|
+
onDeleting:async (user,obj,next)=>{
|
|
1176
|
+
next(null,obj);
|
|
1177
|
+
}
|
|
1178
|
+
})
|
|
1179
|
+
_newList.is_dynamic_list = true;
|
|
1180
|
+
_newList.dynamicDeletePosts ={};
|
|
1181
|
+
_newList.dynamicPosts ={};
|
|
1182
|
+
if(_listInfo.fields && _listInfo.postinfos && _listInfo.postinfos.length>0){
|
|
1183
|
+
//xoá post
|
|
1184
|
+
_newList.dynamicDeletePosts[_listInfo.code] = function(_listInfo,obj){
|
|
1185
|
+
return deletePost(_listInfo,obj);
|
|
1186
|
+
}
|
|
1187
|
+
_newList.dynamicDeletePost = async (obj)=>{
|
|
1188
|
+
return _newList.dynamicDeletePosts[_listInfo.code](_listInfo,obj)
|
|
1189
|
+
}
|
|
1190
|
+
//tạo post
|
|
1191
|
+
_newList.dynamicPosts[_listInfo.code] = async function(obj, fn,options){
|
|
1192
|
+
if(_newList.post){
|
|
1193
|
+
_newList.post(obj, async function(e){
|
|
1194
|
+
if(e) return fn(e);
|
|
1195
|
+
try{
|
|
1196
|
+
let rs = await post(_listInfo,obj);
|
|
1197
|
+
fn(null,rs)
|
|
1198
|
+
}catch(e){
|
|
1199
|
+
fn(e.message || e.error || e)
|
|
1200
|
+
}
|
|
1201
|
+
},options)
|
|
1202
|
+
}else{
|
|
1203
|
+
try{
|
|
1204
|
+
let rs = await post(_listInfo,obj);
|
|
1205
|
+
fn(null,rs)
|
|
1206
|
+
}catch(e){
|
|
1207
|
+
fn(e.message || e.error || e)
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1211
|
+
_newList.dynamicPost = async (obj, fn,options)=>{
|
|
1212
|
+
_newList.dynamicPosts[_listInfo.code](obj, fn,options)
|
|
1213
|
+
}
|
|
1214
|
+
}
|
|
1215
|
+
_newList.route();
|
|
1216
|
+
}else{
|
|
1217
|
+
//if(api_code=="moduleinfo") Logger.warn("[listinfo] update API",api_code);
|
|
1218
|
+
//Logger.warn("update API",api_code);
|
|
1219
|
+
//update options
|
|
1220
|
+
if(Object.keys(sort).length>0) _newList.sort = _newList.options.sort = sort;
|
|
1221
|
+
//update model
|
|
1222
|
+
_newModel = _newList.model;
|
|
1223
|
+
model.updateModel(_listInfo,_newModel);
|
|
1224
|
+
//set new unique and view
|
|
1225
|
+
if(_newList.is_dynamic_list || !_newList.unique || _newList.unique.length===0 ){
|
|
1226
|
+
_newList.unique = _newList.options.unique=unique;
|
|
1227
|
+
}
|
|
1228
|
+
_newList.dynamicDeletePosts =_newList.dynamicDeletePosts || {};
|
|
1229
|
+
_newList.dynamicPosts =_newList.dynamicPosts || {};
|
|
1230
|
+
//Logger.warn("[listinfo] update api",_listInfo.code,api_code,(_listInfo.fields && _listInfo.postinfos && _listInfo.postinfos.length>0));
|
|
1231
|
+
if(_listInfo.fields && _listInfo.postinfos && _listInfo.postinfos.length>0){
|
|
1232
|
+
//xoá post
|
|
1233
|
+
_newList.dynamicDeletePosts[_listInfo.code] = function(_listInfo,obj){
|
|
1234
|
+
return deletePost(_listInfo,obj);
|
|
1235
|
+
}
|
|
1236
|
+
if(!_newList.dynamicDeletePost) _newList.dynamicDeletePost = async (obj)=>{
|
|
1237
|
+
return _newList.dynamicDeletePosts[_listInfo.code](_listInfo,obj)
|
|
1238
|
+
}
|
|
1239
|
+
//tạo post
|
|
1240
|
+
_newList.dynamicPosts[_listInfo.code] = async function(obj, fn,options){
|
|
1241
|
+
//Logger.warn("[listinfo] dynamicPost",_listInfo.code);
|
|
1242
|
+
if(_newList.post){
|
|
1243
|
+
_newList.post(obj, async function(e){
|
|
1244
|
+
if(e) return fn(e);
|
|
1245
|
+
try{
|
|
1246
|
+
let rs = await post(_listInfo,obj);
|
|
1247
|
+
fn(null,rs)
|
|
1248
|
+
}catch(e){
|
|
1249
|
+
fn(e.message || e.error || e)
|
|
1250
|
+
}
|
|
1251
|
+
},options)
|
|
1252
|
+
}else{
|
|
1253
|
+
try{
|
|
1254
|
+
let rs = await post(_listInfo,obj);
|
|
1255
|
+
fn(null,rs)
|
|
1256
|
+
}catch(e){
|
|
1257
|
+
fn(e.message || e.error || e)
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1261
|
+
if(!_newList.dynamicPost) _newList.dynamicPost = async (obj, fn,options)=>{
|
|
1262
|
+
_newList.dynamicPosts[_listInfo.code](obj, fn,options)
|
|
1263
|
+
}
|
|
1264
|
+
}else{
|
|
1265
|
+
_newList.dynamicPosts[_listInfo.code] = undefined
|
|
1266
|
+
_newList.dynamicDeletePosts[_listInfo.code] = undefined
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
}
|
|
1270
|
+
//dynamic View handler
|
|
1271
|
+
_newList.dynamicViews = _newList.dynamicViews ||{};
|
|
1272
|
+
_newList.dynamicViews[_listInfo.code] = (user,items,next,options)=>{
|
|
1273
|
+
onView(_newList,_listInfo,user,items,next,options);
|
|
1274
|
+
}
|
|
1275
|
+
_newList.dynamicView = (user,items,next,options={})=>{
|
|
1276
|
+
let listinfo_code = options.listinfo_code || _listInfo.api_code || _listInfo.code
|
|
1277
|
+
if(_newList.dynamicViews[listinfo_code]){
|
|
1278
|
+
_newList.dynamicViews[listinfo_code](user,items,next,JSON.parse(JSON.stringify(options)));
|
|
1279
|
+
}else{
|
|
1280
|
+
next(null,items);
|
|
1281
|
+
}
|
|
1282
|
+
}
|
|
1283
|
+
//dynamic Creating handler
|
|
1284
|
+
_newList.dynamicFindings = _newList.dynamicFindings ||{};
|
|
1285
|
+
_newList.dynamicFindings[_listInfo.code] = (user,condition,next,options)=>{
|
|
1286
|
+
dynamicFinding(_listInfo,user,condition,next,options);
|
|
1287
|
+
}
|
|
1288
|
+
_newList.dynamicFinding = (user,condition,next,options={})=>{
|
|
1289
|
+
let listinfo_code = options.listinfo_code || _listInfo.api_code || _listInfo.code
|
|
1290
|
+
if(_newList.dynamicFindings[listinfo_code]){
|
|
1291
|
+
_newList.dynamicFindings[listinfo_code](user,condition,next,JSON.parse(JSON.stringify(options)));
|
|
1292
|
+
}else{
|
|
1293
|
+
next(null,condition);
|
|
1294
|
+
}
|
|
1295
|
+
}
|
|
1296
|
+
//dynamic Creating handler
|
|
1297
|
+
_newList.dynamicCreatings = _newList.dynamicCreatings ||{};
|
|
1298
|
+
_newList.dynamicCreatings[_listInfo.code] = (user,obj,next,options)=>{
|
|
1299
|
+
dynamicCreating(_listInfo,user,obj,next,options);
|
|
1300
|
+
}
|
|
1301
|
+
_newList.dynamicCreating = (user,obj,next,options={})=>{
|
|
1302
|
+
let listinfo_code = options.listinfo_code || _listInfo.api_code || _listInfo.code
|
|
1303
|
+
if(_newList.dynamicCreatings[listinfo_code]){
|
|
1304
|
+
_newList.dynamicCreatings[listinfo_code](user,obj,next,JSON.parse(JSON.stringify(options)));
|
|
1305
|
+
}else{
|
|
1306
|
+
next(null,obj);
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
//dynamic Created handler
|
|
1311
|
+
_newList.dynamicCreateds = _newList.dynamicCreateds ||{};
|
|
1312
|
+
_newList.dynamicCreateds[_listInfo.code] = (user,obj,next,options)=>{
|
|
1313
|
+
dynamicCreated(_listInfo,user,obj,next,options);
|
|
1314
|
+
}
|
|
1315
|
+
_newList.dynamicCreated = (user,obj,next,options={})=>{
|
|
1316
|
+
let listinfo_code = options.listinfo_code || _listInfo.api_code || _listInfo.code
|
|
1317
|
+
if(_newList.dynamicCreateds[listinfo_code]){
|
|
1318
|
+
_newList.dynamicCreateds[listinfo_code](user,obj,next,JSON.parse(JSON.stringify(options)));
|
|
1319
|
+
}else{
|
|
1320
|
+
next(null,obj);
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
//dynamic Updating handler
|
|
1324
|
+
_newList.dynamicUpdatings = _newList.dynamicUpdatings ||{};
|
|
1325
|
+
_newList.dynamicUpdatings[_listInfo.code] = (user,data,obj,next,options)=>{
|
|
1326
|
+
dynamicUpdating(_listInfo,user,data,obj,next,options);
|
|
1327
|
+
}
|
|
1328
|
+
_newList.dynamicUpdating = (user,data,obj,next,options={})=>{
|
|
1329
|
+
let listinfo_code = options.listinfo_code || _listInfo.api_code || _listInfo.code
|
|
1330
|
+
//Logger.warn("[listinfo] [dynamicUpdating] chọn hàm xử lý updating...",listinfo_code);
|
|
1331
|
+
if(_newList.dynamicUpdatings[listinfo_code]){
|
|
1332
|
+
_newList.dynamicUpdatings[listinfo_code](user,data,obj,next,JSON.parse(JSON.stringify(options)));
|
|
1333
|
+
}else{
|
|
1334
|
+
next(null,data,obj);
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
//dynamic Updated handler
|
|
1338
|
+
_newList.dynamicUpdateds = _newList.dynamicUpdateds ||{};
|
|
1339
|
+
_newList.dynamicUpdateds[_listInfo.code] = (user,obj,next,options)=>{
|
|
1340
|
+
dynamicUpdated(_listInfo,user,obj,next,options);
|
|
1341
|
+
}
|
|
1342
|
+
_newList.dynamicUpdated = (user,obj,next,options={})=>{
|
|
1343
|
+
let listinfo_code = options.listinfo_code || _listInfo.api_code || _listInfo.code
|
|
1344
|
+
if(_newList.dynamicUpdateds[listinfo_code]){
|
|
1345
|
+
_newList.dynamicUpdateds[listinfo_code](user,obj,next,JSON.parse(JSON.stringify(options)));
|
|
1346
|
+
}else{
|
|
1347
|
+
next(null,obj);
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
//dynamic Deleting handler
|
|
1351
|
+
_newList.dynamicDeletings = _newList.dynamicDeletings ||{};
|
|
1352
|
+
_newList.dynamicDeletings[_listInfo.code] = (user,obj,next,options)=>{
|
|
1353
|
+
dynamicDeleting(_listInfo,user,obj,next,options);
|
|
1354
|
+
}
|
|
1355
|
+
_newList.dynamicDeleting = (user,obj,next,options={})=>{
|
|
1356
|
+
let listinfo_code = options.listinfo_code || _listInfo.api_code || _listInfo.code
|
|
1357
|
+
if(_newList.dynamicDeletings[listinfo_code]){
|
|
1358
|
+
_newList.dynamicDeletings[listinfo_code](user,obj,next,JSON.parse(JSON.stringify(options)));
|
|
1359
|
+
}else{
|
|
1360
|
+
next(null,obj);
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
return _newList;
|
|
1364
|
+
}
|
|
1365
|
+
module.exports = model;
|