from django import forms from .models import PurchaseOrder, PurchaseOrderItem from inventory.models import Product, Supplier class PurchaseOrderForm(forms.ModelForm): """Form for creating and editing purchase orders""" class Meta: model = PurchaseOrder fields = ['supplier', '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 supplier field queryset to only show active suppliers from inventory.models import Supplier self.fields['supplier'].queryset = Supplier.objects.filter(is_active=True).order_by('name') self.fields['supplier'].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_supplier_choices method as it's no longer needed class PurchaseOrderItemForm(forms.ModelForm): """Form for purchase order items""" class Meta: model = PurchaseOrderItem fields = ['product', 'quantity', 'unit_price', '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'})