Django_Basic_Manufacturing/sales/forms.py
2025-08-19 12:28:49 +07:00

56 lines
2.5 KiB
Python

from django import forms
from .models import SaleOrder, SaleOrderItem
from inventory.models import Product, Customer
class SaleOrderForm(forms.ModelForm):
"""Form for creating and editing sales orders"""
class Meta:
model = SaleOrder
fields = ['customer', 'date', 'expected_delivery_date', 'status', 'notes', 'terms_conditions']
widgets = {
'date': forms.DateInput(attrs={'type': 'date'}),
'expected_delivery_date': forms.DateInput(attrs={'type': 'date'}),
'notes': forms.Textarea(attrs={'rows': 3}),
'terms_conditions': forms.Textarea(attrs={'rows': 3}),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Update the customer field queryset to only show active customers
from inventory.models import Customer
self.fields['customer'].queryset = Customer.objects.filter(is_active=True).order_by('name')
self.fields['customer'].widget.attrs.update({'class': 'form-control'})
# Add Bootstrap classes to other fields
for field in self.fields.values():
if isinstance(field.widget, (forms.CheckboxInput, forms.RadioSelect)):
field.widget.attrs.update({'class': 'form-check-input'})
elif isinstance(field.widget, forms.Textarea):
field.widget.attrs.update({'class': 'form-control'})
elif isinstance(field.widget, forms.DateInput):
field.widget.attrs.update({'class': 'form-control'})
elif not isinstance(field.widget, forms.Select): # Skip Select widgets as we already handled them
field.widget.attrs.update({'class': 'form-control'})
# Removed _get_customer_choices method as it's no longer needed
class SaleOrderItemForm(forms.ModelForm):
"""Form for sales order items"""
class Meta:
model = SaleOrderItem
fields = ['product', 'quantity', 'unit_price', 'discount_percent', 'description', 'notes']
widgets = {
'description': forms.TextInput(),
'notes': forms.Textarea(attrs={'rows': 2}),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Add Bootstrap classes
for field in self.fields.values():
if isinstance(field.widget, forms.Textarea):
field.widget.attrs.update({'class': 'form-control'})
else:
field.widget.attrs.update({'class': 'form-control'})