81 lines
2.8 KiB
PHP
81 lines
2.8 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Api;
|
||
|
||
use App\Models\StockRoom;
|
||
use Illuminate\Http\Request;
|
||
use App\Http\Controllers\Controller;
|
||
|
||
class StockRoomController extends Controller
|
||
{
|
||
|
||
public function store(Request $request)
|
||
{
|
||
$data = $request->validate([
|
||
'room_symbol' => 'required|string',
|
||
'room_name' => 'required|string',
|
||
'lines' => 'required|integer|min:1',
|
||
'racks_per_line' => 'required|integer|min:1',
|
||
'shelves_per_rack' => 'required|integer|min:1',
|
||
'positions_per_shelf' => 'required|integer|min:1',
|
||
]);
|
||
|
||
\DB::transaction(function() use($data) {
|
||
$room = StockRoom::create([
|
||
'room_symbol' => $data['room_symbol'],
|
||
'room_name' => $data['room_name'],
|
||
]);
|
||
|
||
for ($i = 1; $i <= $data['lines']; $i++) {
|
||
$line = $room->lines()->create([
|
||
'line_symbol' => $i,
|
||
'line_name' => 'Line ' . $i,
|
||
]);
|
||
for ($j = 1; $j <= $data['racks_per_line']; $j++) {
|
||
$rack = $line->racks()->create([
|
||
'rack_symbol' => $j,
|
||
'rack_name' => 'Rack ' . $j,
|
||
]);
|
||
for ($k = 1; $k <= $data['shelves_per_rack']; $k++) {
|
||
$shelf = $rack->shelves()->create([
|
||
'shelf_symbol' => $k,
|
||
'shelf_name' => 'Shelf ' . $k,
|
||
]);
|
||
for ($p = 1; $p <= $data['positions_per_shelf']; $p++) {
|
||
$shelf->positions()->create([
|
||
'position_symbol' => $p,
|
||
'position_name' => 'Position ' . $p,
|
||
'capacity' => 0,
|
||
]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
return response()->json(['message' => 'Room created'], 201);
|
||
}
|
||
|
||
public function show(StockRoom $room)
|
||
{
|
||
$room->load('lines.racks.shelves.positions.sections');
|
||
return response()->json($room);
|
||
}
|
||
|
||
public function update(Request $request, StockRoom $room)
|
||
{
|
||
// You can use a single JSON payload with full tree edits, or
|
||
// issue individual calls per entity (lines, racks, etc.)
|
||
// For brevity, let’s assume front-end will call your existing modals
|
||
// to update positions or sections via your other APIs.
|
||
$room->update($request->only('room_symbol','room_name'));
|
||
return response()->json(['message'=>'Room updated']);
|
||
}
|
||
|
||
public function destroy(StockRoom $room)
|
||
{
|
||
$room->delete();
|
||
return response()->json(['message'=>'Room deleted']);
|
||
}
|
||
}
|