create player on import
This commit is contained in:
1 parent
988f170ea4
commit
56c9a1084c
1 file changed
+23
-1
+23
-1
@@ -1256,7 +1256,7 @@ def import_ledger_csv(league_ref: str):
|
|||||||
list_ledger_events_for_league,
|
list_ledger_events_for_league,
|
||||||
session_event_ref,
|
session_event_ref,
|
||||||
)
|
)
|
||||||
from league_repositories import list_players_for_league, list_sessions_for_league
|
from league_repositories import create_player, list_players_for_league, list_sessions_for_league, unique_player_slug
|
||||||
from storage import CSV_HEADERS
|
from storage import CSV_HEADERS
|
||||||
|
|
||||||
league = require_league(league_ref, {"owner", "manager"})
|
league = require_league(league_ref, {"owner", "manager"})
|
||||||
@@ -1342,6 +1342,26 @@ def import_ledger_csv(league_ref: str):
|
|||||||
session_by_ref[ref] = new_session
|
session_by_ref[ref] = new_session
|
||||||
sessions_created += 1
|
sessions_created += 1
|
||||||
|
|
||||||
|
# Auto-create any players referenced in the CSV that don't exist yet.
|
||||||
|
# Only rows that need a player (not note/session_open/session_close) are considered.
|
||||||
|
non_player_types = {"note", "session_open", "session_close"}
|
||||||
|
missing_players: set[str] = set()
|
||||||
|
for row in csv.DictReader(lines):
|
||||||
|
raw_type = row.get("event_type", "").strip()
|
||||||
|
if canonical_event_type(raw_type) in non_player_types:
|
||||||
|
continue
|
||||||
|
name = row.get("player_name", "").strip()
|
||||||
|
if name and name.casefold() not in player_by_name:
|
||||||
|
missing_players.add(name)
|
||||||
|
|
||||||
|
players_created = 0
|
||||||
|
for name in sorted(missing_players):
|
||||||
|
slug = unique_player_slug(league.id, name)
|
||||||
|
new_player = create_player(league.id, name, slug)
|
||||||
|
db.session.flush()
|
||||||
|
player_by_name[name.casefold()] = new_player
|
||||||
|
players_created += 1
|
||||||
|
|
||||||
errors: list[str] = []
|
errors: list[str] = []
|
||||||
queued: list[dict] = []
|
queued: list[dict] = []
|
||||||
skipped = 0
|
skipped = 0
|
||||||
@@ -1415,5 +1435,7 @@ def import_ledger_csv(league_ref: str):
|
|||||||
parts = [f"Imported {s_count}", f"skipped {s_skip}"]
|
parts = [f"Imported {s_count}", f"skipped {s_skip}"]
|
||||||
if sessions_created:
|
if sessions_created:
|
||||||
parts.append(f"created {sessions_created} session{'s' if sessions_created != 1 else ''}")
|
parts.append(f"created {sessions_created} session{'s' if sessions_created != 1 else ''}")
|
||||||
|
if players_created:
|
||||||
|
parts.append(f"created {players_created} player{'s' if players_created != 1 else ''}")
|
||||||
flash(", ".join(parts) + ".", "success")
|
flash(", ".join(parts) + ".", "success")
|
||||||
return redirect(url_for("leagues.ledger", **league_url_values(league)))
|
return redirect(url_for("leagues.ledger", **league_url_values(league)))
|
||||||
Reference in new issue
Block a user