canAdmin(); if (!$canAdmin) { $stores = $user->stores->pluck('id'); $grid->model()->whereIn('store_id', $stores); } $grid->model()->orderBy('created_at', 'desc'); $grid->column('store.title', '门店'); $grid->column('productSku.name', '商品'); $grid->column('productSku.category.name', '分类'); $grid->column('tag.name', '类目'); $grid->column('amount')->display(function ($value) { return ''.$value.''; }); // $grid->column('balance'); $grid->column('cost_price', '总成本价')->display(function () { $amount = abs($this->amount); $prcie = data_get($this->productSku, 'cost_price', 0); return round($prcie * $amount / 100, 2, PHP_ROUND_HALF_DOWN); }); $grid->column('sell_price', '总销售价')->display(function () { $amount = abs($this->amount); $prcie = data_get($this->productSku, 'sell_price', 0); return round($prcie * $amount / 100, 2, PHP_ROUND_HALF_DOWN); }); $grid->column('operator_name', '操作人'); $grid->column('remarks', '备注'); $grid->column('created_at', '操作时间'); $grid->showCreateButton($user->can('dcat.admin.store.stock.create')); $grid->enableDialogCreate(); $grid->showViewButton($user->can('dcat.admin.store.stock.show')); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->equal('store_id')->select(Store::pluck('title', 'id'))->width(3); $filter->like('productSku.name', '商品')->width(3); $filter->where('category_id', function ($q) { $id = $this->input; $q->whereHas('productSku', fn($q1) => $q1->filter(['category' => $id], \App\Endpoint\Api\Filters\ProductSkuFilter::class)); }, '分类')->select(ProductCategory::selectOptions())->width(3); $filter->equal('tag_id', '类目')->select(StockLog::tags()->pluck('name', 'id'))->width(3); $filter->like('operator_name', '操作人')->width(3); $filter->whereBetween('created_at', function ($q) { $start = data_get($this->input, 'start'); $start = $start ? Carbon::createFromFormat('Y-m-d', $start) : null; $end = data_get($this->input, 'end'); $end = $end ? Carbon::createFromFormat('Y-m-d', $end) : null; if ($start) { if ($end) { $q->whereBetween('created_at', [$start, $end]); } $q->where('created_at', '>=', $start); } elseif ($end) { $q->where('created_at', '<=', $end); } }, '操作时间')->date()->width(6); }); $grid->footer(function ($collection) use ($grid) { $query = StockLog::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'] ?? []); }); $list = $query->get(); $sell = $list->sum(function ($item) { $amount = abs($item->amount); $prcie = data_get($item->productSku, 'sell_price', 0); return round($prcie * $amount / 100, 2, PHP_ROUND_HALF_DOWN); }); $cost = $list->sum(function ($item) { $amount = abs($item->amount); $prcie = data_get($item->productSku, 'cost_price', 0); return round($prcie * $amount / 100, 2, PHP_ROUND_HALF_DOWN); }); $amount = $list->sum(function ($item) { return abs($item->amount); }); $count = $list->count(); return <<