diff --git a/database/seeders/RecruitingChallenge2026Seeder.php b/database/seeders/RecruitingChallenge2026Seeder.php index f64e3ed2..5088f229 100644 --- a/database/seeders/RecruitingChallenge2026Seeder.php +++ b/database/seeders/RecruitingChallenge2026Seeder.php @@ -14,7 +14,8 @@ use Illuminate\Database\Seeder; * * php artisan db:seed --class=RecruitingChallenge2026Seeder * - * Danach im Admin pruefen, Bild eintragen und auf "Aktiv" stellen. Zur Abstimmung ist + * Danach im Admin pruefen und auf "Aktiv" stellen. Das Titelbild liegt unter + * public/img/incentive/recruiting-challenge-2026-27/. Zur Abstimmung ist * "Nur fuer VIP sichtbar" gesetzt; nach Freigabe den Haken entfernen. */ class RecruitingChallenge2026Seeder extends Seeder @@ -46,7 +47,7 @@ class RecruitingChallenge2026Seeder extends Seeder 'include_sales_points' => false, 'status' => 0, 'vip_only' => true, - 'image' => null, + 'image' => 'incentive-recruiting-2026.jpg', ]; $incentive = Incentive::withTrashed()->where('slug', self::SLUG)->first(); diff --git a/dev/_tickets/2026-09-18-recruiting-challenge-inhalte.md b/dev/_tickets/2026-09-18-recruiting-challenge-inhalte.md index 76411d24..34f55fb3 100644 --- a/dev/_tickets/2026-09-18-recruiting-challenge-inhalte.md +++ b/dev/_tickets/2026-09-18-recruiting-challenge-inhalte.md @@ -91,7 +91,7 @@ So im Seeder hinterlegt. Die Punkte 2 (Bestätigung als Voraussetzung), 6 (Gleic ## 7. Bild und Gestaltung -Hero-Bild liefert Kevin: Querformat, ca. 1600 × 600 px, JPG. Kein Strandmotiv, sonst sieht es aus wie Montenegro. Ablage unter `public/img/incentive/`, Dateiname im Admin ins Feld "Bild". +Titelbild liegt vor: `public/img/incentive/recruiting-challenge-2026-27/incentive-recruiting-2026.jpg`, der Seeder trägt den Dateinamen ein. Galerie (seit 22.09. getrennt): Jedes Incentive hat seinen eigenen Bildordner `public/img/incentive//`. Die Challenge bekommt nur ein Titelbild, also `public/img/incentive/recruiting-challenge-2026-27/.jpg`, keine Impressionen. Die Montenegro-Fotos liegen jetzt unter `montenegro-incentive-2026/`. Die Seite beginnt mit dem Teilnahme-Block (Checkbox, Button, aufklappbare Bedingungen), darunter Titelbild, Text und die drei Kacheln Zeitraum, Prämie je Teampartner und Top 3 Bonus, dann "So funktioniert die Challenge" und das Live-Ranking. Bestätigte Teilnehmer sehen oben statt des Blocks ihren Stand mit Rang, Neupartnern und Prämie. @@ -152,7 +152,7 @@ Beim Deploy den Ordner `public/img/incentive/montenegro-incentive-2026/` mit hoc - [ ] Fragen 1 bis 10 mit Dani/Alois entschieden - [ ] Texte freigegeben (Name, Untertitel, Beschreibung, Bedingungen), ggf. Übersetzungen -- [ ] Hero-Bild geliefert und abgelegt +- [x] Titelbild geliefert und abgelegt - [ ] Gleichstandsregel deployt - [ ] Deploy E1 und Seeder auf Produktion - [ ] Challenge im Admin geprüft, Teaser und Rangliste angesehen diff --git a/public/img/incentive/recruiting-challenge-2026-27/incentive-recruiting-2026.jpg b/public/img/incentive/recruiting-challenge-2026-27/incentive-recruiting-2026.jpg new file mode 100644 index 00000000..c1222954 Binary files /dev/null and b/public/img/incentive/recruiting-challenge-2026-27/incentive-recruiting-2026.jpg differ diff --git a/resources/views/dashboard/_incentive.blade.php b/resources/views/dashboard/_incentive.blade.php index f6e46070..97d637e4 100644 --- a/resources/views/dashboard/_incentive.blade.php +++ b/resources/views/dashboard/_incentive.blade.php @@ -128,11 +128,6 @@ {{ __('incentive.dashboard_btn_teaser') }} - - - {{ __('incentive.dashboard_btn_ranking') }} - @if ($incentiveParticipant) diff --git a/tests/Feature/Incentive/IncentiveVipOnlyTest.php b/tests/Feature/Incentive/IncentiveVipOnlyTest.php index 186e6638..8c319bef 100644 --- a/tests/Feature/Incentive/IncentiveVipOnlyTest.php +++ b/tests/Feature/Incentive/IncentiveVipOnlyTest.php @@ -42,6 +42,7 @@ function vipTestUser(int $admin = 0): User 'payment_account' => now()->addYear(), 'wizard' => 100, 'active' => 1, + 'active_date' => now()->subMonths(6), ]); } @@ -108,6 +109,24 @@ it('zeigt in der Navigation ein VIP-Badge am VIP-Incentive', function () { ->and($publicEntry)->not->toContain('badge badge-secondary'); }); +it('zeigt die Dashboard-Karte eines VIP-Incentives normalen Beratern nicht', function () { + vipOnlyChallenge(['name' => 'VIP Dashboard Challenge']); + + $this->actingAs(vipTestUser()); + $this->get(route('home'))->assertOk()->assertDontSee('VIP Dashboard Challenge'); +}); + +it('zeigt die Dashboard-Karte eines VIP-Incentives VIP-Konten mit nur einem Button zur Seite', function () { + vipOnlyChallenge(['name' => 'VIP Dashboard Challenge']); + + $this->actingAs(vipTestUser(admin: 1)); + $this->get(route('home'))->assertOk() + ->assertSee('VIP Dashboard Challenge') + ->assertSee(__('incentive.dashboard_btn_teaser')) + ->assertDontSee(__('incentive.dashboard_btn_ranking')) + ->assertDontSee('#ranking'); +}); + it('zeigt allen Beratern ein Incentive ohne VIP-Sperre', function () { $incentive = vipOnlyChallenge(['vip_only' => false]);