Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
WarehouseController
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 5
210
0.00% covered (danger)
0.00%
0 / 1
 index
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 store
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
20
 update
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
30
 destroy
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
12
 validated
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Http\Controllers\admin;
4
5use App\Http\Controllers\Controller;
6use App\Models\Branch;
7use App\Models\Warehouse;
8use Illuminate\Http\RedirectResponse;
9use Illuminate\Http\Request;
10
11class WarehouseController extends Controller
12{
13    public function index()
14    {
15        return view('admin.locations.warehouses', [
16            'warehouses' => Warehouse::with('branch')->withSum('stocks', 'quantity')->orderByDesc('is_default')->get(),
17            'branches' => Branch::where('status', true)->pluck('name', 'id'),
18        ]);
19    }
20
21    public function store(Request $request): RedirectResponse
22    {
23        $data = $this->validated($request);
24        $data['is_default'] = $data['is_default'] || ! Warehouse::where('is_default', true)->exists();
25        if ($data['is_default']) {
26            $data['status'] = true;
27        }
28        if ($data['is_default']) {
29            Warehouse::where('is_default', true)->update(['is_default' => false]);
30        }
31        Warehouse::create($data);
32
33        return back()->with('success', 'Warehouse created.');
34    }
35
36    public function update(Request $request, Warehouse $warehouse): RedirectResponse
37    {
38        $data = $this->validated($request);
39        if ($warehouse->is_default && (! $data['status'] || ! $data['is_default'])) {
40            return back()->with('error', 'Make another warehouse the default before changing this one.');
41        }
42        if ($data['is_default']) {
43            Warehouse::whereKeyNot($warehouse->id)->update(['is_default' => false]);
44        }
45        $warehouse->update($data);
46
47        return back()->with('success', 'Warehouse updated.');
48    }
49
50    public function destroy(Warehouse $warehouse): RedirectResponse
51    {
52        if ($warehouse->is_default || $warehouse->stocks()->whereRaw('quantity <> 0')->exists()) {
53            return back()->with('error', 'A default warehouse or a warehouse with stock cannot be deleted.');
54        }
55        $warehouse->delete();
56
57        return back()->with('success', 'Warehouse deleted.');
58    }
59
60    private function validated(Request $request): array
61    {
62        $data = $request->validate([
63            'name' => ['required', 'string', 'max:150'], 'branch_id' => ['required', 'exists:branches,id'],
64            'address' => ['nullable', 'string', 'max:1000'], 'is_default' => ['nullable', 'boolean'], 'status' => ['nullable', 'boolean'],
65        ]);
66        $data['is_default'] = $request->boolean('is_default');
67        $data['status'] = $request->boolean('status');
68
69        return $data;
70    }
71}