Issues (350)

app/Models/Event.php (2 issues)

1
<?php
2
3
namespace App\Models;
4
5
use Backpack\CRUD\app\Models\Traits\CrudTrait;
6
use Carbon\Carbon;
7
use Illuminate\Database\Eloquent\Model;
8
use Prologue\Alerts\Facades\Alert;
9
use Spatie\Activitylog\Traits\LogsActivity;
10
11
/**
12
 * @mixin IdeHelperEvent
13
 */
14
class Event extends Model
15
{
16
    use CrudTrait;
0 ignored issues
show
The trait Backpack\CRUD\app\Models\Traits\CrudTrait requires some properties which are not provided by App\Models\Event: $fakeColumns, $identifiableAttribute, $Type
Loading history...
17
    use LogsActivity;
18
19
    protected static function boot()
20
    {
21
        parent::boot();
22
23
        // before adding an event, we check that the teacher is available
24
        static::saving(function ($event) {
25
            $teacher = Teacher::find($event->teacher_id);
26
            // if the teacher is on leave on the day of the event
27
            if ($event->teacher_id !== null && $teacher) {
28
                if ($teacher->leaves->contains('date', Carbon::parse($event->start)->toDateString())) {
29
                    // detach the teacher from the event
30
                    $event->teacher_id = null;
31
                    Alert::warning(__('The selected teacher is not available on this date'))->flash();
0 ignored issues
show
It seems like __('The selected teacher...vailable on this date') can also be of type array and array; however, parameter $text of Prologue\Alerts\Facades\Alert::warning() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

31
                    Alert::warning(/** @scrutinizer ignore-type */ __('The selected teacher is not available on this date'))->flash();
Loading history...
32
                }
33
            }
34
        });
35
    }
36
37
    public $timestamps = true;
38
39
    protected $guarded = ['id'];
40
41
    protected $appends = ['length'];
42
43
    protected static bool $logUnguarded = true;
44
45
    /*
46
    |--------------------------------------------------------------------------
47
    | FUNCTIONS
48
    |--------------------------------------------------------------------------
49
    */
50
51
    /*
52
    |--------------------------------------------------------------------------
53
    | RELATIONS
54
    |--------------------------------------------------------------------------
55
    */
56
57
    public function coursetime()
58
    {
59
        return $this->belongsTo(CourseTime::class);
60
    }
61
62
    public function course()
63
    {
64
        return $this->belongsTo(Course::class)->withCount('enrollments');
65
    }
66
67
    public function enrollments()
68
    {
69
        return $this->course->enrollments();
70
    }
71
72
    public function attendance()
73
    {
74
        return $this->hasMany(Attendance::class);
75
    }
76
77
    public function teacher()
78
    {
79
        return $this->belongsTo(Teacher::class)->withTrashed();
80
    }
81
82
    public function room()
83
    {
84
        return $this->belongsTo(Room::class)->withTrashed();
85
    }
86
87
    public function getPeriodAttribute()
88
    {
89
        return $this->course->period_id;
90
    }
91
92
    /*
93
    |--------------------------------------------------------------------------
94
    | SCOPES
95
    |--------------------------------------------------------------------------
96
    */
97
98
    public function scopeUnassigned($query)
99
    {
100
        return $query->whereNull('teacher_id');
101
    }
102
103
    /*
104
    |--------------------------------------------------------------------------
105
    | ACCESORS
106
    |--------------------------------------------------------------------------
107
    */
108
109
    public function getLengthAttribute()
110
    {
111
        return Carbon::parse($this->end)->diffInSeconds(Carbon::parse($this->start)) / 3600;
112
    }
113
114
    public function getVolumeAttribute()
115
    {
116
        return Carbon::parse($this->start)->diffInMinutes(Carbon::parse($this->end)) / 60;
117
    }
118
119
    public function getAttendanceCountAttribute()
120
    {
121
        return $this->attendance->count();
122
    }
123
124
    public function getFormattedDateAttribute()
125
    {
126
        return Carbon::parse($this->start)->toFormattedDateString();
127
    }
128
129
    public function getStartTimeAttribute()
130
    {
131
        return Carbon::parse($this->start)->toTimeString();
132
    }
133
134
    public function getEndTimeAttribute()
135
    {
136
        return Carbon::parse($this->end)->toTimeString();
137
    }
138
139
    public function getEventLengthAttribute()
140
    {
141
        return round(Carbon::parse($this->end)->diffInMinutes(Carbon::parse($this->start)) / 60, 2);
142
    }
143
144
    public function getShortDateAttribute()
145
    {
146
        return Carbon::parse($this->start)->day.'/'.Carbon::parse($this->start)->month;
147
    }
148
149
    public function getColorAttribute()
150
    {
151
        return $this?->course->color ?? ('#'.substr(md5($this->course_id ?? '0'), 0, 6));
152
    }
153
154
    /*
155
    |--------------------------------------------------------------------------
156
    | MUTATORS
157
    |--------------------------------------------------------------------------
158
    */
159
}
160