laravel12/app/Http/Controllers/StockLogController.php
2025-12-07 12:28:47 +09:00

59 lines
1.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Product;
use App\Models\StockLog;
use App\Services\StockService;
use Illuminate\Http\Request;
class StockLogController extends Controller
{
public function index(Request $request)
{
$perPage = (int) $request->input('per_page', 20); // 페이지에 표시 할 목록의 수
$title = '입출고 이력';
// Eager Loading 으로 N + 1 문제 해결
$logs = StockLog::with(['product:id,name,sku'])
->latestFirst()
->paginate($perPage);
return view('stock_log.list',compact('title','logs'));
}
public function input(Request $request, $id)
{
// queryString action 의 default value 는 in 으로 한다.
$action = $request->query('action','in');
if(!in_array($action, ['in','out']))
{
abort(400, '잘못된 action 값 입니다.');
}
$title = ($action == 'in') ? '입고 등록' : '출고 등록';
// Product 조회 ( or 404)
$product = Product::findOrFail($id);
// Blade 뷰에 Product 전달
return view('stock.input', compact('product', 'title', 'action'));
}
public function store(Request $request, $id, StockService $stock)
{
$action = $request->query('action', 'in');
if(!in_array($action, ['in','out']))
{
abort(400, '잘못된 action 값 입니다.');
}
$product = Product::findOrFail($id);
$validated = $request->validate([
'amount' => ['required', 'integer']
]);
// StockLog::create([
// 'product_id' => $product->id,
// 'change_type' => $action,
// 'change_amount' => $validated['amount']
// ]);
$stock->adjust($product, $action, (int) $validated['amount']);
return redirect()->route('product')->with('success', $action == 'in' ? '입고처리 완료' : '출고처리 완료');
}
}