flexbiz-server
Version:
Flexible Server
21 lines (20 loc) • 10.3 kB
JavaScript
const model=global.getModel("assbooking"),controller=require("../../controllers/controller"),{isSupperAdmin}=require("../../libs/utils"),{spend}=require("../../libs/blockchainconnect"),AssProduct=global.getModel("assproduct"),async=require("async"),moment=require("moment");
module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"assbooking",{sort:{date_created:-1},notNeedRight:!0,requireOtp:($data$$,$options$$)=>$data$$.trang_thai=="9"||isSupperAdmin($options$$.user.email.toLowerCase())?!1:!0,onFinding:async($user$$,$condition$$,$next$$)=>{$next$$(null,$condition$$)},onView:async($user$$,$items$$,$next$$)=>{await $items$$.asyncJoinModel2($user$$.current_id_app,AssProduct,{where:{id_product:"id"},fields:["ten_san_pham",{hinh_anh_ks:"hinh_anh"},
"logo","ma_loai","wallet_hotel","ds_phong",{user_hotel2:"user_hotel"}]});$items$$.forEach(async $item$$=>{$item$$.thong_tin_phong=($item$$.ds_phong||[]).find($f$$=>($f$$.ma_phong||"").toLowerCase()===($item$$.ma_phong||"").toLowerCase());delete $item$$.ds_phong;$item$$.trang_thai=="1"&&$item$$.ngay_nhan_phong&&moment($item$$.ngay_nhan_phong).toDate().getTime()<moment().endOf("date").toDate().getTime()&&($item$$.trang_thai="8",await model.updateOne({_id:$item$$._id},{trang_thai:"8"}));$item$$.user_hotel2&&
$item$$.id_product&&$item$$.user_hotel!=$item$$.user_hotel2&&(await model.updateOne({_id:$item$$._id},{user_hotel:$item$$.user_hotel2}),$item$$.user_hotel=$item$$.user_hotel2);delete $item$$.user_hotel2});$next$$(null,$items$$)},onCreating:async($user$$,$obj$$,$next$$)=>{const $hotel$$=await global.getModel("assproduct").findOne({id_app:$obj$$.id_app,id:$obj$$.id_product,status:!0}).lean();if(!$hotel$$)return Logger.error("error booking",$obj$$),$next$$("Kh\u00e1ch s\u1ea1n kh\u00f4ng t\u1ed3n t\u1ea1i");
if(!$hotel$$.wallet_hotel||!$hotel$$.user_hotel)return Logger.error("error booking: chua khai bao dia chi vi khach san",$hotel$$.wallet_hotel,$hotel$$),$next$$("Ch\u01b0a khai b\u00e1o \u0111\u1ecba ch\u1ec9 v\u00ed v\u00e0 user cho kh\u00e1ch s\u1ea1n");if($user$$.email===$hotel$$.user_hotel.toLowerCase())return $next$$("Ch\u1ee7 kh\u00e1ch s\u1ea1n kh\u00f4ng th\u1ec3 t\u1ef1 \u0111\u1eb7t ph\u00f2ng \u1edf kh\u00e1ch s\u1ea1n m\u00ecnh");var $period_tong_so_voucher$$=await global.getModel("assperiod").findOne({id_app:$obj$$.id_app,
id_product:$obj$$.id_product,status:!0}).lean();if(!$period_tong_so_voucher$$)return $next$$("Ch\u01b0a khai b\u00e1o voucher cho kh\u00e1ch s\u1ea1n n\u00e0y");const $ds_phong$$=$hotel$$.ds_phong;if(!$ds_phong$$||$ds_phong$$.length==0)return $next$$("Ch\u01b0a khai b\u00e1o danh s\u00e1ch ph\u00f2ng cho kh\u00e1ch s\u1ea1n n\u00e0y");let $phong_dat$$=$ds_phong$$.find($p$$=>($p$$.ma_phong||"").toLowerCase()===($obj$$.ma_phong||"").toLowerCase());if(!$phong_dat$$)return Logger.error("error booking",
$ds_phong$$,$obj$$.ma_phong),$next$$("Ph\u00f2ng b\u1ea1n \u0111\u1eb7t kh\u00f4ng t\u1ed3n t\u1ea1i");if($phong_dat$$.gia_voucher!==$obj$$.don_gia_vc)return $next$$("\u0110\u01a1n gi\u00e1 m\u1ed9t \u0111\u00eam kh\u00f4ng h\u1ee3p l\u1ec7");$obj$$.user_hotel=$hotel$$.user_hotel;$obj$$.wallet_hotel=$hotel$$.wallet_hotel;$obj$$.so_luong_vc=$obj$$.don_gia_vc*$obj$$.so_dem;$obj$$.id_period=$period_tong_so_voucher$$.id;$obj$$.menh_gia=$period_tong_so_voucher$$.gia;$obj$$.gia_tri_can_thanh_toan=$obj$$.menh_gia*
$obj$$.don_gia_vc*$obj$$.so_dem+$obj$$.so_dem*($phong_dat$$.gia_tri_tra_them||0);$obj$$.voucher_thanh_toan=$obj$$.voucher_thanh_toan||[];await $obj$$.voucher_thanh_toan.asyncJoinModel2($user$$.current_id_app,"assinvestment",{where:"token",fields:["id_product","ten_san_pham","id_period"]});if($obj$$.voucher_thanh_toan.find($v$$=>!$v$$.id_period))return Logger.error("error voucher booking",$obj$$.voucher_thanh_toan),$next$$("Voucher d\u00f9ng \u0111\u1ec3 \u0111\u1eb7t ph\u00f2ng kh\u00f4ng h\u1ee3p l\u1ec7");
await $obj$$.voucher_thanh_toan.asyncJoinModel2($user$$.current_id_app,"assperiod",{where:{id_period:"id"},fields:[{menh_gia:"gia"}]});if($obj$$.voucher_thanh_toan.find($v$$=>!$v$$.menh_gia))return Logger.error("error voucher booking",$obj$$.voucher_thanh_toan),$next$$("Voucher d\u00f9ng \u0111\u1ec3 \u0111\u1eb7t ph\u00f2ng kh\u00f4ng h\u1ee3p l\u1ec7");$period_tong_so_voucher$$=$obj$$.voucher_thanh_toan.map($v$$=>$v$$.so_luong||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0);if($obj$$.so_dem>$period_tong_so_voucher$$)return $next$$("M\u1ed7i \u0111\u00eam c\u1ea7n s\u1eed d\u1ee5ng \u00edt nh\u1ea5t m\u1ed9t voucher");
$obj$$.voucher_thanh_toan.forEach($v$$=>{$v$$.gia_tri=$v$$.menh_gia*$v$$.so_luong});$obj$$.gia_tri_da_thanh_toan=$obj$$.voucher_thanh_toan.map($v$$=>$v$$.gia_tri||0).reduce(($a$$,$b$$)=>$a$$+$b$$,0);$obj$$.chenh_lech=$obj$$.gia_tri_can_thanh_toan-$obj$$.gia_tri_da_thanh_toan;let $to_address$$=$hotel$$.wallet_hotel;const $sent$$=[];async.mapSeries($obj$$.voucher_thanh_toan||[],($voucher$$,$cb$$)=>{setImmediate(async()=>{let $address$$=$voucher$$.wallet_address,$denom$$=$voucher$$.token,$amount$$=$voucher$$.so_luong;
try{const $rs$$=await spend($user$$.current_id_app,$user$$.token,$address$$,$to_address$$,{denom:$denom$$,amount:$amount$$,memo:"\u0110\u1eb7t ph\u00f2ng kh\u00e1ch s\u1ea1n"});if($rs$$.code){if($rs$$.code===5)return $cb$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 voucher \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y");$cb$$("Kh\u00f4ng th\u1ec3 chuy\u1ec3n voucher t\u1eeb v\u00ed kh\u00e1ch h\u00e0ng sang v\u00ed kh\u00e1ch s\u1ea1n, L\u1ed7i: "+$rs$$.rawLog)}else $sent$$.push({denom:$denom$$,
amount:$amount$$,memo:"\u0110\u1eb7t ph\u00f2ng kh\u00e1ch s\u1ea1n",address:$address$$,to_address:$to_address$$}),$cb$$(null)}catch($e$$){Logger.error("error send voucher from user wallet to hotel wallet",$e$$),$cb$$($e$$.message||$e$$.error||$e$$)}})},$e$$=>{$e$$?$sent$$.length>0?async.mapSeries($sent$$,($voucher$$,$cb$$)=>{setImmediate(async()=>{let $to_address$$=$voucher$$.address,$address$$=$voucher$$.to_address,$denom$$=$voucher$$.denom,$amount$$=$voucher$$.amount;try{const $rs$$=await spend($user$$.current_id_app,
null,$address$$,$to_address$$,{denom:$denom$$,amount:$amount$$,memo:"Ho\u00e0n tr\u1ea3 l\u1ea1i voucher do \u0111\u1eb7t ph\u00f2ng th\u1ea5t b\u1ea1i",username:$hotel$$.user_hotel});if($rs$$.code)return $rs$$.code===5?$cb$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 voucher \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y"):$cb$$($rs$$.rawLog);$cb$$(null)}catch($e$$){Logger.error($e$$,{username:$hotel$$.user_hotel,address:$address$$}),$cb$$($e$$.message||$e$$.error||$e$$)}})},$_e$$=>{Logger.error("Error ho\u00e0n tr\u1ea3 l\u1ea1i voucher do kh\u00f4ng \u0111\u1ee7 ti\u1ec1n",
$_e$$);$next$$($e$$)}):$next$$($e$$):$next$$(null,$obj$$)})},onErrorSave:async($user$$,$obj$$,$error$$,$action$$)=>{Logger.error("error assbooking",$error$$);if($action$$=="add"){const $hotel$$=await global.getModel("assproduct").findOne({id_app:$obj$$.id_app,id:$obj$$.id_product,status:!0}).lean();if($hotel$$&&$hotel$$.wallet_hotel&&$hotel$$.user_hotel&&$obj$$.voucher_thanh_toan){let $address$$=$hotel$$.wallet_hotel;async.mapSeries($obj$$.voucher_thanh_toan,($voucher$$,$cb$$)=>{setImmediate(async()=>
{let $to_address$$=$voucher$$.wallet_address,$denom$$=$voucher$$.token,$amount$$=$voucher$$.so_luong;try{const $rs$$=await spend($user$$.current_id_app,null,$address$$,$to_address$$,{denom:$denom$$,amount:$amount$$,memo:"Ho\u00e0n tr\u1ea3 l\u1ea1i voucher do \u0111\u1eb7t ph\u00f2ng th\u1ea5t b\u1ea1i",username:$hotel$$.user_hotel});if($rs$$.code)return $rs$$.code===5?$cb$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 voucher \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y"):$cb$$($rs$$.rawLog);$cb$$(null)}catch($e$$){Logger.error($e$$,
{username:$hotel$$.user_hotel,address:$address$$}),$cb$$($e$$.message||$e$$.error||$e$$)}})},$_e$$=>{Logger.error("Error ho\u00e0n tr\u1ea3 l\u1ea1i voucher",$_e$$)})}else Logger.error("xu ly loi khi luu: khong tim thay khac san")}}});$contr_router$$.deleting=function($user$$,$obj$$,$fn$$){if(!isSupperAdmin($user$$.email.toLowerCase()))return $fn$$("B\u1ea1n kh\u00f4ng th\u1ec3 x\u00f3a");$fn$$(null,$obj$$)};$contr_router$$.updating=async function($user$$,$data$$,$obj$$,$fn$$){if($obj$$.trang_thai==
"7"||$obj$$.trang_thai=="8"||$obj$$.trang_thai=="9")return $fn$$("Kh\u00f4ng th\u1ec3 c\u1eadp nh\u1eadt phi\u1ebfu n\u00e0y");if(moment($obj$$.ngay_nhan_phong).toDate().getTime()<moment().endOf("date").toDate().getTime())return model.updateOne({_id:$obj$$._id},{trang_thai:"8"}),$fn$$("Phi\u1ebfu \u0111\u1eb7t ph\u00f2ng n\u00e0y \u0111\u00e3 h\u1ebft h\u1ea1n");const $hotel$$=await global.getModel("assproduct").findOne({id_app:$obj$$.id_app,id:$obj$$.id_product,status:!0}).lean();if(!$hotel$$)return $fn$$("Kh\u00e1ch s\u1ea1n kh\u00f4ng t\u1ed3n t\u1ea1i");
if($obj$$.trang_thai=$data$$.trang_thai)switch($data$$.trang_thai){case "7":let $address$$=$hotel$$.wallet_hotel;async.mapSeries($obj$$.voucher_thanh_toan.filter($v$$=>!$v$$.da_hoan_tra),($voucher$$,$cb$$)=>{setImmediate(async()=>{let $to_address$$=$voucher$$.wallet_address,$denom$$=$voucher$$.token,$amount$$=$voucher$$.so_luong;try{const $rs$$=await spend($user$$.current_id_app,null,$address$$,$to_address$$,{denom:$denom$$,amount:$amount$$,memo:"Ho\u00e0n tr\u1ea3 l\u1ea1i voucher do \u0111\u1eb7t ph\u00f2ng th\u1ea5t b\u1ea1i",
username:$hotel$$.user_hotel});if($rs$$.code)return $rs$$.code===5?$cb$$("B\u1ea1n kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y"):$cb$$($rs$$.rawLog);$voucher$$.da_hoan_tra=!0;$cb$$(null)}catch($e$$){Logger.error($e$$),$cb$$($e$$.message||$e$$.error||$e$$)}})},$_e$$=>{Logger.error("Error ho\u00e0n tr\u1ea3 l\u1ea1i voucher",$_e$$);$obj$$.voucher_thanh_toan=$obj$$.voucher_thanh_toan;$fn$$(null,$obj$$,$obj$$)});return}$user$$.email===$obj$$.user_created&&
$data$$.kh_xac_nhan_nhan_phong&&($obj$$.kh_xac_nhan_nhan_phong=$data$$.kh_xac_nhan_nhan_phong);$user$$.email===$hotel$$.user_hotel&&$data$$.ks_xac_nhan_nhan_phong&&($obj$$.ks_xac_nhan_nhan_phong=$data$$.ks_xac_nhan_nhan_phong);let $kh_np$$=$obj$$.kh_xac_nhan_nhan_phong||$obj$$.kh_xac_nhan_nhan_phong;($obj$$.ks_xac_nhan_nhan_phong||$obj$$.ks_xac_nhan_nhan_phong)&&$kh_np$$&&($data$$.trang_thai="9");$fn$$(null,$obj$$,$obj$$)};$contr_router$$.route()};