generated from liutk/owl-admin-base
佣金收入
parent
56384c3f81
commit
e26c40b90d
|
|
@ -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)),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -36,7 +36,6 @@ class SalesStatisticController extends AdminController
|
||||||
->valueFormat('YYYY-MM-DD')
|
->valueFormat('YYYY-MM-DD')
|
||||||
->columnRatio(6),
|
->columnRatio(6),
|
||||||
amis()->InputCityControl('region', '区域')
|
amis()->InputCityControl('region', '区域')
|
||||||
->inputClassName('w-40')
|
|
||||||
->allowDistrict(false)
|
->allowDistrict(false)
|
||||||
->extractValue(false),
|
->extractValue(false),
|
||||||
amis()->SelectControl('store_id', __('finance.ledger.store'))
|
amis()->SelectControl('store_id', __('finance.ledger.store'))
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,12 @@ class LedgerFilter extends ModelFilter
|
||||||
|
|
||||||
public function region($region)
|
public function region($region)
|
||||||
{
|
{
|
||||||
if (! is_array($region)) {
|
if (array_key_exists('store_id', $this->input) || ! is_array($region)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$provinceCode = Arr::get($region, 'provinceCode');
|
$provinceCode = Arr::get($region, 'provinceCode');
|
||||||
|
|
||||||
$cityCode = Arr::get($region, 'cityCode');
|
$cityCode = Arr::get($region, 'cityCode');
|
||||||
|
|
||||||
if (empty($provinceCode) && empty($cityCode)) {
|
if (empty($provinceCode) && empty($cityCode)) {
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ class LedgerItemFilter extends ModelFilter
|
||||||
|
|
||||||
public function region($region)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Admin\Controllers\BaseKeywordController;
|
use App\Admin\Controllers\BaseKeywordController;
|
||||||
|
use App\Admin\Controllers\Finance\CommissionIncomeController;
|
||||||
use App\Admin\Controllers\Finance\LedgerController;
|
use App\Admin\Controllers\Finance\LedgerController;
|
||||||
use App\Admin\Controllers\Finance\SalesStatisticController;
|
use App\Admin\Controllers\Finance\SalesStatisticController;
|
||||||
use App\Admin\Controllers\Finance\StoreStatisticController;
|
use App\Admin\Controllers\Finance\StoreStatisticController;
|
||||||
|
|
@ -93,6 +94,8 @@ Route::group([
|
||||||
// 上报数据
|
// 上报数据
|
||||||
$router->resource('ledgers', LedgerController::class);
|
$router->resource('ledgers', LedgerController::class);
|
||||||
$router->post('ledgers/{ledger}/approval', [LedgerController::class, 'approval'])->name('ledgers.approval');
|
$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');
|
$router->get('sales-statistics', [SalesStatisticController::class, 'index'])->name('sales_statistics.index');
|
||||||
// 门店统计
|
// 门店统计
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,15 @@ class AdminPermissionSeeder extends Seeder
|
||||||
'resource' => ['list', 'update', 'view'],
|
'resource' => ['list', 'update', 'view'],
|
||||||
'children' => [],
|
'children' => [],
|
||||||
],
|
],
|
||||||
|
'commission_incomes' => [
|
||||||
|
'name' => '佣金收入',
|
||||||
|
'icon' => 'ri:money-cny-circle-line',
|
||||||
|
'uri' => '/finance/commission-incomes',
|
||||||
|
'resource' => false,
|
||||||
|
'children' => [
|
||||||
|
'index' => '佣金收入',
|
||||||
|
],
|
||||||
|
],
|
||||||
'sales_statistics' => [
|
'sales_statistics' => [
|
||||||
'name' => '销售统计',
|
'name' => '销售统计',
|
||||||
'icon' => 'ri:bar-chart-2-line',
|
'icon' => 'ri:bar-chart-2-line',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue