diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc index 8f66768..53c4394 100644 Binary files a/routes/__pycache__/main.cpython-313.pyc and b/routes/__pycache__/main.cpython-313.pyc differ diff --git a/routes/main.py b/routes/main.py index 58d5a58..a3ac78f 100644 --- a/routes/main.py +++ b/routes/main.py @@ -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/') diff --git a/templates/settings/tabs/mails.html b/templates/settings/tabs/mails.html index e4938c0..be013ae 100644 --- a/templates/settings/tabs/mails.html +++ b/templates/settings/tabs/mails.html @@ -1,4 +1,4 @@ -{% macro mails_tab(mails, csrf_token, users, total_pages, current_page) %} +{% macro mails_tab(mails, csrf_token, users, total_pages, current_page, email_templates, status='', date_range='7d', user_id='', template_id='') %}
@@ -6,20 +6,26 @@
+