diff --git a/app/Admin/Controllers/LiveContinueController.php b/app/Admin/Controllers/LiveContinueController.php index 8bf4eb7..66d40a2 100644 --- a/app/Admin/Controllers/LiveContinueController.php +++ b/app/Admin/Controllers/LiveContinueController.php @@ -206,7 +206,7 @@ class LiveContinueController extends AdminController )->api([ 'method'=>'get', 'data'=> $feeKeys, - 'url' =>admin_url('feelist') + 'url' =>admin_url('live-feelist') ]), ]), diff --git a/app/Admin/Controllers/LiveExitController.php b/app/Admin/Controllers/LiveExitController.php new file mode 100644 index 0000000..87e9eb0 --- /dev/null +++ b/app/Admin/Controllers/LiveExitController.php @@ -0,0 +1,186 @@ +baseForm()->body([ + + ]); + } + + public function doForm(){ + + $feeKeys =[]; + $feeKeys['oldman_id'] = '${oldman_id}'; + $feeKeys['add_extends'] = '${add_extends}'; + $feeKeys['del_extends'] = '${del_extends}'; + + $page = $this->basePage()->body([ + amisMake()->Card()->className('border-0')->body( + amisMake()->Wrapper()->className('p-0')->body( + amisMake()->Grid()->className('relative')->columns([ + amisMake()->Wrapper()->sm(8)->body([ + amisMake()->Panel()->title('结算表单')->body( + amisMake()->form()->title('')->panelClassName('border-0')->mode('horizontal')->name('base_form') + ->api(admin_url('live-continue-do')) + ->body([ + amisMake()->FieldSetControl()->title('客人信息')->collapsable(true)->body([ + amisMake()->Service()->api([ + "method"=>'get', + "url" => admin_url('oldmen/${oldman_id}/edit'), + "data"=>[ + '_action' => 'getData', + ], + "sendOn" => "this.oldman_id > 0 " + ]), + amisMake()->GroupControl()->body([ + amisMake()->PickerControl('oldman_id', '姓名') + ->valueField('id') + ->labelField('name') + ->joinValues(false)->extractValue(true) + ->size('lg') + ->source([ + 'method' => 'get', + 'url' => admin_url('oldmen?_action=getData&live_in='.Oldmen::STATUS_LIVE), + 'data' => [ + 'name'=>'${term}', + ] + ]) + ->pickerSchema( + [ + 'mode' => 'table', + 'name' => 'monitor_list', + 'headerToolbar' => amisMake()->form() + ->wrapWithPanel(false) + ->className('text-right') + ->target('monitor_list') + ->mode('inline') + ->body([ + amisMake()->TextControl('term', '姓名/身份证号')->addOn( + amis('submit')->label(__('admin.search'))->level('primary') + ) + ]), + 'columns' => [ + TableColumn::make()->name('name')->label('姓名'), + TableColumn::make()->name('card_no')->label('身份证号码'), + ] + ] + )->value(0) + ->required(true), + + amisMake()->RadiosControl('sex', '性别')->options([ + 1=>'男',2=>'女' + ])->disabled(true), + ]), + amisMake()->GroupControl()->body([ + amisMake()->TextControl('card_no', '身份证号码')->disabled(true), + amisMake()->DateControl('birthday', '出生日期')->format('YYYY-MM-DD')->disabled(true), + ]), + + amisMake()->GroupControl()->body([ + amisMake()->TextControl('floor_name', '楼栋')->disabled(true), + amisMake()->TextControl('agreement_no', '协议号码')->disabled(true), + ]), + amisMake()->GroupControl()->body([ + amisMake()->RadiosControl('nurse_lv', '护理等级')->options(Keyword::getByParentKey('nurse_lv')->pluck('name', 'value'))->disabled(true), + ]), + ]), + + + amisMake()->FieldSetControl()->className('mt-10')->title('已缴费明细')->collapsable(true)->body( + amisMake()->FieldSetControl()->title('基础费用')->className('mt-5')->collapsable(true)->size('base')->body( + amisMake()->Service()->schemaApi([ + "method"=>'get', + "url" => admin_url('live-const-flow').'?oldman_id=${oldman_id}', + ]) + ), + ), + + amisMake()->FieldSetControl()->className('mt-10')->title('附加项')->collapsable(true)->body([ + amisMake()->ComboControl('del_extends','收费项')->multiple(true)->items([ + amisMake()->TextControl('name', '名称'), + Components::make()->decimalControl('fee', '金额') + ]), + amisMake()->ComboControl('add_extends','抵扣项')->multiple(true)->items([ + amisMake()->TextControl('name', '名称'), + Components::make()->decimalControl('fee', '金额') + ]), + ]), + ]) + ->actions([ + amis('button')->label("生成清单")->level('primary') + ->onEvent([ + 'click'=>[ + 'actions'=>[ + [ + 'actionType'=>'reload', + 'componentId'=>'fee_table' + ], + [ + 'actionType'=>'setValue', + 'componentId'=>'fee_table', + 'args'=>[ + 'value'=> $feeKeys + ] + ] + ] + ] + ]), + amis('submit')->label('确认结算')->confirmText('是否确认结算,并且已查看结算费用清单?') + ->redirect('live-in') + ->level('danger'), + ]), + ), + ]), + amisMake()->Wrapper()->sm(4)->className('absolute bottom-20 w-2/6')->body([ + amisMake()->Panel()->title('结算清单')->body([ + amisMake()->Service()->name('fee_table_name')->id('fee_table') + ->data($feeKeys) + ->body( + amisMake()->table()->affixHeader(false) + ->title('') + ->source('${rows}') + ->combineNum(2) + ->columns([ + amisMake()->TableColumn()->name('name')->label('名称'), + amisMake()->TableColumn()->name('fee_name')->label('费用项'), + amisMake()->TableColumn()->name('fee_value')->label('费用'), + ])->affixRow([ + amis('text')->text('合计')->colSpan(2), + amis('tpl')->tpl('${SUM(ARRAYMAP(rows, item => item.fee_value))}') + ]), + )->api([ + 'method'=>'get', + 'data'=> $feeKeys, + 'url' =>admin_url('exit-feelist') + ]), + ]), + + ]), + ]), + ) + ), + ]); + + return $this->response()->success($page); + } + + public function do(Request $request){ + + } +} diff --git a/app/Admin/Controllers/LiveInController.php b/app/Admin/Controllers/LiveInController.php index 1f9dd94..0c1f898 100644 --- a/app/Admin/Controllers/LiveInController.php +++ b/app/Admin/Controllers/LiveInController.php @@ -215,7 +215,7 @@ class LiveInController extends AdminController )->api([ 'method'=>'get', 'data'=> $feeKeys, - 'url' =>admin_url('feelist') + 'url' =>admin_url('live-feelist') ]), ]), diff --git a/app/Admin/Controllers/OldmenController.php b/app/Admin/Controllers/OldmenController.php index bf61c40..50d932d 100644 --- a/app/Admin/Controllers/OldmenController.php +++ b/app/Admin/Controllers/OldmenController.php @@ -12,6 +12,8 @@ use Slowlyo\OwlAdmin\Controllers\AdminController; use App\Services\Admin\OldmenService; use Illuminate\Http\Request; use App\Admin\Components; +use App\Models\ConstFlow; +use App\Models\Oldmen; use Carbon\Carbon; /** @@ -154,8 +156,11 @@ class OldmenController extends AdminController return $this->response()->success($page); } - - public function feelist(Request $request){ + /** + * 生成结算费用清单 + */ + public function liveFeelist(Request $request) + { $rows = $addFee = $delFee = []; foreach($request->input() as $key => $value){ if($key == 'add_extends'){ @@ -209,6 +214,53 @@ class OldmenController extends AdminController ]); } + public function exitFeelist(Request $request) + { + $rows = $addFee = $delFee = []; + $oldMan = Oldmen::find($request->input('oldman_id', 0)); + if($oldMan){ + $flowList = ConstFlow::where('oldman_id', $oldMan->id) + ->whereIn('const_type', [ConstFlow::TYPE_IN, ConstFlow::TYPE_CONTINUE]) + ->whereBetween('start_at', [$oldMan->live_in_at, $oldMan->avliable_at])//开始时间在用户这段时间内的清单 + ->get(); + foreach($flowList as $flow){ + $rows[] = [ + 'name' => '缴费记录', + 'fee_name' => ConstFlow::typeMap()[$flow->const_type].'【'.$flow->created_at->format('m-d H:i:s').'】', + 'fee_value' => $flow->money, + ]; + } + } + + $addFee = $request->input('add_extends') ?? []; + $delFee = $request->input('del_extends') ?? []; + foreach($addFee as $item){ + if(isset($item['name']) && isset($item['fee'])){ + $rows[] = [ + 'name' => '抵扣项', + 'fee_name' => $item['name'], + 'fee_value' => $item['fee'], + ]; + } + } + foreach($delFee as $item){ + if(isset($item['name']) && isset($item['fee'])){ + $rows[] = [ + 'name' => '收费项', + 'fee_name' => $item['name'], + 'fee_value' => 0-$item['fee'], + ]; + } + } + return $this->response()->success([ + 'rows'=> $rows, + ]); + } + + /** + * 费用表单 + * + */ public function liveSchemaForm(Request $request) { $type = $request->input('type', 'live_fee'); @@ -266,4 +318,94 @@ class OldmenController extends AdminController return $this->response()->success($feeArr); } + + /** + * 已缴费明细清单 + */ + public function liveConstFlow(Request $request) + { + $page = []; + $oldMan = Oldmen::find($request->input('oldman_id', 0)); + if($oldMan){ + $flowList = ConstFlow::where('oldman_id', $oldMan->id) + ->whereIn('const_type', [ConstFlow::TYPE_IN, ConstFlow::TYPE_CONTINUE]) + ->whereBetween('start_at', [$oldMan->live_in_at, $oldMan->avliable_at])//开始时间在用户这段时间内的清单 + ->get(); + $tableList = []; + foreach($flowList as $flow){ + $_feeInfo = $_bonusInfo = $_addInfo = $_delInfo = ''; + + foreach($flow->extends as $_feeKey => $_feeArr){ + $_money = 0; + switch($_feeKey){ + case 'live_fee': + case 'continue_fee': + foreach($_feeArr as $k => $v){ + $_fee = Keyword::where('key', $k)->first(); + $_feeInfo.= '【'.$_fee->name.'】'.$v.'元,'; + $_money = bcadd($_money, $v, 2); + } + $_feeInfo = mb_substr($_feeInfo, 0, -1); + $_feeInfo = $_money.'元:'.$_feeInfo; + break; + case 'bonds_fee': + foreach($_feeArr as $k => $v){ + $_fee = Keyword::where('key', $k)->first(); + $_bonusInfo.= '【'.$_fee->name.'】'.$v.'元,'; + $_money = bcadd($_money, $v, 2); + } + $_bonusInfo = mb_substr($_bonusInfo, 0, -1); + $_bonusInfo = $_money.'元:'.$_bonusInfo; + break; + case 'add_fee': + foreach($_feeArr as $k => $_fee){ + $_addInfo.= '【'.$_fee["name"].'】'.$_fee["fee"].'元,'; + $_money = bcadd($_money, $_fee["fee"], 2); + } + $_addInfo = mb_substr($_addInfo, 0, -1); + $_addInfo = $_money.'元:'.$_addInfo; + break; + case 'del_fee': + foreach($_feeArr as $k => $_fee){ + $_delInfo.= '【'.$_fee["name"].'】-'.$_fee["fee"].'元,'; + $_money = bcsub($_money, $_fee["fee"], 2); + } + $_delInfo = mb_substr($_delInfo, 0, -1); + $_delInfo = $_money.'元:'.$_delInfo; + break; + } + } + + $tableList[] = [ + 'type' => ConstFlow::typeMap()[$flow->const_type],//类别 + 'money'=> $flow->money,//金额(含保证金) + 'date_range' => Carbon::parse($flow->start_at)->format('Y-m-d').' 至 '.Carbon::parse($flow->end_at)->format('Y-m-d'),//时间区间 + 'flow_at'=>$flow->created_at->format('Y-m-d H:i:s'),//办理时间 + 'fee_info'=>$_feeInfo,//费用明细, + 'bonus_info'=>$_bonusInfo, + 'add_info'=>$_addInfo,//收费项 + 'del_info'=>$_delInfo,//抵扣项 + ]; + } + $page = amisMake()->table() + ->className('m-b-none')->columnsTogglable(false) + ->data([ + 'rows' => $tableList + ]) + ->source('${rows}') + ->footable([ + 'expand'=>'first' + ])->columns([ + amisMake()->TableColumn()->name('type')->label('缴费类型'), + amisMake()->TableColumn()->name('money')->label('缴费金额'), + amisMake()->TableColumn()->name('flow_at')->label('办理时间'), + amisMake()->TableColumn()->name('date_range')->label('有效时间')->breakpoint("*"), + amisMake()->TableColumn()->name('fee_info')->label('费用明细')->breakpoint("*"), + amisMake()->TableColumn()->name('bonus_info')->label('保证金')->breakpoint("*"), + amisMake()->TableColumn()->name('add_info')->label('附加-收费项')->breakpoint("*"), + amisMake()->TableColumn()->name('del_info')->label('附加-抵扣项')->breakpoint("*"), + ]); + } + return $this->response()->success($page); + } } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 4ee91e1..2719f21 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -25,8 +25,10 @@ Route::group([ //客人管理 $router->resource('oldmen', \App\Admin\Controllers\OldmenController::class)->names('oldmen'); - $router->get('feelist', '\App\Admin\Controllers\OldmenController@feelist'); + $router->get('live-feelist', '\App\Admin\Controllers\OldmenController@liveFeelist'); + $router->get('exit-feelist', '\App\Admin\Controllers\OldmenController@exitFeelist'); $router->get('live-fee-form', '\App\Admin\Controllers\OldmenController@liveSchemaForm'); + $router->get('live-const-flow', '\App\Admin\Controllers\OldmenController@liveConstFlow'); //客人-入住 $router->get('live-in', '\App\Admin\Controllers\LiveInController@index'); $router->get('live-in-do', '\App\Admin\Controllers\LiveInController@doForm'); @@ -35,6 +37,10 @@ Route::group([ $router->get('live-continue', '\App\Admin\Controllers\LiveContinueController@index'); $router->get('live-continue-do', '\App\Admin\Controllers\LiveContinueController@doForm'); $router->post('live-continue-do', '\App\Admin\Controllers\LiveContinueController@do'); + + $router->get('live-exit-do', '\App\Admin\Controllers\LiveExitController@doForm'); + $router->post('live-exit-do', '\App\Admin\Controllers\LiveExitController@do'); + //费用设置 $router->get('const-setting', '\App\Admin\Controllers\SettingController@settingFeeConfig'); $router->post('const-setting', '\App\Admin\Controllers\SettingController@settingFeeConfigStore'); diff --git a/app/Models/ConstFlow.php b/app/Models/ConstFlow.php index deba893..786bc27 100644 --- a/app/Models/ConstFlow.php +++ b/app/Models/ConstFlow.php @@ -13,6 +13,15 @@ class ConstFlow extends Model public const TYPE_CONTINUE = 2; //续住 public const TYPE_EXIT = 3; //结算 + public static function typeMap() + { + return [ + self::TYPE_IN => '入住缴费', + self::TYPE_CONTINUE => '续住缴费', + self::TYPE_EXIT => '离开结算', + ]; + } + protected $casts = [ 'extends' => 'array', ];