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'})