Files
SmartScanProbeTrack/app/routes/work_orders.py

88 lines
3.3 KiB
Python

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('/<work_order_id>')
@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('/<work_order_id>/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))