88 lines
3.3 KiB
Python
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))
|