Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
StockController
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 4
110
0.00% covered (danger)
0.00%
0 / 1
 stock
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 details
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 update
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
20
 updateVariant
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace App\Http\Controllers;
4
5use App\Models\admin\Product;
6use App\Models\admin\Stock;
7use App\Service\StockService;
8use App\Services\Location\BranchContext;
9use App\Services\Stock\InventoryService;
10use Illuminate\Http\Request;
11use Illuminate\Support\Facades\DB;
12
13class StockController extends Controller
14{
15    public function stock()
16    {
17        $data['stocks'] = Stock::query()->with(['product', 'color', 'size', 'brand'])->orderByDesc('updated_at')->get()->unique('product_id');
18        $data['warehouses'] = feature('multi_warehouse') ? app(BranchContext::class)->warehouses()->active()->orderByDesc('is_default')->pluck('name', 'id') : collect();
19
20        return view('admin.stock.stock')->with($data);
21    }
22
23    public function details($id)
24    {
25        $data['stocks'] = Stock::query()->with(['product', 'color', 'size', 'brand'])->where('product_id', $id)->orderBy('color_id', 'DESC')->orderBy('stock_in', 'ASC')->get();
26        $data['product'] = Product::query()->findOrFail($id);
27        $data['warehouses'] = feature('multi_warehouse') ? app(BranchContext::class)->warehouses()->active()->orderByDesc('is_default')->pluck('name', 'id') : collect();
28
29        return view('admin.stock.stock-details')->with($data);
30    }
31
32    public function update(Request $request, $id)
33    {
34
35        $request->validate([
36            'stock_in' => 'required|integer|min:1',
37            'warehouse_id' => feature('multi_warehouse') ? 'required|exists:warehouses,id' : 'nullable',
38        ]);
39        app(BranchContext::class)->ensureWarehouse($request->integer('warehouse_id') ?: null);
40
41        app(InventoryService::class)->adjust($id, (int) $request->stock_in, $request->integer('warehouse_id') ?: null);
42
43        return redirect()->back()->with('success', 'Stock updated successfully');
44    }
45
46    public function updateVariant(Request $request, $id)
47    {
48        try {
49            DB::beginTransaction();
50            $product = Product::query()->findOrFail($id);
51            $stock = StockService::createStockVariant($product);
52            DB::commit();
53
54            return redirect()->back()->with('success', 'Stock updated successfully');
55
56        } catch (\Throwable $e) {
57            DB::rollBack();
58            report($e);
59
60            return redirect()->back()->with('error', 'Error updating stock');
61        }
62
63    }
64}