佣金收入

main
Jing Li 2024-03-29 15:54:52 +08:00
parent 56384c3f81
commit e26c40b90d
6 changed files with 103 additions and 3 deletions

View File

@ -0,0 +1,88 @@
<?php
namespace App\Admin\Controllers\Finance;
use App\Admin\Controllers\AdminController;
use App\Admin\Filters\LedgerFilter;
use App\Admin\Filters\LedgerItemFilter;
use App\Models\Keyword;
use App\Models\Ledger;
use App\Models\LedgerItem;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
/**
* @property mixed $name
*/
class CommissionIncomeController extends AdminController
{
public function index()
{
if ($this->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)),
];
}
}

View File

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

View File

@ -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)) {

View File

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

View File

@ -1,6 +1,7 @@
<?php
use App\Admin\Controllers\BaseKeywordController;
use App\Admin\Controllers\Finance\CommissionIncomeController;
use App\Admin\Controllers\Finance\LedgerController;
use App\Admin\Controllers\Finance\SalesStatisticController;
use App\Admin\Controllers\Finance\StoreStatisticController;
@ -93,6 +94,8 @@ Route::group([
// 上报数据
$router->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');
// 门店统计

View File

@ -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',