From 03797a1e7c80ad57db2fa7d8a045f6505a71b52f Mon Sep 17 00:00:00 2001 From: Jing Li Date: Mon, 1 Apr 2024 20:56:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E6=95=B0=E6=8D=AE=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Finance/LedgerController.php | 69 +++++++++++++++++-- app/Admin/routes.php | 1 + app/Models/Ledger.php | 32 +++++---- ...2024_03_27_090406_create_ledgers_table.php | 3 + database/seeders/AdminPermissionSeeder.php | 4 +- lang/zh_CN/finance.php | 4 ++ 6 files changed, 92 insertions(+), 21 deletions(-) diff --git a/app/Admin/Controllers/Finance/LedgerController.php b/app/Admin/Controllers/Finance/LedgerController.php index 6dbb8c5..f4af6f3 100644 --- a/app/Admin/Controllers/Finance/LedgerController.php +++ b/app/Admin/Controllers/Finance/LedgerController.php @@ -85,7 +85,32 @@ class LedgerController extends AdminController $ledger->save(); - return $this->response()->success(null, '操作成功'); + return $this->response()->success(null, '审核成功'); + } + + public function updateLedgerAmount($id, Request $request) + { + $validator = Validator::make( + data: $request->all(), + rules: [ + 'ledger_amount' => ['bail', 'required', 'numeric'], + ], + attributes: [ + 'ledger_amount' => __('finance.ledger.ledger_amount'), + ], + ); + + if ($validator->fails()) { + return $this->response()->fail($validator->errors()->first()); + } + + $ledger = Ledger::findOrFail($id); + + $ledger->update([ + 'ledger_amount' => $request->input('ledger_amount'), + ]); + + return $this->response()->success(null, '修改成功'); } public function list(): Page @@ -113,11 +138,15 @@ class LedgerController extends AdminController ]), ])) ->columns([ - amis()->TableColumn()->name('id')->label(__('finance.ledger.id')), + // amis()->TableColumn()->name('id')->label(__('finance.ledger.id')), amis()->TableColumn()->name('date')->label(__('finance.ledger.date')), amis()->TableColumn()->name('store.title')->label(__('finance.ledger.store')), amis()->TableColumn()->name('sales')->label(__('finance.ledger.sales')), amis()->TableColumn()->name('expenditure')->label(__('finance.ledger.expenditure')), + amis()->TableColumn()->name('new_customers')->label(__('finance.ledger.new_customers')), + amis()->TableColumn()->name('handover_amount')->label(__('finance.ledger.handover_amount')), + amis()->TableColumn()->name('ledger_amount')->label(__('finance.ledger.ledger_amount')), + amis()->TableColumn()->name('ledger_difference')->label(__('finance.ledger.ledger_difference')), amis()->TableColumn()->name('expected_commission')->label(__('finance.ledger.expected_commission')), amis()->TableColumn()->name('actual_commission')->label(__('finance.ledger.actual_commission')), amis()->TableColumn()->name('expected_income')->label(__('finance.ledger.expected_income')), @@ -131,6 +160,8 @@ class LedgerController extends AdminController $this->rowActions([ $this->rowApprovalButton() ->visibleOn('${ledger_status == 2}'), + $this->rowEditLedgerAmountButton() + ->visible(Admin::user()->can('admin.finance.ledgers.update_ledger_amount')), $this->rowEditButton(true) ->visible(Admin::user()->can('admin.finance.ledgers.update')) ->visibleOn('${ledger_status == 1 || ledger_status == 4}'), @@ -164,11 +195,15 @@ class LedgerController extends AdminController public function detail(): Form { return $this->baseDetail()->title()->body([ - amis()->Property()->column(2)->items([ + amis()->Property()->items([ ['label' => __('finance.ledger.date'), 'content' => '${date}'], ['label' => __('finance.ledger.store'), 'content' => '${store.title}'], + ['label' => __('finance.ledger.new_customers'), 'content' => '${new_customers}'], ['label' => __('finance.ledger.sales'), 'content' => '${sales}'], ['label' => __('finance.ledger.expenditure'), 'content' => '${expenditure}'], + ['label' => __('finance.ledger.handover_amount'), 'content' => '${handover_amount}'], + ['label' => __('finance.ledger.ledger_amount'), 'content' => '${ledger_amount}'], + ['label' => __('finance.ledger.ledger_difference'), 'content' => '${ledger_difference}'], ['label' => __('finance.ledger.expected_commission'), 'content' => '${expected_commission}'], ['label' => __('finance.ledger.actual_commission'), 'content' => '${actual_commission}'], ['label' => __('finance.ledger.expected_income'), 'content' => '${expected_income}'], @@ -176,10 +211,10 @@ class LedgerController extends AdminController [ 'label' => '上报数据', 'content' => amis()->Property()->source('${items_property}'), - 'span' => 2 + 'span' => 3 ], - ['label' => __('finance.ledger.photos'), 'content' => amis()->Images()->enlargeAble()->source('${photos}')->enlargeWithGallary(), 'span' => 2], - ['label' => __('finance.ledger.ledger_status'), 'content' => amis()->Mapping()->map(LedgerStatus::labelMap())->value('${ledger_status}'), 'span' => 2], + ['label' => __('finance.ledger.photos'), 'content' => amis()->Images()->enlargeAble()->source('${photos}')->enlargeWithGallary(), 'span' => 3], + ['label' => __('finance.ledger.ledger_status'), 'content' => amis()->Mapping()->map(LedgerStatus::labelMap())->value('${ledger_status}'), 'span' => 3], ]), ]); } @@ -205,4 +240,26 @@ class LedgerController extends AdminController ])->size('md') ); } + + protected function rowEditLedgerAmountButton() + { + return amis()->DialogAction() + ->icon('fa-regular fa-pen-to-square') + ->label(__('finance.ledger.ledger_amount')) + ->level('link') + ->dialog( + amis()->Dialog()->title(__('finance.ledger.ledger_amount'))->body([ + amis()->Form()->title('') + ->api('post:'.admin_url('finance/ledgers/${id}/ledger-amount')) + ->body([ + amis()->NumberControl() + ->name('ledger_amount') + ->label(__('finance.ledger.ledger_amount')) + ->precision(2) + ->showSteps(false) + ->required(), + ]), + ]) + ); + } } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 1b80cd4..6c9a9c1 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -95,6 +95,7 @@ Route::group([ // 上报数据 $router->resource('ledgers', LedgerController::class); $router->post('ledgers/{ledger}/approval', [LedgerController::class, 'approval'])->name('ledgers.approval'); + $router->post('ledgers/{ledger}/ledger-amount', [LedgerController::class, 'updateLedgerAmount'])->name('ledgers.update_ledger_amount'); // 佣金收入 $router->get('commission-incomes', [CommissionIncomeController::class, 'index'])->name('commission_incomes.index'); // 销售统计 diff --git a/app/Models/Ledger.php b/app/Models/Ledger.php index f74c7f5..1f34424 100644 --- a/app/Models/Ledger.php +++ b/app/Models/Ledger.php @@ -15,7 +15,10 @@ class Ledger extends Model { use Filterable, HasDateTimeFormatter, HasFactory; + protected $appends = ['ledger_difference']; + protected $attributes = [ + 'new_customers' => 0, 'ledger_status' => LedgerStatus::Pending, ]; @@ -26,8 +29,11 @@ class Ledger extends Model protected $fillable = [ 'store_id', 'date', + 'new_customers', 'sales', 'expenditure', + 'handover_amount', + 'ledger_amount', 'expected_commission', 'actual_commission', 'expected_income', @@ -46,6 +52,18 @@ class Ledger extends Model return $this->hasMany(LedgerItem::class); } + protected function ledgerDifference(): Attribute + { + return Attribute::make( + get: function (mixed $value, array $attributes) { + if (is_numeric($attributes['ledger_amount'])) { + return bcsub($attributes['handover_amount'], $attributes['ledger_amount'], 2); + } + return null; + }, + ); + } + protected function photos(): Attribute { return Attribute::make( @@ -59,18 +77,4 @@ class Ledger extends Model set: fn (mixed $value) => json_encode(is_array($value) ? $value : []), ); } - - protected function ledgerStatusColor(): Attribute - { - return Attribute::make( - get: fn (mixed $value) => $this->ledger_status->color(), - ); - } - - protected function ledgerStatusLabel(): Attribute - { - return Attribute::make( - get: fn (mixed $value) => $this->ledger_status->label(), - ); - } } diff --git a/database/migrations/2024_03_27_090406_create_ledgers_table.php b/database/migrations/2024_03_27_090406_create_ledgers_table.php index ae732f3..028a91f 100644 --- a/database/migrations/2024_03_27_090406_create_ledgers_table.php +++ b/database/migrations/2024_03_27_090406_create_ledgers_table.php @@ -15,8 +15,11 @@ return new class extends Migration $table->id(); $table->bigInteger('store_id')->unsigned()->comment('门店ID'); $table->date('date')->comment('日期'); + $table->integer('new_customers')->unsigned()->default(0)->comment('新增客户'); $table->decimal('sales', 10, 2)->comment('销量'); $table->decimal('expenditure', 10, 2)->comment('支出'); + $table->decimal('handover_amount', 10, 2)->default(0)->comment('上交金额'); + $table->decimal('ledger_amount', 10, 2)->nullable()->comment('总账金额'); $table->decimal('expected_commission', 10, 2)->comment('预期佣金=销售金额*佣金比例'); $table->decimal('actual_commission', 10, 2)->nullable()->comment('实际佣金'); $table->decimal('expected_income', 10, 2)->comment('预期收益=预计佣金-支出'); diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index 9b3ae8d..50eadd8 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -146,7 +146,9 @@ class AdminPermissionSeeder extends Seeder 'icon' => 'mdi:database', 'uri' => '/finance/ledgers', 'resource' => ['list', 'update', 'view'], - 'children' => [], + 'children' => [ + 'update_ledger_amount' => '编辑总账金额', + ], ], 'commission_incomes' => [ 'name' => '佣金收入', diff --git a/lang/zh_CN/finance.php b/lang/zh_CN/finance.php index 7ac469d..29fa240 100644 --- a/lang/zh_CN/finance.php +++ b/lang/zh_CN/finance.php @@ -7,6 +7,10 @@ return [ 'store' => '门店', 'sales' => '销量', 'expenditure' => '支出', + 'new_customers' => '新增客户', + 'handover_amount' => '交账金额', + 'ledger_amount' => '总账金额', + 'ledger_difference' => '总账差异', 'expected_commission' => '预期佣金', 'actual_commission' => '实际佣金', 'expected_income' => '预期收益',