Incentive (E1): Titelbild der Challenge, Dashboard-Karte mit einem Button, VIP-Sichtbarkeit auf dem Dashboard getestet
Titelbild liegt unter public/img/incentive/recruiting-challenge-2026-27/, der Seeder traegt den Dateinamen ein. Die Dashboard-Karte verlinkt nur noch auf die eine Incentive-Seite, der Ranglisten-Button entfaellt. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
9b6717ca8a
commit
fb4313fbf7
5 changed files with 24 additions and 9 deletions
|
|
@ -14,7 +14,8 @@ use Illuminate\Database\Seeder;
|
||||||
*
|
*
|
||||||
* php artisan db:seed --class=RecruitingChallenge2026Seeder
|
* 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.
|
* "Nur fuer VIP sichtbar" gesetzt; nach Freigabe den Haken entfernen.
|
||||||
*/
|
*/
|
||||||
class RecruitingChallenge2026Seeder extends Seeder
|
class RecruitingChallenge2026Seeder extends Seeder
|
||||||
|
|
@ -46,7 +47,7 @@ class RecruitingChallenge2026Seeder extends Seeder
|
||||||
'include_sales_points' => false,
|
'include_sales_points' => false,
|
||||||
'status' => 0,
|
'status' => 0,
|
||||||
'vip_only' => true,
|
'vip_only' => true,
|
||||||
'image' => null,
|
'image' => 'incentive-recruiting-2026.jpg',
|
||||||
];
|
];
|
||||||
|
|
||||||
$incentive = Incentive::withTrashed()->where('slug', self::SLUG)->first();
|
$incentive = Incentive::withTrashed()->where('slug', self::SLUG)->first();
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ So im Seeder hinterlegt. Die Punkte 2 (Bestätigung als Voraussetzung), 6 (Gleic
|
||||||
|
|
||||||
## 7. Bild und Gestaltung
|
## 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/<slug>/`. Die Challenge bekommt nur ein Titelbild, also `public/img/incentive/recruiting-challenge-2026-27/<dateiname>.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.
|
Galerie (seit 22.09. getrennt): Jedes Incentive hat seinen eigenen Bildordner `public/img/incentive/<slug>/`. Die Challenge bekommt nur ein Titelbild, also `public/img/incentive/recruiting-challenge-2026-27/<dateiname>.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
|
- [ ] Fragen 1 bis 10 mit Dani/Alois entschieden
|
||||||
- [ ] Texte freigegeben (Name, Untertitel, Beschreibung, Bedingungen), ggf. Übersetzungen
|
- [ ] Texte freigegeben (Name, Untertitel, Beschreibung, Bedingungen), ggf. Übersetzungen
|
||||||
- [ ] Hero-Bild geliefert und abgelegt
|
- [x] Titelbild geliefert und abgelegt
|
||||||
- [ ] Gleichstandsregel deployt
|
- [ ] Gleichstandsregel deployt
|
||||||
- [ ] Deploy E1 und Seeder auf Produktion
|
- [ ] Deploy E1 und Seeder auf Produktion
|
||||||
- [ ] Challenge im Admin geprüft, Teaser und Rangliste angesehen
|
- [ ] Challenge im Admin geprüft, Teaser und Rangliste angesehen
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 110 KiB |
|
|
@ -128,11 +128,6 @@
|
||||||
<i class="ion ion-md-trophy mr-1"></i>
|
<i class="ion ion-md-trophy mr-1"></i>
|
||||||
{{ __('incentive.dashboard_btn_teaser') }}
|
{{ __('incentive.dashboard_btn_teaser') }}
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ route('user_incentive_teaser', [$activeIncentive->slug]) }}#ranking"
|
|
||||||
class="btn inc-dash-btn-secondary">
|
|
||||||
<i class="ion ion-md-list mr-1"></i>
|
|
||||||
{{ __('incentive.dashboard_btn_ranking') }}
|
|
||||||
</a>
|
|
||||||
@if ($incentiveParticipant)
|
@if ($incentiveParticipant)
|
||||||
<a href="{{ route('user_incentive_details', [$activeIncentive->slug]) }}"
|
<a href="{{ route('user_incentive_details', [$activeIncentive->slug]) }}"
|
||||||
class="btn inc-dash-btn-secondary">
|
class="btn inc-dash-btn-secondary">
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ function vipTestUser(int $admin = 0): User
|
||||||
'payment_account' => now()->addYear(),
|
'payment_account' => now()->addYear(),
|
||||||
'wizard' => 100,
|
'wizard' => 100,
|
||||||
'active' => 1,
|
'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');
|
->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 () {
|
it('zeigt allen Beratern ein Incentive ohne VIP-Sperre', function () {
|
||||||
$incentive = vipOnlyChallenge(['vip_only' => false]);
|
$incentive = vipOnlyChallenge(['vip_only' => false]);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue