diff --git a/app/Admin/Controllers/LiveInController.php b/app/Admin/Controllers/LiveInController.php index e2d8db6..1f9dd94 100644 --- a/app/Admin/Controllers/LiveInController.php +++ b/app/Admin/Controllers/LiveInController.php @@ -3,7 +3,7 @@ namespace App\Admin\Controllers; use App\Admin\Components; -use App\Models\Keyword; +use App\Models\{Keyword,Oldmen}; use Slowlyo\OwlAdmin\Renderers\Page; use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\TableColumn; @@ -42,6 +42,7 @@ class LiveInController extends AdminController TableColumn::make()->name('client_name')->label('委托人'), TableColumn::make()->name('client_phone')->label('委托人-手机号')->copyable(true), TableColumn::make()->name('live_in_at')->label('入住时间')->type('datetime')->sortable(true), + TableColumn::make()->name('avliable_at')->label('截至时间')->type('datetime')->sortable(true), amisMake()->Operation()->label(__('admin.actions'))->buttons([ ]), @@ -58,33 +59,25 @@ class LiveInController extends AdminController public function doForm(){ - $feeArr = $helpMsg = $feeKeys =[]; - $targetStr = ''; - - $targetStr .= 'add_extends=${add_extends}'; + $feeKeys =[]; $feeKeys['add_extends'] = '${add_extends}'; - - $targetStr .= '&del_extends=${del_extends}'; $feeKeys['del_extends'] = '${del_extends}'; + $feeKeys['live_fee'] = '${live_fee}'; + $feeKeys['bonds_fee'] = '${bonds_fee}'; - foreach(Keyword::getByParentKey('live_fee') as $fee){ - $targetStr .= '&'.$fee->key.'=${'.$fee->key.'}'; - $feeKeys[$fee->key] = '${'.$fee->key.'}'; - } - foreach(Keyword::getByParentKey('bonds_fee') as $fee){ - $targetStr .= '&'.$fee->key.'=${'.$fee->key.'}'; - $feeKeys[$fee->key] = '${'.$fee->key.'}'; - } + // foreach(Keyword::getByParentKey('live_fee') as $fee){ + // $feeKeys[$fee->key] = '${'.$fee->key.'}'; + // } + // foreach(Keyword::getByParentKey('bonds_fee') as $fee){ + // $feeKeys[$fee->key] = '${'.$fee->key.'}'; + // } $page = $this->basePage()->body([ amisMake()->Card()->className('border-0')->body( amisMake()->Wrapper()->className('p-0')->body( - amisMake()->Grid()->columns([ + 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') - ->data(array_merge([ - - ], $helpMsg)) ->api(admin_url('live-in-do')) ->body([ amisMake()->FieldSetControl()->title('入住人信息')->collapsable(true)->body([ @@ -104,7 +97,7 @@ class LiveInController extends AdminController ->size('lg') ->source([ 'method' => 'get', - 'url' => admin_url('oldmen?_action=getData'), + 'url' => admin_url('oldmen?_action=getData&live_in='.Oldmen::STATUS_NORMAL), 'data' => [ 'name'=>'${term}', ] @@ -166,16 +159,16 @@ class LiveInController extends AdminController ), ]), - amisMake()->FieldSetControl()->className('mt-10')->title('附加项')->collapsable(true)->body([ - amisMake()->ComboControl('add_extends','收费项')->multiple(true)->items([ - amisMake()->TextControl('name', '名称'), - Components::make()->decimalControl('fee', '金额') - ]), - amisMake()->ComboControl('del_extends','抵扣项')->multiple(true)->items([ - amisMake()->TextControl('name', '名称'), - Components::make()->decimalControl('fee', '金额') - ]), - ]), + // amisMake()->FieldSetControl()->className('mt-10')->title('附加项')->collapsable(true)->body([ + // amisMake()->ComboControl('add_extends','收费项')->multiple(true)->items([ + // amisMake()->TextControl('name', '名称'), + // Components::make()->decimalControl('fee', '金额') + // ]), + // amisMake()->ComboControl('del_extends','抵扣项')->multiple(true)->items([ + // amisMake()->TextControl('name', '名称'), + // Components::make()->decimalControl('fee', '金额') + // ]), + // ]), ]) ->actions([ amis('button')->label("生成清单")->level('primary') @@ -196,11 +189,13 @@ class LiveInController extends AdminController ] ] ]), - amis('submit')->label('确认入住')->level('danger'), + amis('submit')->label('确认入住')->confirmText('是否确认入住,并且已查看入住清单?') + ->redirect('live-in') + ->level('danger'), ]), ), ]), - amisMake()->Wrapper()->sm(4)->body([ + 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) @@ -220,9 +215,10 @@ class LiveInController extends AdminController )->api([ 'method'=>'get', 'data'=> $feeKeys, - 'url' =>admin_url('live-in-feelist') + 'url' =>admin_url('feelist') ]), ]), + ]), ]), ) @@ -232,46 +228,24 @@ class LiveInController extends AdminController return $this->response()->success($page); } - public function liveInFeelist(Request $request){ - $rows = $addFee = $delFee = []; - foreach($request->input() as $key => $value){ - if($key == 'add_extends'){ - if(is_array($value)){ - $addFee = $value; - } - }elseif($key == 'del_extends'){ - if(is_array($value)){ - $delFee = $value; - } - }else{ - $_fee = Keyword::where('key', $key)->first(); - $rows[] = [ - 'name' => $_fee->parent->name, - 'fee_name' => $_fee->name, - 'fee_value' => $value, - ]; - } - } - foreach($addFee as $item){ - $rows[] = [ - 'name' => '收费项', - 'fee_name' => $item['name'], - 'fee_value' => $item['fee'], - ]; - } - foreach($delFee as $item){ - $rows[] = [ - 'name' => '抵扣项', - 'fee_name' => $item['name'], - 'fee_value' => 0-$item['fee'], - ]; - } - return $this->response()->success([ - 'rows'=> $rows, - ]); - } + public function do(Request $request) + { + $oldManId = $request->input('oldman_id'); + $dateRange = $request->input('live_in_date', ''); - public function do(Request $request){ - dd($request); + $startDay = $dateRange ? explode(',', $dateRange)[0].' 00:00:00' : null; + $endDay = $dateRange ? explode(',', $dateRange)[1].' 23:59:59' : null; + + $liveFee = $request->input('live_fee', []); + $bondsFee = $request->input('bonds_fee', []); + // $addFee = $request->input('add_extends', []); + // $delFee = $request->input('del_extends', []); + + $res = $this->service->do($oldManId, $startDay, $endDay, [ + 'live_fee' => $liveFee, + 'bonds_fee' => $bondsFee, + ]); + + return $this->autoResponse($res, '入住'); } } diff --git a/app/Admin/Controllers/OldmenController.php b/app/Admin/Controllers/OldmenController.php index aab086b..c8d2e03 100644 --- a/app/Admin/Controllers/OldmenController.php +++ b/app/Admin/Controllers/OldmenController.php @@ -56,7 +56,7 @@ class OldmenController extends AdminController TableColumn::make()->name('nurse_lv')->type('mapping')->map(Keyword::getByParentKey('nurse_lv')->pluck('name', 'value'))->label('护理等级')->className('text-primary')->sortable(), TableColumn::make()->name('client_name')->label('委托人'), TableColumn::make()->name('client_phone')->label('委托人-手机号')->copyable(true), - TableColumn::make()->name('live_in_at')->label('入住时间')->type('datetime')->sortable(true), + //状态:未入住、已办理,未入住、已入住 TableColumn::make()->name('created_at')->label(__('admin.created_at'))->type('datetime')->sortable(true), amisMake()->Operation()->label(__('admin.actions'))->buttons([ $this->rowEditButton(true, 'lg'), @@ -149,6 +149,61 @@ class OldmenController extends AdminController return $this->response()->success($page); } + + public function feelist(Request $request){ + $rows = $addFee = $delFee = []; + foreach($request->input() as $key => $value){ + if($key == 'add_extends'){ + if(is_array($value)){ + $addFee = $value; + } + }elseif($key == 'del_extends'){ + if(is_array($value)){ + $delFee = $value; + } + }else{ + if(is_array($value)){ + foreach($value as $item =>$vv){ + $_fee = Keyword::where('key', $item)->first(); + $rows[] = [ + 'name' => $_fee->parent->name, + 'fee_name' => $_fee->name, + 'fee_value' => $vv, + ]; + } + }else{ + $_fee = Keyword::where('key', $key)->first(); + $rows[] = [ + 'name' => $_fee->parent->name, + 'fee_name' => $_fee->name, + 'fee_value' => $value, + ]; + } + } + } + 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'); @@ -200,7 +255,7 @@ class OldmenController extends AdminController $_feeValue = $_feeValues[$lv]['fee'] ?? 0; } } - $feeArr[] = Components::make()->decimalControl($fee->key, $fee->name)->description(amis('tpl')->tpl('根据当前护理等级,建议费用为:'.$_feeValue)); + $feeArr[] = Components::make()->decimalControl($type.'['.$fee->key.']', $fee->name)->description(amis('tpl')->tpl('根据当前护理等级,建议费用为:'.$_feeValue)); } return $this->response()->success($feeArr); diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 433fbe8..b2c4686 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -28,7 +28,7 @@ Route::group([ $router->get('live-in', '\App\Admin\Controllers\LiveInController@index'); $router->get('live-in-do', '\App\Admin\Controllers\LiveInController@doForm'); $router->post('live-in-do', '\App\Admin\Controllers\LiveInController@do'); - $router->get('live-in-feelist', '\App\Admin\Controllers\LiveInController@liveInFeelist'); + $router->get('feelist', '\App\Admin\Controllers\OldmenController@feelist'); $router->get('live-fee-form', '\App\Admin\Controllers\OldmenController@liveSchemaForm'); diff --git a/app/Filters/Admin/OldmenFilter.php b/app/Filters/Admin/OldmenFilter.php index 31623d9..a8457fe 100644 --- a/app/Filters/Admin/OldmenFilter.php +++ b/app/Filters/Admin/OldmenFilter.php @@ -35,6 +35,10 @@ class OldmenFilter extends ModelFilter } } + public function liveIn($liveIn){ + return $this->where('live_in', $liveIn); + } + public function term($term){ return $this->where(function($q) use ($term) { return $q->where('name', 'like', '%'.$term.'%') diff --git a/app/Models/ConstFlow.php b/app/Models/ConstFlow.php new file mode 100644 index 0000000..deba893 --- /dev/null +++ b/app/Models/ConstFlow.php @@ -0,0 +1,24 @@ + 'array', + ]; + + protected $fillable = [ + 'oldman_id', 'const_type', 'money', 'extends', 'start_at', 'end_at', + 'change_lv', 'old_lv', 'new_lv' + ]; +} diff --git a/app/Services/Admin/LiveInService.php b/app/Services/Admin/LiveInService.php index df1241c..1428e69 100644 --- a/app/Services/Admin/LiveInService.php +++ b/app/Services/Admin/LiveInService.php @@ -2,7 +2,10 @@ namespace App\Services\Admin; +use App\Models\ConstFlow; use App\Models\Oldmen; +use DB; +use Throwable; /** * @method Oldmen getModel() @@ -25,4 +28,45 @@ class LiveInService extends OldmenService return $query; } + + + public function do($oldManId, $startAt, $endAt, $feeArr = null){ + + $oldMan = $this->getDetail($oldManId); + if($oldMan){ + //判断状态-是否是已经入住状态;已入住状态无法再入住; + if($oldMan->live_in != Oldmen::STATUS_NORMAL){ + return $this->setError('客人状态异常,请刷新后充试!'); + } + + $flow = new ConstFlow(); + $flow->oldman_id = $oldMan->id; + $flow->const_type = ConstFlow::TYPE_IN; + $flow->start_at = $startAt; + $flow->end_at = $endAt; + $flow->money = $this->totalFee($feeArr); + $flow->extends = $feeArr; + + try{ + DB::beginTransaction(); + //缴费生成流水; + $flow->save(); + //更新客人信息状态; + $oldMan->update([ + 'live_in' => Oldmen::STATUS_LIVE, + 'live_in_at' => $startAt, + 'avliable_at' => $endAt, + 'bonds' => $feeArr['bonds_fee'] ?? [] + ]); + DB::commit(); + }catch(Throwable $th){ + DB::rollBack(); + report($th); + return $this->setError('系统错误,请刷新后重试'); + } + return true; + }else{ + return $this->setError('未找到客人信息!'); + } + } } diff --git a/app/Services/Admin/OldmenService.php b/app/Services/Admin/OldmenService.php index dedcd14..da86f6c 100644 --- a/app/Services/Admin/OldmenService.php +++ b/app/Services/Admin/OldmenService.php @@ -68,4 +68,27 @@ class OldmenService extends BaseService return false; } + + //计算金额 + public function totalFee($feeArr){ + $money = 0; + if($feeArr){ + foreach($feeArr as $k => $item){ + switch($k){ + case 'del_fee': + foreach($item as $value){ + $money = bcsub($money, $value, 2); + } + + break; + default: + foreach($item as $value){ + $money = bcadd($money, $value, 2); + } + break; + } + } + } + return $money; + } } diff --git a/database/migrations/2023_06_05_095831_create_const_flows_table.php b/database/migrations/2023_06_05_095831_create_const_flows_table.php new file mode 100644 index 0000000..02468ab --- /dev/null +++ b/database/migrations/2023_06_05_095831_create_const_flows_table.php @@ -0,0 +1,36 @@ +id(); + $table->unsignedBigInteger('oldman_id'); + $table->unsignedTinyInteger('const_type')->comment('类别:1入住缴费;2续住缴费;3结算离场'); + $table->decimal('money', 10, 2)->default(0.00)->nullable()->comment('总金额'); + $table->text('extends')->nullable()->comment('收费明细'); + $table->timestamp('start_at')->nullable()->comment('开始时间'); + $table->timestamp('end_at')->nullable()->comment('结束时间'); + $table->unsignedTinyInteger('change_lv')->nullable()->comment('是否变更护理等级'); + $table->unsignedTinyInteger('old_lv')->nullable()->comment('老护理等级'); + $table->unsignedTinyInteger('new_lv')->nullable()->comment('新护理等级'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('const_flows'); + } +};