Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
71.43% covered (warning)
71.43%
15 / 21
25.00% covered (danger)
25.00%
2 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
Commission
71.43% covered (warning)
71.43%
15 / 21
25.00% covered (danger)
25.00%
2 / 8
9.49
0.00% covered (danger)
0.00%
0 / 1
 casts
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
1
 tenant
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 store
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 influencer
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 order
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 coupon
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 settlement
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 adjustments
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Models;
4
5use App\Enums\CommissionStatus;
6use Illuminate\Database\Eloquent\Factories\HasFactory;
7use Illuminate\Database\Eloquent\Model;
8use Illuminate\Database\Eloquent\Relations\BelongsTo;
9use Illuminate\Database\Eloquent\Relations\HasMany;
10
11class Commission extends Model
12{
13    use HasFactory;
14
15    protected $fillable = [
16        'tenant_id', 'store_id', 'influencer_id', 'order_id', 'coupon_id', 'commission_base_amount',
17        'commission_percentage', 'gamification_bonus_percentage', 'commission_amount', 'status',
18        'forecasted_at', 'approved_at', 'released_at', 'paid_at', 'cancelled_at', 'reversed_at',
19        'settlement_id', 'metadata',
20    ];
21
22    protected function casts(): array
23    {
24        return [
25            'commission_base_amount' => 'decimal:2',
26            'commission_percentage' => 'decimal:2',
27            'gamification_bonus_percentage' => 'decimal:2',
28            'commission_amount' => 'decimal:2',
29            'status' => CommissionStatus::class,
30            'forecasted_at' => 'datetime',
31            'approved_at' => 'datetime',
32            'released_at' => 'datetime',
33            'paid_at' => 'datetime',
34            'cancelled_at' => 'datetime',
35            'reversed_at' => 'datetime',
36            'metadata' => 'array',
37        ];
38    }
39
40    public function tenant(): BelongsTo { return $this->belongsTo(Tenant::class); }
41    public function store(): BelongsTo { return $this->belongsTo(Store::class); }
42    public function influencer(): BelongsTo { return $this->belongsTo(Influencer::class); }
43    public function order(): BelongsTo { return $this->belongsTo(Order::class); }
44    public function coupon(): BelongsTo { return $this->belongsTo(InfluencerCoupon::class, 'coupon_id'); }
45    public function settlement(): BelongsTo { return $this->belongsTo(MonthlySettlement::class, 'settlement_id'); }
46    public function adjustments(): HasMany { return $this->hasMany(CommissionAdjustment::class); }
47}