Initial commit
This commit is contained in:
95
xuexiao/routes/stop.py
Normal file
95
xuexiao/routes/stop.py
Normal file
@@ -0,0 +1,95 @@
|
||||
"""停课保号路由"""
|
||||
from datetime import datetime
|
||||
from flask import render_template, request, redirect, url_for, flash, session
|
||||
from models import db, Student, Course, StudentAccount, StopRecord
|
||||
from utils import login_required, log_operation, permission_required, export_excel
|
||||
import business_rules as rules
|
||||
|
||||
|
||||
def register_routes(app):
|
||||
|
||||
@app.route('/stops', endpoint='stop_list')
|
||||
@login_required
|
||||
@permission_required('stop_view')
|
||||
def stop_list():
|
||||
records = StopRecord.query.order_by(StopRecord.created_at.desc()).all()
|
||||
return render_template('stop_list.html', records=records)
|
||||
|
||||
@app.route('/stops/add', methods=['GET', 'POST'], endpoint='stop_add')
|
||||
@login_required
|
||||
@permission_required('stop_add')
|
||||
def stop_add():
|
||||
if request.method == 'POST':
|
||||
student_id = request.form.get('student_id')
|
||||
course_id = request.form.get('course_id')
|
||||
start_date_str = request.form.get('start_date')
|
||||
end_date_str = request.form.get('end_date')
|
||||
reason = request.form.get('reason', '')
|
||||
|
||||
start_date = datetime.strptime(start_date_str, '%Y-%m-%d').date() if start_date_str else None
|
||||
end_date = datetime.strptime(end_date_str, '%Y-%m-%d').date() if end_date_str else None
|
||||
|
||||
ok, msg = rules.validate_stop_period(start_date, end_date)
|
||||
if not ok:
|
||||
flash(msg, 'danger')
|
||||
return redirect(url_for('stop_add'))
|
||||
|
||||
account = StudentAccount.query.filter_by(
|
||||
student_id=student_id, course_id=course_id
|
||||
).first()
|
||||
if not account:
|
||||
flash('未找到该学员的课时账户', 'danger')
|
||||
return redirect(url_for('stop_add'))
|
||||
|
||||
if account.is_stopped:
|
||||
flash('该学员已在停课保号中', 'danger')
|
||||
return redirect(url_for('stop_add'))
|
||||
|
||||
account.is_stopped = 1
|
||||
account.stop_end_date = end_date
|
||||
|
||||
record = StopRecord(
|
||||
student_id=student_id, course_id=course_id,
|
||||
start_date=start_date, end_date=end_date,
|
||||
reason=reason, operator_id=session.get('user_id'), status=1,
|
||||
)
|
||||
db.session.add(record)
|
||||
db.session.commit()
|
||||
log_operation('停课保号', f'学员ID:{student_id} 停课至{end_date_str}')
|
||||
flash('停课保号成功', 'success')
|
||||
return redirect(url_for('stop_list'))
|
||||
|
||||
students = Student.query.filter_by(status=1).all()
|
||||
courses = Course.query.filter_by(status=1).all()
|
||||
return render_template('stop_form.html', students=students, courses=courses)
|
||||
|
||||
@app.route('/stops/resume/<int:record_id>', endpoint='stop_resume')
|
||||
@login_required
|
||||
@permission_required('stop_add')
|
||||
def stop_resume(record_id):
|
||||
from datetime import date as dt_date
|
||||
record = db.session.get(StopRecord, record_id)
|
||||
if record:
|
||||
if record.end_date and record.end_date > dt_date.today():
|
||||
flash(
|
||||
f'停课尚未结束(至 {record.end_date}),如需提前复课请由管理员确认',
|
||||
'warning',
|
||||
)
|
||||
record.status = 0
|
||||
account = StudentAccount.query.filter_by(
|
||||
student_id=record.student_id, course_id=record.course_id,
|
||||
).first()
|
||||
if account:
|
||||
account.is_stopped = 0
|
||||
account.stop_end_date = None
|
||||
db.session.commit()
|
||||
log_operation('复课', f'学员ID:{record.student_id} 复课')
|
||||
flash('复课成功', 'success')
|
||||
return redirect(url_for('stop_list'))
|
||||
|
||||
@app.route('/stops/export', endpoint='stop_export')
|
||||
@login_required
|
||||
@permission_required('stop_export')
|
||||
def stop_export():
|
||||
from utils import export_stops as do_export
|
||||
return do_export()
|
||||
Reference in New Issue
Block a user