添加结算表单动作

develop
vine_liutk 2023-06-06 19:28:00 +08:00
parent 828da9b5ac
commit c925a3bcf6
6 changed files with 348 additions and 5 deletions

View File

@ -206,7 +206,7 @@ class LiveContinueController extends AdminController
)->api([
'method'=>'get',
'data'=> $feeKeys,
'url' =>admin_url('feelist')
'url' =>admin_url('live-feelist')
]),
]),

View File

@ -0,0 +1,186 @@
<?php
namespace App\Admin\Controllers;
use App\Models\{Keyword,Oldmen};
use Slowlyo\OwlAdmin\Renderers\Page;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\TableColumn;
use Slowlyo\OwlAdmin\Controllers\AdminController;
use App\Services\Admin\LiveContinueService;
use Illuminate\Http\Request;
use App\Admin\Components;
class LiveExitController extends AdminController
{
protected string $serviceName = LiveContinueService::class;
public function form(): Form
{
return $this->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){
}
}

View File

@ -215,7 +215,7 @@ class LiveInController extends AdminController
)->api([
'method'=>'get',
'data'=> $feeKeys,
'url' =>admin_url('feelist')
'url' =>admin_url('live-feelist')
]),
]),

View File

@ -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);
}
}

View File

@ -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');

View File

@ -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',
];