98 lines
4.1 KiB
Python
98 lines
4.1 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.views.generic import ListView, DetailView
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.utils.decorators import method_decorator
|
|
from django.contrib import messages
|
|
from .models import ManufacturingOrder
|
|
from .forms import ManufacturingOrderForm
|
|
|
|
@method_decorator(login_required, name='dispatch')
|
|
class ManufactureListView(ListView):
|
|
model = ManufacturingOrder
|
|
template_name = 'manufacture/manufacture_list.html'
|
|
context_object_name = 'manufacturing_orders'
|
|
paginate_by = 20
|
|
|
|
@login_required
|
|
def manufacture_create(request):
|
|
"""Create a new manufacturing order with simple input"""
|
|
if request.method == 'POST':
|
|
form = ManufacturingOrderForm(request.POST)
|
|
if form.is_valid():
|
|
manufacturing_order = form.save(commit=False)
|
|
manufacturing_order.created_by = request.user
|
|
# Generate order number if not provided
|
|
if not manufacturing_order.order_number:
|
|
# Get the next order number
|
|
last_order = ManufacturingOrder.objects.order_by('-id').first()
|
|
if last_order:
|
|
try:
|
|
last_number = int(last_order.order_number.split('-')[-1])
|
|
new_number = last_number + 1
|
|
except:
|
|
new_number = 1
|
|
else:
|
|
new_number = 1
|
|
manufacturing_order.order_number = f"MO-{new_number:06d}"
|
|
|
|
# Set status to completed by default for simplicity
|
|
manufacturing_order.status = 'completed'
|
|
manufacturing_order.save()
|
|
|
|
messages.success(request, f'Manufacturing order "{manufacturing_order.order_number}" created successfully!')
|
|
return redirect('manufacture:manufacture_detail', pk=manufacturing_order.pk)
|
|
else:
|
|
form = ManufacturingOrderForm()
|
|
|
|
return render(request, 'manufacture/manufacture_form.html', {'form': form, 'title': 'Create Manufacturing Order'})
|
|
|
|
@login_required
|
|
def manufacture_edit(request, pk):
|
|
"""Edit an existing manufacturing order"""
|
|
from users.views import is_administrator
|
|
if not is_administrator(request.user):
|
|
messages.error(request, 'You do not have permission to edit manufacturing orders.')
|
|
return redirect('manufacture:manufacture_detail', pk=pk)
|
|
|
|
manufacturing_order = get_object_or_404(ManufacturingOrder, pk=pk)
|
|
|
|
if request.method == 'POST':
|
|
form = ManufacturingOrderForm(request.POST, instance=manufacturing_order)
|
|
if form.is_valid():
|
|
form.save()
|
|
messages.success(request, f'Manufacturing order "{manufacturing_order.order_number}" updated successfully!')
|
|
return redirect('manufacture:manufacture_detail', pk=manufacturing_order.pk)
|
|
else:
|
|
form = ManufacturingOrderForm(instance=manufacturing_order)
|
|
|
|
return render(request, 'manufacture/manufacture_form.html', {
|
|
'form': form,
|
|
'title': 'Edit Manufacturing Order',
|
|
'manufacturing_order': manufacturing_order
|
|
})
|
|
|
|
@login_required
|
|
def manufacture_delete(request, pk):
|
|
"""Delete a manufacturing order"""
|
|
from users.views import is_administrator
|
|
if not is_administrator(request.user):
|
|
messages.error(request, 'You do not have permission to delete manufacturing orders.')
|
|
return redirect('manufacture:manufacture_list')
|
|
|
|
manufacturing_order = get_object_or_404(ManufacturingOrder, pk=pk)
|
|
|
|
if request.method == 'POST':
|
|
order_number = manufacturing_order.order_number
|
|
manufacturing_order.delete()
|
|
messages.success(request, f'Manufacturing order "{order_number}" deleted successfully!')
|
|
return redirect('manufacture:manufacture_list')
|
|
|
|
return render(request, 'manufacture/manufacture_confirm_delete.html', {'manufacturing_order': manufacturing_order})
|
|
|
|
|
|
@method_decorator(login_required, name='dispatch')
|
|
class ManufactureDetailView(DetailView):
|
|
model = ManufacturingOrder
|
|
template_name = 'manufacture/manufacture_detail.html'
|
|
context_object_name = 'manufacturing_order'
|