Django_Basic_Manufacturing/purchase/views.py

69 lines
2.8 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 PurchaseOrder, PurchaseOrderItem
from .forms import PurchaseOrderForm
@method_decorator(login_required, name='dispatch')
class PurchaseListView(ListView):
model = PurchaseOrder
template_name = 'purchase/purchase_list.html'
context_object_name = 'purchase_orders'
paginate_by = 20
@login_required
def purchase_create(request):
"""Create a new purchase order"""
if request.method == 'POST':
form = PurchaseOrderForm(request.POST)
if form.is_valid():
purchase_order = form.save(commit=False)
purchase_order.created_by = request.user
# Generate order number if not provided
if not purchase_order.order_number:
# Get the next order number
last_order = PurchaseOrder.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
purchase_order.order_number = f"PO-{new_number:06d}"
purchase_order.save()
messages.success(request, f'Purchase order "{purchase_order.order_number}" created successfully!')
return redirect('purchase:purchase_detail', pk=purchase_order.pk)
else:
form = PurchaseOrderForm()
return render(request, 'purchase/purchase_form.html', {'form': form, 'title': 'Create Purchase Order'})
@login_required
def purchase_delete(request, pk):
"""Delete a purchase order"""
from users.views import is_administrator
if not is_administrator(request.user):
messages.error(request, 'You do not have permission to delete purchase orders.')
return redirect('purchase:purchase_list')
purchase_order = get_object_or_404(PurchaseOrder, pk=pk)
if request.method == 'POST':
order_number = purchase_order.order_number
purchase_order.delete()
messages.success(request, f'Purchase order "{order_number}" deleted successfully!')
return redirect('purchase:purchase_list')
return render(request, 'purchase/purchase_confirm_delete.html', {'purchase_order': purchase_order})
@method_decorator(login_required, name='dispatch')
class PurchaseDetailView(DetailView):
model = PurchaseOrder
template_name = 'purchase/purchase_detail.html'
context_object_name = 'purchase_order'