6
0
Fork 0
jiqu-library-server/app/Admin/Controllers/DealerPurchaseSubsidyContro...

189 lines
8.0 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\DealerPurchaseSubsidyBatchPay;
use App\Admin\Actions\Grid\DealerPurchaseSubsidyPay;
use App\Admin\Repositories\DealerPurchaseSubsidy;
use App\Admin\Repositories\DealerPurchaseSubsidyLog;
use App\Admin\Widgets\InfoBox;
use App\Enums\DealerPurchaseSubsidyStatus;
use App\Models\DealerPurchaseSubsidy as DealerPurchaseSubsidyModel;
use Dcat\Admin\Admin;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
use Dcat\Admin\Widgets\Box;
class DealerPurchaseSubsidyController extends AdminController
{
protected $title = '进货补贴';
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
Admin::style(
<<<CSS
.card-header {
margin-top: 1.5rem !important;
margin-bottom: -1rem !important;
}
CSS
);
$builder = DealerPurchaseSubsidy::with(['user.userInfo']);
return Grid::make($builder, function (Grid $grid) {
$grid->model()->settleCompleted()->orderBy('id', 'desc');//默认ID倒叙
$grid->column('settle_period', '结算周期')->display(function () {
return $this->start_at->rawFormat('Y/m/d') . '-' . $this->end_at->rawFormat('Y/m/d');
})->link(function () {
return admin_route('dealer_purchase_logs.index', [
'user_phone' => $this->user?->phone,
'order_completed_at[start]' => $this->start_at->toDateTimeString(),
'order_completed_at[end]' => $this->end_at->toDateTimeString(),
]);
});
$grid->column('user.phone', '手机号')->copyable();
$grid->column('user.userInfo.nickname', '昵称');
$grid->column('lvl', '等级')->display(function () {
return $this->lvl->text();
});
$grid->column('total_purchase_amount', '进货业绩')->prepend('¥');
$grid->column('subsidy_rate', '补贴比例')->append('%');
$grid->column('total_subsidy', '补贴总额')->prepend('¥')->help('补贴总额=进货业绩*补贴比例');
$grid->column('total_amount', '应得补贴')->prepend('¥');
$grid->column('fee_rate', '手续费率')->append('%');
$grid->column('fee', '手续费')->prepend('¥')->help('手续费=应得补贴*手续费率');
$grid->column('status', '状态')->display(function ($v) {
return $v->text();
})->circleDot(DealerPurchaseSubsidyStatus::colors());
$grid->showRowSelector();
$grid->tools(function ($tools) {
$tools->batch(function ($batch) {
$batch->disableDelete();
if (Admin::user()->can('dcat.admin.dealer_purchase_subsidies.batch_pay')) {
$batch->add(new DealerPurchaseSubsidyBatchPay());
}
});
});
$grid->actions(function (Grid\Displayers\Actions $actions) {
if (Admin::user()->can('dcat.admin.dealer_purchase_subsidies.show')) {
$actions->append('<a style="cursor: pointer;" target="_blank" href="'.admin_route('dealer_purchase_subsidies.show', ['dealer_purchase_subsidy' => $actions->row]).'"><i class="feather icon-eye"></i> 显示 &nbsp;&nbsp;</a>');
}
if ($actions->row->isPending() && Admin::user()->can('dcat.admin.dealer_purchase_subsidies.pay')) {
$actions->append(new DealerPurchaseSubsidyPay());
}
});
$grid->header(function ($collection) use ($grid) {
return tap(new Row(), function ($row) use ($grid) {
$query = DealerPurchaseSubsidyModel::query();
$grid->model()->getQueries()->unique()->each(function ($value) use (&$query) {
if (in_array($value['method'], ['paginate', 'get', 'orderBy', 'orderByDesc'], true)) {
return;
}
$query = call_user_func_array([$query, $value['method']], $value['arguments'] ?? []);
});
$row->column(3, new InfoBox('进货业绩', (clone $query)->sum('total_purchase_amount'), 'fa fa-cny'));
$row->column(3, new InfoBox('补贴金额', (clone $query)->sum('total_amount'), 'fa fa-cny'));
$row->column(3, new InfoBox('手续费', (clone $query)->sum('fee'), 'fa fa-cny'));
});
});
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
$filter->equal('user.phone', '手机号')->width(3);
$filter->equal('status', '状态')->select(DealerPurchaseSubsidyStatus::texts())->width(3);
$filter->whereBetween('settle_period', function ($query) {
$start = $this->input['start'] ?? null;
$end = $this->input['end'] ?? null;
$query->when($start, function ($query, $start) {
$query->where('start_at', '>=', "{$start} 00:00:00");
});
$query->when($end, function ($query, $end) {
$query->where('end_at', '<=', "{$end} 23:59:59");
});
}, '结算周期')->date()->width(6);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
$row = new Row();
$row->column(5, function ($column) use ($id) {
$builder = DealerPurchaseSubsidy::with(['user.userInfo']);
$column->row(Show::make($id, $builder, function (Show $show) {
$show->field('id');
$show->field('settle_period', '结算周期')->as(function () {
return $this->start_at->rawFormat('Y/m/d') . '-' . $this->end_at->rawFormat('Y/m/d');
});
$show->field('user.phone', '手机号');
$show->field('user.user_info.nickname', '昵称');
$show->field('lvl', '经销商等级')->as(function () {
return $this->lvl->text();
});
$show->field('total_purchase_amount', '进货业绩')->prepend('¥');
$show->field('subsidy_rate', '补贴比例')->append('%');
$show->field('total_subsidy', '补贴总额')->prepend('¥');
$show->field('total_amount', '应得补贴')->prepend('¥');
$show->field('fee_rate', '手续费率')->append('%');
$show->field('fee', '手续费')->prepend('¥');
$show->field('real_amount', '实得补贴')->prepend('¥');
$show->field('status', '状态')->as(function () {
return $this->status?->text();
})->circleDot(DealerPurchaseSubsidyStatus::colors());
$show->panel()
->tools(function (Show\Tools $tools) use ($show) {
$tools->disableEdit();
$tools->disableDelete();
});
}));
});
$row->column(7, function ($column) use ($id) {
$dealerPurchaseSubsidyLogBox = Box::make('补贴明细', Grid::make(DealerPurchaseSubsidyLog::class, function (Grid $grid) use ($id) {
$grid->model()->where('purchase_subsidy_id', $id);
$grid->column('id');
$grid->column('change_amount', '变更金额');
$grid->column('remark', '备注');
$grid->column('created_at', '结算时间');
$grid->disableCreateButton();
$grid->disableActions();
$grid->disableRefreshButton();
}));
$column->row($dealerPurchaseSubsidyLogBox);
});
return $row;
}
}