from django import forms from django.contrib.auth.forms import UserCreationForm, UserChangeForm from django.contrib.auth import get_user_model from .models import UserGroup User = get_user_model() class CustomUserCreationForm(UserCreationForm): """Form for creating new users""" class Meta(UserCreationForm.Meta): model = User fields = ('username', 'email', 'first_name', 'last_name', 'department', 'employee_id', 'phone', 'is_active', 'group') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Make password fields required self.fields['password1'].required = True self.fields['password2'].required = True # Add Bootstrap classes for field in self.fields.values(): if isinstance(field.widget, forms.PasswordInput): field.widget.attrs.update({'class': 'form-control'}) elif isinstance(field.widget, forms.CheckboxInput): field.widget.attrs.update({'class': 'form-check-input'}) else: field.widget.attrs.update({'class': 'form-control'}) class CustomUserForm(UserChangeForm): """Form for editing existing users""" class Meta: model = User fields = ('username', 'email', 'first_name', 'last_name', 'department', 'employee_id', 'phone', 'is_active', 'group') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Remove password field from edit form if 'password' in self.fields: del self.fields['password'] # Add Bootstrap classes for field in self.fields.values(): if isinstance(field.widget, forms.CheckboxInput): field.widget.attrs.update({'class': 'form-check-input'}) else: field.widget.attrs.update({'class': 'form-control'}) class UserGroupForm(forms.ModelForm): """Form for user groups""" # Add permission checkboxes manufacturing_permission = forms.BooleanField(required=False, label="Manufacturing Permission") inventory_permission = forms.BooleanField(required=False, label="Inventory Permission") purchase_permission = forms.BooleanField(required=False, label="Purchase Permission") sales_permission = forms.BooleanField(required=False, label="Sales Permission") user_management_permission = forms.BooleanField(required=False, label="User Management Permission") reporting_permission = forms.BooleanField(required=False, label="Reporting Permission") dashboard_permission = forms.BooleanField(required=False, label="Dashboard Permission") class Meta: model = UserGroup fields = ('name', 'description') widgets = { 'description': forms.Textarea(attrs={'rows': 3}), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Add Bootstrap classes for field in self.fields.values(): if isinstance(field.widget, forms.CheckboxInput): field.widget.attrs.update({'class': 'form-check-input'}) elif isinstance(field.widget, forms.Textarea): field.widget.attrs.update({'class': 'form-control'}) else: field.widget.attrs.update({'class': 'form-control'}) # If editing an existing group, populate permission checkboxes if self.instance and self.instance.pk: permissions = self.instance.get_permissions() self.fields['manufacturing_permission'].initial = permissions.get('manufacturing', False) self.fields['inventory_permission'].initial = permissions.get('inventory', False) self.fields['purchase_permission'].initial = permissions.get('purchase', False) self.fields['sales_permission'].initial = permissions.get('sales', False) self.fields['user_management_permission'].initial = permissions.get('user_management', False) self.fields['reporting_permission'].initial = permissions.get('reporting', False) self.fields['dashboard_permission'].initial = permissions.get('dashboard', False) def save(self, commit=True): group = super().save(commit=False) # Convert checkbox values to permissions dict permissions = { 'manufacturing': self.cleaned_data.get('manufacturing_permission', False), 'inventory': self.cleaned_data.get('inventory_permission', False), 'purchase': self.cleaned_data.get('purchase_permission', False), 'sales': self.cleaned_data.get('sales_permission', False), 'user_management': self.cleaned_data.get('user_management_permission', False), 'reporting': self.cleaned_data.get('reporting_permission', False), 'dashboard': self.cleaned_data.get('dashboard_permission', False), } group.permissions = permissions if commit: group.save() return group class ProfileEditForm(forms.ModelForm): """Form for editing user profile""" class Meta: model = User fields = ('first_name', 'last_name', 'email', 'phone', 'department', 'employee_id', 'profile_picture') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Add Bootstrap classes for field in self.fields.values(): if isinstance(field.widget, forms.FileInput): field.widget.attrs.update({'class': 'form-control'}) else: field.widget.attrs.update({'class': 'form-control'})