Recruiting Challenge: Firmenkonto ohne Rang und Praemie, Bedingungen Punkt 4 ergaenzt
Kundenentscheid 25.09.2026 zu den Regeln 4 bis 7: - Firmenkonto (mivita.company_user_id) steht in keiner Rangliste und bekommt keine Praemie; getrackt wird weiter, damit ein ueber den Firmenlink registrierter Partner nach dem Umhaengen mit umzieht - Bedingungen Punkt 4 (de/en/es/fr): auch Kunden, die Berater werden, zaehlen; massgeblich ist der aktuell hinterlegte Sponsor - Test: Anmeldung ueber den Firmenlink, Umhaengen, Wertung beim neuen Sponsor - Doku: Regeln 4 bis 7 entschieden Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e390d3b816
commit
f2aa30243f
8 changed files with 65 additions and 12 deletions
|
|
@ -47,6 +47,7 @@ class IncentiveController extends Controller
|
|||
// Datenschutz (Kundenentscheid 25.09.2026): Unbestaetigte Teilnehmer sehen nur VIP-Konten;
|
||||
// der eigene Eintrag bleibt fuer den Berater selbst sichtbar.
|
||||
$ranking = IncentiveParticipant::where('incentive_id', $incentive->id)
|
||||
->whereNotIn('user_id', IncentiveParticipant::excludedUserIds())
|
||||
->withRankingActivity()
|
||||
->when(! $user->isVIP(), fn ($query) => $query->where(
|
||||
fn ($visible) => $visible->whereNotNull('accepted_terms_at')->orWhere('user_id', $user->id)
|
||||
|
|
|
|||
|
|
@ -190,6 +190,19 @@ class IncentiveParticipant extends Model
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Konten, die in keiner Rangliste stehen und nichts ausgezahlt bekommen: das Firmenkonto
|
||||
* (Kundenentscheid 25.09.2026). Getrackt wird beim Firmenkonto
|
||||
* trotzdem, damit ein Neupartner nach dem Umhaengen auf den richtigen Sponsor
|
||||
* (Anmeldung ueber den Firmenlink) mit seiner Wertung umzieht.
|
||||
*
|
||||
* @return list<int>
|
||||
*/
|
||||
public static function excludedUserIds(): array
|
||||
{
|
||||
return array_values(array_filter([(int) config('mivita.company_user_id')]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alle Berater (User mit m_level) als Teilnehmer anlegen, damit Punkte im Qualifikationszeitraum ohne Checkbox mitlaufen.
|
||||
*
|
||||
|
|
@ -201,6 +214,7 @@ class IncentiveParticipant extends Model
|
|||
|
||||
User::query()
|
||||
->where('id', '!=', 1)
|
||||
->whereNotIn('id', self::excludedUserIds())
|
||||
->whereNull('deleted_at')
|
||||
->where('admin', '<', 4)
|
||||
->whereNotNull('m_level')
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ class IncentivePayoutService
|
|||
{
|
||||
return IncentiveParticipant::query()
|
||||
->where('incentive_id', $incentive->id)
|
||||
->whereNotIn('user_id', IncentiveParticipant::excludedUserIds())
|
||||
->with('user', 'user.account')
|
||||
->orderByRankNullsLast()
|
||||
->orderByDesc('qualified_partners')
|
||||
|
|
|
|||
|
|
@ -350,6 +350,7 @@ class IncentiveTracker
|
|||
$with_points = IncentiveParticipant::where('incentive_id', $incentive->id)
|
||||
->where('total_points', '>', 0)
|
||||
->whereNotNull('accepted_terms_at')
|
||||
->whereNotIn('user_id', IncentiveParticipant::excludedUserIds())
|
||||
->get();
|
||||
|
||||
$reached_at = self::pointsReachedAtByParticipant($incentive, $with_points->pluck('id')->all());
|
||||
|
|
@ -368,7 +369,9 @@ class IncentiveTracker
|
|||
|
||||
// Teilnehmer ohne Punkte oder ohne Bestaetigung: Rang entfernen
|
||||
IncentiveParticipant::where('incentive_id', $incentive->id)
|
||||
->where(fn ($query) => $query->where('total_points', '<=', 0)->orWhereNull('accepted_terms_at'))
|
||||
->where(fn ($query) => $query->where('total_points', '<=', 0)
|
||||
->orWhereNull('accepted_terms_at')
|
||||
->orWhereIn('user_id', IncentiveParticipant::excludedUserIds()))
|
||||
->whereNotNull('rank')
|
||||
->update(['rank' => null]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ HTML;
|
|||
<p><strong>1. Worum es geht.</strong> mivita veranstaltet die Recruiting Challenge 2026/27. Für jeden neuen Partner, den ein Berater im Aktionszeitraum gewinnt, zahlt mivita eine Prämie. Die drei Berater mit den meisten neuen Partnern erhalten zusätzlich einen Bonus.</p>
|
||||
<p><strong>2. Wer mitmachen kann.</strong> Alle Berater mit aktivem Beraterkonto. Die Teilnahme wird einmal im Backoffice bestätigt. Neue Partner werden ab dem 9. Oktober 2026 gezählt, egal wann die Bestätigung erfolgt. Ohne Bestätigung erscheint der Berater nicht in der Rangliste und erhält keine Auszahlung.</p>
|
||||
<p><strong>3. Aktionszeitraum.</strong> 9. Oktober 2026 bis 31. Januar 2027. Es zählt das Datum der bezahlten Registrierungsbestellung des neuen Partners.</p>
|
||||
<p><strong>4. Was zählt.</strong> Ein neuer Partner ist eine Person, die sich im Aktionszeitraum mit dem Teilnehmer als Sponsor als Berater registriert und ein Starterpaket bezahlt hat. Eine Registrierung nur mit Mitgliedschaft zählt nicht. Jeder neue Partner wird einmal gezählt. Die Rangliste ergibt sich aus der Anzahl neuer Partner.</p>
|
||||
<p><strong>4. Was zählt.</strong> Ein neuer Partner ist eine Person, die sich im Aktionszeitraum mit dem Teilnehmer als Sponsor als Berater registriert und ein Starterpaket bezahlt hat. Eine Registrierung nur mit Mitgliedschaft zählt nicht. Auch Kunden, die im Aktionszeitraum Berater werden, zählen als neue Partner. Jeder neue Partner wird einmal gezählt. Maßgeblich ist der Sponsor, der im System hinterlegt ist: Wird ein neuer Partner nachträglich einem anderen Sponsor zugeordnet, zum Beispiel nach einer Anmeldung über einen falschen Link, zählt er beim neuen Sponsor. Die Rangliste ergibt sich aus der Anzahl neuer Partner.</p>
|
||||
<p><strong>5. Prämie.</strong> 50 € je neuem Partner, ohne Obergrenze. Die Berater auf den Plätzen 1 bis 3 erhalten zusätzlich 500 €, 300 € und 200 €.</p>
|
||||
<p><strong>6. Gleichstand.</strong> Haben mehrere Berater die gleiche Anzahl neuer Partner, liegt vorn, wer diese Anzahl zuerst erreicht hat.</p>
|
||||
<p><strong>7. Widerruf und Storno.</strong> Widerruft ein neuer Partner seine Registrierung oder wird die Bestellung storniert, entfällt die Wertung für diesen Partner. In der eigenen Berechnung steht er dann als storniert. Stichtag ist die Auszahlung im Februar 2027, danach wird nicht mehr zurückgerechnet.</p>
|
||||
|
|
@ -157,7 +157,7 @@ HTML;
|
|||
<p><strong>1. What it is about.</strong> mivita is running the Recruiting Challenge 2026/27. For every new partner a consultant wins during the promotion period, mivita pays a reward. The three consultants with the most new partners also receive a bonus.</p>
|
||||
<p><strong>2. Who can take part.</strong> All consultants with an active consultant account. Participation is confirmed once in the back office. New partners are counted from 9 October 2026, regardless of when the confirmation is given. Without confirmation, the consultant does not appear in the ranking and receives no payout.</p>
|
||||
<p><strong>3. Promotion period.</strong> 9 October 2026 to 31 January 2027. The date on which the new partner paid the registration order counts.</p>
|
||||
<p><strong>4. What counts.</strong> A new partner is a person who registers as a consultant during the promotion period with the participant as sponsor and has paid for a starter kit. A registration with membership only does not count. Each new partner is counted once. The ranking is based on the number of new partners.</p>
|
||||
<p><strong>4. What counts.</strong> A new partner is a person who registers as a consultant during the promotion period with the participant as sponsor and has paid for a starter kit. A registration with membership only does not count. Customers who become consultants during the promotion period also count as new partners. Each new partner is counted once. The sponsor recorded in the system is decisive: if a new partner is later assigned to a different sponsor, for example after registering via the wrong link, they count for the new sponsor. The ranking is based on the number of new partners.</p>
|
||||
<p><strong>5. Reward.</strong> €50 per new partner, with no upper limit. The consultants in places 1 to 3 additionally receive €500, €300 and €200.</p>
|
||||
<p><strong>6. Tie.</strong> If several consultants have the same number of new partners, whoever reached that number first ranks ahead.</p>
|
||||
<p><strong>7. Withdrawal and cancellation.</strong> If a new partner withdraws their registration or the order is cancelled, that partner no longer counts and is marked as cancelled in the consultant's own calculation. The cut-off is the payout in February 2027; no recalculation takes place after that.</p>
|
||||
|
|
@ -175,7 +175,7 @@ HTML;
|
|||
<p><strong>1. De qué se trata.</strong> mivita organiza la Recruiting Challenge 2026/27. Por cada nuevo socio que un asesor consiga durante el periodo de la promoción, mivita paga una prima. Los tres asesores con más socios nuevos reciben además un bonus.</p>
|
||||
<p><strong>2. Quién puede participar.</strong> Todos los asesores con una cuenta de asesor activa. La participación se confirma una vez en el backoffice. Los nuevos socios se cuentan a partir del 9 de octubre de 2026, independientemente de cuándo se confirme. Sin confirmación, el asesor no aparece en la clasificación y no recibe ningún pago.</p>
|
||||
<p><strong>3. Periodo de la promoción.</strong> Del 9 de octubre de 2026 al 31 de enero de 2027. Cuenta la fecha en que el nuevo socio pagó el pedido de registro.</p>
|
||||
<p><strong>4. Qué cuenta.</strong> Un nuevo socio es una persona que, durante el periodo de la promoción, se registra como asesor con el participante como patrocinador y ha pagado un kit de inicio. Un registro solo con membresía no cuenta. Cada nuevo socio se cuenta una vez. La clasificación se basa en el número de socios nuevos.</p>
|
||||
<p><strong>4. Qué cuenta.</strong> Un nuevo socio es una persona que, durante el periodo de la promoción, se registra como asesor con el participante como patrocinador y ha pagado un kit de inicio. Un registro solo con membresía no cuenta. También cuentan como nuevos socios los clientes que se conviertan en asesores durante el periodo de la promoción. Cada nuevo socio se cuenta una vez. Es determinante el patrocinador registrado en el sistema: si un nuevo socio se asigna posteriormente a otro patrocinador, por ejemplo tras registrarse a través de un enlace equivocado, cuenta para el nuevo patrocinador. La clasificación se basa en el número de socios nuevos.</p>
|
||||
<p><strong>5. Prima.</strong> 50 € por cada nuevo socio, sin límite. Los asesores en los puestos 1 a 3 reciben además 500 €, 300 € y 200 €.</p>
|
||||
<p><strong>6. Empate.</strong> Si varios asesores tienen el mismo número de socios nuevos, queda por delante quien alcanzó ese número primero.</p>
|
||||
<p><strong>7. Desistimiento y anulación.</strong> Si un nuevo socio revoca su registro o se anula el pedido, ese socio deja de contar y aparece como anulado en el cálculo propio del asesor. La fecha límite es el pago en febrero de 2027; después ya no se recalcula.</p>
|
||||
|
|
@ -193,7 +193,7 @@ HTML;
|
|||
<p><strong>1. De quoi s’agit-il.</strong> mivita organise la Recruiting Challenge 2026/27. Pour chaque nouveau partenaire qu’un conseiller recrute pendant la période de l’opération, mivita verse une prime. Les trois conseillers ayant le plus de nouveaux partenaires reçoivent en plus un bonus.</p>
|
||||
<p><strong>2. Qui peut participer.</strong> Tous les conseillers disposant d’un compte conseiller actif. La participation est confirmée une fois dans le back-office. Les nouveaux partenaires sont comptés à partir du 9 octobre 2026, quelle que soit la date de confirmation. Sans confirmation, le conseiller n’apparaît pas dans le classement et ne reçoit aucun versement.</p>
|
||||
<p><strong>3. Période de l’opération.</strong> Du 9 octobre 2026 au 31 janvier 2027. C’est la date à laquelle le nouveau partenaire a payé la commande d’inscription qui compte.</p>
|
||||
<p><strong>4. Ce qui compte.</strong> Un nouveau partenaire est une personne qui s’inscrit comme conseiller pendant la période de l’opération avec le participant comme parrain et qui a payé un kit de démarrage. Une inscription avec adhésion seule ne compte pas. Chaque nouveau partenaire est compté une fois. Le classement se base sur le nombre de nouveaux partenaires.</p>
|
||||
<p><strong>4. Ce qui compte.</strong> Un nouveau partenaire est une personne qui s’inscrit comme conseiller pendant la période de l’opération avec le participant comme parrain et qui a payé un kit de démarrage. Une inscription avec adhésion seule ne compte pas. Les clients qui deviennent conseillers pendant la période de l’opération comptent également comme nouveaux partenaires. Chaque nouveau partenaire est compté une fois. C’est le parrain enregistré dans le système qui fait foi : si un nouveau partenaire est ensuite rattaché à un autre parrain, par exemple après une inscription via un mauvais lien, il compte pour le nouveau parrain. Le classement se base sur le nombre de nouveaux partenaires.</p>
|
||||
<p><strong>5. Prime.</strong> 50 € par nouveau partenaire, sans plafond. Les conseillers classés aux places 1 à 3 reçoivent en plus 500 €, 300 € et 200 €.</p>
|
||||
<p><strong>6. Égalité.</strong> Si plusieurs conseillers ont le même nombre de nouveaux partenaires, celui qui a atteint ce nombre en premier est classé devant.</p>
|
||||
<p><strong>7. Rétractation et annulation.</strong> Si un nouveau partenaire se rétracte ou si la commande est annulée, ce partenaire n’est plus pris en compte et apparaît comme annulé dans le calcul personnel du conseiller. La date limite est le versement en février 2027 ; aucun recalcul n’a lieu ensuite.</p>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Recruiting Challenge Oktober 2026 bis Januar 2027: Inhalte und Abstimmung
|
||||
|
||||
**Stand:** 25.09.2026 · **Live seit 23.09.** (nur VIP sichtbar). Start verschoben auf den **9. Oktober** (Kundenentscheid 25.09.), Texte entsprechend angepasst, EN/ES/FR-Übersetzungen im Seeder. Gleichstandsregel und Zählung nach Zahlungsdatum sind live, Abos zählen nicht (Schalter „Abos berücksichtigen“ aus). Storno-Regel und „nur bestätigte Teilnehmer in Rangliste und Auszahlung“ umgesetzt 25.09. (Deploy offen). Offen: nach dem Deploy Seeder einspielen (Datum, Übersetzungen, Bedingungen Punkt 2 und 7), Freigabe für alle Berater nach der Verkündung im Call, Regelfragen 4 bis 7 in Abschnitt 9.
|
||||
**Stand:** 25.09.2026 · **Live seit 23.09.** (nur VIP sichtbar). Start verschoben auf den **9. Oktober** (Kundenentscheid 25.09.), Texte entsprechend angepasst, EN/ES/FR-Übersetzungen im Seeder. Gleichstandsregel und Zählung nach Zahlungsdatum sind live, Abos zählen nicht (Schalter „Abos berücksichtigen“ aus). Storno-Regel und „nur bestätigte Teilnehmer in Rangliste und Auszahlung“ umgesetzt 25.09. (Deploy offen). Offen: nach dem Deploy Seeder einspielen (Datum, Übersetzungen, Bedingungen Punkt 2 und 7), Freigabe für alle Berater nach der Verkündung im Call. Alle Regelfragen sind entschieden (25.09.).
|
||||
**Bezug:** [Entwicklungsplan E1](entwicklungsplan-protokoll-september-2026.md#e1--recruiting-challenge-oktoberjanuar--live-seit-2309-nur-vip-start-0910)
|
||||
|
||||
---
|
||||
|
|
@ -73,7 +73,7 @@ So im Seeder hinterlegt. Die Punkte 2 (Bestätigung als Voraussetzung), 6 (Gleic
|
|||
>
|
||||
> **3. Aktionszeitraum.** 9. Oktober 2026 bis 31. Januar 2027. Es zählt das Datum der bezahlten Registrierungsbestellung des neuen Partners.
|
||||
>
|
||||
> **4. Was zählt.** Ein neuer Partner ist eine Person, die sich im Aktionszeitraum mit dem Teilnehmer als Sponsor als Berater registriert und ein Starterpaket bezahlt hat. Eine Registrierung nur mit Mitgliedschaft zählt nicht. Jeder neue Partner wird einmal gezählt. Die Rangliste ergibt sich aus der Anzahl neuer Partner.
|
||||
> **4. Was zählt.** Ein neuer Partner ist eine Person, die sich im Aktionszeitraum mit dem Teilnehmer als Sponsor als Berater registriert und ein Starterpaket bezahlt hat. Eine Registrierung nur mit Mitgliedschaft zählt nicht. Auch Kunden, die im Aktionszeitraum Berater werden, zählen als neue Partner. Jeder neue Partner wird einmal gezählt. Maßgeblich ist der Sponsor, der im System hinterlegt ist: Wird ein neuer Partner nachträglich einem anderen Sponsor zugeordnet, zum Beispiel nach einer Anmeldung über einen falschen Link, zählt er beim neuen Sponsor. Die Rangliste ergibt sich aus der Anzahl neuer Partner.
|
||||
>
|
||||
> **5. Prämie.** 50 € je neuem Partner, ohne Obergrenze. Die Berater auf den Plätzen 1 bis 3 erhalten zusätzlich 500 €, 300 € und 200 €.
|
||||
>
|
||||
|
|
@ -119,10 +119,10 @@ Bonushöhe ist entschieden (500 / 300 / 200 €). Übrig bleiben die Regelfragen
|
|||
| **1** | Gleichstand in den Top 3: wer gewinnt? Historisch liegen regelmäßig fünf bis sechs Berater gleichauf. | Wer die Anzahl zuerst erreicht hat | **Erledigt, live 25.09.** |
|
||||
| **2** | Widerruf oder Storno einer Registrierung: zählt der Neupartner weiter? | Nein, Wertung entfällt. Stichtag Auszahlung, danach keine Rückrechnung | **Entschieden 25.09., umgesetzt:** Automatik, in „Meine Berechnung“ als storniert sichtbar |
|
||||
| **3** | Muss die Teilnahme bestätigt sein, um die Prämie zu bekommen? | Ja | **Entschieden 25.09., umgesetzt:** gezählt wird für alle, Rang und Auszahlung nur mit Bestätigung; Unbestätigte sieht in der Rangliste nur VIP (Datenschutz). Bestätigung wirkt rückwirkend ab 09.10., auch wenn sie erst am 31.01. kommt (so gebaut). Keine automatische Erinnerung, das läuft über die internen Calls |
|
||||
| **4** | Auszahlungsweg: Gutschrift auf der Februar-Abrechnung, Überweisung, oder Gutschrift-PDF? | Gutschrift auf der Februar-Abrechnung, Liste aus dem Export | Automatische Gutschrift-Erzeugung: 1 bis 2 PT, sonst manuell in der Buchhaltung |
|
||||
| **5** | Zählt jedes Starterpaket gleich, oder erst ab einer Paketgröße? | Jedes Paket zählt (so gebaut) | Paketgrenze: 0,5 PT |
|
||||
| **6** | Zählen Kunden, die mit Starterpaket zum Berater werden? | Ja (so gebaut, wie Montenegro) | Ausschluss: 0,5 PT |
|
||||
| **7** | Sollen Admins, VIP-Konten und das Firmenkonto in der Rangliste mitspielen? | Nein, Sichtprüfung vor Auszahlung | Filter im Export: 0,25 PT |
|
||||
| **4** | Auszahlungsweg | XLSX-Export (nur bestätigte Teilnehmer) | **Entschieden 25.09.:** Export an die Buchhaltung, die Auszahlung regelt der Kunde. Nichts zu bauen |
|
||||
| **5** | Zählt jedes Starterpaket gleich, oder erst ab einer Paketgröße? | Jedes Paket zählt (so gebaut) | **Entschieden 25.09.:** jedes Paket 50 €. Eine Staffel (z. B. ALL IN) kann später nachgerüstet werden |
|
||||
| **6** | Zählen Kunden, die mit Starterpaket zum Berater werden? | Ja (so gebaut) | **Entschieden 25.09.:** ja, jeder neue Berater zählt. Satz in Punkt 4 der Bedingungen ergänzt. 2026 waren 80 von 136 Neupartnern vorher Kunde |
|
||||
| **7** | Sollen Admins, VIP-Konten und das Firmenkonto in der Rangliste mitspielen? | – | **Entschieden 25.09.:** VIP-Konten spielen mit, das Firmenkonto ist raus (kein Rang, keine Prämie, umgesetzt). Anmeldung über den falschen Link (oft Firmenkonto): nach dem Umhängen zählt der Partner beim neuen Sponsor, es zählt immer der aktuelle Stand im System (Nachtlauf, Satz in Punkt 4 der Bedingungen) |
|
||||
| **8** | Montenegro: wann auf "Beendet"? | Nach Bekanntgabe der Reiseteilnehmer, spätestens 05.10. | **Erledigt 25.09.** |
|
||||
| **9** | Challenge schon vor dem Start sichtbar ("bald geht es los")? | Ja, auf "Aktiv". Gezählt wird erst ab 09.10., die Rangliste ist bis dahin leer | keine |
|
||||
| **10** | Texte auch auf EN, ES, FR? | Ja | **Erledigt 25.09.:** Übersetzungen im Seeder, im Admin-Formular je Sprache änderbar |
|
||||
|
|
@ -150,7 +150,7 @@ Beim Deploy den Ordner `public/img/incentive/montenegro-incentive-2026/` mit hoc
|
|||
|
||||
## 12. Checkliste bis zum Start
|
||||
|
||||
- [ ] Fragen 4 bis 7 mit Dani/Alois entschieden (1, 2, 3, 8, 9, 10 erledigt)
|
||||
- [x] Fragen 1 bis 10 entschieden (25.09.)
|
||||
- [ ] Texte freigegeben (Name, Untertitel, Beschreibung, Bedingungen) inkl. Übersetzungen EN/ES/FR
|
||||
- [x] Titelbild geliefert und abgelegt
|
||||
- [x] Gleichstandsregel deployt (25.09.)
|
||||
|
|
|
|||
|
|
@ -513,6 +513,7 @@ Das Incentive-Modul trägt jetzt optional eine Geldprämie; Montenegro bleibt un
|
|||
- ~~**Stornos/Rücktritte:** Ein einmal getrackter Neupartner bleibt gezählt~~ — **umgesetzt 25.09. (Kundenentscheid 25.09.):** Ist jede bezahlte Starterpaket-Bestellung eines Neupartners storniert (Stornorechnung setzt `txaction = cancelled`, `paid` bleibt 1), bekommt die Tracking-Zeile `incentive_new_partners.cancelled_at` (Migration `2026_09_25_124017`), eine Storno-Logzeile nimmt die Einmalpunkte zurück. Der Partner zählt nicht mehr, steht in „Meine Berechnung“ aber durchgestrichen mit „Storniert am …, zählt nicht“. Läuft im Nachtlauf (`IncentivePointsLogRepairService::markCancelledPartners()`) und im Neuaufbau. Stichtag bleibt die Auszahlung: ein beendetes Incentive wird nicht mehr neu gerechnet.
|
||||
- **Nur bestätigte Teilnehmer in Rangliste und Auszahlung (Kundenentscheid 25.09.):** Gezählt wird für alle Berater. Einen Rang (und damit einen Gewinnerplatz) bekommen nur Teilnehmer mit bestätigter Teilnahme; ausgezahlt (Export, Summen) wird nur an sie. Aus Datenschutzgründen sehen andere Berater Unbestätigte in der Rangliste gar nicht mehr, auch nicht anonym; VIP-Konten sehen sie (mit Kennzeichen), der Berater sieht seinen eigenen Eintrag. Unbestätigte sehen ihre Prämie als „Deine Prämie nach Bestätigung“, im Admin steht „Teilnahme nicht bestätigt, keine Auszahlung“. Teilnahmebedingungen Punkt 2 und 7 in allen vier Sprachen angepasst (Seeder). Die Bestätigung wirkt rückwirkend: wer erst am 31.01. bestätigt, bekommt alle Neupartner ab 09.10. (entschieden 25.09., so gebaut). Keine automatische Erinnerung, das läuft über die internen Calls.
|
||||
- **Freigabe:** bleibt auf „Nur für VIP sichtbar“, bis die Challenge im Call (voraussichtlich KW 40) verkündet ist.
|
||||
- **Regeln 4 bis 7 (entschieden 25.09.):** Auszahlung über den Export, den Rest regelt der Kunde. Jedes Starterpaket zählt 50 € (Staffel später möglich). Jeder neue Berater zählt, auch wenn er vorher Kunde war (Satz in Punkt 4 der Bedingungen). VIP-Konten spielen mit; das Firmenkonto bekommt keinen Rang und keine Prämie (`IncentiveParticipant::excludedUserIds()`), wird aber weiter getrackt. Es zählt immer der aktuelle Sponsor im System: Wer sich über den falschen Link (oft das Firmenkonto) anmeldet und umgehängt wird, zählt nach dem nächsten Nachtlauf beim neuen Sponsor (`removeStaleSponsorTrackings` + `syncMissingTrackingPartners`, Test in `IncentivePartnerRepairSponsorChangeTest`).
|
||||
- Gutschrift-Erzeugung aus dem Export (siehe oben).
|
||||
- Firmenweite Rangliste (D2) unverändert offen; die Challenge-Rangliste ist wie Montenegro für alle aktiven Berater sichtbar.
|
||||
|
||||
|
|
|
|||
|
|
@ -508,3 +508,36 @@ describe('Storno der Starterpaket-Bestellung (Kundenentscheid 25.09.2026)', func
|
|||
expect($participant->fresh()->total_points)->toBe(600);
|
||||
})->with(['nachtlauf' => false, 'neuaufbau' => true]);
|
||||
});
|
||||
|
||||
describe('Anmeldung ueber den falschen Link (Kundenentscheid 25.09.2026)', function () {
|
||||
it('zaehlt nach dem Umhaengen vom Firmenkonto beim neuen Sponsor, das Firmenkonto bekommt weder Rang noch Praemie', function () {
|
||||
$incentive = repairTestCreateIncentive();
|
||||
$company = repairTestCreateUser();
|
||||
config(['mivita.company_user_id' => $company->id]);
|
||||
$sponsor = repairTestCreateUser();
|
||||
$sponsorParticipant = IncentiveParticipant::factory()->create([
|
||||
'incentive_id' => $incentive->id,
|
||||
'user_id' => $sponsor->id,
|
||||
]);
|
||||
|
||||
// Registriert ueber den Firmenlink: Live-Tracking legt die Wertung beim Firmenkonto an
|
||||
$partner = repairTestCreateUser($company->id);
|
||||
$order = repairTestCreateStarterKitOrder($partner, $company, '2026-05-05 10:00:00');
|
||||
IncentiveTracker::trackNewPartner($order);
|
||||
|
||||
$companyParticipant = IncentiveParticipant::where('incentive_id', $incentive->id)->where('user_id', $company->id)->firstOrFail();
|
||||
$companyParticipant->update(['accepted_terms_at' => now()]);
|
||||
IncentiveTracker::updateRanking($incentive);
|
||||
expect($companyParticipant->fresh()->qualified_partners)->toBe(1)
|
||||
->and($companyParticipant->fresh()->rank)->toBeNull();
|
||||
|
||||
// Admin haengt den Partner auf den richtigen Sponsor um
|
||||
$partner->forceFill(['m_sponsor' => $sponsor->id])->save();
|
||||
$this->artisan('incentive:calculate', ['incentive_id' => (string) $incentive->id])->assertSuccessful();
|
||||
|
||||
expect($sponsorParticipant->fresh()->qualified_partners)->toBe(1)
|
||||
->and($sponsorParticipant->fresh()->rank)->toBe(1)
|
||||
->and($companyParticipant->fresh()->qualified_partners)->toBe(0)
|
||||
->and(IncentiveParticipant::excludedUserIds())->toContain($company->id);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue