feat: Add per-month rate override for adult fees
Mirror the junior fee override mechanism (JUNIOR_MONTHLY_RATE) for adults via ADULT_FEE_MONTHLY_RATE. Set 2026-03 override to 350 CZK. Rename FEE_FULL/FEE_SINGLE to ADULT_FEE_DEFAULT/ADULT_FEE_SINGLE for consistency. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -10,8 +10,11 @@ from config import ATTENDANCE_SHEET_ID as SHEET_ID, JUNIOR_SHEET_GID
|
|||||||
EXPORT_URL = f"https://docs.google.com/spreadsheets/d/{SHEET_ID}/export?format=csv&gid=0"
|
EXPORT_URL = f"https://docs.google.com/spreadsheets/d/{SHEET_ID}/export?format=csv&gid=0"
|
||||||
JUNIOR_EXPORT_URL = f"https://docs.google.com/spreadsheets/d/{SHEET_ID}/export?format=csv&gid={JUNIOR_SHEET_GID}"
|
JUNIOR_EXPORT_URL = f"https://docs.google.com/spreadsheets/d/{SHEET_ID}/export?format=csv&gid={JUNIOR_SHEET_GID}"
|
||||||
|
|
||||||
FEE_FULL = 750 # CZK, for 2+ practices in a month
|
ADULT_FEE_DEFAULT = 750 # CZK, for 2+ practices in a month
|
||||||
FEE_SINGLE = 200 # CZK, for exactly 1 practice in a month
|
ADULT_FEE_SINGLE = 200 # CZK, for exactly 1 practice in a month
|
||||||
|
ADULT_FEE_MONTHLY_RATE = {
|
||||||
|
"2026-03": 350
|
||||||
|
}
|
||||||
|
|
||||||
JUNIOR_FEE_DEFAULT = 500 # CZK for 2+ practices
|
JUNIOR_FEE_DEFAULT = 500 # CZK for 2+ practices
|
||||||
JUNIOR_MONTHLY_RATE = {
|
JUNIOR_MONTHLY_RATE = {
|
||||||
@@ -76,13 +79,13 @@ def group_by_month(dates: list[tuple[int, datetime]], merged_months: dict[str, s
|
|||||||
return months
|
return months
|
||||||
|
|
||||||
|
|
||||||
def calculate_fee(attendance_count: int) -> int:
|
def calculate_fee(attendance_count: int, month_key: str) -> int:
|
||||||
"""Apply fee rules: 0 → 0, 1 → 200, 2+ → 750."""
|
"""Apply fee rules: 0 → 0, 1 → 200, 2+ → configured rate (default 750)."""
|
||||||
if attendance_count == 0:
|
if attendance_count == 0:
|
||||||
return 0
|
return 0
|
||||||
if attendance_count == 1:
|
if attendance_count == 1:
|
||||||
return FEE_SINGLE
|
return ADULT_FEE_SINGLE
|
||||||
return FEE_FULL
|
return ADULT_FEE_MONTHLY_RATE.get(month_key, ADULT_FEE_DEFAULT)
|
||||||
|
|
||||||
|
|
||||||
def calculate_junior_fee(attendance_count: int, month_key: str) -> str | int:
|
def calculate_junior_fee(attendance_count: int, month_key: str) -> str | int:
|
||||||
@@ -186,7 +189,7 @@ def get_members_with_fees() -> tuple[list[tuple[str, str, dict[str, int]]], list
|
|||||||
for c in cols
|
for c in cols
|
||||||
if c < len(row) and row[c].strip().upper() == "TRUE"
|
if c < len(row) and row[c].strip().upper() == "TRUE"
|
||||||
)
|
)
|
||||||
fee = calculate_fee(count) if tier == "A" else 0
|
fee = calculate_fee(count, month_key) if tier == "A" else 0
|
||||||
month_fees[month_key] = (fee, count)
|
month_fees[month_key] = (fee, count)
|
||||||
members.append((name, tier, month_fees))
|
members.append((name, tier, month_fees))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user