ultimatepos/Modules/InventoryManagement/Http/Controllers/WmsController.php

75 lines
2.6 KiB
PHP

<?php
namespace Modules\InventoryManagement\Http\Controllers;
use App\BusinessLocation;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\InventoryManagement\Models\WmsWave;
use Modules\InventoryManagement\Models\WmsYardLocation;
use Modules\InventoryManagement\Services\WmsWaveService;
class WmsController extends Controller
{
public function index(Request $request)
{
$business_id = $request->session()->get('user.business_id');
$waves = WmsWave::forBusiness($business_id)->with('lines')->latest('id')->paginate(20);
$yards = WmsYardLocation::forBusiness($business_id)->get();
return view('inventorymanagement::wms.index', compact('waves', 'yards'));
}
public function storeWave(Request $request, WmsWaveService $wms)
{
$business_id = $request->session()->get('user.business_id');
$validated = $request->validate([
'location_id' => 'required|integer',
'sell_line_ids' => 'nullable|array',
]);
$wave = $wms->createWave($business_id, (int) $validated['location_id'], $validated['sell_line_ids'] ?? []);
return redirect()->back()->with('status', ['success' => 1, 'msg' => 'Wave '.$wave->wave_no.' created']);
}
public function releaseWave($id, WmsWaveService $wms)
{
$business_id = request()->session()->get('user.business_id');
$wave = WmsWave::forBusiness($business_id)->findOrFail($id);
$wms->releaseWave($wave);
return redirect()->back()->with('status', ['success' => 1, 'msg' => 'Wave released']);
}
public function rfScan(Request $request)
{
$business_id = $request->session()->get('user.business_id');
$validated = $request->validate([
'barcode' => 'required|string',
'scan_type' => 'required|string',
'wave_line_id' => 'nullable|integer',
]);
\DB::table('im_wms_rf_scans')->insert([
'business_id' => $business_id,
'user_id' => auth()->id(),
'scan_type' => $validated['scan_type'],
'barcode' => $validated['barcode'],
'wave_line_id' => $validated['wave_line_id'] ?? null,
'scanned_at' => now(),
'created_at' => now(),
'updated_at' => now(),
]);
if (! empty($validated['wave_line_id'])) {
$line = \Modules\InventoryManagement\Models\WmsWaveLine::find($validated['wave_line_id']);
if ($line) {
app(WmsWaveService::class)->recordPick($line, 1);
}
}
return response()->json(['success' => true]);
}
}