flexbiz-server 12.2.2 → 12.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/package.json +2 -2
  2. package/server/app.js +14 -14
  3. package/server/auths/local.js +27 -26
  4. package/server/cluster.js +12 -11
  5. package/server/controllers/controller.js +83 -79
  6. package/server/controllers/controllerRPT.js +18 -17
  7. package/server/data/sys/listinfo.js +80395 -78085
  8. package/server/data/sys/reportinfo.js +8826 -8826
  9. package/server/data/sys/trangthai.js +10348 -10229
  10. package/server/libs/cdpstk.js +1 -1
  11. package/server/libs/databanle.js +13 -13
  12. package/server/libs/getGiaban.js +17 -16
  13. package/server/libs/permission.js +12 -12
  14. package/server/libs/post-book.js +9 -8
  15. package/server/libs/post-socai.js +9 -9
  16. package/server/libs/prototypes.js +7 -7
  17. package/server/libs/tinhGtPhanboSltp.js +5 -5
  18. package/server/libs/tinhGtPhanboYtcp.js +2 -2
  19. package/server/libs/tinhGtThcppstk.js +1 -1
  20. package/server/libs/tinhGtTrucTiep.js +8 -7
  21. package/server/libs/tinhgiatb.js +16 -19
  22. package/server/libs/tinhgiatb1vt.js +3 -3
  23. package/server/libs/tinhhoahong.js +32 -0
  24. package/server/libs/utils.js +4 -3
  25. package/server/models/app.js +9 -8
  26. package/server/models/approve.js +4 -4
  27. package/server/models/customer.js +8 -4
  28. package/server/models/dh2.js +10 -7
  29. package/server/models/dmbp.js +7 -4
  30. package/server/models/dmgiaban.js +6 -6
  31. package/server/models/dmhoahonghd.js +6 -5
  32. package/server/models/dmnvt.js +3 -3
  33. package/server/models/dmvt.js +9 -9
  34. package/server/models/ecomcategories.js +2 -2
  35. package/server/models/ecomcategories_cty.js +3 -0
  36. package/server/models/fbconversation.js +9 -0
  37. package/server/models/fbmessage.js +2 -0
  38. package/server/models/fbpage.js +2 -0
  39. package/server/models/group.js +7 -5
  40. package/server/models/hd2.js +11 -8
  41. package/server/models/hd3.js +9 -9
  42. package/server/models/hd7.js +1 -1
  43. package/server/models/listinfo.js +15 -8
  44. package/server/models/notification.js +3 -2
  45. package/server/models/originimportid.js +1 -0
  46. package/server/models/participant.js +5 -5
  47. package/server/models/pbl.js +4 -4
  48. package/server/models/reportinfo.js +2 -2
  49. package/server/models/rptform.js +3 -2
  50. package/server/models/schedule.js +1 -1
  51. package/server/models/so1.js +17 -14
  52. package/server/models/socai.js +7 -5
  53. package/server/models/task.js +4 -4
  54. package/server/models/tdttco.js +8 -4
  55. package/server/models/tdttno.js +8 -4
  56. package/server/models/tokens.js +2 -2
  57. package/server/models/tontucthoi.js +2 -2
  58. package/server/models/usergroup.js +4 -3
  59. package/server/models/vatra.js +2 -2
  60. package/server/models/vatvao.js +4 -4
  61. package/server/modules/lists/ls-assinvestment.js +1 -1
  62. package/server/modules/lists/ls-asskey.js +34 -34
  63. package/server/modules/lists/ls-customer.js +13 -7
  64. package/server/modules/lists/ls-dmbp.js +7 -3
  65. package/server/modules/lists/ls-dmnkh.js +5 -1
  66. package/server/modules/lists/ls-dmnvt.js +5 -5
  67. package/server/modules/lists/ls-dmvt.js +48 -35
  68. package/server/modules/lists/ls-ecomcategories.js +5 -0
  69. package/server/modules/lists/ls-ecomcategories_cty.js +5 -0
  70. package/server/modules/lists/ls-fbconversation.js +3 -0
  71. package/server/modules/lists/ls-fbmessage.js +3 -0
  72. package/server/modules/lists/ls-fbpage.js +10 -0
  73. package/server/modules/lists/ls-file.js +21 -25
  74. package/server/modules/lists/ls-group.js +5 -1
  75. package/server/modules/lists/ls-introducecode.js +8 -7
  76. package/server/modules/lists/ls-introducer.js +16 -17
  77. package/server/modules/lists/ls-message2.js +8 -7
  78. package/server/modules/lists/ls-message2setting.js +4 -4
  79. package/server/modules/lists/ls-news.js +1 -1
  80. package/server/modules/lists/ls-opportunity.js +3 -3
  81. package/server/modules/lists/ls-session.js +2 -2
  82. package/server/modules/lists/ls-task.js +18 -18
  83. package/server/modules/lists/ls-usergroup.js +6 -2
  84. package/server/modules/public/callin.js +6 -6
  85. package/server/modules/reports/calc-tinhgiatb.js +2 -2
  86. package/server/modules/reports/rp-cdpstk.js +3 -3
  87. package/server/modules/reports/rp-chitiettaisan.js +9 -8
  88. package/server/modules/reports/rp-ckvt.js +9 -7
  89. package/server/modules/reports/rp-congviectheonv.js +5 -5
  90. package/server/modules/reports/rp-ctbanle.js +13 -12
  91. package/server/modules/reports/rp-databanle.js +8 -4
  92. package/server/modules/reports/rp-dtbanletheoct.js +16 -9
  93. package/server/modules/reports/rp-dtbanletheokh.js +12 -6
  94. package/server/modules/reports/rp-dtbanletheokho.js +14 -9
  95. package/server/modules/reports/rp-dtbanletheonam.js +15 -9
  96. package/server/modules/reports/rp-dtbanletheongay.js +13 -8
  97. package/server/modules/reports/rp-dtbanletheonv.js +15 -9
  98. package/server/modules/reports/rp-dtbanletheoquy.js +15 -9
  99. package/server/modules/reports/rp-dtbanletheothang.js +15 -9
  100. package/server/modules/reports/rp-getinvoice2pay.js +4 -6
  101. package/server/modules/reports/rp-getinvoice2receive.js +4 -6
  102. package/server/modules/reports/rp-hoahong.js +9 -0
  103. package/server/modules/reports/rp-kqhdkd.js +5 -4
  104. package/server/modules/reports/rp-ptcttct.js +7 -6
  105. package/server/modules/reports/rp-pttct.js +8 -8
  106. package/server/modules/reports/rp-pttctkho.js +3 -2
  107. package/server/modules/reports/rp-pttctkho2.js +3 -3
  108. package/server/modules/reports/rp-thnxt.js +8 -7
  109. package/server/modules/reports/rp-thnxt_sl.js +6 -6
  110. package/server/modules/reports/rp-thnxttt.js +6 -6
  111. package/server/modules/reports/rp-tmbctc.js +16 -16
  112. package/server/modules/systems/sys-app.js +25 -24
  113. package/server/modules/systems/sys-notification.js +2 -2
  114. package/server/modules/systems/sys-schedule.js +1 -1
  115. package/server/modules/systems/sys-user.js +8 -8
  116. package/server/modules/vouchers/vo-bc1.js +9 -8
  117. package/server/modules/vouchers/vo-bg2.js +9 -9
  118. package/server/modules/vouchers/vo-bn1.js +5 -4
  119. package/server/modules/vouchers/vo-dh2.js +14 -19
  120. package/server/modules/vouchers/vo-dnm.js +11 -12
  121. package/server/modules/vouchers/vo-hd2.js +66 -54
  122. package/server/modules/vouchers/vo-hd3.js +28 -22
  123. package/server/modules/vouchers/vo-hd7.js +37 -36
  124. package/server/modules/vouchers/vo-pbl.js +49 -49
  125. package/server/modules/vouchers/vo-pc1.js +9 -8
  126. package/server/modules/vouchers/vo-pn1.js +24 -22
  127. package/server/modules/vouchers/vo-pn5.js +1 -1
  128. package/server/modules/vouchers/vo-pn9.js +23 -23
  129. package/server/modules/vouchers/vo-pnc.js +8 -8
  130. package/server/modules/vouchers/vo-pnh.js +5 -5
  131. package/server/modules/vouchers/vo-pt1.js +17 -16
  132. package/server/modules/vouchers/vo-pxc.js +16 -16
  133. package/server/modules/vouchers/vo-pxh.js +12 -10
  134. package/server/modules/vouchers/vo-so1.js +90 -116
  135. package/server/modules/vouchers/vo-so4.js +1 -1
  136. package/server/modules/vouchers/vo-so5.js +2 -2
  137. package/server/templates/reset mat khau.html +1 -1
  138. package/server/templates/reset mat khau.pug +1 -3
  139. package/server/workers/restoreApp.js +21 -12
  140. package/server/workers/runScript.js +3 -3
@@ -1,29 +1,25 @@
1
1
  'use strict';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"),deleteFolderRecursive=function($_pathDir$$){fs.existsSync($_pathDir$$)&&(fs.readdirSync($_pathDir$$).forEach($curPath_file$$=>{$curPath_file$$=path.join($_pathDir$$,$curPath_file$$);fs.lstatSync($curPath_file$$).isDirectory()?deleteFolderRecursive($curPath_file$$):fs.unlinkSync($curPath_file$$)}),fs.rmdirSync($_pathDir$$))},convertVideo=async($fileInput$$,$fileOutput$$)=>new Promise(($resolve$$,
