Gründer-Tickets: 50%-Rabatt-Weitergabe pro Gründer gedeckelt + Pro-Wording korrigiert
Rene: 'ungern jemandem auf ewig die Möglichkeit geben 50% Rabatt zu vergeben — bei 100 Gründern ein großer Faktor. Ich hätte jedem 25–50 Tickets gegeben.' - users.founder_referral_tickets (Default 25): Kontingent an 50%-Rabatten, die ein Gründer an Geworbene weitergeben kann. Technisch = die ersten N VERIFIZIERTEN Geworbenen (nach Anmeldedatum) bekommen 50%, danach 0. Unbestätigte verbrauchen kein Ticket. In scheduler.py (Rechnung) + admin.py (Vorschau) konsistent. - BUGFIX nebenbei: admin.py zeigte für referred_by_founder fälschlich 100% statt 50% (scheduler war korrekt) — jetzt beide 50%. - Admin: Grant-Formular bekommt Feld 'Gründer-Tickets' (0–200, Vorbelegung aus User-Stand); Endpoint /grant akzeptiert founder_tickets. - Gründer-Seite + Settings + Admin-Hilfe: 'sobald Bezahlfunktionen aktiv sind' raus (Pro kostet bereits); Vorteil 'lebenslang Pro gratis' + '25 Freunde zum halben Preis' (Ticket-Framing). - Tests: test_founder_tickets.py (Cap, Unverified-Schutz, 50%-Bugfix, Grant). Suite: 64 passed.
This commit is contained in:
parent
98ec6c36c6
commit
60fb866283
13 changed files with 154 additions and 35 deletions
|
|
@ -326,12 +326,22 @@ async def _create_renewal_invoice_draft(user: dict, expires: date, tier_label: s
|
|||
discount_reason = "founder"
|
||||
elif (disc_row["referred_by"] or 0) > 0:
|
||||
ref = conn.execute(
|
||||
"SELECT is_founder, is_founder_pending FROM users WHERE id=?",
|
||||
"SELECT is_founder, is_founder_pending, founder_referral_tickets FROM users WHERE id=?",
|
||||
(disc_row["referred_by"],)
|
||||
).fetchone()
|
||||
if ref and (ref["is_founder"] or ref["is_founder_pending"]):
|
||||
discount_pct = 50
|
||||
discount_reason = "referred_by_founder"
|
||||
# 50%-Weitergabe nur solange der Gründer Tickets hat: dieser Freund
|
||||
# bekommt sie, wenn sein Rang unter den verifizierten Geworbenen
|
||||
# (nach Anmeldedatum) das Ticket-Kontingent nicht übersteigt.
|
||||
rank = conn.execute(
|
||||
"""SELECT COUNT(*) FROM users
|
||||
WHERE referred_by=? AND email_verified=1
|
||||
AND created_at <= (SELECT created_at FROM users WHERE id=?)""",
|
||||
(disc_row["referred_by"], user["id"])
|
||||
).fetchone()[0]
|
||||
if rank <= (ref["founder_referral_tickets"] or 0):
|
||||
discount_pct = 50
|
||||
discount_reason = "referred_by_founder"
|
||||
if not discount_reason:
|
||||
for thr, pct in [(50, 50), (20, 30), (10, 20)]:
|
||||
if referral_count >= thr:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue