Recruiting Challenge: Rangliste nach Umsatz der Neupartner, Steuerpflicht

- 50 EUR je Neupartner bleiben; die Top 3 (500/300/200 EUR) ermittelt
  jetzt der Umsatz der Neupartner (wie Montenegro, ohne Einmalpunkte/Abos)
- Gleichstand bei Umsatzwertung: vorn liegt, wessen letzte gezaehlte
  Umsatzbuchung frueher kam
- Challenge-Seite: Praemie und Top-3-Darstellung auch bei Umsatzwertung,
  Ranglisten-Hinweis auf Umsatz (DE/EN/ES/FR)
- Seeder: neue Texte und Bedingungen (Rangliste, Steuerpflicht,
  vergünstigter Einstieg bis 31.10.), gleicht Wertung beim Einspielen ab

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-10-08 16:19:30 +00:00
parent 0a3eb791d4
commit fe1a9478f4
12 changed files with 239 additions and 79 deletions

View file

@ -211,6 +211,7 @@ return [
'payout_top_bonus_text' => 'Zusatz-Bonus für die Top :n: :list.',
'payout_rank_label' => 'Platz :n',
'payout_ranking_hint' => 'Die Rangliste zählt deine Neupartner mit Starterpaket im Qualifikationszeitraum. Die Auszahlung erfolgt gesammelt nach Ende des Zeitraums.',
'payout_ranking_sales_hint' => 'Die Rangliste zählt den Umsatz deiner Neupartner im Qualifikationszeitraum: Starterpaket, Eigen- und Kundenumsatz in Punkten. Die Auszahlung erfolgt gesammelt nach Ende des Zeitraums.',
'new_partners_short' => 'Neupartner',
'badge_challenge' => 'Challenge',
'export_user_id' => 'Berater-ID',

View file

@ -211,6 +211,7 @@ return [
'payout_top_bonus_text' => 'Extra bonus for the top :n: :list.',
'payout_rank_label' => 'Rank :n',
'payout_ranking_hint' => 'The ranking counts your new partners with a starter kit during the qualification period. Payout is made collectively after the period ends.',
'payout_ranking_sales_hint' => 'The ranking counts the sales of your new partners during the qualification period: starter kit, own and customer sales in points. Payout is made collectively after the period ends.',
'new_partners_short' => 'New partners',
'badge_challenge' => 'Challenge',
'export_user_id' => 'Consultant ID',

View file

@ -211,6 +211,7 @@ return [
'payout_top_bonus_text' => 'Bono adicional para el top :n: :list.',
'payout_rank_label' => 'Puesto :n',
'payout_ranking_hint' => 'El ranking cuenta tus nuevos socios con paquete de inicio durante el periodo de cualificación. El pago se realiza de forma conjunta al finalizar el periodo.',
'payout_ranking_sales_hint' => 'El ranking cuenta las ventas de tus nuevos socios durante el periodo de cualificación: paquete de inicio, ventas propias y de clientes en puntos. El pago se realiza de forma conjunta al finalizar el periodo.',
'new_partners_short' => 'Nuevos socios',
'badge_challenge' => 'Reto',
'export_user_id' => 'ID del asesor',

View file

@ -186,6 +186,7 @@ return [
'payout_top_bonus_text' => 'Bonus supplémentaire pour le top :n : :list.',
'payout_rank_label' => 'Place :n',
'payout_ranking_hint' => 'Le classement compte tes nouveaux partenaires avec kit de démarrage pendant la période de qualification. Le versement est effectué groupé après la fin de la période.',
'payout_ranking_sales_hint' => 'Le classement compte le chiffre d’affaires de tes nouveaux partenaires pendant la période de qualification : kit de démarrage, chiffre d’affaires personnel et clients en points. Le versement est effectué groupé après la fin de la période.',
'new_partners_short' => 'Nouveaux partenaires',
'badge_challenge' => 'Challenge',
'export_user_id' => 'ID du conseiller',

View file

@ -23,7 +23,7 @@
</ul>
<p class="text-muted small mb-0">
<i class="ion ion-md-information-circle mr-1"></i>
{{ __('incentive.payout_ranking_hint') }}
{{ $incentive->ranksBySalesOfNewPartners() ? __('incentive.payout_ranking_sales_hint') : __('incentive.payout_ranking_hint') }}
</p>
</div>
</div>

View file

@ -1381,7 +1381,7 @@
<span class="tile-label">{{ __('incentive.payout_per_partner_label') }}</span>
</div>
@endif
@if ($incentive->rankBonuses() !== [] && !$incentive->ranksByPartnerCount())
@if ($incentive->rankBonuses() !== [] && !$incentive->isCashChallenge())
<div>
<span class="tile-label d-block mb-1">{{ __('incentive.payout_top_bonus_title', ['n' => count($incentive->rankBonuses())]) }}</span>
@foreach ($incentive->rankBonuses() as $bonusRank => $bonusAmount)
@ -1415,7 +1415,7 @@
</div>
@endif
@if ($incentive->hasCashPayout() && $incentive->ranksByPartnerCount())
@if ($incentive->isCashChallenge())
{{-- Top 3 Bonus (Recruiting-Challenge) --}}
<div class="col-md-4">
<div class="card info-tile h-100 shadow-sm" id="incentive-bonus-tile">
@ -1468,7 +1468,7 @@
</div>
{{-- ===== SO FUNKTIONIERT DIE CHALLENGE (Geldpraemie) / PUNKTE-DETAIL ===== --}}
@if ($incentive->hasCashPayout() && $incentive->ranksByPartnerCount())
@if ($incentive->isCashChallenge())
<div class="points-section points-section-wide mb-5" id="incentive-how-it-works">
<h4 class="points-heading text-left">
<i class="ion ion-md-cash text-warning mr-1"></i>
@ -1490,7 +1490,7 @@
@if ($incentive->rankBonuses() !== [])
<li>{{ __('incentive.payout_top_bonus_text', ['n' => count($incentive->rankBonuses()), 'list' => collect($incentive->rankBonuses())->map(fn ($amount, $rank) => __('incentive.payout_rank_label', ['n' => $rank]).' '.\App\Services\Incentive\IncentivePayoutService::formatAmount($amount))->implode(', ')]) }}</li>
@endif
<li>{{ __('incentive.payout_ranking_hint') }}</li>
<li>{{ $incentive->ranksBySalesOfNewPartners() ? __('incentive.payout_ranking_sales_hint') : __('incentive.payout_ranking_hint') }}</li>
</ul>
</div>
</div>