3
- $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",function($err$$){$reject$$($err$$.message)}).on("end",()=>{$resolve$$($fileOutput$$)}).run()}),setWaterMark4Image=async($app_info$$,$file_name$$,$extension_root$$,$recache$$)=>{let $file_name_watermark$$=`${$file_name$$}.watermark.${$extension_root$$}.webp`;if(!$app_info$$.logo_watermark)return $file_name$$;
4
- if(!$recache$$&&fs.existsSync($file_name_watermark$$))return $file_name_watermark$$;$extension_root$$=configs.paths.images;$extension_root$$||($extension_root$$=__dirname,$extension_root$$=path.dirname($extension_root$$),$extension_root$$=path.dirname($extension_root$$),$extension_root$$=path.join($extension_root$$,"images"));let $file_logo$$=path.join($extension_root$$,$app_info$$.logo_watermark.split("getfile/")[1]);return fs.existsSync($file_logo$$)?new Promise($resolve$$=>{sharp($file_name$$,
5
- {failOnError:!1}).metadata().then($value$$=>{const $watermark_size$$=10*$value$$.width/100;watermark.embed({type:"image",source:$file_name$$,logo:$file_logo$$,destination:$file_name_watermark$$,position:{logoX:$value$$.width-$watermark_size$$-10,logoY:10,logoHeight:$watermark_size$$,logoWidth:$watermark_size$$}},function($status$$){1===$status$$.status?$resolve$$($file_name_watermark$$):(console.log("status set watermark",$status$$),$resolve$$($file_name$$))})}).catch($error$$=>{console.log($error$$);
6
- return $resolve$$($file_name$$)})}):(console.log("file logo watermark is not exists",$file_logo$$),$file_name$$)},configResizeImage=async($_size_file_name_resize$$,$file_name$$,$extension$$,$recache$$)=>{let $size$$,$cache$$;if($_size_file_name_resize$$)switch($_size_file_name_resize$$.toString().toUpperCase()){case "64":case "X":$size$$=64;$cache$$=!0;break;case "256":$size$$=256;$cache$$=!0;break;case "S":case "320":$size$$=320;$cache$$=!0;break;case "512":case "M":$size$$=512;$cache$$=!0;break;
7
- case "1024":case "L":$size$$=1024;$cache$$=!0;break;case "1080":case "XL":case "FULLHD":$size$$=1080;$cache$$=!0;break;case "1440":case "2K":$size$$=1440;$cache$$=!0;break;default:try{$size$$=Number($_size_file_name_resize$$);if(isNaN($size$$)||!$size$$)$size$$=1080;$cache$$=!0}catch($e$$){console.log("size param must be X or S or M or L or 2K or FULLHD or a number")}}return $size$$?($_size_file_name_resize$$=`${$file_name$$}.${$size$$}.${$extension$$}.webp`,!$recache$$&&fs.existsSync($_size_file_name_resize$$)?
8
- {file_name_resize:$_size_file_name_resize$$,exist:!0}:{cache:$cache$$,size:$size$$,file_name_resize:$_size_file_name_resize$$}):{file_name_resize:$file_name$$}};
2
+ const sharp=require("sharp"),watermark=require("dynamic-watermark"),permission=require("../../libs/permission"),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",function($err$$){$reject$$($err$$.message)}).on("end",()=>{$resolve$$($fileOutput$$)}).run()}),setWaterMark4Image=async($app_info$$,
3
+ $file_name$$,$extension_root$$,$recache$$)=>{let $file_name_watermark$$=`${$file_name$$}.watermark.${$extension_root$$}.webp`;if(!$app_info$$.logo_watermark)return $file_name$$;if(!$recache$$&&fs.existsSync($file_name_watermark$$))return $file_name_watermark$$;$extension_root$$=configs.paths.images;$extension_root$$||($extension_root$$=__dirname,$extension_root$$=path.dirname($extension_root$$),$extension_root$$=path.dirname($extension_root$$),$extension_root$$=path.join($extension_root$$,"images"));
4
+ let $file_logo$$=path.join($extension_root$$,$app_info$$.logo_watermark.split("getfile/")[1]);return fs.existsSync($file_logo$$)?new Promise($resolve$$=>{sharp($file_name$$,{failOnError:!1}).metadata().then($value$$=>{const $watermark_size$$=10*$value$$.width/100;watermark.embed({type:"image",source:$file_name$$,logo:$file_logo$$,destination:$file_name_watermark$$,position:{logoX:$value$$.width-$watermark_size$$-10,logoY:10,logoHeight:$watermark_size$$,logoWidth:$watermark_size$$}},function($status$$){1===
5
+ $status$$.status?$resolve$$($file_name_watermark$$):(console.log("status set watermark",$status$$),$resolve$$($file_name$$))})}).catch($error$$=>{console.log($error$$);return $resolve$$($file_name$$)})}):(console.log("file logo watermark is not exists",$file_logo$$),$file_name$$)},configResizeImage=async($_size_file_name_resize$$,$file_name$$,$extension$$,$recache$$)=>{let $size$$,$cache$$;if($_size_file_name_resize$$)switch($_size_file_name_resize$$.toString().toUpperCase()){case "64":case "X":$size$$=
6
+ 64;$cache$$=!0;break;case "256":$size$$=256;$cache$$=!0;break;case "S":case "320":$size$$=320;$cache$$=!0;break;case "512":case "M":$size$$=512;$cache$$=!0;break;case "1024":case "L":$size$$=1024;$cache$$=!0;break;case "1080":case "XL":case "FULLHD":$size$$=1080;$cache$$=!0;break;case "1440":case "2K":$size$$=1440;$cache$$=!0;break;default:try{$size$$=Number($_size_file_name_resize$$);if(isNaN($size$$)||!$size$$)$size$$=1080;$cache$$=!0}catch($e$$){console.log("size param must be X or S or M or L or 2K or FULLHD or a number")}}return $size$$?
7
+ ($_size_file_name_resize$$=`${$file_name$$}.${$size$$}.${$extension$$}.webp`,!$recache$$&&fs.existsSync($_size_file_name_resize$$)?{file_name_resize:$_size_file_name_resize$$,exist:!0}:{cache:$cache$$,size:$size$$,file_name_resize:$_size_file_name_resize$$}):{file_name_resize:$file_name$$}};
9
8
  module.exports=function($router$$){const $contr$$=new controller($router$$,model,"file",{sort:{ten_file:1},onView:($user$$,$items$$,$next$$)=>{$items$$.forEach($item$$=>{$item$$.file&&(delete $item$$.file.encoding,delete $item$$.file.mimetype,delete $item$$.file.path,$item$$.id_app&&configs.api_url&&($item$$.download_link=`${configs.api_url||""}/api/${$item$$.id_app}/file/download/${$item$$._id.toString()}`))});$next$$(null,$items$$)}});$contr$$.creating=async function($file_name$jscomp$2_input_user$$,
10
9
  $obj$$,$fn$$){if($obj$$.file&&$obj$$.read_image&&$obj$$.file.name&&$obj$$.file.extension&&!$obj$$.file.url){$file_name$jscomp$2_input_user$$=$obj$$.file.name;var $extension$jscomp$2_root$$=$obj$$.file.extension.toLowerCase();if(0<=["png","jpg"].indexOf($extension$jscomp$2_root$$)&&($extension$jscomp$2_root$$=configs.paths.uploads,$extension$jscomp$2_root$$||($extension$jscomp$2_root$$=__dirname,$extension$jscomp$2_root$$=path.dirname($extension$jscomp$2_root$$),$extension$jscomp$2_root$$=path.dirname($extension$jscomp$2_root$$),
11
10
  $extension$jscomp$2_root$$=path.join($extension$jscomp$2_root$$,"uploads")),$file_name$jscomp$2_input_user$$=path.join($extension$jscomp$2_root$$,$file_name$jscomp$2_input_user$$),fs.existsSync($file_name$jscomp$2_input_user$$))){$extension$jscomp$2_root$$=require("node-tesseract-ocr");const $config$$={lang:"vie+eng"};try{var $folder_text$$=await $extension$jscomp$2_root$$.recognize($file_name$jscomp$2_input_user$$,$config$$);$obj$$.text_from_image=$folder_text$$}catch($error$$){return console.error($error$$),
12
- $fn$$($error$$.message)}}}$obj$$.id_folder&&($folder_text$$=await global.getModel("folder").findOne({_id:$obj$$.id_folder}))&&($obj$$.update_right=$folder_text$$.update_right,$obj$$.delete_right=$folder_text$$.delete_right,$obj$$.visible_to=$folder_text$$.visible_to,$obj$$.visible_to_users=$folder_text$$.visible_to_users,$obj$$.visible_to_usergroups=$folder_text$$.visible_to_usergroups);$fn$$(null,$obj$$)};$contr$$.created=function($file_name$jscomp$3_user$$,$obj$$,$fn$$){if($obj$$.file&&$obj$$.file.name&&
13
- $obj$$.file.extension){$file_name$jscomp$3_user$$=$obj$$.file.name;var $extension$jscomp$3_input$jscomp$1_root$$=$obj$$.file.extension.toLowerCase();if(0<=["mp4","mov","avi"].indexOf($extension$jscomp$3_input$jscomp$1_root$$)){$extension$jscomp$3_input$jscomp$1_root$$=configs.paths.uploads;$extension$jscomp$3_input$jscomp$1_root$$||($extension$jscomp$3_input$jscomp$1_root$$=__dirname,$extension$jscomp$3_input$jscomp$1_root$$=path.dirname($extension$jscomp$3_input$jscomp$1_root$$),$extension$jscomp$3_input$jscomp$1_root$$=
14
- path.dirname($extension$jscomp$3_input$jscomp$1_root$$),$extension$jscomp$3_input$jscomp$1_root$$=path.join($extension$jscomp$3_input$jscomp$1_root$$,"uploads"));$extension$jscomp$3_input$jscomp$1_root$$=path.join($extension$jscomp$3_input$jscomp$1_root$$,$file_name$jscomp$3_user$$);let $output$$=configs.paths.videos;$output$$||($output$$=__dirname,$output$$=path.dirname($output$$),$output$$=path.dirname($output$$),$output$$=path.join($output$$,"videos"));fs.existsSync($output$$)||fs.mkdirSync($output$$);
15
- $output$$=path.join($output$$,$obj$$._id.toString());fs.existsSync($output$$)||fs.mkdirSync($output$$);$output$$=path.join($output$$,$file_name$jscomp$3_user$$);convertVideo($extension$jscomp$3_input$jscomp$1_root$$,$output$$).catch($e$$=>{console.error("Can't convert video. Error:",$e$$)})}}else console.log("file not exists",$obj$$);$fn$$(null,$obj$$)};$contr$$.deleted=function($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$,$rs$$,$next$$){if($rs$$.file&&$rs$$.file.extension&&$rs$$.file.name){$extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$=
16
- $rs$$.file.name;let $root$$=configs.paths.uploads;$root$$||($root$$=__dirname,$root$$=path.dirname($root$$),$root$$=path.dirname($root$$),$root$$=path.join($root$$,"uploads"));$extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$=path.join($root$$,$extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$);fs.existsSync($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$)&&fs.unlink($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$,function($e$$){$e$$&&console.error($e$$)});
17
- $extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$=$rs$$.file.extension.toLowerCase();0<=["mp4","mov","avi"].indexOf($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$)&&($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$=configs.paths.videos,$extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$||($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$=__dirname,$extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$=path.dirname($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$),
18
- $extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$=path.dirname($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$),$extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$=path.join($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$,"videos")),$extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$=path.join($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$,$rs$$._id.toString()),fs.existsSync($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$)&&
19
- deleteFolderRecursive($extension$jscomp$4_file_name$jscomp$4_output$jscomp$1_user$$))}else console.log("file not exists",$rs$$);$next$$(null,$rs$$)};$contr$$.route(function($router$$){$router$$.route("/:id_app/file/download/:id").get(function($req$$,$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";app.findOne({_id:$req$$.user.current_id_app}).lean().exec(function($e$jscomp$0$$,
20
- $app_info$$){if($e$jscomp$0$$||!$app_info$$)return $res$$.status(400).send("Kh\u00f4ng th\u1ec3 t\u1ea3i file n\u00e0y");model.findOne({_id:$id$$}).lean().exec(async($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$rs$$&&$rs$$.file?permission.hasRight($rs$$.id_app,$req$$.user.email,$contr$$.module,"view",async function($error$jscomp$3_extension$$,$_new_file_file_name$jscomp$5_permission$$){if(!$_new_file_file_name$jscomp$5_permission$$)return $res$$.status(403).send({error:$error$jscomp$3_extension$$||
21
- "B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp file n\u00e0y"});if($rs$$.file.url)return $res$$.redirect($rs$$.file.url);$_new_file_file_name$jscomp$5_permission$$=$rs$$.file.name;$error$jscomp$3_extension$$=$rs$$.file.extension;let $root$$=configs.paths.uploads;$root$$||($root$$=__dirname,$root$$=path.dirname($root$$),$root$$=path.dirname($root$$),$root$$=path.join($root$$,"uploads"));$_new_file_file_name$jscomp$5_permission$$=path.join($root$$,$_new_file_file_name$jscomp$5_permission$$);
22
- if(fs.existsSync($_new_file_file_name$jscomp$5_permission$$))if(0<=["png","jpg","jpeg","webp"].indexOf($error$jscomp$3_extension$$)){$_new_file_file_name$jscomp$5_permission$$=await setWaterMark4Image($app_info$$,$_new_file_file_name$jscomp$5_permission$$,$error$jscomp$3_extension$$,$req$$.query.recache);let $_resize_conf$$=await configResizeImage($size$$,$_new_file_file_name$jscomp$5_permission$$,$error$jscomp$3_extension$$,$req$$.query.recache);if($_resize_conf$$.exist)return sharp($_resize_conf$$.file_name_resize,
23
- {failOnError:!1}).pipe($res$$);let $_gm$$=sharp($_new_file_file_name$jscomp$5_permission$$,{failOnError:!1});($error$jscomp$3_extension$$=await $_gm$$.metadata())&&$_resize_conf$$.size&&$_resize_conf$$.size<$error$jscomp$3_extension$$.width&&$_resize_conf$$.size<$error$jscomp$3_extension$$.height&&($_gm$$=$_gm$$.resize({width:$_resize_conf$$.size}));$error$jscomp$3_extension$$&&"webp"!=$error$jscomp$3_extension$$.format&&(console.log("convert ",$error$jscomp$3_extension$$.format,"to","webp","..."),
24
- $_gm$$=$_gm$$.webp({lossless:!1,quality:50,nearLossless:!0}));$_resize_conf$$.cache&&setImmediate(()=>{$_gm$$.toFile($_resize_conf$$.file_name_resize,$error$$=>{if($error$$)return console.error("save resize image:",$error$$.message);console.log("cache file",$_resize_conf$$.file_name_resize)})});$_gm$$.pipe($res$$)}else $res$$.download($_new_file_file_name$jscomp$5_permission$$,$rs$$.file.originalname);else $res$$.status(400).send({error:"File n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i"})},{data:$rs$$,
25
- obj:$rs$$,notNeedRight:!$rs$$.id_link&&!$rs$$.id_folder||$rs$$.shared}):$res$$.status(400).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y file n\u00e0y"})})})});$router$$.route("/:id_app/file/stream/:id/:file").get(function($req$$,$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"});app.findOne({_id:$req$$.user.current_id_app}).lean().exec(function($e$jscomp$0$$,$app_info$$){if($e$jscomp$0$$||
26
- !$app_info$$)return $res$$.status(400).send("Kh\u00f4ng th\u1ec3 stream file n\u00e0y");model.findOne({_id:$id$$}).lean().exec(async($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$rs$$&&$rs$$.file?permission.hasRight($rs$$.id_app,$req$$.user.email,$contr$$.module,"view",async function($error$jscomp$5_file_name$jscomp$6_output$$,$file$jscomp$1_permission$jscomp$2_root$$){if(!$file$jscomp$1_permission$jscomp$2_root$$)return $res$$.status(403).send({error:$error$jscomp$5_file_name$jscomp$6_output$$||
27
- "B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp file n\u00e0y"});if($rs$$.file.url)return $res$$.redirect($rs$$.file.url);$error$jscomp$5_file_name$jscomp$6_output$$=$rs$$.file.name;$file$jscomp$1_permission$jscomp$2_root$$=$req$$.params.file;".ts"==$file$jscomp$1_permission$jscomp$2_root$$.substr(-3)&&($error$jscomp$5_file_name$jscomp$6_output$$=$file$jscomp$1_permission$jscomp$2_root$$);$file$jscomp$1_permission$jscomp$2_root$$=configs.paths.videos;$file$jscomp$1_permission$jscomp$2_root$$||
28
- ($file$jscomp$1_permission$jscomp$2_root$$=__dirname,$file$jscomp$1_permission$jscomp$2_root$$=path.dirname($file$jscomp$1_permission$jscomp$2_root$$),$file$jscomp$1_permission$jscomp$2_root$$=path.dirname($file$jscomp$1_permission$jscomp$2_root$$),$file$jscomp$1_permission$jscomp$2_root$$=path.join($file$jscomp$1_permission$jscomp$2_root$$,"videos"));$error$jscomp$5_file_name$jscomp$6_output$$=path.join($file$jscomp$1_permission$jscomp$2_root$$,$rs$$._id.toString(),$error$jscomp$5_file_name$jscomp$6_output$$);
29
- if(fs.existsSync($error$jscomp$5_file_name$jscomp$6_output$$)){const $readStream$$=fs.createReadStream($error$jscomp$5_file_name$jscomp$6_output$$);$readStream$$.on("open",function(){$readStream$$.pipe($res$$)});$readStream$$.on("error",function($err$$){$res$$.end($err$$)})}else $res$$.status(400).send("File n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i")},{data:$rs$$,obj:$rs$$,notNeedRight:!$rs$$.id_link&&!$rs$$.id_folder||$rs$$.shared}):$res$$.status(400).send("Kh\u00f4ng t\u00ecm th\u1ea5y file n\u00e0y")})})})})};
11
+ $fn$$($error$$.message)}}}$obj$$.id_folder&&global.mongoose.Types.ObjectId.isValid($obj$$.id_folder)&&($folder_text$$=await global.getModel("folder").findOne({_id:$obj$$.id_folder}))&&($obj$$.update_right=$folder_text$$.update_right,$obj$$.delete_right=$folder_text$$.delete_right,$obj$$.visible_to=$folder_text$$.visible_to,$obj$$.visible_to_users=$folder_text$$.visible_to_users,$obj$$.visible_to_usergroups=$folder_text$$.visible_to_usergroups);$fn$$(null,$obj$$)};$contr$$.created=function($file_name$jscomp$3_user$$,
12
+ $obj$$,$fn$$){if($obj$$.file&&$obj$$.file.name&&$obj$$.file.extension){$file_name$jscomp$3_user$$=$obj$$.file.name;var $extension$jscomp$3_input$jscomp$1_root$$=$obj$$.file.extension.toLowerCase();if(0<=["mp4","mov","avi"].indexOf($extension$jscomp$3_input$jscomp$1_root$$)){$extension$jscomp$3_input$jscomp$1_root$$=configs.paths.uploads;$extension$jscomp$3_input$jscomp$1_root$$||($extension$jscomp$3_input$jscomp$1_root$$=__dirname,$extension$jscomp$3_input$jscomp$1_root$$=path.dirname($extension$jscomp$3_input$jscomp$1_root$$),
13
+ $extension$jscomp$3_input$jscomp$1_root$$=path.dirname($extension$jscomp$3_input$jscomp$1_root$$),$extension$jscomp$3_input$jscomp$1_root$$=path.join($extension$jscomp$3_input$jscomp$1_root$$,"uploads"));$extension$jscomp$3_input$jscomp$1_root$$=path.join($extension$jscomp$3_input$jscomp$1_root$$,$file_name$jscomp$3_user$$);let $output$$=configs.paths.videos;$output$$||($output$$=__dirname,$output$$=path.dirname($output$$),$output$$=path.dirname($output$$),$output$$=path.join($output$$,"videos"));
14
+ fs.existsSync($output$$)||fs.mkdirSync($output$$);$output$$=path.join($output$$,$obj$$._id.toString());fs.existsSync($output$$)||fs.mkdirSync($output$$);$output$$=path.join($output$$,$file_name$jscomp$3_user$$);convertVideo($extension$jscomp$3_input$jscomp$1_root$$,$output$$).catch($e$$=>{console.error("Can't convert video. Error:",$e$$)})}}else console.log("file not exists",$obj$$);$fn$$(null,$obj$$)};$contr$$.route(function($router$$){$router$$.route("/:id_app/file/download/:id").get(function($req$$,
15
+ $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";app.findOne({_id:$req$$.user.current_id_app}).lean().exec(function($e$jscomp$0$$,$app_info$$){if($e$jscomp$0$$||!$app_info$$)return $res$$.status(400).send("Kh\u00f4ng th\u1ec3 t\u1ea3i file n\u00e0y");model.findOne({_id:$id$$}).lean().exec(async($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);
16
+ $rs$$&&$rs$$.file?permission.hasRight($rs$$.id_app,$req$$.user.email,$contr$$.module,"view",async function($error$jscomp$3_extension$$,$_new_file_file_name$jscomp$4_permission$$){if(!$_new_file_file_name$jscomp$4_permission$$)return $res$$.status(403).send({error:$error$jscomp$3_extension$$||"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp file n\u00e0y"});if($rs$$.file.url)return $res$$.redirect($rs$$.file.url);$_new_file_file_name$jscomp$4_permission$$=$rs$$.file.name;$error$jscomp$3_extension$$=
17
+ $rs$$.file.extension;let $root$$=configs.paths.uploads;$root$$||($root$$=__dirname,$root$$=path.dirname($root$$),$root$$=path.dirname($root$$),$root$$=path.join($root$$,"uploads"));$_new_file_file_name$jscomp$4_permission$$=path.join($root$$,$_new_file_file_name$jscomp$4_permission$$);if(fs.existsSync($_new_file_file_name$jscomp$4_permission$$))if(0<=["png","jpg","jpeg","webp"].indexOf($error$jscomp$3_extension$$)){$_new_file_file_name$jscomp$4_permission$$=await setWaterMark4Image($app_info$$,$_new_file_file_name$jscomp$4_permission$$,
18
+ $error$jscomp$3_extension$$,$req$$.query.recache);let $_resize_conf$$=await configResizeImage($size$$,$_new_file_file_name$jscomp$4_permission$$,$error$jscomp$3_extension$$,$req$$.query.recache);if($_resize_conf$$.exist)return sharp($_resize_conf$$.file_name_resize,{failOnError:!1}).pipe($res$$);let $_gm$$=sharp($_new_file_file_name$jscomp$4_permission$$,{failOnError:!1});($error$jscomp$3_extension$$=await $_gm$$.metadata())&&$_resize_conf$$.size&&$_resize_conf$$.size<$error$jscomp$3_extension$$.width&&
19
+ $_resize_conf$$.size<$error$jscomp$3_extension$$.height&&($_gm$$=$_gm$$.resize({width:$_resize_conf$$.size}));$error$jscomp$3_extension$$&&"webp"!=$error$jscomp$3_extension$$.format&&(console.log("convert ",$error$jscomp$3_extension$$.format,"to","webp","..."),$_gm$$=$_gm$$.webp({lossless:!1,quality:50,nearLossless:!0}));$_resize_conf$$.cache&&setImmediate(()=>{$_gm$$.toFile($_resize_conf$$.file_name_resize,$error$$=>{if($error$$)return console.error("save resize image:",$error$$.message);console.log("cache file",
20
+ $_resize_conf$$.file_name_resize)})});$_gm$$.pipe($res$$)}else $res$$.download($_new_file_file_name$jscomp$4_permission$$,$rs$$.file.originalname);else $res$$.status(400).send({error:"File n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i"})},{data:$rs$$,obj:$rs$$,notNeedRight:!$rs$$.id_link&&!$rs$$.id_folder||$rs$$.shared}):$res$$.status(400).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y file n\u00e0y"})})})});$router$$.route("/:id_app/file/stream/:id/:file").get(function($req$$,$res$$){let $id$$=$req$$.params.id.split("-")[0];
21
+ if(!global.mongoose.Types.ObjectId.isValid($id$$))return $res$$.status(400).send({error:"File ID kh\u00f4ng h\u1ee3p l\u1ec7"});app.findOne({_id:$req$$.user.current_id_app}).lean().exec(function($e$jscomp$0$$,$app_info$$){if($e$jscomp$0$$||!$app_info$$)return $res$$.status(400).send("Kh\u00f4ng th\u1ec3 stream file n\u00e0y");model.findOne({_id:$id$$}).lean().exec(async($e$$,$rs$$)=>{if($e$$)return $res$$.status(400).send($e$$);$rs$$&&$rs$$.file?permission.hasRight($rs$$.id_app,$req$$.user.email,
22
+ $contr$$.module,"view",async function($error$jscomp$5_file_name$jscomp$5_output$$,$file_permission$jscomp$2_root$$){if(!$file_permission$jscomp$2_root$$)return $res$$.status(403).send({error:$error$jscomp$5_file_name$jscomp$5_output$$||"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp file n\u00e0y"});if($rs$$.file.url)return $res$$.redirect($rs$$.file.url);$error$jscomp$5_file_name$jscomp$5_output$$=$rs$$.file.name;$file_permission$jscomp$2_root$$=$req$$.params.file;".ts"==$file_permission$jscomp$2_root$$.substr(-3)&&
23
+ ($error$jscomp$5_file_name$jscomp$5_output$$=$file_permission$jscomp$2_root$$);$file_permission$jscomp$2_root$$=configs.paths.videos;$file_permission$jscomp$2_root$$||($file_permission$jscomp$2_root$$=__dirname,$file_permission$jscomp$2_root$$=path.dirname($file_permission$jscomp$2_root$$),$file_permission$jscomp$2_root$$=path.dirname($file_permission$jscomp$2_root$$),$file_permission$jscomp$2_root$$=path.join($file_permission$jscomp$2_root$$,"videos"));$error$jscomp$5_file_name$jscomp$5_output$$=
24
+ path.join($file_permission$jscomp$2_root$$,$rs$$._id.toString(),$error$jscomp$5_file_name$jscomp$5_output$$);if(fs.existsSync($error$jscomp$5_file_name$jscomp$5_output$$)){const $readStream$$=fs.createReadStream($error$jscomp$5_file_name$jscomp$5_output$$);$readStream$$.on("open",function(){$readStream$$.pipe($res$$)});$readStream$$.on("error",function($err$$){$res$$.end($err$$)})}else $res$$.status(400).send("File n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i")},{data:$rs$$,obj:$rs$$,notNeedRight:!$rs$$.id_link&&
25
+ !$rs$$.id_folder||$rs$$.shared}):$res$$.status(400).send("Kh\u00f4ng t\u00ecm th\u1ea5y file n\u00e0y")})})})})};
@@ -1 +1,5 @@
1
- 'use strict';const model=global.getModel("group"),controller=require("../../controllers/controller"),group=function($router$$){(new controller($router$$,model,"group",{sort:{group_name:1},findExact:{group_type:1}})).route()};module.exports=group;
1
+ 'use strict';const model=global.getModel("group"),controller=require("../../controllers/controller"),getSysorder=function($item$$,$callback$$){let $sysorder$$=$item$$._id.toString();$item$$.group_mother?model.findOne({_id:$item$$.group_mother}).lean().exec(function($e$$,$item_me$$){$item_me$$?getSysorder($item_me$$,function($rs$$){$sysorder$$=$rs$$+"---"+$sysorder$$;$callback$$($sysorder$$)}):$callback$$($sysorder$$)}):$callback$$($sysorder$$)},group=function($contr_router$$){$contr_router$$=new controller($contr_router$$,
2
+ model,"group",{sort:{sysorder:1},findExact:{group_type:1}});$contr_router$$.route();$contr_router$$.deleting=function($user$$,$obj$$,$next$$){if(0===$obj$$.loai_nh)return $next$$(Error("Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p x\u00f3a nh\u00f3m m\u1eb9"));$next$$(null,$obj$$)};$contr_router$$.created=function($user$$,$obj$$,$next$$){getSysorder($obj$$,function($rs$$){$obj$$.sysorder=$rs$$;$obj$$.bac=$rs$$.split("---").length;model.findOneAndUpdate({_id:$obj$$._id},{$set:{bac:$obj$$.bac,sysorder:$obj$$.sysorder,
3
+ loai_nh:1}},function($e$$){$e$$&&console.log($e$$)});$next$$(null,$obj$$)})};$contr_router$$.updated=function($user$$,$obj$$,$next$$){getSysorder($obj$$,async function($loai_nh_rs$$){$obj$$.sysorder=$loai_nh_rs$$;$obj$$.bac=$loai_nh_rs$$.split("---").length;$loai_nh_rs$$=1;await model.findOne({group_mother:$obj$$._id.toString()})&&($loai_nh_rs$$=0);$obj$$.loai_nh=$loai_nh_rs$$;model.findOneAndUpdate({_id:$obj$$._id},{$set:{bac:$obj$$.bac,sysorder:$obj$$.sysorder,loai_nh:$loai_nh_rs$$}},function($e$$){$e$$&&
4
+ console.log($e$$)});$next$$(null,$obj$$)})};$contr_router$$.on("saved",function($obj$jscomp$0$$){const $group_mother$$=$obj$jscomp$0$$.group_mother;$group_mother$$&&model.findOneAndUpdate({id_app:$obj$jscomp$0$$.id_app,_id:$group_mother$$},{$set:{loai_nh:0}},function($error$$,$obj$$){$error$$?console.error($error$$):$obj$$?console.log("updated "+$obj$$._id):console.log("Not found mother account:"+$group_mother$$)})});$contr_router$$.on("deleted",function($obj$jscomp$0$$){$obj$jscomp$0$$.group_mother&&
5
+ model.findOne({group_mother:$obj$jscomp$0$$.group_mother},function($error$jscomp$0$$,$acc$$){$error$jscomp$0$$||$acc$$||model.findOneAndUpdate({id_app:$obj$jscomp$0$$.id_app,_id:$obj$jscomp$0$$.group_mother},{$set:{loai_nh:1}},function($error$$,$obj$$){$error$$||$obj$$&&console.log("updated "+$obj$$._id)})})})};module.exports=group;
@@ -1,8 +1,9 @@
1
1
  'use strict';const model=global.getModel("introducecode"),asskey=global.getModel("asskey"),controller=require("../../controllers/controller"),DIGITS="0123456789",User=global.getModel("user"),Introducer=global.getModel("introducer"),Trangthai=global.getModel("trangthai"),{DirectSecp256k1HdWallet}=require("@cosmjs/proto-signing");function generateCode(){let $OTP$$="";for(let $i$$=0;6>$i$$;$i$$++)$OTP$$+=DIGITS[Math.floor(10*Math.random())];return $OTP$$}
