flexbiz-server 12.6.11 → 12.6.13
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 +11 -3
- package/server/app.js +11 -10
- package/server/auths/local.js +6 -6
- package/server/cluster.js +11 -12
- package/server/controllers/controller.js +14 -3
- package/server/controllers/controllerRPT.js +4 -4
- package/server/controllers/controllerUtils.js +12 -12
- package/server/controllers/createHandler.js +20 -21
- package/server/controllers/deleteHandler.js +3 -3
- package/server/controllers/findHandler.js +49 -48
- package/server/controllers/updateHandler.js +25 -26
- package/server/controllers/viewHandler.js +14 -14
- package/server/flow/handlers.js +2 -2
- package/server/flow/nodes/aiAnalysis.js +7 -7
- package/server/flow/nodes/checkAction.js +7 -0
- package/server/flow/nodes/email.js +7 -8
- package/server/flow/utils.js +58 -1
- package/server/global.js +1 -1
- package/server/libs/WorkerStaticPool.js +19 -18
- package/server/libs/cdpskh.js +3 -2
- package/server/libs/cdpstk.js +11 -11
- package/server/libs/cktk.js +3 -3
- package/server/libs/ckvt.js +10 -10
- package/server/libs/ckvtnpp.js +6 -5
- package/server/libs/ckvttt.js +5 -5
- package/server/libs/ctvt.js +6 -6
- package/server/libs/dkcn.js +1 -1
- package/server/libs/dktk.js +4 -3
- package/server/libs/docs.js +31 -25
- package/server/libs/dtbanletheosp.js +4 -1
- package/server/libs/email.js +2 -2
- package/server/libs/executiveDashboard.js +8 -0
- package/server/libs/getGiaban.js +2 -2
- package/server/libs/kpistatus.js +38 -36
- package/server/libs/kqchamcong.js +12 -0
- package/server/libs/kqhdkd.js +8 -0
- package/server/libs/post-book.js +4 -3
- package/server/libs/post-socai.js +2 -2
- package/server/libs/post-sokho.js +5 -5
- package/server/libs/redis-cache.js +0 -0
- package/server/libs/sctcnkh.js +18 -0
- package/server/libs/sessionContext.js +6 -11
- package/server/libs/socaitk.js +9 -0
- package/server/libs/thnxt.js +2 -1
- package/server/libs/tinhgiatb.js +4 -4
- package/server/libs/tuoinophaithu.js +11 -10
- package/server/libs/tuoinophaitra.js +12 -10
- package/server/libs/utils.js +8 -4
- package/server/libs/vectorService.js +12 -8
- package/server/models/actionLog.js +2 -0
- package/server/models/aimemory.js +1 -0
- package/server/models/app.js +3 -2
- package/server/models/approve.js +4 -4
- package/server/models/chat_message.js +2 -0
- package/server/models/chat_session.js +2 -0
- package/server/models/checkin.js +2 -2
- package/server/models/chitietluongds.js +4 -3
- package/server/models/customer.js +8 -9
- package/server/models/data_list_config.js +2 -2
- package/server/models/dmchietkhau.js +3 -4
- package/server/models/dmchietkhauhd.js +3 -4
- package/server/models/dmdiemthuong.js +2 -4
- package/server/models/dmhoahonghd.js +2 -3
- package/server/models/dmhoahongnpp.js +2 -3
- package/server/models/dmletet.js +2 -2
- package/server/models/dmphatdichvu.js +1 -2
- package/server/models/filechunk.js +2 -2
- package/server/models/hd2.js +9 -11
- package/server/models/hd3.js +10 -11
- package/server/models/listinfo.js +3 -1
- package/server/models/pc0.js +4 -4
- package/server/models/pn1.js +9 -11
- package/server/models/pn2.js +3 -3
- package/server/models/pnc.js +9 -10
- package/server/models/pnh.js +5 -6
- package/server/models/pnk.js +7 -7
- package/server/models/pxc.js +9 -10
- package/server/models/pxh.js +6 -7
- package/server/models/pxk.js +7 -8
- package/server/models/schedule.js +17 -16
- package/server/models/sokho.js +10 -11
- package/server/models/step.js +1 -1
- package/server/modules/lists/bg-cdvt.js +1 -1
- package/server/modules/lists/bg-cdvtnpp.js +1 -1
- package/server/modules/lists/ls-chat_session.js +5 -0
- package/server/modules/lists/ls-checkin.js +11 -12
- package/server/modules/lists/ls-chitietluongds.js +2 -2
- package/server/modules/lists/ls-customer.js +20 -20
- package/server/modules/lists/ls-dmnv.js +12 -11
- package/server/modules/lists/ls-file.js +5 -5
- package/server/modules/lists/ls-mailsent.js +3 -3
- package/server/modules/lists/ls-warranty.js +3 -4
- package/server/modules/reports/calc-tinhluong.js +42 -40
- package/server/modules/reports/rp-dtbanlekempk.js +1 -1
- package/server/modules/reports/rp-dtbanletheoctkempk.js +13 -13
- package/server/modules/reports/rp-kgchamcong.js +1 -12
- package/server/modules/reports/rp-kqhdkd.js +1 -7
- package/server/modules/reports/rp-phanbochitienchohoadon.js +1 -1
- package/server/modules/reports/rp-ptcttct.js +2 -2
- package/server/modules/reports/rp-sctcnkh.js +4 -19
- package/server/modules/reports/rp-socaitk.js +1 -8
- package/server/modules/systems/sys-app.js +20 -19
- package/server/modules/vouchers/vo-hd2.js +71 -85
- package/server/modules/vouchers/vo-hd3.js +15 -21
- package/server/modules/vouchers/vo-pbl.js +48 -48
- package/server/modules/vouchers/vo-pc1.js +11 -11
- package/server/modules/vouchers/vo-pc2.js +13 -12
- package/server/modules/vouchers/vo-pgh.js +12 -15
- package/server/modules/vouchers/vo-pn1.js +27 -33
- package/server/modules/vouchers/vo-pnc.js +14 -15
- package/server/modules/vouchers/vo-pnh.js +12 -15
- package/server/modules/vouchers/vo-pnk.js +11 -15
- package/server/modules/vouchers/vo-po1.js +0 -0
- package/server/modules/vouchers/vo-pxc.js +24 -22
- package/server/modules/vouchers/vo-pxh.js +13 -22
- package/server/modules/vouchers/vo-pxk.js +11 -16
- package/server/route.js +32 -32
- package/server/workers/inputWorker.js +8 -8
- package/server/workers/reportWorker.js +3 -4
- package/server/workers/sendEmail.js +11 -11
- package/server/workers/worker-utils.js +3 -1
- package/server/actions/mailtemplate.js +0 -142
- package/server/actions/schedule.js +0 -23
- package/server/libs/schedule.js +0 -18
- package/server/models/bds_area.js +0 -4
- package/server/models/bds_block.js +0 -3
- package/server/models/bds_building.js +0 -4
- package/server/models/bds_floor.js +0 -3
- package/server/models/bds_floordetail.js +0 -9
- package/server/models/bds_nhadat.js +0 -13
- package/server/models/bds_nhadat_moigioi_ban.js +0 -3
- package/server/models/bds_nhomnhadat.js +0 -4
- package/server/models/bds_phanloainhadat.js +0 -3
- package/server/models/campaign.js +0 -6
- package/server/models/form.js +0 -3
- package/server/models/formvalue.js +0 -3
- package/server/models/hlink.js +0 -2
- package/server/models/hlinkvalue.js +0 -2
- package/server/models/kbm_bcdkt.js +0 -4
- package/server/models/kbm_kqhdkd.js +0 -3
- package/server/models/kbm_lcttgt.js +0 -5
- package/server/models/kbm_lctttt.js +0 -4
- package/server/models/kbm_pttct.js +0 -4
- package/server/models/kbm_tkgtgt.js +0 -5
- package/server/models/mailschedule.js +0 -2
- package/server/models/waitevent.js +0 -2
- package/server/modules/lists/ls-bds_area.js +0 -3
- package/server/modules/lists/ls-bds_block.js +0 -1
- package/server/modules/lists/ls-bds_building.js +0 -3
- package/server/modules/lists/ls-bds_dmnhbds.js +0 -6
- package/server/modules/lists/ls-bds_floor.js +0 -2
- package/server/modules/lists/ls-bds_floordetail.js +0 -19
- package/server/modules/lists/ls-bds_nhadat.js +0 -19
- package/server/modules/lists/ls-bds_nhadat_moigioi_ban.js +0 -9
- package/server/modules/lists/ls-bds_nhomnhadat.js +0 -1
- package/server/modules/lists/ls-bds_phanloainhadat.js +0 -1
- package/server/modules/lists/ls-campaign.js +0 -1
- package/server/modules/lists/ls-dmnhnd.js +0 -1
- package/server/modules/lists/ls-formvalue.js +0 -1
- package/server/modules/lists/ls-hlink.js +0 -1
- package/server/modules/lists/ls-hlinkvalue.js +0 -1
- package/server/modules/lists/ls-mailschedule.js +0 -7
- package/server/modules/lists/ls-waitevent.js +0 -1
- package/server/modules/public/form.js +0 -7
- package/server/modules/public/hlink.js +0 -3
package/server/models/pxk.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
const validAccount=require("../libs/validator-account"),validVt=require("../libs/validator-vt"),validator=require("../libs/validator"),
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
uppercase:!0,maxlength:32},
|
|
5
|
-
|
|
1
|
+
const validAccount=require("../libs/validator-account"),validVt=require("../libs/validator-vt"),validator=require("../libs/validator"),detailSchema=new Schema({ma_vt:{type:String,required:!0,uppercase:!0,maxlength:1024,trim:!0},ma_dvt:{type:String,required:!0,maxlength:32},ma_kho:{type:String,uppercase:!0,maxlength:32,trim:!0},tk_vt:{type:String,required:!0,uppercase:!0,maxlength:32},tk_du:{type:String,uppercase:!0,maxlength:32},ton_kho:{type:Number,default:0},sl_xuat:{type:Number,default:0},gia_von:{type:Number,
|
|
2
|
+
default:0},gia_von_nt:{type:Number,default:0},tien_xuat:{type:Number,default:0},tien_xuat_nt:{type:Number,default:0},px_gia_dd:{type:Boolean,default:!1},ma_kh:{type:String,uppercase:!0,default:"",maxlength:32},ma_bp:{type:String,uppercase:!0,default:"",maxlength:32},ma_phi:{type:String,uppercase:!0,default:"",maxlength:32},ma_hd:{type:String,uppercase:!0,default:"",maxlength:32},ma_dt:{type:String,uppercase:!0,default:"",maxlength:32},ma_nv:{type:String,uppercase:!0,default:"",maxlength:32},ma_lo:{type:String,
|
|
3
|
+
default:"",uppercase:!0,maxlength:32},han_sd:{type:Date},ma_vt2:{type:String,default:"",uppercase:!0,maxlength:32},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32},ma_tt3:{type:String,default:"",uppercase:!0,maxlength:32},ma_sp:{type:String,uppercase:!0,default:"",maxlength:1024},ma_dvt_sp:{type:String,maxlength:32},ma_tt1_sp:{type:String,default:"",uppercase:!0,maxlength:32},ma_tt2_sp:{type:String,default:"",uppercase:!0,maxlength:32},
|
|
4
|
+
ma_tt3_sp:{type:String,default:"",uppercase:!0,maxlength:32},ma_cum_chi_tiet:{type:String,uppercase:!0,default:"",maxlength:32},ten_cum_chi_tiet:{type:String,default:"",maxlength:1024},ma_cong_doan:{type:String,uppercase:!0,default:"",maxlength:32},id_lenhsx:{type:String,maxlength:1024},id_dinhmucsx:{type:String,maxlength:1024},id_pnk:{type:String,maxlength:1024},id_dn:{type:String,maxlength:1024},exfields_detail:Schema.Types.Mixed,line:{type:Number,default:0}});
|
|
5
|
+
detailSchema.validate={tk_vt:validAccount.existsTk,ma_kh:validator.existsKh,ma_vt:validVt.existsVt,ma_sp:validVt.existsVt,ma_kho:validVt.existsKho,ma_dvt:validator.existsDvt};
|
|
6
6
|
const pxkSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_dvcs:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,default:"PXK",required:!0,uppercase:!0,maxlength:32},ma_gd:{type:String,default:"0",maxlength:32},so_ct:{type:String,required:!0,uppercase:!0,trim:!0,maxlength:32},ngay_ct:{type:Date,default:Date.now,required:!0},ma_nt:{type:String,required:"ma_nt is required",default:"VND",trim:!0,uppercase:!0,maxlength:32},ty_gia:{type:Number,required:!0,min:0,default:1},
|
|
7
7
|
ong_ba:{type:String,default:"",maxlength:1024},dien_giai:{type:String,default:"",maxlength:1024},exfields:Schema.Types.Mixed,id_lenhcapphat:{type:String,maxlength:1024},id_pnk:{type:String,maxlength:1024},trang_thai:{type:String,maxlength:32},ma_kho:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ten_kho:String,ma_dt:{type:String,uppercase:!0,maxlength:32},ma_kh:{type:String,uppercase:!0,maxlength:32},tk_du:{type:String,uppercase:!0,required:"B\u1ea1n ch\u01b0a nh\u1eadp t\u00e0i kho\u1ea3n \u0111\u1ed1i \u1ee9ng"},
|
|
8
|
-
status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,default:0},visible_to_users:[String],update_right:[String],delete_right:[String],
|
|
9
|
-
(global.configs||{}).createIndexes&&(pxkSchema.index({id_app:1,
|
|
10
|
-
module.exports=mongoose.models.pxk||mongoose.model("pxk",pxkSchema);
|
|
8
|
+
status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,default:0},visible_to_users:[String],update_right:[String],delete_right:[String],details:{type:[detailSchema]}});pxkSchema.validate={ma_dvcs:validator.existsDvcs,ma_nt:validator.existsNt,ngay_ct:validator.unlockBook,tk_du:validAccount.existsTk};
|
|
9
|
+
(global.configs||{}).createIndexes&&(pxkSchema.index({id_app:1,so_ct:-1,ngay_ct:-1}),pxkSchema.index({id_app:1,ma_ct:1}),pxkSchema.index({id_app:1,user_created:1,date_created:-1}),pxkSchema.index({id_app:1,ngay_ct:-1,"details.ma_vt":1}),pxkSchema.index({id_app:1,status:1}),pxkSchema.index({id_app:1,trang_thai:1,user_created:1,visible_to:1,visible_to_users:1}),pxkSchema.index({id_app:1,trang_thai:1}));module.exports=mongoose.models.pxk||mongoose.model("pxk",pxkSchema);
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
const Moment=require("moment"),fs=require("fs"),path=require("path"),app=require("./app"),schedule_log=require("./schedule_log"),
|
|
2
|
-
$data_schedule
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
$
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
model.
|
|
11
|
-
|
|
12
|
-
model.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
const Moment=require("moment"),fs=require("fs"),path=require("path"),app=require("./app"),schedule_log=require("./schedule_log"),_=require("lodash"),Controller=require("../controllers/controller"),{executeInTransaction}=require("../libs/sessionContext"),crypto=require("crypto"),agents=require("../agents/agents"),TIME_CHECK=6E4,actions={runAIAgent:async $data_schedule$$=>{$data_schedule$$=$data_schedule$$.data;if(_.isString($data_schedule$$))try{$data_schedule$$=JSON.parse($data_schedule$$)}catch($e$$){Logger.error("[schedule][runAIAgent] parse err:",
|
|
2
|
+
$e$$,$data_schedule$$)}if($data_schedule$$&&$data_schedule$$.prompt_message&&$data_schedule$$.user_id)try{Logger.info(`[Auto-AI] \u0110ang ch\u1ea1y t\u00e1c v\u1ee5 t\u1ef1 \u0111\u1ed9ng cho user: ${$data_schedule$$.user_id}`),await agents.runFinanceAgent($data_schedule$$.id_app,$data_schedule$$.user_id,$data_schedule$$.session_id,$data_schedule$$.prompt_message)}catch($error$$){throw Logger.error("[schedule] [runAIAgent] L\u1ed7i th\u1ef1c thi AI:",$error$$),$error$$;}},sendNotification:async $data$jscomp$1_schedule$$=>
|
|
3
|
+
{if(($data$jscomp$1_schedule$$=$data$jscomp$1_schedule$$.data)&&typeof $data$jscomp$1_schedule$$=="string")try{$data$jscomp$1_schedule$$=JSON.parse($data$jscomp$1_schedule$$)}catch($e$$){Logger.error("data of schedule is not valid",$data$jscomp$1_schedule$$,$e$$);return}if($data$jscomp$1_schedule$$&&$data$jscomp$1_schedule$$.users_will_receive&&$data$jscomp$1_schedule$$.title){var $notificationData$$={_id:$data$jscomp$1_schedule$$._id,trang_thai:$data$jscomp$1_schedule$$.trang_thai,id_app:$data$jscomp$1_schedule$$.id_app,
|
|
4
|
+
title:$data$jscomp$1_schedule$$.title,body:$data$jscomp$1_schedule$$.body,code:$data$jscomp$1_schedule$$.ma_ct||$data$jscomp$1_schedule$$.code,event:$data$jscomp$1_schedule$$.event||"reminder",action:($data$jscomp$1_schedule$$.event||"reminder").toUpperCase()};app.emitEvent($data$jscomp$1_schedule$$.id_app,$data$jscomp$1_schedule$$.event,$notificationData$$,null,$data$jscomp$1_schedule$$.users_will_receive,!0)}},updateData:async $module_name_schedule$$=>{let $data$$=$module_name_schedule$$.data;_.isString($data$$)&&
|
|
5
|
+
($data$$=JSON.parse($data$$));if($data$$&&$data$$._id&&global.mongoose.Types.ObjectId.isValid($data$$._id)&&($module_name_schedule$$=$data$$.module||$data$$.model)&&!["token","tokens","user","asskey"].includes($module_name_schedule$$.toLowerCase())){var $module$$=global.controllers[$module_name_schedule$$.toUpperCase()];if($module$$){let $_model$$=$module$$.model||global.getModel($module_name_schedule$$);delete $data$$.module;delete $data$$.model;try{await executeInTransaction(async()=>{await $_model$$.updateOne({id_app:$data$$.id_app,
|
|
6
|
+
_id:$data$$._id},$data$$);let $obj$$=await $_model$$.findOne({_id:$data$$._id});await Controller.asyncPostData($obj$$,$module$$)})}catch($e$$){throw Logger.error("[schedule] [updateData]",$e$$),$e$$;}}else Logger.error("[schedule] [updateData] module "+$data$$.module+" is not exists")}},runScript:$processPath_schedule$$=>{let $script$$=$processPath_schedule$$.script;if($script$$){$processPath_schedule$$=path.join(path.dirname(__dirname),"workers","runScript.js");if(!fs.existsSync($processPath_schedule$$))return Logger.error("runScript process is not exist"),
|
|
7
|
+
Promise.reject("runScript process is not exist");if(!global.runScriptPool){const $StaticPool$$=require("../libs/WorkerStaticPool");global.runScriptPool=new $StaticPool$$($processPath_schedule$$,0,1)}return new Promise(($resolve$$,$reject$$)=>{global.runScriptPool.exec({script:$script$$,configs:JSON.parse(JSON.stringify(global.configs))},$response$$=>{$response$$&&$response$$.error?(Logger.error($response$$.error),$reject$$($response$$.error)):(Logger.info("run script result:",$response$$),$resolve$$($response$$))})})}}},
|
|
8
|
+
mongoose=global.mongoose||require("mongoose"),Schema=mongoose.Schema,scheduleSchema=new Schema({id_link:{type:String},title:{type:String,required:!0},action:{type:String,required:!0},data:{type:Schema.Types.Mixed},script:String,time_run:{type:Date,required:!0},repeat:{type:Number,default:0},next_run:Date,finish_run:Date,trang_thai:{type:String,default:"0"},cron_expression:{type:String},exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,
|
|
9
|
+
default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});(global.configs||{}).createIndexes&&(scheduleSchema.index({trang_thai:1,next_run:1,time_run:1}),scheduleSchema.index({action:1}),scheduleSchema.index({id_link:1}));
|
|
10
|
+
const model=mongoose.models.schedule||mongoose.model("schedule",scheduleSchema),acquireLock=($key$$,$ttlInMs$$)=>new Promise($resolve$$=>{if(!global.clientRedis)return $resolve$$(!0);global.clientRedis.set($key$$,"LOCKED","NX","PX",$ttlInMs$$,($err$$,$res$$)=>{$resolve$$($res$$==="OK")})}),calculateNextRun=$schedule$$=>{if($schedule$$.cron_expression)try{return require("cron-parser").parseExpression($schedule$$.cron_expression).next().toDate()}catch($err$$){return Logger.error("Error parsing cron expression",
|
|
11
|
+
$err$$),Moment().add(1,"hours").toDate()}let $next_run$$=Moment();switch($schedule$$.repeat){case 1:$next_run$$=$next_run$$.add(1,"days");break;case 2:$next_run$$=$next_run$$.add(1,"weeks");break;case 3:$next_run$$=$next_run$$.add(1,"months");break;case 4:$next_run$$=$next_run$$.add(1,"quarters");break;case 7:$next_run$$=$next_run$$.add(1,"hours");break;default:$next_run$$=$next_run$$.add(1,"years")}return $next_run$$.toDate()};
|
|
12
|
+
model.every=async($cron_expression$$,$action$$,$data$$,$options$$={})=>{try{const $time_run$$=require("cron-parser").parseExpression($cron_expression$$).next().toDate(),$hashString$$=$cron_expression$$+$action$$+JSON.stringify($data$$||{}),$generatedIdLink$$=`cron_${crypto.createHash("md5").update($hashString$$).digest("hex")}`,$id_link$$=$options$$.id_link||$generatedIdLink$$;await model.findOneAndUpdate({id_link:$id_link$$},{$set:{id_link:$id_link$$,title:$options$$.title||`Auto Cron Job: ${$action$$}`,
|
|
13
|
+
action:$action$$,data:$data$$,time_run:$time_run$$,cron_expression:$cron_expression$$,repeat:-1,trang_thai:"0"}},{upsert:!0,new:!0});Logger.info(`[Schedule] \u0110\u00e3 thi\u1ebft l\u1eadp job '${$action$$}' ch\u1ea1y theo cron [${$cron_expression$$}]. L\u1ea7n ch\u1ea1y ti\u1ebfp theo: ${$time_run$$}`)}catch($err$$){Logger.error(`[Schedule] L\u1ed7i khi t\u1ea1o schedule job (Ki\u1ec3m tra l\u1ea1i c\u00fa ph\u00e1p): ${$cron_expression$$}`,$err$$)}};
|
|
14
|
+
model.addSchedule=async $schedule$$=>{try{await model.create($schedule$$),Logger.info("added a schedule, time state at",$schedule$$.time_run)}catch($e$$){Logger.error("error add schedule to db",$e$$)}};model.removeSchedule=async $id$$=>{try{await model.deleteOne({_id:$id$$})}catch($e$$){Logger.error("error remove schedule",$e$$)}};model.removeScheduleLink=async $id_link$$=>{try{await model.deleteOne({id_link:$id_link$$})}catch($e$$){Logger.error("error remove schedule",$e$$)}};
|
|
15
|
+
model.check=async()=>{try{var $next_run$$=Moment().toDate(),$final_state_pendingSchedules$$=await model.find({trang_thai:"0",$or:[{next_run:{$lte:$next_run$$}},{time_run:{$lte:$next_run$$},next_run:null}]}).lean();for(const $schedule$$ of $final_state_pendingSchedules$$){if(!await acquireLock(`schedule:lock:${$schedule$$._id.toString()}`,5E4))continue;if(!await model.findOneAndUpdate({_id:$schedule$$._id,trang_thai:"0"},{$set:{trang_thai:"5"}}))continue;$next_run$$=null;$final_state_pendingSchedules$$=
|
|
16
|
+
"9";if($schedule$$.repeat){$next_run$$=calculateNextRun($schedule$$);let $finish_run$$=$schedule$$.finish_run?Moment($schedule$$.finish_run).startOf("date"):null;if(!$finish_run$$||$finish_run$$.toDate()>=$next_run$$.toDate())$final_state_pendingSchedules$$="0"}let $action$$=$schedule$$.action;if(actions[$action$$])try{await actions[$action$$]($schedule$$),await schedule_log.create({id_schedule:$schedule$$._id,message:"ok"})}catch($e$$){await schedule_log.create({id_schedule:$schedule$$._id,message:"Error: "+
|
|
17
|
+
($e$$.message||$e$$.error||$e$$)}),Logger.error($e$$)}await model.updateOne({_id:$schedule$$._id},{$set:{trang_thai:$final_state_pendingSchedules$$,next_run:$next_run$$}})}}catch($e$$){Logger.error("[schedule] Check error:",$e$$)}};const startSchedulerLoop=async()=>{await model.check();setTimeout(startSchedulerLoop,TIME_CHECK)};model.start=()=>{Logger.info("Scheduler started successfully.");startSchedulerLoop()};module.exports=model;
|
package/server/models/sokho.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
const moment=require("moment"),sokhoSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},ma_dvcs:{type:String,required:!0,maxlength:1024},id_ct:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ma_gd:{type:String,default:"0",maxlength:32,trim:!0},ngay_ct:{type:Date,required:!0},ngay_ct_full:Date,so_ct:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},nxt:{type:Number,required:!0},ma_nt:{type:String,default:"VND",required:!0,
|
|
2
|
-
uppercase:!0,maxlength:32,trim:!0},ty_gia:{type:Number,default:1},ma_vt:{type:String,required:!0,uppercase:!0,maxlength:1024,trim:!0},ma_dvt:{type:String,maxlength:32,trim:!0},ma_kho:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ma_kho_n:{type:String},ma_kho_x:{type:String},sl_nhap:{type:Number,default:0},sl_xuat:{type:Number,default:0},he_so_qd:{type:Number,default:1},sl_nhap_qd:{type:Number,default:0},sl_xuat_qd:{type:Number,
|
|
3
|
-
default
|
|
4
|
-
default:0},
|
|
5
|
-
|
|
6
|
-
maxlength:32,trim:!0},
|
|
7
|
-
uppercase:!0,maxlength:32,trim:!0},loai_phuong_tien:String,
|
|
8
|
-
ma_td2:Schema.Types.Mixed,ma_td3:Schema.Types.Mixed,ma_td4:Schema.Types.Mixed,ma_td5:Schema.Types.Mixed,ma_td6:Schema.Types.Mixed,ma_td7:Schema.Types.Mixed,ma_td8:Schema.Types.Mixed,ma_td9:Schema.Types.Mixed,pt_thanh_toan:String,pt_thanh_toan2:String,tien_paymentByPoints:Number,tien_evoucher:Number,cashier:String,ma_sp:{type:String,default:"",uppercase:!0,maxlength:1024,trim:!0},sl_sp:Number,ma_dvt_sp:{type:String,maxlength:32,trim:!0},ma_tt1_sp:{type:String,
|
|
9
|
-
ma_tt2_sp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3_sp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_cum_chi_tiet:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_cum_chi_tiet:{type:String,default:"",maxlength:1024},ma_cong_doan:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},id_lenhsx:{type:String,maxlength:1024},id_dinhmucsx:{type:String,maxlength:1024},id_lenhcapphat:{type:String,maxlength:1024},
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
{toJSON:{virtuals:!0}});
|
|
2
|
+
uppercase:!0,maxlength:32,trim:!0},ty_gia:{type:Number,default:1},ma_vt:{type:String,required:!0,uppercase:!0,maxlength:1024,trim:!0},ma_dvt:{type:String,maxlength:32,trim:!0},ma_kho:{type:String,required:!0,uppercase:!0,maxlength:32,trim:!0},ma_vt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_kho_n:{type:String},ma_kho_x:{type:String},sl_nhap:{type:Number,default:0},sl_xuat:{type:Number,default:0},he_so_qd:{type:Number,default:1},sl_nhap_qd:{type:Number,default:0},sl_xuat_qd:{type:Number,
|
|
3
|
+
default:0},pn_gia_tb:{type:Boolean,default:!1},px_gia_dd:{type:Boolean,default:!1},gia_von_nt:{type:Number,default:0},gia_von:{type:Number,default:0},tien_hang_nt:{type:Number,default:0},tien_hang:{type:Number,default:0},ty_le_ck:{type:Number,default:0},tien_ck_nt:{type:Number,default:0},tien_ck:{type:Number,default:0},tien_phi_nt:{type:Number,default:0},tien_phi:{type:Number,default:0},tien_cp_nt:{type:Number,default:0},tien_cp:{type:Number,default:0},tien_hang_nk:{type:Number,default:0},tien_hang_nk_nt:{type:Number,
|
|
4
|
+
default:0},thue_suat_nk:{type:Number,default:0},tien_thue_nk:{type:Number,default:0},tien_thue_nk_nt:{type:Number,default:0},tien_nhap_nt:{type:Number,default:0},tien_nhap:{type:Number,default:0},tien_xuat:{type:Number,default:0},tien_xuat_nt:{type:Number,default:0},gia_ban:{type:Number,default:0},gia_ban_nt:{type:Number,default:0},tien:{type:Number,default:0},tien_nt:{type:Number,default:0},gia_ban_ct:{type:Number,default:0},gia_ban_ct_nt:{type:Number,default:0},tien_hang_ct_nt:{type:Number,default:0},
|
|
5
|
+
tien_hang_ct:{type:Number,default:0},tien_ct:{type:Number,default:0},tien_ct_nt:{type:Number,default:0},thue_suat:{type:Number,default:0},tien_thue_nt:{type:Number,default:0},tien_thue:{type:Number,default:0},dien_giai:{type:String,default:"",maxlength:1024},ma_lo:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},han_sd:{type:Date},ma_tt1:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3:{type:String,default:"",
|
|
6
|
+
uppercase:!0,maxlength:32,trim:!0},ma_kh:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ma_bp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_phi:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_hd:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_dt:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_nv:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_nv_giao_hang:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},
|
|
7
|
+
phu_xe:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},loai_phuong_tien:String,tk_vt:{type:String,uppercase:!0,maxlength:32,trim:!0},tk_gv:{type:String,uppercase:!0,maxlength:32,trim:!0},tk_du:{type:String,uppercase:!0,maxlength:32,trim:!0},tk_tl:{type:String,uppercase:!0,maxlength:32,trim:!0},tk_dt:{type:String,uppercase:!0,maxlength:32,trim:!0},tk_ck:{type:String,uppercase:!0,maxlength:32,trim:!0},gio:Number,ngay:Number,thang:Number,quy:Number,nam:Number,ma_kenh:String,ma_td1:Schema.Types.Mixed,
|
|
8
|
+
ma_td2:Schema.Types.Mixed,ma_td3:Schema.Types.Mixed,ma_td4:Schema.Types.Mixed,ma_td5:Schema.Types.Mixed,ma_td6:Schema.Types.Mixed,ma_td7:Schema.Types.Mixed,ma_td8:Schema.Types.Mixed,ma_td9:Schema.Types.Mixed,pt_thanh_toan:String,pt_thanh_toan2:String,tien_paymentByPoints:Number,tien_evoucher:Number,cashier:String,ma_ca:{type:String,uppercase:!0,maxlength:32,trim:!0},ma_sp:{type:String,default:"",uppercase:!0,maxlength:1024,trim:!0},sl_sp:Number,ma_dvt_sp:{type:String,maxlength:32,trim:!0},ma_tt1_sp:{type:String,
|
|
9
|
+
default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt2_sp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_tt3_sp:{type:String,default:"",uppercase:!0,maxlength:32,trim:!0},ma_cum_chi_tiet:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},ten_cum_chi_tiet:{type:String,default:"",maxlength:1024},ma_cong_doan:{type:String,uppercase:!0,default:"",maxlength:32,trim:!0},id_lenhsx:{type:String,maxlength:1024},id_dinhmucsx:{type:String,maxlength:1024},id_lenhcapphat:{type:String,maxlength:1024},
|
|
10
|
+
id_cs:{type:String,maxlength:1024},id_cs_ck:{type:String,maxlength:1024},trang_thai:{type:String,maxlength:32},id_reason:{type:String,maxlength:1024},exfields:Schema.Types.Mixed,exfields_detail:Schema.Types.Mixed,user_nv:String,ty_le_hoa_hong:Number,tien_hoa_hong:Number,chuyen_ngay:Boolean,tk_no_hoa_hong:String,tk_co_hoa_hong:String,user_gt:String,ty_le_hoa_hong_gt:Number,tien_hoa_hong_gt:Number,chuyen_ngay_gt:Boolean,tk_no_hoa_hong_gt:String,tk_co_hoa_hong_gt:String,user_ctv:String,ty_le_hoa_hong_ctv:Number,
|
|
11
|
+
tien_hoa_hong_ctv:Number,chuyen_ngay_ctv:Boolean,tk_cn_ctv:String,tk_cp_ctv:String,user_ql:String,ty_le_hoa_hong_ql:Number,tien_hoa_hong_ql:Number,chuyen_ngay_ql:Boolean,tk_no_hoa_hong_ql:String,tk_co_hoa_hong_ql:String,so_seri:String,line:Number,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},id_client:String,listinfo_code:String},{toJSON:{virtuals:!0}});
|
|
13
12
|
(global.configs||{}).createIndexes&&(sokhoSchema.index({id_app:1}),sokhoSchema.index({id_app:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_dvcs:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,so_ct:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_ct:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_ct:1,ngay_ct:-1,ma_vt:1,ma_nv:1,ma_kh:1}),sokhoSchema.index({id_app:1,ma_ct:1,ngay_ct:-1,ma_vt:1,ma_nv_giao_hang:1,ma_kh:1}),sokhoSchema.index({id_app:1,ma_ct:1,ngay_ct:-1,ma_vt:1,phu_xe:1,ma_kh:1}),sokhoSchema.index({id_app:1,
|
|
14
13
|
ma_vt:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_vt:1,ma_lo:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_vt:1,ma_lo:1,han_sd:-1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_vt:1,ma_tt1:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_vt:1,ma_tt2:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_vt:1,ma_tt3:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho:1,ma_vt:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho:1,ma_vt:1,ma_lo:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,
|
|
15
14
|
ma_kho:1,ma_vt:1,ma_lo:1,han_sd:-1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho:1,ma_vt:1,ma_tt1:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho:1,ma_vt:1,ma_tt2:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho:1,ma_vt:1,ma_tt3:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho:1,ma_vt:1,nxt:1,pn_gia_tb:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho:1,ma_vt:1,nxt:1,px_gia_dd:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho_n:1,ngay_ct:-1}),sokhoSchema.index({id_app:1,ma_kho_x:1,ngay_ct:-1}),
|
package/server/models/step.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const stepSchema=new Schema({title:{type:String,required:!0},step_style:{type:String,required:!0,lowercase:!0},actions:String,exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""},visible_to:{type:Number,default:0},visible_to_users:[String],update_right:[String],delete_right:[String],dataview_to:{type:Number,default:0},dataview_to_users:[String]});
|
|
2
|
-
(global.configs||{}).createIndexes&&(stepSchema.index({id_app:1,title:1}),stepSchema.index({
|
|
2
|
+
(global.configs||{}).createIndexes&&(stepSchema.index({id_app:1,title:1}),stepSchema.index({id_app:1,status:1}),stepSchema.index({id_app:1,user_created:1,visible_to:1,visible_to_users:1}));const model=mongoose.models.step||mongoose.model("step",stepSchema);module.exports=model;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const model=global.getModel("cdvt"),controller=require("../../controllers/controller"),dmvt=global.getModel("dmvt"),dmkho=global.getModel("dmkho"),tontucthoi=global.getModel("tontucthoi"),async=require("async"),moment=require("moment"),utils=require("../../libs/utils"),cdvt=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"cdvt",{sort:{nam:-1,ma_dvcs:1,ma_kho:1,ma_vt:1,han_sd:1},unique:"ma_dvcs nam ma_kho ma_vt ma_lo ma_tt1 ma_tt2 ma_tt3".split(" ")});$contr_router$$.route();
|
|
2
|
-
$contr_router$$.view=function($user$$,$result$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.parallel({vt:function($callback$$){$result$$.joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:
|
|
2
|
+
$contr_router$$.view=function($user$$,$result$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.parallel({vt:function($callback$$){$result$$.joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt ma_dvt ma_tt1_yn ma_tt2_yn ma_tt3_yn ma_lo_yn".split(" ")}],function($kq$$){$callback$$(null,$kq$$)})},kho:function($callback$$){$result$$.joinModel2($id_app$$,dmkho,[{where:"ma_kho",fields:[{name:"ten_kho",value:"ten_kho"}]}],function($kq$$){$callback$$(null,$kq$$)})}},function($error$$){if($error$$)return $fn$$($error$$);
|
|
3
3
|
$fn$$(null,$result$$)})};$contr_router$$.creating=async function($ngay_ks_user$$,$obj$$,$callback$$){let $_app$$=await global.getModel("app").findOne({_id:$ngay_ks_user$$.current_id_app});if(!$_app$$)return $callback$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");$obj$$.nam||($obj$$.nam=$_app$$.nam_bd);let $den_ngay$$=moment([$obj$$.nam,0,1]).startOf("date").toDate();if($ngay_ks_user$$=await utils.isBookLocked({id_app:$ngay_ks_user$$.current_id_app,ngay_ct:$den_ngay$$,ngay_ks:$_app$$.ngay_ks}))return $callback$$(`\u0110\u00e3 kh\u00f3a s\u1ed5 \u0111\u1ebfn ng\u00e0y ${moment($ngay_ks_user$$).format("DD/MM/YYYY")}`);
|
|
4
4
|
$callback$$(null,$obj$$)};$contr_router$$.created=function($user$$,$obj$$,$callback$$){tontucthoi.tinhTonTucThoi($obj$$,$e$$=>{$e$$&&Logger.error("[cdvt] t\u00ednh t\u1ed3n t\u1ee9c th\u1eddi",$e$$)});$callback$$(null,$obj$$)};$contr_router$$.updated=function($user$$,$obj$$,$callback$$){tontucthoi.tinhTonTucThoi($obj$$,$e$$=>{$e$$&&Logger.error("[cdvt] t\u00ednh t\u1ed3n t\u1ee9c th\u1eddi",$e$$)});$callback$$(null,$obj$$)};$contr_router$$.updating=async function($ngay_ks$jscomp$2_user$$,$data$$,
|
|
5
5
|
$obj$$,$callback$$){let $_app$$=await global.getModel("app").findOne({_id:$ngay_ks$jscomp$2_user$$.current_id_app});if(!$_app$$)return $callback$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");var $den_ngay$jscomp$1_ngay_ks$$=moment([$obj$$.nam,0,1]).startOf("date").toDate();if($den_ngay$jscomp$1_ngay_ks$$=await utils.isBookLocked({id_app:$ngay_ks$jscomp$2_user$$.current_id_app,ngay_ct:$den_ngay$jscomp$1_ngay_ks$$,ngay_ks:$_app$$.ngay_ks}))return $callback$$(`\u0110\u00e3 kh\u00f3a s\u1ed5 \u0111\u1ebfn ng\u00e0y ${moment($den_ngay$jscomp$1_ngay_ks$$).format("DD/MM/YYYY")}`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const model=global.getModel("cdvtnpp"),controller=require("../../controllers/controller"),dvcs=global.getModel("dvcs"),dmvt=global.getModel("dmvt"),dmkho=global.getModel("dmkho"),async=require("async"),moment=require("moment"),utils=require("../../libs/utils"),cdvtnpp=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"cdvtnpp",{sort:{nam:-1,ma_dvcs:1,ma_kho:1,ma_kh:1,ma_vt:1,han_sd:1},unique:"ma_dvcs nam ma_kho ma_kh ma_vt ma_lo ma_tt1 ma_tt2 ma_tt3".split(" ")});$contr_router$$.route();
|
|
2
|
-
$contr_router$$.view=function($user$$,$result$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.series({dvcs:function($callback$$){$result$$.joinModel2($id_app$$,dvcs,[{where:{ma_dvcs:"_id"},fields:[{name:"ten_dvcs",value:"ten_dvcs"}]}],function($kq$$){$callback$$(null,$kq$$)})},vt:function($callback$$){$result$$.joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:
|
|
2
|
+
$contr_router$$.view=function($user$$,$result$$,$fn$$){const $id_app$$=$user$$.current_id_app;async.series({dvcs:function($callback$$){$result$$.joinModel2($id_app$$,dvcs,[{where:{ma_dvcs:"_id"},fields:[{name:"ten_dvcs",value:"ten_dvcs"}]}],function($kq$$){$callback$$(null,$kq$$)})},vt:function($callback$$){$result$$.joinModel2($id_app$$,dmvt,[{where:"ma_vt",fields:"ten_vt ma_dvt ma_tt1_yn ma_tt2_yn ma_tt3_yn ma_lo_yn".split(" ")}],function($kq$$){$callback$$(null,$kq$$)})},kho:function($callback$$){$result$$.joinModel2($id_app$$,
|
|
3
3
|
dmkho,[{where:"ma_kho",fields:"ten_kho"}],function($kq$$){$callback$$(null,$kq$$)})},kh:function($callback$$){$result$$.filter($r$$=>$r$$.ma_kh).joinModel2($id_app$$,"customer",[{where:"ma_kh",fields:"ten_kh"}],function($kq$$){$callback$$(null,$kq$$)})}},function($error$$){if($error$$)return $fn$$($error$$);$fn$$(null,$result$$)})};$contr_router$$.creating=async function($ngay_ks_user$$,$obj$$,$callback$$){let $_app$$=await global.getModel("app").findOne({_id:$ngay_ks_user$$.current_id_app});if(!$_app$$)return $callback$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");
|
|
4
4
|
$obj$$.nam||($obj$$.nam=$_app$$.nam_bd);let $den_ngay$$=moment([$obj$$.nam,0,1]).startOf("date").toDate();if($ngay_ks_user$$=await utils.isBookLocked({id_app:$ngay_ks_user$$.current_id_app,ngay_ct:$den_ngay$$,ngay_ks:$_app$$.ngay_ks}))return $callback$$(`\u0110\u00e3 kh\u00f3a s\u1ed5 \u0111\u1ebfn ng\u00e0y ${moment($ngay_ks_user$$).format("DD/MM/YYYY")}`);$callback$$(null,$obj$$)};$contr_router$$.updating=async function($ngay_ks$jscomp$2_user$$,$data$$,$obj$$,$callback$$){let $_app$$=await global.getModel("app").findOne({_id:$ngay_ks$jscomp$2_user$$.current_id_app});
|
|
5
5
|
if(!$_app$$)return $callback$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");var $den_ngay$jscomp$1_ngay_ks$$=moment([$obj$$.nam,0,1]).startOf("date").toDate();if($den_ngay$jscomp$1_ngay_ks$$=await utils.isBookLocked({id_app:$ngay_ks$jscomp$2_user$$.current_id_app,ngay_ct:$den_ngay$jscomp$1_ngay_ks$$,ngay_ks:$_app$$.ngay_ks}))return $callback$$(`\u0110\u00e3 kh\u00f3a s\u1ed5 \u0111\u1ebfn ng\u00e0y ${moment($den_ngay$jscomp$1_ngay_ks$$).format("DD/MM/YYYY")}`);$data$$.nam=$data$$.nam||$obj$$.nam;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const model=global.getModel("chat_session"),controller=require("../../controllers/controller"),agents=require("../../agents/agents"),chatController=require("../../agents/chatController");
|
|
2
|
+
module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"chat_session",{sort:{date_created:-1},onFinding:($user$$,$condition$$,$next$$)=>{$condition$$.user_id=$user$$.email;$next$$(null,$condition$$)},onView:async function($user$$,$items$$,$fn$$){await Promise.all($items$$.map($item$$=>(async()=>{$item$$.messages=await chatController.getPublicChatHistory($item$$.id_app,$item$$._id.toString(),20)})()));$fn$$(null,$items$$)},onDeleted:async($msgs_user$$,$obj$$,
|
|
3
|
+
$next$$)=>{$msgs_user$$=(await global.getModel("chat_message").find({id_app:$obj$$.id_app,session_id:$obj$$._id.toString()},{_id:1})).map($item$$=>$item$$._id.toString());await global.getModel("chat_message").deleteMany({id_app:$obj$$.id_app,session_id:$obj$$._id.toString()});await global.getModel("filechunk").deleteMany({id_app:$obj$$.id_app,file_id:{$in:$msgs_user$$}});$next$$(null,$obj$$)}});$contr_router$$.createRoute("message",async($req$$,$next$$)=>{try{const $id_app$$=$req$$.user?.current_id_app,
|
|
4
|
+
$user_id$$=$req$$.user?.email,{session_id:$session_id$$,message:$message$$,files:$files$$}=$req$$.body;if(!$id_app$$||!$user_id$$)return $next$$({success:!1,message:"Kh\u00f4ng x\u00e1c \u0111\u1ecbnh \u0111\u01b0\u1ee3c danh t\u00ednh (id_app ho\u1eb7c user_id)"});if((!$message$$||$message$$.trim()==="")&&$files$$?.length==0)return $next$$({success:!1,message:"N\u1ed9i dung tin nh\u1eafn kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u1ec3 tr\u1ed1ng"});let $result$$;$result$$=$req$$.user.appAdmin?await agents.runFinanceAgent($id_app$$,
|
|
5
|
+
$user_id$$,$session_id$$,$message$$,$files$$):await agents.runStaffAgent($id_app$$,$user_id$$,$session_id$$,$message$$,$files$$);return $next$$(null,{success:!0,data:{session_id:$result$$.session_id,answer:$result$$.answer}})}catch($error$$){return console.error("L\u1ed7i API Chat:",$error$$),$next$$({success:!1,message:$error$$.message||"\u0110\u00e3 x\u1ea3y ra l\u1ed7i trong qu\u00e1 tr\u00ecnh x\u1eed l\u00fd AI"})}},{method:"POST"});$contr_router$$.route()};
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
const model=global.getModel("checkin"),customer=global.getModel("customer"),moment=require("moment"),dmnv=global.getModel("dmnv"),chamcong=global.getModel("chamcong"),User=global.getModel("user"),controller=require("../../controllers/controller"),PostBook=require("../../libs/post-book"),{isSupperAdmin}=require("../../libs/utils");function deg2rad($deg$$){return Math.PI/180*$deg$$}
|
|
2
2
|
function getDistanceFromLatLonInM($a$$,$dLon_lon1$$,$lat2$$,$lon2$$){const $dLat$$=deg2rad($lat2$$-$a$$);$dLon_lon1$$=deg2rad($lon2$$-$dLon_lon1$$);$a$$=Math.sin($dLat$$/2)*Math.sin($dLat$$/2)+Math.cos(deg2rad($a$$))*Math.cos(deg2rad($lat2$$))*Math.sin($dLon_lon1$$/2)*Math.sin($dLon_lon1$$/2);return 2*Math.atan2(Math.sqrt($a$$),Math.sqrt(1-$a$$))*6371E3}
|
|
3
3
|
const postData=async($obj$$,$callback$$)=>{if($obj$$.trang_thai!="1")return $callback$$();if(global.configs?.required_device_id&&!$obj$$.device_id)return $callback$$("C\u1ea7n th\u00f4ng tin ID c\u1ee7a thi\u1ebft b\u1ecb (device_id)");const $nv$$=await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,$or:[{device_user_id:$obj$$.device_user_id},{user:$obj$$.device_user_id}]}).lean();if(!$nv$$)return $callback$$(`Ch\u01b0a khai b\u00e1o th\u00f4ng tin nh\u00e2n vi\u00ean cho '${$obj$$.device_user_id}'.`);
|
|
4
|
-
if($nv$$.trusted_device_id){if($nv$$.trusted_device_id!=$obj$$.device_id)return $callback$$("Thi\u1ebft b\u1ecb ch\u1ea5m c\u00f4ng kh\u00f4ng h\u1ee3p l\u1ec7. B\u1ea1n c\u1ea7n d\u00f9ng thi\u1ebft b\u1ecb \u0111\u00e3 ch\u1ea5m c\u00f4ng l\u1ea7n tr\u01b0\u1edbc ho\u1eb7c li\u00ean h\u1ec7 v\u1edbi admin \u0111\u1ec3 \u0111\u0103ng k\u00fd thi\u1ebft b\u1ecb m\u1edbi.");$nv$$.trusted_device_id=$obj$$.device_id}if($obj$$.device_id){var $cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=
|
|
4
|
+
if(!isSupperAdmin($obj$$.device_user_id)){if($nv$$.trusted_device_id){if($nv$$.trusted_device_id!=$obj$$.device_id)return $callback$$("Thi\u1ebft b\u1ecb ch\u1ea5m c\u00f4ng kh\u00f4ng h\u1ee3p l\u1ec7. B\u1ea1n c\u1ea7n d\u00f9ng thi\u1ebft b\u1ecb \u0111\u00e3 ch\u1ea5m c\u00f4ng l\u1ea7n tr\u01b0\u1edbc ho\u1eb7c li\u00ean h\u1ec7 v\u1edbi admin \u0111\u1ec3 \u0111\u0103ng k\u00fd thi\u1ebft b\u1ecb m\u1edbi.");$nv$$.trusted_device_id=$obj$$.device_id}if($obj$$.device_id){var $cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=
|
|
5
5
|
await global.getModel("dmnv").findOne({id_app:$obj$$.id_app,trusted_device_id:$obj$$.device_id},{_id:1}).lean();if($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$&&$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$._id!==$nv$$._id)return $callback$$("Thi\u1ebft b\u1ecb n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ch\u1ea5m cho nh\u00e2n vi\u00ean kh\u00e1c. N\u1ebfu b\u1ea1n c\u1ea7n thay \u0111\u1ed5i h\u00e3y li\u00ean h\u1ec7 v\u1edbi admin.")}if($obj$$.location&&
|
|
6
6
|
$obj$$.location.latitude&&$obj$$.location.longitude){if($nv$$.ma_cn){var $candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=await global.getModel("dmchinhanh").findOne({id_app:$obj$$.id_app,ma_cn:$nv$$.ma_cn,status:!0}).lean();if(!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$)return $callback$$("Chi nh\u00e1nh l\u00e0m vi\u1ec7c kh\u00f4ng t\u1ed3n t\u1ea1i");if(!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location||
|
|
7
7
|
!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.latitude||!$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.longitude)return $callback$$(`Ch\u01b0a khai b\u00e1o v\u1ecb tr\u00ed c\u1ee7a chi nh\u00e1nh ${$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.ten_cn}`);$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=getDistanceFromLatLonInM($obj$$.location.latitude,$obj$$.location.longitude,
|
|
8
8
|
$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.latitude,$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.longitude);$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.location.allowed_radius||50;if($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$>$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$&&
|
|
9
|
-
!$obj$$.ma_kh)return Logger.warn(`[CheckIn Fail] Distance: ${$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}m. User: ${$obj$$.device_user_id}`),$callback$$(`V\u1ecb tr\u00ed ch\u1ea5m c\u00f4ng kh\u00f4ng h\u1ee3p l\u1ec7. B\u1ea1n \u0111ang c\u00e1ch c\u00f4ng ty ${Math.round($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$)}m (Cho ph\u00e9p: ${$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$}m).`)}}else if(global.configs?.required_device_id)return $callback$$("Kh\u00f4ng x\u00e1c \u0111\u1ecbnh \u0111\u01b0\u1ee3c v\u1ecb tr\u00ed c\u1ee7a b\u1ea1n.")
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
$
|
|
15
|
-
$nv$$.
|
|
16
|
-
$data$$.
|
|
17
|
-
$
|
|
18
|
-
|
|
19
|
-
{where:$item$$=>({$or:[{device_user_id:$item$$.device_user_id},{of_user:$item$$.device_user_id}]}),fields:["ma_kh","ten_kh","picture"]});await $items$$.filter($item$$=>$item$$.trang_thai==="3"&&$item$$.device_user_id2).asyncJoinModel2($user$$.current_id_app,dmnv,{where:{device_user_id2:"device_user_id"},fields:["ma_nv","ten_nv",{picture_nv:"picture"}]});await $items$$.filter($item$$=>!$item$$.picture).asyncJoinModel2(null,User,{where:{of_user:"email"},fields:["picture"]});await $items$$.filter($item$$=>
|
|
9
|
+
!$obj$$.ma_kh)return Logger.warn(`[CheckIn Fail] Distance: ${$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}m. User: ${$obj$$.device_user_id}`),$callback$$(`V\u1ecb tr\u00ed ch\u1ea5m c\u00f4ng kh\u00f4ng h\u1ee3p l\u1ec7. B\u1ea1n \u0111ang c\u00e1ch c\u00f4ng ty ${Math.round($cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$)}m (Cho ph\u00e9p: ${$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$}m).`)}}else if(global.configs?.required_device_id)return $callback$$("Kh\u00f4ng x\u00e1c \u0111\u1ecbnh \u0111\u01b0\u1ee3c v\u1ecb tr\u00ed c\u1ee7a b\u1ea1n.")}$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=
|
|
10
|
+
await model.find({id_app:$obj$$.id_app,device_user_id:$obj$$.device_user_id,record_time:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}}).inTxn().sort({record_time:1}).lean();let $gio_vao$$,$gio_ra$$,$ma_loai_cong$$;$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$.length>0&&($gio_vao$$=$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$[0].record_time);$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$.length>
|
|
11
|
+
1&&($gio_ra$$=$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$[$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$.length-1].record_time);$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$=$gio_vao$$&&$gio_ra$$?moment($gio_ra$$).diff(moment($gio_vao$$),"hours"):0;if($gio_vao$$){$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=moment($obj$$.record_time).day().toString();$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=
|
|
12
|
+
{id_app:$obj$$.id_app,status:!0,$and:[{$or:[{nhung_ngay_trong_tuan:{$exists:!1}},{nhung_ngay_trong_tuan:$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$}]},{$or:[{tong_gio_lam_den:{$gte:$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}},{tong_gio_lam_den:0}]},{$or:[{tong_gio_lam_tu:{$lte:$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$}},{tong_gio_lam_tu:0}]}]};$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=
|
|
13
|
+
await global.getModel("dmloaicong").find($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$).sort({tong_gio_lam_tu:-1,ngay_cong:-1}).lean();const $getMinutesFromMidnight$$=$dateStr_m$$=>{if(!$dateStr_m$$)return null;$dateStr_m$$=moment($dateStr_m$$);return $dateStr_m$$.hours()*60+$dateStr_m$$.minutes()},$input_vao_mins$$=$getMinutesFromMidnight$$($gio_vao$$),$input_ra_mins$$=$getMinutesFromMidnight$$($gio_ra$$||$gio_vao$$);if($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=
|
|
14
|
+
$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.find($lc$$=>$lc$$.gio_vao_toi_thieu&&$getMinutesFromMidnight$$($lc$$.gio_vao_toi_thieu)<$input_vao_mins$$||$lc$$.gio_ra_toi_thieu&&$getMinutesFromMidnight$$($lc$$.gio_ra_toi_thieu)>$input_ra_mins$$?!1:!0))$ma_loai_cong$$=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$.ma_loai_cong}$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$nv$$.ma_bp;$nv$$.bo_phan&&
|
|
15
|
+
$nv$$.bo_phan.length>0&&($candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$=$nv$$.bo_phan[0].ma_bp);let $data$$=$obj$$.toObject?$obj$$.toObject():{...$obj$$};$data$$.id_checkin=$obj$$.device_user_id;$data$$.ngay=$obj$$.record_time;$data$$.ma_loai_cong=$ma_loai_cong$$||"UNKNOW";$data$$.ma_nv=$nv$$.ma_nv;$data$$.ma_bp=$candidates_chiNhanh_loaicong_ma_bp_max_radius_ngay_trong_tuan_query_loai_cong$$;delete $data$$._id;delete $data$$.trang_thai;$data$$.gio_vao=$gio_vao$$;
|
|
16
|
+
$data$$.gio_ra=$gio_ra$$;$data$$.tong_gio_lam=$cac_lan_cham_cong_trong_ngay_distance_nv_device_id_tong_gio_lam$$;await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});(new PostBook($obj$$,[$data$$],chamcong)).run(async($e$$,$rs$$)=>{$e$$||await global.getModel("dmnv").updateOne({_id:$nv$$._id},{trusted_device_id:$obj$$.device_id});$callback$$($e$$,$rs$$)})};
|
|
17
|
+
module.exports=function($router$$){(new controller($router$$,model,"checkin",{notNeedRight:!0,sort:{record_time:-1},onView:async($user$$,$items$$,$next$$)=>{await $items$$.filter($item$$=>$item$$.trang_thai==="1").asyncJoinModel2($user$$.current_id_app,dmnv,{where:$item$$=>({$or:[{device_user_id:$item$$.device_user_id},{user:$item$$.device_user_id}]}),fields:["ma_nv","ten_nv","picture"]});await $items$$.filter($item$$=>$item$$.trang_thai==="2"||$item$$.trang_thai==="3").asyncJoinModel2($user$$.current_id_app,
|
|
18
|
+
customer,{where:$item$$=>({$or:[{device_user_id:$item$$.device_user_id},{of_user:$item$$.device_user_id}]}),fields:["ma_kh","ten_kh","picture"]});await $items$$.filter($item$$=>$item$$.trang_thai==="3"&&$item$$.device_user_id2).asyncJoinModel2($user$$.current_id_app,dmnv,{where:{device_user_id2:"device_user_id"},fields:["ma_nv","ten_nv",{picture_nv:"picture"}]});await $items$$.filter($item$$=>!$item$$.picture).asyncJoinModel2(null,User,{where:{of_user:"email"},fields:["picture"]});await $items$$.filter($item$$=>
|
|
20
19
|
!$item$$.picture).asyncJoinModel2(null,User,{where:{user:"email"},fields:["picture"]});await $items$$.filter($item$$=>$item$$.ma_kh).asyncJoinModel2($user$$.current_id_app,"customer",{where:"ma_kh",fields:["ten_kh"]});$next$$(null,$items$$)},onCreating:async($user$$,$obj$$,$next$$)=>{global.configs?.required_device_id&&$obj$$.location&&(isSupperAdmin($user$$.email)?$obj$$.record_time=$obj$$.record_time||new Date:$obj$$.record_time=new Date);await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id||
|
|
21
20
|
$user$$.email,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});$next$$(null,$obj$$)},onUpdating:async($user$$,$data$$,$obj$$,$next$$)=>{$data$$.device_user_id=$obj$$.device_user_id;isSupperAdmin($user$$.email)||delete $data$$.record_time;await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});
|
|
22
21
|
$next$$(null,$data$$,$obj$$)},onDeleting:async($user$$,$obj$$,$next$$)=>{await chamcong.deleteMany({id_app:$obj$$.id_app,id_checkin:$obj$$.device_user_id,ngay:{$gte:moment($obj$$.record_time).startOf("date").toDate(),$lte:moment($obj$$.record_time).endOf("date").toDate()}});$next$$(null,$obj$$)},onUpdated:async($user$$,$obj$$,$next$$)=>{postData($obj$$,async $e$$=>{if($e$$)return Logger.info("l\u1ed7i l\u00fd checkin..."),await model.deleteOne({_id:$obj$$._id}),$next$$($e$$);$next$$(null,$obj$$)})},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const model=global.getModel("chitietluongds"),controller=require("../../controllers/controller"),chitietluongds=function($router$$){(new controller($router$$,model,"chitietluongds",{sort:{
|
|
1
|
+
const model=global.getModel("chitietluongds"),controller=require("../../controllers/controller"),chitietluongds=function($router$$){(new controller($router$$,model,"chitietluongds",{sort:{ngay_ct:1,so_ct:1},onFinding:async($cs$jscomp$1_q$$,$condition$$,$next$$)=>{if(!$condition$$.ma_kh&&($condition$$.nh_kh||$condition$$.nh_kh2||$condition$$.nh_kh3)){var $cs_q$$={id_app:$cs$jscomp$1_q$$.current_id_app};$condition$$.nh_kh&&($cs_q$$.nh_kh=$condition$$.nh_kh);$condition$$.nh_kh2&&($cs_q$$.nh_kh2=$condition$$.nh_kh2);
|
|
2
2
|
$condition$$.nh_kh3&&($cs_q$$.nh_kh3=$condition$$.nh_kh3);$cs_q$$=(await global.getModel("customer").find($cs_q$$,{ma_kh:1}).lean()).map($c$$=>$c$$.ma_kh);$condition$$.ma_kh={$in:$cs_q$$};delete $condition$$.nh_kh;delete $condition$$.nh_kh2;delete $condition$$.nh_kh3}!$condition$$.ma_vt&&($condition$$.ma_nvt||$condition$$.ma_nvt2||$condition$$.ma_nvt3)&&($cs$jscomp$1_q$$={id_app:$cs$jscomp$1_q$$.current_id_app},$condition$$.ma_nvt&&($cs$jscomp$1_q$$.ma_nvt=$condition$$.ma_nvt),$condition$$.ma_nvt2&&
|
|
3
3
|
($cs$jscomp$1_q$$.ma_nvt2=$condition$$.ma_nvt2),$condition$$.ma_nvt3&&($cs$jscomp$1_q$$.ma_nvt3=$condition$$.ma_nvt3),$cs$jscomp$1_q$$=(await global.getModel("dmvt").find($cs$jscomp$1_q$$,{ma_vt:1}).lean()).map($c$$=>$c$$.ma_vt),$condition$$.ma_vt={$in:$cs$jscomp$1_q$$},delete $condition$$.ma_nvt,delete $condition$$.ma_nvt2,delete $condition$$.ma_nvt3);$next$$(null,$condition$$)},onView:async($user$$,$items$$,$next$$)=>{await $items$$.asyncJoinModel2($user$$.current_id_app,"customer",{where:"ma_kh",
|
|
4
|
-
fields:["ten_kh","nh_kh","nh_kh2","nh_kh3"]});await $items$$.asyncJoinModel2($user$$.current_id_app,"dmvt",{where:"ma_vt",fields:["ten_vt","ma_nvt","ma_nvt2","ma_nvt3"]});$next$$(null,$items$$)}})).route()};module.exports=chitietluongds;
|
|
4
|
+
fields:["ten_kh","nh_kh","nh_kh2","nh_kh3"]});await $items$$.asyncJoinModel2($user$$.current_id_app,"dmvt",{where:"ma_vt",fields:["ten_vt","ma_nvt","ma_nvt2","ma_nvt3"]});await $items$$.asyncJoinModel2($user$$.current_id_app,"csluongtheods",{where:{id_cs_luong:"_id"},fields:[{ten_cs_luong:"ten_cs"},"cv_kho"]});$next$$(null,$items$$)}})).route()};module.exports=chitietluongds;
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
const model=global.getModel("customer"),async=require("async"),dmnhkh=global.getModel("group"),User=global.getModel("user"),Trangthai=global.getModel("trangthai"),Participant=global.getModel("participant"),Usergroup=global.getModel("usergroup"),validator=require("validator"),group=global.getModel("group"),controller=require("../../controllers/controller"),redisCache=require("../../libs/redis-cache"),permission=require("../../libs/permission"),{isMobilePhone}=require("../../libs/utils"),
|
|
2
|
-
async($id_app$$,$chil_nh_kh_nh_vt_cons$$)=>{let $rs$$=[$chil_nh_kh_nh_vt_cons$$];$chil_nh_kh_nh_vt_cons$$=(await Usergroup.find({id_app:$id_app$$,group_mother:$chil_nh_kh_nh_vt_cons$$,status:!0},{_id:1,group_mother:1}).lean()).filter($n$$=>$n$$._id.toString()!=$n$$.group_mother).map($d$$=>$d$$._id);$chil_nh_kh_nh_vt_cons$$.length>0&&($chil_nh_kh_nh_vt_cons$$=await Promise.all($chil_nh_kh_nh_vt_cons$$.map($nh$$=>getAllChildrenUserGroup($id_app$$,$nh$$)))
|
|
3
|
-
$b$$)=>$a$$.concat($b$$),[]),$rs$$=[...$chil_nh_kh_nh_vt_cons$$,...$rs$$]);return $rs$$},customer=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"customer",{sort:{ten_kh:-1},unique:["ma_kh"],cache:!0,onFinding:function($user$$,$condition$$,$next$$){if($condition$$.sinh_nhat_ngay||$condition$$.is_birthday){var $currentDay_today$$=new Date($condition$$.sinh_nhat_ngay);const $currentMonth$$=$currentDay_today$$.getMonth()+
|
|
4
|
-
const $serverTimezone$$=Intl.DateTimeFormat().resolvedOptions().timeZone;$condition$$.$expr=$condition$$.$expr||{};$condition$$.$expr.$and=$condition$$.$expr.$and||[];$condition$$.$expr.$and.push({$eq:[{$month:{date:"$ngay_sinh",timezone:$serverTimezone$$}},$currentMonth$$]});$condition$$.$expr.$and.push({$eq:[{$dayOfMonth:{date:"$ngay_sinh",timezone:$serverTimezone$$}},$currentDay_today$$]});delete $condition$$.sinh_nhat_ngay;delete $condition$$.is_birthday}async.parallel({user_group:$callback$$=>
|
|
1
|
+
const model=global.getModel("customer"),async=require("async"),dmnhkh=global.getModel("group"),User=global.getModel("user"),Trangthai=global.getModel("trangthai"),Participant=global.getModel("participant"),Usergroup=global.getModel("usergroup"),validator=require("validator"),group=global.getModel("group"),controller=require("../../controllers/controller"),redisCache=require("../../libs/redis-cache"),permission=require("../../libs/permission"),{isMobilePhone}=require("../../libs/utils"),{isValidObjectId}=
|
|
2
|
+
require("mongoose"),getAllChildrenUserGroup=async($id_app$$,$chil_nh_kh_nh_vt_cons$$)=>{let $rs$$=[$chil_nh_kh_nh_vt_cons$$];$chil_nh_kh_nh_vt_cons$$=(await Usergroup.find({id_app:$id_app$$,group_mother:$chil_nh_kh_nh_vt_cons$$,status:!0},{_id:1,group_mother:1}).lean()).filter($n$$=>$n$$._id.toString()!=$n$$.group_mother).map($d$$=>$d$$._id);$chil_nh_kh_nh_vt_cons$$.length>0&&($chil_nh_kh_nh_vt_cons$$=await Promise.all($chil_nh_kh_nh_vt_cons$$.map($nh$$=>getAllChildrenUserGroup($id_app$$,$nh$$))),
|
|
3
|
+
$chil_nh_kh_nh_vt_cons$$=$chil_nh_kh_nh_vt_cons$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]),$rs$$=[...$chil_nh_kh_nh_vt_cons$$,...$rs$$]);return $rs$$},customer=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"customer",{sort:{ten_kh:-1},unique:["ma_kh"],cache:!0,onFinding:function($user$$,$condition$$,$next$$){if($condition$$.sinh_nhat_ngay||$condition$$.is_birthday){var $currentDay_today$$=new Date($condition$$.sinh_nhat_ngay);const $currentMonth$$=$currentDay_today$$.getMonth()+
|
|
4
|
+
1;$currentDay_today$$=$currentDay_today$$.getDate();const $serverTimezone$$=Intl.DateTimeFormat().resolvedOptions().timeZone;$condition$$.$expr=$condition$$.$expr||{};$condition$$.$expr.$and=$condition$$.$expr.$and||[];$condition$$.$expr.$and.push({$eq:[{$month:{date:"$ngay_sinh",timezone:$serverTimezone$$}},$currentMonth$$]});$condition$$.$expr.$and.push({$eq:[{$dayOfMonth:{date:"$ngay_sinh",timezone:$serverTimezone$$}},$currentDay_today$$]});delete $condition$$.sinh_nhat_ngay;delete $condition$$.is_birthday}async.parallel({user_group:$callback$$=>
|
|
5
5
|
{$condition$$.user_group?getAllChildrenUserGroup($condition$$.id_app,$condition$$.user_group).then($groups$$=>{global.getModel("participant").find({id_app:$user$$.current_id_app,group_id:{$in:$groups$$}},{email:1}).then($ps$$=>{$condition$$.phu_trach={$in:$ps$$.map($p$$=>$p$$.email)};delete $condition$$.user_group;$callback$$()}).catch($e$$=>{$callback$$($e$$)})}).catch($e$$=>{$callback$$($e$$)}):$callback$$()},user_of_bp:$callback$$=>{$condition$$.ma_bp?global.getModel("dmbp").getUsersByMaBP($user$$.current_id_app,
|
|
6
6
|
$condition$$.ma_bp).then($users$$=>{Logger.info("users of department",$users$$);$condition$$.phu_trach={$in:$users$$};delete $condition$$.ma_bp;$callback$$()}).catch($e$$=>{$callback$$($e$$)}):$callback$$()},nh_kh:$callback$$=>{$condition$$.nh_kh&&typeof $condition$$.nh_kh=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh,{status:!0,group_kind:1}).then($nh_kh$$=>{$condition$$.nh_kh={$in:[...(new Set($nh_kh$$))]};$callback$$()}):$callback$$()},nh_kh2:$callback$$=>{$condition$$.nh_kh2&&
|
|
7
7
|
typeof $condition$$.nh_kh2=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh2,{status:!0,group_kind:2}).then($nh_kh$$=>{$condition$$.nh_kh2={$in:[...(new Set($nh_kh$$))]};$callback$$()}):$callback$$()},nh_kh3:$callback$$=>{$condition$$.nh_kh3&&typeof $condition$$.nh_kh3=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh3,{status:!0,group_kind:3}).then($nh_kh$$=>{$condition$$.nh_kh3={$in:[...(new Set($nh_kh$$))]};$callback$$()}):$callback$$()},nh_kh4:$callback$$=>
|
|
8
8
|
{$condition$$.nh_kh4&&typeof $condition$$.nh_kh4=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh4,{status:!0,group_kind:4}).then($nh_kh$$=>{$condition$$.nh_kh4={$in:[...(new Set($nh_kh$$))]};$callback$$()}):$callback$$()},nh_kh5:$callback$$=>{$condition$$.nh_kh5&&typeof $condition$$.nh_kh5=="string"?dmnhkh.getAllChildrenGroup($condition$$.id_app,$condition$$.nh_kh5,{status:!0,group_kind:5}).then($nh_kh$$=>{$condition$$.nh_kh5={$in:[...(new Set($nh_kh$$))]};$callback$$()}):
|
|
9
9
|
$callback$$()}},()=>{$next$$(null,$condition$$)})},onFound:($user$$,$condition$$,$items$$,$next$$)=>{$next$$(null,$items$$)},onCreating:($user$$,$obj$$,$next$$)=>{if($obj$$.dien_thoai&&!isMobilePhone($obj$$.dien_thoai,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$obj$$.dien_thoai} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);if($obj$$.dien_thoai2&&!isMobilePhone($obj$$.dien_thoai2,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$obj$$.dien_thoai2} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);
|
|
10
10
|
$next$$(null,$obj$$)},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{if($data$$.dien_thoai&&!isMobilePhone($data$$.dien_thoai,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$data$$.dien_thoai} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);if($data$$.dien_thoai2&&!isMobilePhone($data$$.dien_thoai2,"vi-VN"))return $next$$(`S\u1ed1 \u0111i\u1ec7n tho\u1ea1i ${$data$$.dien_thoai2} l\u00e0 kh\u00f4ng h\u1ee3p l\u1ec7`);$next$$(null,$data$$,$obj$$)},onView:function($user$$,$items$$,$next$$,$options$$){$items$$.forEach($item$$=>
|
|
11
|
-
{$item$$.email&&!validator.isEmail($item$$.email)&&($item$$.email="");delete $item$$.default_password});async.parallel({
|
|
12
|
-
function(){$callback$$()})},
|
|
13
|
-
$item$$.nh_kh4||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=[...$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$,...$ma_nh_kh3$$,...$ma_nh_kh4$$];if($ma_nh_kh2_ma_nh_khs_obj_nh_kh$$.length===0)return $callback$$();$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=
|
|
14
|
-
$nh_kh$$.group_name;for(let $item$$ of $items$$)$item$$.nh_kh2&&($item$$.ten_nh_kh2=$item$$.nh_kh2.map($kh$$=>$set_nh_kh$$[$kh$$])),$item$$.nh_kh3&&($item$$.ten_nh_kh3=($item$$.nh_kh3||[]).map($kh
|
|
15
|
-
|
|
16
|
-
0||$options$$.req.query.fields.indexOf("ngay_mua_dau_tien")>=0)&&model.updateActives?async.map($items$$.filter($item$$=>$item$$.ngay_mua_gan_nhat===
|
|
17
|
-
()=>{$callback$$()}):$callback$$()},so_don_hang_bds:$callback$$=>{$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&$options$$.req.query.fields.indexOf("so_don_hang_bds")>=
|
|
18
|
-
$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&$options$$.req.query.fields.indexOf("latest_note")>=0?async.map($items$$.filter($i$$=>!$i$$.latest_note),async $c_item$$=>{let $latest_note$$=
|
|
19
|
-
$c_item$$=await model.findById($c_item$$._id),redisCache.set("customer",$c_item$$.toObject(),function($e$$){Logger.info("cache customer data",$e$$)}))},()=>{$callback$$()}):$callback$$()}},()=>{$next$$(null
|
|
20
|
-
$obj$$.dien_thoai||$obj$$.ten_kh);if(!$ma_kh$$)return $next$$("Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng");$obj$$.ma_kh=$ma_kh$$;$next$$(null,$obj$$)}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
$contr_router$$.createRoute("qc/sms",async($req$$,$next$$)=>{let $body$$=$req$$.body||{};if(!$body$$.id_account)return $next$$("Thi\u1ebfu t\u00e0i kho\u1ea3n sms");
|
|
24
|
-
|
|
25
|
-
$
|
|
26
|
-
$next$$()})})},{method:"POST"})};module.exports=customer;
|
|
11
|
+
{$item$$.email&&!validator.isEmail($item$$.email)&&($item$$.email="");delete $item$$.default_password});async.parallel({user_group:$callback$$=>{$items$$.filter($item$$=>$item$$.of_user&&!$item$$.group_user).joinModel2($user$$.current_id_app,"usergroup",[{where:{of_user:"email"},fields:[{name:"group_user",value:"_id"}]}],function(){$callback$$(null,$items$$)})},pt:$callback$$=>{$items$$.filter($item$$=>$item$$.phu_trach).joinModel2(null,User,[{where:{phu_trach:"email"},fields:[{ten_phu_trach:"name"}]}],
|
|
12
|
+
function(){$callback$$()})},nhan_vien_phu_trach:$callback$$=>{$items$$.filter($item$$=>$item$$.phu_trach).joinModel2($user$$.current_id_app,"dmnv",[{where:{phu_trach:"user"},fields:[{ma_nv_phu_trach:"ma_nv"},{ten_nv_phu_trach:"ten_nv"},{ma_bp_nv:"ma_bp"}]}],function(){$callback$$()})},group:$callback$$=>{$items$$.filter($item$$=>$item$$.nh_kh).joinModel2($user$$.current_id_app,group,[{where:{nh_kh:"_id"},fields:[{ten_nh_kh:"group_name"}]}],function(){$callback$$()})},nh_kh2_3_4_5:$callback$$=>{setImmediate(async()=>
|
|
13
|
+
{var $ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=$items$$.map($item$$=>$item$$.nh_kh2||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);let $ma_nh_kh3$$=$items$$.map($item$$=>$item$$.nh_kh3||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]),$ma_nh_kh4$$=$items$$.map($item$$=>$item$$.nh_kh4||[]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=[...$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$,...$ma_nh_kh3$$,...$ma_nh_kh4$$];if($ma_nh_kh2_ma_nh_khs_obj_nh_kh$$.length===0)return $callback$$();$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=
|
|
14
|
+
[...(new Set($ma_nh_kh2_ma_nh_khs_obj_nh_kh$$))];$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$=await group.find({id_app:$user$$.current_id_app,_id:{$in:$ma_nh_kh2_ma_nh_khs_obj_nh_kh$$}},{group_name:1}).lean();let $set_nh_kh$$={};for(let $nh_kh$$ of $ma_nh_kh2_ma_nh_khs_obj_nh_kh$$)$set_nh_kh$$[$nh_kh$$._id.toString()]=$nh_kh$$.group_name;for(let $item$$ of $items$$)$item$$.nh_kh2&&($item$$.ten_nh_kh2=$item$$.nh_kh2.map($kh$$=>$set_nh_kh$$[$kh$$])),$item$$.nh_kh3&&($item$$.ten_nh_kh3=($item$$.nh_kh3||[]).map($kh$$=>
|
|
15
|
+
$set_nh_kh$$[$kh$$])),$item$$.nh_kh4&&($item$$.ten_nh_kh4=($item$$.nh_kh4||[]).map($kh$$=>$set_nh_kh$$[$kh$$]));$callback$$()})},npp:$callback$$=>{$items$$.filter($item$$=>$item$$.ma_kho_npp).joinModel2($user$$.current_id_app,"dmkho",[{where:{ma_kho_npp:"ma_kho"},fields:[{ten_kho_npp:"ten_kho"}]}],function(){$callback$$()})},u:$callback$$=>{$items$$.filter($item$$=>$item$$.of_user).joinModel2(null,User,[{where:{of_user:"email"},fields:[{user_name:"name"}]}],function(){$callback$$()})},tt:$callback$$=>
|
|
16
|
+
{$items$$.filter($item$$=>$item$$.trang_thai).joinModel2(null,Trangthai,[{where:$item$$=>({ma_trang_thai:$item$$.trang_thai,ma_ct:"CUSTOMER"}),fields:["ten_trang_thai","color"]}],function(){$callback$$()})},ngay_mua:$callback$$=>{$options$$&&$options$$.req&&$options$$.req.query&&(!$options$$.req.query.fields||$options$$.req.query.fields.indexOf("ngay_mua_gan_nhat")>=0||$options$$.req.query.fields.indexOf("ngay_mua_dau_tien")>=0)&&model.updateActives?async.map($items$$.filter($item$$=>$item$$.ngay_mua_gan_nhat===
|
|
17
|
+
void 0||!$item$$.ngay_mua_dau_tien||$item$$.ngay_tuong_tac_gan_nhat===void 0),($item$$,$callback$$)=>{model.updateActives($item$$).then($rs$$=>{$item$$.ngay_mua_gan_nhat=$rs$$.ngay_mua_gan_nhat;$item$$.ngay_mua_dau_tien=$rs$$.ngay_mua_dau_tien;$item$$.so_ngay_da_mua=$rs$$.so_ngay_da_mua;$callback$$()}).catch($e$$=>{Logger.error($e$$);$callback$$()})},()=>{$callback$$()}):$callback$$()},so_don_hang_bds:$callback$$=>{$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&$options$$.req.query.fields.indexOf("so_don_hang_bds")>=
|
|
18
|
+
0?async.map($items$$,($item$$,$callback$$)=>{setImmediate(async()=>{$item$$.so_don_hang_bds=await global.getModel("bds_nhadat_moigioi_ban").countDocuments({id_app:$item$$.id_app,ma_kh:$item$$.ma_kh,user_created:$user$$.email});$callback$$()})},()=>{$callback$$()}):$callback$$()},note:$callback$$=>{$options$$&&$options$$.req&&$options$$.req.query&&$options$$.req.query.fields&&$options$$.req.query.fields.indexOf("latest_note")>=0?async.map($items$$.filter($i$$=>!$i$$.latest_note),async $c_item$$=>{let $latest_note$$=
|
|
19
|
+
await global.getModel("note").findOne({id_app:$c_item$$.id_app,id_link:$c_item$$._id.toString()},{content:1,date_created:1,user_created:1}).sort({date_created:-1}).lean();$latest_note$$&&($c_item$$.latest_note=$latest_note$$,await model.updateOne({_id:$c_item$$._id},{latest_note:$latest_note$$}),$c_item$$=await model.findById($c_item$$._id),redisCache.set("customer",$c_item$$.toObject(),function($e$$){Logger.info("cache customer data",$e$$)}))},()=>{$callback$$()}):$callback$$()}},()=>{$next$$(null,
|
|
20
|
+
$items$$)})}});$contr_router$$.validating=async($id_app$jscomp$1_user$$,$obj$$,$next$$,$options$$={})=>{if($options$$.action=="add"&&!$obj$$.ma_kh&&$obj$$.ten_kh){$id_app$jscomp$1_user$$=$id_app$jscomp$1_user$$.current_id_app;try{let $ma_kh$$=await model.asyncCreateCustomerCode($id_app$jscomp$1_user$$,$obj$$.dien_thoai||$obj$$.ten_kh);if(!$ma_kh$$)return $next$$("Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng");$obj$$.ma_kh=$ma_kh$$;$next$$(null,$obj$$)}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng",
|
|
21
|
+
$obj$$.ten_kh,$e$$),$next$$(`Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 kh\u00e1ch h\u00e0ng, L\u1ed7i: ${$e$$.message||$e$$.error||$e$$}`)}}else $next$$(null,$obj$$)};$contr_router$$.route();$contr_router$$.on("saved",async $data$$=>{let $_usergroup$$;try{let $query_user_group$$={};$data$$.group_user&&isValidObjectId($data$$.group_user)?$query_user_group$$._id=$data$$.group_user:$query_user_group$$.is_customer_group=!0;$_usergroup$$=await Usergroup.getInfo($data$$.id_app,$query_user_group$$)}catch($e$$){return}$data$$.of_user&&
|
|
22
|
+
$_usergroup$$&&User.findOne({email:$data$$.of_user},($e$$,$rs$$)=>{if($rs$$)Participant.createParticipant({id_app:$data$$.id_app,email:$data$$.of_user,group_id:$_usergroup$$._id,active:!0},$e$$=>{if($e$$)return Logger.info("can't add user",$data$$.of_user,"to company")});else{var $result$$=new User;$result$$.email=$data$$.of_user;$result$$.name=$data$$.ten_kh;$result$$.email2=$data$$.email;$result$$.local={};$result$$.local.email=$result$$.email;$result$$.local.name=$result$$.name;$result$$.local.picture=
|
|
23
|
+
"/images/avatar.jpg";$result$$.local.password=$result$$.generateHash($result$$.email+($data$$.default_password||$result$$.email+"@123456"));$result$$.save($e$$=>{if($e$$)return Logger.info($e$$.message);Participant.createParticipant({id_app:$data$$.id_app,email:$result$$.email,group_id:$_usergroup$$._id,active:!0},$e$$=>{if($e$$)return Logger.info("can't add user",$result$$.email,"to company")})})}})});$contr_router$$.createRoute("qc/sms",async($req$$,$next$$)=>{let $body$$=$req$$.body||{};if(!$body$$.id_account)return $next$$("Thi\u1ebfu t\u00e0i kho\u1ea3n sms");
|
|
24
|
+
if(!$body$$.content)return $next$$("Thi\u1ebfu n\u1ed9i dung tin nh\u1eafn");let $account_sms$$=await global.getModel("smsaccount").findOne({_id:$body$$.id_account,id_app:$req$$.user.current_id_app}).lean();if(!$account_sms$$)return $next$$("T\u00e0i kho\u1ea3n sms kh\u00f4ng t\u1ed3n t\u1ea1i");permission.hasRight($req$$.user.current_id_app,$req$$.user.email,"smssend","add",async function($error$$,$permission$$){if(!$permission$$)return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n g\u1eedi tin nh\u1eafn qu\u1ea3ng c\u00e1o");
|
|
25
|
+
$error$$=($req$$.body||{}).q||{};$error$$.dien_thoai||($error$$.dien_thoai={$exists:!0});$error$$.id_app=$req$$.user.current_id_app;let $custs$$=[...(new Set((await model.find($error$$,{dien_thoai:1}).lean()).map($c$$=>$c$$.dien_thoai)))];if($custs$$.length<30)return $next$$("C\u1ea7n g\u1eedi cho t\u1ed1i thi\u1ec3u 30 kh\u00e1ch h\u00e0ng");$custs$$=$custs$$.join(",");setImmediate(async()=>{let $result$$;try{await global.getModel("smsaccount").send($account_sms$$,$custs$$,$body$$.content),$result$$=
|
|
26
|
+
{msg:"\u0110\u00e3 g\u1eedi y\u00eau c\u1ea7u th\u00e0nh c\u00f4ng",code:0}}catch($e$$){$result$$={msg:"Kh\u00f4ng th\u1ec3 g\u1eedi",error:$e$$.message||$e$$.error||$e$$,code:-1}}await global.getModel("smssend").create({id_app:$req$$.user.current_id_app,phone:$custs$$,content:$body$$.content,user_created:$req$$.user.email,result:$result$$});$next$$()})})},{method:"POST"})};module.exports=customer;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
const model=global.getModel("dmnv"),dmbp=global.getModel("dmbp"),dmdoi=global.getModel("dmdoi"),dmto=global.getModel("dmto"),dmnhnv=global.getModel("dmnhnv"),User=global.getModel("user"),Usergroup=global.getModel("usergroup"),Participant=global.getModel("participant"),group=global.getModel("group"),async=require("async"),controller=require("../../controllers/controller"),dmnv=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"dmnv",
|
|
2
|
-
unique:["ma_nv"],onCreating:async($ex$jscomp$0$$,$data$$,$next$$)=>{if($data$$.user){let $ex$$=await model.findOne({id_app:$ex$jscomp$0$$.current_id_app,user:$data$$.user}).lean();if($ex$$)return $next$$("T\u00ean \u0111\u0103ng nh\u1eadp '"+$data$$.user+"' \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho nh\u00e2n vi\u00ean "+$ex$$.ten_nv)}if($data$$.device_user_id&&($ex$jscomp$0$$=await model.findOne({id_app:$ex$jscomp$0$$.current_id_app,device_user_id:$data$$.device_user_id}).lean()))return $next$$("M\u00e3 tr\u00ean m\u00e1y ch\u1ea5m c\u00f4ng '"+
|
|
1
|
+
const model=global.getModel("dmnv"),dmbp=global.getModel("dmbp"),dmdoi=global.getModel("dmdoi"),dmto=global.getModel("dmto"),dmnhnv=global.getModel("dmnhnv"),User=global.getModel("user"),Usergroup=global.getModel("usergroup"),Participant=global.getModel("participant"),group=global.getModel("group"),async=require("async"),controller=require("../../controllers/controller"),{isValidObjectId}=require("mongoose"),dmnv=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"dmnv",
|
|
2
|
+
{sort:{ma_bp:1,ma_doi:1,ma_to:1,ten_nv:1},unique:["ma_nv"],onCreating:async($ex$jscomp$0$$,$data$$,$next$$)=>{if($data$$.user){let $ex$$=await model.findOne({id_app:$ex$jscomp$0$$.current_id_app,user:$data$$.user}).lean();if($ex$$)return $next$$("T\u00ean \u0111\u0103ng nh\u1eadp '"+$data$$.user+"' \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho nh\u00e2n vi\u00ean "+$ex$$.ten_nv)}if($data$$.device_user_id&&($ex$jscomp$0$$=await model.findOne({id_app:$ex$jscomp$0$$.current_id_app,device_user_id:$data$$.device_user_id}).lean()))return $next$$("M\u00e3 tr\u00ean m\u00e1y ch\u1ea5m c\u00f4ng '"+
|
|
3
3
|
$data$$.device_user_id+"' \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho nh\u00e2n vi\u00ean "+$ex$jscomp$0$$.ten_nv);$next$$(null,$data$$)},onUpdating:async($ex$jscomp$3_user$$,$data$$,$obj$$,$next$$)=>{if($data$$.user&&$data$$.user!==$obj$$.user){let $ex$$=await model.findOne({id_app:$ex$jscomp$3_user$$.current_id_app,user:$data$$.user}).lean();if($ex$$)return $next$$("T\u00ean \u0111\u0103ng nh\u1eadp '"+$data$$.user+"' \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho nh\u00e2n vi\u00ean "+
|
|
4
4
|
$ex$$.ten_nv)}if($data$$.device_user_id&&$data$$.device_user_id!==$obj$$.device_user_id&&($ex$jscomp$3_user$$=await model.findOne({id_app:$ex$jscomp$3_user$$.current_id_app,device_user_id:$data$$.device_user_id}).lean()))return $next$$("M\u00e3 tr\u00ean m\u00e1y ch\u1ea5m c\u00f4ng '"+$data$$.device_user_id+"' \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho nh\u00e2n vi\u00ean "+$ex$jscomp$3_user$$.ten_nv);$next$$(null,$data$$,$obj$$)},onView:($user$$,$items$$,$next$$)=>{$items$$.forEach($item$$=>
|
|
5
|
-
{delete $item$$.default_password});async.parallel([$callback$$=>{$items$$.filter($item$$=>$item$$.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
{
|
|
9
|
-
{$bp$$.active=!$bp$$.den_ngay||$bp$$.den_ngay>=new Date;$bp$$.active&&($item$$.ma_bp=$item$$.map_bp||$bp$$.ma_bp,$item$$.ten_bp=$item$$.ten_bp||$bp$$.ten_bp,$item$$.phu_trach=$item$$.phu_trach||$bp$$.phu_trach,$item$$.chuc_vu=$item$$.chuc_vu||$bp$$.chuc_vu)})});$next$$(null,$items$$)})},onImport:($user
|
|
10
|
-
group_type:"DMNV",group_name:{$regex:$r$$.group_name,$options:"i"}},{group_name:$r$$.group_name,group_type:"DMNV",status:!0},{new:!0,upsert:!0},function($e$$,$n$$){if($e$$)return $callback$$($e$$);$r$$.nh_nv=$n$$._id.toString();$callback$$(null)}):$callback$$()}},function(){$callback$$()})},function(){$next$$()})},
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
5
|
+
{delete $item$$.default_password});async.parallel([$callback$$=>{$items$$.filter($item$$=>$item$$.user&&!$item$$.group_user).joinModel2($user$$.current_id_app,"usergroup",[{where:{user:"email"},fields:[{name:"group_user",value:"_id"}]}],function(){$callback$$(null,$items$$)})},$callback$$=>{$items$$.filter($item$$=>$item$$.phu_trach).joinModel2(null,User,[{where:{phu_trach:"email"},fields:[{name:"ten_phu_trach",value:"name"}]}],function(){$callback$$(null,$items$$)})},$callback$$=>{$items$$.filter($item$$=>
|
|
6
|
+
$item$$.ma_bp).joinModel2($user$$.current_id_app,dmbp,[{where:{ma_bp:"ma_bp"},fields:"ten_bp"}],function(){$callback$$(null,$items$$)})},$callback$$=>{$items$$.filter($item$$=>$item$$.ma_doi).joinModel2($user$$.current_id_app,dmdoi,[{where:{ma_bp:"ma_bp",ma_doi:"ma_doi"},fields:"ten_doi"}],function(){$callback$$(null,$items$$)})},$callback$$=>{$items$$.filter($item$$=>$item$$.ma_to).joinModel2($user$$.current_id_app,dmto,[{where:{ma_bp:"ma_bp",ma_doi:"ma_doi",ma_to:"ma_to"},fields:"ten_to"}],function(){$callback$$(null,
|
|
7
|
+
$items$$)})},$callback$$=>{$items$$.filter($item$$=>$item$$.ma_nh_nv).joinModel2($user$$.current_id_app,dmnhnv,[{where:{ma_bp:"ma_bp",ma_doi:"ma_doi",ma_to:"ma_to",ma_nh_nv:"ma_nh_nv"},fields:"ten_nh_nv"}],function(){$callback$$(null,$items$$)})},$callback$$=>{$items$$.filter($item$$=>$item$$.chuc_vu).joinModel2($user$$.current_id_app,group,[{where:{chuc_vu:"_id"},fields:[{ten_chuc_vu:"group_name"},{color:"color"},{muc_tieu_bieu:"muc_tieu_bieu"}]}],function(){$callback$$(null,$items$$)})},$callback$$=>
|
|
8
|
+
{async.mapLimit($items$$,20,($item$$,$callback$$)=>{($item$$.bo_phan||[]).filter($item$$=>$item$$.chuc_vu).joinModel2($user$$.current_id_app,group,[{where:{chuc_vu:"_id"},fields:[{ten_chuc_vu:"group_name"},{color:"color"},{muc_tieu_bieu:"muc_tieu_bieu"}]}],function(){$callback$$(null,$items$$)})},()=>{$callback$$(null,$items$$)})},$callback$$=>{async.mapLimit($items$$,20,($item$$,$callback$$)=>{($item$$.bo_phan||[]).filter($item$$=>$item$$.ma_bp).joinModel2($user$$.current_id_app,dmbp,[{where:{ma_bp:"ma_bp"},
|
|
9
|
+
fields:[{ten_bp:"ten_bp"}]}],function(){$callback$$(null,$items$$)})},()=>{$callback$$(null,$items$$)})}],()=>{$items$$.filter($item$$=>$item$$.bo_phan).forEach($item$$=>{$item$$.bo_phan.forEach($bp$$=>{$bp$$.active=!$bp$$.den_ngay||$bp$$.den_ngay>=new Date;$bp$$.active&&($item$$.ma_bp=$item$$.map_bp||$bp$$.ma_bp,$item$$.ten_bp=$item$$.ten_bp||$bp$$.ten_bp,$item$$.phu_trach=$item$$.phu_trach||$bp$$.phu_trach,$item$$.chuc_vu=$item$$.chuc_vu||$bp$$.chuc_vu)})});$next$$(null,$items$$)})},onImport:($user$$,
|
|
10
|
+
$data$$,$columns$$,$next$$)=>{async.mapLimit($data$$,20,function($r$$,$callback$$){async.series({nhom:function($callback$$){$r$$.group_name&&!$r$$.nh_kh?group.findOneAndUpdate({id_app:$user$$.current_id_app,group_type:"DMNV",group_name:{$regex:$r$$.group_name,$options:"i"}},{group_name:$r$$.group_name,group_type:"DMNV",status:!0},{new:!0,upsert:!0},function($e$$,$n$$){if($e$$)return $callback$$($e$$);$r$$.nh_nv=$n$$._id.toString();$callback$$(null)}):$callback$$()}},function(){$callback$$()})},function(){$next$$()})},
|
|
11
|
+
onQuery:($req$$,$next$$)=>{if($req$$.obj&&$req$$.obj.user===$req$$.user.email)return $req$$.permission=!0,$next$$();$req$$.permission||($req$$.condition={user:$req$$.user.email});$req$$.permission=!0;$next$$()}});$contr_router$$.validating=async($id_app_user$$,$obj$$,$next$$,$options$$={})=>{if($options$$.action=="add"&&!$obj$$.ma_nv&&$obj$$.ten_nv){$id_app_user$$=$id_app_user$$.current_id_app;try{let $ma_nv$$=await model.asyncCreateEmployeeCode($id_app_user$$,$obj$$.ten_nv);$obj$$.ma_nv=$ma_nv$$;
|
|
12
|
+
$next$$(null,$obj$$)}catch($e$$){Logger.error($e$$),$next$$($e$$)}}else $next$$(null,$obj$$)};$contr_router$$.route();$contr_router$$.on("saved",async $data$$=>{let $_usergroup$$;try{let $query_user_group$$={};$data$$.group_user&&isValidObjectId($data$$.group_user)?$query_user_group$$._id=$data$$.group_user:$query_user_group$$.is_employee_group=!0;$_usergroup$$=await Usergroup.getInfo($data$$.id_app,$query_user_group$$)}catch($e$$){return}$data$$.user&&$_usergroup$$&&User.findOne({email:$data$$.user},
|
|
13
|
+
($e$$,$rs$$)=>{if($rs$$)Participant.createParticipant({id_app:$data$$.id_app,email:$data$$.user,group_id:$_usergroup$$._id,active:!0},$e$$=>{if($e$$)return Logger.info("can't add user",$data$$.user,"to company")});else{var $result$$=new User;$result$$.email=$data$$.user;$result$$.name=$data$$.ten_nv;$result$$.email2=$data$$.email;$result$$.local={};$result$$.local.email=$result$$.email;$result$$.local.name=$result$$.name;$result$$.local.picture="/images/avatar.jpg";$result$$.local.password=$result$$.generateHash($result$$.email+
|
|
14
|
+
($data$$.default_password||$result$$.email+"@123456"));$result$$.save($e$$=>{if($e$$)return Logger.info($e$$.message);Participant.createParticipant({id_app:$data$$.id_app,email:$result$$.email,group_id:$_usergroup$$._id,active:!0},$e$$=>{if($e$$)return Logger.info("can't add user",$result$$.email,"to company")})})}})})};module.exports=dmnv;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const model=global.getModel("file"),app=global.getModel("app"),path=require("path"),fs=require("fs"),controller=require("../../controllers/controller"),ffmpeg=require("fluent-ffmpeg"),ffmpegInstaller=require("@ffmpeg-installer/ffmpeg");ffmpeg.setFfmpegPath(ffmpegInstaller.path);
|
|
2
|
-
const sharp=require("sharp"),watermark=require("dynamic-watermark"),permission=require("../../libs/permission"),async=require("async"),JSZip=require("jszip"),{onAfterCommit}=require("../../libs/sessionContext"),{createWorker,createScheduler}=require("tesseract.js"),{getDir,getPathFile}=require("../../libs/utils"),{
|
|
2
|
+
const sharp=require("sharp"),watermark=require("dynamic-watermark"),permission=require("../../libs/permission"),async=require("async"),JSZip=require("jszip"),{onAfterCommit}=require("../../libs/sessionContext"),{createWorker,createScheduler}=require("tesseract.js"),{getDir,getPathFile}=require("../../libs/utils"),{processDataWorker}=require("../../libs/vectorService"),tesseractScheduler=createScheduler();let isTesseractReady=!1;
|
|
3
3
|
async function initTesseract(){try{const $worker$$=await createWorker("vie+eng");tesseractScheduler.addWorker($worker$$);isTesseractReady=!0}catch($error$$){}}initTesseract();
|
|
4
4
|
const hasPermission=async($email$$,$file$$)=>new Promise($resolve$$=>{permission.hasRight($file$$.id_app,$email$$,"file","view",async function($error$$,$permission$$){if(!$permission$$)return $resolve$$(!1);$resolve$$(!0)},{data:$file$$,obj:$file$$,notNeedRight:!$file$$.id_link&&!$file$$.id_folder||$file$$.shared})}),convertVideo=async($fileInput$$,$fileOutput$$)=>new Promise(($resolve$$,$reject$$)=>{ffmpeg($fileInput$$,{timeout:432E3}).addOptions("-profile:v baseline;-level 3.0;-start_number 0;-hls_time 10;-hls_list_size 0;-f hls".split(";")).output($fileOutput$$).on("error",
|
|
5
5
|
function($err$$){$reject$$($err$$.message)}).on("end",()=>{$resolve$$($fileOutput$$)}).run()}),createThumnail=async($fileInput$$,$fileOutput$$,$THUMBNAIL_DIR$$)=>{Logger.info("[file] t\u1ea1o thumbnail",{fileInput:$fileInput$$,fileOutput:$fileOutput$$,THUMBNAIL_DIR:$THUMBNAIL_DIR$$});return new Promise(($resolve$$,$reject$$)=>{ffmpeg($fileInput$$,{timeout:432E3}).on("end",function(){Logger.info("Thumbnail generated successfully!");$resolve$$()}).on("error",function($err$$,$stdout$$,$stderr$$){Logger.error("Error generating thumbnail:",
|
|
@@ -15,15 +15,15 @@ $items$$)})},onDeleting:async($user$$,$item$$,$next$$)=>{await global.getModel("
|
|
|
15
15
|
$folder_imageBuffer$$);$obj$$.text_from_image=$ret$$.data.text}}catch($error$$){Logger.error("Read text from image error:",$error$$.message,$file_name$jscomp$2_input_user$$)}}$obj$$.id_folder&&global.mongoose.Types.ObjectId.isValid($obj$$.id_folder)&&($folder_imageBuffer$$=await global.getModel("folder").findOne({_id:$obj$$.id_folder}))&&($obj$$.update_right=$folder_imageBuffer$$.update_right,$obj$$.delete_right=$folder_imageBuffer$$.delete_right,$obj$$.visible_to=$folder_imageBuffer$$.visible_to,
|
|
16
16
|
$obj$$.visible_to_users=$folder_imageBuffer$$.visible_to_users,$obj$$.visible_to_usergroups=$folder_imageBuffer$$.visible_to_usergroups);$fn$$(null,$obj$$)};$contr$$.created=async function($user$$,$obj$$,$fn$$){onAfterCommit(async()=>{if($obj$$.file&&$obj$$.file.name&&$obj$$.file.extension){var $file_name$$=$obj$$.file.name,$extension$jscomp$3_input$jscomp$1_root$$=$obj$$.file.extension.toLowerCase();if(["mp4","mov","avi"].indexOf($extension$jscomp$3_input$jscomp$1_root$$)>=0){$extension$jscomp$3_input$jscomp$1_root$$=
|
|
17
17
|
getDir("uploads");$extension$jscomp$3_input$jscomp$1_root$$=path.join($extension$jscomp$3_input$jscomp$1_root$$,$file_name$$);let $output$$=getDir("videos");$output$$=path.join($output$$,$obj$$._id.toString());fs.existsSync($output$$)||fs.mkdirSync($output$$);$output$$=path.join($output$$,$file_name$$);convertVideo($extension$jscomp$3_input$jscomp$1_root$$,$output$$).catch($e$$=>{Logger.error("Can't convert video. Error:",$e$$)});$file_name$$=getDir("videos");$file_name$$=path.join($file_name$$,$obj$$._id.toString());
|
|
18
|
-
fs.existsSync($file_name$$)||fs.mkdirSync($file_name$$);try{await createThumnail($extension$jscomp$3_input$jscomp$1_root$$,"thumbnail.png",$file_name$$),$obj$$.file.thumbnail="thumbnail.png",await global.getModel("file").updateOne({_id:$obj$$._id},{file:$obj$$.file})}catch($e$$){Logger.error("[file] l\u1ed7i t\u1ea1o thumbnail cho viedeo",$e$$.message)}}}else Logger.info("file not exists",$obj$$)});
|
|
19
|
-
$
|
|
20
|
-
Logger.warn("[ls-file] \u0111\u00e3 x\u1eed l\u00fd xong file",$file$$.file)}catch($e$$){Logger.error("[ls-file] \u0111\u00e3 c\u00f3 l\u1ed7i khi x\u1eed l\u00fd file",$file$$.file,$e$$)}});$res$$.send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n"})});$router$$.route("/:id_app/file/zip").post(async function($req$$,$res$$){try{var $i_ids$$=($req$$.body||{}).ids;if(!$i_ids$$||$i_ids$$.length===0)return $res$$.status(400).send({error:"Kh\u00f4ng c\u00f3 danh s\u00e1ch c\u00e1c id file c\u1ea7n zip"});
|
|
18
|
+
fs.existsSync($file_name$$)||fs.mkdirSync($file_name$$);try{await createThumnail($extension$jscomp$3_input$jscomp$1_root$$,"thumbnail.png",$file_name$$),$obj$$.file.thumbnail="thumbnail.png",await global.getModel("file").updateOne({_id:$obj$$._id},{file:$obj$$.file})}catch($e$$){Logger.error("[file] l\u1ed7i t\u1ea1o thumbnail cho viedeo",$e$$.message)}}}else Logger.info("file not exists",$obj$$)});try{await processDataWorker($obj$$,"file")}catch($e$$){Logger.error("[ls-file][vector] err:",$e$$)}$fn$$(null,
|
|
19
|
+
$obj$$)};$contr$$.route(function($router$$){$router$$.route("/:id_app/file/create-vector").post(async function($req$$,$res$$){if(!$req$$.user.current_app_info.appAdmin)return $res$$.status(400).send({error:"Ch\u1ec9 admin c\u1ee7a c\u00f4ng ty m\u1edbi c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n thao t\u00e1c n\u00e0y"});const $condition$$=($req$$.body||{}).condition||{};$condition$$.id_app=$req$$.params.id_app;(await model.find($condition$$).lean()).forEach(async $file$$=>{try{await processDataWorker($file$$,
|
|
20
|
+
"file"),Logger.warn("[ls-file] \u0111\u00e3 x\u1eed l\u00fd xong file",$file$$.file)}catch($e$$){Logger.error("[ls-file] \u0111\u00e3 c\u00f3 l\u1ed7i khi x\u1eed l\u00fd file",$file$$.file,$e$$)}});$res$$.send({message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n"})});$router$$.route("/:id_app/file/zip").post(async function($req$$,$res$$){try{var $i_ids$$=($req$$.body||{}).ids;if(!$i_ids$$||$i_ids$$.length===0)return $res$$.status(400).send({error:"Kh\u00f4ng c\u00f3 danh s\u00e1ch c\u00e1c id file c\u1ea7n zip"});
|
|
21
21
|
if($i_ids$$.find($id$$=>!global.mongoose.Types.ObjectId.isValid($id$$)))return $res$$.status(400).send({error:"C\u00f3 m\u1ed9t ho\u1eb7c nhi\u1ec1u id file kh\u00f4ng h\u1ee3p l\u1ec7"});let $files$$=await model.find({id_app:$req$$.user.current_id_app,_id:{$in:$i_ids$$}}).lean();$files$$=$files$$.filter($f$$=>!$f$$.file?.url);if($files$$.length===0)return $res$$.status(404).send({error:"Kh\u00f4ng c\u00f3 file n\u00e0o \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y"});if((await Promise.all($files$$.map($file$$=>
|
|
22
22
|
hasPermission($req$$.user.email,$file$$)))).find($p$$=>!$p$$))return $res$$.status(400).send({error:"M\u1ed9t ho\u1eb7c nhi\u1ec1u file b\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp"});let $pathFiles$$=$files$$.map($file$$=>getPathFile($file$$));if($pathFiles$$.find($f$$=>!fs.existsSync($f$$)))return $res$$.status(404).send({error:"C\u00f3 m\u1ed9t ho\u1eb7c nhi\u1ec1u file kh\u00f4ng t\u1ed3n t\u1ea1i"});const $zip$$=new JSZip;for($i_ids$$=0;$i_ids$$<$pathFiles$$.length;$i_ids$$++){const $filePath$$=
|
|
23
23
|
$pathFiles$$[$i_ids$$],$fileName$$=path.basename($filePath$$),$fileData$$=fs.readFileSync($filePath$$);$zip$$.file($fileName$$,$fileData$$)}$res$$.setHeader("Content-Type","application/zip");$res$$.setHeader("Content-Disposition",`attachment; filename="files_${Date.now()}.zip"`);$zip$$.generateNodeStream({type:"nodebuffer",streamFiles:!0}).pipe($res$$)}catch($err$$){Logger.error($err$$),$res$$.status(500).send({error:"L\u1ed7i khi t\u1ea1o file zip",detail:$err$$.message})}});$router$$.route("/:id_app/file/download/:id").get(function($req$$,
|
|
24
24
|
$res$$){let $id$$=$req$$.params.id.split("-")[0];if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(400).send({error:"File ID kh\u00f4ng h\u1ee3p l\u1ec7"});let $size$$=($req$$.query.size||$req$$.query.resize||"FULLHD").toUpperCase(),$isFullSize$$=$size$$==="FULL";app.findOne({_id:$req$$.user.current_id_app}).lean().then(function($app_info$$){if(!$app_info$$)return $res$$.status(400).send("Kh\u00f4ng th\u1ec3 t\u1ea3i file n\u00e0y. Th\u00f4ng tin c\u00f4ng ty kh\u00f4ng t\u1ed3n t\u1ea1i");
|
|
25
25
|
model.findOne({_id:$id$$}).lean().then(async $rs$$=>{$rs$$&&$rs$$.file?permission.hasRight($rs$$.id_app,$req$$.user.email,$contr$$.module,"view",async function($error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$,$originalName_outputFileName_permission$$){if(!$originalName_outputFileName_permission$$)return $res$$.status(403).send({error:$error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$||"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp file n\u00e0y"});
|
|
26
|
-
if($rs$$.file.url)return $res$$.redirect($rs$$.file.url);var $_new_file_file_name$$=getPathFile($rs$$);$error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$=$rs$$.file.extension.toLowerCase();if(fs.existsSync($_new_file_file_name$$))if($req$$.query.recache?$res$$.setHeader("Cache-Control","no-cache, no-store, must-revalidate"):$res$$.setHeader("Cache-Control","public, max-age=2592000"),"png jpg jpeg webp tiff heif avif gif jp2 jxl".split(" ").indexOf($error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$)>=
|
|
26
|
+
if($rs$$.file.url)return $res$$.redirect($rs$$.file.url);var $_new_file_file_name$$=getPathFile($rs$$);Logger.info("[ls-file] path file",$_new_file_file_name$$);$error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$=$rs$$.file.extension.toLowerCase();if(fs.existsSync($_new_file_file_name$$))if($req$$.query.recache?$res$$.setHeader("Cache-Control","no-cache, no-store, must-revalidate"):$res$$.setHeader("Cache-Control","public, max-age=2592000"),"png jpg jpeg webp tiff heif avif gif jp2 jxl".split(" ").indexOf($error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$)>=
|
|
27
27
|
0){$originalName_outputFileName_permission$$=$rs$$.file.originalname||`image.${$error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$}`;$_new_file_file_name$$=await setWaterMark4Image($app_info$$,$_new_file_file_name$$,$error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$,$req$$.query.recache);if($isFullSize$$)return $res$$.type($error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$),$res$$.setHeader("Content-Disposition",
|
|
28
28
|
`${$req$$.query.action==="download"?"attachment":"inline"}; filename*=UTF-8''${encodeURIComponent($originalName_outputFileName_permission$$)}`),$error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$=fs.createReadStream($_new_file_file_name$$),$error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$.on("error",$err$$=>{Logger.error("Error streaming full image:",$err$$);$res$$.headersSent||$res$$.status(500).send("L\u1ed7i khi \u0111\u1ecdc file \u1ea3nh g\u1ed1c")}),
|
|
29
29
|
$error$jscomp$6_extension$jscomp$4_file_thumbnail_orgin_file_size_stream_stream$$.pipe($res$$);$originalName_outputFileName_permission$$=`${$originalName_outputFileName_permission$$.substring(0,$originalName_outputFileName_permission$$.lastIndexOf("."))||$originalName_outputFileName_permission$$}.webp`;$res$$.setHeader("Content-Type","image/webp");$res$$.setHeader("Content-Disposition",`${$req$$.query.action==="download"?"attachment":"inline"}; filename*=UTF-8''${encodeURIComponent($originalName_outputFileName_permission$$)}`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const model=global.getModel("mailsent"),Account=global.getModel("mailaccount"),controller=require("../../controllers/controller")
|
|
1
|
+
const model=global.getModel("mailsent"),Account=global.getModel("mailaccount"),controller=require("../../controllers/controller");
|
|
2
2
|
module.exports=function($router$$){(new controller($router$$,model,"mailsent",{sort:{date_created:-1},notNeedRight:!0,onFinding:function($user$$,$condition$$,$next$$){$condition$$.user_created=$user$$.email;$next$$(null,$condition$$)},onView:function($user$$,$items$$,$next$$){$items$$.joinModel($user$$.current_id_app,Account,[{where:{_id:"account_id"},fields:[{name:"from_name",value:"fullname"},{name:"from_address",value:"username"}]}],function(){$items$$.forEach(function($item$$){$item$$.from=[{name:$item$$.from_name,
|
|
3
|
-
address:$item$$.from_address}]});$next$$(null,$items$$)})},onCreating:function($text_user$$,$item$$,$next$$){$item$$.mail&&$item$$.mail.html&&($text_user$$=$item$$.mail.html.replace(/<(?:.|\n)*?>/gm,""),$item$$.mail.text=$text_user$$,$item$$.small_text=$item$$.mail.text.length>128?$item$$.mail.text.substring(0,128)+"...":$item$$.mail.text);$next$$(null,$item$$)},
|
|
4
|
-
$data
|
|
3
|
+
address:$item$$.from_address}]});$next$$(null,$items$$)})},onCreating:function($text_user$$,$item$$,$next$$){$item$$.mail&&$item$$.mail.html&&($text_user$$=$item$$.mail.html.replace(/<(?:.|\n)*?>/gm,""),$item$$.mail.text=$text_user$$,$item$$.small_text=$item$$.mail.text.length>128?$item$$.mail.text.substring(0,128)+"...":$item$$.mail.text);$next$$(null,$item$$)},onUpdating:function($text$jscomp$1_user$$,$data$$,$item$$,$next$$){if($item$$.send)return $next$$("B\u1ea1n kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt email n\u00e0y v\u00ec n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c g\u1eedi");
|
|
4
|
+
$data$$.mail&&$data$$.mail.html&&($text$jscomp$1_user$$=$data$$.mail.html.replace(/<(?:.|\n)*?>/gm,""),$data$$.mail.text=$text$jscomp$1_user$$,$data$$.small_text=$data$$.mail.text.length>128?$data$$.mail.text.substring(0,128)+"...":$data$$.mail.text);$next$$(null,$data$$,$item$$)}})).route()};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
module.exports=function($router$$){
|
|
3
|
-
|
|
4
|
-
"N\u0103m")});$callback$$()}},function(){$next$$(null,$items$$)})},onCreated:$createLink$$,onUpdated:$createLink$$,onDeleted:function($user$$,$obj$$,$next$$){schedule.deleteWarrantyJob($obj$$._id,function(){$next$$(null,$obj$$)})}})).route()};
|
|
1
|
+
const model=global.getModel("warranty"),controller=require("../../controllers/controller"),contract=global.getModel("contract"),async=require("async");
|
|
2
|
+
module.exports=function($router$$){(new controller($router$$,model,"warranty",{sort:{user_created:-1},onView:function($user$$,$items$$,$next$$){async.series({contract:function($callback$$){$items$$.joinModel($user$$.current_id_app,contract,[{where:{_id:"id_hd"},fields:[{name:"ten_hd",value:"ten_hd"}]}],function(){$callback$$(null,$items$$)})},unit_time:function($callback$$){$items$$.forEach(function($item$$){$item$$.unit_time==1&&($item$$.unit_time_name="Ng\u00e0y");$item$$.unit_time==2&&($item$$.unit_time_name=
|
|
3
|
+
"Th\u00e1ng");$item$$.unit_time==3&&($item$$.unit_time_name="N\u0103m")});$callback$$()}},function(){$next$$(null,$items$$)})}})).route()};
|