Better fill codes

This commit is contained in:
2025-06-02 11:03:42 +02:00
parent fdef0c5f66
commit 11745f2eb8
5 changed files with 112 additions and 40 deletions

View File

@@ -1138,70 +1138,83 @@ def init_routes(main_bp):
@login_required
def mails():
if not current_user.is_admin:
flash('Only administrators can access mail logs.', 'error')
return redirect(url_for('main.dashboard'))
flash('You do not have permission to access settings.', 'error')
return redirect(url_for('main.index'))
# Get filter parameters
status = request.args.get('status')
status = request.args.get('status', '')
date_range = request.args.get('date_range', '7d')
user_id = request.args.get('user_id')
user_id = request.args.get('user_id', '')
template_id = request.args.get('template_id', '')
page = request.args.get('page', 1, type=int)
per_page = 10
# Calculate date range
end_date = datetime.utcnow()
if date_range == '24h':
start_date = end_date - timedelta(days=1)
elif date_range == '7d':
start_date = end_date - timedelta(days=7)
elif date_range == '30d':
start_date = end_date - timedelta(days=30)
else:
start_date = None
# Build query
query = Mail.query
# Apply filters
if status:
query = query.filter_by(status=status)
if start_date:
query = query.filter(Mail.created_at >= start_date)
if user_id:
query = query.filter(Mail.recipient == User.query.get(user_id).email)
query = query.filter_by(recipient=user_id)
if template_id:
query = query.filter_by(template_id=template_id)
if date_range:
if date_range == '24h':
cutoff = datetime.utcnow() - timedelta(hours=24)
elif date_range == '7d':
cutoff = datetime.utcnow() - timedelta(days=7)
elif date_range == '30d':
cutoff = datetime.utcnow() - timedelta(days=30)
else:
cutoff = None
if cutoff:
query = query.filter(Mail.created_at >= cutoff)
# Get total count for pagination
total_mails = query.count()
total_pages = (total_mails + per_page - 1) // per_page
# Get paginated mails
# Get paginated results
mails = query.order_by(Mail.created_at.desc()).paginate(page=page, per_page=per_page)
total_pages = mails.pages
current_page = mails.page
# Get all users for filter dropdown
# Get all users for the filter dropdown
users = User.query.order_by(User.username).all()
# Get all email templates
email_templates = EmailTemplate.query.filter_by(is_active=True).all()
# Check if this is an AJAX request
if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
return render_template('settings/tabs/mails.html',
mails=mails.items,
mails=mails,
total_pages=total_pages,
current_page=page,
status=status,
date_range=date_range,
user_id=user_id,
template_id=template_id,
users=users,
email_templates=email_templates,
csrf_token=session.get('csrf_token'))
# For full page requests, render the full settings page
site_settings = SiteSettings.get_settings()
company_form = CompanySettingsForm()
return render_template('settings/settings.html',
primary_color=site_settings.primary_color,
secondary_color=site_settings.secondary_color,
active_tab='mails',
site_settings=site_settings,
mails=mails.items,
mails=mails,
total_pages=total_pages,
current_page=page,
status=status,
date_range=date_range,
user_id=user_id,
template_id=template_id,
users=users,
email_templates=email_templates,
form=company_form,
csrf_token=session.get('csrf_token'))
@main_bp.route('/settings/mails/<int:mail_id>')