generated from liutk/owl-admin-base
87 lines
3.5 KiB
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)),
|
|
];
|
|
}
|
|
}
|