flexbiz-server 12.3.15 → 12.3.16

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 CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "flexbiz-server",
3
3
  "main": "./server/app.js",
4
4
  "description": "Flexible Server",
5
- "version": "12.3.15",
5
+ "version": "12.3.16",
6
6
  "author": {
7
7
  "name": "Van Truong Pham",
8
8
  "email": "invncur@gmail.com"
@@ -21,7 +21,7 @@
21
21
  "axios": "^0.20.0",
22
22
  "body-parser": "^1.19.0",
23
23
  "brorand": "^1.1.0",
24
- "bull": "^4.16.5",
24
+ "bullmq": "^5.42.0",
25
25
  "bwip-js": "^3.1.0",
26
26
  "cheerio": "^1.0.0-rc.10",
27
27
  "compression": "^1.7.4",
@@ -1,13 +1,13 @@
1
- 'use strict';const EventEmitter=require("events").EventEmitter,underscore=require("underscore"),_=require("lodash"),Queue=require("bull"),ckvt=require("../libs/ckvt"),OptionsModel=global.getModel("options"),Approve=global.getModel("approve"),log=global.getModel("log"),trangthai=global.getModel("trangthai"),Participant=global.getModel("participant"),async=require("async"),excel=require("../libs/excel"),permission=require("../libs/permission"),utils=require("../libs/utils"),fs=require("fs"),path=require("path"),
2
- link=global.getModel("link"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),templatevoucher=global.getModel("templatevoucher"),{evalute,JSONParser}=require("../libs/utils"),redisCache=require("../libs/redis-cache"),dmqddvt=global.getModel("dmqddvt"),StaticPool=require("../libs/WorkerStaticPool"),validator=require("../libs/validator"),{bodyToJson,ERRORS,getNextSequence,postData,pushNotification,runWebhooks,deletePost}=require("./controllerUtils"),
3
- create=require("./createHandler"),update=require("./updateHandler"),importHandler=require("./importHandler"),viewHandler=require("./viewHandler"),findHandler=require("./findHandler"),exportHandler=require("./exportHandler");
1
+ 'use strict';const EventEmitter=require("events").EventEmitter,underscore=require("underscore"),_=require("lodash"),{Queue,QueueEvents}=require("bullmq"),ckvt=require("../libs/ckvt"),OptionsModel=global.getModel("options"),Approve=global.getModel("approve"),log=global.getModel("log"),trangthai=global.getModel("trangthai"),Participant=global.getModel("participant"),async=require("async"),excel=require("../libs/excel"),permission=require("../libs/permission"),utils=require("../libs/utils"),fs=require("fs"),
2
+ path=require("path"),link=global.getModel("link"),Moment=require("moment-timezone"),moment=$time$$=>Moment.tz($time$$,configs.timezone||"Asia/Ho_Chi_Minh"),templatevoucher=global.getModel("templatevoucher"),{evalute,JSONParser}=require("../libs/utils"),redisCache=require("../libs/redis-cache"),dmqddvt=global.getModel("dmqddvt"),StaticPool=require("../libs/WorkerStaticPool"),validator=require("../libs/validator"),{bodyToJson,ERRORS,getNextSequence,postData,pushNotification,runWebhooks,deletePost}=
3
+ require("./controllerUtils"),create=require("./createHandler"),update=require("./updateHandler"),importHandler=require("./importHandler"),viewHandler=require("./viewHandler"),findHandler=require("./findHandler"),exportHandler=require("./exportHandler");
4
4
  class controller{constructor($router$$,$model$$,$name$$,$options$jscomp$0$$={isVoucher:void 0,sort:void 0,check_stock:void 0,unique:void 0,require_id_app:void 0,notNeedRight:void 0}){this.name=$name$$;this.model=$model$$;this.model_name=$model$$.collection.name.substring(0,$model$$.collection.name.length-1).toLowerCase();underscore.has($model$$.schema.paths,"listinfo_code")||$model$$.schema.add({listinfo_code:{type:String}});this.router=$router$$;this.module=this.name;global.controllers[$name$$.trim().toUpperCase()]=
5
5
  this;$options$jscomp$0$$.findExact||($options$jscomp$0$$.findExact={});this.keyValues=$options$jscomp$0$$.keyValues;this.keyValues||(this.keyValues={});void 0===$options$jscomp$0$$.require_id_app||!0===$options$jscomp$0$$.require_id_app?(this.require_id_app=!0,this.route_name=`/:id_app/${this.module}`):(this.require_id_app=!1,this.route_name=`/${this.module}`);this.collection_name=$options$jscomp$0$$.collection_name?$options$jscomp$0$$.collection_name:$name$$;this.sort=$options$jscomp$0$$.sort;this.unique=
6
6
  $options$jscomp$0$$.unique;this.getting=$options$jscomp$0$$.onGetting;this.finding=$options$jscomp$0$$.onFinding;this.found=$options$jscomp$0$$.onFound;this.validating=$options$jscomp$0$$.onValidating;this.saving=$options$jscomp$0$$.onSaving;this.creating=$options$jscomp$0$$.onCreating;this.created=$options$jscomp$0$$.onCreated;this.updating=$options$jscomp$0$$.onUpdating;this.updated=$options$jscomp$0$$.onUpdated;this.deleting=$options$jscomp$0$$.onDeleting;this.deleted=$options$jscomp$0$$.onDeleted;
7
7
  this.approveData=$options$jscomp$0$$.approveData;this.view=$options$jscomp$0$$.onView;this.viewRequired=$options$jscomp$0$$.onViewRequired;this.cache=$options$jscomp$0$$.cache;this.asyncView=async($user$$,$items$$,$options$$)=>{const $self$$=this;return new Promise($resolve$$=>{$self$$.onView($user$$,$items$$,($error$$,$rs$$)=>{if($error$$)return console.error($error$$),$resolve$$($items$$);$resolve$$($rs$$)},$options$$)})};this.onView=async($user$$,$rows$$,$next$$,$options$$)=>{viewHandler($user$$,
8
- this,$rows$$,$next$$,$options$$)};this.excelParse=$options$jscomp$0$$.onExcelParse;this.options=$options$jscomp$0$$;this.replaceIfExists=$options$jscomp$0$$.replaceIfExists;this.notNeedRight=async($user$$,$_options$$={})=>{let $nnr$$=$options$jscomp$0$$.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=$nnr$$($user$$,$_options$$));return $nnr$$};const $ctrl$$=this;this.findQueue=new Queue("findQueue");this.findQueue.process(async $job$$=>{const {req:$req$$,shareRoute:$shareRoute$$}=$job$$.data;return new Promise(($resolve$$,
9
- $reject$$)=>{findHandler($ctrl$$,$req$$,($e$$,$result$$,$dataType$$)=>{if($e$$)return $reject$$($e$$);$resolve$$({result:$result$$,dataType:$dataType$$})},$shareRoute$$)})})}getProperty($name$$){return this[$name$$]}getNextId(){let $ma_ct$$=this.name;this.router.route(`${this.route_name}/next/:field`).get(($field_req$$,$res$$)=>{let $id_app$$=$field_req$$.user.current_id_app;$field_req$$=$field_req$$.params.field;"so_ct"===$field_req$$?$res$$.send({[$field_req$$]:$ma_ct$$}):getNextSequence($id_app$$,
10
- $ma_ct$$,$field_req$$,($e$$,$rs$$)=>{if($e$$)return console.error("getNextId",$e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});$res$$.send($rs$$)})})}async checkData($appInfo$$,$data$$,$fn$$){const $options$$=this.options;if($data$$.trang_thai&&$data$$.ma_ct){let $tt$$=await trangthai.findOne({ma_ct:$data$$.ma_ct,ma_trang_thai:$data$$.trang_thai},{check_data:1}).lean();if($tt$$&&0==$tt$$.check_data)return $fn$$()}async.series({checkTonKho:$callback$jscomp$0$$=>
8
+ this,$rows$$,$next$$,$options$$)};this.excelParse=$options$jscomp$0$$.onExcelParse;this.options=$options$jscomp$0$$;this.replaceIfExists=$options$jscomp$0$$.replaceIfExists;this.notNeedRight=async($user$$,$_options$$={})=>{let $nnr$$=$options$jscomp$0$$.notNeedRight;_.isFunction($nnr$$)&&($nnr$$=$nnr$$($user$$,$_options$$));return $nnr$$};const $ctrl$$=this;this.findQueue=new Queue("findQueue");this.findQueueEvents=new QueueEvents("findQueue");this.findQueue.process(async $job$$=>{const {req:$req$$,
9
+ shareRoute:$shareRoute$$}=$job$$.data;return new Promise(($resolve$$,$reject$$)=>{findHandler($ctrl$$,$req$$,($e$$,$result$$,$dataType$$)=>{if($e$$)return $reject$$($e$$);$resolve$$({result:$result$$,dataType:$dataType$$})},$shareRoute$$)})})}getProperty($name$$){return this[$name$$]}getNextId(){let $ma_ct$$=this.name;this.router.route(`${this.route_name}/next/:field`).get(($field_req$$,$res$$)=>{let $id_app$$=$field_req$$.user.current_id_app;$field_req$$=$field_req$$.params.field;"so_ct"===$field_req$$?
10
+ $res$$.send({[$field_req$$]:$ma_ct$$}):getNextSequence($id_app$$,$ma_ct$$,$field_req$$,($e$$,$rs$$)=>{if($e$$)return console.error("getNextId",$e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});$res$$.send($rs$$)})})}async checkData($appInfo$$,$data$$,$fn$$){const $options$$=this.options;if($data$$.trang_thai&&$data$$.ma_ct){let $tt$$=await trangthai.findOne({ma_ct:$data$$.ma_ct,ma_trang_thai:$data$$.trang_thai},{check_data:1}).lean();if($tt$$&&0==$tt$$.check_data)return $fn$$()}async.series({checkTonKho:$callback$jscomp$0$$=>
11
11
  {$data$$.details&&$appInfo$$&&$appInfo$$.options&&$appInfo$$.options.khong_xuat_kho_am&&0!=$options$$.check_stock?(async()=>{let $details$$=$data$$.details.filter($d$$=>$d$$.ma_vt&&$d$$.sl_xuat);await $details$$.asyncJoinModel2($appInfo$$._id,"dmvt",{where:{ma_vt:"ma_vt"},fields:["tg_tk","kg_kiem_tra_ton_kho","kg_kiem_tra_ton_kho_tt",{cb:"combo"},"ten_vt"]});$details$$.forEach($d$$=>{!$d$$.combo&&$d$$.cb&&($d$$.combo=$d$$.cb)});$details$$=$details$$.filter($d$$=>$d$$.tg_tk&&!$d$$.kg_kiem_tra_ton_kho||
12
12
  0<($d$$.combo||[]).length);$details$$=$details$$.map($detail$$=>$detail$$.combo&&0<$detail$$.combo.length?$detail$$.combo.map($c$$=>{$c$$=$c$$.toObject?$c$$.toObject():{...$c$$};$c$$.sl_xuat*=$detail$$.sl_xuat;$c$$.ma_kho=$detail$$.ma_kho;return $c$$}):[$detail$$]).reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);await $details$$.asyncJoinModel2($appInfo$$._id,dmqddvt,{where:{ma_vt:"ma_vt",ma_dvt:"ma_dvt"},fields:"ty_le_qd"});let $data_sokho$$=[];$data$$._id&&($data_sokho$$=await global.getModel("sokho").find({id_ct:$data$$._id.toString()}).lean());
13
13
  $details$$.forEach($d$$=>{$d$$.he_so_qd=$d$$.ty_le_qd||1;$d$$.sl_xuat_qd=$d$$.he_so_qd*$d$$.sl_xuat});$details$$=await $details$$.asyncGroupBy(["ma_vt","ma_kho","ten_vt"],["sl_xuat_qd"]);async.mapSeries($details$$,($d$$,$callback$$)=>{let $ma_kho$$=$d$$.ma_kho||$data$$.ma_kho||$data$$.ma_kho_x,$query$$={ma_vt:$d$$.ma_vt,ma_kho:$ma_kho$$,ngay:new Date,id_app:$appInfo$$._id};$d$$.kg_kiem_tra_ton_kho_tt||($d$$.ma_lo&&($query$$.ma_lo=$d$$.ma_lo),$d$$.han_sd&&($query$$.han_sd=$d$$.han_sd),$d$$.ma_tt1&&
@@ -29,10 +29,12 @@ console.error("danh s\u00e1ch ng\u01b0\u1eddi duy\u1ec7t ph\u1ea3i l\u00e0 m\u1e
29
29
  $data$$,$callback_main$$,$options$$={replace:!0,req:null}){importHandler($user$$,this,$id_app$$,$data$$,$callback_main$$,$options$$)}postData($obj$$,$callback$$,$options$$={}){return controller.postData($obj$$,this,$callback$$,$options$$)}pushNotification($_obj$$,$eventName$$="new",$old_obj$$=null,$justFireEvents$$=!1,$options$$={title:"",data:{}}){return pushNotification(this,$_obj$$,$eventName$$,$old_obj$$,$justFireEvents$$,$options$$)}}controller.prototype.__proto__=EventEmitter.prototype;
30
30
  controller.prototype.asyncGetNextSequence=async($id_app$$,$ma_ct$$,$field$$="so_ct",$options$$)=>new Promise($resolve$$=>{getNextSequence($id_app$$,$ma_ct$$,$field$$,($error$$,$rs$$)=>{if($error$$)return Error($error$$);$resolve$$($rs$$)},$options$$)});
31
31
  controller.prototype.getFieldNoRight=function(){let $ctrl$$=this;this.router.route(`${this.route_name}/field-not-right/:fieldName`).get(async($req$$,$res$$)=>{let $fieldName$$=$req$$.params.fieldName;try{0<=(await permission.getFieldNotRight($req$$.user.current_id_app,$req$$.user.email,$ctrl$$.name)).indexOf($fieldName$$)?$res$$.send({allow:!1}):$res$$.send({allow:!0})}catch($e$$){$res$$.state(400).send($e$$.message)}})};
32
- controller.prototype.find=function($_route_name_route_name$$,$shareRoute$$=!1,$method$$="GET"){let $ctrl$$=this;const $findRoute$$=($req$$,$res$$)=>{this.findQueue.add({req:$req$$,shareRoute:$shareRoute$$},{timeout:6E4}).then($rs$$=>{const {result:$result$$,dataType:$dataType$$}=$rs$$;"xlsx"==$dataType$$?($res$$.setHeader("Content-Type","application/vnd.openxmlformats"),$res$$.setHeader("Content-Disposition","attachment; filename="+$ctrl$$.name+".xlsx"),$res$$.end($result$$,"binary")):$res$$.send($result$$)}).catch($e$$=>
33
- {$res$$.status(400).send($e$$)})};$_route_name_route_name$$=$_route_name_route_name$$||this.route_name;"GET"===$method$$?(this.router.route($_route_name_route_name$$).get($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").get($findRoute$$)):(this.router.route($_route_name_route_name$$).post($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").post($findRoute$$))};
34
- controller.prototype.get=function($route_name$$,$shareRoute$$=!1){this.router.route(`${$route_name$$||this.route_name}/:id`).get(function($req$$,$res$$){let $id$$=$req$$.params.id;if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(404).send({error:ERRORS.ERR_ID_INVALID,code:ERRORS.ERR_ID_INVALID_CODE});$req$$.body={_id:$id$$};this.findQueue.add({req:$req$$,shareRoute:$shareRoute$$},{timeout:3E4}).then($result$jscomp$2_rs$$=>{({result:$result$jscomp$2_rs$$}=$result$jscomp$2_rs$$);
35
- if(0==$result$jscomp$2_rs$$.length)return $res$$.status(404).send({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});$res$$.send($result$jscomp$2_rs$$[0])}).catch($e$$=>{$res$$.status(400).send($e$$)})})};
32
+ controller.prototype.find=function($_route_name_route_name$$,$shareRoute$$=!1,$method$$="GET"){let $ctrl$$=this;const $findRoute$$=async($ip_req$$,$res$$)=>{const {query:$query$$,body:$body$$,user:$user$$,params:$params$$}=$ip_req$$,$user_agent$$=$ip_req$$.header("user-agent");$ip_req$$=$ip_req$$.headers["x-forwarded-for"]||$ip_req$$.connection.remoteAddress;try{const $job$$=await this.findQueue.add({req:{query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip_req$$},
33
+ shareRoute:$shareRoute$$},{timeout:6E4});this.findQueueEvents.on("completed",({jobId:$jobId$$,returnvalue:$returnvalue$$})=>{if($jobId$$===$job$$.id){const {result:$result$$,dataType:$dataType$$}=$returnvalue$$;"xlsx"==$dataType$$?($res$$.setHeader("Content-Type","application/vnd.openxmlformats"),$res$$.setHeader("Content-Disposition","attachment; filename="+$ctrl$$.name+".xlsx"),$res$$.end($result$$,"binary")):$res$$.send($result$$)}});this.findQueueEvents.on("failed",({jobId:$jobId$$,failedReason:$failedReason$$})=>
34
+ {$jobId$$===$job$$.id&&$res$$.status(400).send($failedReason$$)})}catch($e$$){$res$$.status(400).send($e$$)}};$_route_name_route_name$$=$_route_name_route_name$$||this.route_name;"GET"===$method$$?(this.router.route($_route_name_route_name$$).get($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").get($findRoute$$)):(this.router.route($_route_name_route_name$$).post($findRoute$$),this.router.route($_route_name_route_name$$+"/excel").post($findRoute$$))};
35
+ controller.prototype.get=function($route_name$$,$shareRoute$$=!1){this.router.route(`${$route_name$$||this.route_name}/:id`).get(async function($req$$,$res$$){var $body$$=$req$$.params.id;if(!global.mongoose.Types.ObjectId.isValid($body$$))return $res$$.status(404).send({error:ERRORS.ERR_ID_INVALID,code:ERRORS.ERR_ID_INVALID_CODE});$body$$={_id:$body$$};const $user_agent$$=$req$$.header("user-agent"),$ip$$=$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress,{query:$query$$,user:$user$$,
36
+ params:$params$$}=$req$$;try{const $job$$=await this.findQueue.add({req:{query:$query$$,body:$body$$,user:$user$$,params:$params$$,user_agent:$user_agent$$,ip:$ip$$},shareRoute:$shareRoute$$},{timeout:6E4});this.findQueueEvents.on("completed",({jobId:$jobId$jscomp$2_result$$,returnvalue:$returnvalue$$})=>{if($jobId$jscomp$2_result$$===$job$$.id){({result:$jobId$jscomp$2_result$$}=$returnvalue$$);if(0==$jobId$jscomp$2_result$$.length)return $res$$.status(404).send({error:ERRORS.ERR_NOT_FOUND,code:ERRORS.ERR_NOT_FOUND_CODE});
37
+ $res$$.send($jobId$jscomp$2_result$$[0])}});this.findQueueEvents.on("failed",({jobId:$jobId$$,failedReason:$failedReason$$})=>{$jobId$$===$job$$.id&&$res$$.status(400).send($failedReason$$)})}catch($e$$){console.error($e$$),$res$$.status(400).send($e$$)}})};
36
38
  controller.prototype.postAgainHandler=function($user$$,$condition$$,$callback$jscomp$0$$,$options$$={req:null}){let $model$$=this.model,$ctrl$$=this;if(!$ctrl$$.post)return $callback$jscomp$0$$(null,{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 th\u1ef1c hi\u1ec7n xong"});const $update_tk_vt$$=$condition$$.update_tk_vt;delete $condition$$.update_tk_vt;const $user_update$$={date_updated:new Date,user_updated:$user$$.email};$model$$.find($condition$$).sort({ngay_ct:1}).lean().exec(function($e$jscomp$0$$,
37
39
  $objsrepost$$){console.log("start repost",$condition$$,$objsrepost$$.length," vouchers","by",$user$$.email);setImmediate(()=>{if($e$jscomp$0$$)return console.error("postAgain: find",$e$jscomp$0$$),$callback$jscomp$0$$({error:$e$jscomp$0$$.message||$e$jscomp$0$$.error||$e$jscomp$0$$});async.mapSeries($objsrepost$$,function($obj$$,$callback$$){setImmediate(async()=>{console.log("postAgain: handle data before post",$obj$$.ma_ct,$obj$$.so_ct,$obj$$.ngay_ct,"by",$user$$.email);if($ctrl$$.reposting)try{await $ctrl$$.reposting($user$$,
38
40
  $obj$$)}catch($e$$){return $callback$$({error:"Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd \u0111\u01b0\u1ee3c d\u1eef li\u1ec7u tr\u01b0\u1edbc khi repost ch\u1ee9ng t\u1eeb:"+$obj$$.so_ct+", L\u1ed7i: "+($e$$.message||$e$$.error||"")})}$update_tk_vt$$&&$obj$$.details&&(console.log("postAgain: update tk_vt..."),await $obj$$.details.filter($d$$=>$d$$.ma_vt).asyncJoinModel2($obj$$.id_app,global.getModel("dmvt"),{where:"ma_vt",fields:"tk_vt"}),$user_update$$.details=$obj$$.details);try{console.log("postAgain: update voucher..."),
@@ -109,10 +111,10 @@ id_app:$req$$.user.current_id_app,module:$name$$.toUpperCase(),data:$data$$,conf
109
111
  $e$$,message:$e$$.message||$e$$});if(0===$rs$$.rows_error.length)$res$$.send($rs$$);else{let $message$$=[...(new Set($rs$$.rows_error.map($r$jscomp$0$$=>[...(new Set($r$jscomp$0$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$res$$.status(400).send({message:$message$$,error:$rs$$.error||$rs$$})}})},{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})};
110
112
  controller.prototype.create=function(){let $name$$=this.name,$ctrl$$=this;this.router.route(this.route_name).post(function($req$$,$res$$){let $session$$=$req$$.session;if(!0===$session$$["creating_"+$name$$])return $res$$.status(400).send({error:"\u0110ang x\u1eed l\u00fd d\u1eef li\u1ec7u"});$session$$["creating_"+$name$$]=!0;let $body$$=$req$$.body;if(!$body$$)return $res$$.status(411).send({error:"Kh\u00f4ng c\u00f3 n\u1ed9i dung c\u1ea7n l\u01b0u"});$req$$.files&&0<underscore.keys($req$$.files).length&&
111
113
  ("JSON"!=$body$$.return&&($req$$.uploadFile=!0),underscore.extend($body$$,$req$$.files));create($req$$.user,$ctrl$$,$body$$,($e$$,$rs$$)=>{setImmediate(()=>{$session$$["creating_"+$name$$]=!1;if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});!1===$req$$.query.return_data?$res$$.send({_id:$rs$$._id.toString()}):$res$$.send($rs$$)})},null,$req$$)})};
112
- controller.prototype.quickCreate=function(){let $model$$=this.model,$name$$=this.name,$ctrl$$=this,$createFromTemplate$$=async($req$$,$res$$,$body$jscomp$1_query$$)=>{let $session$$=$req$$.session;if(!0===$session$$["creating_"+$name$$])return $res$$.status(400).send({error:"\u0110ang x\u1eed l\u00fd d\u1eef li\u1ec7u"});$session$$["creating_"+$name$$]=!0;if(!$body$jscomp$1_query$$){$body$jscomp$1_query$$=$req$$.params.template_code;if(!$body$jscomp$1_query$$)return $session$$["creating_"+$name$$]=
113
- !1,$res$$.status(400).send({error:"M\u1eabu d\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i"});$body$jscomp$1_query$$={id_app:$req$$.user.current_id_app,voucher_code:$name$$.toUpperCase(),code:$body$jscomp$1_query$$};$body$jscomp$1_query$$=await templatevoucher.findOne($body$jscomp$1_query$$).lean();if(!$body$jscomp$1_query$$)return $session$$["creating_"+$name$$]=!1,$res$$.status(400).send({error:"M\u1eabu d\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i"})}$body$jscomp$1_query$$=$body$jscomp$1_query$$.data||
114
- {};delete $body$jscomp$1_query$$.so_ct;delete $body$jscomp$1_query$$.ngay_ct;delete $body$jscomp$1_query$$.user_created;delete $body$jscomp$1_query$$.date_created;delete $body$jscomp$1_query$$.user_updated;delete $body$jscomp$1_query$$.date_updated;delete $body$jscomp$1_query$$._id;delete $body$jscomp$1_query$$.pkey;delete $body$jscomp$1_query$$.__v;let $_data$$=$req$$.query;$req$$.body&&($_data$$=Object.assign($_data$$,$req$$.body));for(let $key$$ in $_data$$)$_data$$[$key$$]&&"access_token"!==$key$$&&
115
- "token"!==$key$$&&"_id"!==$key$$&&(underscore.has($model$$.schema.paths,$key$$)&&($body$jscomp$1_query$$[$key$$]=$_data$$[$key$$]),$body$jscomp$1_query$$.details&&$body$jscomp$1_query$$.details.forEach($d$$=>{$d$$[$key$$]=$_data$$[$key$$]}));create($req$$.user,$ctrl$$,$body$jscomp$1_query$$,($e$$,$rs$$)=>{setImmediate(()=>{$session$$["creating_"+$name$$]=!1;if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});$res$$.send($rs$$)})},
114
+ controller.prototype.quickCreate=function(){let $model$$=this.model,$name$$=this.name,$ctrl$$=this,$createFromTemplate$$=async($req$$,$res$$,$body$jscomp$3_query$$)=>{let $session$$=$req$$.session;if(!0===$session$$["creating_"+$name$$])return $res$$.status(400).send({error:"\u0110ang x\u1eed l\u00fd d\u1eef li\u1ec7u"});$session$$["creating_"+$name$$]=!0;if(!$body$jscomp$3_query$$){$body$jscomp$3_query$$=$req$$.params.template_code;if(!$body$jscomp$3_query$$)return $session$$["creating_"+$name$$]=
115
+ !1,$res$$.status(400).send({error:"M\u1eabu d\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i"});$body$jscomp$3_query$$={id_app:$req$$.user.current_id_app,voucher_code:$name$$.toUpperCase(),code:$body$jscomp$3_query$$};$body$jscomp$3_query$$=await templatevoucher.findOne($body$jscomp$3_query$$).lean();if(!$body$jscomp$3_query$$)return $session$$["creating_"+$name$$]=!1,$res$$.status(400).send({error:"M\u1eabu d\u1eef li\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i"})}$body$jscomp$3_query$$=$body$jscomp$3_query$$.data||
116
+ {};delete $body$jscomp$3_query$$.so_ct;delete $body$jscomp$3_query$$.ngay_ct;delete $body$jscomp$3_query$$.user_created;delete $body$jscomp$3_query$$.date_created;delete $body$jscomp$3_query$$.user_updated;delete $body$jscomp$3_query$$.date_updated;delete $body$jscomp$3_query$$._id;delete $body$jscomp$3_query$$.pkey;delete $body$jscomp$3_query$$.__v;let $_data$$=$req$$.query;$req$$.body&&($_data$$=Object.assign($_data$$,$req$$.body));for(let $key$$ in $_data$$)$_data$$[$key$$]&&"access_token"!==$key$$&&
117
+ "token"!==$key$$&&"_id"!==$key$$&&(underscore.has($model$$.schema.paths,$key$$)&&($body$jscomp$3_query$$[$key$$]=$_data$$[$key$$]),$body$jscomp$3_query$$.details&&$body$jscomp$3_query$$.details.forEach($d$$=>{$d$$[$key$$]=$_data$$[$key$$]}));create($req$$.user,$ctrl$$,$body$jscomp$3_query$$,($e$$,$rs$$)=>{setImmediate(()=>{$session$$["creating_"+$name$$]=!1;if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});$res$$.send($rs$$)})},
116
118
  null,$req$$)};this.router.route(`${this.route_name}/quickcreate/:template_code`).get(function($req$$,$res$$){$createFromTemplate$$($req$$,$res$$)});this.router.route(`${this.route_name}/quickcreate/:template_code`).post(function($req$$,$res$$){$createFromTemplate$$($req$$,$res$$)})};
117
119
  controller.prototype.update=function(){let $ctrl$$=this,$name$$=this.name;this.router.route(this.route_name+"/:id").put(function($req$$,$res$$){let $session$$=$req$$.session;if(!0===$session$$["updating_"+$name$$])return $res$$.status(400).send({error:"\u0110ang x\u1eed l\u00fd d\u1eef li\u1ec7u"});$session$$["updating_"+$name$$]=!0;let $body$$=$req$$.body;$req$$.files&&underscore.extend($body$$,$req$$.files);let $data$$;try{$data$$=bodyToJson($body$$)}catch($e$$){return $res$$.status(400).send({error:$e$$.message||
118
120
  $e$$.error||$e$$})}update($req$$.user,$ctrl$$,$req$$.params.id,$data$$,($e$$,$rs$$)=>{setImmediate(()=>{$session$$["updating_"+$name$$]=!1;if($e$$)return console.error($e$$),$e$$.error?$res$$.status(400).send($e$$):$res$$.status(400).send({error:$e$$.message||$e$$});!1===$req$$.query.return_data?$res$$.send({_id:$rs$$._id.toString()}):$res$$.send($rs$$)})},null,$req$$)})};
@@ -12,7 +12,7 @@ else _.isObject($_condition$$)&&0<Object.keys($_condition$$).length&&$condition$
12
12
  ($col$$,$callback$$)=>{setImmediate(()=>{let $m$$=global.getModel($col$$.ref_collection);permission.getRightByItem($req$$.user.current_id_app,$m$$,$req$$.user.email,function($e$jscomp$0$$,$_condition$$,$admin$$){setImmediate(()=>{if($e$jscomp$0$$)return $callback$$({e:$e$jscomp$0$$.error||$e$jscomp$0$$.message||$e$jscomp$0$$,code:$e$jscomp$0$$.code||ERRORS.ERR_NOT_PERMIT_CODE});if($admin$$)return $callback$$();$_condition$$.id_app=$req$$.user.current_id_app;$req$$.condition[$col$$.ref_field]&&($_condition$$[$col$$.ref_field]=
13
13
  $req$$.condition[$col$$.ref_field]);$m$$.find($_condition$$,{[$col$$.ref_field]:1}).lean().exec(($e$$,$rs$$)=>{setImmediate(()=>{if($e$$)return $callback$$($e$$);let $dsdt$$=underscore.pluck($rs$$,$col$$.ref_field);$dsdt$$.push("");$dsdt$$.push(null);$condition_assignwiths$$[$col$$.field]={$in:$dsdt$$};$callback$$()})})})},$col$$.ref_module)})},$e$$=>{setImmediate(()=>{if($e$$)return $callback$jscomp$0$$({error:$e$$.error||$e$$.message||$e$$});if(0<Object.keys($condition_assignwiths$$).length){let $condition$$=
14
14
  $req$$.condition_assign||$req$$.condition;$condition$$.$and||($condition$$.$and=[]);let $$or$$=$condition$$.$and.find($a$$=>$a$$.$or);$$or$$?$$or$$.$or.push($condition_assignwiths$$):$condition$$.$and.push($condition_assignwiths$$)}$callback$jscomp$0$$()})})}else $callback$jscomp$0$$()})},function($callback$$){setImmediate(async()=>{if($shareRoute$$)return $callback$$();let $notNeedRight$$=await $ctrl$$.notNeedRight($req$$.user,{action:"view"});permission.hasRight($req$$.user.current_id_app,$req$$.user.email,
15
- $ctrl$$.module,"view",function($error$$,$permission$$){setImmediate(()=>{if($ctrl$$.options.onQuery)$req$$.permission=$permission$$,$ctrl$$.options.onQuery($req$$,$e$$=>{if($e$$)return $callback$$({error:$e$$.error||$e$$.message||$e$$});if(!$req$$.permission)return $req$$.result=[],$callback$$("0");$callback$$()});else{if(!$permission$$)return $req$$.result=[],$callback$$("0");$callback$$()}})},{notNeedRight:$notNeedRight$$})})},async function($callback$jscomp$0$$){setImmediate(async()=>{let $condition$jscomp$0$$=
15
+ $ctrl$$.module,"view",function($error$$,$permission$$){setImmediate(()=>{if($ctrl$$.options.onQuery)$req$$.permission=$permission$$,$ctrl$$.options.onQuery($req$$,$e$$=>{if($e$$)return $callback$$({error:$e$$.error||$e$$.message||$e$$});if(!$req$$.permission)return $req$$.result=[],$callback$$("0");$callback$$()});else{if(!$permission$$)return $req$$.result=[],$callback$$("0");$callback$$()}})},{notNeedRight:$notNeedRight$$})})},function($callback$jscomp$0$$){setImmediate(async()=>{let $condition$jscomp$0$$=
16
16
  $req$$.condition;$condition$jscomp$0$$||($condition$jscomp$0$$={});if($shareRoute$$){$condition$jscomp$0$$.shared=!0;var $data_log_fields_fields$$=(await global.getModel("app").find({sale_online:!0},{_id:1}).lean()).map($a$$=>$a$$._id);$condition$jscomp$0$$.$and||($condition$jscomp$0$$.$and=[]);$condition$jscomp$0$$.$and.push({id_app:{$in:$data_log_fields_fields$$}});$condition$jscomp$0$$.id_app&&$condition$jscomp$0$$.$and.push({id_app:$condition$jscomp$0$$.id_app})}else underscore.has($model$$.schema.paths,
17
17
  "id_app")&&!1!==$ctrl$$.require_id_app&&($condition$jscomp$0$$.id_app=$req$$.user.current_id_app);"public"===$req$$.user.email&&underscore.has($model$$.schema.paths,"session_created")&&($condition$jscomp$0$$.session_created=($req$$.cookies||{}).uid);underscore.extend($condition$jscomp$0$$,$ctrl$$.keyValues);deleteEmptyArray($condition$jscomp$0$$,"$and");deleteEmptyArray($condition$jscomp$0$$,"$or");deleteEmptyArray($condition$jscomp$0$$,"$nor");underscore.has($model$$.schema.paths,"ma_ct")&&$ctrl$$.options.isVoucher&&
18
18
  ($condition$jscomp$0$$.ma_ct=$ctrl$$.name.toUpperCase());let $condition_group$$;$req$$.fetch_by_groups&&$req$$.fetch_by_groups.model_group&&$req$$.fetch_by_groups.field&&($condition_group$$=$req$$.fetch_by_groups.condition||{},$condition_group$$.status=!0,$condition_group$$.id_app=$req$$.user.current_id_app,$condition$jscomp$0$$[$req$$.fetch_by_groups.field]&&($condition_group$$[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]=$condition$jscomp$0$$[$req$$.fetch_by_groups.field]));if($req$$.query.count){let $groups_number$$=
@@ -26,8 +26,8 @@ $query$$.group($group_sort$$));if($req$$.query.match){let $match$$=JSONParser($r
26
26
  $query$$.append($aggregate$$)}}catch($e$$){return $callback$$({error:$e$$.message||$e$$.error||$e$$})}else underscore.has($model$$.schema.paths,"id_app")&&0<Object.keys($gfields$$).length&&Object.keys($gfields$$).find($k$$=>1==$gfields$$[$k$$])&&($gfields$$.id_app=1),$query$$=$model$$.find($condition$$,$gfields$$);var $group_sort$$=$req$$.sort;if($group_sort$$){$group_sort$$._id=1;for(var $key$jscomp$0$$ in $group_sort$$)if("textScore"!==$key$jscomp$0$$&&1!=$group_sort$$[$key$jscomp$0$$]&&-1!=$group_sort$$[$key$jscomp$0$$])return console.error("sort is valid",
27
27
  $group_sort$$,$key$jscomp$0$$,$group_sort$$[$key$jscomp$0$$]),$callback$$({error:`Sort ${JSON.stringify($group_sort$$)} is not valid`})}else $gfields$$.textScore&&($group_sort$$={textScore:{$meta:"textScore"}});$group_sort$$&&$query$$.sort($group_sort$$);"xlsx"!==$req$$.query.type_data&&"json_export"!==$req$$.query.type_data&&"1"!=$req$$.query.rpt&&($limit$$&&($limit$$=Number($limit$$)),$limit$$||($limit$$=!1!==$ctrl$$.require_id_app&&"right"!==$ctrl$$.name&&"labelinfo"!==$ctrl$$.name?20:500),$limit$$&&
28
28
  500<$limit$$&&!$req$$.query.print&&!1!==$ctrl$$.require_id_app&&"right"!==$ctrl$$.name&&"labelinfo"!==$ctrl$$.name&&($limit$$=500),$page$$?($key$jscomp$0$$=(Number($page$$)-1)*$limit$$,0>$key$jscomp$0$$&&($key$jscomp$0$$=0),$query$$.skip($key$jscomp$0$$).limit($limit$$)):$query$$.limit($limit$$));$query$$.lean&&($query$$=$query$$.lean());$query$$.exec(($e$$,$rs$$)=>{$callback$$($e$$,$rs$$)})})};$data_log_fields_fields$$=$req$$.query;delete $data_log_fields_fields$$.access_token;$req$$.user&&!$data_log_fields_fields$$.count&&
29
- "log"!==$ctrl$$.name&&"labelinfo"!==$ctrl$$.name&&"listinfo"!==$ctrl$$.name&&"reportinfo"!==$ctrl$$.name&&"moduleinfo"!==$ctrl$$.name&&"options"!==$ctrl$$.name&&global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"QUERY",data:{condition:JSON.stringify($data_log_fields_fields$$)}},$req$$.user.email,$req$$.header("user-agent"),$req$$);let $condition_groups$$=[],$limit$$=Number($req$$.query.limit||20),$page_fetch$$=Number($req$$.query.page||0);isNaN($page_fetch$$)&&
30
- ($page_fetch$$=0);isNaN($limit$$)&&($limit$$=20);if($condition_group$$){let $field_ref$$=$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field;$data_log_fields_fields$$={[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]:1};let $limit_group$$=$req$$.fetch_by_groups.limit_group||10,$page$$=Number($req$$.query.page||0);isNaN($page$$)&&($page$$=0);let $skip$$=0;1<$page$$&&($skip$$=($page$$-1)*$limit_group$$);0>$skip$$&&($skip$$=0);(await global.getModel($req$$.fetch_by_groups.model_group).find($condition_group$$,
29
+ "log"!==$ctrl$$.name&&"labelinfo"!==$ctrl$$.name&&"listinfo"!==$ctrl$$.name&&"reportinfo"!==$ctrl$$.name&&"moduleinfo"!==$ctrl$$.name&&"options"!==$ctrl$$.name&&global.getModel("log").create({id_app:$req$$.user.current_id_app,id_func:$ctrl$$.name,action:"QUERY",data:{condition:JSON.stringify($data_log_fields_fields$$)}},$req$$.user.email,$req$$.user_agent,$req$$);let $condition_groups$$=[],$limit$$=Number($req$$.query.limit||20),$page_fetch$$=Number($req$$.query.page||0);isNaN($page_fetch$$)&&($page_fetch$$=
30
+ 0);isNaN($limit$$)&&($limit$$=20);if($condition_group$$){let $field_ref$$=$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field;$data_log_fields_fields$$={[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]:1};let $limit_group$$=$req$$.fetch_by_groups.limit_group||10,$page$$=Number($req$$.query.page||0);isNaN($page$$)&&($page$$=0);let $skip$$=0;1<$page$$&&($skip$$=($page$$-1)*$limit_group$$);0>$skip$$&&($skip$$=0);(await global.getModel($req$$.fetch_by_groups.model_group).find($condition_group$$,
31
31
  $data_log_fields_fields$$).sort({stt:1,[$req$$.fetch_by_groups.ref_field||$req$$.fetch_by_groups.field]:1}).skip($skip$$).limit($limit_group$$).lean()).forEach($g$$=>{let $c$$={...$condition$jscomp$0$$};$c$$[$req$$.fetch_by_groups.field]=$g$$[$field_ref$$];$condition_groups$$.push($c$$)});0==$condition_groups$$.length?$condition_groups$$=[$condition$jscomp$0$$]:($page_fetch$$=0,$req$$.fetch_by_groups.limit&&($limit$$=Math.max(Number($req$$.fetch_by_groups.limit),Math.round($limit$$/$condition_groups$$.length))))}else $condition_groups$$=
32
32
  [$condition$jscomp$0$$];async.map($condition_groups$$,($condition$$,$cb$$)=>{$fetchData$$($condition$$,$limit$$,$page_fetch$$,$cb$$)},($e$jscomp$0$$,$obj4views$$)=>{if($e$jscomp$0$$)return console.error("exec query find",$e$jscomp$0$$,JSON.stringify($condition$jscomp$0$$)),$callback$jscomp$0$$({error:$e$jscomp$0$$.error||$e$jscomp$0$$.message||$e$jscomp$0$$});let $obj4view$$=$obj4views$$.reduce(($a$$,$b$$)=>$a$$.concat($b$$),[]);$obj4view$$||($obj4view$$=[]);async.series({found:function($callback$$){$ctrl$$.found?
33
33
  $ctrl$$.found($req$$.user,$condition$jscomp$0$$,$obj4view$$,function($error$$,$items$$){setImmediate(()=>{$callback$$($error$$,$items$$)})}):$callback$$(null,$obj4view$$)},set_collection_name:function($callback$$){$obj4view$$.forEach($obj$$=>{$obj$$.collection_name||($obj$$.collection_name=$ctrl$$.collection_name)});$callback$$(null)}},function($error$jscomp$0$$,$rs$jscomp$1$$){setImmediate(()=>{if($error$jscomp$0$$)return $callback$jscomp$0$$({error:$error$jscomp$0$$.error||$error$jscomp$0$$.message||
@@ -1,3 +1,4 @@
1
1
  'use strict';const logSchema=new Schema({id_app:{type:String},id_func:{type:String},action:{type:String},description:{type:String},data:{},ip:{type:String},user_agent:{type:String},status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});logSchema.index({id_app:1,id_func:1,action:1});logSchema.index({"data.id":1});logSchema.index({ip:1});logSchema.index({user_created:1});
2
2
  logSchema.index({date_created:1});logSchema.index({id_func:"text",action:"text",user_created:"text",description:"text"});logSchema.index({status:1});logSchema.index({user_created:1,visible_to:1,visible_to_users:1});const Log=mongoose.models.log||mongoose.model("log",logSchema);
3
- Log.create=function($log$$,$user_created$$,$user_agent$$,$req$$){const $l$$=new Log;$l$$.id_app=$log$$.id_app;$l$$.id_func=$log$$.id_func;$l$$.action=$log$$.action;$l$$.description=$log$$.description;$l$$.data=$log$$.data;$l$$.user_agent=$user_agent$$;$l$$.user_created=$user_created$$;$req$$&&($l$$.ip=$req$$.headers["x-forwarded-for"]||$req$$.connection.remoteAddress);$l$$.save(function($error$$){$error$$&&console.log("Can't create log\n"+$error$$,$l$$)})};module.exports=Log;
3
+ Log.create=function($ip_log$$,$user_created$$,$user_agent$$,$req$$){const $l$$=new Log;$l$$.id_app=$ip_log$$.id_app;$l$$.id_func=$ip_log$$.id_func;$l$$.action=$ip_log$$.action;$l$$.description=$ip_log$$.description;$l$$.data=$ip_log$$.data;$l$$.user_agent=$user_agent$$;$l$$.user_created=$user_created$$;$req$$&&($req$$.headers||$req$$.connection)&&(($ip_log$$=$req$$.ip)||($req$$.headers?$req$$.headers["x-forwarded-for"]:""),$ip_log$$||($ip_log$$=$req$$.connection?$req$$.connection.remoteAddress:""),
4
+ $l$$.ip=$ip_log$$);$l$$.save(function($error$$){$error$$&&console.log("Can't create log\n"+$error$$,$l$$)})};module.exports=Log;