diff --git a/app/Http/Livewire/Frontend/SearchCourse.php b/app/Http/Livewire/Frontend/SearchCourse.php
index bf4b5c7d..515179c7 100644
--- a/app/Http/Livewire/Frontend/SearchCourse.php
+++ b/app/Http/Livewire/Frontend/SearchCourse.php
@@ -2,10 +2,13 @@
namespace App\Http\Livewire\Frontend;
+use App\Models\Country;
use Livewire\Component;
class SearchCourse extends Component
{
+ public Country $country;
+
public function render()
{
return view('livewire.frontend.search-course');
diff --git a/app/Http/Livewire/Frontend/SearchEvent.php b/app/Http/Livewire/Frontend/SearchEvent.php
index 6ba7b7ee..fad174c0 100644
--- a/app/Http/Livewire/Frontend/SearchEvent.php
+++ b/app/Http/Livewire/Frontend/SearchEvent.php
@@ -2,10 +2,13 @@
namespace App\Http\Livewire\Frontend;
+use App\Models\Country;
use Livewire\Component;
class SearchEvent extends Component
{
+ public Country $country;
+
public function render()
{
return view('livewire.frontend.search-event');
diff --git a/app/Http/Livewire/Tables/CourseTable.php b/app/Http/Livewire/Tables/CourseTable.php
index a67c1f8e..88ef71a2 100644
--- a/app/Http/Livewire/Tables/CourseTable.php
+++ b/app/Http/Livewire/Tables/CourseTable.php
@@ -9,6 +9,8 @@ use Rappasoft\LaravelLivewireTables\Views\Column;
class CourseTable extends DataTableComponent
{
+ public string $country;
+
protected $model = Course::class;
public function configure(): void
@@ -19,22 +21,29 @@ class CourseTable extends DataTableComponent
public function columns(): array
{
return [
- Column::make("Id", "id")
- ->sortable(),
- Column::make("Lecturer id", "lecturer_id")
+ Column::make("Dozent", "lecturer.name")
->sortable(),
Column::make("Name", "name")
->sortable(),
- Column::make("Created at", "created_at")
+ Column::make("Termine")
+ ->label(
+ fn($row, Column $column) => ''.$row->events->count().''
+ )
+ ->html()
->sortable(),
- Column::make("Updated at", "updated_at")
+ Column::make("Erstellt am", "created_at")
->sortable(),
+ Column::make('')
+ ->label(
+ fn($row, Column $column) => view('columns.courses.action')->withRow($row)
+ ),
];
}
public function builder(): Builder
{
return Course::query()
- ->whereHas('country', fn($query) => $query->where('code', $this->country));
+ ->whereHas('events.venue.city.country',
+ fn($query) => $query->where('countries.code', $this->country));
}
}
diff --git a/app/Http/Livewire/Tables/EventTable.php b/app/Http/Livewire/Tables/EventTable.php
new file mode 100644
index 00000000..94fafb8f
--- /dev/null
+++ b/app/Http/Livewire/Tables/EventTable.php
@@ -0,0 +1,63 @@
+setPrimaryKey('id')
+ ->setAdditionalSelects([
+ 'course_id',
+ 'venue_id',
+ ]);
+ }
+
+ public function columns(): array
+ {
+ return [
+ Column::make("Stadt", "venue.city.name")
+ ->sortable(),
+ Column::make("Veranstaltungs-Ort", "venue.name")
+ ->sortable(),
+ Column::make("Dozent", "course.lecturer.name")
+ ->sortable(),
+ Column::make("Kurs", "course.name")
+ ->sortable(),
+ Column::make("Erstellt am", "created_at")
+ ->sortable(),
+ Column::make("Zuletzt geändert", "updated_at")
+ ->sortable(),
+ Column::make("Teilnehmer")
+ ->label(
+ fn($row, Column $column) => ''.$row->registrations->count().''
+ )
+ ->html()
+ ->sortable(),
+ Column::make('')
+ ->label(
+ fn($row, Column $column) => view('columns.events.action')->withRow($row)
+ ),
+ ];
+ }
+
+ public function builder(): Builder
+ {
+ return Event::query()
+ ->withCount([
+ 'registrations',
+ ])
+ ->whereHas('venue.city.country',
+ fn($query) => $query->where('countries.code', $this->country));
+ }
+}
diff --git a/app/Http/Livewire/Tables/VenueTable.php b/app/Http/Livewire/Tables/VenueTable.php
index 46f9b4d5..25cb169f 100644
--- a/app/Http/Livewire/Tables/VenueTable.php
+++ b/app/Http/Livewire/Tables/VenueTable.php
@@ -27,6 +27,10 @@ class VenueTable extends DataTableComponent
->sortable(),
Column::make("Street", "street")
->sortable(),
+ Column::make('')
+ ->label(
+ fn($row, Column $column) => view('columns.venues.action')->withRow($row)
+ ),
];
}
diff --git a/app/Models/Course.php b/app/Models/Course.php
index 0e857d8a..7925597e 100644
--- a/app/Models/Course.php
+++ b/app/Models/Course.php
@@ -35,4 +35,9 @@ class Course extends Model
{
return $this->belongsTo(Lecturer::class);
}
+
+ public function events(): \Illuminate\Database\Eloquent\Relations\HasMany
+ {
+ return $this->hasMany(Event::class);
+ }
}
diff --git a/app/Models/Event.php b/app/Models/Event.php
index 0778a259..bf905eff 100644
--- a/app/Models/Event.php
+++ b/app/Models/Event.php
@@ -38,4 +38,9 @@ class Event extends Model
{
return $this->belongsTo(Venue::class);
}
+
+ public function registrations(): \Illuminate\Database\Eloquent\Relations\HasMany
+ {
+ return $this->hasMany(Registration::class);
+ }
}
diff --git a/resources/views/columns/courses/action.blade.php b/resources/views/columns/courses/action.blade.php
new file mode 100644
index 00000000..a8571def
--- /dev/null
+++ b/resources/views/columns/courses/action.blade.php
@@ -0,0 +1 @@
+