6
0
Fork 0
jiqu-library-server/app/Admin/Controllers/Store/StockController.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')));
}
}