完善费用保存

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;
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, '入住');
}
}

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

View File

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

View File

@ -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.'%')

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;
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('未找到客人信息!');
}
}
}

View File

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

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