diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 1670c02..a758368 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -121,6 +121,11 @@ class Entry extends Model return $this->hasOne(Seat::class); } + public function calculatedScores(): HasMany + { + return $this->hasMany(CalculatedScore::class); + } + public function scopeForSeating(Builder $query): void { $query->where('for_seating', 1); diff --git a/app/Models/ScoreSheet.php b/app/Models/ScoreSheet.php index 01c310f..d3a1e47 100644 --- a/app/Models/ScoreSheet.php +++ b/app/Models/ScoreSheet.php @@ -16,6 +16,22 @@ class ScoreSheet extends Model protected $casts = ['subscores' => 'json']; + protected static function boot() + { + parent::boot(); + static::created(function ($scoreSheet) { + $scoreSheet->deleteRelatedCalculatedScores(); + }); + + static::updated(function ($scoreSheet) { + $scoreSheet->deleteRelatedCalculatedScores(); + }); + + static::deleted(function ($scoreSheet) { + $scoreSheet->deleteRelatedCalculatedScores(); + }); + } + public function entry(): BelongsTo { return $this->belongsTo(Entry::class); @@ -37,9 +53,18 @@ class ScoreSheet extends Model 'audition_id' // Local key on the intermediate model (Entry) ); } + public function getSubscore($id) { return $this->subscores[$id]['score'] ?? false; // this function is used at resources/views/tabulation/entry_score_sheet.blade.php } + + public function deleteRelatedCalculatedScores(): void + { + $entry = $this->entry; + if ($entry) { + $entry->calculatedScores()->delete(); + } + } }