Passed
Push — main ( 9da855...5626b3 )
by Thierry
12:12 queued 05:12
created

Charge::periodOnce()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 4
rs 10
1
<?php
2
3
namespace Siak\Tontine\Model;
4
5
use Illuminate\Database\Eloquent\Builder;
6
use Illuminate\Database\Eloquent\Casts\Attribute;
7
8
use function intval;
9
10
class Charge extends Base
11
{
12
    /**
13
     * Indicates if the model should be timestamped.
14
     *
15
     * @var bool
16
     */
17
    public $timestamps = false;
18
19
    /**
20
     * The attributes that are mass assignable.
21
     *
22
     * @var array
23
     */
24
    protected $fillable = [
25
        'name',
26
        'type',
27
        'period',
28
        'amount',
29
        'lendable',
30
        'def_id',
31
        'round_id',
32
    ];
33
34
    public function isFee(): Attribute
35
    {
36
        return Attribute::make(
37
            get: fn() => intval($this->type) === ChargeDef::TYPE_FEE,
38
        );
39
    }
40
41
    public function isFine(): Attribute
42
    {
43
        return Attribute::make(
44
            get: fn() => intval($this->type) === ChargeDef::TYPE_FINE,
45
        );
46
    }
47
48
    public function periodOnce(): Attribute
49
    {
50
        return Attribute::make(
51
            get: fn() => intval($this->period) === ChargeDef::PERIOD_ONCE,
52
        );
53
    }
54
55
    public function periodRound(): Attribute
56
    {
57
        return Attribute::make(
58
            get: fn() => intval($this->period) === ChargeDef::PERIOD_ROUND,
59
        );
60
    }
61
62
    public function periodSession(): Attribute
63
    {
64
        return Attribute::make(
65
            get: fn() => intval($this->period) === ChargeDef::PERIOD_SESSION,
66
        );
67
    }
68
69
    public function isFixed(): Attribute
70
    {
71
        return Attribute::make(
72
            get: fn() => intval($this->period) !== ChargeDef::PERIOD_NONE,
73
        );
74
    }
75
76
    public function isVariable(): Attribute
77
    {
78
        return Attribute::make(
79
            get: fn() => intval($this->period) === ChargeDef::PERIOD_NONE,
80
        );
81
    }
82
83
    public function hasAmount(): Attribute
84
    {
85
        return Attribute::make(
86
            get: fn() => $this->is_fixed || $this->amount > 0,
0 ignored issues
show
Bug introduced by
The property is_fixed does not seem to exist on Siak\Tontine\Model\Charge. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
87
        );
88
    }
89
90
    public function def()
91
    {
92
        return $this->belongsTo(ChargeDef::class, 'def_id');
93
    }
94
95
    public function round()
96
    {
97
        return $this->belongsTo(Round::class);
98
    }
99
100
    public function session_bills()
101
    {
102
        return $this->hasMany(SessionBill::class);
103
    }
104
105
    public function round_bills()
106
    {
107
        return $this->hasMany(RoundBill::class);
108
    }
109
110
    public function onetime_bills()
111
    {
112
        return $this->hasMany(OnetimeBill::class);
113
    }
114
115
    public function libre_bills()
116
    {
117
        return $this->hasMany(LibreBill::class);
118
    }
119
120
    public function targets()
121
    {
122
        return $this->hasMany(SettlementTarget::class);
123
    }
124
125
    /**
126
     * @param  Builder  $query
127
     *
128
     * @return Builder
129
     */
130
    public function scopeFixed(Builder $query): Builder
131
    {
132
        return $query->where('period', '!=', ChargeDef::PERIOD_NONE);
133
    }
134
135
    /**
136
     * @param  Builder  $query
137
     *
138
     * @return Builder
139
     */
140
    public function scopeVariable(Builder $query): Builder
141
    {
142
        return $query->where('period', ChargeDef::PERIOD_NONE);
143
    }
144
145
    /**
146
     * @param  Builder  $query
147
     * @param  bool  $lendable
148
     *
149
     * @return Builder
150
     */
151
    public function scopeLendable(Builder $query, bool $lendable): Builder
152
    {
153
        return $query->where('lendable', $lendable);
154
    }
155
156
    /**
157
     * @param  Builder  $query
158
     *
159
     * @return Builder
160
     */
161
    public function scopeFee(Builder $query): Builder
162
    {
163
        return $query->where('type', ChargeDef::TYPE_FEE);
164
    }
165
166
    /**
167
     * @param  Builder  $query
168
     *
169
     * @return Builder
170
     */
171
    public function scopeFine(Builder $query): Builder
172
    {
173
        return $query->where('type', ChargeDef::TYPE_FINE);
174
    }
175
176
    /**
177
     * @param  Builder  $query
178
     *
179
     * @return Builder
180
     */
181
    public function scopeOnce(Builder $query): Builder
182
    {
183
        return $query->where('type', ChargeDef::TYPE_FEE)
184
            ->where('period', ChargeDef::PERIOD_ONCE);
185
    }
186
187
    /**
188
     * @param  Builder  $query
189
     *
190
     * @return Builder
191
     */
192
    public function scopeRound(Builder $query): Builder
193
    {
194
        return $query->where('type', ChargeDef::TYPE_FEE)
195
            ->where('period', ChargeDef::PERIOD_ROUND);
196
    }
197
198
    /**
199
     * @param  Builder  $query
200
     *
201
     * @return Builder
202
     */
203
    public function scopeSession(Builder $query): Builder
204
    {
205
        return $query->where('type', ChargeDef::TYPE_FEE)
206
            ->where('period', ChargeDef::PERIOD_SESSION);
207
    }
208
}
209