Django_Basic_Manufacturing/users/forms.py

127 lines
5.6 KiB
Python

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