def add_player(): error = None if request.method == 'POST': insert_data = dict(request.form) insert_data['is_active'] = 'is_active' in insert_data.keys() try: player_id = Player.execute_insert([insert_data])[0] flash('Гравець створений', 'isa_success') return redirect(url_for('.player_info', player_id=player_id)) except mysql.connector.Error as err: flash(err.msg) cities = City.select_attrs(['id', 'name']) ranks = Rank.select_attrs(['id', 'name']) national_ranks = NationalRank.select_attrs(['id', 'name']) form = '\n'.join([ '<div class="container">', f'<form action="/players/add" method="post">', render_text_input_row("last_name", "Прізвище"), render_text_input_row("first_name", "Ім'я"), render_select_row('city_id', "Місто", cities), render_number_input_row('rating', "Рейтинг", '100', '3000', '0.001'), render_select_row('rank_id', "Ранг", ranks), render_select_row('national_rank_id', "Розряд", national_ranks), render_text_input_row("pin", "EGF PIN"), render_checkbox_row('is_active', "Активний"), render_submit(), '</form>', '</div>', ]) return render_template('add_player.html', form=form, error=error)
def add_tournament(): add_url = url_for('.add_tournament') if request.method == 'POST': file = request.files['file'] filename = file.filename if not filename: flash('Додайте файл з турнірними даними', 'isa_warning') return redirect(url_for('.add_tournament')) if not allowed_file(filename): flash('Файл має бути текстовим', 'isa_error') return redirect(url_for('.add_tournament')) insert_data = dict(request.form) insert_data['is_ranked'] = 'is_ranked' in insert_data.keys() insert_data['date_start'] = request.form.getlist('date_start')[0] insert_data['date_end'] = request.form.getlist('date_end')[0] tournament_id = None try: tournament_id = Tournament.execute_insert([insert_data])[0] parser = TournamentParser(file.read(), tournament_id) parser.run() except Exception: flash('Oops!', 'isa_error') if tournament_id: pairing_ids = Pairing.select_attrs( ['id'], {'tp.tournament_id': tournament_id}) existing_participant_ids = Participant.select_attrs( ['id'], {'tournament_id': tournament_id}) Pairing.execute_delete([p[0] for p in pairing_ids]) Participant.execute_delete( [p[0] for p in existing_participant_ids]) Tournament.execute_delete([tournament_id]) return redirect(url_for('.add_tournament')) return redirect( url_for('.tournament_info', tournament_id=tournament_id)) cities = City.select_attrs(['id', 'name']) form = '\n'.join([ '<div class="container">', f'<form action="{add_url}" enctype="multipart/form-data" method="post">', render_text_input_row("name", "Назва"), render_select_row('city_id', "Місто", cities), render_date_row('date_start', 'Дата початку', str(datetime.date.today())), render_date_row('date_end', 'Дата закінчення', str(datetime.date.today())), render_text_input_row("pin", "EGF PIN"), render_checkbox_row('is_ranked', "Рейтинговий"), render_file_row('file', 'Файл'), render_submit(), '</form>', '</div>', ]) return render_template('add_tournament.html', form=form)
def edit_player(player_id): if request.method == 'POST': update_data = dict(request.form) update_data['is_active'] = 'is_active' in update_data.keys() try: Player.execute_update(player_id, **update_data) flash('Дані гравця оновлені', 'isa_success') return redirect(url_for('.players')) except mysql.connector.Error as err: flash(err.msg, 'isa_error') return redirect(url_for('.player_info', player_id=player_id)) player = Player.execute_select({'id': player_id})[0] cities = City.select_attrs(['id', 'name']) ranks = Rank.select_attrs(['id', 'name']) national_ranks = NationalRank.select_attrs(['id', 'name']) form = '\n'.join([ '<div class="container">', f'<form action="/players/{player_id}/edit" method="post">', render_text_input_row("last_name", "Прізвище", player.last_name), render_text_input_row("first_name", "Ім'я", player.first_name), render_select_row('city_id', "Місто", cities, player.city.id), render_number_input_row('rating', "Рейтинг", '100', '3000', '0.001', player.rating), render_select_row('rank_id', "Ранг", ranks, player.rank.id), render_select_row('national_rank_id', "Розряд", national_ranks, player.national_rank.id), render_text_input_row("pin", "EGF PIN", player.pin), render_checkbox_row('is_active', "Активний", player.is_active), render_submit(), '</form>', '</div>', ]) return render_template('edit_player.html', player=player, form=form)
def edit_tournament(tournament_id): edit_url = url_for('.edit_tournament', tournament_id=tournament_id) if request.method == 'POST': update_data = dict(request.form) update_data['is_ranked'] = 'is_ranked' in update_data.keys() update_data['date_start'] = request.form.getlist('date_start')[0] update_data['date_end'] = request.form.getlist('date_end')[0] try: Tournament.execute_update(tournament_id, update_data) flash('Дані турніру оновлені', 'isa_success') return redirect( url_for('.tournament_info', tournament_id=tournament_id)) except mysql.connector.Error as err: flash(err.msg, 'isa_error') return redirect(edit_url) tournament = Tournament.execute_select({'id': tournament_id})[0] cities = City.select_attrs(['id', 'name']) form = '\n'.join([ '<div class="container">', f'<form action="{edit_url}" method="post">', render_text_input_row("name", "Назва", tournament.name), render_select_row('city_id', "Місто", cities, tournament.city.id), render_date_row('date_start', 'Дата початку', tournament.date_start), render_date_row('date_end', 'Дата закінчення', tournament.date_end), render_text_input_row("pin", "EGF PIN", tournament.pin), render_checkbox_row('is_ranked', "Рейтинговий", tournament.is_ranked), render_submit(), '</form>', '</div>', ]) return render_template('edit_tournament.html', tournament=tournament, form=form)