diff --git a/app/Admin/Controllers/Finance/CommissionIncomeController.php b/app/Admin/Controllers/Finance/CommissionIncomeController.php new file mode 100644 index 0000000..6a6e201 --- /dev/null +++ b/app/Admin/Controllers/Finance/CommissionIncomeController.php @@ -0,0 +1,88 @@ +actionOfGetData()) { + return $this->response()->success([ + 'items' => [$this->getCommissionIncomeStatistics(request())], + ]); + } + + return $this->response()->success( + $this->baseList( + $this->baseCRUD() + ->headerToolbar([ + amis('filter-toggler')->align('right'), + ]) + ->footerToolbar([]) + ->bulkActions([]) + ->filter($this->baseFilter()->body([ + amis()->GroupControl()->mode('horizontal')->body([ + amis()->DateRangeControl('date_range', '日期') + ->valueFormat('YYYY-MM-DD') + ->columnRatio(6), + amis()->InputCityControl('region', '区域') + ->allowDistrict(false) + ->extractValue(false), + amis()->SelectControl('store_id', __('finance.ledger.store')) + ->source(admin_url('api/stores?region=${region}')) + ->labelField('title') + ->valueField('id') + ->clearable(), + ]), + ])) + ->columns([ + amis()->TableColumn('expected_commission', '预期佣金'), + amis()->TableColumn('actual_commission', '实际佣金'), + amis()->TableColumn('diff_commission', '佣金差异'), + amis()->TableColumn('expected_income', '预期收益'), + amis()->TableColumn('actual_income', '实际收益'), + amis()->TableColumn('diff_income', '收益差异'), + ]) + ) + ); + } + + protected function getCommissionIncomeStatistics(Request $request): array + { + $aggregate = Ledger::select([ + DB::raw('SUM(expenditure) as expenditure'), + DB::raw('SUM(expected_commission) as expected_commission'), + DB::raw('SUM(actual_commission) as actual_commission'), + DB::raw('SUM(expected_income) as expected_income'), + DB::raw('SUM(actual_income) as actual_income'), + ]) + ->filter($request->input(), LedgerFilter::class) + ->first(); + + $expectedCommission = $aggregate->expected_commission ?? '0'; + $actualCommission = $aggregate->actual_commission ?? '0'; + $expectedIncome = $aggregate->expected_income ?? '0'; + $actualIncome = $aggregate->actual_income ?? '0'; + + return [ + 'expected_commission' => trim_zeros($expectedCommission), + 'actual_commission' => trim_zeros($actualCommission), + 'diff_commission' => trim_zeros(bcsub($actualCommission, $expectedCommission, 2)), + 'expected_income' => trim_zeros($expectedIncome), + 'actual_income' => trim_zeros($actualIncome), + 'diff_income' => trim_zeros(bcsub($actualIncome, $expectedIncome, 2)), + ]; + } +} diff --git a/app/Admin/Controllers/Finance/SalesStatisticController.php b/app/Admin/Controllers/Finance/SalesStatisticController.php index a66fc42..bf1ac4a 100644 --- a/app/Admin/Controllers/Finance/SalesStatisticController.php +++ b/app/Admin/Controllers/Finance/SalesStatisticController.php @@ -36,7 +36,6 @@ class SalesStatisticController extends AdminController ->valueFormat('YYYY-MM-DD') ->columnRatio(6), amis()->InputCityControl('region', '区域') - ->inputClassName('w-40') ->allowDistrict(false) ->extractValue(false), amis()->SelectControl('store_id', __('finance.ledger.store')) diff --git a/app/Admin/Filters/LedgerFilter.php b/app/Admin/Filters/LedgerFilter.php index 5a80b70..6c2e6fc 100644 --- a/app/Admin/Filters/LedgerFilter.php +++ b/app/Admin/Filters/LedgerFilter.php @@ -24,11 +24,12 @@ class LedgerFilter extends ModelFilter public function region($region) { - if (! is_array($region)) { + if (array_key_exists('store_id', $this->input) || ! is_array($region)) { return; } $provinceCode = Arr::get($region, 'provinceCode'); + $cityCode = Arr::get($region, 'cityCode'); if (empty($provinceCode) && empty($cityCode)) { diff --git a/app/Admin/Filters/LedgerItemFilter.php b/app/Admin/Filters/LedgerItemFilter.php index a8d2b9e..f8c7865 100644 --- a/app/Admin/Filters/LedgerItemFilter.php +++ b/app/Admin/Filters/LedgerItemFilter.php @@ -14,7 +14,7 @@ class LedgerItemFilter extends ModelFilter public function region($region) { - if ($this->input('store_id') !== null || ! is_array($region)) { + if (array_key_exists('store_id', $this->input) || ! is_array($region)) { return; } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index faf21b0..229c78e 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -1,6 +1,7 @@ resource('ledgers', LedgerController::class); $router->post('ledgers/{ledger}/approval', [LedgerController::class, 'approval'])->name('ledgers.approval'); + // 佣金收入 + $router->get('commission-incomes', [CommissionIncomeController::class, 'index'])->name('commission_incomes.index'); // 销售统计 $router->get('sales-statistics', [SalesStatisticController::class, 'index'])->name('sales_statistics.index'); // 门店统计 diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index e8482c1..562dbde 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -148,6 +148,15 @@ class AdminPermissionSeeder extends Seeder 'resource' => ['list', 'update', 'view'], 'children' => [], ], + 'commission_incomes' => [ + 'name' => '佣金收入', + 'icon' => 'ri:money-cny-circle-line', + 'uri' => '/finance/commission-incomes', + 'resource' => false, + 'children' => [ + 'index' => '佣金收入', + ], + ], 'sales_statistics' => [ 'name' => '销售统计', 'icon' => 'ri:bar-chart-2-line',