"""学员课时账户:手动调整(管理员)""" from flask import render_template, request, redirect, url_for, flash, session from models import db, Student, Course, StudentAccount from utils import login_required, permission_required, log_operation import business_rules as rules def register_routes(app): @app.route('/accounts/adjust', methods=['GET', 'POST'], endpoint='account_adjust') @login_required @permission_required('student_account_adjust') def account_adjust(): if request.method == 'POST': student_id = int(request.form.get('student_id')) course_id = int(request.form.get('course_id')) try: normal_delta = float(request.form.get('normal_delta', 0) or 0) gifted_delta = float(request.form.get('gifted_delta', 0) or 0) except ValueError: flash('课时调整值格式错误', 'danger') return redirect(url_for('account_adjust')) reason = request.form.get('reason', '').strip() account = rules.lock_student_account(student_id, course_id) if not account: account = StudentAccount(student_id=student_id, course_id=course_id) db.session.add(account) db.session.flush() before = rules.account_snapshot_dict(account) try: rules.manual_adjust_account( account, normal_delta=normal_delta, gifted_delta=gifted_delta, reason=reason, ) record = None db.session.commit() after = rules.account_snapshot_dict(account) log_operation( '手动调课时', f'学员{student_id} 课程{course_id} 正课{normal_delta:+} 赠课{gifted_delta:+} {reason}', before=before, after=after, commit=True, ) flash('课时调整成功', 'success') return redirect(url_for( 'account_adjust', student_id=student_id, course_id=course_id, )) except ValueError as e: db.session.rollback() flash(str(e), 'danger') student_id = request.args.get('student_id', type=int) course_id = request.args.get('course_id', type=int) account = None if student_id and course_id: account = StudentAccount.query.filter_by( student_id=student_id, course_id=course_id, ).first() students = Student.query.filter_by(status=1).order_by(Student.id.desc()).all() courses = Course.query.filter_by(status=1).all() return render_template( 'account_adjust.html', students=students, courses=courses, account=account, student_id=student_id, course_id=course_id, )