Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
73.33% covered (warning)
73.33%
11 / 15
42.86% covered (danger)
42.86%
3 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
AccountDefinition
73.33% covered (warning)
73.33%
11 / 15
42.86% covered (danger)
42.86%
3 / 7
10.54
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
3
 query
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 applyFilters
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 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\Account;
6use App\Services\ImportExport\Definition;
7use Illuminate\Database\Eloquent\Builder;
8use Illuminate\Support\Facades\Auth;
9
10class AccountDefinition extends Definition
11{
12    public function label(): string
13    {
14        return 'Accounts';
15    }
16
17    public function model(): string
18    {
19        return Account::class;
20    }
21
22    public function columns(): array
23    {
24        return [
25            ['key' => 'name', 'label' => 'Name', 'required' => true, 'rules' => 'string|max:150', 'sample' => 'Cash Drawer'],
26            ['key' => 'type', 'label' => 'Type', 'rules' => 'nullable|in:cash,bank,mobile_wallet', 'sample' => 'cash',
27                'import' => fn ($v) => in_array($v, ['cash', 'bank', 'mobile_wallet'], true) ? $v : 'cash'],
28            ['key' => 'opening_balance', 'label' => 'Opening balance', 'rules' => 'nullable|numeric', 'sample' => '0'],
29            ['key' => 'is_active', 'label' => 'Active', 'sample' => '1',
30                'import' => fn ($v) => in_array(strtolower((string) $v), ['1', 'yes', 'true', 'active'], true) ? 1 : 0],
31        ];
32    }
33
34    public function query(): Builder
35    {
36        return Account::query()->orderBy('name');
37    }
38
39    public function applyFilters(Builder $query, array $filters): Builder
40    {
41        $s = trim((string) ($filters['search'] ?? ''));
42
43        return $query->when($s !== '', fn ($q) => $q->where('name', 'like', "%{$s}%"));
44    }
45
46    public function uniqueBy(): array
47    {
48        return ['name'];
49    }
50
51    public function defaults(): array
52    {
53        return ['created_by' => Auth::id(), 'is_active' => 1];
54    }
55}