Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
70.59% covered (warning)
70.59%
12 / 17
28.57% covered (danger)
28.57%
2 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
SupplierDefinition
70.59% covered (warning)
70.59%
12 / 17
28.57% covered (danger)
28.57%
2 / 7
8.25
0.00% covered (danger)
0.00%
0 / 1
 label
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 model
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 columns
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
 query
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 applyFilters
75.00% covered (warning)
75.00%
3 / 4
0.00% covered (danger)
0.00%
0 / 1
1.02
 uniqueBy
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 defaults
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Services\ImportExport\Definitions;
4
5use App\Models\admin\Supplier;
6use App\Services\ImportExport\Definition;
7use Illuminate\Database\Eloquent\Builder;
8
9class SupplierDefinition extends Definition
10{
11    public function label(): string
12    {
13        return 'Suppliers';
14    }
15
16    public function model(): string
17    {
18        return Supplier::class;
19    }
20
21    public function columns(): array
22    {
23        return [
24            ['key' => 'supplier_code', 'label' => 'Code', 'sample' => 'S-001'],
25            ['key' => 'name', 'label' => 'Name', 'required' => true, 'rules' => 'string|max:255', 'sample' => 'ABC Traders'],
26            ['key' => 'contact', 'label' => 'Phone', 'rules' => 'nullable|string|max:40', 'sample' => '01700000000'],
27            ['key' => 'email', 'label' => 'Email', 'rules' => 'nullable|email|max:120', 'sample' => 'abc@example.com'],
28            ['key' => 'address', 'label' => 'Address', 'rules' => 'nullable|string|max:500', 'sample' => ''],
29            ['key' => 'details', 'label' => 'Notes', 'rules' => 'nullable|string|max:1000', 'sample' => ''],
30        ];
31    }
32
33    public function query(): Builder
34    {
35        return Supplier::query()->orderByDesc('id');
36    }
37
38    public function applyFilters(Builder $query, array $filters): Builder
39    {
40        $s = trim((string) ($filters['search'] ?? ''));
41
42        return $query->when($s !== '', fn ($q) => $q->where(function ($q) use ($s) {
43            $q->where('name', 'like', "%{$s}%")->orWhere('contact', 'like', "%{$s}%")->orWhere('supplier_code', 'like', "%{$s}%");
44        }));
45    }
46
47    public function uniqueBy(): array
48    {
49        return ['supplier_code'];
50    }
51
52    public function defaults(): array
53    {
54        return ['supplier_code' => 'S-' . rand(1000, 9999)];
55    }
56}