2
- module.exports=function($router$$){(new controller($router$$,model,"introducecode",{sort:{date_created:-1},notNeedRight:!0,unique:["introduce_code"],onView:async($user$$,$items$$,$next$$)=>{if(0===await model.countDocuments({user_created:$user$$.email,id_app:$user$$.current_id_app})){for(var $new_code_obj$$={user_created:$user$$.email,id_app:$user$$.current_id_app,so_lan_su_dung:0};;){var $code$$=generateCode();if(!await model.findOne({id_app:$user$$.current_id_app,introduce_code:$code$$})){$new_code_obj$$.introduce_code=
3
- $code$$;break}}$code$$=await asskey.findOne({user_created:$user$$.email,id_app:$user$$.current_id_app,wallet_type:1,asset:{$nin:["BTC","ETH"]}}).lean();if(!$code$$){$code$$=new asskey({user_created:$user$$.email,username:$user$$.email,id_app:$user$$.current_id_app,wallet_type:1});const $wallet$$=await DirectSecp256k1HdWallet.generate(24,{prefix:configs.ADDRESS_PREFIX});let $accounts$$=await $wallet$$.getAccounts();$code$$.address=$accounts$$[0].address;$code$$.mnemonic=$wallet$$.mnemonic;$code$$.name=
4
- "T\u00e0i kho\u1ea3n nh\u1eadn th\u01b0\u1edfng";$code$$.asset=configs.MAIN_DENOM;await $code$$.save();global.getModel("app").emitEvent($user$$.current_id_app,"blockchain.wallet.changed",{sender:$user$$.email},null,[$user$$.email],!1,!1)}$new_code_obj$$.wallet_address_receive_reward=$code$$.address;$new_code_obj$$=await model.create($new_code_obj$$);$items$$.push($new_code_obj$$)}await Promise.all($items$$.map($item$$=>(async()=>{$item$$.so_user_da_gioi_thieu=await global.getModel("introducer").countDocuments({id_app:$user$$.current_id_app,
5
- introduce_code:$item$$.introduce_code});const $so_lan_dau_tu$$=await global.getModel("assinvestment").find({id_app:$user$$.current_id_app,introduce_code:$item$$.introduce_code,trang_thai:{$in:["1","5","9"]}}).lean();$item$$.so_lan_dau_tu=$so_lan_dau_tu$$.length;$item$$.so_user_da_dau_tu=(await $so_lan_dau_tu$$.asyncGroupBy(["user_created"],["so_luong"])).length})()));await $items$$.asyncJoinModel2($user$$.current_id_app,Introducer,{where:"introduce_code",fields:["be_introduced",{be_introduced_date:"date_created"}]});
6
- await $items$$.asyncJoinModel2(null,User,{where:{be_introduced:"email"},fields:[{be_introduced_name:"name"}]});await $items$$.asyncJoinModel2(null,Trangthai,{where:$item$$=>({ma_trang_thai:$item$$.trang_thai,ma_ct:"INTRODUCECODE"}),fields:["ten_trang_thai","color"]});$next$$(null,$items$$)},onCreating:async($expiry_date_user$$,$data$$,$next$$)=>{if(0<await model.countDocuments({user_created:$expiry_date_user$$.email,id_app:$expiry_date_user$$.current_id_app}))return $next$$("B\u1ea1n kh\u00f4ng th\u1ec3 t\u1ea1o th\u00eam m\u00e3 g\u1edbi thi\u1ec7u m\u1edbi");
7
- if(!$data$$.introduce_code)for(;;){let $code$$=generateCode();if(!await model.findOne({id_app:$expiry_date_user$$.current_id_app,introduce_code:$code$$})){$data$$.introduce_code=$code$$;break}}$expiry_date_user$$=new Date;$expiry_date_user$$.setDate($expiry_date_user$$.getDate()+1825);$data$$.expiry_date=$expiry_date_user$$;$next$$(null,$data$$)},onUpdating:async($user$$,$data$$,$obj$$,$next$$)=>{if($user$$.email!==$obj$$.user_created)return $next$$("B\u1ea1n kh\u00f4ng th\u1ec3 s\u1eeda m\u00e3 gi\u1edbi thi\u1ec7u n\u00e0y");
8
- delete $data$$.introduce_code;delete $data$$.so_lan_su_dung;$next$$(null,$data$$,$obj$$)},onDeleting:async($obj$jscomp$21_user$$,$data$$,$next$$)=>{$obj$jscomp$21_user$$=await model.findOne({_id:$data$$._id});if(!$obj$jscomp$21_user$$||$obj$jscomp$21_user$$.so_lan_su_dung)return $next$$("Kh\u00f4ng th\u1ec3 xo\u00e1 m\u00e3 gi\u1edbi thi\u1ec7u n\u00e0y do \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng");$next$$(null,$data$$)}})).route()};
2
+ module.exports=function($router$$){(new controller($router$$,model,"introducecode",{sort:{date_created:-1},notNeedRight:!0,unique:["introduce_code"],onView:async($user$$,$items$$,$next$$)=>{if(0===await model.countDocuments({user_created:$user$$.email,id_app:$user$$.current_id_app}))try{const $obj$$={user_created:$user$$.email,id_app:$user$$.current_id_app,so_lan_su_dung:0};for(;;){let $code$$=generateCode();if(!await model.findOne({id_app:$user$$.current_id_app,introduce_code:$code$$})){$obj$$.introduce_code=
3
+ $code$$;break}}let $wallet_reward$$,$ws$$=await asskey.findOne({user_created:$user$$.email,id_app:$user$$.current_id_app,wallet_type:1,asset:{$nin:["BTC","ETH"]}}).lean();if($ws$$)$wallet_reward$$=$ws$$;else{$wallet_reward$$=new asskey({user_created:$user$$.email,username:$user$$.email,id_app:$user$$.current_id_app,wallet_type:1});const $wallet$$=await DirectSecp256k1HdWallet.generate(24,{prefix:configs.ADDRESS_PREFIX});let $accounts$$=await $wallet$$.getAccounts();$wallet_reward$$.address=$accounts$$[0].address;
4
+ $wallet_reward$$.mnemonic=$wallet$$.mnemonic;$wallet_reward$$.name="T\u00e0i kho\u1ea3n nh\u1eadn th\u01b0\u1edfng";$wallet_reward$$.asset=configs.MAIN_DENOM;await $wallet_reward$$.save();global.getModel("app").emitEvent($user$$.current_id_app,"blockchain.wallet.changed",{sender:$user$$.email},null,[$user$$.email],!1,!1)}$obj$$.wallet_address_receive_reward=$wallet_reward$$.address;let $new_code$$=await model.create($obj$$);$items$$.push($new_code$$)}catch($e$$){console.error($e$$)}await Promise.all($items$$.map($item$$=>
5
+ (async()=>{$item$$.so_user_da_gioi_thieu=await global.getModel("introducer").countDocuments({id_app:$user$$.current_id_app,introduce_code:$item$$.introduce_code});const $so_lan_dau_tu$$=await global.getModel("assinvestment").find({id_app:$user$$.current_id_app,introduce_code:$item$$.introduce_code,trang_thai:{$in:["1","5","9"]}}).lean();$item$$.so_lan_dau_tu=$so_lan_dau_tu$$.length;$item$$.so_user_da_dau_tu=(await $so_lan_dau_tu$$.asyncGroupBy(["user_created"],["so_luong"])).length})()));await $items$$.asyncJoinModel2($user$$.current_id_app,
6
+ Introducer,{where:"introduce_code",fields:["be_introduced",{be_introduced_date:"date_created"}]});await $items$$.asyncJoinModel2(null,User,{where:{be_introduced:"email"},fields:[{be_introduced_name:"name"}]});await $items$$.asyncJoinModel2(null,Trangthai,{where:$item$$=>({ma_trang_thai:$item$$.trang_thai,ma_ct:"INTRODUCECODE"}),fields:["ten_trang_thai","color"]});$next$$(null,$items$$)},onCreating:async($expiry_date_user$$,$data$$,$next$$)=>{if(0<await model.countDocuments({user_created:$expiry_date_user$$.email,
7
+ id_app:$expiry_date_user$$.current_id_app}))return $next$$("B\u1ea1n kh\u00f4ng th\u1ec3 t\u1ea1o th\u00eam m\u00e3 g\u1edbi thi\u1ec7u m\u1edbi");if(!$data$$.introduce_code)for(;;){let $code$$=generateCode();if(!await model.findOne({id_app:$expiry_date_user$$.current_id_app,introduce_code:$code$$})){$data$$.introduce_code=$code$$;break}}$expiry_date_user$$=new Date;$expiry_date_user$$.setDate($expiry_date_user$$.getDate()+1825);$data$$.expiry_date=$expiry_date_user$$;$next$$(null,$data$$)},onUpdating:async($user$$,
8
+ $data$$,$obj$$,$next$$)=>{if($user$$.email!==$obj$$.user_created)return $next$$("B\u1ea1n kh\u00f4ng th\u1ec3 s\u1eeda m\u00e3 gi\u1edbi thi\u1ec7u n\u00e0y");$data$$.introduce_code=void 0;$data$$.so_lan_su_dung=void 0;$next$$(null,$data$$,$obj$$)},onDeleting:async($obj$jscomp$21_user$$,$data$$,$next$$)=>{$obj$jscomp$21_user$$=await model.findOne({_id:$data$$._id});if(!$obj$jscomp$21_user$$||$obj$jscomp$21_user$$.so_lan_su_dung)return $next$$("Kh\u00f4ng th\u1ec3 xo\u00e1 m\u00e3 gi\u1edbi thi\u1ec7u n\u00e0y do \u0111\u00e3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng");
9
+ $next$$(null,$data$$)}})).route()};
@@ -1,20 +1,19 @@
1
1
  'use strict';const model=global.getModel("introducer"),introducecode=global.getModel("introducecode"),app=global.getModel("app"),controller=require("../../controllers/controller"),blockchainconnect=require("../../libs/blockchainconnect"),asskey=global.getModel("asskey"),_=require("underscore"),{isSupperAdmin}=require("../../libs/utils"),async=require("async"),{DirectSecp256k1HdWallet}=require("@cosmjs/proto-signing"),Usergroup=global.getModel("usergroup"),Participant=global.getModel("participant"),
