70 lines
2.6 KiB
PHP
70 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers\Store;
|
|
|
|
use App\Models\Store\Store;
|
|
use App\Models\Tag;
|
|
use Dcat\Admin\{Form, Admin};
|
|
use Dcat\Admin\Http\Controllers\AdminController;
|
|
use Dcat\Admin\Layout\Content;
|
|
use Dcat\Admin\Models\Administrator;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Dcat\Admin\Traits\HasFormResponse;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class StockController extends Controller
|
|
{
|
|
use HasFormResponse;
|
|
|
|
public function create($store_id)
|
|
{
|
|
$store = Store::findOrFail($store_id);
|
|
$form = Form::make();
|
|
$form->select('tag', '类目')->options(Tag::where('type', Tag::TYPE_STORE_STOCK)->pluck('name', 'id'));
|
|
$form->text('tag_name', '自定义类目');
|
|
$form->select('product', '商品')->options($store->productSkus()->select(['store_product_skus.id', 'product_skus.name'])->pluck('name', 'id'))->required();
|
|
$form->number('amount', '库存')->help('正数为增加, 负数为减少')->default(0)->required();
|
|
$form->text('remarks', '备注');
|
|
return (new Content())->title('新增')->body($form);
|
|
}
|
|
|
|
public function store($store_id, Request $request)
|
|
{
|
|
$request->validate([
|
|
'amount' => ['required', Rule::notIn([0])],
|
|
'product' => 'required',
|
|
'tag' => 'required_without:tag_name'
|
|
], [
|
|
'amount.not_in' => '库存不能为0',
|
|
'tag.required_without' => '类目必填',
|
|
]);
|
|
if ($request->filled('tag')) {
|
|
$tag = Tag::findOrFail($request->input('tag'));
|
|
} else {
|
|
$tag = Tag::firstOrCreate([
|
|
'type' => Tag::TYPE_STORE_STOCK,
|
|
'name' => $request->input('tag_name')
|
|
]);
|
|
}
|
|
$store = Store::findOrFail($store_id);
|
|
$product = $store->productSkus()->wherePivot('id', $request->input('product'))->firstOrFail();
|
|
$administrator = Admin::user();
|
|
$amount = $request->input('amount');
|
|
if ($product->pivot->amount + $amount < 0) {
|
|
return $this->sendResponse($this->response()->error('扣减库存不能超过现有库存'));
|
|
}
|
|
$store->productSkus()->updateExistingPivot($product->id, [
|
|
'amount' => $product->pivot->amount + $amount
|
|
]);
|
|
$store->stockLogs()->create([
|
|
'administrator_id' => $administrator->id,
|
|
'amount' => $request->input('amount'),
|
|
'product_sku_id' => $product->id,
|
|
'remarks' => $request->input('remarks'),
|
|
'tag_id' => $tag->id
|
|
]);
|
|
return $this->sendResponse($this->response()->success(trans('admin.save_succeeded')));
|
|
}
|
|
}
|