Issues (202)

src/Model/ChargeDef.php (2 issues)

Labels
Severity
1
<?php
2
3
namespace Siak\Tontine\Model;
4
5
use Illuminate\Database\Eloquent\Casts\Attribute;
6
use Illuminate\Database\Eloquent\Builder;
7
use Siak\Tontine\Model\Traits\HasCurrency;
8
9
use function intval;
10
11
class ChargeDef extends Base
12
{
13
    use HasCurrency;
0 ignored issues
show
The trait Siak\Tontine\Model\Traits\HasCurrency requires the property $amount which is not provided by Siak\Tontine\Model\ChargeDef.
Loading history...
14
15
    /**
16
     * @const
17
     */
18
    const TYPE_FEE = 0;
19
20
    /**
21
     * @const
22
     */
23
    const TYPE_FINE = 1;
24
25
    /**
26
     * @const
27
     */
28
    const PERIOD_NONE = 0;
29
30
    /**
31
     * @const
32
     */
33
    const PERIOD_ONCE = 1;
34
35
    /**
36
     * @const
37
     */
38
    const PERIOD_ROUND = 2;
39
40
    /**
41
     * @const
42
     */
43
    const PERIOD_SESSION = 3;
44
45
    /**
46
     * Indicates if the model should be timestamped.
47
     *
48
     * @var bool
49
     */
50
    public $timestamps = false;
51
52
    /**
53
     * The attributes that are mass assignable.
54
     *
55
     * @var array
56
     */
57
    protected $fillable = [
58
        'name',
59
        'type',
60
        'period',
61
        'amount',
62
        'active',
63
        'lendable',
64
    ];
65
66
    public function isFee(): Attribute
67
    {
68
        return Attribute::make(
69
            get: fn() => intval($this->type) === self::TYPE_FEE,
70
        );
71
    }
72
73
    public function isFine(): Attribute
74
    {
75
        return Attribute::make(
76
            get: fn() => intval($this->type) === self::TYPE_FINE,
77
        );
78
    }
79
80
    public function periodOnce(): Attribute
81
    {
82
        return Attribute::make(
83
            get: fn() => intval($this->period) === self::PERIOD_ONCE,
84
        );
85
    }
86
87
    public function periodRound(): Attribute
88
    {
89
        return Attribute::make(
90
            get: fn() => intval($this->period) === self::PERIOD_ROUND,
91
        );
92
    }
93
94
    public function periodSession(): Attribute
95
    {
96
        return Attribute::make(
97
            get: fn() => intval($this->period) === self::PERIOD_SESSION,
98
        );
99
    }
100
101
    public function isFixed(): Attribute
102
    {
103
        return Attribute::make(
104
            get: fn() => intval($this->period) !== self::PERIOD_NONE,
105
        );
106
    }
107
108
    public function isVariable(): Attribute
109
    {
110
        return Attribute::make(
111
            get: fn() => intval($this->period) === self::PERIOD_NONE,
112
        );
113
    }
114
115
    public function hasAmount(): Attribute
116
    {
117
        return Attribute::make(
118
            get: fn() => $this->is_fixed || $this->amount > 0,
0 ignored issues
show
The property is_fixed does not seem to exist on Siak\Tontine\Model\ChargeDef. 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...
119
        );
120
    }
121
122
    public function guild()
123
    {
124
        return $this->belongsTo(Guild::class);
125
    }
126
127
    public function charges()
128
    {
129
        return $this->hasMany(Charge::class, 'def_id');
130
    }
131
132
    /**
133
     * @param  Builder  $query
134
     *
135
     * @return Builder
136
     */
137
    public function scopeFee(Builder $query): Builder
138
    {
139
        return $query->where('type', self::TYPE_FEE);
140
    }
141
142
    /**
143
     * @param  Builder  $query
144
     *
145
     * @return Builder
146
     */
147
    public function scopeFine(Builder $query): Builder
148
    {
149
        return $query->where('type', self::TYPE_FINE);
150
    }
151
152
    /**
153
     * @param  Builder  $query
154
     *
155
     * @return Builder
156
     */
157
    public function scopeOnce(Builder $query): Builder
158
    {
159
        return $query->where('type', self::TYPE_FEE)->where('period', self::PERIOD_ONCE);
160
    }
161
162
    /**
163
     * @param  Builder  $query
164
     *
165
     * @return Builder
166
     */
167
    public function scopeRound(Builder $query): Builder
168
    {
169
        return $query->where('type', self::TYPE_FEE)->where('period', self::PERIOD_ROUND);
170
    }
171
172
    /**
173
     * @param  Builder  $query
174
     *
175
     * @return Builder
176
     */
177
    public function scopeSession(Builder $query): Builder
178
    {
179
        return $query->where('type', self::TYPE_FEE)->where('period', self::PERIOD_SESSION);
180
    }
181
182
    /**
183
     * @param  Builder  $query
184
     * @param  bool     $active
185
     *
186
     * @return Builder
187
     */
188
    public function scopeActive(Builder $query, bool $active = true): Builder
189
    {
190
        return $query->where('active', $active);
191
    }
192
193
    /**
194
     * @param  Builder  $query
195
     *
196
     * @return Builder
197
     */
198
    public function scopeFixed(Builder $query): Builder
199
    {
200
        return $query->where('period', '!=', self::PERIOD_NONE);
201
    }
202
203
    /**
204
     * @param  Builder  $query
205
     *
206
     * @return Builder
207
     */
208
    public function scopeVariable(Builder $query): Builder
209
    {
210
        return $query->where('period', self::PERIOD_NONE);
211
    }
212
}
213