from flask import Blueprint, render_template, request, redirect, url_for, flash, session from app.models import WorkOrder, Customer, User, CalibrationType, Calibration from app.supabase_client import get_supabase from app.routes.auth import role_required work_orders_bp = Blueprint('work_orders', __name__) @work_orders_bp.route('/') @role_required('review') def list_work_orders(): """List all work orders""" work_orders = WorkOrder.get_all() if not work_orders: flash('No work orders found', 'info') return render_template('work_order_list.html', work_orders=work_orders, user=session) @work_orders_bp.route('/new') @role_required('review') def new_work_order(): """Display form to create new work order""" customers = Customer.get_all() users = User.get_all() calibration_types = CalibrationType.get_all() return render_template('work_order_form.html', customers=customers, users=users, calibration_types=calibration_types, user=session) @work_orders_bp.route('/', methods=['POST']) @role_required('review') def create_work_order(): """Handle new work order creation""" try: work_order = WorkOrder.create( order_number=request.form['order_number'], customer_id=request.form['customer_id'], assigned_to=request.form['assigned_to'], due_date=request.form['due_date'], status=request.form['status'], redmine=request.form.get('redmine'), cal_type=request.form['cal_type'] ) flash('Work order created successfully', 'success') return redirect(url_for('work_orders.list_work_orders')) except Exception as e: flash(f'Error creating work order: {str(e)}', 'danger') return redirect(url_for('work_orders.new_work_order')) @work_orders_bp.route('/') @role_required('review') def view_work_order(work_order_id): """View details of a single work order""" work_order = WorkOrder.get_by_id(work_order_id) if not work_order: flash('Work order not found', 'danger') return redirect(url_for('work_orders.list_work_orders')) # Get associated calibrations calibrations = Calibration.get_by_work_order(work_order_id) return render_template('work_order_view.html', work_order=work_order, calibrations=calibrations, user=session) @work_orders_bp.route('//status', methods=['POST']) @role_required('review') def update_status(work_order_id): """Update work order status""" work_order = WorkOrder.get_by_id(work_order_id) if not work_order: flash('Work order not found', 'danger') return redirect(url_for('work_orders.list_work_orders')) try: # Update status in database supabase = get_supabase() supabase.table('work_orders').update({ 'status': request.form['status'] }).eq('id', work_order_id).execute() flash('Status updated successfully', 'success') except Exception as e: flash(f'Error updating status: {str(e)}', 'danger') return redirect(url_for('work_orders.view_work_order', work_order_id=work_order_id))