完善费用保存
parent
07c283c761
commit
d0ccd7cc79
|
|
@ -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, '入住');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
||||
|
|
|
|||
|
|
@ -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.'%')
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
];
|
||||
}
|
||||
|
|
@ -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('未找到客人信息!');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue