store-manage/app/Admin/Controllers/Finance/CommissionIncomeController.php

87 lines
3.5 KiB
PHP

<?php
namespace App\Admin\Controllers\Finance;
use App\Admin\Controllers\AdminController;
use App\Admin\Filters\LedgerFilter;
use App\Models\Ledger;
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(),
]),
]))
->filterDefaultVisible()
->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)),
];
}
}