from flask import Blueprint, render_template, redirect, url_for, flash, request from flask_login import login_required, current_user from extensions import db from models import OrgTeam, User teams_bp = Blueprint('teams', __name__, url_prefix='/teams') @teams_bp.route('') @login_required def list_teams(): can_manage = current_user.can_manage_teams() if current_user.role == 'coach': org_team = OrgTeam.query.filter_by(coach_id=current_user.id).first() teams = [org_team] if org_team else [] elif current_user.role in ['player', 'scout'] or can_manage: # Players and scouts can view all teams; managers/presidents can manage teams = OrgTeam.query.order_by(OrgTeam.name).all() else: flash('You do not have permission to view teams.', 'danger') return redirect(url_for('main.dashboard')) coaches = User.query.filter_by(role='coach').order_by(User.full_name).all() all_players = User.query.filter_by(role='player').order_by(User.full_name).all() return render_template('pages/teams.html', teams=teams, coaches=coaches, all_players=all_players, can_manage=can_manage) @teams_bp.route('/create', methods=['POST']) @login_required def create_team(): if not current_user.can_manage_teams(): flash('You do not have permission to create teams.', 'danger') return redirect(url_for('teams.list_teams')) name = request.form.get('name') coach_id = request.form.get('coach_id') if not name: flash('Team name is required.', 'danger') return redirect(url_for('teams.list_teams')) existing = OrgTeam.query.filter_by(name=name).first() if existing: flash(f'Team "{name}" already exists.', 'danger') return redirect(url_for('teams.list_teams')) team = OrgTeam( name=name, coach_id=int(coach_id) if coach_id else None, created_by=current_user.id ) db.session.add(team) db.session.commit() flash(f'Team "{name}" created successfully!', 'success') return redirect(url_for('teams.list_teams')) @teams_bp.route('//edit', methods=['POST']) @login_required def edit_team(team_id): team = OrgTeam.query.get_or_404(team_id) if not current_user.can_manage_this_org_team(team): flash('You do not have permission to edit this team.', 'danger') return redirect(url_for('teams.list_teams')) name = request.form.get('name') coach_id = request.form.get('coach_id') if not name: flash('Team name is required.', 'danger') return redirect(url_for('teams.list_teams')) existing = OrgTeam.query.filter(OrgTeam.name == name, OrgTeam.id != team_id).first() if existing: flash(f'Team "{name}" already exists.', 'danger') return redirect(url_for('teams.list_teams')) team.name = name team.coach_id = int(coach_id) if coach_id else None db.session.commit() flash(f'Team "{name}" updated successfully!', 'success') return redirect(url_for('teams.list_teams')) @teams_bp.route('//delete', methods=['POST']) @login_required def delete_team(team_id): if not current_user.can_manage_teams(): flash('You do not have permission to delete teams.', 'danger') return redirect(url_for('teams.list_teams')) team = OrgTeam.query.get_or_404(team_id) name = team.name # Check if any tryouts are targeting this team from models import Tryout tryouts = Tryout.query.filter_by(target_org_team_id=team_id).all() if tryouts: for t in tryouts: t.target_org_team_id = None db.session.commit() db.session.delete(team) db.session.commit() flash(f'Team "{name}" deleted successfully.', 'success') return redirect(url_for('teams.list_teams')) @teams_bp.route('//add_player', methods=['POST']) @login_required def add_player(team_id): team = OrgTeam.query.get_or_404(team_id) if not current_user.can_manage_this_org_team(team): flash('Permission denied.', 'danger') return redirect(url_for('teams.list_teams')) player_id = request.form.get('player_id') position = request.form.get('position', '') if not player_id: flash('Please select a player.', 'danger') return redirect(url_for('teams.list_teams')) player = User.query.get_or_404(int(player_id)) if player.role != 'player': flash('Can only assign players to teams.', 'danger') return redirect(url_for('teams.list_teams')) # If player already belongs to a different team, remove them first if player.team_id and player.team_id != team_id: old_team = OrgTeam.query.get(player.team_id) flash(f'{player.full_name} was moved from {old_team.name} to {team.name}.', 'info') elif player.team_id == team_id: flash(f'{player.full_name} is already on {team.name}.', 'info') return redirect(url_for('teams.list_teams')) player.team_id = team_id db.session.commit() flash(f'{player.full_name} added to {team.name}!', 'success') return redirect(url_for('teams.list_teams')) @teams_bp.route('//remove_player/', methods=['POST']) @login_required def remove_player(team_id, player_id): team = OrgTeam.query.get_or_404(team_id) if not current_user.can_manage_this_org_team(team): flash('Permission denied.', 'danger') return redirect(url_for('teams.list_teams')) player = User.query.get_or_404(player_id) if player.team_id != team_id: flash(f'{player.full_name} is not on {team.name}.', 'danger') return redirect(url_for('teams.list_teams')) player.team_id = None db.session.commit() flash(f'{player.full_name} removed from {team.name}.', 'success') return redirect(url_for('teams.list_teams'))