Passed
Push — main ( 1a73d8...6d7b5d )
by Thierry
14:19
created

Charge::getIsActiveAttribute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
namespace Siak\Tontine\Model;
4
5
use Database\Factories\ChargeFactory;
6
use Illuminate\Database\Eloquent\Factories\Factory;
7
use Illuminate\Database\Eloquent\Factories\HasFactory;
8
use Illuminate\Database\Eloquent\Builder;
9
use Siak\Tontine\Model\Traits\HasCurrency;
10
11
use function intval;
12
13
class Charge extends Base
14
{
15
    use HasFactory;
16
    use HasCurrency;
0 ignored issues
show
Bug introduced by
The trait Siak\Tontine\Model\Traits\HasCurrency requires the property $amount which is not provided by Siak\Tontine\Model\Charge.
Loading history...
17
18
    /**
19
     * @const
20
     */
21
    const TYPE_FEE = 0;
22
23
    /**
24
     * @const
25
     */
26
    const TYPE_FINE = 1;
27
28
    /**
29
     * @const
30
     */
31
    const PERIOD_NONE = 0;
32
33
    /**
34
     * @const
35
     */
36
    const PERIOD_ONCE = 1;
37
38
    /**
39
     * @const
40
     */
41
    const PERIOD_ROUND = 2;
42
43
    /**
44
     * @const
45
     */
46
    const PERIOD_SESSION = 3;
47
48
    /**
49
     * Indicates if the model should be timestamped.
50
     *
51
     * @var bool
52
     */
53
    public $timestamps = false;
54
55
    /**
56
     * The attributes that are mass assignable.
57
     *
58
     * @var array
59
     */
60
    protected $fillable = [
61
        'name',
62
        'type',
63
        'period',
64
        'amount',
65
        'active',
66
        'lendable',
67
    ];
68
69
    /**
70
     * Create a new factory instance for the model.
71
     *
72
     * @return Factory
73
     */
74
    protected static function newFactory()
75
    {
76
        return ChargeFactory::new();
77
    }
78
79
    public function tontine()
80
    {
81
        return $this->belongsTo(Tontine::class);
82
    }
83
84
    public function session_bills()
85
    {
86
        return $this->hasMany(SessionBill::class);
87
    }
88
89
    public function round_bills()
90
    {
91
        return $this->hasMany(RoundBill::class);
92
    }
93
94
    public function tontine_bills()
95
    {
96
        return $this->hasMany(TontineBill::class);
97
    }
98
99
    public function libre_bills()
100
    {
101
        return $this->hasMany(LibreBill::class);
102
    }
103
104
    public function targets()
105
    {
106
        return $this->hasMany(SettlementTarget::class);
107
    }
108
109
    public function getIsFeeAttribute()
110
    {
111
        return intval($this->type) === self::TYPE_FEE;
112
    }
113
114
    public function getIsFineAttribute()
115
    {
116
        return intval($this->type) === self::TYPE_FINE;
117
    }
118
119
    public function getPeriodOnceAttribute()
120
    {
121
        return intval($this->period) === self::PERIOD_ONCE;
122
    }
123
124
    public function getPeriodRoundAttribute()
125
    {
126
        return intval($this->period) === self::PERIOD_ROUND;
127
    }
128
129
    public function getPeriodSessionAttribute()
130
    {
131
        return intval($this->period) === self::PERIOD_SESSION;
132
    }
133
134
    public function getIsFixedAttribute()
135
    {
136
        return intval($this->period) !== self::PERIOD_NONE;
137
    }
138
139
    public function getIsVariableAttribute()
140
    {
141
        return intval($this->period) === self::PERIOD_NONE;
142
    }
143
144
    public function getHasAmountAttribute()
145
    {
146
        return $this->is_fixed || $this->amount > 0;
147
    }
148
149
    public function getIsActiveAttribute()
150
    {
151
        return $this->active == true;
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
152
    }
153
154
    /**
155
     * @param  Builder  $query
156
     *
157
     * @return Builder
158
     */
159
    public function scopeFee(Builder $query): Builder
160
    {
161
        return $query->where('type', self::TYPE_FEE);
162
    }
163
164
    /**
165
     * @param  Builder  $query
166
     *
167
     * @return Builder
168
     */
169
    public function scopeFine(Builder $query): Builder
170
    {
171
        return $query->where('type', self::TYPE_FINE);
172
    }
173
174
    /**
175
     * @param  Builder  $query
176
     *
177
     * @return Builder
178
     */
179
    public function scopeOnce(Builder $query): Builder
180
    {
181
        return $query->where('type', self::TYPE_FEE)->where('period', self::PERIOD_ONCE);
182
    }
183
184
    /**
185
     * @param  Builder  $query
186
     *
187
     * @return Builder
188
     */
189
    public function scopeRound(Builder $query): Builder
190
    {
191
        return $query->where('type', self::TYPE_FEE)->where('period', self::PERIOD_ROUND);
192
    }
193
194
    /**
195
     * @param  Builder  $query
196
     *
197
     * @return Builder
198
     */
199
    public function scopeSession(Builder $query): Builder
200
    {
201
        return $query->where('type', self::TYPE_FEE)->where('period', self::PERIOD_SESSION);
202
    }
203
204
    /**
205
     * @param  Builder  $query
206
     *
207
     * @return Builder
208
     */
209
    public function scopeActive(Builder $query): Builder
210
    {
211
        return $query->where('active', true);
212
    }
213
214
    /**
215
     * @param  Builder  $query
216
     *
217
     * @return Builder
218
     */
219
    public function scopeFixed(Builder $query): Builder
220
    {
221
        return $query->where('period', '!=', self::PERIOD_NONE);
222
    }
223
224
    /**
225
     * @param  Builder  $query
226
     *
227
     * @return Builder
228
     */
229
    public function scopeVariable(Builder $query): Builder
230
    {
231
        return $query->where('period', self::PERIOD_NONE);
232
    }
233
}
234