Files
quality_app-v2/app/routes.py
Quality App Developer d5b043c762 Fix Docker build and add labels test data
- Fix Docker build issues:
  * Add missing system dependencies (build-essential, python3-dev, libpq-dev)
  * Fix requirements.txt formatting (separate Flask-Session and openpyxl)
  * Update openpyxl version to 3.1.5 (3.10.0 was invalid)
- Set proper folder permissions for Docker write access (app/ and data/)
- Add comprehensive test data for labels module:
  * 8 sample orders (TEST-ORD-001 through TEST-ORD-008)
  * Mix of printed/unprinted orders for testing
  * Various product types, customers, and delivery dates
  * Ready for QZ Tray printing functionality testing
- Include test data generation scripts for future use
- Application now fully containerized and ready for labels/printing testing
2026-02-15 12:05:20 +02:00

132 lines
4.1 KiB
Python
Executable File

"""
Main application routes (Login, Logout, Dashboard)
"""
from flask import (
Blueprint, render_template, request, session, redirect, url_for,
flash, current_app
)
from app.auth import authenticate_user, get_user_by_id
import logging
logger = logging.getLogger(__name__)
main_bp = Blueprint('main', __name__)
@main_bp.route('/', methods=['GET'])
def index():
"""Redirect to dashboard if logged in, otherwise to login"""
if 'user_id' in session:
return redirect(url_for('main.dashboard'))
return redirect(url_for('main.login'))
@main_bp.route('/login', methods=['GET', 'POST'])
def login():
"""Login page and authentication"""
if request.method == 'POST':
username = request.form.get('username', '').strip()
password = request.form.get('password', '')
if not username or not password:
flash('Username and password are required', 'error')
return render_template('login.html')
# Authenticate user
user = authenticate_user(username, password)
if user:
# Store user information in session
session.permanent = True
session['user_id'] = user['id']
session['username'] = user['username']
session['email'] = user['email']
session['role'] = user['role']
session['full_name'] = user['full_name']
session.modified = True # Force session to be saved
logger.info(f"User {username} logged in successfully")
logger.debug(f"Session data set: user_id={user['id']}, username={username}")
flash(f'Welcome, {user["full_name"]}!', 'success')
return redirect(url_for('main.dashboard'))
else:
flash('Invalid username or password', 'error')
logger.warning(f"Failed login attempt for user: {username}")
return render_template('login.html')
@main_bp.route('/dashboard', methods=['GET'])
def dashboard():
"""Main dashboard page"""
if 'user_id' not in session:
return redirect(url_for('main.login'))
user_id = session.get('user_id')
user = get_user_by_id(user_id)
if not user:
session.clear()
flash('User session invalid', 'error')
return redirect(url_for('main.login'))
modules = [
{
'name': 'Quality Module',
'description': 'Manage quality checks and inspections',
'icon': 'fa-check-circle',
'color': 'primary',
'url': url_for('quality.quality_index')
},
{
'name': 'Warehouse Module',
'description': 'Manage warehouse operations and inventory',
'icon': 'fa-warehouse',
'color': 'info',
'url': url_for('warehouse.warehouse_index')
},
{
'name': 'Label Printing',
'description': 'Print and manage thermal labels for orders',
'icon': 'fa-print',
'color': 'success',
'url': url_for('labels.labels_index')
},
{
'name': 'Settings',
'description': 'Configure application settings',
'icon': 'fa-cog',
'color': 'secondary',
'url': url_for('settings.settings_index')
}
]
return render_template('dashboard.html', user=user, modules=modules)
@main_bp.route('/logout', methods=['GET', 'POST'])
def logout():
"""Logout user"""
username = session.get('username', 'Unknown')
session.clear()
logger.info(f"User {username} logged out")
flash('You have been logged out successfully', 'success')
return redirect(url_for('main.login'))
@main_bp.route('/profile', methods=['GET'])
def profile():
"""User profile page"""
if 'user_id' not in session:
return redirect(url_for('main.login'))
user_id = session.get('user_id')
user = get_user_by_id(user_id)
if not user:
session.clear()
return redirect(url_for('main.login'))
return render_template('profile.html', user=user)