2
2
  numeral=require("numeral"),{bcQuery}=require("../../libs/blockchainconnect"),spend=async($appInfo$$,$receiver_user$$,$receiver_address$$,$amount$$,$denom$$,$memo$$,$introduce_code$$,$sub_action$$="")=>{try{await blockchainconnect.spend($appInfo$$._id,$appInfo$$.wallet_token,$appInfo$$.wallet_address,$receiver_address$$,{amount:$amount$$,denom:$denom$$,memo:$memo$$,action:"bonus",introduce_code:$introduce_code$$,sub_action:$sub_action$$})}catch($e$$){console.error("Error send coin",$e$$,$receiver_user$$,
3
3
  $receiver_address$$,$amount$$,$denom$$,$memo$$)}},bonus=async $obj$$=>{if($obj$$.introduce_code){const $code$$=await introducecode.findOne({id_app:$obj$$.id_app,introduce_code:$obj$$.introduce_code});if($code$$){let $be_introduced_by_user$$=await Participant.findOne({id_app:$obj$$.id_app,email:$obj$$.be_introduced_by}).lean();if($be_introduced_by_user$$&&await Participant.findOne({id_app:$obj$$.id_app,email:$obj$$.be_introduced}).lean()){$code$$.so_lan_su_dung=($code$$.so_lan_su_dung||0)+1;await $code$$.save();
4
- var $appInfo$$=await app.findOne({_id:$obj$$.id_app}).lean();$appInfo$$.wallet_address&&$appInfo$$.wallet_token&&await new Promise($res$$=>{async.series({introducer:async()=>{let $usergroup$$,$tang_gioi_thieu_denom$$;$be_introduced_by_user$$.group_id&&($usergroup$$=await Usergroup.findOne({id_app:$obj$$.id_app,_id:$be_introduced_by_user$$.group_id}).lean());$usergroup$$||($usergroup$$={});if($tang_gioi_thieu_denom$$=$usergroup$$.tang_gioi_thieu_denom||$appInfo$$.tang_gioi_thieu_denom){var $tang_gioi_thieu_wallet_address_receive_reward$jscomp$1_wallet_be_introduced_by$$=
5
- $usergroup$$.tang_gioi_thieu||$appInfo$$.tang_gioi_thieu||0,$tang_gioi_thieu_pt$$=$usergroup$$.tang_gioi_thieu_pt||$appInfo$$.tang_gioi_thieu_pt||0;if($tang_gioi_thieu_wallet_address_receive_reward$jscomp$1_wallet_be_introduced_by$$){var $memo$$=$code$$.wallet_address_receive_reward;if(!$memo$$){var $memo$jscomp$0$$=await asskey.findOne({id_app:$appInfo$$._id.toString(),username:$obj$$.be_introduced_by});$memo$jscomp$0$$&&($memo$$=$memo$jscomp$0$$.address)}$memo$$&&($memo$jscomp$0$$=`${$appInfo$$.short_name||
6
- $appInfo$$.name} t\u1eb7ng b\u1ea1n ${numeral($tang_gioi_thieu_wallet_address_receive_reward$jscomp$1_wallet_be_introduced_by$$).format()} ${$tang_gioi_thieu_denom$$.toUpperCase()} v\u00ec \u0111\u00e3 gi\u1edbi thi\u1ec7u Nh\u00e0 \u0111\u1ea7u t\u01b0 m\u1edbi!`,await spend($appInfo$$,$obj$$.be_introduced_by,$memo$$,$tang_gioi_thieu_wallet_address_receive_reward$jscomp$1_wallet_be_introduced_by$$,$tang_gioi_thieu_denom$$,$memo$jscomp$0$$,$code$$.introduce_code,"1"))}$tang_gioi_thieu_pt$$&&$usergroup$$.phu_trach&&
7
- $usergroup$$.phu_trach!==$obj$$.be_introduced_by&&($tang_gioi_thieu_wallet_address_receive_reward$jscomp$1_wallet_be_introduced_by$$=await asskey.findOne({id_app:$appInfo$$._id.toString(),username:$usergroup$$.phu_trach}))&&($tang_gioi_thieu_wallet_address_receive_reward$jscomp$1_wallet_be_introduced_by$$=$tang_gioi_thieu_wallet_address_receive_reward$jscomp$1_wallet_be_introduced_by$$.address)&&($memo$$=`${$appInfo$$.short_name||$appInfo$$.name} t\u1eb7ng b\u1ea1n ${numeral($tang_gioi_thieu_pt$$).format()} ${$tang_gioi_thieu_denom$$.toUpperCase()} v\u00ec c\u00f3 th\u00e0nh vi\u00ean trong nh\u00f3m b\u1ea1n qu\u1ea3n l\u00fd t\u00ecm \u0111\u01b0\u1ee3c kh\u00e1ch h\u00e0ng m\u1edbi!`,
8
- await spend($appInfo$$,$usergroup$$.phu_trach,$tang_gioi_thieu_wallet_address_receive_reward$jscomp$1_wallet_be_introduced_by$$,$tang_gioi_thieu_pt$$,$tang_gioi_thieu_denom$$,$memo$$,$code$$.introduce_code,"1"))}},be_introduce:async()=>{var $tang_duoc_gioi_thieu_usergroup$$,$par_tang_gioi_thieu_denom$$;($par_tang_gioi_thieu_denom$$=await Participant.findOne({id_app:$obj$$.id_app,email:$obj$$.be_introduced_by}).lean())&&$par_tang_gioi_thieu_denom$$.group_id&&($tang_duoc_gioi_thieu_usergroup$$=await Usergroup.findOne({id_app:$obj$$.id_app,
9
- _id:$par_tang_gioi_thieu_denom$$.group_id}).lean());$tang_duoc_gioi_thieu_usergroup$$||($tang_duoc_gioi_thieu_usergroup$$={});if($par_tang_gioi_thieu_denom$$=$tang_duoc_gioi_thieu_usergroup$$.tang_gioi_thieu_denom||$appInfo$$.tang_gioi_thieu_denom)if($tang_duoc_gioi_thieu_usergroup$$=$tang_duoc_gioi_thieu_usergroup$$.tang_duoc_gioi_thieu||$appInfo$$.tang_duoc_gioi_thieu||0){var $wallet_be_introduced$$=await asskey.findOne({id_app:$appInfo$$._id.toString(),username:$obj$$.be_introduced,wallet_type:1});
10
- if(!$wallet_be_introduced$$){$wallet_be_introduced$$=new asskey({user_created:$obj$$.be_introduced,username:$obj$$.be_introduced,id_app:$obj$$.id_app,wallet_type:1});$memo$$=await DirectSecp256k1HdWallet.generate(24,{prefix:configs.ADDRESS_PREFIX});let $accounts$$=await $memo$$.getAccounts();$wallet_be_introduced$$.address=$accounts$$[0].address;$wallet_be_introduced$$.mnemonic=$memo$$.mnemonic;$wallet_be_introduced$$.name="T\u00e0i kho\u1ea3n nh\u1eadn th\u01b0\u1edfng";await $wallet_be_introduced$$.save()}var $memo$$=
11
- `${$appInfo$$.short_name||$appInfo$$.name} t\u1eb7ng b\u1ea1n ${numeral($tang_duoc_gioi_thieu_usergroup$$).format()} ${$par_tang_gioi_thieu_denom$$.toUpperCase()} v\u00ec \u0111\u00e3 \u0111\u0103ng k\u00fd th\u00e0nh c\u00f4ng t\u00e0i kho\u1ea3n!`;await spend($appInfo$$,$obj$$.be_introduced,$wallet_be_introduced$$.address,$tang_duoc_gioi_thieu_usergroup$$,$par_tang_gioi_thieu_denom$$,$memo$$,$code$$.introduce_code,"2")}}},$e$$=>{$e$$&&console.error($e$$);$res$$()})})}}}},introducer=function($router$$){(new controller($router$$,
12
- model,"introducer",{sort:{date_created:-1},unique:["be_introduced"],notNeedRight:!0,onView:async($user$$,$items$$,$next$$)=>{let $network$$="MAINNET",$app$$=await global.getModel("app").findOne({_id:$user$$.current_id_app}).lean();$app$$&&$app$$.wallet_network&&configs.BLOCKCHAIN_NETWORKS[$app$$.wallet_network]&&($network$$=$app$$.wallet_network);await $items$$.asyncJoinModel2($user$$.current_id_app,"asskey",{where:$item$$=>({username:$item$$.be_introduced,wallet_type:1}),fields:[{be_introduced_address:"address"}]});
13
- await $items$$.asyncJoinModel2($user$$.current_id_app,"participant",{where:{be_introduced_by:"email"},fields:["group_id"]});await $items$$.filter($r$$=>$r$$.group_id).asyncJoinModel2($user$$.current_id_app,"usergroup",{where:{group_id:"_id"},fields:["group_name"]});await $items$$.asyncJoinModel2(null,"user",{where:{be_introduced_by:"email"},fields:[{be_introduced_by_name:"name"}]});async.mapSeries($items$$,($item$$,$callback$$)=>{if(0<$item$$.bonus_paid)return $callback$$(null,$item$$);setImmediate(async()=>
14
- {const $action$$=`action-bonus-introducecode-${$item$$.introduce_code}`;try{let $rs$$=(await bcQuery(`transferlogs/${$action$$}/all-?pagination.limit=100000`,$network$$)).TransferLog||[];await $rs$$.asyncJoinModel2($user$$.current_id_app,"asskey",{where:{receiver:"address"},fields:["username"]});$item$$.bonus_paid=$rs$$.filter($r$$=>$r$$.username===$item$$.be_introduced).map($r$$=>Number($r$$.amount)).reduce(($a$$,$b$$)=>$a$$+$b$$,0);if(0===$item$$.bonus_paid)isSupperAdmin($user$$.email.toLowerCase());
15
- else{let $rs$$=await model.updateOne({_id:$item$$._id},{bonus_paid:$item$$.bonus_paid});console.log("save bonus_paid",$item$$.bonus_paid,$rs$$)}}catch($e$$){console.error($e$$)}$callback$$(null,$item$$)})},()=>{$next$$(null,$items$$)})},onCreating:async($code$jscomp$2_user$$,$obj$$,$next$$)=>{$obj$$.be_introduced=$code$jscomp$2_user$$.email;$code$jscomp$2_user$$=await introducecode.findOne({id_app:$code$jscomp$2_user$$.current_id_app,introduce_code:$obj$$.introduce_code});if(!$code$jscomp$2_user$$)return $next$$("M\u00e3 gi\u1edbi thi\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i");
16
- $obj$$.be_introduced_by=$code$jscomp$2_user$$.user_created;if($obj$$.be_introduced_by==$obj$$.be_introduced)return $next$$("Ng\u01b0\u1eddi gi\u1edbi thi\u1ec7u ph\u1ea3i kh\u00e1c ng\u01b0\u1eddi \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u");$next$$(null,$obj$$)},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{if(!_.contains(configs.admins,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p c\u1eadp nh\u1eadt th\u00f4ng tin n\u00e0y");$data$$.be_introduced=
17
- $obj$$.be_introduced;$data$$.be_introduced_by=$obj$$.be_introduced_by;$data$$.introduce_code=$obj$$.introduce_code;if($data$$.be_introduced_by==$data$$.be_introduced)return $next$$("Ng\u01b0\u1eddi gi\u1edbi thi\u1ec7u ph\u1ea3i kh\u00e1c ng\u01b0\u1eddi \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u");$next$$(null,$data$$,$obj$$)},onDeleting:($user$$,$obj$$,$next$$)=>{if(!_.contains(configs.admins,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n th\u1ef1c hi\u1ec7n thao t\u00e1c n\u00e0y");
18
- $next$$(null,$obj$$)},onCreated:async($user$$,$obj$$,$next$$)=>{try{bonus($obj$$)}catch($e$$){console.error("Error handle to introduce",$e$$)}$next$$(null,$obj$$)},onUpdated:async($user$$,$item$$,$next$$)=>{let $network$$="MAINNET";var $action$jscomp$1_app$$=await global.getModel("app").findOne({_id:$item$$.id_app}).lean();$action$jscomp$1_app$$&&$action$jscomp$1_app$$.wallet_network&&configs.BLOCKCHAIN_NETWORKS[$action$jscomp$1_app$$.wallet_network]&&($network$$=$action$jscomp$1_app$$.wallet_network);
19
- $action$jscomp$1_app$$=`action-bonus-introducecode-${$item$$.introduce_code}`;try{let $rs$$=(await bcQuery(`transferlogs/${$action$jscomp$1_app$$}/all-?pagination.limit=100000`,$network$$)).TransferLog||[];await $rs$$.asyncJoinModel2($user$$.current_id_app,"asskey",{where:{receiver:"address"},fields:["username"]});if(0<$rs$$.filter($r$$=>$r$$.username===$item$$.be_introduced).map($r$$=>Number($r$$.amount)).reduce(($a$$,$b$$)=>$a$$+$b$$,0))return $next$$(null,$item$$);(new Date($item$$.date_created)).getTime()>=
20
- (new Date(2022,9,1)).getTime()&&await bonus($item$$)}catch($e$$){console.error("error update introducer",$e$$)}$next$$(null,$item$$)}})).route()};module.exports=introducer;
4
+ var $appInfo$$=await app.findOne({_id:$obj$$.id_app}).lean();$appInfo$$.wallet_address&&$appInfo$$.wallet_token&&await new Promise($res$$=>{async.series({introducer:async()=>{try{let $usergroup$$,$tang_gioi_thieu_denom$$;$be_introduced_by_user$$.group_id&&($usergroup$$=await Usergroup.findOne({id_app:$obj$$.id_app,_id:$be_introduced_by_user$$.group_id}).lean());$usergroup$$||($usergroup$$={});if($tang_gioi_thieu_denom$$=$usergroup$$.tang_gioi_thieu_denom||$appInfo$$.tang_gioi_thieu_denom){var $tang_gioi_thieu$$=
5
+ $usergroup$$.tang_gioi_thieu||$appInfo$$.tang_gioi_thieu||0,$tang_gioi_thieu_pt$$=$usergroup$$.tang_gioi_thieu_pt||$appInfo$$.tang_gioi_thieu_pt||0;if($tang_gioi_thieu$$){let $wallet_address_receive_reward$$=$code$$.wallet_address_receive_reward;if(!$wallet_address_receive_reward$$){let $wallet_be_introduced_by$$=await asskey.findOne({id_app:$appInfo$$._id.toString(),username:$obj$$.be_introduced_by});$wallet_be_introduced_by$$&&($wallet_address_receive_reward$$=$wallet_be_introduced_by$$.address)}if($wallet_address_receive_reward$$){let $memo$$=
6
+ `${$appInfo$$.short_name||$appInfo$$.name} t\u1eb7ng b\u1ea1n ${numeral($tang_gioi_thieu$$).format()} ${$tang_gioi_thieu_denom$$.toUpperCase()} v\u00ec \u0111\u00e3 gi\u1edbi thi\u1ec7u Nh\u00e0 \u0111\u1ea7u t\u01b0 m\u1edbi!`;await spend($appInfo$$,$obj$$.be_introduced_by,$wallet_address_receive_reward$$,$tang_gioi_thieu$$,$tang_gioi_thieu_denom$$,$memo$$,$code$$.introduce_code,"1")}}if($tang_gioi_thieu_pt$$&&$usergroup$$.phu_trach&&$usergroup$$.phu_trach!==$obj$$.be_introduced_by){let $wallet_be_introduced_by$$=
7
+ await asskey.findOne({id_app:$appInfo$$._id.toString(),username:$usergroup$$.phu_trach});if($wallet_be_introduced_by$$){var $wallet_address_receive_reward$jscomp$0$$=$wallet_be_introduced_by$$.address;if($wallet_address_receive_reward$jscomp$0$$){let $memo$$=`${$appInfo$$.short_name||$appInfo$$.name} t\u1eb7ng b\u1ea1n ${numeral($tang_gioi_thieu_pt$$).format()} ${$tang_gioi_thieu_denom$$.toUpperCase()} v\u00ec c\u00f3 th\u00e0nh vi\u00ean trong nh\u00f3m b\u1ea1n qu\u1ea3n l\u00fd t\u00ecm \u0111\u01b0\u1ee3c kh\u00e1ch h\u00e0ng m\u1edbi!`;
8
+ await spend($appInfo$$,$usergroup$$.phu_trach,$wallet_address_receive_reward$jscomp$0$$,$tang_gioi_thieu_pt$$,$tang_gioi_thieu_denom$$,$memo$$,$code$$.introduce_code,"1")}}}}}catch($e$$){console.error($e$$)}},be_introduce:async()=>{try{let $usergroup$$,$tang_gioi_thieu_denom$$;const $par$$=await Participant.findOne({id_app:$obj$$.id_app,email:$obj$$.be_introduced_by}).lean();$par$$&&$par$$.group_id&&($usergroup$$=await Usergroup.findOne({id_app:$obj$$.id_app,_id:$par$$.group_id}).lean());$usergroup$$||
9
+ ($usergroup$$={});if($tang_gioi_thieu_denom$$=$usergroup$$.tang_gioi_thieu_denom||$appInfo$$.tang_gioi_thieu_denom){var $tang_duoc_gioi_thieu$$=$usergroup$$.tang_duoc_gioi_thieu||$appInfo$$.tang_duoc_gioi_thieu||0;if($tang_duoc_gioi_thieu$$){var $wallet_be_introduced$$=await asskey.findOne({id_app:$appInfo$$._id.toString(),username:$obj$$.be_introduced,wallet_type:1});if(!$wallet_be_introduced$$){$wallet_be_introduced$$=new asskey({user_created:$obj$$.be_introduced,username:$obj$$.be_introduced,id_app:$obj$$.id_app,
10
+ wallet_type:1});const $wallet$$=await DirectSecp256k1HdWallet.generate(24,{prefix:configs.ADDRESS_PREFIX});let $accounts$$=await $wallet$$.getAccounts();$wallet_be_introduced$$.address=$accounts$$[0].address;$wallet_be_introduced$$.mnemonic=$wallet$$.mnemonic;$wallet_be_introduced$$.name="T\u00e0i kho\u1ea3n nh\u1eadn th\u01b0\u1edfng";await $wallet_be_introduced$$.save()}var $memo$$=`${$appInfo$$.short_name||$appInfo$$.name} t\u1eb7ng b\u1ea1n ${numeral($tang_duoc_gioi_thieu$$).format()} ${$tang_gioi_thieu_denom$$.toUpperCase()} v\u00ec \u0111\u00e3 \u0111\u0103ng k\u00fd th\u00e0nh c\u00f4ng t\u00e0i kho\u1ea3n!`;
11
+ await spend($appInfo$$,$obj$$.be_introduced,$wallet_be_introduced$$.address,$tang_duoc_gioi_thieu$$,$tang_gioi_thieu_denom$$,$memo$$,$code$$.introduce_code,"2")}}}catch($e$$){console.error($e$$)}}},$e$$=>{$e$$&&console.error($e$$);$res$$()})})}}}},introducer=function($router$$){(new controller($router$$,model,"introducer",{sort:{date_created:-1},unique:["be_introduced"],notNeedRight:!0,onView:async($user$$,$items$$,$next$$)=>{let $network$$="MAINNET",$app$$=await global.getModel("app").findOne({_id:$user$$.current_id_app}).lean();
12
+ $app$$&&$app$$.wallet_network&&configs.BLOCKCHAIN_NETWORKS[$app$$.wallet_network]&&($network$$=$app$$.wallet_network);await $items$$.asyncJoinModel2($user$$.current_id_app,"asskey",{where:$item$$=>({username:$item$$.be_introduced,wallet_type:1}),fields:[{be_introduced_address:"address"}]});await $items$$.asyncJoinModel2($user$$.current_id_app,"participant",{where:{be_introduced_by:"email"},fields:["group_id"]});await $items$$.filter($r$$=>$r$$.group_id).asyncJoinModel2($user$$.current_id_app,"usergroup",
13
+ {where:{group_id:"_id"},fields:["group_name"]});await $items$$.asyncJoinModel2(null,"user",{where:{be_introduced_by:"email"},fields:[{be_introduced_by_name:"name"}]});async.mapSeries($items$$,($item$$,$callback$$)=>{if(0<$item$$.bonus_paid)return $callback$$(null,$item$$);setImmediate(async()=>{const $action$$=`action-bonus-introducecode-${$item$$.introduce_code}`;try{let $rs$$=(await bcQuery(`transferlogs/${$action$$}/all-?pagination.limit=100000`,$network$$)).TransferLog||[];await $rs$$.asyncJoinModel2($user$$.current_id_app,
14
+ "asskey",{where:{receiver:"address"},fields:["username"]});$item$$.bonus_paid=$rs$$.filter($r$$=>$r$$.username===$item$$.be_introduced).map($r$$=>Number($r$$.amount)).reduce(($a$$,$b$$)=>$a$$+$b$$,0);if(0===$item$$.bonus_paid)isSupperAdmin($user$$.email.toLowerCase());else{let $rs$$=await model.updateOne({_id:$item$$._id},{bonus_paid:$item$$.bonus_paid});console.log("save bonus_paid",$item$$.bonus_paid,$rs$$)}}catch($e$$){console.error($e$$)}$callback$$(null,$item$$)})},()=>{$next$$(null,$items$$)})},
15
+ onCreating:async($code$jscomp$2_user$$,$obj$$,$next$$)=>{$obj$$.be_introduced=$code$jscomp$2_user$$.email;$code$jscomp$2_user$$=await introducecode.findOne({id_app:$code$jscomp$2_user$$.current_id_app,introduce_code:$obj$$.introduce_code});if(!$code$jscomp$2_user$$)return $next$$("M\u00e3 gi\u1edbi thi\u1ec7u kh\u00f4ng t\u1ed3n t\u1ea1i");$obj$$.be_introduced_by=$code$jscomp$2_user$$.user_created;if($obj$$.be_introduced_by==$obj$$.be_introduced)return $next$$("Ng\u01b0\u1eddi gi\u1edbi thi\u1ec7u ph\u1ea3i kh\u00e1c ng\u01b0\u1eddi \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u");
16
+ $next$$(null,$obj$$)},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{if(!_.contains(configs.admins,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p c\u1eadp nh\u1eadt th\u00f4ng tin n\u00e0y");$data$$.be_introduced=$obj$$.be_introduced;$data$$.be_introduced_by=$obj$$.be_introduced_by;$data$$.introduce_code=$obj$$.introduce_code;if($data$$.be_introduced_by==$data$$.be_introduced)return $next$$("Ng\u01b0\u1eddi gi\u1edbi thi\u1ec7u ph\u1ea3i kh\u00e1c ng\u01b0\u1eddi \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u");
17
+ $next$$(null,$data$$,$obj$$)},onDeleting:($user$$,$obj$$,$next$$)=>{if(!_.contains(configs.admins,$user$$.email)&&!isSupperAdmin($user$$.email.toLowerCase()))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n th\u1ef1c hi\u1ec7n thao t\u00e1c n\u00e0y");$next$$(null,$obj$$)},onCreated:async($user$$,$obj$$,$next$$)=>{try{bonus($obj$$)}catch($e$$){console.error("Error handle to introduce",$e$$)}$next$$(null,$obj$$)},onUpdated:async($user$$,$item$$,$next$$)=>{let $network$$="MAINNET";var $action$jscomp$1_app$$=
18
+ await global.getModel("app").findOne({_id:$item$$.id_app}).lean();$action$jscomp$1_app$$&&$action$jscomp$1_app$$.wallet_network&&configs.BLOCKCHAIN_NETWORKS[$action$jscomp$1_app$$.wallet_network]&&($network$$=$action$jscomp$1_app$$.wallet_network);$action$jscomp$1_app$$=`action-bonus-introducecode-${$item$$.introduce_code}`;try{let $rs$$=(await bcQuery(`transferlogs/${$action$jscomp$1_app$$}/all-?pagination.limit=100000`,$network$$)).TransferLog||[];await $rs$$.asyncJoinModel2($user$$.current_id_app,
19
+ "asskey",{where:{receiver:"address"},fields:["username"]});if(0<$rs$$.filter($r$$=>$r$$.username===$item$$.be_introduced).map($r$$=>Number($r$$.amount)).reduce(($a$$,$b$$)=>$a$$+$b$$,0))return $next$$(null,$item$$);(new Date($item$$.date_created)).getTime()>=(new Date(2022,9,1)).getTime()&&await bonus($item$$)}catch($e$$){console.error("error update introducer",$e$$)}$next$$(null,$item$$)}})).route()};module.exports=introducer;
@@ -1,7 +1,8 @@
1
- 'use strict';const model=global.getModel("message2"),m2s=global.getModel("message2setting"),User=global.getModel("user"),controller=require("../../controllers/controller"),message2=function($router$$){const $contr$$=new controller($router$$,model,"message2",{sort:{date_created:-1},notNeedRight:!0,users_receive_notification_default:[async $_setting_msg$$=>{var $sender_name_title$$=(await User.findOne({email:$_setting_msg$$.user_created},{name:1})||{}).name||$_setting_msg$$.user_created;let $body$$=
2
- $_setting_msg$$.text;$sender_name_title$$=`Tin nh\u1eafn t\u1eeb ${$sender_name_title$$}`;($_setting_msg$$=await m2s.findOne({id_app:$_setting_msg$$.id_app,id_link:$_setting_msg$$.id_link}))&&($body$$=`T\u1edbi nh\u00f3m ${$_setting_msg$$.title}: ${$body$$}`);return{title:$sender_name_title$$,body:$body$$,send_phu_trach:!0,send_attends:!0,send_to_user_created:!1}}],onFinding:async($user$$,$condition$$,$next$$)=>{$condition$$.$and||($condition$$.$and=[]);$condition$$.$and.push({$or:[{attends:$user$$.email},
3
- {phu_trach:$user$$.email},{sender:$user$$.email},{receiver:$user$$.email}]});$next$$(null,$condition$$)},onView:async($user$$,$items$$,$next$$)=>{await $items$$.asyncJoinModel2(null,User,{where:{sender:"email"},fields:{sender_name:"name"}});await $items$$.asyncJoinModel2(null,User,{where:{receiver:"email"},fields:{receiver_name:"name"}});$items$$.forEach($item$$=>{$item$$.read&&"false"!==$item$$.read||($item$$.read=[]);let $read$$=$item$$.read;$read$$.find($r$$=>$r$$===$user$$.email)||($read$$.push($user$$.email),
4
- model.findOneAndUpdate({_id:$item$$._id.toString()},{read:$read$$},($e$$,$rs$$)=>{controller.pushNotification($contr$$,$rs$$,"read",null,!0)}))});$next$$(null,$items$$)},onCreating:async($user$$,$obj$$,$next$$)=>{let $_setting$$=await m2s.findOne({id_app:$user$$.current_id_app,id_link:$obj$$.id_link});if($_setting$$){let $attends$$=[...$_setting$$.attends];$_setting$$.phu_trach&&$attends$$.push($_setting$$.phu_trach);if(0>$attends$$.indexOf($user$$.email))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n g\u1eedi tin nh\u1eafn trong nh\u00f3m n\u00e0y");
5
- $attends$$=[...(new Set($attends$$))];$obj$$.attends=$attends$$}$obj$$.sender=$user$$.email;return $next$$(null,$obj$$)},onCreated:($user$$,$obj$$,$next$$)=>{$obj$$.id_link&&m2s.findOneAndUpdate({id_app:$obj$$.id_app,id_link:$obj$$.id_link},{latest_message:$obj$$.text,name_sender_latest_message:$user$$.name,date_updated:new Date,id_latest_message:$obj$$._id.toString()},($e$$,$rs$$)=>{$rs$$&&controller.pushNotification(global.controllers.MESSAGE2SETTING,$rs$$,"update",null,!0)});$next$$(null,$obj$$)}});
6
- $contr$$.createRoute("unread/:id_link",async($_s_req$$,$next$$)=>{const $id_link$$=$_s_req$$.params.id_link;var $condition$jscomp$1_user$$=$_s_req$$.user;$condition$jscomp$1_user$$={id_app:$_s_req$$.user.current_id_app,read:{$ne:$_s_req$$.user.email},user_created:{$ne:$_s_req$$.user.email},$or:[{attends:$condition$jscomp$1_user$$.email},{phu_trach:$condition$jscomp$1_user$$.email}]};"all"!==$id_link$$?$condition$jscomp$1_user$$.id_link=$id_link$$:($_s_req$$=await m2s.find({id_app:$_s_req$$.user.current_id_app,
7
- title:{$nin:[null,"",void 0]},$or:[{phu_trach:$_s_req$$.user.email},{attends:$_s_req$$.user.email}]},{_id:1,id_link:1}),$condition$jscomp$1_user$$.id_link={$in:$_s_req$$.map($s$$=>$s$$.id_link||$s$$._id.toString())});try{const $unread$$=await model.countDocuments($condition$jscomp$1_user$$);return $next$$(null,{unread:$unread$$})}catch($e$$){$next$$($e$$)}});$contr$$.route()};module.exports=message2;
1
+ 'use strict';const model=global.getModel("message2"),m2s=global.getModel("message2setting"),User=global.getModel("user"),controller=require("../../controllers/controller"),permission=require("../../libs/permission"),message2=function($router$$){const $contr$$=new controller($router$$,model,"message2",{sort:{date_created:-1},notNeedRight:!0,users_receive_notification_default:[async $_setting_msg$$=>{var $sender_name_title$$=(await User.findOne({email:$_setting_msg$$.user_created},{name:1})||{}).name||
2
+ $_setting_msg$$.user_created;let $body$$=$_setting_msg$$.text;$sender_name_title$$=`Tin nh\u1eafn t\u1eeb ${$sender_name_title$$}`;($_setting_msg$$=await m2s.findOne({id_app:$_setting_msg$$.id_app,id_link:$_setting_msg$$.id_link}))&&($body$$=`T\u1edbi nh\u00f3m ${$_setting_msg$$.title}: ${$body$$}`);return{title:$sender_name_title$$,body:$body$$,send_phu_trach:!0,send_attends:!0,send_to_user_created:!1}}],onFinding:async($user$$,$condition$$,$next$$)=>{permission.isAdmin($user$$.current_id_app,$user$$.email,
3
+ function($e$$,$admin$$){$admin$$||($condition$$.$and||($condition$$.$and=[]),$condition$$.$and.push({$or:[{attends:$user$$.email},{phu_trach:$user$$.email},{sender:$user$$.email},{receiver:$user$$.email}]}));$next$$(null,$condition$$)})},onView:async($user$$,$items$$,$next$$)=>{await $items$$.asyncJoinModel2(null,User,{where:{sender:"email"},fields:{sender_name:"name"}});await $items$$.asyncJoinModel2(null,User,{where:{receiver:"email"},fields:{receiver_name:"name"}});$items$$.forEach($item$$=>{$item$$.read&&
4
+ "false"!==$item$$.read||($item$$.read=[]);let $read$$=$item$$.read;$read$$.find($r$$=>$r$$===$user$$.email)||($read$$.push($user$$.email),model.findOneAndUpdate({_id:$item$$._id.toString()},{read:$read$$},($e$$,$rs$$)=>{controller.pushNotification($contr$$,$rs$$,"read",null,!0)}))});$next$$(null,$items$$)},onCreating:async($user$$,$obj$$,$next$$)=>{permission.isAdmin($user$$.current_id_app,$user$$.email,async function($_setting$jscomp$1_e$$,$admin$$){if($_setting$jscomp$1_e$$=await m2s.findOne({id_app:$user$$.current_id_app,
5
+ id_link:$obj$$.id_link})){let $attends$$=[...$_setting$jscomp$1_e$$.attends];$_setting$jscomp$1_e$$.phu_trach&&$attends$$.push($_setting$jscomp$1_e$$.phu_trach);if(!$admin$$&&0>$attends$$.indexOf($user$$.email))return $next$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n g\u1eedi tin nh\u1eafn trong nh\u00f3m n\u00e0y");$attends$$=[...(new Set($attends$$))];$obj$$.attends=$attends$$}$admin$$&&($obj$$.attends=$obj$$.attends||[],0>$obj$$.attends.indexOf($user$$.email)&&$obj$$.attends.push($user$$.email));
6
+ $obj$$.sender=$user$$.email;return $next$$(null,$obj$$)})},onCreated:($user$$,$obj$$,$next$$)=>{$obj$$.id_link&&m2s.findOneAndUpdate({id_app:$obj$$.id_app,id_link:$obj$$.id_link},{latest_message:$obj$$.text,name_sender_latest_message:$user$$.name,date_updated:new Date,id_latest_message:$obj$$._id.toString()},($e$$,$rs$$)=>{$rs$$&&controller.pushNotification(global.controllers.MESSAGE2SETTING,$rs$$,"update",null,!0)});$next$$(null,$obj$$)}});$contr$$.createRoute("unread/:id_link",async($_s_req$$,$next$$)=>
7
+ {const $id_link$$=$_s_req$$.params.id_link;var $condition$jscomp$1_user$$=$_s_req$$.user;$condition$jscomp$1_user$$={id_app:$_s_req$$.user.current_id_app,read:{$ne:$_s_req$$.user.email},user_created:{$ne:$_s_req$$.user.email},$or:[{attends:$condition$jscomp$1_user$$.email},{phu_trach:$condition$jscomp$1_user$$.email}]};"all"!==$id_link$$?$condition$jscomp$1_user$$.id_link=$id_link$$:($_s_req$$=await m2s.find({id_app:$_s_req$$.user.current_id_app,title:{$nin:[null,"",void 0]},$or:[{phu_trach:$_s_req$$.user.email},
8
+ {attends:$_s_req$$.user.email}]},{_id:1,id_link:1}),$condition$jscomp$1_user$$.id_link={$in:$_s_req$$.map($s$$=>$s$$.id_link||$s$$._id.toString())});try{const $unread$$=await model.countDocuments($condition$jscomp$1_user$$);return $next$$(null,{unread:$unread$$})}catch($e$$){$next$$($e$$)}});$contr$$.route()};module.exports=message2;
@@ -1,4 +1,4 @@
1
- 'use strict';const model=global.getModel("message2setting"),controller=require("../../controllers/controller"),Message2=global.getModel("message2"),underscore=require("underscore"),message2setting=function($router$$){(new controller($router$$,model,"message2setting",{sort:{date_updated:-1},unique:["id_link"],notNeedRight:!0,users_receive_notification_default:[async()=>({send_phu_trach:!0,send_attends:!0})],onFinding:async($user$$,$condition$$,$next$$)=>{$condition$$.$and||($condition$$.$and=[]);$condition$$.$and.push({$or:[{attends:$user$$.email},
2
- {phu_trach:$user$$.email}]});$next$$(null,$condition$$)},onCreating:($user$$,$data$$,$next$$)=>{$data$$.id_link||($data$$.id_link=(new Date).getTime().toString(),$data$$.code_link="other");$data$$.phu_trach=$data$$.phu_trach||$user$$.email;$next$$(null,$data$$)},onUpdating:($user$$,$new_data$$,$old_data$$,$next$$)=>!underscore.contains(configs.admins,$user$$.email)&&$old_data$$.phu_trach&&$old_data$$.phu_trach!==$user$$.email?$next$$("B\u1ea1n kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt nh\u00f3m n\u00e0y"):
3
- $next$$(null,$new_data$$,$old_data$$),onUpdated:async($user$$,$obj$$,$next$$)=>{Message2.updateMany({id_link:$obj$$._id.toString()},{$set:{attends:$obj$$.attends}}).then($rs$$=>{console.log("update message2",$rs$$)});$next$$(null,$obj$$)},onDeleting:($user$$,$data$$,$next$$)=>!underscore.contains(configs.admins,$user$$.email)&&$data$$.phu_trach&&$data$$.phu_trach!==$user$$.email?$next$$("B\u1ea1n kh\u00f4ng th\u1ec3 xo\u00e1 nh\u00f3m n\u00e0y"):$next$$(null,$data$$),onDeleted:($user$$,$data$$,$next$$)=>
4
- {Message2.deleteMany({id_link:$data$$._id.toString()});return $next$$(null,$data$$)}})).route()};module.exports=message2setting;
1
+ 'use strict';const model=global.getModel("message2setting"),controller=require("../../controllers/controller"),Message2=global.getModel("message2"),underscore=require("underscore"),permission=require("../../libs/permission"),message2setting=function($router$$){(new controller($router$$,model,"message2setting",{sort:{date_updated:-1},unique:["id_link"],notNeedRight:!0,users_receive_notification_default:[async()=>({send_phu_trach:!0,send_attends:!0})],onFinding:async($user$$,$condition$$,$next$$)=>
2
+ {permission.isAdmin($user$$.current_id_app,$user$$.email,function($e$$,$admin$$){$admin$$||($condition$$.$and||($condition$$.$and=[]),$condition$$.$and.push({$or:[{attends:$user$$.email},{phu_trach:$user$$.email}]}));$next$$(null,$condition$$)})},onCreating:($user$$,$data$$,$next$$)=>{$data$$.id_link||($data$$.id_link=(new Date).getTime().toString(),$data$$.code_link="other");$data$$.phu_trach=$data$$.phu_trach||$user$$.email;$next$$(null,$data$$)},onUpdating:($user$$,$new_data$$,$old_data$$,$next$$)=>
3
+ !underscore.contains(configs.admins,$user$$.email)&&$old_data$$.phu_trach&&$old_data$$.phu_trach!==$user$$.email?$next$$("B\u1ea1n kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt nh\u00f3m n\u00e0y"):$next$$(null,$new_data$$,$old_data$$),onUpdated:async($user$$,$obj$$,$next$$)=>{Message2.updateMany({id_link:$obj$$._id.toString()},{$set:{attends:$obj$$.attends}}).then($rs$$=>{console.log("update message2",$rs$$)});$next$$(null,$obj$$)},onDeleting:($user$$,$data$$,$next$$)=>!underscore.contains(configs.admins,
4
+ $user$$.email)&&$data$$.phu_trach&&$data$$.phu_trach!==$user$$.email?$next$$("B\u1ea1n kh\u00f4ng th\u1ec3 xo\u00e1 nh\u00f3m n\u00e0y"):$next$$(null,$data$$),onDeleted:($user$$,$data$$,$next$$)=>{Message2.deleteMany({id_link:$data$$._id.toString()});return $next$$(null,$data$$)}})).route()};module.exports=message2setting;
@@ -1,3 +1,3 @@
1
1
  'use strict';const model=global.getModel("news"),newsfeed=global.getModel("newsfeed"),controller=require("../../controllers/controller");
2
- module.exports=function($router$$){(new controller($router$$,model,"news",{sort:{date_created:-1},onCreated:async($user$$,$obj$$,$next$$)=>{if($obj$$.newsfeed)try{await newsfeed.add("news",$obj$$),$next$$(null,$obj$$)}catch($e$$){$next$$($e$$.message)}else $next$$(null,$obj$$)},onUpdated:async($user$$,$obj$$,$next$$)=>{if($obj$$.newsfeed)try{await newsfeed.add("news",$obj$$),$next$$(null,$obj$$)}catch($e$$){$next$$($e$$.message)}else{try{await newsfeed.delete($obj$$._id)}catch($e$$){console.error($e$$)}$next$$(null,
2
+ module.exports=function($router$$){(new controller($router$$,model,"news",{sort:{stt:1,date_created:-1},onCreated:async($user$$,$obj$$,$next$$)=>{if($obj$$.newsfeed)try{await newsfeed.add("news",$obj$$),$next$$(null,$obj$$)}catch($e$$){$next$$($e$$.message)}else $next$$(null,$obj$$)},onUpdated:async($user$$,$obj$$,$next$$)=>{if($obj$$.newsfeed)try{await newsfeed.add("news",$obj$$),$next$$(null,$obj$$)}catch($e$$){$next$$($e$$.message)}else{try{await newsfeed.delete($obj$$._id)}catch($e$$){console.error($e$$)}$next$$(null,
3
3
  $obj$$)}},onDeleted:async($user$$,$obj$$,$next$$)=>{try{await newsfeed.delete($obj$$._id)}catch($e$$){console.error($e$$)}$next$$(null,$obj$$)}})).route()};
@@ -1,5 +1,5 @@
1
- 'use strict';var model=global.getModel("opportunity");const controller=require("../../controllers/controller");var customer=global.getModel("customer"),link=global.getModel("link");const async=require("async");
2
- module.exports=function($router$$){var $createLink$$=function($user$$,$obj$$,$next$$){$obj$$.id_kh&&link.find({$or:[{id_a:$obj$$._id.toString(),id_b:$obj$$.id_kh},{id_a:$obj$$.id_kh,id_b:$obj$$._id.toString()}]}).lean().exec(function($e$$,$rs$$){$rs$$&&0!==$rs$$.length||(new link({id_app:$obj$$.id_app,id_a:$obj$$.id_kh,id_b:$obj$$._id.toString(),collection_a:"dmkh",collection_b:"opportunity"})).save(function($e$$){$e$$&&console.error($e$$)})});$next$$&&$next$$(null,$obj$$)},$createLinkAndCode$$=function($user$$,
3
- $obj$$,$next$$){$createLink$$($user$$,$obj$$);$next$$(null,$obj$$)};(new controller($router$$,model,"opportunity",{sort:{user_created:-1},onFinding:function($user$$,$condition$$,$next$$){async.series({find_ten_kh:function($callback$$){$condition$$.ten_kh?customer.find({ten_kh:{$regex:$condition$$.ten_kh,$options:"i"}},{_id:1}).lean().exec(function($e$$,$khs$$){if($e$$)return $callback$$($e$$);delete $condition$$.ten_kh;var $id_khs$$=[];$khs$$.forEach(function($kh$$){$id_khs$$.push($kh$$._id.toString())});
1
+ 'use strict';const model=global.getModel("opportunity"),controller=require("../../controllers/controller"),customer=global.getModel("customer"),link=global.getModel("link"),async=require("async");
2
+ module.exports=function($router$$){const $createLink$$=function($user$$,$obj$$,$next$$){$obj$$.id_kh&&link.find({$or:[{id_a:$obj$$._id.toString(),id_b:$obj$$.id_kh},{id_a:$obj$$.id_kh,id_b:$obj$$._id.toString()}]}).lean().exec(function($e$$,$rs$$){$rs$$&&0!==$rs$$.length||(new link({id_app:$obj$$.id_app,id_a:$obj$$.id_kh,id_b:$obj$$._id.toString(),collection_a:"dmkh",collection_b:"opportunity"})).save(function($e$$){$e$$&&console.error($e$$)})});$next$$&&$next$$(null,$obj$$)},$createLinkAndCode$$=
3
+ function($user$$,$obj$$,$next$$){$createLink$$($user$$,$obj$$);$next$$(null,$obj$$)};(new controller($router$$,model,"opportunity",{sort:{user_created:-1},onFinding:function($user$$,$condition$$,$next$$){async.series({find_ten_kh:function($callback$$){$condition$$.ten_kh?customer.find({ten_kh:{$regex:$condition$$.ten_kh,$options:"i"}},{_id:1}).lean().exec(function($e$$,$khs$$){if($e$$)return $callback$$($e$$);delete $condition$$.ten_kh;const $id_khs$$=[];$khs$$.forEach(function($kh$$){$id_khs$$.push($kh$$._id.toString())});
4
4
  $condition$$.id_kh={$in:$id_khs$$};$callback$$()}):$callback$$()}},function($e$$){if($e$$)return $next$$($e$$);$next$$(null,$condition$$)})},onView:function($user$$,$items$$,$next$$){$items$$.joinModel2($user$$.current_id_app,customer,[{where:{id_kh:"_id"},fields:[{name:"ten_kh",value:"ten_kh"}]}],function(){$items$$.forEach(function($item$$){0==$item$$.tinh_tren&&($item$$.ten_tinh_tren="t\u1ed5ng c\u1ed9ng");1==$item$$.tinh_tren&&($item$$.ten_tinh_tren="h\u00e0ng ng\u00e0y");2==$item$$.tinh_tren&&
5
5
  ($item$$.ten_tinh_tren="h\u00e0ng th\u00e1ng");3==$item$$.tinh_tren&&($item$$.ten_tinh_tren="h\u00e0ng qu\u00fd");4==$item$$.tinh_tren&&($item$$.ten_tinh_tren="h\u00e0ng n\u0103m")});$next$$(null,$items$$)})},onCreating:function($user$$,$item$$,$next$$){$item$$.phu_trach||($item$$.phu_trach=$user$$.email);$next$$(null,$item$$)},onCreated:$createLinkAndCode$$,onUpdated:$createLinkAndCode$$})).route()};
@@ -10,8 +10,8 @@ async function createToken($appId$$,$room$$){const $session$$=await model.findOn
10
10
  Buffer.from("OPENVIDUAPP:"+configs.VIDEO_CONFERENCE_SERVER_SECRET).toString("base64"),"Content-Type":"application/json"}};request($options$$,($error$$,$response$$,$body$$)=>{if($body$$&&$body$$.token)return $resolve$$($body$$.token);if($response$$&&404===$response$$.statusCode)return $reject$$({message:"Phi\u00ean n\u00e0y ch\u01b0a \u0111\u01b0\u1ee3c m\u1edf ho\u1eb7c \u0111\u00e3 \u0111\u00f3ng",code:404});console.log("Error create token",$error$$,$body$$);return $reject$$($error$$||$body$$||"Kh\u00f4ng th\u1ec3 t\u1ea1o token cho phi\u00ean "+
11
11
  $room$$)})})}
12
12
  async function startRecord($appId$$,$room$$){if(!await model.findOne({_id:$room$$}))throw{message:"Phi\u00ean n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i",code:400};const $sessionId$$=`T${$appId$$}${$room$$}`.toUpperCase();return await new Promise(($resolve$$,$reject$$)=>{let $options$$={rejectUnauthorized:!1,uri:configs.VIDEO_CONFERENCE_SERVER_URL+"/api/recordings/start",method:"POST",json:{session:$sessionId$$},headers:{Authorization:"Basic "+Buffer.from("OPENVIDUAPP:"+configs.VIDEO_CONFERENCE_SERVER_SECRET).toString("base64"),"Content-Type":"application/json"}};
13
- request($options$$,async($error$$,$response$$,$body$$)=>{if($response$$)switch($response$$.statusCode){case 409,200:return $resolve$$($body$$);case 404:return $reject$$({message:"Phi\u00ean n\u00e0y ch\u01b0a \u0111\u01b0\u1ee3c m\u1edf",code:$response$$.statusCode});default:return $reject$$({message:"Kh\u00f4ng th\u1ec3 ghi l\u1ea1i phi\u00ean n\u00e0y",code:$response$$.statusCode})}else return $reject$$({message:"Kh\u00f4ng th\u1ec3 ghi l\u1ea1i phi\u00ean n\u00e0y",code:500})})})}
14
- module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"session",{sort:{date_created:-1},onCreating:($user$$,$data$$,$next$$)=>{delete $data$$.registers;$next$$(null,$data$$)},onCreated:async($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{delete $data$$.registers;$next$$(null,$data$$,$obj$$)},onUpdated:async($now$jscomp$1_sessionName_user$$,$obj$$,$next$$)=>{$now$jscomp$1_sessionName_user$$=new Date;if($obj$$.closed||
13
+ request($options$$,async($error$$,$response$$,$body$$)=>{if($response$$)switch($response$$.statusCode){case 409:case 200:return $resolve$$($body$$);case 404:return $reject$$({message:"Phi\u00ean n\u00e0y ch\u01b0a \u0111\u01b0\u1ee3c m\u1edf",code:$response$$.statusCode});default:return $reject$$({message:"Kh\u00f4ng th\u1ec3 ghi l\u1ea1i phi\u00ean n\u00e0y",code:$response$$.statusCode})}else return $reject$$({message:"Kh\u00f4ng th\u1ec3 ghi l\u1ea1i phi\u00ean n\u00e0y",code:500})})})}
14
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"session",{sort:{date_created:-1},onCreating:($user$$,$data$$,$next$$)=>{$data$$.registers=void 0;$next$$(null,$data$$)},onCreated:async($user$$,$obj$$,$next$$)=>{$next$$(null,$obj$$)},onUpdating:($user$$,$data$$,$obj$$,$next$$)=>{$data$$.registers=void 0;$next$$(null,$data$$,$obj$$)},onUpdated:async($now$jscomp$1_sessionName_user$$,$obj$$,$next$$)=>{$now$jscomp$1_sessionName_user$$=new Date;if($obj$$.closed||
15
15
  $now$jscomp$1_sessionName_user$$.getTime()<$obj$$.date_from.getTime()||$now$jscomp$1_sessionName_user$$.getTime()>$obj$$.date_to.getTime()){$now$jscomp$1_sessionName_user$$=$obj$$._id.toString();try{await closeSession($obj$$.id_app,$now$jscomp$1_sessionName_user$$)}catch($e$$){console.error("Error when close session",$e$$.message)}}$next$$(null,$obj$$)},onDeleting:async($sessionName$jscomp$1_user$$,$obj$$,$next$$)=>{$sessionName$jscomp$1_user$$=$obj$$._id.toString();try{await closeSession($obj$$.id_app,
16
16
  $sessionName$jscomp$1_user$$)}catch($e$$){console.error("Error when delete session",$e$$.message)}$next$$(null,$obj$$)},onView:($user$$,$items$$,$next$$)=>{async.series([$callback$$=>{$items$$.joinModel2(null,Trangthai,[{where:$a$$=>({ma_trang_thai:$a$$.trang_thai,ma_ct:"session"}),fields:["ten_trang_thai","color","allow_update"]}],function(){$callback$$()})},$callback$$=>{async.each($items$$,function($r$$,$callback1$$){var $prices$$=$r$$.prices||[];$prices$$.forEach($p$$=>{$p$$.id_app=$r$$.id_app});
17
17
  $prices$$.joinModel2($user$$.current_id_app,dmdvt,[{where:"ma_dvt",fields:["tg_qd","kieu_tg"]}],function(){$callback1$$()})},function(){$callback$$()})},$callback$$=>{$items$$.joinModel2($user$$.current_id_app,training,[{where:{course_id:"_id"},fields:[{ten_khoa_hoc:"title"},{trainer_user:"trainer_user"}]}],function(){$callback$$(null)})}],()=>{$next$$(null,$items$$)})}});$contr_router$$.createRoute(":session_id/register",async($req$$,$next$$)=>{let $session_id$$=$req$$.params.session_id;try{let $_session$$=
@@ -6,24 +6,24 @@ status:!0,user_created:$data_obj$$.user_created,user_updated:$data_obj$$.user_cr
6
6
  const createLink=async($attends_user$$,$obj$$,$next$$)=>{$obj$$.id_kh&&link.find({$or:[{id_a:$obj$$._id,id_b:$obj$$.id_kh},{id_a:$obj$$.id_kh,id_b:$obj$$._id}]}).lean().exec(function($e$$,$rs$$){$rs$$&&0!==$rs$$.length||(new link({id_app:$obj$$.id_app,id_a:$obj$$.id_kh,id_b:$obj$$._id,collection_a:"dmkh",collection_b:"task"})).save(function($e$$){$e$$&&console.error($e$$)})});$obj$$.id_dt&&link.find({$or:[{id_a:$obj$$._id,id_b:$obj$$.id_dt},{id_a:$obj$$.id_dt,id_b:$obj$$._id}]}).lean().exec(function($e$jscomp$0$$,
7
7
  $rs$$){$rs$$&&0!==$rs$$.length||(new link({id_app:$obj$$.id_app,id_a:$obj$$.id_dt,id_b:$obj$$._id,collection_a:"dmdt",collection_b:"task"})).save(function($e$$){$e$$&&console.error($e$$)})});if($obj$$.nh_cv&&global.mongoose.Types.ObjectId.isValid($obj$$.nh_cv)){$attends_user$$=$obj$$.attends||[];let $_group$$=await Group.findOne({_id:$obj$$.nh_cv});$_group$$&&($_group$$.attends=[...(new Set([...($_group$$.attends||[]),...$attends_user$$]))],$_group$$.save($e$$=>{$e$$&&console.error("Can't update task group",
8
8
  $e$$,$_group$$)}))}createSchedule($obj$$);$next$$(null,$obj$$)};
9
- module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{sort:{start_date:-1},users_receive_notification_default:[{trang_thai:"0",content:"C\u00f4ng vi\u1ec7c m\u1edbi: {{ten_cv}}",send_phu_trach:!0,send_attends:!0,send_admin:!0},{trang_thai:"1",content:'C\u00f4ng vi\u1ec7c "{{ten_cv}}" \u0111ang \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n',send_phu_trach:!0,send_attends:!0,send_admin:!0,send_to_customer:!0},{trang_thai:"3",content:'C\u00f4ng vi\u1ec7c "{{ten_cv}}" \u0111\u00e3 ho\u00e0n th\u00e0nh',
10
- send_phu_trach:!0,send_attends:!0,send_admin:!0,send_to_customer:!0},{trang_thai:"4",content:'C\u00f4ng vi\u1ec7c "{{ten_cv}}" \u0111\u00e3 t\u1ea1m d\u1eebng',send_phu_trach:!0,send_attends:!0,send_admin:!0},{trang_thai:"5",content:'C\u00f4ng vi\u1ec7c "{{ten_cv}}" \u0111ang ch\u1edd',send_phu_trach:!0,send_attends:!0,send_admin:!0}],onFinding:function($user$$,$condition$$,$next$$){console.time("Finding task");async.series({find_ten_kh:function($callback$$){setImmediate(()=>{$condition$$.ten_kh?
11
- customer.find({id_app:$user$$.current_id_app,ten_kh:{$regex:$condition$$.ten_kh,$options:"i"}},{_id:1}).lean().exec(function($e$$,$khs$$){if($e$$)return $callback$$($e$$);delete $condition$$.ten_kh;$e$$=underscore.pluck($khs$$,"_id");$condition$$.id_kh={$in:$e$$};$callback$$()}):$callback$$()})},find_ten_dt:function($callback$$){setImmediate(()=>{$condition$$.ten_dt?dmdt.find({id_app:$user$$.current_id_app,ten_dt:{$regex:$condition$$.ten_dt,$options:"i"}},{_id:1}).lean().exec(function($e$jscomp$6_id_khs$$,
12
- $khs$$){if($e$jscomp$6_id_khs$$)return $callback$$($e$jscomp$6_id_khs$$);delete $condition$$.ten_dt;$e$jscomp$6_id_khs$$=underscore.pluck($khs$$,"_id");$condition$$.id_dt={$in:$e$jscomp$6_id_khs$$};$callback$$()}):$callback$$()})}},function($e$$){if($e$$)return $next$$($e$$);console.timeEnd("Finding task");$next$$(null,$condition$$)})},onFound:($user$$,$condition$$,$items$$,$next$$)=>{$next$$(null,$items$$)},onView:function($user$$,$items$$,$next$$){console.time("task view");async.series({trangthai:function($callback$$){setImmediate(()=>
13
- {$items$$.filter($item$$=>void 0!==$item$$.progress).joinModel2(null,Trangthai,[{where:$a$$=>({ma_trang_thai:$a$$.progress.toString(),ma_ct:"TASK"}),fields:["ten_trang_thai","color","allow_update"]}],function(){$callback$$()})})},nh_cv:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.nh_cv).joinModel2($user$$.current_id_app,Group,[{where:{nh_cv:"_id"},fields:[{name:"ten_nh_cv",value:"group_name"}]}],function(){$callback$$(null,$items$$)})})},phu_trach:function($callback$$){setImmediate(()=>
14
- {(async()=>{await $items$$.filter($item$$=>$item$$.phu_trach).asyncJoinModel2($user$$.current_id_app,Participant,[{where:{phu_trach:"email"},fields:[{name:"nhom_phu_trach",value:"group_id"},{name:"ten_phu_trach",value:"name"}]}]);await $items$$.filter($item$$=>$item$$.nhom_phu_trach).asyncJoinModel2($user$$.current_id_app,UserGroup,[{where:{nhom_phu_trach:"_id"},fields:[{name:"ten_nhom_phu_trach",value:"group_name"}]}]);await $items$$.filter($item$$=>$item$$.nguoi_kiem_tra).asyncJoinModel2(null,User,
15
- [{where:{nguoi_kiem_tra:"email"},fields:[{name:"ten_nguoi_kiem_tra",value:"name"}]}]);await $items$$.filter($item$$=>$item$$.nguoi_thuc_hien).asyncJoinModel2(null,User,[{where:{nguoi_thuc_hien:"email"},fields:[{name:"ten_nguoi_thuc_hien",value:"name"}]}])})().then(()=>{$callback$$(null,$items$$)}).catch($e$$=>{$callback$$($e$$)})})},kh:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_kh).joinModel2($user$$.current_id_app,customer,[{where:{id_kh:"_id"},fields:[{name:"ten_kh",
16
- value:"ten_kh"}]}],function(){$callback$$(null,$items$$)})})},dkho:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_dokho).joinModel2($user$$.current_id_app,dokho,[{where:{id_dokho:"_id"},fields:[{name:"ten_dokho",value:"ten_dokho"}]}],function(){$callback$$(null,$items$$)})})},project:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_dt).joinModel2($user$$.current_id_app,dmdt,[{where:{id_dt:"_id"},fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback$$(null,
17
- $items$$)})})},bp:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_bp).joinModel2($user$$.current_id_app,Dmbp,[{where:{id_bp:"_id"},fields:[{name:"ten_bp",value:"ten_bp"}]}],function(){$callback$$(null,$items$$)})})},so3:$callback$$=>{setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_ct).joinModel2($user$$.current_id_app,SO3,[{where:$a$$=>({_id:$a$$.id_ct}),fields:["so_ct","ngay_ct","ma_kh","ten_kh"]}],function(){$callback$$(null,$items$$)})})},file:$callback$$=>{setImmediate(()=>
18
- {$items$$.filter($item$$=>$item$$.id_link).joinModel2($user$$.current_id_app,File,[{where:$item$$=>({id_link:$item$$._id}),setFields:($item$$,$data$$)=>{$item$$.avatarFile=$data$$}}],function(){$callback$$(null,$items$$)})})}},function(){setImmediate(()=>{const $last_week$$=new Date;$last_week$$.setDate($last_week$$.getDate()-7);$items$$.forEach(function($item$$){void 0===$item$$.ten_kh&&($item$$.ten_kh="");!$item$$.saved&&$item$$.finished_date&&3===$item$$.progress&&(new Date($item$$.finished_date)).getTime()<=
19
- $last_week$$.getTime()&&model.findOneAndUpdate({_id:$item$$._id},{saved:!0},()=>{})});console.timeEnd("task view");$next$$(null,$items$$)})})},onCreating:async($user$$,$obj$$,$next$$)=>{$obj$$.attends&&($obj$$.attends=[...(new Set($obj$$.attends))]);setImmediate(async()=>{$obj$$.ma_ct=ma_ct;$obj$$.due_date=$obj$$.due_date||$obj$$.start_date;if(!$obj$$.nh_cv&&$obj$$.group_id_link){var $TY_LE_HOA_HONG_g$$=await Group.findOne({id_link:$obj$$.group_id_link,id_app:$user$$.current_id_app,group_type:"TASK"});
20
- $TY_LE_HOA_HONG_g$$?$obj$$.nh_cv=$TY_LE_HOA_HONG_g$$._id.toString():$obj$$.group_name_link&&($TY_LE_HOA_HONG_g$$=await Group.create({group_type:"TASK",id_link:$obj$$.group_id_link,id_app:$user$$.current_id_app,group_name:$obj$$.group_name_link,phu_trach:$obj$$.phu_trach||$user$$.email,attends:$obj$$.attends}),$obj$$.nh_cv=$TY_LE_HOA_HONG_g$$._id.toString())}$TY_LE_HOA_HONG_g$$=((await App.findOne({_id:$user$$.current_id_app})).exfields||{}).ty_le_hoa_hong||0;var $hoa_hong_tong_tien_hang$$=0;if($obj$$.id_ct){let $so3Obj$$=
21
- await SO3.findOne({_id:$obj$$.id_ct});$so3Obj$$&&($so3Obj$$=$so3Obj$$.toObject(),$hoa_hong_tong_tien_hang$$=$so3Obj$$.details.map($d$$=>$d$$.tien_nt).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$hoa_hong_tong_tien_hang$$=Math.roundBy($hoa_hong_tong_tien_hang$$*$TY_LE_HOA_HONG_g$$/100))}$obj$$.ty_le_hoa_hong=$TY_LE_HOA_HONG_g$$;$obj$$.tien_hoa_hong=$hoa_hong_tong_tien_hang$$;3===$obj$$.progress&&($obj$$.finished_date=$obj$$.finished_date||new Date,$obj$$.da_thu=$obj$$.da_thu||$obj$$.thu_phi);$obj$$.da_thu&&($obj$$.ngay_ct=
22
- $obj$$.ngay_ct||new Date);if(!$obj$$.id_bp&&$obj$$.phu_trach)try{let $nv$$=await Dmnv.findOne({id_app:$obj$$.id_app,user:$obj$$.phu_trach},{ma_bp:1,bo_phan:1}).lean();if($nv$$){let $bo_phan$$=($nv$$.bo_phan||[]).filter($b$$=>!$b$$.den_ngay||$b$$.den_ngay>=new Date);if(0<$bo_phan$$.length){let $id_bp$$=await Dmbp.getInfo($obj$$.id_app,{ma_bp:$bo_phan$$[0].ma_bp},"_id");$obj$$.id_bp=$id_bp$$;await model.findOneAndUpdate({_id:$obj$$._id},{id_bp:$id_bp$$})}else if($nv$$.ma_bp){let $id_bp$$=await Dmbp.getInfo($obj$$.id_app,
23
- {ma_bp:$nv$$.ma_bp},"_id");$obj$$.id_bp=$id_bp$$;await model.findOneAndUpdate({_id:$obj$$._id},{id_bp:$id_bp$$})}}}catch($e$$){console.error($e$$)}$next$$(null,$obj$$)})},onUpdating:async($user$$,$data$$,$obj$$,$next$$)=>{$data$$.attends=$data$$.attends||$obj$$.attends;$data$$.attends&&($data$$.attends=[...(new Set($data$$.attends))]);setImmediate(async()=>{$data$$.ma_ct=$obj$$.ma_ct||ma_ct;$data$$.due_date=$data$$.due_date||$obj$$.due_date||$data$$.start_date||$obj$$.start_date;if(!$obj$$.tien_hoa_hong){var $TY_LE_HOA_HONG$$=
24
- ((await App.findOne({_id:$obj$$.id_app})).exfields||{}).ty_le_hoa_hong||0;let $phi_dich_vu_1_lan$$=0,$hoa_hong$$=0;if($obj$$.id_ct){let $so3Obj$$=await SO3.findOne({_id:$obj$$.id_ct});$so3Obj$$&&($so3Obj$$=$so3Obj$$.toObject(),$phi_dich_vu_1_lan$$=$so3Obj$$.details.map($d$$=>$d$$.tien_nt/($d$$.so_lan||1)).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$hoa_hong$$=Math.roundBy($phi_dich_vu_1_lan$$*$TY_LE_HOA_HONG$$/100))}$data$$.phi_dich_vu_1_lan=$phi_dich_vu_1_lan$$;$data$$.ty_le_hoa_hong=$TY_LE_HOA_HONG$$;$data$$.tien_hoa_hong=
25
- $hoa_hong$$}1!==$data$$.progress&&2!==$data$$.progress||$data$$.nguoi_thuc_hien||$obj$$.nguoi_thuc_hien||($data$$.nguoi_thuc_hien=$user$$.email);3===$data$$.progress&&($data$$.nguoi_thuc_hien||$obj$$.nguoi_thuc_hien||($data$$.nguoi_thuc_hien=$user$$.email),2!==$obj$$.progress||$data$$.nguoi_kiem_tra||($data$$.nguoi_kiem_tra=$user$$.email));$TY_LE_HOA_HONG$$=$data$$.progress||$obj$$.progress;3===$TY_LE_HOA_HONG$$&&$obj$$.progress!==$TY_LE_HOA_HONG$$&&($data$$.finished_date=new Date,$data$$.da_thu=
26
- $obj$$.da_thu||$data$$.da_thu||$obj$$.thu_phi);if($obj$$.da_thu||$data$$.da_thu)$data$$.ngay_ct=$obj$$.ngay_ct||$data$$.ngay_ct||new Date;$next$$(null,$data$$,$obj$$)})},onCreated:function($user$$,$obj$jscomp$0$$,$next$$){setImmediate(()=>{createLink($user$$,$obj$jscomp$0$$,function($e$$,$obj$$){if($e$$)return $next$$($e$$);$next$$(null,$obj$$)})})},onUpdated:function($user$$,$obj$jscomp$0$$,$next$$){setImmediate(()=>{createLink($user$$,$obj$jscomp$0$$,async($e$jscomp$11_m2g_so3Obj$$,$obj$$)=>{if($e$jscomp$11_m2g_so3Obj$$)return $next$$($e$jscomp$11_m2g_so3Obj$$);
9
+ module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,ma_ct.toLowerCase(),{sort:{start_date:-1},users_receive_notification_default:[{trang_thai:"0",content:"C\u00f4ng vi\u1ec7c m\u1edbi: {{ten_cv}}",send_phu_trach:!0,send_attends:!0,send_to_user_created:!1},{trang_thai:"1",content:'C\u00f4ng vi\u1ec7c "{{ten_cv}}" \u0111ang \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n',send_phu_trach:!0,send_attends:!0,send_to_customer:!0,send_to_user_created:!1},{trang_thai:"3",
10
+ content:'C\u00f4ng vi\u1ec7c "{{ten_cv}}" \u0111\u00e3 ho\u00e0n th\u00e0nh',send_phu_trach:!0,send_attends:!0,send_to_customer:!0,send_to_user_created:!1},{trang_thai:"4",content:'C\u00f4ng vi\u1ec7c "{{ten_cv}}" \u0111\u00e3 t\u1ea1m d\u1eebng',send_phu_trach:!0,send_attends:!0,send_to_user_created:!1},{trang_thai:"5",content:'C\u00f4ng vi\u1ec7c "{{ten_cv}}" \u0111ang ch\u1edd',send_phu_trach:!0,send_attends:!0,send_to_user_created:!1}],onFinding:function($user$$,$condition$$,$next$$){async.series({find_ten_kh:function($callback$$){setImmediate(()=>
11
+ {$condition$$.ten_kh?customer.find({id_app:$user$$.current_id_app,ten_kh:{$regex:$condition$$.ten_kh,$options:"i"}},{_id:1}).lean().exec(function($e$$,$khs$$){if($e$$)return $callback$$($e$$);delete $condition$$.ten_kh;$e$$=underscore.pluck($khs$$,"_id");$condition$$.id_kh={$in:$e$$};$callback$$()}):$callback$$()})},find_ten_dt:function($callback$$){setImmediate(()=>{$condition$$.ten_dt?dmdt.find({id_app:$user$$.current_id_app,ten_dt:{$regex:$condition$$.ten_dt,$options:"i"}},{_id:1}).lean().exec(function($e$jscomp$6_id_khs$$,
12
+ $khs$$){if($e$jscomp$6_id_khs$$)return $callback$$($e$jscomp$6_id_khs$$);delete $condition$$.ten_dt;$e$jscomp$6_id_khs$$=underscore.pluck($khs$$,"_id");$condition$$.id_dt={$in:$e$jscomp$6_id_khs$$};$callback$$()}):$callback$$()})}},function($e$$){if($e$$)return $next$$($e$$);$next$$(null,$condition$$)})},onFound:($user$$,$condition$$,$items$$,$next$$)=>{$next$$(null,$items$$)},onView:function($user$$,$items$$,$next$$){async.series({trangthai:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>
13
+ void 0!==$item$$.progress).joinModel2(null,Trangthai,[{where:$a$$=>({ma_trang_thai:$a$$.progress.toString(),ma_ct:"TASK"}),fields:["ten_trang_thai","color","allow_update"]}],function(){$callback$$()})})},nh_cv:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.nh_cv).joinModel2($user$$.current_id_app,Group,[{where:{nh_cv:"_id"},fields:[{name:"ten_nh_cv",value:"group_name"}]}],function(){$callback$$(null,$items$$)})})},phu_trach:function($callback$$){setImmediate(()=>{(async()=>
14
+ {await $items$$.filter($item$$=>$item$$.phu_trach).asyncJoinModel2($user$$.current_id_app,Participant,[{where:{phu_trach:"email"},fields:[{name:"nhom_phu_trach",value:"group_id"},{name:"ten_phu_trach",value:"name"}]}]);await $items$$.filter($item$$=>$item$$.nhom_phu_trach).asyncJoinModel2($user$$.current_id_app,UserGroup,[{where:{nhom_phu_trach:"_id"},fields:[{name:"ten_nhom_phu_trach",value:"group_name"}]}]);await $items$$.filter($item$$=>$item$$.nguoi_kiem_tra).asyncJoinModel2(null,User,[{where:{nguoi_kiem_tra:"email"},
15
+ fields:[{name:"ten_nguoi_kiem_tra",value:"name"}]}]);await $items$$.filter($item$$=>$item$$.nguoi_thuc_hien).asyncJoinModel2(null,User,[{where:{nguoi_thuc_hien:"email"},fields:[{name:"ten_nguoi_thuc_hien",value:"name"}]}])})().then(()=>{$callback$$(null,$items$$)}).catch($e$$=>{$callback$$($e$$)})})},kh:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_kh).joinModel2($user$$.current_id_app,customer,[{where:{id_kh:"_id"},fields:[{name:"ten_kh",value:"ten_kh"}]}],function(){$callback$$(null,
16
+ $items$$)})})},dkho:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_dokho).joinModel2($user$$.current_id_app,dokho,[{where:{id_dokho:"_id"},fields:[{name:"ten_dokho",value:"ten_dokho"}]}],function(){$callback$$(null,$items$$)})})},project:function($callback$$){setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_dt).joinModel2($user$$.current_id_app,dmdt,[{where:{id_dt:"_id"},fields:[{name:"ten_dt",value:"ten_dt"}]}],function(){$callback$$(null,$items$$)})})},bp:function($callback$$){setImmediate(()=>
17
+ {$items$$.filter($item$$=>$item$$.id_bp).joinModel2($user$$.current_id_app,Dmbp,[{where:{id_bp:"_id"},fields:[{name:"ten_bp",value:"ten_bp"}]}],function(){$callback$$(null,$items$$)})})},so3:$callback$$=>{setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_ct).joinModel2($user$$.current_id_app,SO3,[{where:$a$$=>({_id:$a$$.id_ct}),fields:["so_ct","ngay_ct","ma_kh","ten_kh"]}],function(){$callback$$(null,$items$$)})})},file:$callback$$=>{setImmediate(()=>{$items$$.filter($item$$=>$item$$.id_link).joinModel2($user$$.current_id_app,
18
+ File,[{where:$item$$=>({id_link:$item$$._id}),setFields:($item$$,$data$$)=>{$item$$.avatarFile=$data$$}}],function(){$callback$$(null,$items$$)})})}},function(){setImmediate(()=>{const $last_week$$=new Date;$last_week$$.setDate($last_week$$.getDate()-7);$items$$.forEach(function($item$$){void 0===$item$$.ten_kh&&($item$$.ten_kh="");!$item$$.saved&&$item$$.finished_date&&3===$item$$.progress&&(new Date($item$$.finished_date)).getTime()<=$last_week$$.getTime()&&model.findOneAndUpdate({_id:$item$$._id},
19
+ {saved:!0},()=>{})});$next$$(null,$items$$)})})},onCreating:async($user$$,$obj$$,$next$$)=>{$obj$$.attends&&($obj$$.attends=[...(new Set($obj$$.attends))]);setImmediate(async()=>{$obj$$.ma_ct=ma_ct;$obj$$.due_date=$obj$$.due_date||$obj$$.start_date;if(!$obj$$.nh_cv&&$obj$$.group_id_link){var $TY_LE_HOA_HONG_g$$=await Group.findOne({id_link:$obj$$.group_id_link,id_app:$user$$.current_id_app,group_type:"TASK"});$TY_LE_HOA_HONG_g$$?$obj$$.nh_cv=$TY_LE_HOA_HONG_g$$._id.toString():$obj$$.group_name_link&&
20
+ ($TY_LE_HOA_HONG_g$$=await Group.create({group_type:"TASK",id_link:$obj$$.group_id_link,id_app:$user$$.current_id_app,group_name:$obj$$.group_name_link,phu_trach:$obj$$.phu_trach||$user$$.email,attends:$obj$$.attends}),$obj$$.nh_cv=$TY_LE_HOA_HONG_g$$._id.toString())}$TY_LE_HOA_HONG_g$$=((await App.findOne({_id:$user$$.current_id_app})).exfields||{}).ty_le_hoa_hong||0;var $hoa_hong_tong_tien_hang$$=0;if($obj$$.id_ct){let $so3Obj$$=await SO3.findOne({_id:$obj$$.id_ct});$so3Obj$$&&($so3Obj$$=$so3Obj$$.toObject(),
21
+ $hoa_hong_tong_tien_hang$$=$so3Obj$$.details.map($d$$=>$d$$.tien_nt).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$hoa_hong_tong_tien_hang$$=Math.roundBy($hoa_hong_tong_tien_hang$$*$TY_LE_HOA_HONG_g$$/100))}$obj$$.ty_le_hoa_hong=$TY_LE_HOA_HONG_g$$;$obj$$.tien_hoa_hong=$hoa_hong_tong_tien_hang$$;3===$obj$$.progress&&($obj$$.finished_date=$obj$$.finished_date||new Date,$obj$$.da_thu=$obj$$.da_thu||$obj$$.thu_phi);$obj$$.da_thu&&($obj$$.ngay_ct=$obj$$.ngay_ct||new Date);if(!$obj$$.id_bp&&$obj$$.phu_trach)try{let $nv$$=
22
+ await Dmnv.findOne({id_app:$obj$$.id_app,user:$obj$$.phu_trach},{ma_bp:1,bo_phan:1}).lean();if($nv$$){let $bo_phan$$=($nv$$.bo_phan||[]).filter($b$$=>!$b$$.den_ngay||$b$$.den_ngay>=new Date);if(0<$bo_phan$$.length){let $id_bp$$=await Dmbp.getInfo($obj$$.id_app,{ma_bp:$bo_phan$$[0].ma_bp},"_id");$obj$$.id_bp=$id_bp$$;await model.findOneAndUpdate({_id:$obj$$._id},{id_bp:$id_bp$$})}else if($nv$$.ma_bp){let $id_bp$$=await Dmbp.getInfo($obj$$.id_app,{ma_bp:$nv$$.ma_bp},"_id");$obj$$.id_bp=$id_bp$$;await model.findOneAndUpdate({_id:$obj$$._id},
23
+ {id_bp:$id_bp$$})}}}catch($e$$){console.error($e$$)}$next$$(null,$obj$$)})},onUpdating:async($user$$,$data$$,$obj$$,$next$$)=>{$data$$.attends=$data$$.attends||$obj$$.attends;$data$$.attends&&($data$$.attends=[...(new Set($data$$.attends))]);setImmediate(async()=>{$data$$.ma_ct=$obj$$.ma_ct||ma_ct;$data$$.due_date=$data$$.due_date||$obj$$.due_date||$data$$.start_date||$obj$$.start_date;if(!$obj$$.tien_hoa_hong){var $TY_LE_HOA_HONG$$=((await App.findOne({_id:$obj$$.id_app})).exfields||{}).ty_le_hoa_hong||
24
+ 0;let $phi_dich_vu_1_lan$$=0,$hoa_hong$$=0;if($obj$$.id_ct){let $so3Obj$$=await SO3.findOne({_id:$obj$$.id_ct});$so3Obj$$&&($so3Obj$$=$so3Obj$$.toObject(),$phi_dich_vu_1_lan$$=$so3Obj$$.details.map($d$$=>$d$$.tien_nt/($d$$.so_lan||1)).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$hoa_hong$$=Math.roundBy($phi_dich_vu_1_lan$$*$TY_LE_HOA_HONG$$/100))}$data$$.phi_dich_vu_1_lan=$phi_dich_vu_1_lan$$;$data$$.ty_le_hoa_hong=$TY_LE_HOA_HONG$$;$data$$.tien_hoa_hong=$hoa_hong$$}1!==$data$$.progress&&2!==$data$$.progress||
25
+ $data$$.nguoi_thuc_hien||$obj$$.nguoi_thuc_hien||($data$$.nguoi_thuc_hien=$user$$.email);3===$data$$.progress&&($data$$.nguoi_thuc_hien||$obj$$.nguoi_thuc_hien||($data$$.nguoi_thuc_hien=$user$$.email),2!==$obj$$.progress||$data$$.nguoi_kiem_tra||($data$$.nguoi_kiem_tra=$user$$.email));$TY_LE_HOA_HONG$$=$data$$.progress||$obj$$.progress;3===$TY_LE_HOA_HONG$$&&$obj$$.progress!==$TY_LE_HOA_HONG$$&&($data$$.finished_date=new Date,$data$$.da_thu=$obj$$.da_thu||$data$$.da_thu||$obj$$.thu_phi);if($obj$$.da_thu||
26
+ $data$$.da_thu)$data$$.ngay_ct=$obj$$.ngay_ct||$data$$.ngay_ct||new Date;$next$$(null,$data$$,$obj$$)})},onCreated:function($user$$,$obj$jscomp$0$$,$next$$){setImmediate(()=>{createLink($user$$,$obj$jscomp$0$$,function($e$$,$obj$$){if($e$$)return $next$$($e$$);$next$$(null,$obj$$)})})},onUpdated:function($user$$,$obj$jscomp$0$$,$next$$){setImmediate(()=>{createLink($user$$,$obj$jscomp$0$$,async($e$jscomp$11_m2g_so3Obj$$,$obj$$)=>{if($e$jscomp$11_m2g_so3Obj$$)return $next$$($e$jscomp$11_m2g_so3Obj$$);
27
27
  if($e$jscomp$11_m2g_so3Obj$$=await Message2setting.findOne({id_link:$obj$$._id.toString()})){$obj$$.phu_trach!==$e$jscomp$11_m2g_so3Obj$$.phu_trach&&($e$jscomp$11_m2g_so3Obj$$.phu_trach=$obj$$.phu_trach,$e$jscomp$11_m2g_so3Obj$$.attends.push($obj$$.user_created));var $attends$$=[...(new Set([...$e$jscomp$11_m2g_so3Obj$$.attends,...$obj$$.attends]))];$e$jscomp$11_m2g_so3Obj$$.attends=$attends$$;$e$jscomp$11_m2g_so3Obj$$.save();Message2.updateMany({id_link:$obj$$._id.toString()},{$set:{attends:$attends$$}}).then($rs$$=>
28
28
  {console.log("update message2",$rs$$)})}if($obj$$.id_ct&&($e$jscomp$11_m2g_so3Obj$$=await SO3.findOne({_id:$obj$$.id_ct}))){$e$jscomp$11_m2g_so3Obj$$=$e$jscomp$11_m2g_so3Obj$$.toObject();$attends$$=await model.countDocuments({id_ct:$obj$$.id_ct,progress:3});const $task_doing$$=await model.countDocuments({id_ct:$obj$$.id_ct,progress:1}),$task_cancel$$=await model.countDocuments({id_ct:$obj$$.id_ct,progress:5}),$total_task$$=await model.countDocuments({id_ct:$obj$$.id_ct});let $so3Obj_views$$=await so3Controller.asyncView($user$$,
29
29
  [$e$jscomp$11_m2g_so3Obj$$],{});$attends$$!==$total_task$$||"5"==$e$jscomp$11_m2g_so3Obj$$.trang_thai||"4"!=$e$jscomp$11_m2g_so3Obj$$.trang_thai&&"3"!=$e$jscomp$11_m2g_so3Obj$$.trang_thai?(($attends$$||$task_doing$$)&&"3"==$e$jscomp$11_m2g_so3Obj$$.trang_thai&&"4"!=$e$jscomp$11_m2g_so3Obj$$.trang_thai&&(await SO3.findOneAndUpdate({_id:$obj$$.id_ct},{trang_thai:"4"}),$e$jscomp$11_m2g_so3Obj$$.trang_thai="4",controller.pushNotification(so3Controller,$so3Obj_views$$[0],"update")),$total_task$$===$task_cancel$$&&
@@ -1,2 +1,6 @@
1
- 'use strict';const model=global.getModel("usergroup"),participant=global.getModel("participant"),controller=require("../../controllers/controller"),usergroup=function($router$$){(new controller($router$$,model,"usergroup",{sort:{group_name:1},onView:async($user$$,$items$$,$next$$)=>{await $items$$.asyncJoinModel2($user$$.current_id_app,participant,{where:{phu_trach:"email"},fields:{ten_phu_trach:"name"}});await $items$$.asyncJoinModel2($user$$.current_id_app,model,{where:{group_mother:"_id"},fields:{group_mother_name:"group_name"}});
2
- $next$$(null,$items$$)},onCreated:async($user$$,$obj$$,$next$$)=>{(await participant.find({id_app:$obj$$.id_app,group_id:$obj$$._id.toString()})).forEach($p$$=>{$p$$.phu_trach=$obj$$.phu_trach;$p$$.save()});$next$$(null,$obj$$)},onUpdated:async($user$$,$obj$$,$next$$)=>{(await participant.find({id_app:$obj$$.id_app,group_id:$obj$$._id.toString()})).forEach($p$$=>{$p$$.phu_trach=$obj$$.phu_trach;$p$$.save()});$next$$(null,$obj$$)}})).route()};module.exports=usergroup;
1
+ 'use strict';const model=global.getModel("usergroup"),participant=global.getModel("participant"),controller=require("../../controllers/controller"),getSysorder=function($item$$,$callback$$){let $sysorder$$=$item$$._id.toString();$item$$.group_mother?model.findOne({_id:$item$$.group_mother}).lean().exec(function($e$$,$item_me$$){$item_me$$?getSysorder($item_me$$,function($rs$$){$sysorder$$=$rs$$+"---"+$sysorder$$;$callback$$($sysorder$$)}):$callback$$($sysorder$$)}):$callback$$($sysorder$$)},usergroup=
2
+ function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"usergroup",{sort:{group_name:1},onView:async($user$$,$items$$,$next$$)=>{await $items$$.asyncJoinModel2($user$$.current_id_app,participant,{where:{phu_trach:"email"},fields:{ten_phu_trach:"name"}});await $items$$.asyncJoinModel2($user$$.current_id_app,model,{where:{group_mother:"_id"},fields:{group_mother_name:"group_name"}});$next$$(null,$items$$)},onCreated:async($user$$,$obj$$,$next$$)=>{(await participant.find({id_app:$obj$$.id_app,
3
+ group_id:$obj$$._id.toString()})).forEach($p$$=>{$p$$.phu_trach=$obj$$.phu_trach;$p$$.save()});getSysorder($obj$$,function($rs$$){$obj$$.sysorder=$rs$$;$obj$$.bac=$rs$$.split("---").length;model.findOneAndUpdate({_id:$obj$$._id},{$set:{bac:$obj$$.bac,sysorder:$obj$$.sysorder,loai_nh:1}},function($e$$){$e$$&&console.log($e$$)});$next$$(null,$obj$$)})},onUpdated:async($user$$,$obj$$,$next$$)=>{(await participant.find({id_app:$obj$$.id_app,group_id:$obj$$._id.toString()})).forEach($p$$=>{$p$$.phu_trach=
4
+ $obj$$.phu_trach;$p$$.save()});getSysorder($obj$$,async function($loai_nh_rs$$){$obj$$.sysorder=$loai_nh_rs$$;$obj$$.bac=$loai_nh_rs$$.split("---").length;$loai_nh_rs$$=1;await model.findOne({group_mother:$obj$$._id.toString()})&&($loai_nh_rs$$=0);$obj$$.loai_nh=$loai_nh_rs$$;model.findOneAndUpdate({_id:$obj$$._id},{$set:{bac:$obj$$.bac,sysorder:$obj$$.sysorder,loai_nh:$loai_nh_rs$$}},function($e$$){$e$$&&console.log($e$$)});$next$$(null,$obj$$)})}});$contr_router$$.route();$contr_router$$.deleting=
5
+ function($user$$,$obj$$,$next$$){if(0===$obj$$.loai_nh)return $next$$(Error("Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p x\u00f3a nh\u00f3m m\u1eb9"));$next$$(null,$obj$$)};$contr_router$$.on("saved",function($obj$jscomp$0$$){const $group_mother$$=$obj$jscomp$0$$.group_mother;$group_mother$$&&model.findOneAndUpdate({id_app:$obj$jscomp$0$$.id_app,_id:$group_mother$$},{$set:{loai_nh:0}},function($error$$,$obj$$){$error$$?console.error($error$$):$obj$$?console.log("updated "+$obj$$._id):console.log("Not found mother account:"+
6
+ $group_mother$$)})});$contr_router$$.on("deleted",function($obj$jscomp$0$$){$obj$jscomp$0$$.group_mother&&model.findOne({group_mother:$obj$jscomp$0$$.group_mother},function($error$jscomp$0$$,$acc$$){$error$jscomp$0$$||$acc$$||model.findOneAndUpdate({id_app:$obj$jscomp$0$$.id_app,_id:$obj$jscomp$0$$.group_mother},{$set:{loai_nh:1}},function($error$$,$obj$$){$error$$||$obj$$&&console.log("updated "+$obj$$._id)})})})};module.exports=usergroup;
@@ -1,6 +1,6 @@
1
- 'use strict';const calllog=global.getModel("calllog"),customer=global.getModel("customer"),lienhe=global.getModel("lienhe"),App=global.getModel("app"),Controller=require("../../controllers/controller");
2
- module.exports=function($router$$){$router$$.route("/:id_app/call/:token").get(async function($req$$,$res$$){let $callData$$={...$req$$.query,...$req$$.body};$callData$$.phone=$callData$$.phone||$callData$$.src;$callData$$.extend=$callData$$.extend||$callData$$.dst;$callData$$.call_status=$callData$$.state||$callData$$.status;delete $callData$$.status;if(!$callData$$.phone)return $res$$.status(400).send({errors:"Phone number is required"});let $token$$=$req$$.params.token,$id_app$$=$req$$.params.id_app,
3
- $participant$$;$callData$$.extend&&($participant$$=await global.getModel("participant").findOne({ext:{$in:$callData$$.extend.split(",")}}))&&($id_app$$=$participant$$.id_app);$callData$$.id_app=$id_app$$;App.findOne({_id:$id_app$$}).lean().exec(async($contact_e_where$$,$app_cus_phone$$)=>{if($contact_e_where$$)return $res$$.status(400).send($contact_e_where$$);if(!$app_cus_phone$$)return console.eror("Not found app"),$res$$.status(400).send({errors:"Request is bad"});if($app_cus_phone$$.voiip_access_token!==
4
- $token$$)return console.error("Token is not valud"),$res$$.status(400).send({errors:"Token is invalid"});$app_cus_phone$$=$callData$$.phone.replace("+","");$contact_e_where$$={id_app:$id_app$$};6>$app_cus_phone$$.length?$contact_e_where$$.dien_thoai=$app_cus_phone$$:("0"===$app_cus_phone$$.substring(0,1)&&($app_cus_phone$$=$app_cus_phone$$.substring(1)),"84"===$app_cus_phone$$.substring(0,2)&&($app_cus_phone$$=$app_cus_phone$$.substring(2)),$contact_e_where$$.dien_thoai={$regex:$app_cus_phone$$,$options:"i"});
5
- $app_cus_phone$$=await customer.findOne($contact_e_where$$).lean();$app_cus_phone$$||($contact_e_where$$=lienhe.findOne($contact_e_where$$).lean(),$contact_e_where$$.id_kh&&($app_cus_phone$$=await customer.findOne({_id:$contact_e_where$$.id_kh}).lean()));$app_cus_phone$$&&($callData$$.id_kh=$app_cus_phone$$._id,$callData$$.ten_kh=$app_cus_phone$$.ten_kh,$callData$$.dia_chi=$app_cus_phone$$.dia_chi);(new calllog($callData$$)).save(($ctrl_e$$,$rs$$)=>{if($ctrl_e$$)return $res$$.status(400).send($ctrl_e$$);
6
- if("Ring"===$callData$$.call_status){$ctrl_e$$=global.controllers.CALLLOG;let $users_will_receive$$;$participant$$&&($users_will_receive$$=[$participant$$.email]);Controller.pushNotification($ctrl_e$$,$rs$$.toObject(),"new",void 0,void 0,{data:$callData$$,users_will_receive:$users_will_receive$$})}$res$$.send({result:"ok"})})})})};
1
+ 'use strict';const async=require("async"),calllog=global.getModel("calllog"),customer=global.getModel("customer"),lienhe=global.getModel("lienhe"),App=global.getModel("app"),Controller=require("../../controllers/controller");
2
+ module.exports=function($router$$){$router$$.route("/:id_app/call/:token").get(async function($req$$,$res$$){let $g_callData$$={...$req$$.query,...$req$$.body};$g_callData$$.phone=$g_callData$$.phone||$g_callData$$.src;$g_callData$$.extend=$g_callData$$.extend||$g_callData$$.dst;$g_callData$$.call_status=$g_callData$$.state||$g_callData$$.status;delete $g_callData$$.status;if(!$g_callData$$.phone)return $res$$.status(400).send({errors:"Phone number is required"});App.find({voiip_access_token:$req$$.params.token},
3
+ {_id:1,name:1}).lean().exec(async($e$$,$apps$$)=>{if($e$$)return $res$$.status(400).send($e$$);async.map($apps$$,($app$$,$callback$$)=>{setImmediate(async()=>{let $callData$$={...$g_callData$$},$id_app$$=$app$$._id.toString();$callData$$.id_app=$id_app$$;var $cus_phone$$=$callData$$.phone.replace("+",""),$contact_where$$={id_app:$id_app$$};6>$cus_phone$$.length?$contact_where$$.dien_thoai=$cus_phone$$:("0"===$cus_phone$$.substring(0,1)&&($cus_phone$$=$cus_phone$$.substring(1)),"84"===$cus_phone$$.substring(0,
4
+ 2)&&($cus_phone$$=$cus_phone$$.substring(2)),$contact_where$$.dien_thoai={$regex:$cus_phone$$,$options:"i"});$cus_phone$$=await customer.findOne($contact_where$$).lean();$cus_phone$$||($contact_where$$=lienhe.findOne($contact_where$$).lean(),$contact_where$$.id_kh&&($cus_phone$$=await customer.findOne({_id:$contact_where$$.id_kh}).lean()));$cus_phone$$&&($callData$$.id_kh=$cus_phone$$._id,$callData$$.ten_kh=$cus_phone$$.ten_kh,$callData$$.dia_chi=$cus_phone$$.dia_chi);(new calllog($callData$$)).save(async($ctrl_e$$,
5
+ $rs$$)=>{if($ctrl_e$$)return $callback$$($ctrl_e$$);if("Ring"===$callData$$.call_status){$ctrl_e$$=global.controllers.CALLLOG;let $users_will_receive$$;if($callData$$.extend){let $participant$$;($participant$$=await global.getModel("participant").findOne({id_app:$id_app$$,ext:{$in:$callData$$.extend.split(",")}},{email:1}))&&($users_will_receive$$=[$participant$$.email])}Controller.pushNotification($ctrl_e$$,$rs$$.toObject(),"new",void 0,void 0,{data:$callData$$,users_will_receive:$users_will_receive$$})}$callback$$()})})},
6
+ $e$$=>{if($e$$)return $res$$.status(400).send($e$$);$res$$.send({result:"ok"})})})})};
@@ -1,5 +1,5 @@
1
1
  'use strict';const tinhgiatb=require("../../libs/tinhgiatb"),controller=require("../../controllers/controllerRPT"),_Notification=global.getModel("notification");
2
2
  module.exports=function($router$$){new controller($router$$,"tinhgiatb",async function($req$$,$callback$$){const $query$$=$req$$.query;if(!$query$$.nam||!$query$$.tu_thang||!$query$$.den_thang)return $callback$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1: nam,tu_thang,den_thang");const $moment$$=require("moment");var $_app_ngay_ks$$=await global.getModel("app").findOne({_id:$req$$.user.current_id_app});if(!$_app_ngay_ks$$)return $callback$$("C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i");
3
3
  $_app_ngay_ks$$=$moment$$($_app_ngay_ks$$.ngay_ks).startOf("date").toDate();let $tu_ngay$$=$moment$$([Number($query$$.nam),Number($query$$.tu_thang)-1,1]).startOf("month").toDate();if($_app_ngay_ks$$.getTime()>=$tu_ngay$$.getTime())return $callback$$(`\u0110\u00e3 kh\u00f3a s\u1ed5 \u0111\u1ebfn ng\u00e0y ${$moment$$($_app_ngay_ks$$).format("DD/MM/YYYY")}`);const $id_app$$=$query$$.id_app,$zquery$$=Object.assign({},$query$$,{id_app:$id_app$$});tinhgiatb($zquery$$,function($error$$){const $email$$=
4
- $req$$.user.email;$error$$?(console.error("l\u1ed7i t\u00ednh gia trung b\u00ecnh:",$error$$,$zquery$$),_Notification.createNotification($email$$,$email$$,$error$$.message||$error$$,$error$$.message||$error$$,null,{id_app:$id_app$$},!0,$req$$.access_token,!0)):(console.log("\u0110\u00e3 t\u00ednh xong gi\u00e1 trung b\u00ecnh",$zquery$$),_Notification.createNotification($email$$,$email$$,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong",
5
- null,{id_app:$id_app$$},!0,$req$$.access_token,!0))});$callback$$(null,[{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. B\u1ea1n c\u00f3 th\u1ec3 chuy\u1ec3n sang trang kh\u00e1c \u0111\u1ec3 l\u00e0m vi\u1ec7c. Khi ch\u01b0\u01a1ng tr\u00ecnh th\u1ef1c hi\u1ec7n xong s\u1ebd g\u1eedi th\u00f4ng b\u00e1o cho b\u1ea1n."}])},{stream:!1})};
4
+ $req$$.user.email;$error$$?(console.error("l\u1ed7i t\u00ednh gia trung b\u00ecnh:",$error$$,$zquery$$),_Notification.createNotification($email$$,$email$$,$error$$.message||$error$$,$error$$.message||$error$$,null,{id_app:$id_app$$},!0,$req$$.access_token,!0)):_Notification.createNotification($email$$,$email$$,"Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong","Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 t\u00ednh gi\u00e1 trung b\u00ecnh xong",null,{id_app:$id_app$$},
5
+ !0,$req$$.access_token,!0)});$callback$$(null,[{message:"Ch\u01b0\u01a1ng tr\u00ecnh \u0111ang th\u1ef1c hi\u1ec7n. B\u1ea1n c\u00f3 th\u1ec3 chuy\u1ec3n sang trang kh\u00e1c \u0111\u1ec3 l\u00e0m vi\u1ec7c. Khi ch\u01b0\u01a1ng tr\u00ecnh th\u1ef1c hi\u1ec7n xong s\u1ebd g\u1eedi th\u00f4ng b\u00e1o cho b\u1ea1n."}])},{stream:!1})};
@@ -1,4 +1,4 @@
1
1
  'use strict';const cdpstk=require("../../libs/cdpstk"),Account=global.getModel("account"),underscore=require("underscore"),controller=require("../../controllers/controllerRPT");
2
- module.exports=function($router$$){new controller($router$$,"cdpstk",function($query_req$$,$callback$$){$query_req$$=$query_req$$.query;if(!$query_req$$.tu_ngay||!$query_req$$.den_ngay)return $callback$$("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1 tu_ngay,den_ngay");const $id_app$$=$query_req$$.id_app;cdpstk($query_req$$,function($error$$,$report$$){if($error$$)return $callback$$($error$$);$report$$.joinModel($id_app$$,Account,[{akey:"tk",bkey:"tk",fields:[{name:"ten_tk",value:"ten_tk"},
3
- {name:"ten_tk2",value:"ten_tk2"}]}],function($report$$){$report$$.push({tk:"T\u1ed5ng c\u1ed9ng",dk_no:$report$$.csum("dk_no",{bac_tk:1}),dk_co:$report$$.csum("dk_co",{bac_tk:1}),ps_no:$report$$.csum("ps_no",{bac_tk:1}),ps_co:$report$$.csum("ps_co",{bac_tk:1}),ck_no:$report$$.csum("ck_no",{bac_tk:1}),ck_co:$report$$.csum("ck_co",{bac_tk:1}),dk_no_nt:$report$$.csum("dk_no_nt",{bac_tk:1}),dk_co_nt:$report$$.csum("dk_co_nt",{bac_tk:1}),ps_no_nt:$report$$.csum("ps_no_nt",{bac_tk:1}),ps_co_nt:$report$$.csum("ps_co_nt",
4
- {bac_tk:1}),ck_no_nt:$report$$.csum("ck_no_nt",{bac_tk:1}),ck_co_nt:$report$$.csum("ck_co_nt",{bac_tk:1}),systotal:1,bold:!0});$report$$=underscore.sortBy($report$$,function($r$$){return $r$$.tk});$callback$$(null,$report$$)})})})};
2
+ module.exports=function($router$$){new controller($router$$,"cdpstk",function($query_req$$,$callback$$){$query_req$$=$query_req$$.query;if(!$query_req$$.tu_ngay||!$query_req$$.den_ngay)return $callback$$("B\u00e1o c\u00e1o n\u00e0y y\u00eau c\u1ea7u c\u00e1c tham s\u1ed1 tu_ngay,den_ngay");const $id_app$$=$query_req$$.id_app;cdpstk($query_req$$,function($error$$,$report$$){if($error$$)return $callback$$($error$$);$report$$.joinModel2($id_app$$,Account,[{where:"tk",fields:["ten_tk","ten_tk2"]}],function($report$$){$report$$.push({tk:"T\u1ed5ng c\u1ed9ng",
3
+ dk_no:$report$$.csum("dk_no",{bac_tk:1}),dk_co:$report$$.csum("dk_co",{bac_tk:1}),ps_no:$report$$.csum("ps_no",{bac_tk:1}),ps_co:$report$$.csum("ps_co",{bac_tk:1}),ck_no:$report$$.csum("ck_no",{bac_tk:1}),ck_co:$report$$.csum("ck_co",{bac_tk:1}),dk_no_nt:$report$$.csum("dk_no_nt",{bac_tk:1}),dk_co_nt:$report$$.csum("dk_co_nt",{bac_tk:1}),ps_no_nt:$report$$.csum("ps_no_nt",{bac_tk:1}),ps_co_nt:$report$$.csum("ps_co_nt",{bac_tk:1}),ck_no_nt:$report$$.csum("ck_no_nt",{bac_tk:1}),ck_co_nt:$report$$.csum("ck_co_nt",
4
+ {bac_tk:1}),systotal:1,bold:!0});$report$$=underscore.sortBy($report$$,function($r$$){return $r$$.tk});$callback$$(null,$report$$)})})})};
@@ -1,11 +1,12 @@
1
1
  'use strict';const async=require("async"),qts=global.getModel("qts"),qts_dieuchinh=global.getModel("qts_dieuchinh"),sotinhkh=global.getModel("sotinhkh"),controller=require("../../controllers/controllerRPT"),moment=require("moment");
2
2
  module.exports=function($router$$){new controller($router$$,"chitiettaisan",function($req$$,$callback$jscomp$0$$){let $condition$$=$req$$.query;$condition$$.nam=$condition$$.nam?Number($condition$$.nam):(new Date).getFullYear();$condition$$.thang=$condition$$.thang?Number($condition$$.thang):(new Date).getMonth()+1;let $id_app$$=$condition$$.id_app,$ngay_cuoi_thang$$,$ngay_dau_thang$$,$toi_ky$$;$ngay_cuoi_thang$$=$condition$$.den_ngay?moment($condition$$.den_ngay).endOf("date").toDate():moment(new Date($condition$$.nam,
3
3
  $condition$$.thang-1,15)).endOf("month").toDate();$toi_ky$$=$ngay_cuoi_thang$$.getMonth()+1;$ngay_dau_thang$$=moment(new Date($condition$$.nam,$condition$$.thang-1,15)).startOf("month").toDate();async.series({id_tss:function($callback$$){let $q_ts$$={id_app:$id_app$$};$q_ts$$.ngay_tang={$lte:$ngay_cuoi_thang$$};$q_ts$$.$or=[{ngay_giam:null}];if($condition$$.tu_ngay){let $tu_ngay$$=moment($condition$$.tu_ngay).startOf("date").toDate();$q_ts$$.ngay_tang.$gte=moment($condition$$.tu_ngay).startOf("date").toDate();
4
- $q_ts$$.$or.ngay_giam={$gte:$tu_ngay$$}}else $q_ts$$.$or.ngay_giam={$gte:$ngay_dau_thang$$};$condition$$.ma_bp&&($q_ts$$.ma_bp=$condition$$.ma_bp);$condition$$.ma_loai_ts&&($q_ts$$.ma_loai_ts=$condition$$.ma_loai_ts);$condition$$.ma_gd&&($q_ts$$.ma_gd=$condition$$.ma_gd);$condition$$.id_ts&&($q_ts$$.id_ts=$condition$$.id_ts);qts.find($q_ts$$).lean().exec(function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$callback$$(null,$rs$$)})}},function($e$jscomp$2$$,$rs$jscomp$0$$){if($e$jscomp$2$$)return $callback$jscomp$0$$($e$jscomp$2$$);
5
- const $ts$$=$rs$jscomp$0$$.id_tss,$dsts$$=$ts$$.map($r$$=>$r$$._id.toString());async.series({khauhao_nt:function($callback$$){const $q$$={id_app:$id_app$$,nam:{$lte:$condition$$.nam-1}};$q$$.id_ts={$in:$dsts$$};sotinhkh.find($q$$).lean().exec(async function($e$jscomp$0$$,$kh$$){if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);await $kh$$.filter($r$$=>$r$$.ma_tang_giam_ts).asyncJoinModel2($id_app$$,"dmtanggiamts",{where:"ma_tang_giam_ts",fields:{kieu_dc:"kieu"}});$kh$$.forEach($r$$=>{"2"==$r$$.kieu_dc&&
6
- ($r$$.nguyen_gia=0-$r$$.nguyen_gia,$r$$.gia_tri_da_kh=0-$r$$.gia_tri_da_kh,$r$$.gia_tri_con_lai=0-$r$$.gia_tri_con_lai,$r$$.gia_tri_kh_ky=0-$r$$.gia_tri_kh_ky)});$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$||($rs$$=[]);$callback$$(null,$rs$$)})})},khauhao_nn:function($callback$$){const $q$$={id_app:$id_app$$,nam:$condition$$.nam,thang:{$lte:$toi_ky$$}};$q$$.id_ts={$in:$dsts$$};sotinhkh.find($q$$).lean().exec(async function($e$jscomp$0$$,$kh$$){if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);
7
- await $kh$$.filter($r$$=>$r$$.ma_tang_giam_ts).asyncJoinModel2($id_app$$,"dmtanggiamts",{where:"ma_tang_giam_ts",fields:{kieu_dc:"kieu"}});$kh$$.forEach($r$$=>{"2"==$r$$.kieu_dc&&($r$$.nguyen_gia=0-$r$$.nguyen_gia,$r$$.gia_tri_da_kh=0-$r$$.gia_tri_da_kh,$r$$.gia_tri_con_lai=0-$r$$.gia_tri_con_lai,$r$$.gia_tri_kh_ky=0-$r$$.gia_tri_kh_ky)});$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$||($rs$$=[]);$callback$$(null,$rs$$)})})},nguyengia:function($callback$$){const $q$$=
8
- {id_ts:{$in:$dsts$$}};$q$$.$where="this.ky + this.nam * 12<="+($toi_ky$$+12*$condition$$.nam);qts_dieuchinh.find($q$$).lean().exec(async function($e$$,$rs$$){if($e$$)return $callback$$($e$$);await $rs$$.asyncJoinModel2($id_app$$,"dmtanggiamts",{where:"ma_tang_giam_ts",fields:{kieu_dc:"kieu"}});$ts$$.forEach(function($ts$$){let $nguyen_gia_dc$$=$rs$$.filter($r$$=>$r$$.id_ts==$ts$$._id.toString()).map($r$$=>"2"==$r$$.kieu_dc?0-$r$$.nguyen_gia:$r$$.nguyen_gia).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$gia_tri_da_kh_dc$$=
9
- $rs$$.filter($r$$=>$r$$.id_ts==$ts$$._id.toString()).map($r$$=>"2"==$r$$.kieu_dc?0-$r$$.gia_tri_da_kh:$r$$.gia_tri_da_kh).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$gia_tri_con_lai_dc$$=$rs$$.filter($r$$=>$r$$.id_ts==$ts$$._id.toString()).map($r$$=>"2"==$r$$.kieu_dc?0-$r$$.gia_tri_con_lai:$r$$.gia_tri_con_lai).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$ts$$.nguyen_gia=$ts$$.details.csum("nguyen_gia")+$nguyen_gia_dc$$;$ts$$.gia_tri_da_kh=$ts$$.details.csum("gia_tri_da_kh")+$gia_tri_da_kh_dc$$;$ts$$.gia_tri_con_lai=
10
- $ts$$.details.csum("gia_tri_con_lai")+$gia_tri_con_lai_dc$$});$callback$$(null,$ts$$)})}},function($e$$,$rs$$){if($e$$)return $callback$jscomp$0$$($e$$);let $stt$$=1;$ts$$.forEach(function($r$$){$r$$.gia_tri_kh_nam_nay=$rs$$.khauhao_nn.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});$r$$.gia_tri_kh_nam_truoc=$r$$.gia_tri_da_kh+$rs$$.khauhao_nt.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});$r$$.gia_tri_kh_luy_ke=$r$$.gia_tri_kh_nam_nay+$r$$.gia_tri_kh_nam_truoc;$r$$.gia_tri_con_lai=$r$$.nguyen_gia-
11
- $r$$.gia_tri_kh_luy_ke;$r$$.gia_tri_kh_ky=$r$$.so_ky_kh?$r$$.nguyen_gia/$r$$.so_ky_kh:0;$r$$.stt=$stt$$;$stt$$+=1});$e$$={bold:!0,ten_ts:"T\u1ed5ng c\u1ed9ng",nguyen_gia:$ts$$.csum("nguyen_gia"),gia_tri_kh_nam_nay:$ts$$.csum("gia_tri_kh_nam_nay"),gia_tri_kh_nam_truoc:$ts$$.csum("gia_tri_kh_nam_truoc"),gia_tri_da_kh:$ts$$.csum("gia_tri_da_kh"),gia_tri_kh_luy_ke:$ts$$.csum("gia_tri_kh_luy_ke"),gia_tri_con_lai:$ts$$.csum("gia_tri_con_lai")};$callback$jscomp$0$$(null,$ts$$.concat($e$$))})})})};
4
+ $q_ts$$.$or.ngay_giam={$gte:$tu_ngay$$}}else $q_ts$$.$or.ngay_giam={$gte:$ngay_dau_thang$$};$condition$$.ma_bp&&($q_ts$$.ma_bp=$condition$$.ma_bp);$condition$$.ma_kho&&($q_ts$$.ma_kho=$condition$$.ma_kho);$condition$$.ma_loai_ts&&($q_ts$$.ma_loai_ts=$condition$$.ma_loai_ts);$condition$$.ma_gd&&($q_ts$$.ma_gd=$condition$$.ma_gd);$condition$$.id_ts&&($q_ts$$.id_ts=$condition$$.id_ts);qts.find($q_ts$$).lean().exec(function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$callback$$(null,$rs$$)})}},function($e$jscomp$2$$,
5
+ $rs$jscomp$0$$){if($e$jscomp$2$$)return $callback$jscomp$0$$($e$jscomp$2$$);const $ts$$=$rs$jscomp$0$$.id_tss,$dsts$$=$ts$$.map($r$$=>$r$$._id.toString());async.series({khauhao_nt:function($callback$$){const $q$$={id_app:$id_app$$,nam:{$lte:$condition$$.nam-1}};$q$$.id_ts={$in:$dsts$$};sotinhkh.find($q$$).lean().exec(async function($e$jscomp$0$$,$kh$$){if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);await $kh$$.filter($r$$=>$r$$.ma_tang_giam_ts).asyncJoinModel2($id_app$$,"dmtanggiamts",{where:"ma_tang_giam_ts",
6
+ fields:{kieu_dc:"kieu"}});$kh$$.forEach($r$$=>{"2"==$r$$.kieu_dc&&($r$$.nguyen_gia=0-$r$$.nguyen_gia,$r$$.gia_tri_da_kh=0-$r$$.gia_tri_da_kh,$r$$.gia_tri_con_lai=0-$r$$.gia_tri_con_lai,$r$$.gia_tri_kh_ky=0-$r$$.gia_tri_kh_ky)});$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,$rs$$){if($e$$)return $callback$$($e$$);$rs$$||($rs$$=[]);$callback$$(null,$rs$$)})})},khauhao_nn:function($callback$$){const $q$$={id_app:$id_app$$,nam:$condition$$.nam,thang:{$lte:$toi_ky$$}};$q$$.id_ts={$in:$dsts$$};
7
+ sotinhkh.find($q$$).lean().exec(async function($e$jscomp$0$$,$kh$$){if($e$jscomp$0$$)return $callback$$($e$jscomp$0$$);await $kh$$.filter($r$$=>$r$$.ma_tang_giam_ts).asyncJoinModel2($id_app$$,"dmtanggiamts",{where:"ma_tang_giam_ts",fields:{kieu_dc:"kieu"}});$kh$$.forEach($r$$=>{"2"==$r$$.kieu_dc&&($r$$.nguyen_gia=0-$r$$.nguyen_gia,$r$$.gia_tri_da_kh=0-$r$$.gia_tri_da_kh,$r$$.gia_tri_con_lai=0-$r$$.gia_tri_con_lai,$r$$.gia_tri_kh_ky=0-$r$$.gia_tri_kh_ky)});$kh$$.groupBy("id_ts",["gia_tri_kh_ky"],function($e$$,
8
+ $rs$$){if($e$$)return $callback$$($e$$);$rs$$||($rs$$=[]);$callback$$(null,$rs$$)})})},nguyengia:function($callback$$){const $q$$={id_ts:{$in:$dsts$$}};$q$$.$where="this.ky + this.nam * 12<="+($toi_ky$$+12*$condition$$.nam);qts_dieuchinh.find($q$$).lean().exec(async function($e$$,$rs$$){if($e$$)return $callback$$($e$$);await $rs$$.asyncJoinModel2($id_app$$,"dmtanggiamts",{where:"ma_tang_giam_ts",fields:{kieu_dc:"kieu"}});$ts$$.forEach(function($ts$$){let $nguyen_gia_dc$$=$rs$$.filter($r$$=>$r$$.id_ts==
9
+ $ts$$._id.toString()).map($r$$=>"2"==$r$$.kieu_dc?0-$r$$.nguyen_gia:$r$$.nguyen_gia).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$gia_tri_da_kh_dc$$=$rs$$.filter($r$$=>$r$$.id_ts==$ts$$._id.toString()).map($r$$=>"2"==$r$$.kieu_dc?0-$r$$.gia_tri_da_kh:$r$$.gia_tri_da_kh).reduce(($a$$,$b$$)=>$a$$+$b$$,0),$gia_tri_con_lai_dc$$=$rs$$.filter($r$$=>$r$$.id_ts==$ts$$._id.toString()).map($r$$=>"2"==$r$$.kieu_dc?0-$r$$.gia_tri_con_lai:$r$$.gia_tri_con_lai).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$ts$$.nguyen_gia=$ts$$.details.csum("nguyen_gia")+
10
+ $nguyen_gia_dc$$;$ts$$.gia_tri_da_kh=$ts$$.details.csum("gia_tri_da_kh")+$gia_tri_da_kh_dc$$;$ts$$.gia_tri_con_lai=$ts$$.details.csum("gia_tri_con_lai")+$gia_tri_con_lai_dc$$});$callback$$(null,$ts$$)})}},function($e$$,$rs$$){if($e$$)return $callback$jscomp$0$$($e$$);let $stt$$=1;$ts$$.forEach(function($r$$){$r$$.gia_tri_kh_nam_nay=$rs$$.khauhao_nn.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});$r$$.gia_tri_kh_nam_truoc=$r$$.gia_tri_da_kh+$rs$$.khauhao_nt.csum("gia_tri_kh_ky",{id_ts:$r$$._id.toString()});
11
+ $r$$.gia_tri_kh_luy_ke=$r$$.gia_tri_kh_nam_nay+$r$$.gia_tri_kh_nam_truoc;$r$$.gia_tri_con_lai=$r$$.nguyen_gia-$r$$.gia_tri_kh_luy_ke;$r$$.gia_tri_kh_ky=$r$$.so_ky_kh?$r$$.nguyen_gia/$r$$.so_ky_kh:0;$r$$.stt=$stt$$;$stt$$+=1});$e$$={bold:!0,ten_ts:"T\u1ed5ng c\u1ed9ng",nguyen_gia:$ts$$.csum("nguyen_gia"),gia_tri_kh_nam_nay:$ts$$.csum("gia_tri_kh_nam_nay"),gia_tri_kh_nam_truoc:$ts$$.csum("gia_tri_kh_nam_truoc"),gia_tri_da_kh:$ts$$.csum("gia_tri_da_kh"),gia_tri_kh_luy_ke:$ts$$.csum("gia_tri_kh_luy_ke"),
12
+ gia_tri_con_lai:$ts$$.csum("gia_tri_con_lai")};$callback$jscomp$0$$(null,$ts$$.concat($e$$))})})})};