完善费用保存

develop
vine_liutk 2023-06-05 16:47:29 +08:00
parent 07c283c761
commit d0ccd7cc79
8 changed files with 236 additions and 76 deletions

View File

@ -3,7 +3,7 @@
namespace App\Admin\Controllers; namespace App\Admin\Controllers;
use App\Admin\Components; use App\Admin\Components;
use App\Models\Keyword; use App\Models\{Keyword,Oldmen};
use Slowlyo\OwlAdmin\Renderers\Page; use Slowlyo\OwlAdmin\Renderers\Page;
use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\TableColumn; use Slowlyo\OwlAdmin\Renderers\TableColumn;
@ -42,6 +42,7 @@ class LiveInController extends AdminController
TableColumn::make()->name('client_name')->label('委托人'), TableColumn::make()->name('client_name')->label('委托人'),
TableColumn::make()->name('client_phone')->label('委托人-手机号')->copyable(true), TableColumn::make()->name('client_phone')->label('委托人-手机号')->copyable(true),
TableColumn::make()->name('live_in_at')->label('入住时间')->type('datetime')->sortable(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([ amisMake()->Operation()->label(__('admin.actions'))->buttons([
]), ]),
@ -58,33 +59,25 @@ class LiveInController extends AdminController
public function doForm(){ public function doForm(){
$feeArr = $helpMsg = $feeKeys =[]; $feeKeys =[];
$targetStr = '';
$targetStr .= 'add_extends=${add_extends}';
$feeKeys['add_extends'] = '${add_extends}'; $feeKeys['add_extends'] = '${add_extends}';
$targetStr .= '&del_extends=${del_extends}';
$feeKeys['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){ // foreach(Keyword::getByParentKey('live_fee') as $fee){
$targetStr .= '&'.$fee->key.'=${'.$fee->key.'}'; // $feeKeys[$fee->key] = '${'.$fee->key.'}';
$feeKeys[$fee->key] = '${'.$fee->key.'}'; // }
} // foreach(Keyword::getByParentKey('bonds_fee') as $fee){
foreach(Keyword::getByParentKey('bonds_fee') as $fee){ // $feeKeys[$fee->key] = '${'.$fee->key.'}';
$targetStr .= '&'.$fee->key.'=${'.$fee->key.'}'; // }
$feeKeys[$fee->key] = '${'.$fee->key.'}';
}
$page = $this->basePage()->body([ $page = $this->basePage()->body([
amisMake()->Card()->className('border-0')->body( amisMake()->Card()->className('border-0')->body(
amisMake()->Wrapper()->className('p-0')->body( amisMake()->Wrapper()->className('p-0')->body(
amisMake()->Grid()->columns([ amisMake()->Grid()->className('relative')->columns([
amisMake()->Wrapper()->sm(8)->body([ amisMake()->Wrapper()->sm(8)->body([
amisMake()->Panel()->title('入住表单')->body( amisMake()->Panel()->title('入住表单')->body(
amisMake()->form()->title('')->panelClassName('border-0')->mode('horizontal')->name('base_form') amisMake()->form()->title('')->panelClassName('border-0')->mode('horizontal')->name('base_form')
->data(array_merge([
], $helpMsg))
->api(admin_url('live-in-do')) ->api(admin_url('live-in-do'))
->body([ ->body([
amisMake()->FieldSetControl()->title('入住人信息')->collapsable(true)->body([ amisMake()->FieldSetControl()->title('入住人信息')->collapsable(true)->body([
@ -104,7 +97,7 @@ class LiveInController extends AdminController
->size('lg') ->size('lg')
->source([ ->source([
'method' => 'get', 'method' => 'get',
'url' => admin_url('oldmen?_action=getData'), 'url' => admin_url('oldmen?_action=getData&live_in='.Oldmen::STATUS_NORMAL),
'data' => [ 'data' => [
'name'=>'${term}', 'name'=>'${term}',
] ]
@ -166,16 +159,16 @@ class LiveInController extends AdminController
), ),
]), ]),
amisMake()->FieldSetControl()->className('mt-10')->title('附加项')->collapsable(true)->body([ // amisMake()->FieldSetControl()->className('mt-10')->title('附加项')->collapsable(true)->body([
amisMake()->ComboControl('add_extends','收费项')->multiple(true)->items([ // amisMake()->ComboControl('add_extends','收费项')->multiple(true)->items([
amisMake()->TextControl('name', '名称'), // amisMake()->TextControl('name', '名称'),
Components::make()->decimalControl('fee', '金额') // Components::make()->decimalControl('fee', '金额')
]), // ]),
amisMake()->ComboControl('del_extends','抵扣项')->multiple(true)->items([ // amisMake()->ComboControl('del_extends','抵扣项')->multiple(true)->items([
amisMake()->TextControl('name', '名称'), // amisMake()->TextControl('name', '名称'),
Components::make()->decimalControl('fee', '金额') // Components::make()->decimalControl('fee', '金额')
]), // ]),
]), // ]),
]) ])
->actions([ ->actions([
amis('button')->label("生成清单")->level('primary') 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()->Panel()->title('结算清单')->body([
amisMake()->Service()->name('fee_table_name')->id('fee_table') amisMake()->Service()->name('fee_table_name')->id('fee_table')
->data($feeKeys) ->data($feeKeys)
@ -220,9 +215,10 @@ class LiveInController extends AdminController
)->api([ )->api([
'method'=>'get', 'method'=>'get',
'data'=> $feeKeys, '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); return $this->response()->success($page);
} }
public function liveInFeelist(Request $request){ public function do(Request $request)
$rows = $addFee = $delFee = []; {
foreach($request->input() as $key => $value){ $oldManId = $request->input('oldman_id');
if($key == 'add_extends'){ $dateRange = $request->input('live_in_date', '');
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){ $startDay = $dateRange ? explode(',', $dateRange)[0].' 00:00:00' : null;
dd($request); $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, '入住');
} }
} }

View File

@ -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('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_name')->label('委托人'),
TableColumn::make()->name('client_phone')->label('委托人-手机号')->copyable(true), 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), TableColumn::make()->name('created_at')->label(__('admin.created_at'))->type('datetime')->sortable(true),
amisMake()->Operation()->label(__('admin.actions'))->buttons([ amisMake()->Operation()->label(__('admin.actions'))->buttons([
$this->rowEditButton(true, 'lg'), $this->rowEditButton(true, 'lg'),
@ -149,6 +149,61 @@ class OldmenController extends AdminController
return $this->response()->success($page); 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) public function liveSchemaForm(Request $request)
{ {
$type = $request->input('type', 'live_fee'); $type = $request->input('type', 'live_fee');
@ -200,7 +255,7 @@ class OldmenController extends AdminController
$_feeValue = $_feeValues[$lv]['fee'] ?? 0; $_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); return $this->response()->success($feeArr);

View File

@ -28,7 +28,7 @@ Route::group([
$router->get('live-in', '\App\Admin\Controllers\LiveInController@index'); $router->get('live-in', '\App\Admin\Controllers\LiveInController@index');
$router->get('live-in-do', '\App\Admin\Controllers\LiveInController@doForm'); $router->get('live-in-do', '\App\Admin\Controllers\LiveInController@doForm');
$router->post('live-in-do', '\App\Admin\Controllers\LiveInController@do'); $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'); $router->get('live-fee-form', '\App\Admin\Controllers\OldmenController@liveSchemaForm');

View File

@ -35,6 +35,10 @@ class OldmenFilter extends ModelFilter
} }
} }
public function liveIn($liveIn){
return $this->where('live_in', $liveIn);
}
public function term($term){ public function term($term){
return $this->where(function($q) use ($term) { return $this->where(function($q) use ($term) {
return $q->where('name', 'like', '%'.$term.'%') return $q->where('name', 'like', '%'.$term.'%')

View File

@ -0,0 +1,24 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ConstFlow extends Model
{
use HasFactory;
public const TYPE_IN = 1; //入住
public const TYPE_CONTINUE = 2; //续住
public const TYPE_EXIT = 3; //结算
protected $casts = [
'extends' => 'array',
];
protected $fillable = [
'oldman_id', 'const_type', 'money', 'extends', 'start_at', 'end_at',
'change_lv', 'old_lv', 'new_lv'
];
}

View File

@ -2,7 +2,10 @@
namespace App\Services\Admin; namespace App\Services\Admin;
use App\Models\ConstFlow;
use App\Models\Oldmen; use App\Models\Oldmen;
use DB;
use Throwable;
/** /**
* @method Oldmen getModel() * @method Oldmen getModel()
@ -25,4 +28,45 @@ class LiveInService extends OldmenService
return $query; 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('未找到客人信息!');
}
}
} }

View File

@ -68,4 +68,27 @@ class OldmenService extends BaseService
return false; 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;
}
} }

View File

@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('const_flows', function (Blueprint $table) {
$table->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');
}
};