The new updates of partners and user
Made-with: Cursor
This commit is contained in:
@@ -88,3 +88,110 @@ class LoginForm(AuthenticationForm):
|
||||
"placeholder": "Enter password"
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
class PartnerUserForm(forms.ModelForm):
|
||||
full_name = forms.CharField(
|
||||
max_length=150,
|
||||
required=True,
|
||||
label="Full Name"
|
||||
)
|
||||
password = forms.CharField(
|
||||
widget=forms.PasswordInput,
|
||||
label="Password",
|
||||
required=True,
|
||||
help_text="Required for new users. Leave blank if you don't want to change the password when editing."
|
||||
)
|
||||
confirm_password = forms.CharField(
|
||||
widget=forms.PasswordInput,
|
||||
label="Confirm Password",
|
||||
required=True
|
||||
)
|
||||
|
||||
phone_number = forms.CharField(
|
||||
max_length=15,
|
||||
required=False,
|
||||
label="Phone Number"
|
||||
)
|
||||
|
||||
ROLE_CHOICES = [
|
||||
('partner', 'Partner'),
|
||||
('partner_manager', 'Partner Manager'),
|
||||
('partner_staff', 'Partner Staff'),
|
||||
('partner_customer', 'Partner Customer'),
|
||||
]
|
||||
|
||||
role = forms.ChoiceField(
|
||||
choices=ROLE_CHOICES,
|
||||
required=True,
|
||||
label="Role"
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ["username", "email", "phone_number", "role"]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
for field in self.fields.values():
|
||||
field.widget.attrs.update({"class": "form-control"})
|
||||
|
||||
# Make password fields optional for updates, required for new users
|
||||
if self.instance and self.instance.pk:
|
||||
self.fields['password'].required = False
|
||||
self.fields['confirm_password'].required = False
|
||||
# Pre-populate full_name from first_name and last_name
|
||||
if self.instance.first_name or self.instance.last_name:
|
||||
self.fields['full_name'].initial = f"{self.instance.first_name} {self.instance.last_name}".strip()
|
||||
else:
|
||||
# For new users, password is required
|
||||
self.fields['password'].required = True
|
||||
self.fields['confirm_password'].required = True
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
password = cleaned_data.get("password")
|
||||
confirm_password = cleaned_data.get("confirm_password")
|
||||
|
||||
# For new users, password is required
|
||||
if not self.instance or not self.instance.pk:
|
||||
if not password:
|
||||
self.add_error("password", "Password is required for new users.")
|
||||
if not confirm_password:
|
||||
self.add_error("confirm_password", "Please confirm your password.")
|
||||
|
||||
# Validate password match if password is provided
|
||||
if password or confirm_password:
|
||||
if password != confirm_password:
|
||||
self.add_error("confirm_password", "Passwords do not match!")
|
||||
|
||||
return cleaned_data
|
||||
|
||||
def save(self, commit=True):
|
||||
user = super().save(commit=False)
|
||||
|
||||
# Set password - required for new users, optional for updates
|
||||
password = self.cleaned_data.get('password')
|
||||
if password:
|
||||
user.set_password(password)
|
||||
elif not user.pk:
|
||||
# New user must have a password
|
||||
raise ValueError("Password is required for new users.")
|
||||
|
||||
# Save phone_number and role to the User model
|
||||
user.phone_number = self.cleaned_data.get("phone_number")
|
||||
user.role = self.cleaned_data.get("role")
|
||||
|
||||
# Handle full_name - split into first_name and last_name
|
||||
full_name = self.cleaned_data.get("full_name", "").strip()
|
||||
if full_name:
|
||||
parts = full_name.split(None, 1)
|
||||
user.first_name = parts[0]
|
||||
if len(parts) > 1:
|
||||
user.last_name = parts[1]
|
||||
else:
|
||||
user.last_name = ""
|
||||
|
||||
if commit:
|
||||
user.save()
|
||||
return user
|
||||
|
||||
Reference in New Issue
Block a user